Stephen Davis
/
BT_Hub
Library set up as dummy module on mbed to mimic Nordic.
main.cpp@2:9ab591cf81b8, 2016-12-13 (annotated)
- Committer:
- Stephen_NewVistas
- Date:
- Tue Dec 13 00:20:29 2016 +0000
- Revision:
- 2:9ab591cf81b8
- Parent:
- 1:d6b18299a715
everything commented . now going to strip out mbed stuff.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Stephen_NewVistas | 0:226550611f0d | 1 | //#define TEST |
Stephen_NewVistas | 0:226550611f0d | 2 | #define DEBUG |
Stephen_NewVistas | 0:226550611f0d | 3 | |
Stephen_NewVistas | 0:226550611f0d | 4 | #include "mbed.h" |
Stephen_NewVistas | 0:226550611f0d | 5 | #include "rtos.h" |
Stephen_NewVistas | 0:226550611f0d | 6 | #include "comms.h" |
Stephen_NewVistas | 0:226550611f0d | 7 | #include "rs485.h" |
Stephen_NewVistas | 0:226550611f0d | 8 | #include "uart1.h" |
Stephen_NewVistas | 1:d6b18299a715 | 9 | #include "BTpacket.h" |
Stephen_NewVistas | 0:226550611f0d | 10 | |
Stephen_NewVistas | 2:9ab591cf81b8 | 11 | extern const unsigned char DEVADDRESS = 0xF0; |
Stephen_NewVistas | 2:9ab591cf81b8 | 12 | #define NORDIC_ADDRESS DEVADDRESS |
Stephen_NewVistas | 2:9ab591cf81b8 | 13 | #define BTMODULE_A_ADDRESS 0x20 // #CC not sure if this has been defined by CEPD |
Stephen_NewVistas | 2:9ab591cf81b8 | 14 | #define BTMODULE_B_ADDRESS 0x22 // #CC not sure if this has been defined by CEPD |
Stephen_NewVistas | 2:9ab591cf81b8 | 15 | |
Stephen_NewVistas | 2:9ab591cf81b8 | 16 | enum Commands { FX1 = 0x10 , FX1_ACK = 0x90 , // #CC list the commands needed for the NORDIC Module |
Stephen_NewVistas | 2:9ab591cf81b8 | 17 | FX2 = 0x12 , FX2_ACK = 0x92 |
Stephen_NewVistas | 2:9ab591cf81b8 | 18 | }; |
Stephen_NewVistas | 0:226550611f0d | 19 | |
Stephen_NewVistas | 0:226550611f0d | 20 | /*=========================================== |
Stephen_NewVistas | 0:226550611f0d | 21 | * These functions need to be completed |
Stephen_NewVistas | 0:226550611f0d | 22 | * |
Stephen_NewVistas | 0:226550611f0d | 23 | */ |
Stephen_NewVistas | 0:226550611f0d | 24 | int Bluetooth_ReceivePacket( Packet * ); |
Stephen_NewVistas | 0:226550611f0d | 25 | int Bluetooth_SendChar( unsigned char ); |
Stephen_NewVistas | 2:9ab591cf81b8 | 26 | int Bluetooth_SerialHandler( void ); |
Stephen_NewVistas | 0:226550611f0d | 27 | /*==========================================*/ |
Stephen_NewVistas | 0:226550611f0d | 28 | |
Stephen_NewVistas | 2:9ab591cf81b8 | 29 | void Fx1( unsigned char * ); |
Stephen_NewVistas | 2:9ab591cf81b8 | 30 | void Fx2( unsigned char * ); |
Stephen_NewVistas | 0:226550611f0d | 31 | |
Stephen_NewVistas | 0:226550611f0d | 32 | |
Stephen_NewVistas | 0:226550611f0d | 33 | /*=========================================== |
Stephen_NewVistas | 0:226550611f0d | 34 | * |
Stephen_NewVistas | 0:226550611f0d | 35 | * |
Stephen_NewVistas | 0:226550611f0d | 36 | */ |
Stephen_NewVistas | 0:226550611f0d | 37 | void receivedSerialData( void ){ |
Stephen_NewVistas | 0:226550611f0d | 38 | while( uart1_is_char() ){ |
Stephen_NewVistas | 0:226550611f0d | 39 | SerialHandler( uart1_get_char() ); |
Stephen_NewVistas | 0:226550611f0d | 40 | } |
Stephen_NewVistas | 0:226550611f0d | 41 | } |
Stephen_NewVistas | 0:226550611f0d | 42 | |
Stephen_NewVistas | 0:226550611f0d | 43 | void bus_thread(void const *argument){ |
Stephen_NewVistas | 0:226550611f0d | 44 | while (true){ |
Stephen_NewVistas | 0:226550611f0d | 45 | receivedSerialData(); |
Stephen_NewVistas | 0:226550611f0d | 46 | wait_ms( 100 ); |
Stephen_NewVistas | 0:226550611f0d | 47 | } |
Stephen_NewVistas | 0:226550611f0d | 48 | } |
Stephen_NewVistas | 0:226550611f0d | 49 | |
Stephen_NewVistas | 0:226550611f0d | 50 | void Test( void ); |
Stephen_NewVistas | 2:9ab591cf81b8 | 51 | void PrintPacket( Packet *_packet ); |
Stephen_NewVistas | 0:226550611f0d | 52 | /*==========================================*/ |
Stephen_NewVistas | 0:226550611f0d | 53 | |
Stephen_NewVistas | 0:226550611f0d | 54 | int main() { |
Stephen_NewVistas | 0:226550611f0d | 55 | |
Stephen_NewVistas | 2:9ab591cf81b8 | 56 | RegisterCommand( FX1 , &Fx1 ); |
Stephen_NewVistas | 2:9ab591cf81b8 | 57 | RegisterCommand( FX2 , &Fx2 ); |
Stephen_NewVistas | 0:226550611f0d | 58 | |
Stephen_NewVistas | 0:226550611f0d | 59 | initComms(); |
Stephen_NewVistas | 0:226550611f0d | 60 | pc.printf( "\n\rStarted...\n\r" ); |
Stephen_NewVistas | 0:226550611f0d | 61 | init_uart1(); |
Stephen_NewVistas | 0:226550611f0d | 62 | |
Stephen_NewVistas | 0:226550611f0d | 63 | Thread bus( bus_thread , NULL , osPriorityRealtime , DEFAULT_STACK_SIZE ); |
Stephen_NewVistas | 0:226550611f0d | 64 | |
Stephen_NewVistas | 0:226550611f0d | 65 | while( true ){ }; |
Stephen_NewVistas | 0:226550611f0d | 66 | |
Stephen_NewVistas | 0:226550611f0d | 67 | #ifdef TEST |
Stephen_NewVistas | 0:226550611f0d | 68 | Test(); |
Stephen_NewVistas | 0:226550611f0d | 69 | #endif // DEBUG |
Stephen_NewVistas | 0:226550611f0d | 70 | |
Stephen_NewVistas | 0:226550611f0d | 71 | |
Stephen_NewVistas | 0:226550611f0d | 72 | } |
Stephen_NewVistas | 0:226550611f0d | 73 | |
Stephen_NewVistas | 2:9ab591cf81b8 | 74 | //================ Custom Functions ============================================= |
Stephen_NewVistas | 2:9ab591cf81b8 | 75 | /* These functions local functions to the Nordic chip that are exposed to the |
Stephen_NewVistas | 2:9ab591cf81b8 | 76 | * system. They must follow this prototype (same return values and parameter) |
Stephen_NewVistas | 2:9ab591cf81b8 | 77 | * and must be registered with a command using RegisterCommand() from RS485 |
Stephen_NewVistas | 2:9ab591cf81b8 | 78 | * library. |
Stephen_NewVistas | 2:9ab591cf81b8 | 79 | */ |
Stephen_NewVistas | 2:9ab591cf81b8 | 80 | void Fx1( unsigned char *_receivedData ){ |
Stephen_NewVistas | 2:9ab591cf81b8 | 81 | |
Stephen_NewVistas | 2:9ab591cf81b8 | 82 | pc.printf( "In FX1!\n\r" ); |
Stephen_NewVistas | 2:9ab591cf81b8 | 83 | |
Stephen_NewVistas | 2:9ab591cf81b8 | 84 | Packet packet; |
Stephen_NewVistas | 2:9ab591cf81b8 | 85 | packet.sourceID = 0xF0; |
Stephen_NewVistas | 2:9ab591cf81b8 | 86 | packet.deviceID = 0xFE; |
Stephen_NewVistas | 2:9ab591cf81b8 | 87 | packet.command = 0x90; |
Stephen_NewVistas | 2:9ab591cf81b8 | 88 | packet.packetData[0] = 0x22; |
Stephen_NewVistas | 2:9ab591cf81b8 | 89 | packet.packetLength = 0x01; |
Stephen_NewVistas | 2:9ab591cf81b8 | 90 | |
Stephen_NewVistas | 2:9ab591cf81b8 | 91 | SetResponsePacket( &packet ); |
Stephen_NewVistas | 2:9ab591cf81b8 | 92 | } |
Stephen_NewVistas | 0:226550611f0d | 93 | |
Stephen_NewVistas | 2:9ab591cf81b8 | 94 | void Fx2( unsigned char *_receivedData ){ |
Stephen_NewVistas | 0:226550611f0d | 95 | |
Stephen_NewVistas | 2:9ab591cf81b8 | 96 | pc.printf( "In FX2!\n\r" ); |
Stephen_NewVistas | 0:226550611f0d | 97 | |
Stephen_NewVistas | 0:226550611f0d | 98 | Packet packet; |
Stephen_NewVistas | 0:226550611f0d | 99 | packet.sourceID = 0xF0; |
Stephen_NewVistas | 0:226550611f0d | 100 | packet.deviceID = 0xFE; |
Stephen_NewVistas | 0:226550611f0d | 101 | packet.command = 0x90; |
Stephen_NewVistas | 0:226550611f0d | 102 | packet.packetData[0] = 0x22; |
Stephen_NewVistas | 0:226550611f0d | 103 | packet.packetLength = 0x01; |
Stephen_NewVistas | 0:226550611f0d | 104 | |
Stephen_NewVistas | 2:9ab591cf81b8 | 105 | SetResponsePacket( &packet ); |
Stephen_NewVistas | 0:226550611f0d | 106 | } |
Stephen_NewVistas | 2:9ab591cf81b8 | 107 | //================ End Custom Functions ========================================= |
Stephen_NewVistas | 0:226550611f0d | 108 | |
Stephen_NewVistas | 2:9ab591cf81b8 | 109 | //#CC This needs to handle the uart port and pass received bytes on |
Stephen_NewVistas | 2:9ab591cf81b8 | 110 | /****************************************************************************** |
Stephen_NewVistas | 2:9ab591cf81b8 | 111 | * Bluetooth_SerialHandler |
Stephen_NewVistas | 2:9ab591cf81b8 | 112 | * |
Stephen_NewVistas | 2:9ab591cf81b8 | 113 | * The UART port needs to be handled and when a byte is received it is passed on |
Stephen_NewVistas | 2:9ab591cf81b8 | 114 | * to SerialHandler() form the rs485 library. |
Stephen_NewVistas | 2:9ab591cf81b8 | 115 | * |
Stephen_NewVistas | 2:9ab591cf81b8 | 116 | * PreCondition: None |
Stephen_NewVistas | 2:9ab591cf81b8 | 117 | * |
Stephen_NewVistas | 2:9ab591cf81b8 | 118 | * Input: '_packet' - packet received from the bus. |
Stephen_NewVistas | 2:9ab591cf81b8 | 119 | * |
Stephen_NewVistas | 2:9ab591cf81b8 | 120 | * |
Stephen_NewVistas | 2:9ab591cf81b8 | 121 | * Output: None |
Stephen_NewVistas | 2:9ab591cf81b8 | 122 | * |
Stephen_NewVistas | 2:9ab591cf81b8 | 123 | * Side Effects: None |
Stephen_NewVistas | 2:9ab591cf81b8 | 124 | * |
Stephen_NewVistas | 2:9ab591cf81b8 | 125 | *****************************************************************************/ |
Stephen_NewVistas | 2:9ab591cf81b8 | 126 | int Bluetooth_SerialHandler( void ){ |
Stephen_NewVistas | 2:9ab591cf81b8 | 127 | // if( ByteAvailableOnSerial ){ |
Stephen_NewVistas | 2:9ab591cf81b8 | 128 | // SerialHandler( GetByte() ); |
Stephen_NewVistas | 2:9ab591cf81b8 | 129 | // } |
Stephen_NewVistas | 0:226550611f0d | 130 | return 0; |
Stephen_NewVistas | 0:226550611f0d | 131 | } |
Stephen_NewVistas | 0:226550611f0d | 132 | |
Stephen_NewVistas | 2:9ab591cf81b8 | 133 | //#CC This needs to be modified as commented below |
Stephen_NewVistas | 2:9ab591cf81b8 | 134 | /****************************************************************************** |
Stephen_NewVistas | 2:9ab591cf81b8 | 135 | * Bluetooth_ReceivePacket |
Stephen_NewVistas | 2:9ab591cf81b8 | 136 | * |
Stephen_NewVistas | 2:9ab591cf81b8 | 137 | * This gets automatically called by the bus library when a complete packet is |
Stephen_NewVistas | 2:9ab591cf81b8 | 138 | * received. It checks the address the packet is going to and redirects the |
Stephen_NewVistas | 2:9ab591cf81b8 | 139 | * message appropriately (ie: if message is for the Nordic chip it calls a |
Stephen_NewVistas | 2:9ab591cf81b8 | 140 | * function or it sends it off to a BT device). |
Stephen_NewVistas | 2:9ab591cf81b8 | 141 | * |
Stephen_NewVistas | 2:9ab591cf81b8 | 142 | * PreCondition: None |
Stephen_NewVistas | 2:9ab591cf81b8 | 143 | * |
Stephen_NewVistas | 2:9ab591cf81b8 | 144 | * Input: '_packet' - packet received from the bus. |
Stephen_NewVistas | 2:9ab591cf81b8 | 145 | * |
Stephen_NewVistas | 2:9ab591cf81b8 | 146 | * |
Stephen_NewVistas | 2:9ab591cf81b8 | 147 | * Output: None |
Stephen_NewVistas | 2:9ab591cf81b8 | 148 | * |
Stephen_NewVistas | 2:9ab591cf81b8 | 149 | * Side Effects: None |
Stephen_NewVistas | 2:9ab591cf81b8 | 150 | * |
Stephen_NewVistas | 2:9ab591cf81b8 | 151 | *****************************************************************************/ |
Stephen_NewVistas | 0:226550611f0d | 152 | int Bluetooth_ReceivePacket( Packet *_packet ){ |
Stephen_NewVistas | 0:226550611f0d | 153 | |
Stephen_NewVistas | 1:d6b18299a715 | 154 | #ifdef DEBUG |
Stephen_NewVistas | 1:d6b18299a715 | 155 | PrintPacket( _packet ); |
Stephen_NewVistas | 1:d6b18299a715 | 156 | #endif // DEBUG |
Stephen_NewVistas | 1:d6b18299a715 | 157 | |
Stephen_NewVistas | 2:9ab591cf81b8 | 158 | switch ( _packet->command ){ // makes decision based off where packet is addressed to go |
Stephen_NewVistas | 1:d6b18299a715 | 159 | |
Stephen_NewVistas | 2:9ab591cf81b8 | 160 | case NORDIC_ADDRESS: // if the message is for the Nordic chip... |
Stephen_NewVistas | 2:9ab591cf81b8 | 161 | if( !CheckFunction( _packet ) ){ // this will call the appropriate function if one is registered |
Stephen_NewVistas | 2:9ab591cf81b8 | 162 | //#CC // code goes here if the function is not registered |
Stephen_NewVistas | 2:9ab591cf81b8 | 163 | } |
Stephen_NewVistas | 1:d6b18299a715 | 164 | break; |
Stephen_NewVistas | 0:226550611f0d | 165 | |
Stephen_NewVistas | 2:9ab591cf81b8 | 166 | case BTMODULE_A_ADDRESS: // if message is for Bluetooth Module A |
Stephen_NewVistas | 2:9ab591cf81b8 | 167 | //#CC |
Stephen_NewVistas | 2:9ab591cf81b8 | 168 | /* |
Stephen_NewVistas | 2:9ab591cf81b8 | 169 | Need to bring in packet and modify to send out over BT |
Stephen_NewVistas | 2:9ab591cf81b8 | 170 | */ |
Stephen_NewVistas | 1:d6b18299a715 | 171 | break; |
Stephen_NewVistas | 1:d6b18299a715 | 172 | |
Stephen_NewVistas | 2:9ab591cf81b8 | 173 | case BTMODULE_B_ADDRESS: |
Stephen_NewVistas | 1:d6b18299a715 | 174 | |
Stephen_NewVistas | 1:d6b18299a715 | 175 | break; |
Stephen_NewVistas | 1:d6b18299a715 | 176 | |
Stephen_NewVistas | 1:d6b18299a715 | 177 | default: |
Stephen_NewVistas | 1:d6b18299a715 | 178 | break; |
Stephen_NewVistas | 1:d6b18299a715 | 179 | |
Stephen_NewVistas | 2:9ab591cf81b8 | 180 | } |
Stephen_NewVistas | 0:226550611f0d | 181 | |
Stephen_NewVistas | 0:226550611f0d | 182 | return 0; |
Stephen_NewVistas | 0:226550611f0d | 183 | } |
Stephen_NewVistas | 0:226550611f0d | 184 | |
Stephen_NewVistas | 0:226550611f0d | 185 | int Bluetooth_SendChar( unsigned char _c ){ |
Stephen_NewVistas | 0:226550611f0d | 186 | bus.putc( _c ); |
Stephen_NewVistas | 0:226550611f0d | 187 | return 0; |
Stephen_NewVistas | 0:226550611f0d | 188 | } |
Stephen_NewVistas | 0:226550611f0d | 189 | |
Stephen_NewVistas | 1:d6b18299a715 | 190 | void PrintPacket( Packet *_packet ){ |
Stephen_NewVistas | 1:d6b18299a715 | 191 | pc.printf( "Process Packet\n\r" ); |
Stephen_NewVistas | 1:d6b18299a715 | 192 | |
Stephen_NewVistas | 1:d6b18299a715 | 193 | pc.printf( "\t%x - Device ID\n\r" , _packet->deviceID ); |
Stephen_NewVistas | 1:d6b18299a715 | 194 | pc.printf( "\t%x - Source ID\n\r" , _packet->sourceID ); |
Stephen_NewVistas | 1:d6b18299a715 | 195 | pc.printf( "\t%x - Command\n\r" , _packet->command ); |
Stephen_NewVistas | 1:d6b18299a715 | 196 | pc.printf( "\t%x - Length\n\r" , _packet->packetLength ); |
Stephen_NewVistas | 1:d6b18299a715 | 197 | unsigned char *ptr = (unsigned char *)&_packet->packetData; |
Stephen_NewVistas | 1:d6b18299a715 | 198 | for( int i = 0 ; i < _packet->packetLength ; i++ ){ |
Stephen_NewVistas | 1:d6b18299a715 | 199 | pc.printf( "\t%x - Data[%d]\n\r" , *ptr++ , i ); |
Stephen_NewVistas | 1:d6b18299a715 | 200 | } |
Stephen_NewVistas | 1:d6b18299a715 | 201 | } |
Stephen_NewVistas | 1:d6b18299a715 | 202 | |
Stephen_NewVistas | 0:226550611f0d | 203 | void Test( void ){ |
Stephen_NewVistas | 0:226550611f0d | 204 | |
Stephen_NewVistas | 0:226550611f0d | 205 | Packet commandPacket; |
Stephen_NewVistas | 0:226550611f0d | 206 | commandPacket.sourceID = 0xFE; |
Stephen_NewVistas | 0:226550611f0d | 207 | commandPacket.deviceID = 0xF0; |
Stephen_NewVistas | 0:226550611f0d | 208 | commandPacket.command = 0x10; |
Stephen_NewVistas | 0:226550611f0d | 209 | commandPacket.packetLength = 0x04; |
Stephen_NewVistas | 0:226550611f0d | 210 | commandPacket.packetData[0] = 0x8E; |
Stephen_NewVistas | 0:226550611f0d | 211 | commandPacket.packetData[1] = 0x7F; |
Stephen_NewVistas | 0:226550611f0d | 212 | commandPacket.packetData[2] = 0x8F; |
Stephen_NewVistas | 0:226550611f0d | 213 | commandPacket.packetData[3] = 0xB0; |
Stephen_NewVistas | 0:226550611f0d | 214 | |
Stephen_NewVistas | 0:226550611f0d | 215 | unsigned char buf1[1024]; |
Stephen_NewVistas | 0:226550611f0d | 216 | unsigned char buf2[1024]; |
Stephen_NewVistas | 0:226550611f0d | 217 | unsigned char *ptr = buf1; |
Stephen_NewVistas | 0:226550611f0d | 218 | |
Stephen_NewVistas | 0:226550611f0d | 219 | // buf for commandPacket |
Stephen_NewVistas | 0:226550611f0d | 220 | int size1 = getFormattedPacket( &commandPacket , buf1 ); |
Stephen_NewVistas | 0:226550611f0d | 221 | int size2; |
Stephen_NewVistas | 0:226550611f0d | 222 | |
Stephen_NewVistas | 0:226550611f0d | 223 | // buf for POLL |
Stephen_NewVistas | 0:226550611f0d | 224 | buf1[0] = 0x8F; |
Stephen_NewVistas | 0:226550611f0d | 225 | buf1[1] = 0xF0; |
Stephen_NewVistas | 0:226550611f0d | 226 | size1 = 2; |
Stephen_NewVistas | 0:226550611f0d | 227 | |
Stephen_NewVistas | 0:226550611f0d | 228 | buf2[0] = 0x8D; |
Stephen_NewVistas | 0:226550611f0d | 229 | size2 = 1; |
Stephen_NewVistas | 0:226550611f0d | 230 | |
Stephen_NewVistas | 0:226550611f0d | 231 | pc.printf( "size: %i\t" , size1 ); |
Stephen_NewVistas | 0:226550611f0d | 232 | |
Stephen_NewVistas | 0:226550611f0d | 233 | pc.printf( "buf: " ); |
Stephen_NewVistas | 0:226550611f0d | 234 | for( int i = 0 ; i < size1 ; i++ ){ |
Stephen_NewVistas | 0:226550611f0d | 235 | pc.printf( "%x " , *(ptr++) ); |
Stephen_NewVistas | 0:226550611f0d | 236 | } |
Stephen_NewVistas | 0:226550611f0d | 237 | pc.printf( " \n\r" ); |
Stephen_NewVistas | 0:226550611f0d | 238 | |
Stephen_NewVistas | 0:226550611f0d | 239 | while(1) { |
Stephen_NewVistas | 0:226550611f0d | 240 | // poll with no message |
Stephen_NewVistas | 0:226550611f0d | 241 | ptr = buf1; |
Stephen_NewVistas | 0:226550611f0d | 242 | for( int i = 0 ; i < size1 ; i++ ){ |
Stephen_NewVistas | 0:226550611f0d | 243 | SerialHandler( *(ptr++) ); |
Stephen_NewVistas | 0:226550611f0d | 244 | wait( 1 ); |
Stephen_NewVistas | 0:226550611f0d | 245 | } |
Stephen_NewVistas | 0:226550611f0d | 246 | |
Stephen_NewVistas | 0:226550611f0d | 247 | // create message |
Stephen_NewVistas | 1:d6b18299a715 | 248 | Bluetooth_SendChar( 0xF0 ); |
Stephen_NewVistas | 1:d6b18299a715 | 249 | Bluetooth_SendChar( 0x01 ); |
Stephen_NewVistas | 1:d6b18299a715 | 250 | Bluetooth_SendChar( 0x10 ); |
Stephen_NewVistas | 0:226550611f0d | 251 | |
Stephen_NewVistas | 0:226550611f0d | 252 | // poll with message |
Stephen_NewVistas | 0:226550611f0d | 253 | ptr = buf1; |
Stephen_NewVistas | 0:226550611f0d | 254 | for( int i = 0 ; i < size1 ; i++ ){ |
Stephen_NewVistas | 0:226550611f0d | 255 | SerialHandler( *(ptr++) ); |
Stephen_NewVistas | 0:226550611f0d | 256 | wait( 1 ); |
Stephen_NewVistas | 0:226550611f0d | 257 | } |
Stephen_NewVistas | 0:226550611f0d | 258 | |
Stephen_NewVistas | 0:226550611f0d | 259 | // send ACK |
Stephen_NewVistas | 0:226550611f0d | 260 | ptr = buf2; |
Stephen_NewVistas | 0:226550611f0d | 261 | for( int i = 0 ; i < size2 ; i++ ){ |
Stephen_NewVistas | 0:226550611f0d | 262 | SerialHandler( *(ptr++) ); |
Stephen_NewVistas | 0:226550611f0d | 263 | wait( 1 ); |
Stephen_NewVistas | 0:226550611f0d | 264 | } |
Stephen_NewVistas | 0:226550611f0d | 265 | } |
Stephen_NewVistas | 0:226550611f0d | 266 | } |