![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Export for Dan
main.cpp
- Committer:
- atravieso
- Date:
- 2015-10-29
- Revision:
- 4:810c3971bb3e
- Parent:
- 3:4039b6c8da2e
- Child:
- 5:14a21c3812ed
File content as of revision 4:810c3971bb3e:
#include "mbed.h" #include "MODSERIAL.h" #define MESSAGE_BUFFER_SIZE 100 DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); DigitalOut led4(LED4); MODSERIAL messageSystem(p13, p14); //char messageBufferIncoming[MESSAGE_BUFFER_SIZE]; int hexBufferIncoming[MESSAGE_BUFFER_SIZE]; unsigned char messageBufferOutgoing[MESSAGE_BUFFER_SIZE]; int count = 0; int i = 0; bool messageReceived; void messageReceive(MODSERIAL_IRQ_INFO *q) { // Get the pointer to MODSERIAL object that invoked this callback. MODSERIAL *sys = q->serial; //dereference rxGetLasChar() of sys object unsigned int c = sys->rxGetLastChar(); // Returns the last byte to pass through the RX interrupt handler. //add char c to messageBufferIncoming if(i <=MESSAGE_BUFFER_SIZE){ // messageBufferIncoming[i] = c; hexBufferIncoming[i] = c; // if (c == 0xAA) led4 = !led4; // led3 = !led3; i++; } count++; if (count == 4){ //Need to be able to find the string anywhere in the buffer //led4 = !led4; wait(.05); if (hexBufferIncoming[0] == 0xAA){ //Start Calibration // led1 = !led1; if (hexBufferIncoming[1] == 0x55){ // led2 = !led2; if (hexBufferIncoming[2] == 0xFF){ // led3 = !led3; if (hexBufferIncoming[3] == 0x00){ led1 = !led1; //Add disable interrupt?? messageSystem.printf("%c", messageBufferOutgoing[0]= 0xAB); messageSystem.printf("%c", messageBufferOutgoing[1] = 0x54); messageSystem.printf("%c", messageBufferOutgoing[2] = 0xFF); messageSystem.printf("%c", messageBufferOutgoing[3] = 0x00); } } } } else if (hexBufferIncoming[0] == 0xBB){ //Stop Calibration if (hexBufferIncoming[1] == 0x44){ if (hexBufferIncoming[2] == 0xFF){ if (hexBufferIncoming[3] == 0x00){ led2 = !led2; messageSystem.printf("%c", messageBufferOutgoing[0]= 0xBC); messageSystem.printf("%c", messageBufferOutgoing[1]= 0x43); messageSystem.printf("%c", messageBufferOutgoing[2]= 0xFF); messageSystem.printf("%c", messageBufferOutgoing[3]= 0x00); } } } } else if (hexBufferIncoming[0] == 0xCC){ //Get Calibration Value Leave room for data bits if (hexBufferIncoming[1] == 0x33){ if (hexBufferIncoming[2] == 0xFF){ if (hexBufferIncoming[3] == 0x00){ led3 = !led3; messageSystem.printf("%c", messageBufferOutgoing[0]= 0xCD); messageSystem.printf("%c", messageBufferOutgoing[1]= 0x32); messageSystem.printf("%c", messageBufferOutgoing[2]= 0xFF); messageSystem.printf("%c", messageBufferOutgoing[3]= 0x00); } } } } else if (hexBufferIncoming[0] == 0xDD){ //Get Dynamic Data Leave room for data bits if (hexBufferIncoming[1] == 0x22){ if (hexBufferIncoming[2] == 0xFF){ if (hexBufferIncoming[3] == 0x00){ led4 = !led4; messageSystem.printf("%c", messageBufferOutgoing[0]= 0xDE); messageSystem.printf("%c", messageBufferOutgoing[1]= 0x21); messageSystem.printf("%c", messageBufferOutgoing[2]= 0xFF); messageSystem.printf("%c", messageBufferOutgoing[3]= 0x00); } } } } else if (hexBufferIncoming[0] == 0xDB){ //Get Heading //Add space for responses if (hexBufferIncoming[1] == 0x24){ if (hexBufferIncoming[2] == 0xFF){ if (hexBufferIncoming[3] == 0x00){ led1 = !led1; messageSystem.printf("%c", messageBufferOutgoing[0]= 0xDC); messageSystem.printf("%c", messageBufferOutgoing[1]= 0x23); messageSystem.printf("%c", messageBufferOutgoing[2]= 0x00); messageSystem.printf("%c", messageBufferOutgoing[3]= 0x00); } } } } else if (hexBufferIncoming[0] == 0xD9){ //Get Temperature //Add space for response if (hexBufferIncoming[1] == 0x26){ if (hexBufferIncoming[2] == 0xFF){ if (hexBufferIncoming[3] == 0x00){ led2 = !led2; messageSystem.printf("%c", messageBufferOutgoing[0]= 0xDA); messageSystem.printf("%c", messageBufferOutgoing[1]= 0x25); messageSystem.printf("%c", messageBufferOutgoing[2]= 0x00); messageSystem.printf("%c", messageBufferOutgoing[3]= 0x00); } } } } else if (hexBufferIncoming[0] == 0xEE){ //Get Elapsed Time On //Add space for response if (hexBufferIncoming[1] == 0x11){ if (hexBufferIncoming[2] == 0x00){ if (hexBufferIncoming[3] == 0x01){ led3 = !led3; messageSystem.printf("%c", messageBufferOutgoing[0]= 0xEF); messageSystem.printf("%c", messageBufferOutgoing[1]= 0x10); messageSystem.printf("%c", messageBufferOutgoing[2]= 0x00); messageSystem.printf("%c", messageBufferOutgoing[3]= 0x00); } } } } // memset(messageBufferIncoming, '\0', sizeof(messageBufferIncoming)); memset(hexBufferIncoming, '\0', sizeof(hexBufferIncoming)); memset(messageBufferOutgoing, '\0', sizeof(messageBufferOutgoing)); i = 0; messageReceived = true; count = 0; } return; } void messageProcess(void) { // led1 = !led1; messageReceived = false; } int main() { messageReceived = false; // memset(messageBufferIncoming, '\0', sizeof(messageBufferIncoming)); memset(hexBufferIncoming, '\0', sizeof(hexBufferIncoming)); memset(messageBufferOutgoing, '\0', sizeof(messageBufferOutgoing)); messageSystem.baud(9600); messageSystem.attach(&messageReceive, MODSERIAL::RxIrq); //Attach a C++ type object/method pointer as the callback. // Fix Mbed library bug, see http://mbed.org/forum/bugs-suggestions/topic/1498 LPC_GPIOINT->IO2IntClr = (1UL << 5) | (1UL << 4) | (1UL << 3) | (1UL << 2); \ while(1) { //led1 = !led1; wait(.05); if (messageReceived) { //led2 = !led2; wait(.05); messageProcess(); } } }