Library set up as dummy module on mbed to mimic Nordic.

Dependencies:   mbed-rtos mbed

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?

UserRevisionLine numberNew 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 }