Stephen Davis / Mbed 2 deprecated BT_Hub

Dependencies:   mbed-rtos mbed

Committer:
Stephen_NewVistas
Date:
Mon Dec 12 23:06:58 2016 +0000
Revision:
0:226550611f0d
Child:
1:d6b18299a715
Got system working on bus, calling registered functions with ACK/NACK/RESPONSE. Need to clean up.

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 0:226550611f0d 9
Stephen_NewVistas 0:226550611f0d 10 #define FX 0x02
Stephen_NewVistas 0:226550611f0d 11
Stephen_NewVistas 0:226550611f0d 12 /*===========================================
Stephen_NewVistas 0:226550611f0d 13 * These functions need to be completed
Stephen_NewVistas 0:226550611f0d 14 *
Stephen_NewVistas 0:226550611f0d 15 */
Stephen_NewVistas 0:226550611f0d 16 int Bluetooth_ReceivePacket( Packet * );
Stephen_NewVistas 0:226550611f0d 17 int Bluetooth_SendChar( unsigned char );
Stephen_NewVistas 0:226550611f0d 18 /*==========================================*/
Stephen_NewVistas 0:226550611f0d 19
Stephen_NewVistas 0:226550611f0d 20 void Fx( unsigned char * );
Stephen_NewVistas 0:226550611f0d 21
Stephen_NewVistas 0:226550611f0d 22
Stephen_NewVistas 0:226550611f0d 23 /*===========================================
Stephen_NewVistas 0:226550611f0d 24 *
Stephen_NewVistas 0:226550611f0d 25 *
Stephen_NewVistas 0:226550611f0d 26 */
Stephen_NewVistas 0:226550611f0d 27 void receivedSerialData( void ){
Stephen_NewVistas 0:226550611f0d 28 while( uart1_is_char() ){
Stephen_NewVistas 0:226550611f0d 29 SerialHandler( uart1_get_char() );
Stephen_NewVistas 0:226550611f0d 30 }
Stephen_NewVistas 0:226550611f0d 31 }
Stephen_NewVistas 0:226550611f0d 32
Stephen_NewVistas 0:226550611f0d 33 void bus_thread(void const *argument){
Stephen_NewVistas 0:226550611f0d 34 while (true){
Stephen_NewVistas 0:226550611f0d 35 receivedSerialData();
Stephen_NewVistas 0:226550611f0d 36 wait_ms( 100 );
Stephen_NewVistas 0:226550611f0d 37 }
Stephen_NewVistas 0:226550611f0d 38 }
Stephen_NewVistas 0:226550611f0d 39
Stephen_NewVistas 0:226550611f0d 40 void Test( void );
Stephen_NewVistas 0:226550611f0d 41 /*==========================================*/
Stephen_NewVistas 0:226550611f0d 42
Stephen_NewVistas 0:226550611f0d 43 int main() {
Stephen_NewVistas 0:226550611f0d 44
Stephen_NewVistas 0:226550611f0d 45 RegisterCommand( FX , &Fx );
Stephen_NewVistas 0:226550611f0d 46
Stephen_NewVistas 0:226550611f0d 47 initComms();
Stephen_NewVistas 0:226550611f0d 48 pc.printf( "\n\rStarted...\n\r" );
Stephen_NewVistas 0:226550611f0d 49 init_uart1();
Stephen_NewVistas 0:226550611f0d 50
Stephen_NewVistas 0:226550611f0d 51 Thread bus( bus_thread , NULL , osPriorityRealtime , DEFAULT_STACK_SIZE );
Stephen_NewVistas 0:226550611f0d 52
Stephen_NewVistas 0:226550611f0d 53 while( true ){ };
Stephen_NewVistas 0:226550611f0d 54
Stephen_NewVistas 0:226550611f0d 55 #ifdef TEST
Stephen_NewVistas 0:226550611f0d 56 Test();
Stephen_NewVistas 0:226550611f0d 57 #endif // DEBUG
Stephen_NewVistas 0:226550611f0d 58
Stephen_NewVistas 0:226550611f0d 59
Stephen_NewVistas 0:226550611f0d 60 }
Stephen_NewVistas 0:226550611f0d 61
Stephen_NewVistas 0:226550611f0d 62
Stephen_NewVistas 0:226550611f0d 63 void Fx( unsigned char *_receivedData ){
Stephen_NewVistas 0:226550611f0d 64
Stephen_NewVistas 0:226550611f0d 65 pc.printf( "In FX!\n\r" );
Stephen_NewVistas 0:226550611f0d 66
Stephen_NewVistas 0:226550611f0d 67 Packet packet;
Stephen_NewVistas 0:226550611f0d 68 packet.sourceID = 0xF0;
Stephen_NewVistas 0:226550611f0d 69 packet.deviceID = 0xFE;
Stephen_NewVistas 0:226550611f0d 70 packet.command = 0x90;
Stephen_NewVistas 0:226550611f0d 71 packet.packetData[0] = 0x22;
Stephen_NewVistas 0:226550611f0d 72 packet.packetLength = 0x01;
Stephen_NewVistas 0:226550611f0d 73
Stephen_NewVistas 0:226550611f0d 74 SetResponse( &packet );
Stephen_NewVistas 0:226550611f0d 75 }
Stephen_NewVistas 0:226550611f0d 76
Stephen_NewVistas 0:226550611f0d 77 int Bluetooth_SerialGetChar( unsigned char *_c ){
Stephen_NewVistas 0:226550611f0d 78 if( bus.readable() ){
Stephen_NewVistas 0:226550611f0d 79 char c = bus.getc();
Stephen_NewVistas 0:226550611f0d 80 pc.printf( "%x" , c );
Stephen_NewVistas 0:226550611f0d 81 _c = (unsigned char*)c;
Stephen_NewVistas 0:226550611f0d 82 return 1;
Stephen_NewVistas 0:226550611f0d 83 }
Stephen_NewVistas 0:226550611f0d 84 return 0;
Stephen_NewVistas 0:226550611f0d 85 }
Stephen_NewVistas 0:226550611f0d 86
Stephen_NewVistas 0:226550611f0d 87 int Bluetooth_ReceivePacket( Packet *_packet ){
Stephen_NewVistas 0:226550611f0d 88
Stephen_NewVistas 0:226550611f0d 89 #ifdef DEBUG
Stephen_NewVistas 0:226550611f0d 90 pc.printf( "Process Packet\n\r" );
Stephen_NewVistas 0:226550611f0d 91
Stephen_NewVistas 0:226550611f0d 92 pc.printf( "\t%x - Device ID\n\r" , _packet->deviceID );
Stephen_NewVistas 0:226550611f0d 93 pc.printf( "\t%x - Source ID\n\r" , _packet->sourceID );
Stephen_NewVistas 0:226550611f0d 94 pc.printf( "\t%x - Command\n\r" , _packet->command );
Stephen_NewVistas 0:226550611f0d 95 pc.printf( "\t%x - Length\n\r" , _packet->packetLength );
Stephen_NewVistas 0:226550611f0d 96 unsigned char *ptr = (unsigned char *)&_packet->packetData;
Stephen_NewVistas 0:226550611f0d 97 for( int i = 0 ; i < _packet->packetLength ; i++ ){
Stephen_NewVistas 0:226550611f0d 98 pc.printf( "\t%x - Data[%d]\n\r" , *ptr++ , i );
Stephen_NewVistas 0:226550611f0d 99 }
Stephen_NewVistas 0:226550611f0d 100
Stephen_NewVistas 0:226550611f0d 101 #endif // DEBUG
Stephen_NewVistas 0:226550611f0d 102
Stephen_NewVistas 0:226550611f0d 103 CheckFunction( _packet );
Stephen_NewVistas 0:226550611f0d 104
Stephen_NewVistas 0:226550611f0d 105 return 0;
Stephen_NewVistas 0:226550611f0d 106 }
Stephen_NewVistas 0:226550611f0d 107
Stephen_NewVistas 0:226550611f0d 108 int Bluetooth_SendChar( unsigned char _c ){
Stephen_NewVistas 0:226550611f0d 109 bus.putc( _c );
Stephen_NewVistas 0:226550611f0d 110 return 0;
Stephen_NewVistas 0:226550611f0d 111 }
Stephen_NewVistas 0:226550611f0d 112
Stephen_NewVistas 0:226550611f0d 113 void Test( void ){
Stephen_NewVistas 0:226550611f0d 114
Stephen_NewVistas 0:226550611f0d 115 Packet commandPacket;
Stephen_NewVistas 0:226550611f0d 116 commandPacket.sourceID = 0xFE;
Stephen_NewVistas 0:226550611f0d 117 commandPacket.deviceID = 0xF0;
Stephen_NewVistas 0:226550611f0d 118 commandPacket.command = 0x10;
Stephen_NewVistas 0:226550611f0d 119 commandPacket.packetLength = 0x04;
Stephen_NewVistas 0:226550611f0d 120 commandPacket.packetData[0] = 0x8E;
Stephen_NewVistas 0:226550611f0d 121 commandPacket.packetData[1] = 0x7F;
Stephen_NewVistas 0:226550611f0d 122 commandPacket.packetData[2] = 0x8F;
Stephen_NewVistas 0:226550611f0d 123 commandPacket.packetData[3] = 0xB0;
Stephen_NewVistas 0:226550611f0d 124
Stephen_NewVistas 0:226550611f0d 125 unsigned char buf1[1024];
Stephen_NewVistas 0:226550611f0d 126 unsigned char buf2[1024];
Stephen_NewVistas 0:226550611f0d 127 unsigned char *ptr = buf1;
Stephen_NewVistas 0:226550611f0d 128
Stephen_NewVistas 0:226550611f0d 129 // buf for commandPacket
Stephen_NewVistas 0:226550611f0d 130 int size1 = getFormattedPacket( &commandPacket , buf1 );
Stephen_NewVistas 0:226550611f0d 131 int size2;
Stephen_NewVistas 0:226550611f0d 132
Stephen_NewVistas 0:226550611f0d 133 // buf for POLL
Stephen_NewVistas 0:226550611f0d 134 buf1[0] = 0x8F;
Stephen_NewVistas 0:226550611f0d 135 buf1[1] = 0xF0;
Stephen_NewVistas 0:226550611f0d 136 size1 = 2;
Stephen_NewVistas 0:226550611f0d 137
Stephen_NewVistas 0:226550611f0d 138 buf2[0] = 0x8D;
Stephen_NewVistas 0:226550611f0d 139 size2 = 1;
Stephen_NewVistas 0:226550611f0d 140
Stephen_NewVistas 0:226550611f0d 141 pc.printf( "size: %i\t" , size1 );
Stephen_NewVistas 0:226550611f0d 142
Stephen_NewVistas 0:226550611f0d 143 pc.printf( "buf: " );
Stephen_NewVistas 0:226550611f0d 144 for( int i = 0 ; i < size1 ; i++ ){
Stephen_NewVistas 0:226550611f0d 145 pc.printf( "%x " , *(ptr++) );
Stephen_NewVistas 0:226550611f0d 146 }
Stephen_NewVistas 0:226550611f0d 147 pc.printf( " \n\r" );
Stephen_NewVistas 0:226550611f0d 148
Stephen_NewVistas 0:226550611f0d 149 while(1) {
Stephen_NewVistas 0:226550611f0d 150 // poll with no message
Stephen_NewVistas 0:226550611f0d 151 ptr = buf1;
Stephen_NewVistas 0:226550611f0d 152 for( int i = 0 ; i < size1 ; i++ ){
Stephen_NewVistas 0:226550611f0d 153 SerialHandler( *(ptr++) );
Stephen_NewVistas 0:226550611f0d 154 wait( 1 );
Stephen_NewVistas 0:226550611f0d 155 }
Stephen_NewVistas 0:226550611f0d 156
Stephen_NewVistas 0:226550611f0d 157 // create message
Stephen_NewVistas 0:226550611f0d 158 SetResponse( 0xF0 , 0x10 , 0x01 );
Stephen_NewVistas 0:226550611f0d 159
Stephen_NewVistas 0:226550611f0d 160 // poll with message
Stephen_NewVistas 0:226550611f0d 161 ptr = buf1;
Stephen_NewVistas 0:226550611f0d 162 for( int i = 0 ; i < size1 ; i++ ){
Stephen_NewVistas 0:226550611f0d 163 SerialHandler( *(ptr++) );
Stephen_NewVistas 0:226550611f0d 164 wait( 1 );
Stephen_NewVistas 0:226550611f0d 165 }
Stephen_NewVistas 0:226550611f0d 166
Stephen_NewVistas 0:226550611f0d 167 // send ACK
Stephen_NewVistas 0:226550611f0d 168 ptr = buf2;
Stephen_NewVistas 0:226550611f0d 169 for( int i = 0 ; i < size2 ; i++ ){
Stephen_NewVistas 0:226550611f0d 170 SerialHandler( *(ptr++) );
Stephen_NewVistas 0:226550611f0d 171 wait( 1 );
Stephen_NewVistas 0:226550611f0d 172 }
Stephen_NewVistas 0:226550611f0d 173 }
Stephen_NewVistas 0:226550611f0d 174 }