Jonathan Moreno
/
STINGR_counter2
ok
Fork of STINGR_PDR by
main.cpp
- Committer:
- jmoreno10
- Date:
- 2018-10-11
- Revision:
- 3:6dbdf3288c41
- Parent:
- 2:a79ceae53e04
File content as of revision 3:6dbdf3288c41:
#include "mbed.h" //Se declara la librería mbed. #include "rtos.h" DigitalOut led1(LED1); DigitalOut led2(LED2); 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. 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; 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(" "); num++; } } } 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 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 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 } } 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 bursts = 0; int long numSetup = 0; thread.start(respuesta); while(1) { switch (pc.getc()) { 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': _setup(); break; case '8': sendData(); break; case '9': 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"); }