X-Git-Url: https://oss.titaniummirror.com/gitweb/?p=tinyos-2.x.git;a=blobdiff_plain;f=tos%2Fplatforms%2Fshimmer%2Fchips%2Fbluetooth%2FRovingNetworksP.nc;h=b6d7a55fd0440cf2cb78100768cb43262347b40f;hp=7f0b6b49f08014f66083944c93fa564fcc2c3d53;hb=d3e972cf3bcc1902d0b33276e72983573fadd94f;hpb=108491d3f8ff0981434b4ae98a5f89f6b320a662 diff --git a/tos/platforms/shimmer/chips/bluetooth/RovingNetworksP.nc b/tos/platforms/shimmer/chips/bluetooth/RovingNetworksP.nc index 7f0b6b49..b6d7a55f 100644 --- a/tos/platforms/shimmer/chips/bluetooth/RovingNetworksP.nc +++ b/tos/platforms/shimmer/chips/bluetooth/RovingNetworksP.nc @@ -65,11 +65,11 @@ implementation { uint8_t radioMode, charsSent, setupStep; bool discoverable, authenticate, encrypt, setNameRequest, setPINRequest, runDiscoveryRequest, resetDefaultsRequest, - setSvcClassRequest, setDevClassRequest, setSvcNameRequest, setCustomBaudrate, disableRemoteConfig, newMode, + setSvcClassRequest, setDevClassRequest, setSvcNameRequest, setRawBaudrate, setBaudrate, disableRemoteConfig, newMode, setCustomInquiryTime, setCustomPagingTime; norace bool transmissionOverflow, messageInProgress; - char expectedCommandResponse[8], newName[17], newPIN[17], newSvcClass[5], newDevClass[5], newSvcName[17], newBaudrate[5], - newInquiryTime[5], newPagingTime[5]; + char expectedCommandResponse[8], newName[17], newPIN[17], newSvcClass[5], newDevClass[5], newSvcName[17], newRawBaudrate[5], + newBaudrate[5], newInquiryTime[5], newPagingTime[5]; norace struct Message outgoingMsg; norace struct Message incomingMsg; @@ -134,12 +134,23 @@ implementation { ssel: 0x02, pena: 0, pev: 0, spb: 0, clen: 1,listen: 0, mm: 0, ckpl: 0, urxse: 0, urxeie: 0, urxwie: 0, utxe : 1, urxe :1} }; + call UARTControl.setModeUart(&RN_uart_config); // set to UART mode #ifdef USE_8MHZ_CRYSTAL // we need exact divisors, else the thing acts unpredictably call UARTControl.setUbr(0x08); call UARTControl.setUmctl(0xee); #endif - call UARTControl.setModeUart(&RN_uart_config); // set to UART mode + /* + * to run the bt module at 230k, first the application must configure it + * using its default uart speed of 115200, then reset the uart to 230k here + * see accompanying bluetoothBaudrateConfiguration.pdf doc for details + * yes, doc is written for tos-1.x, but setClockRate() is just broken into + * two calls here in tos-2.x + * + call UARTControl.setUbr(0x04); + call UARTControl.setUmctl(0x82); + */ + call UARTControl.enableTxIntr(); call UARTControl.enableRxIntr(); } @@ -209,9 +220,22 @@ implementation { * the supplied "rate_factor" is the baudrate * 0.004096 * this factor must be an integer value... */ - command void Bluetooth.setBaudrate(char * rate_factor){ - setCustomBaudrate = TRUE; - snprintf(newBaudrate, 5, "%s", rate_factor); + command void Bluetooth.setRawBaudrate(char * rate_factor){ + setRawBaudrate = TRUE; + snprintf(newRawBaudrate, 5, "%s", rate_factor); + } + + /* + * to set the baudrate of the BT to MSP serial interface + * as per RovingNetworks command spec EG "SU,96" or "SU,230" + * SU, - Baudrate, {1200, 2400, 4800, 9600, 19.2, + * 38.4, 57.6, 115K, 230K, 460K, 921K }, + * BUT, the MSP USARTS will not run at > 230K in UART mode, + * see MSP user guide + */ + command void Bluetooth.setBaudrate(char * new_baud){ + setBaudrate = TRUE; + snprintf(newBaudrate, 5, "%s", new_baud); } command void Bluetooth.setPIN(char * PIN){ @@ -334,9 +358,9 @@ implementation { } case 11: setupStep++; - if(setCustomBaudrate){ + if(setRawBaudrate){ // set the baudrate to suit the MSP430 running at 8Mhz - sprintf(commandbuf, "SZ,%s\r", newBaudrate); + sprintf(commandbuf, "SZ,%s\r", newRawBaudrate); writeCommand(commandbuf, "AOK"); break; } @@ -374,6 +398,15 @@ implementation { } break; case 15: + setupStep++; + if(setBaudrate){ + // set the baudrate to suit the MSP430 running at 8Mhz + sprintf(commandbuf, "SU,%s\r", newBaudrate); + writeCommand(commandbuf, "AOK"); + break; + } + + case 16: setupStep++; // exit command mode writeCommand("---\r", "END"); @@ -407,11 +440,12 @@ implementation { setSvcClassRequest = FALSE; setSvcNameRequest = FALSE; setDevClassRequest = FALSE; - setCustomBaudrate = FALSE; + setRawBaudrate = FALSE; disableRemoteConfig = FALSE; setCustomInquiryTime = FALSE; setCustomPagingTime = FALSE; - + setBaudrate = FALSE; + setupStep = 0; atomic *expectedCommandResponse = 0; // NULL pointer transmissionOverflow = FALSE, messageInProgress = FALSE;