JORGE RIVERA / Mbed 2 deprecated _test

Dependencies:   mbed-rtos mbed

Fork of STINGR_counter2 by Jonathan Moreno

Revision:
3:6dbdf3288c41
Parent:
2:a79ceae53e04
Child:
4:994d5298a170
--- a/main.cpp	Thu Jun 07 21:53:23 2018 +0000
+++ b/main.cpp	Thu Oct 11 22:12:53 2018 +0000
@@ -6,362 +6,598 @@
 DigitalOut led3(LED3);
 DigitalOut led4(LED4);
 Serial pc(USBTX, USBRX, 9600);      // tx, rx Conunicación Serial con la PC
-DigitalIn CTS(p7, PullUp);          // Pin Digital de entrada "CTS" en modo Pull-Up, para encontrarse normalmente a VCC cuando no haya un pulso. 
-DigitalOut RTS(p8, 1);              // Pin Digital de Salida "RTS"; Predefinido para valer 1 en su estado inactivo dentro del código.
-Serial device(p9, p10, 9600);       // tx, rx Comunicación Serial con el Módulo STX3
+//DigitalIn CTS(p7, PullUp);          // Pin Digital de entrada "CTS" en modo Pull-Up, para encontrarse normalmente a VCC cuando no haya un pulso. 
+//DigitalOut RTS(p8, 1);              // Pin Digital de Salida "RTS"; Predefinido para valer 1 en su estado inactivo dentro del código.
+
+DigitalIn CTS(p11, PullUp);          // Pin Digital de entrada "CTS" en modo Pull-Up, para encontrarse normalmente a VCC cuando no haya un pulso. 
+DigitalOut RTS(p12, 1);              // Pin Digital de Salida "RTS"; Predefinido para valer 1 en su estado inactivo dentro del código.
+
+Serial device(p13, p14, 9600);       // tx, rx Comunicación Serial con el Módulo STX3
 int flag=1;                         // Declaración de la Bandera.
 int incomingByte=0;
 Thread thread;
 
-void respuesta(){
-    while(1){
-    if(device.readable()) {         // Se esperan datos provenientes del TX del módulo STX3
-           incomingByte=device.getc();
-            //pc.putc(num);
-            pc.printf("%X",incomingByte);
+int packet[15]; //int or char
+int num = 0;
+
+void clearPacket()
+{
+    num = 0;
+    for(int i = 0; i < 15 ; i++)
+        packet[i] = 0;
+}
+
+void printPacket()
+{
+    pc.printf("\nprintPacket(): ");
+    for(int i = 0; i < 15 ; i++)
+    {
+        pc.printf("%u",packet[i]);  // Format specifier
+        pc.printf(" ");
+    }
+}
+
+void respuesta()
+{
+    while(1)
+    {
+        if(device.readable()) 
+        {   // Se esperan datos provenientes del TX del módulo STX3
+            incomingByte = device.getc();
+            packet[num] = incomingByte;
+            pc.printf("%X",incomingByte);  // Format specifier
             pc.printf(" ");
-           // pc.putc(device.getc());     // Se muestra en pantalla la respuesta recibida por el módulo STX3 como una reacción al mensaje en HEX enviado
-            }
-            }
+            num++;
+        }
     }
+}
 
-void stx3()
-    {
+void waitCTS()
+{
     Thread::wait(200);                                                    // Se da un tiempo para que el analizador se estabilice
     incomingByte=0;
-    pc.printf("El valor de CTS es %d\n\r",CTS.read());        // Se lee el valor de la variable CTS, la cual debe ser 1
-    pc.printf("El valor de RTS es %d\n\r",RTS.read());        // Se lee el valor de la variable RTS, la cual debe ser 1
+    //pc.printf("El valor de CTS es %d\n\r",CTS.read());        // Se lee el valor de la variable CTS, la cual debe ser 1
+    //pc.printf("El valor de RTS es %d\n\r",RTS.read());        // Se lee el valor de la variable RTS, la cual debe ser 1
     RTS=0;                                                      // Se manda un pulso en bajo en RTS, para inicial el proceso de transmisión
-    while(flag==1){             // Flag inicialmente vale 1, así que el ciclo while cambiará hasta que esa condición no se cumpla           
+    
+    while(flag==1)
+    {// Flag inicialmente vale 1, así que el ciclo while cambiará hasta que esa condición no se cumpla           
         flag=CTS.read();        // Cuando entra el ciclo, se iguala flag a CTS, el cual cuando cambie a 0 provocará que termine el while (máx 125 ms)
-        pc.printf("El valor de flag es %d\n\r", flag);    // Se imprime el valor de flag, para identificar cuando termina el ciclo while
-        }
+        //pc.printf("El valor de flag es %d\n\r", flag);    // Se imprime el valor de flag, para identificar cuando termina el ciclo while
     }
+}
+
+void postCommand()
+{
+    Thread::wait(10);                // Se esperan .1 segundos una vez que se terminaron de hacer las transmisiones
+    //El tiempo total de transmisión es; el wait previo a las transmisiones, el tiempo que tarda el Mu en enviar los datos y el wait posterior a la transmisión
+    RTS=1;
+    Thread::wait(150);
+    //pc.printf("\n\rCTS: %d\n\r",CTS.read());
+    flag=1;
+}
+
+
+bool queryESN();
+bool abortTransmission();
+bool queryFirmware();
+
+int queryBursts();
+long int querySetup();
+
+void sendData();
+void _setup();
+void queryHardware();
+void NAKcommand();
         
-int main() { 
+int main() 
+{ 
+    int bursts = 0;
+    int long numSetup = 0;
     thread.start(respuesta);
        
-        while(1) {
-        
+    while(1) 
+    {
         switch (pc.getc())
         {
-        case '1':
-            {
-            led1=!led1;
-            pc.printf("\n\rQuery ESN AA 05 01 50 D5\n\r");
-            stx3();
-            Thread::wait(10);               // Query ESN
-            device.putc(0XAA);      
-            device.putc(0X05);
-            device.putc(0X01);
-            device.putc(0X50);
-            device.putc(0XD5);
-            Thread::wait(10);                // Se esperan .1 segundos una vez que se terminaron de hacer las transmisiones
-            //El tiempo total de transmisión es; el wait previo a las transmisiones, el tiempo que tarda el Mu en enviar los datos y el wait posterior a la transmisión
-            RTS=1;
-            Thread::wait(150);
-            pc.printf("\n\rCTS: %d\n\r",CTS.read());
-            flag=1;         
-            }
-            break;  
-            
-        case '2':
-            {
-            led2=!led2;
-            pc.printf("\n\rQuery Burst Remaining AA 05 04 FD 82\n\r");
-            stx3();
-            Thread::wait(10);                // Query Bursts Remaining
-            device.putc(0XAA);      
-            device.putc(0X05);
-            device.putc(0X04);
-            device.putc(0XFD);
-            device.putc(0X82);
-            Thread::wait(10);                // Se esperan .1 segundos una vez que se terminaron de hacer las transmisiones
-            //El tiempo total de transmisión es; el wait previo a las transmisiones, el tiempo que tarda el Mu en enviar los datos y el wait posterior a la transmisión
-            RTS=1;
-            Thread::wait(150);
-            pc.printf("\n\rCTS: %d\n\r",CTS.read());
-            flag=1;               
-            }
-            break;
-            
-        case '3':
-            {
-            led3=!led3;
-            pc.printf("\n\rQuery Firmware Version AA 05 05 74 93\n\r");
-            stx3();
-            Thread::wait(10);                // Query Firmware Version
-            device.putc(0XAA);      
-            device.putc(0X05);
-            device.putc(0X05);
-            device.putc(0X74);
-            device.putc(0X93);
-            Thread::wait(10);                // Se esperan .1 segundos una vez que se terminaron de hacer las transmisiones
-            //El tiempo total de transmisión es; el wait previo a las transmisiones, el tiempo que tarda el Mu en enviar los datos y el wait posterior a la transmisión
-            RTS=1;
-            Thread::wait(150);
-            pc.printf("\n\rCTS: %d\n\r",CTS.read());
-            flag=1;               
-            }
-            break;
-            
-        case '4':
-            {
-            led4=!led4;
-            pc.printf("\n\rQuery SETUP AA 05 07 66 B0\n\r");
-            stx3();
-            Thread::wait(10);                // Query SETUP
-            device.putc(0XAA);      
-            device.putc(0X05);
-            device.putc(0X07);
-            device.putc(0X66);
-            device.putc(0XB0);
-            Thread::wait(10);                // Se esperan .1 segundos una vez que se terminaron de hacer las transmisiones
-            //El tiempo total de transmisión es; el wait previo a las transmisiones, el tiempo que tarda el Mu en enviar los datos y el wait posterior a la transmisión
-            RTS=1;
-            Thread::wait(150);
-            pc.printf("\n\rCTS: %d\n\r",CTS.read());
-            flag=1;               
-            }
-            break;
-            
-             case '5':
-            {
-            led1=!led1;
-            pc.printf("\n\rQuery Hardware Version AA 05 09 18 59\n\r");
-            stx3();
-            Thread::wait(10);                // Query Hardware Version
-            device.putc(0XAA);      
-            device.putc(0X05);
-            device.putc(0X09);
-            device.putc(0X18);
-            device.putc(0X59);
-            Thread::wait(10);                // Se esperan .1 segundos una vez que se terminaron de hacer las transmisiones
-            //El tiempo total de transmisión es; el wait previo a las transmisiones, el tiempo que tarda el Mu en enviar los datos y el wait posterior a la transmisión
-            RTS=1;
-            Thread::wait(150);
-            pc.printf("\n\rCTS: %d\n\r",CTS.read());
-            flag=1;               
-            }
-            break;
-            
-             case '6':
-            {
-            led2=!led2;
-            pc.printf("\n\rNAK AA 05 07 66 B1\n\r");
-            stx3();
-            Thread::wait(10);                // Manda error NAK
-            device.putc(0XAA);      
-            device.putc(0X05);
-            device.putc(0X07);
-            device.putc(0X66);
-            device.putc(0XB1);
-            Thread::wait(10);                // Se esperan .1 segundos una vez que se terminaron de hacer las transmisiones
-            //El tiempo total de transmisión es; el wait previo a las transmisiones, el tiempo que tarda el Mu en enviar los datos y el wait posterior a la transmisión
-            RTS=1;
-            Thread::wait(150);
-            pc.printf("\n\rCTS: %d\n\r",CTS.read());
-            flag=1;               
-            }
-            break;
-            
+            case '1':
+                if (queryESN() == true)
+                    pc.printf("\nQuery ESN is correct. VALID\n");
+                else
+                    pc.printf("\nNAK response. INVALID");        
+                break;
+                  
+            case '2':
+                bursts = queryBursts();
+                if (bursts != 99)
+                {
+                    pc.printf("\nBursts Remaining: ");
+                    pc.printf("%u",bursts); 
+                    pc.printf("\n");
+                }
+                else 
+                    pc.printf("\nNAK response. INVALID"); 
+                break;
+                
+            case '3':
+                if (queryFirmware() == true)
+                    pc.printf("\nQuery ESN is correct. VALID\n"); 
+                else
+                    pc.printf("NAK. INVALID");
+                break;
+                
+            case '4':
+                numSetup = querySetup();
+                if (numSetup == NULL)
+                    pc.printf("NAK");
+                            
+                //Print Channel 
+                pc.printf("\n RF Channel: ");
+                pc.printf("%u",numSetup/(10000000));                // RF channel
+                numSetup = numSetup - (numSetup/10000000)*10000000; // Truncate RF Digits
+                //Print Bursts
+                pc.printf("\n # of Bursts: ");
+                pc.printf("%u",numSetup/(100000));                  // Bursts Per Message
+                numSetup = numSetup - (numSetup/100000)*100000;     // Truncate Burst Digits
+                //Print Min Interval
+                pc.printf("\n Min Burst Interval: ");
+                pc.printf("%u",numSetup/1000*5);                    // Min Interval
+                numSetup = numSetup - (numSetup/1000)*1000;         // Truncate Min Interval
+                pc.printf(" seconds");
+                //Print Max Interval
+                pc.printf("\n Max Burst Interval: ");
+                pc.printf("%u",numSetup*5);                         // Max Interval
+                pc.printf(" seconds\n");
+                
+                break;
+                
+            case '5':
+                queryHardware();
+                break;
+            case '6':
+                NAKcommand();             
+                break;
             case '7':
-            {
-            led3=!led3;
-            pc.printf("\n\rSETUP AA 0E 06 00 00 00 00 00 03 18 30 00 CE 9C\n\r");
-            stx3();
-            Thread::wait(10);                // SETUP
-            device.putc(0XAA);      
-            device.putc(0X0E);
-            device.putc(0X06);
-            device.putc(0X00);
-            device.putc(0X00);
-            device.putc(0X00);
-            device.putc(0X00);
-            device.putc(0X00);
-            device.putc(0X03);
-            device.putc(0X18);
-            device.putc(0X30);
-            device.putc(0X00);
-            device.putc(0XCE);
-            device.putc(0X9C);
-            Thread::wait(10);                // Se esperan .1 segundos una vez que se terminaron de hacer las transmisiones
-            //El tiempo total de transmisión es; el wait previo a las transmisiones, el tiempo que tarda el Mu en enviar los datos y el wait posterior a la transmisión
-            RTS=1;
-            Thread::wait(150);
-            pc.printf("\n\rCTS: %d\n\r",CTS.read());
-            flag=1;               
-            }
-            break;
-            
+                _setup();             
+                break;
             case '8':
-            {
-            led4=!led4;
-            pc.printf("\n\rSend Data AA 0E 00 01 02 03 04 05 06 07 08 09 BE E8\n\r");
-            stx3();
-            Thread::wait(10);                // SEND DATA
-            device.putc(0XAA);      
-            device.putc(0X0E);
-            device.putc(0X00);
-            device.putc(0X01);
-            device.putc(0X02);
-            device.putc(0X03);
-            device.putc(0X04);
-            device.putc(0X05);
-            device.putc(0X06);
-            device.putc(0X07);
-            device.putc(0X08);
-            device.putc(0X09);
-            device.putc(0XBE);
-            device.putc(0XE8);
-            Thread::wait(10);                // Se esperan .1 segundos una vez que se terminaron de hacer las transmisiones
-            //El tiempo total de transmisión es; el wait previo a las transmisiones, el tiempo que tarda el Mu en enviar los datos y el wait posterior a la transmisión
-            RTS=1;
-            Thread::wait(150);
-            pc.printf("\n\rCTS: %d\n\r",CTS.read());
-            flag=1;               
-            }
-            break;
-            
-            
+                sendData();               
+                break;
             case '9':
-            {
-            led1=!led1;
-            pc.printf("\n\rAbort Transmission AA 05 03 42 F6\n\r");
-            stx3();
-            Thread::wait(10);                // Abort Transmission
-            device.putc(0XAA);      
-            device.putc(0X05);
-            device.putc(0X03);
-            device.putc(0X42);
-            device.putc(0XF6);
-            Thread::wait(10);                // Se esperan .1 segundos una vez que se terminaron de hacer las transmisiones
-            //El tiempo total de transmisión es; el wait previo a las transmisiones, el tiempo que tarda el Mu en enviar los datos y el wait posterior a la transmisión
-            RTS=1;
-            Thread::wait(150);
-            pc.printf("\n\rCTS: %d\n\r",CTS.read());
-            flag=1;               
-            }
-            break;
-            
-            case 'A':
-            {
-            led2=!led2;
-            pc.printf("\n\rSend Data for PDR\n\r");
-            stx3();
-            Thread::wait(10);                // SEND DATA
-            device.putc(0XAA);      
-            device.putc(0X65);
-            device.putc(0X00);
-            device.putc(0X41);
-            device.putc(0X6E);
-            device.putc(0X64);
-            device.putc(0X72);
-            device.putc(0X65);
-            device.putc(0X73);
-            device.putc(0X20);
-            device.putc(0X4D);
-            device.putc(0X61);
-            device.putc(0X72);
-            device.putc(0X74);
-            device.putc(0X69);
-            device.putc(0X6E);
-            device.putc(0X65);
-            device.putc(0X7A);
-            device.putc(0X20);
-            device.putc(0X4E);
-            device.putc(0X41);
-            device.putc(0X53);
-            device.putc(0X41);
-            device.putc(0X0D);
-            device.putc(0X0A);
-            device.putc(0X43);
-            device.putc(0X61);
-            device.putc(0X72);
-            device.putc(0X6C);
-            device.putc(0X6F);
-            device.putc(0X73);
-            device.putc(0X20);
-            device.putc(0X44);
-            device.putc(0X75);
-            device.putc(0X61);
-            device.putc(0X72);
-            device.putc(0X74);
-            device.putc(0X65);
-            device.putc(0X20);
-            device.putc(0X41);
-            device.putc(0X45);
-            device.putc(0X4D);
-            device.putc(0X0D);
-            device.putc(0X0A);
-            device.putc(0X45);
-            device.putc(0X75);
-            device.putc(0X67);
-            device.putc(0X65);
-            device.putc(0X6E);
-            device.putc(0X69);
-            device.putc(0X6F);
-            device.putc(0X20);
-            device.putc(0X55);
-            device.putc(0X72);
-            device.putc(0X72);
-            device.putc(0X75);
-            device.putc(0X74);
-            device.putc(0X69);
-            device.putc(0X61);
-            device.putc(0X20);
-            device.putc(0X55);
-            device.putc(0X50);
-            device.putc(0X41);
-            device.putc(0X45);
-            device.putc(0X50);
-            device.putc(0X0D);
-            device.putc(0X0A);
-            device.putc(0X46);
-            device.putc(0X65);
-            device.putc(0X62);
-            device.putc(0X72);
-            device.putc(0X75);
-            device.putc(0X61);
-            device.putc(0X72);
-            device.putc(0X79);
-            device.putc(0X20);
-            device.putc(0X32);
-            device.putc(0X30);
-            device.putc(0X74);
-            device.putc(0X68);
-            device.putc(0X20);
-            device.putc(0X32);
-            device.putc(0X30);
-            device.putc(0X31);
-            device.putc(0X38);
-            device.putc(0X0D);
-            device.putc(0X0A);
-            device.putc(0X50);
-            device.putc(0X44);
-            device.putc(0X52);
-            device.putc(0X20);
-            device.putc(0X61);
-            device.putc(0X70);
-            device.putc(0X70);
-            device.putc(0X72);
-            device.putc(0X6F);
-            device.putc(0X76);
-            device.putc(0X65);
-            device.putc(0X64);
-            device.putc(0XC8);
-            device.putc(0X16);
-            Thread::wait(10);                // Se esperan .1 segundos una vez que se terminaron de hacer las transmisiones
-            //El tiempo total de transmisión es; el wait previo a las transmisiones, el tiempo que tarda el Mu en enviar los datos y el wait posterior a la transmisión
-            RTS=1;
-            Thread::wait(150);
-            pc.printf("\n\rCTS: %d\n\r",CTS.read());
-            flag=1;               
-            }
-            break;
-            }
+                if (abortTransmission() == true)
+                    pc.printf("\nTransmission successfully aborted.\n");
+                else
+                    pc.printf("\nNAK response. INVALID");        
+                break;
         }
-        
-        
+    }        
+}
+                           
+//0x00 Send Data
+void sendData()
+{
+    led4=!led4;
+    pc.printf("\n\r0x00 Send Data\nCommand: AA 0E 00 01 02 03 04 05 06 07 08 09 BE E8\n\r");
+    waitCTS();
+    Thread::wait(10);                // SEND DATA
+    device.putc(0XAA);      
+    device.putc(0X0E);
+    device.putc(0X00);
+    device.putc(0X01);
+    device.putc(0X02);
+    device.putc(0X03);
+    device.putc(0X04);
+    device.putc(0X05);
+    device.putc(0X06);
+    device.putc(0X07);
+    device.putc(0X08);
+    device.putc(0X09);
+    device.putc(0XBE);
+    device.putc(0XE8);    
+    postCommand();
+}
+
+//0x01 Query ESN
+bool queryESN()
+{
+    led1=!led1;
+    pc.printf("\n\n\r0x01 Query ESN\nCommand: AA 05 01 50 D5\n\r");
+    pc.printf("Response: ");
+    waitCTS();
+    Thread::wait(10);
+     
+    device.putc(0XAA);      
+    device.putc(0X05);
+    device.putc(0X01);
+    device.putc(0X50);
+    device.putc(0XD5);  
+    
+    postCommand();
+    printPacket();
+    if (packet[3] ==   0 && // 0x00
+        packet[4] ==  41 && // 0x29
+        packet[5] ==  67 && // 0x43
+        packet[6] == 179)   // 0xB3
+    {
+        clearPacket();
+        return true;    
+    }
+    clearPacket();
+    return false;
+}
+
+//0x03 Abort Transmission
+bool abortTransmission()
+{
+    led1=!led1;
+    pc.printf("\n\r0x03 Abort Transmission\nCommand: AA 05 03 42 F6\n\r");
+    pc.printf("Response: ");
+    waitCTS();
+    Thread::wait(10);               
+    device.putc(0XAA);      
+    device.putc(0X05);
+    device.putc(0X03);
+    device.putc(0X42);
+    device.putc(0XF6);
+    
+    postCommand();
+    printPacket();
+    if (packet[0] == 170 && // 0xAA
+        packet[1] ==   5 && // 0x05
+        packet[2] ==   3 && // 0x03
+        packet[3] ==  66 && // 0x42
+        packet[4] == 246)   // 0xF6
+    {
+        clearPacket();
+        return true;    
+    }
+    clearPacket();
+    return false;
+}
+
+//0x04 Query Bursts
+int queryBursts()
+{
+    //int bursts = 99;
+    led2=!led2;
+    pc.printf("\n\r0x04 Query Burst Remaining\nCommand: AA 05 04 FD 82\n\r");
+    pc.printf("Response: ");
+    waitCTS();
+    Thread::wait(10);
+                    
+    device.putc(0XAA);      
+    device.putc(0X05);
+    device.putc(0X04);
+    device.putc(0XFD);
+    device.putc(0X82);
+    
+    postCommand();
+    printPacket();
+    
+    //If NAK response
+    if (packet[0] == 170 && // 0xAA
+        packet[1] ==   5 && // 0x05
+        packet[2] == 255 && // 0xFF
+        packet[3] == 161 && // 0xA1
+        packet[4] == 203)   // 0xCB
+    {
+        clearPacket();
+        return 99;    
+    }
+    clearPacket();
+    return packet[3];
+}
+
+//0x05 Query Firmware
+bool queryFirmware()
+{
+    led3=!led3;
+    pc.printf("\n\r0x05 Query Firmware Version\nCommand: AA 05 05 74 93\n\r");
+    pc.printf("Response: ");
+    waitCTS();
+    Thread::wait(10);               
+    device.putc(0XAA);      
+    device.putc(0X05);
+    device.putc(0X05);
+    device.putc(0X74);
+    device.putc(0X93);        
+    
+    postCommand();
+    printPacket();
+    if (packet[3] == 1 && // 0x01
+        packet[4] == 3)   // 0x03
+    {
+        clearPacket();
+        return true;    
     }
-                           
+    clearPacket();
+    return false;
+}
+
+//0x06 Setup
+void _setup()
+{
+    led3=!led3;
+    pc.printf("\n\r0x06 Setup\nCommand: AA 0E 06 00 00 00 00 00 03 18 30 00 CE 9C\n\r");
+    pc.printf("Response: ");
+    waitCTS();
+    Thread::wait(10);   
+    
+    /*           
+    // 3 Bursts, 2 minutes, 4 minutes
+    device.putc(0XAA);      
+    device.putc(0X0E);
+    device.putc(0X06);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X03);  // 3 Bursts
+    device.putc(0X18);  // 2 minutes
+    device.putc(0X30);  // 4 minutes
+    device.putc(0X00);
+    device.putc(0XCE);  // CRC1
+    device.putc(0X9C);  // CRC2
+    */
+    
+    /*
+    // 3 Bursts, 10 seconds, 15 seconds
+    device.putc(0XAA);      
+    device.putc(0X0E);
+    device.putc(0X06);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X03);  // 3 Bursts
+    device.putc(0X02);  // 10 seconds
+    device.putc(0X03);  // 15 seconds
+    device.putc(0X00);
+    device.putc(0XEB);  // CRC1
+    device.putc(0XF6);  // CRC2
+    */
+    
+    
+    
+    // 3 Bursts, 5 seconds, 10 seconds
+    device.putc(0XAA);      
+    device.putc(0X0E);
+    device.putc(0X06);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X03);  // 3 Bursts
+    device.putc(0X01);  // 5 seconds
+    device.putc(0X02);  // 10 seconds
+    device.putc(0X00);
+    device.putc(0X57);  // CRC1
+    device.putc(0X00);  // CRC2
+    
+    
+    /*
+    // 1 Burst, 10 seconds, 15 seconds
+    device.putc(0XAA);      
+    device.putc(0X0E);
+    device.putc(0X06);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X01);  // 1 Burst
+    device.putc(0X02);  // 10 seconds
+    device.putc(0X03);  // 15 seconds
+    device.putc(0X00);
+    device.putc(0X9D);  // CRC1
+    device.putc(0XCF);  // CRC2
+    */
+    
+    
+    // 1 Burst, 5 seconds, 10 seconds
+    /*
+    device.putc(0XAA);      
+    device.putc(0X0E);
+    device.putc(0X06);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X01);  // 1 Burst
+    device.putc(0X01);  // 5 seconds
+    device.putc(0X02);  // 10 seconds
+    device.putc(0X00);
+    device.putc(0X21);  // CRC1
+    device.putc(0X39);  // CRC2
+    */
+    
+    
+    // 3 Bursts, 10 seconds, 20 seconds
+    /*
+    device.putc(0XAA);      
+    device.putc(0X0E);
+    device.putc(0X06);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X03);  // 3 Bursts
+    device.putc(0X02);  // 10 seconds
+    device.putc(0X04);  // 20 seconds
+    device.putc(0X00);  
+    device.putc(0XE3);  // CRC1
+    device.putc(0XBB);  // CRC2
+    */
+    
+    // 1 Burst, 30 seconds, 60 seconds
+    /*
+    device.putc(0XAA);      
+    device.putc(0X0E);
+    device.putc(0X06);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X01);  // 1 Burst
+    device.putc(0X06);  // 30 seconds
+    device.putc(0X0C);  // 60 seconds
+    device.putc(0X00);  
+    device.putc(0X34);  // CRC1
+    device.putc(0X2F);  // CRC2
+    */
+    
+    // 2 Bursts, 5 seconds, 10 seconds
+    /*
+    device.putc(0XAA);      
+    device.putc(0X0E);
+    device.putc(0X06);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X02);  // 2 Bursts
+    device.putc(0X01);  // 5 seconds
+    device.putc(0X02);  // 10 seconds
+    device.putc(0X00);  
+    device.putc(0XEC);  // CRC1
+    device.putc(0X1C);  // CRC2
+    */
+    
+    // 2 Bursts, 10 seconds, 15 seconds
+    /*
+    device.putc(0XAA);      
+    device.putc(0X0E);
+    device.putc(0X06);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X02);  // 2 Bursts
+    device.putc(0X02);  // 5 seconds
+    device.putc(0X03);  // 10 seconds
+    device.putc(0X00);  
+    device.putc(0X50);  // CRC1
+    device.putc(0XEA);  // CRC2
+    */
+    
+    // 3 Bursts, 5 seconds, 10 seconds
+    /*
+    device.putc(0XAA);      
+    device.putc(0X0E);
+    device.putc(0X06);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X02);  // 2 Bursts
+    device.putc(0X18);  // 5 seconds
+    device.putc(0X30);  // 15 seconds
+    device.putc(0X00);  
+    device.putc(0X75);  // CRC1
+    device.putc(0X80);  // CRC2
+    */
+    
+    // 3 Bursts, 5 seconds, 10 seconds 
+    /*
+    device.putc(0XAA);      
+    device.putc(0X0E);
+    device.putc(0X06);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X03);  // 3 Bursts
+    device.putc(0X01);  // 5 seconds
+    device.putc(0X02);  // 10 seconds
+    device.putc(0X00);  
+    device.putc(0X57);  // CRC1
+    device.putc(0X00);  // CRC2
+    */
+    postCommand();
+    
+}
+
+//0x07 Query Setup
+long int querySetup()
+{
+    int numSetup = 0;
+    led4=!led4;
+    pc.printf("\n\r0x07 Query Setup\nCommand: AA 05 07 66 B0\n\r");
+    pc.printf("Response: ");
+    waitCTS();
+    Thread::wait(10);
+                    
+    device.putc(0XAA);      
+    device.putc(0X05);
+    device.putc(0X07);
+    device.putc(0X66);
+    device.putc(0XB0);
+    
+    postCommand();
+    
+    //If NAK response
+    if (packet[0] == 170 && // 0xAA
+        packet[1] ==   5 && // 0x05
+        packet[2] == 255 && // 0xFF
+        packet[3] == 161 && // 0xA1
+        packet[4] == 203)   // 0xCB
+    {
+        clearPacket();
+        return NULL;    
+    }
+    numSetup = packet[7]*10000000 + packet[8]*100000 + packet[9]*1000 + packet[10];
+    clearPacket();
+    return numSetup;
+}
+
+//0x09 Query Hardware
+void queryHardware()
+{
+    led1=!led1;
+    pc.printf("\n\r0x09 Query Hardware Version\nCommand: AA 05 09 18 59\n\r");
+    pc.printf("Response: ");
+    waitCTS();
+    Thread::wait(10);                
+    
+    device.putc(0XAA);      
+    device.putc(0X05);
+    device.putc(0X09);
+    device.putc(0X18);
+    device.putc(0X59);
+    
+    postCommand();
+    printPacket();
+    clearPacket();
+    pc.printf("\n");
+}
+
+//NAK Command
+void NAKcommand()
+{
+    led2=!led2;
+    pc.printf("\n\rXxXX NAK\nCommand: AA 05 07 66 B1\n\r");
+    pc.printf("Response: ");
+    waitCTS();
+    Thread::wait(10);  
+                  
+    device.putc(0XAA);      
+    device.putc(0X05);
+    device.putc(0X07);
+    device.putc(0X66);
+    device.putc(0XB1);
+    
+    postCommand();
+    printPacket();
+    clearPacket();
+    pc.printf("\n");
+}
\ No newline at end of file