Export for Dan

Dependencies:   mbed MODSERIAL1

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();
         }
    }
}