Export for Dan

Dependencies:   mbed MODSERIAL1

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?

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