Amanda Travieso
/
SerialComms
Export for Dan
main.cpp@3:4039b6c8da2e, 2015-10-27 (annotated)
- Committer:
- atravieso
- Date:
- Tue Oct 27 20:45:57 2015 +0000
- Revision:
- 3:4039b6c8da2e
- Parent:
- 2:d6cadd28a68e
- Child:
- 4:810c3971bb3e
Reads in 7 expected commands (in Hex) and turns on corresponding LEDs
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
atravieso | 0:4b4c18724370 | 1 | |
atravieso | 0:4b4c18724370 | 2 | |
atravieso | 0:4b4c18724370 | 3 | #include "mbed.h" |
atravieso | 0:4b4c18724370 | 4 | #include "MODSERIAL.h" |
atravieso | 0:4b4c18724370 | 5 | |
atravieso | 1:66e3217ec4ec | 6 | #define MESSAGE_BUFFER_SIZE 100 |
atravieso | 0:4b4c18724370 | 7 | |
atravieso | 0:4b4c18724370 | 8 | DigitalOut led1(LED1); |
atravieso | 0:4b4c18724370 | 9 | DigitalOut led2(LED2); |
atravieso | 0:4b4c18724370 | 10 | DigitalOut led3(LED3); |
atravieso | 0:4b4c18724370 | 11 | DigitalOut led4(LED4); |
atravieso | 0:4b4c18724370 | 12 | |
atravieso | 0:4b4c18724370 | 13 | MODSERIAL messageSystem(USBTX, USBRX); |
atravieso | 0:4b4c18724370 | 14 | |
atravieso | 0:4b4c18724370 | 15 | char messageBufferIncoming[MESSAGE_BUFFER_SIZE]; |
atravieso | 3:4039b6c8da2e | 16 | int hexBufferIncoming[MESSAGE_BUFFER_SIZE]; |
atravieso | 0:4b4c18724370 | 17 | char messageBufferOutgoing[MESSAGE_BUFFER_SIZE]; |
atravieso | 1:66e3217ec4ec | 18 | int count = 0; |
atravieso | 1:66e3217ec4ec | 19 | int i = 0; |
atravieso | 0:4b4c18724370 | 20 | bool messageReceived; |
atravieso | 0:4b4c18724370 | 21 | |
atravieso | 1:66e3217ec4ec | 22 | |
atravieso | 0:4b4c18724370 | 23 | void messageReceive(MODSERIAL_IRQ_INFO *q) { |
atravieso | 1:66e3217ec4ec | 24 | // Get the pointer to MODSERIAL object that invoked this callback. |
atravieso | 0:4b4c18724370 | 25 | MODSERIAL *sys = q->serial; |
atravieso | 3:4039b6c8da2e | 26 | |
atravieso | 3:4039b6c8da2e | 27 | //dereference rxGetLasChar() of sys object |
atravieso | 3:4039b6c8da2e | 28 | int c = sys->rxGetLastChar(); // Returns the last byte to pass through the RX interrupt handler. |
atravieso | 3:4039b6c8da2e | 29 | |
atravieso | 1:66e3217ec4ec | 30 | //add char c to messageBufferIncoming |
atravieso | 1:66e3217ec4ec | 31 | if(i <=MESSAGE_BUFFER_SIZE){ |
atravieso | 1:66e3217ec4ec | 32 | messageBufferIncoming[i] = c; |
atravieso | 3:4039b6c8da2e | 33 | hexBufferIncoming[i] = c; |
atravieso | 3:4039b6c8da2e | 34 | |
atravieso | 3:4039b6c8da2e | 35 | // if (c == 0xAA) led4 = !led4; |
atravieso | 3:4039b6c8da2e | 36 | // led3 = !led3; |
atravieso | 1:66e3217ec4ec | 37 | i++; |
atravieso | 3:4039b6c8da2e | 38 | |
atravieso | 1:66e3217ec4ec | 39 | } |
atravieso | 3:4039b6c8da2e | 40 | |
atravieso | 1:66e3217ec4ec | 41 | count++; |
atravieso | 3:4039b6c8da2e | 42 | if (count == 4){ //Need to be able to find the string anywhere in the buffer |
atravieso | 3:4039b6c8da2e | 43 | //need to change to HEX. When I change to Hex, I can just use '==' instead of strncmp |
atravieso | 3:4039b6c8da2e | 44 | // led4 = !led4; |
atravieso | 3:4039b6c8da2e | 45 | |
atravieso | 3:4039b6c8da2e | 46 | if (hexBufferIncoming[0] == 0xAA){ |
atravieso | 3:4039b6c8da2e | 47 | if (hexBufferIncoming[1] == 0x55){ |
atravieso | 3:4039b6c8da2e | 48 | if (hexBufferIncoming[2] == 0xFF){ |
atravieso | 3:4039b6c8da2e | 49 | if (hexBufferIncoming[3] == 0x00){ |
atravieso | 3:4039b6c8da2e | 50 | led1 = !led1; |
atravieso | 3:4039b6c8da2e | 51 | } |
atravieso | 3:4039b6c8da2e | 52 | } |
atravieso | 3:4039b6c8da2e | 53 | } |
atravieso | 3:4039b6c8da2e | 54 | } |
atravieso | 3:4039b6c8da2e | 55 | |
atravieso | 3:4039b6c8da2e | 56 | else if (hexBufferIncoming[0] == 0xBB){ |
atravieso | 3:4039b6c8da2e | 57 | if (hexBufferIncoming[1] == 0x44){ |
atravieso | 3:4039b6c8da2e | 58 | if (hexBufferIncoming[2] == 0xFF){ |
atravieso | 3:4039b6c8da2e | 59 | if (hexBufferIncoming[3] == 0x00){ |
atravieso | 3:4039b6c8da2e | 60 | led2 = !led2; |
atravieso | 3:4039b6c8da2e | 61 | } |
atravieso | 3:4039b6c8da2e | 62 | } |
atravieso | 3:4039b6c8da2e | 63 | } |
atravieso | 3:4039b6c8da2e | 64 | } |
atravieso | 3:4039b6c8da2e | 65 | |
atravieso | 3:4039b6c8da2e | 66 | else if (hexBufferIncoming[0] == 0xCC){ |
atravieso | 3:4039b6c8da2e | 67 | if (hexBufferIncoming[1] == 0x33){ |
atravieso | 3:4039b6c8da2e | 68 | if (hexBufferIncoming[2] == 0xFF){ |
atravieso | 3:4039b6c8da2e | 69 | if (hexBufferIncoming[3] == 0x00){ |
atravieso | 3:4039b6c8da2e | 70 | led3 = !led3; |
atravieso | 3:4039b6c8da2e | 71 | } |
atravieso | 3:4039b6c8da2e | 72 | } |
atravieso | 3:4039b6c8da2e | 73 | } |
atravieso | 3:4039b6c8da2e | 74 | } |
atravieso | 3:4039b6c8da2e | 75 | else if (hexBufferIncoming[0] == 0xDD){ |
atravieso | 3:4039b6c8da2e | 76 | if (hexBufferIncoming[1] == 0x22){ |
atravieso | 3:4039b6c8da2e | 77 | if (hexBufferIncoming[2] == 0xFF){ |
atravieso | 3:4039b6c8da2e | 78 | if (hexBufferIncoming[3] == 0x00){ |
atravieso | 3:4039b6c8da2e | 79 | led4 = !led4; |
atravieso | 3:4039b6c8da2e | 80 | } |
atravieso | 3:4039b6c8da2e | 81 | } |
atravieso | 3:4039b6c8da2e | 82 | } |
atravieso | 3:4039b6c8da2e | 83 | } |
atravieso | 3:4039b6c8da2e | 84 | else if (hexBufferIncoming[0] == 0xDB){ //Get Heading |
atravieso | 3:4039b6c8da2e | 85 | if (hexBufferIncoming[1] == 0x24){ |
atravieso | 3:4039b6c8da2e | 86 | if (hexBufferIncoming[2] == 0xFF){ |
atravieso | 3:4039b6c8da2e | 87 | if (hexBufferIncoming[3] == 0x00){ |
atravieso | 3:4039b6c8da2e | 88 | led1 = !led1; |
atravieso | 3:4039b6c8da2e | 89 | } |
atravieso | 3:4039b6c8da2e | 90 | } |
atravieso | 3:4039b6c8da2e | 91 | } |
atravieso | 3:4039b6c8da2e | 92 | } |
atravieso | 3:4039b6c8da2e | 93 | else if (hexBufferIncoming[0] == 0xD9){ //Get Temperature |
atravieso | 3:4039b6c8da2e | 94 | if (hexBufferIncoming[1] == 0x26){ |
atravieso | 3:4039b6c8da2e | 95 | if (hexBufferIncoming[2] == 0xFF){ |
atravieso | 3:4039b6c8da2e | 96 | if (hexBufferIncoming[3] == 0x00){ |
atravieso | 3:4039b6c8da2e | 97 | led2 = !led2; |
atravieso | 3:4039b6c8da2e | 98 | } |
atravieso | 3:4039b6c8da2e | 99 | } |
atravieso | 3:4039b6c8da2e | 100 | } |
atravieso | 3:4039b6c8da2e | 101 | } |
atravieso | 3:4039b6c8da2e | 102 | else if (hexBufferIncoming[0] == 0xEE){ //Get Elapsed Time On |
atravieso | 3:4039b6c8da2e | 103 | if (hexBufferIncoming[1] == 0x11){ |
atravieso | 3:4039b6c8da2e | 104 | if (hexBufferIncoming[2] == 0x00){ |
atravieso | 3:4039b6c8da2e | 105 | if (hexBufferIncoming[3] == 0x01){ |
atravieso | 3:4039b6c8da2e | 106 | led3 = !led3; |
atravieso | 3:4039b6c8da2e | 107 | } |
atravieso | 3:4039b6c8da2e | 108 | } |
atravieso | 3:4039b6c8da2e | 109 | } |
atravieso | 3:4039b6c8da2e | 110 | } |
atravieso | 1:66e3217ec4ec | 111 | memset(messageBufferIncoming, '\0', sizeof(messageBufferIncoming)); |
atravieso | 1:66e3217ec4ec | 112 | i = 0; |
atravieso | 1:66e3217ec4ec | 113 | messageReceived = true; |
atravieso | 1:66e3217ec4ec | 114 | count = 0; |
atravieso | 1:66e3217ec4ec | 115 | } |
atravieso | 0:4b4c18724370 | 116 | return; |
atravieso | 0:4b4c18724370 | 117 | } |
atravieso | 0:4b4c18724370 | 118 | |
atravieso | 1:66e3217ec4ec | 119 | void messageProcess(void) { |
atravieso | 3:4039b6c8da2e | 120 | // led1 = !led1; |
atravieso | 3:4039b6c8da2e | 121 | |
atravieso | 0:4b4c18724370 | 122 | messageReceived = false; |
atravieso | 0:4b4c18724370 | 123 | } |
atravieso | 0:4b4c18724370 | 124 | |
atravieso | 0:4b4c18724370 | 125 | |
atravieso | 0:4b4c18724370 | 126 | int main() { |
atravieso | 0:4b4c18724370 | 127 | |
atravieso | 0:4b4c18724370 | 128 | messageReceived = false; |
atravieso | 1:66e3217ec4ec | 129 | memset(messageBufferIncoming, '\0', sizeof(messageBufferIncoming)); |
atravieso | 0:4b4c18724370 | 130 | messageSystem.baud(9600); |
atravieso | 3:4039b6c8da2e | 131 | messageSystem.attach(&messageReceive, MODSERIAL::RxIrq); //Attach a C++ type object/method pointer as the callback. |
atravieso | 1:66e3217ec4ec | 132 | |
atravieso | 0:4b4c18724370 | 133 | // Fix Mbed library bug, see http://mbed.org/forum/bugs-suggestions/topic/1498 |
atravieso | 0:4b4c18724370 | 134 | LPC_GPIOINT->IO2IntClr = (1UL << 5) | (1UL << 4) | (1UL << 3) | (1UL << 2); |
atravieso | 0:4b4c18724370 | 135 | \ |
atravieso | 0:4b4c18724370 | 136 | while(1) { |
atravieso | 1:66e3217ec4ec | 137 | |
atravieso | 0:4b4c18724370 | 138 | if (messageReceived) |
atravieso | 0:4b4c18724370 | 139 | { |
atravieso | 0:4b4c18724370 | 140 | // led1 = !led1; |
atravieso | 0:4b4c18724370 | 141 | messageProcess(); |
atravieso | 0:4b4c18724370 | 142 | } |
atravieso | 0:4b4c18724370 | 143 | } |
atravieso | 0:4b4c18724370 | 144 | } |