AguilaBoard program. No library.

Dependencies:   mbed-rtos mbed

Fork of PYL_v6 by Jonathan Moreno

Committer:
jmoreno10
Date:
Mon Jul 16 23:57:28 2018 +0000
Revision:
4:4e90dab088f1
Parent:
3:5d959275ac05
new

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sumobot 0:88a700f174a3 1 #include "mbed.h" //Se declara la librería mbed.
Sumobot 0:88a700f174a3 2 #include "rtos.h"
Sumobot 0:88a700f174a3 3
jmoreno10 3:5d959275ac05 4 I2CSlave slave(p9, p10);
Sumobot 0:88a700f174a3 5 DigitalOut led1(LED1);
Sumobot 0:88a700f174a3 6 DigitalOut led2(LED2);
Sumobot 0:88a700f174a3 7 DigitalOut led3(LED3);
Sumobot 0:88a700f174a3 8 DigitalOut led4(LED4);
Sumobot 0:88a700f174a3 9 Serial pc(USBTX, USBRX, 9600); // tx, rx Conunicación Serial con la PC
jmoreno10 4:4e90dab088f1 10 DigitalIn CTS(p11, PullUp);//p7 proto// Pin Digital de entrada "CTS" en modo Pull-Up, para encontrarse normalmente a VCC cuando no haya un pulso.
jmoreno10 4:4e90dab088f1 11 DigitalOut RTS(p12, 1);//p8 proto // Pin Digital de Salida "RTS"; Predefinido para valer 1 en su estado inactivo dentro del código.
jmoreno10 4:4e90dab088f1 12 Serial stingr(p13, p14, 9600); // tx, rx Comunicación Serial con el Módulo STX3
Sumobot 0:88a700f174a3 13 int flag=1; // Declaración de la Bandera.
JCON 2:a79ceae53e04 14 int incomingByte=0;
Sumobot 0:88a700f174a3 15 Thread thread;
jmoreno10 3:5d959275ac05 16 int packet[15]; //int or char
jmoreno10 3:5d959275ac05 17 int num = 0;
Sumobot 0:88a700f174a3 18
jmoreno10 3:5d959275ac05 19 void clearPacket();
jmoreno10 3:5d959275ac05 20 void printPacket();
jmoreno10 3:5d959275ac05 21 void respuesta();
jmoreno10 3:5d959275ac05 22 void waitCTS();
jmoreno10 3:5d959275ac05 23 void postCommand();
jmoreno10 3:5d959275ac05 24
jmoreno10 3:5d959275ac05 25 bool queryESN();
jmoreno10 3:5d959275ac05 26 bool abortTransmission();
jmoreno10 3:5d959275ac05 27 bool queryFirmware();
jmoreno10 4:4e90dab088f1 28 bool queryHardware();
jmoreno10 3:5d959275ac05 29 int queryBursts();
jmoreno10 3:5d959275ac05 30 long int querySetup();
jmoreno10 3:5d959275ac05 31 bool sendData(char* s);
jmoreno10 3:5d959275ac05 32 void _setup();
jmoreno10 4:4e90dab088f1 33
jmoreno10 3:5d959275ac05 34 void NAKcommand();
jmoreno10 3:5d959275ac05 35 uint16_t ModRTU_CRC(char * buf, int len);
jmoreno10 3:5d959275ac05 36 void combine(char* s, char c);
jmoreno10 3:5d959275ac05 37
jmoreno10 3:5d959275ac05 38 int main()
jmoreno10 3:5d959275ac05 39 {
jmoreno10 3:5d959275ac05 40 //i2c variables
jmoreno10 3:5d959275ac05 41 slave.frequency(400000);
jmoreno10 3:5d959275ac05 42 char buf[200];
jmoreno10 3:5d959275ac05 43 char msg[200];
jmoreno10 3:5d959275ac05 44 slave.address(0x1E);
jmoreno10 3:5d959275ac05 45
jmoreno10 3:5d959275ac05 46 int bursts = 0;
jmoreno10 3:5d959275ac05 47 int long numSetup = 0;
jmoreno10 3:5d959275ac05 48 thread.start(respuesta);
jmoreno10 3:5d959275ac05 49
jmoreno10 3:5d959275ac05 50 while(1)
jmoreno10 3:5d959275ac05 51 {
jmoreno10 3:5d959275ac05 52 int i = slave.receive();
jmoreno10 3:5d959275ac05 53
jmoreno10 3:5d959275ac05 54 switch(i)
jmoreno10 3:5d959275ac05 55 {
jmoreno10 3:5d959275ac05 56 // WRITING RESPONSES
jmoreno10 3:5d959275ac05 57 // Slave writes to Master. Master reads.
jmoreno10 3:5d959275ac05 58 case I2CSlave::ReadAddressed:
jmoreno10 3:5d959275ac05 59 slave.write(msg, strlen(msg) + 1); // Includes null char
jmoreno10 3:5d959275ac05 60 printf("Writing to Master:\t<<- %s\n", msg);
jmoreno10 3:5d959275ac05 61 break;
jmoreno10 3:5d959275ac05 62
jmoreno10 3:5d959275ac05 63 // READING COMMANDS
jmoreno10 3:5d959275ac05 64 // Master writes to Slave. Slave reads.
jmoreno10 3:5d959275ac05 65 case I2CSlave::WriteAddressed:
jmoreno10 3:5d959275ac05 66 slave.read(buf, 200); //Read up to 30 characters from Master
jmoreno10 3:5d959275ac05 67 printf("\n\nReading from Master:\t->> %s\n", buf);
jmoreno10 3:5d959275ac05 68 char j = buf[0];
jmoreno10 3:5d959275ac05 69
jmoreno10 3:5d959275ac05 70 switch(j)
jmoreno10 3:5d959275ac05 71 {
jmoreno10 3:5d959275ac05 72 case '1':
jmoreno10 3:5d959275ac05 73 {
jmoreno10 3:5d959275ac05 74 if (queryESN() == true)
jmoreno10 3:5d959275ac05 75 {
jmoreno10 3:5d959275ac05 76 pc.printf("\nQuery ESN is correct. VALID\n");
jmoreno10 3:5d959275ac05 77 strncpy(msg,"Query ESN is correct",sizeof(msg));
jmoreno10 3:5d959275ac05 78 }
jmoreno10 3:5d959275ac05 79 else
jmoreno10 3:5d959275ac05 80 pc.printf("\nNAK response. INVALID");
jmoreno10 3:5d959275ac05 81 break;
jmoreno10 3:5d959275ac05 82 }
jmoreno10 3:5d959275ac05 83 case '2':
jmoreno10 3:5d959275ac05 84 {
jmoreno10 3:5d959275ac05 85 bursts = queryBursts();
jmoreno10 3:5d959275ac05 86 if (bursts != 99)
jmoreno10 3:5d959275ac05 87 {
jmoreno10 3:5d959275ac05 88 char qry[2];
jmoreno10 3:5d959275ac05 89 sprintf(qry,"%d",bursts);
jmoreno10 3:5d959275ac05 90 char strt[] = "Bursts Remaining is ";
jmoreno10 3:5d959275ac05 91 strcat(strt,qry);
jmoreno10 3:5d959275ac05 92
jmoreno10 3:5d959275ac05 93 pc.printf("\nBursts Remaining: \t");
jmoreno10 3:5d959275ac05 94 pc.printf("%u",bursts);
jmoreno10 3:5d959275ac05 95 pc.printf("\n");
jmoreno10 3:5d959275ac05 96
jmoreno10 3:5d959275ac05 97 strncpy(msg,strt,sizeof(msg));
jmoreno10 3:5d959275ac05 98 }
jmoreno10 3:5d959275ac05 99 else
jmoreno10 3:5d959275ac05 100 pc.printf("\nNAK response. INVALID");
jmoreno10 3:5d959275ac05 101 break;
jmoreno10 3:5d959275ac05 102 }
jmoreno10 3:5d959275ac05 103 case '3':
jmoreno10 3:5d959275ac05 104 {
jmoreno10 3:5d959275ac05 105 if (queryFirmware() == true)
jmoreno10 3:5d959275ac05 106 {
jmoreno10 3:5d959275ac05 107 pc.printf("\nResponse Processing:\tQuery Firmware is correct. VALID\n");
jmoreno10 4:4e90dab088f1 108 pc.printf(" Firmware Version: 1.3\n");
jmoreno10 3:5d959275ac05 109 strncpy(msg,"Query Firmware is correct",sizeof(msg));
jmoreno10 3:5d959275ac05 110 }
jmoreno10 3:5d959275ac05 111 else
jmoreno10 3:5d959275ac05 112 pc.printf("NAK. INVALID");
jmoreno10 3:5d959275ac05 113 break;
jmoreno10 3:5d959275ac05 114 }
jmoreno10 3:5d959275ac05 115 case '4':
jmoreno10 3:5d959275ac05 116 {
jmoreno10 3:5d959275ac05 117 numSetup = querySetup();
jmoreno10 3:5d959275ac05 118 if (numSetup == NULL)
jmoreno10 3:5d959275ac05 119 pc.printf("NAK");
jmoreno10 3:5d959275ac05 120
jmoreno10 3:5d959275ac05 121 char qryRF[1];
jmoreno10 3:5d959275ac05 122 char qryBursts[2];
jmoreno10 3:5d959275ac05 123 char qryMin[3];
jmoreno10 3:5d959275ac05 124 char qryMax[3];
jmoreno10 3:5d959275ac05 125
jmoreno10 3:5d959275ac05 126 char strt[] = "";
jmoreno10 3:5d959275ac05 127
jmoreno10 3:5d959275ac05 128 //Print Channel
jmoreno10 3:5d959275ac05 129 pc.printf("\n RF Channel: ");
jmoreno10 3:5d959275ac05 130 pc.printf("%u",numSetup/(10000000));
jmoreno10 3:5d959275ac05 131 int rfprint = numSetup/(10000000); // RF channel
jmoreno10 3:5d959275ac05 132 sprintf(qryRF,"%d",rfprint);
jmoreno10 3:5d959275ac05 133 strcat(strt,qryRF);
jmoreno10 3:5d959275ac05 134 numSetup = numSetup - (numSetup/10000000)*10000000; // Truncate RF Digits
jmoreno10 3:5d959275ac05 135
jmoreno10 3:5d959275ac05 136 //Print Bursts
jmoreno10 3:5d959275ac05 137 pc.printf("\n # of Bursts: ");
jmoreno10 3:5d959275ac05 138 pc.printf("%u",numSetup/(100000)); // Bursts Per Message
jmoreno10 3:5d959275ac05 139 int burprint = numSetup/(100000);
jmoreno10 3:5d959275ac05 140 sprintf(qryBursts,"%d",burprint);
jmoreno10 3:5d959275ac05 141 strcat(strt,qryBursts);
jmoreno10 3:5d959275ac05 142 numSetup = numSetup - (numSetup/100000)*100000; // Truncate Burst Digits
jmoreno10 3:5d959275ac05 143
jmoreno10 3:5d959275ac05 144 //Print Min Interval
jmoreno10 3:5d959275ac05 145 pc.printf("\n Min Burst Interval: ");
jmoreno10 3:5d959275ac05 146 pc.printf("%u",numSetup/1000*5); // Min Interval
jmoreno10 3:5d959275ac05 147 int minprint = numSetup/1000*5;
jmoreno10 3:5d959275ac05 148 sprintf(qryMin,"%d",minprint);
jmoreno10 3:5d959275ac05 149 strcat(strt,qryMin);
jmoreno10 3:5d959275ac05 150 numSetup = numSetup - (numSetup/1000)*1000; // Truncate Min Interval
jmoreno10 3:5d959275ac05 151 pc.printf(" seconds");
jmoreno10 3:5d959275ac05 152
jmoreno10 3:5d959275ac05 153 //Print Max Interval
jmoreno10 3:5d959275ac05 154 pc.printf("\n Max Burst Interval: ");
jmoreno10 3:5d959275ac05 155 pc.printf("%u",numSetup*5);
jmoreno10 3:5d959275ac05 156 int maxprint = numSetup*5; // Max Interval
jmoreno10 3:5d959275ac05 157 sprintf(qryMax,"%d",maxprint);
jmoreno10 3:5d959275ac05 158 strcat(strt,qryMax);
jmoreno10 3:5d959275ac05 159 pc.printf(" seconds\n");
jmoreno10 3:5d959275ac05 160
jmoreno10 3:5d959275ac05 161 strncpy(msg,strt,sizeof(msg));
jmoreno10 3:5d959275ac05 162
jmoreno10 3:5d959275ac05 163 break;
jmoreno10 3:5d959275ac05 164 }
jmoreno10 3:5d959275ac05 165 case '5':
jmoreno10 3:5d959275ac05 166 {
jmoreno10 4:4e90dab088f1 167 if (queryHardware() == true)
jmoreno10 4:4e90dab088f1 168 {
jmoreno10 4:4e90dab088f1 169 pc.printf("\nResponse Processing:\tQuery Hardware is correct. VALID\n");
jmoreno10 4:4e90dab088f1 170 pc.printf(" Device Code: 01\n");
jmoreno10 4:4e90dab088f1 171 pc.printf(" CPU Revision: 62\n");
jmoreno10 4:4e90dab088f1 172 pc.printf(" Radio Revision: 62\n");
jmoreno10 4:4e90dab088f1 173 strncpy(msg,"Query Hardware is correct",sizeof(msg));
jmoreno10 4:4e90dab088f1 174 }
jmoreno10 4:4e90dab088f1 175 else
jmoreno10 4:4e90dab088f1 176 pc.printf("NAK. INVALID");
jmoreno10 3:5d959275ac05 177 break;
jmoreno10 3:5d959275ac05 178 }
jmoreno10 3:5d959275ac05 179 case '6':
jmoreno10 3:5d959275ac05 180 {
jmoreno10 4:4e90dab088f1 181 NAKcommand();
jmoreno10 4:4e90dab088f1 182 strncpy(msg,"NAK response",sizeof(msg));
jmoreno10 3:5d959275ac05 183 break;
jmoreno10 3:5d959275ac05 184 }
jmoreno10 3:5d959275ac05 185 case '7':
jmoreno10 3:5d959275ac05 186 {
jmoreno10 4:4e90dab088f1 187 _setup();
jmoreno10 4:4e90dab088f1 188 strncpy(msg,"Setup changed",sizeof(msg));
jmoreno10 3:5d959275ac05 189 break;
jmoreno10 3:5d959275ac05 190 }
jmoreno10 3:5d959275ac05 191 case '8':
jmoreno10 3:5d959275ac05 192 {
jmoreno10 3:5d959275ac05 193 int cnt = 0; //Counter for all the characters before pressing "Return" key
jmoreno10 3:5d959275ac05 194
jmoreno10 3:5d959275ac05 195 //This loop counts all characters before the "Return" key in the buffer
jmoreno10 3:5d959275ac05 196 for (int k = 0; k < 200; k++)
jmoreno10 3:5d959275ac05 197 {
jmoreno10 3:5d959275ac05 198 if(buf[k] == '\n')
jmoreno10 3:5d959275ac05 199 break;
jmoreno10 3:5d959275ac05 200 cnt++;
jmoreno10 3:5d959275ac05 201 }
jmoreno10 3:5d959275ac05 202
jmoreno10 3:5d959275ac05 203 pc.printf("0x00\t\t\tSend Data\n\r");
jmoreno10 3:5d959275ac05 204 cnt--; //Decrement total by 1. Don't count 8.
jmoreno10 3:5d959275ac05 205 pc.printf("Data Packet length: \t%u\n",cnt); //Decrement total by 1
jmoreno10 3:5d959275ac05 206
jmoreno10 3:5d959275ac05 207 char str[cnt]; //Declare str array. str will copy buf but without '8'
jmoreno10 3:5d959275ac05 208 //Define str array. str will copy buf but without '8'
jmoreno10 3:5d959275ac05 209 for (int k = 0; k < cnt; k++)
jmoreno10 3:5d959275ac05 210 str[k] = buf[k+1]; //Starts 1 index after '8'.
jmoreno10 3:5d959275ac05 211
jmoreno10 3:5d959275ac05 212 //Declare str1 array. str1 copies str but with
jmoreno10 3:5d959275ac05 213 //the correct datalength by truncating the extra characters
jmoreno10 3:5d959275ac05 214 //found in str
jmoreno10 3:5d959275ac05 215 char str1[cnt];
jmoreno10 3:5d959275ac05 216 strncpy(str1,str,cnt); //truncation of extra characters
jmoreno10 3:5d959275ac05 217 str1[cnt] = '\0'; //Null character
jmoreno10 3:5d959275ac05 218
jmoreno10 3:5d959275ac05 219 pc.printf("Data Packet: \t\t%s \n",str1);
jmoreno10 3:5d959275ac05 220
jmoreno10 3:5d959275ac05 221 //Execute Command "Send Data"
jmoreno10 3:5d959275ac05 222 //sendData(str1);
jmoreno10 3:5d959275ac05 223 if (sendData(str1) == true)
jmoreno10 3:5d959275ac05 224 {
jmoreno10 3:5d959275ac05 225 pc.printf("\nSend Data is successful. VALID\n");
jmoreno10 3:5d959275ac05 226 strncpy(msg,"Send Data is successful",sizeof(msg));
jmoreno10 3:5d959275ac05 227 }
jmoreno10 3:5d959275ac05 228 else
jmoreno10 3:5d959275ac05 229 pc.printf("\nNAK response. INVALID");
jmoreno10 3:5d959275ac05 230
jmoreno10 3:5d959275ac05 231 break;
jmoreno10 3:5d959275ac05 232 }
jmoreno10 3:5d959275ac05 233 case '9':
jmoreno10 3:5d959275ac05 234 {
jmoreno10 3:5d959275ac05 235 if (abortTransmission() == true)
jmoreno10 3:5d959275ac05 236 {
jmoreno10 3:5d959275ac05 237 pc.printf("\nResponse Processing:\tTransmission successfully aborted.\n");
jmoreno10 3:5d959275ac05 238 strncpy(msg,"Transmission successfully aborted.",sizeof(msg));
jmoreno10 3:5d959275ac05 239 }
jmoreno10 3:5d959275ac05 240 else
jmoreno10 3:5d959275ac05 241 pc.printf("\nResponse Processing:\tNAK response. INVALID");
jmoreno10 3:5d959275ac05 242
jmoreno10 3:5d959275ac05 243 break; //break case '9'
jmoreno10 3:5d959275ac05 244 }
jmoreno10 3:5d959275ac05 245 } // switch(j) loop ends
jmoreno10 3:5d959275ac05 246 break; //break write addressed
jmoreno10 3:5d959275ac05 247 } // switch(i) loop ends
jmoreno10 3:5d959275ac05 248 //for(int i = 0; i < 30; i++) buf[i] = 0; // Clear buffer
jmoreno10 3:5d959275ac05 249 } // while(1) loop ends
jmoreno10 3:5d959275ac05 250 } // main loop ends
jmoreno10 3:5d959275ac05 251
jmoreno10 3:5d959275ac05 252 void clearPacket()
jmoreno10 3:5d959275ac05 253 {
jmoreno10 3:5d959275ac05 254 num = 0;
jmoreno10 3:5d959275ac05 255 for(int i = 0; i < 15 ; i++)
jmoreno10 3:5d959275ac05 256 packet[i] = 0;
jmoreno10 3:5d959275ac05 257 }
jmoreno10 3:5d959275ac05 258
jmoreno10 3:5d959275ac05 259 void printPacket()
jmoreno10 3:5d959275ac05 260 {
jmoreno10 3:5d959275ac05 261 pc.printf("\nResponse(Decimal): \t");
jmoreno10 3:5d959275ac05 262 for(int i = 0; i < 15 ; i++)
jmoreno10 3:5d959275ac05 263 {
jmoreno10 3:5d959275ac05 264 pc.printf("%u",packet[i]); // Format specifier
jmoreno10 3:5d959275ac05 265 pc.printf(" ");
Sumobot 0:88a700f174a3 266 }
jmoreno10 3:5d959275ac05 267 }
Sumobot 0:88a700f174a3 268
jmoreno10 3:5d959275ac05 269 void respuesta()
jmoreno10 3:5d959275ac05 270 {
jmoreno10 3:5d959275ac05 271 while(1)
Sumobot 0:88a700f174a3 272 {
jmoreno10 3:5d959275ac05 273 if(stingr.readable())
jmoreno10 3:5d959275ac05 274 { // Se esperan datos provenientes del TX del módulo STX3
jmoreno10 3:5d959275ac05 275 incomingByte = stingr.getc();
jmoreno10 3:5d959275ac05 276 packet[num] = incomingByte;
jmoreno10 3:5d959275ac05 277 pc.printf("%X",incomingByte); // Format specifier
jmoreno10 3:5d959275ac05 278 pc.printf(" ");
jmoreno10 3:5d959275ac05 279 num++;
Sumobot 0:88a700f174a3 280 }
Sumobot 0:88a700f174a3 281 }
jmoreno10 3:5d959275ac05 282 }
jmoreno10 3:5d959275ac05 283
jmoreno10 3:5d959275ac05 284 void waitCTS()
jmoreno10 3:5d959275ac05 285 {
jmoreno10 3:5d959275ac05 286 Thread::wait(200); // Se da un tiempo para que el analizador se estabilice
jmoreno10 3:5d959275ac05 287 incomingByte=0;
jmoreno10 3:5d959275ac05 288 //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
jmoreno10 3:5d959275ac05 289 //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
jmoreno10 3:5d959275ac05 290 RTS=0; // Se manda un pulso en bajo en RTS, para inicial el proceso de transmisión
jmoreno10 3:5d959275ac05 291
jmoreno10 3:5d959275ac05 292 while(flag==1)
jmoreno10 3:5d959275ac05 293 {// Flag inicialmente vale 1, así que el ciclo while cambiará hasta que esa condición no se cumpla
jmoreno10 3:5d959275ac05 294 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)
jmoreno10 3:5d959275ac05 295 //pc.printf("El valor de flag es %d\n\r", flag); // Se imprime el valor de flag, para identificar cuando termina el ciclo while
jmoreno10 3:5d959275ac05 296 }
jmoreno10 3:5d959275ac05 297 }
jmoreno10 3:5d959275ac05 298
jmoreno10 3:5d959275ac05 299 void postCommand()
jmoreno10 3:5d959275ac05 300 {
jmoreno10 3:5d959275ac05 301 Thread::wait(10); // Se esperan .1 segundos una vez que se terminaron de hacer las transmisiones
jmoreno10 3:5d959275ac05 302 //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
jmoreno10 3:5d959275ac05 303 RTS=1;
jmoreno10 3:5d959275ac05 304 Thread::wait(150);
jmoreno10 3:5d959275ac05 305 //pc.printf("\n\rCTS: %d\n\r",CTS.read());
jmoreno10 3:5d959275ac05 306 flag=1;
jmoreno10 3:5d959275ac05 307 }
jmoreno10 3:5d959275ac05 308
jmoreno10 3:5d959275ac05 309 //0x00 Send Data
jmoreno10 3:5d959275ac05 310 bool sendData(char* b) //char* s
jmoreno10 3:5d959275ac05 311 {
jmoreno10 3:5d959275ac05 312 led4=!led4;
jmoreno10 3:5d959275ac05 313 waitCTS();
jmoreno10 3:5d959275ac05 314 Thread::wait(10);
jmoreno10 3:5d959275ac05 315
jmoreno10 3:5d959275ac05 316 size_t n = strlen(b); //Measure size of b. This includes the zeros
jmoreno10 3:5d959275ac05 317 int number = n+3;
jmoreno10 3:5d959275ac05 318 int len = n+5;
jmoreno10 3:5d959275ac05 319 char header[3] = {0xAA,len,0x00}; //Define header information
jmoreno10 3:5d959275ac05 320 char vec[number];
jmoreno10 3:5d959275ac05 321 //pc.printf("number = %u\n",number);
jmoreno10 3:5d959275ac05 322
jmoreno10 3:5d959275ac05 323 //store all in vec
jmoreno10 3:5d959275ac05 324 for(int k = 0; k < 3; k++)
jmoreno10 3:5d959275ac05 325 vec[k] = header[k];
jmoreno10 3:5d959275ac05 326 for(int k = 3; k < number; k++)
jmoreno10 3:5d959275ac05 327 vec[k] = b[k-3];
Sumobot 0:88a700f174a3 328
jmoreno10 3:5d959275ac05 329 pc.printf("Command(HEX):\t\t");
jmoreno10 3:5d959275ac05 330 //Print b characters in HEX
jmoreno10 3:5d959275ac05 331 for(int k = 0; k < number; k++)
jmoreno10 3:5d959275ac05 332 pc.printf("%X ",vec[k]);
jmoreno10 3:5d959275ac05 333
jmoreno10 3:5d959275ac05 334 char *t = (char *)vec; //a
jmoreno10 3:5d959275ac05 335 char crc1 = ModRTU_CRC(t,t[1]-2)&0xFF;
jmoreno10 3:5d959275ac05 336 char crc2 = ModRTU_CRC(t,t[1]-2)>>8;
jmoreno10 3:5d959275ac05 337
jmoreno10 3:5d959275ac05 338 pc.printf("%X ",crc1); //%X print char in HEX format
jmoreno10 3:5d959275ac05 339 pc.printf("%X ",crc2); //%X print char in HEX format
jmoreno10 3:5d959275ac05 340 pc.printf("\nResponse(HEX):\t\t");
jmoreno10 3:5d959275ac05 341
jmoreno10 3:5d959275ac05 342 //Send Command to STINGR
jmoreno10 3:5d959275ac05 343 for(int k = 0; k < number; k++)
jmoreno10 3:5d959275ac05 344 stingr.putc(vec[k]);
jmoreno10 3:5d959275ac05 345 stingr.putc(crc1);
jmoreno10 3:5d959275ac05 346 stingr.putc(crc2);
jmoreno10 3:5d959275ac05 347
jmoreno10 3:5d959275ac05 348
jmoreno10 3:5d959275ac05 349 postCommand();
jmoreno10 3:5d959275ac05 350 printPacket();
jmoreno10 3:5d959275ac05 351
jmoreno10 3:5d959275ac05 352 //If NAK response
jmoreno10 3:5d959275ac05 353 if (packet[0] == 170 && // 0xAA
jmoreno10 3:5d959275ac05 354 packet[1] == 5 && // 0x05
jmoreno10 3:5d959275ac05 355 packet[2] == 255 && // 0xFF
jmoreno10 3:5d959275ac05 356 packet[3] == 161 && // 0xA1
jmoreno10 3:5d959275ac05 357 packet[4] == 203) // 0xCB
jmoreno10 3:5d959275ac05 358 {
jmoreno10 3:5d959275ac05 359 clearPacket();
jmoreno10 3:5d959275ac05 360 pc.printf("\n");
jmoreno10 3:5d959275ac05 361 return false;
jmoreno10 3:5d959275ac05 362 }
jmoreno10 3:5d959275ac05 363 clearPacket();
jmoreno10 3:5d959275ac05 364 pc.printf("\n");
jmoreno10 3:5d959275ac05 365 return true;
jmoreno10 3:5d959275ac05 366 }
jmoreno10 3:5d959275ac05 367
jmoreno10 3:5d959275ac05 368 //0x01 Query ESN
jmoreno10 3:5d959275ac05 369 bool queryESN()
jmoreno10 3:5d959275ac05 370 {
jmoreno10 3:5d959275ac05 371 led1=!led1;
jmoreno10 3:5d959275ac05 372 pc.printf("\r0x01\t\t\tQuery ESN\n");
jmoreno10 3:5d959275ac05 373 pc.printf("Command(HEX):\t\tAA 5 1 50 D5\n\r");
jmoreno10 3:5d959275ac05 374 pc.printf("Response(HEX):\t\t");
jmoreno10 3:5d959275ac05 375 waitCTS();
jmoreno10 3:5d959275ac05 376 Thread::wait(10);
jmoreno10 3:5d959275ac05 377
jmoreno10 3:5d959275ac05 378 stingr.putc(0XAA);
jmoreno10 3:5d959275ac05 379 stingr.putc(0X05);
jmoreno10 3:5d959275ac05 380 stingr.putc(0X01);
jmoreno10 3:5d959275ac05 381 stingr.putc(0X50);
jmoreno10 3:5d959275ac05 382 stingr.putc(0XD5);
jmoreno10 3:5d959275ac05 383
jmoreno10 3:5d959275ac05 384 postCommand();
jmoreno10 3:5d959275ac05 385 printPacket();
jmoreno10 3:5d959275ac05 386 if (packet[3] == 0 && // 0x00
jmoreno10 3:5d959275ac05 387 packet[4] == 41 && // 0x29
jmoreno10 4:4e90dab088f1 388 packet[5] == 72 && // 0x48 //0x43 STINGR TLE
jmoreno10 4:4e90dab088f1 389 packet[6] == 254) // 0xFE //0xB3 STINGR TLE
jmoreno10 3:5d959275ac05 390 {
jmoreno10 3:5d959275ac05 391 clearPacket();
jmoreno10 3:5d959275ac05 392 return true;
jmoreno10 3:5d959275ac05 393 }
jmoreno10 3:5d959275ac05 394 clearPacket();
jmoreno10 3:5d959275ac05 395 return false;
jmoreno10 3:5d959275ac05 396 }
jmoreno10 3:5d959275ac05 397
jmoreno10 3:5d959275ac05 398 //0x03 Abort Transmission
jmoreno10 3:5d959275ac05 399 bool abortTransmission()
jmoreno10 3:5d959275ac05 400 {
jmoreno10 3:5d959275ac05 401 led1=!led1;
jmoreno10 3:5d959275ac05 402 pc.printf("\r0x03\t\t\tAbort Transmission\n");
jmoreno10 3:5d959275ac05 403 pc.printf("Command(HEX):\t\tAA 5 3 42 F6\n\r");
jmoreno10 3:5d959275ac05 404 pc.printf("Response(HEX):\t\t");
jmoreno10 3:5d959275ac05 405 waitCTS();
jmoreno10 3:5d959275ac05 406 Thread::wait(10);
jmoreno10 3:5d959275ac05 407 stingr.putc(0XAA);
jmoreno10 3:5d959275ac05 408 stingr.putc(0X05);
jmoreno10 3:5d959275ac05 409 stingr.putc(0X03);
jmoreno10 3:5d959275ac05 410 stingr.putc(0X42);
jmoreno10 3:5d959275ac05 411 stingr.putc(0XF6);
jmoreno10 3:5d959275ac05 412
jmoreno10 3:5d959275ac05 413 postCommand();
jmoreno10 3:5d959275ac05 414 printPacket();
jmoreno10 3:5d959275ac05 415 if (packet[0] == 170 && // 0xAA
jmoreno10 3:5d959275ac05 416 packet[1] == 5 && // 0x05
jmoreno10 3:5d959275ac05 417 packet[2] == 3 && // 0x03
jmoreno10 3:5d959275ac05 418 packet[3] == 66 && // 0x42
jmoreno10 3:5d959275ac05 419 packet[4] == 246) // 0xF6
jmoreno10 3:5d959275ac05 420 {
jmoreno10 3:5d959275ac05 421 clearPacket();
jmoreno10 3:5d959275ac05 422 return true;
jmoreno10 3:5d959275ac05 423 }
jmoreno10 3:5d959275ac05 424 clearPacket();
jmoreno10 3:5d959275ac05 425 return false;
jmoreno10 3:5d959275ac05 426 }
jmoreno10 3:5d959275ac05 427
jmoreno10 3:5d959275ac05 428 //0x04 Query Bursts
jmoreno10 3:5d959275ac05 429 int queryBursts()
jmoreno10 3:5d959275ac05 430 {
jmoreno10 3:5d959275ac05 431 int bursts = 99;
jmoreno10 3:5d959275ac05 432
jmoreno10 3:5d959275ac05 433 led2=!led2;
jmoreno10 3:5d959275ac05 434 pc.printf("\r0x04\t\t\tQuery Burst Remaining\n");
jmoreno10 3:5d959275ac05 435 pc.printf("Command(HEX):\t\tAA 5 4 FD 82\n\r");
jmoreno10 3:5d959275ac05 436 pc.printf("Response(HEX):\t\t");
jmoreno10 3:5d959275ac05 437 waitCTS();
jmoreno10 3:5d959275ac05 438 Thread::wait(10);
jmoreno10 3:5d959275ac05 439
jmoreno10 3:5d959275ac05 440 stingr.putc(0XAA);
jmoreno10 3:5d959275ac05 441 stingr.putc(0X05);
jmoreno10 3:5d959275ac05 442 stingr.putc(0X04);
jmoreno10 3:5d959275ac05 443 stingr.putc(0XFD);
jmoreno10 3:5d959275ac05 444 stingr.putc(0X82);
jmoreno10 3:5d959275ac05 445
jmoreno10 3:5d959275ac05 446 postCommand();
jmoreno10 3:5d959275ac05 447 printPacket();
jmoreno10 3:5d959275ac05 448
jmoreno10 3:5d959275ac05 449 //If NAK response
jmoreno10 3:5d959275ac05 450 if (packet[0] == 170 && // 0xAA
jmoreno10 3:5d959275ac05 451 packet[1] == 5 && // 0x05
jmoreno10 3:5d959275ac05 452 packet[2] == 255 && // 0xFF
jmoreno10 3:5d959275ac05 453 packet[3] == 161 && // 0xA1
jmoreno10 3:5d959275ac05 454 packet[4] == 203) // 0xCB
jmoreno10 3:5d959275ac05 455 {
jmoreno10 3:5d959275ac05 456 clearPacket();
jmoreno10 3:5d959275ac05 457 return bursts;
Sumobot 0:88a700f174a3 458 }
jmoreno10 3:5d959275ac05 459 bursts = packet[3];
jmoreno10 3:5d959275ac05 460 clearPacket();
jmoreno10 3:5d959275ac05 461 return bursts;
jmoreno10 3:5d959275ac05 462 }
jmoreno10 3:5d959275ac05 463
jmoreno10 3:5d959275ac05 464 //0x05 Query Firmware
jmoreno10 3:5d959275ac05 465 bool queryFirmware()
jmoreno10 3:5d959275ac05 466 {
jmoreno10 3:5d959275ac05 467 led3=!led3;
jmoreno10 4:4e90dab088f1 468 pc.printf("\r0x05\t\t\tQuery Firmware Version\n");
jmoreno10 3:5d959275ac05 469 pc.printf("Command(HEX):\t\tAA 5 5 74 93\n\r");
jmoreno10 3:5d959275ac05 470 pc.printf("Response(HEX):\t\t");
jmoreno10 3:5d959275ac05 471 waitCTS();
jmoreno10 3:5d959275ac05 472 Thread::wait(10);
jmoreno10 3:5d959275ac05 473 stingr.putc(0XAA);
jmoreno10 3:5d959275ac05 474 stingr.putc(0X05);
jmoreno10 3:5d959275ac05 475 stingr.putc(0X05);
jmoreno10 3:5d959275ac05 476 stingr.putc(0X74);
jmoreno10 3:5d959275ac05 477 stingr.putc(0X93);
jmoreno10 3:5d959275ac05 478
jmoreno10 3:5d959275ac05 479 postCommand();
jmoreno10 3:5d959275ac05 480 printPacket();
jmoreno10 3:5d959275ac05 481 if (packet[3] == 1 && // 0x01
jmoreno10 3:5d959275ac05 482 packet[4] == 3) // 0x03
jmoreno10 3:5d959275ac05 483 {
jmoreno10 3:5d959275ac05 484 clearPacket();
jmoreno10 3:5d959275ac05 485 return true;
jmoreno10 3:5d959275ac05 486 }
jmoreno10 3:5d959275ac05 487 clearPacket();
jmoreno10 3:5d959275ac05 488 return false;
jmoreno10 3:5d959275ac05 489 }
jmoreno10 3:5d959275ac05 490
jmoreno10 3:5d959275ac05 491 //0x06 Setup
jmoreno10 3:5d959275ac05 492 void _setup()
jmoreno10 3:5d959275ac05 493 {
jmoreno10 3:5d959275ac05 494 led3=!led3;
jmoreno10 4:4e90dab088f1 495 pc.printf("\r0x06\t\t\tSetup\n");
jmoreno10 3:5d959275ac05 496 pc.printf("Command(HEX):\t\tAA 0E 06 00 00 00 00 00 03 18 30 00 CE 9C\n\r");
jmoreno10 3:5d959275ac05 497 pc.printf("Response(HEX):\t\t");
jmoreno10 3:5d959275ac05 498 waitCTS();
jmoreno10 3:5d959275ac05 499 Thread::wait(10);
jmoreno10 3:5d959275ac05 500 stingr.putc(0XAA);
jmoreno10 3:5d959275ac05 501 stingr.putc(0X0E);
jmoreno10 3:5d959275ac05 502 stingr.putc(0X06);
jmoreno10 3:5d959275ac05 503 stingr.putc(0X00);
jmoreno10 3:5d959275ac05 504 stingr.putc(0X00);
jmoreno10 3:5d959275ac05 505 stingr.putc(0X00);
jmoreno10 3:5d959275ac05 506 stingr.putc(0X00);
jmoreno10 3:5d959275ac05 507 stingr.putc(0X00);
jmoreno10 3:5d959275ac05 508 stingr.putc(0X03);
jmoreno10 3:5d959275ac05 509 stingr.putc(0X18);
jmoreno10 3:5d959275ac05 510 stingr.putc(0X30);
jmoreno10 3:5d959275ac05 511 stingr.putc(0X00);
jmoreno10 3:5d959275ac05 512 stingr.putc(0XCE);
jmoreno10 3:5d959275ac05 513 stingr.putc(0X9C);
jmoreno10 4:4e90dab088f1 514
jmoreno10 3:5d959275ac05 515 postCommand();
jmoreno10 4:4e90dab088f1 516 printPacket();
jmoreno10 4:4e90dab088f1 517 pc.printf("\n");
jmoreno10 4:4e90dab088f1 518
jmoreno10 3:5d959275ac05 519 }
jmoreno10 3:5d959275ac05 520
jmoreno10 3:5d959275ac05 521 //0x07 Query Setup
jmoreno10 3:5d959275ac05 522 long int querySetup()
jmoreno10 3:5d959275ac05 523 {
jmoreno10 3:5d959275ac05 524 int numSetup = 0;
jmoreno10 3:5d959275ac05 525 led4=!led4;
jmoreno10 4:4e90dab088f1 526 pc.printf("\r0x07\t\t\tQuery Setup\n");
jmoreno10 3:5d959275ac05 527 pc.printf("Command(HEX):\t\tAA 5 7 66 B0\n\r");
jmoreno10 3:5d959275ac05 528 pc.printf("Response(HEX):\t\t");
jmoreno10 3:5d959275ac05 529 waitCTS();
jmoreno10 3:5d959275ac05 530 Thread::wait(10);
jmoreno10 3:5d959275ac05 531
jmoreno10 3:5d959275ac05 532 stingr.putc(0XAA);
jmoreno10 3:5d959275ac05 533 stingr.putc(0X05);
jmoreno10 3:5d959275ac05 534 stingr.putc(0X07);
jmoreno10 3:5d959275ac05 535 stingr.putc(0X66);
jmoreno10 3:5d959275ac05 536 stingr.putc(0XB0);
jmoreno10 3:5d959275ac05 537
jmoreno10 3:5d959275ac05 538 postCommand();
jmoreno10 3:5d959275ac05 539
jmoreno10 3:5d959275ac05 540 //If NAK response
jmoreno10 3:5d959275ac05 541 if (packet[0] == 170 && // 0xAA
jmoreno10 3:5d959275ac05 542 packet[1] == 5 && // 0x05
jmoreno10 3:5d959275ac05 543 packet[2] == 255 && // 0xFF
jmoreno10 3:5d959275ac05 544 packet[3] == 161 && // 0xA1
jmoreno10 3:5d959275ac05 545 packet[4] == 203) // 0xCB
jmoreno10 3:5d959275ac05 546 {
jmoreno10 3:5d959275ac05 547 clearPacket();
jmoreno10 3:5d959275ac05 548 return NULL;
jmoreno10 3:5d959275ac05 549 }
jmoreno10 3:5d959275ac05 550 numSetup = packet[7]*10000000 + packet[8]*100000 + packet[9]*1000 + packet[10];
jmoreno10 3:5d959275ac05 551 clearPacket();
jmoreno10 3:5d959275ac05 552 return numSetup;
jmoreno10 3:5d959275ac05 553 }
jmoreno10 3:5d959275ac05 554
jmoreno10 3:5d959275ac05 555 //0x09 Query Hardware
jmoreno10 4:4e90dab088f1 556 bool queryHardware()
jmoreno10 3:5d959275ac05 557 {
jmoreno10 3:5d959275ac05 558 led1=!led1;
jmoreno10 4:4e90dab088f1 559 pc.printf("\r0x09\t\t\tQuery Hardware Version\n");
jmoreno10 3:5d959275ac05 560 pc.printf("Command(HEX):\t\tAA 5 9 18 59\n\r");
jmoreno10 3:5d959275ac05 561 pc.printf("Response(HEX):\t\t");
jmoreno10 3:5d959275ac05 562 waitCTS();
jmoreno10 3:5d959275ac05 563 Thread::wait(10);
jmoreno10 3:5d959275ac05 564
jmoreno10 3:5d959275ac05 565 stingr.putc(0XAA);
jmoreno10 3:5d959275ac05 566 stingr.putc(0X05);
jmoreno10 3:5d959275ac05 567 stingr.putc(0X09);
jmoreno10 3:5d959275ac05 568 stingr.putc(0X18);
jmoreno10 3:5d959275ac05 569 stingr.putc(0X59);
jmoreno10 3:5d959275ac05 570
jmoreno10 3:5d959275ac05 571 postCommand();
jmoreno10 3:5d959275ac05 572 printPacket();
jmoreno10 4:4e90dab088f1 573
jmoreno10 4:4e90dab088f1 574
jmoreno10 4:4e90dab088f1 575 if (packet[5] == 143 && // 0x8F
jmoreno10 4:4e90dab088f1 576 packet[6] == 98 && // 0x62
jmoreno10 4:4e90dab088f1 577 packet[7] == 98) // 0x62
jmoreno10 4:4e90dab088f1 578 {
jmoreno10 4:4e90dab088f1 579 clearPacket();
jmoreno10 4:4e90dab088f1 580 return true;
jmoreno10 4:4e90dab088f1 581 }
jmoreno10 4:4e90dab088f1 582
jmoreno10 4:4e90dab088f1 583
jmoreno10 3:5d959275ac05 584 clearPacket();
jmoreno10 3:5d959275ac05 585 pc.printf("\n");
jmoreno10 4:4e90dab088f1 586 return false;
jmoreno10 3:5d959275ac05 587 }
jmoreno10 3:5d959275ac05 588
jmoreno10 3:5d959275ac05 589 //NAK Command
jmoreno10 3:5d959275ac05 590 void NAKcommand()
jmoreno10 3:5d959275ac05 591 {
jmoreno10 3:5d959275ac05 592 led2=!led2;
jmoreno10 4:4e90dab088f1 593 pc.printf("\rXxXX\t\t\tNAK\n");
jmoreno10 3:5d959275ac05 594 pc.printf("Command(HEX):\t\tAA 5 7 66 B1\n\r");
jmoreno10 3:5d959275ac05 595 pc.printf("Response(HEX):\t\t");
jmoreno10 3:5d959275ac05 596 waitCTS();
jmoreno10 3:5d959275ac05 597 Thread::wait(10);
jmoreno10 3:5d959275ac05 598
jmoreno10 3:5d959275ac05 599 stingr.putc(0XAA);
jmoreno10 3:5d959275ac05 600 stingr.putc(0X05);
jmoreno10 3:5d959275ac05 601 stingr.putc(0X07);
jmoreno10 3:5d959275ac05 602 stingr.putc(0X66);
jmoreno10 3:5d959275ac05 603 stingr.putc(0XB1);
jmoreno10 3:5d959275ac05 604
jmoreno10 3:5d959275ac05 605 postCommand();
jmoreno10 3:5d959275ac05 606 printPacket();
jmoreno10 3:5d959275ac05 607 clearPacket();
jmoreno10 3:5d959275ac05 608 pc.printf("\n");
jmoreno10 3:5d959275ac05 609 }
jmoreno10 3:5d959275ac05 610
jmoreno10 3:5d959275ac05 611 uint16_t ModRTU_CRC(char * buf, int len)
jmoreno10 3:5d959275ac05 612 {
jmoreno10 3:5d959275ac05 613 unsigned char i;
jmoreno10 3:5d959275ac05 614 unsigned short data;
jmoreno10 3:5d959275ac05 615 uint16_t crc = 0xFFFF;
jmoreno10 3:5d959275ac05 616
jmoreno10 3:5d959275ac05 617 do{
jmoreno10 3:5d959275ac05 618 data = (unsigned int)0x00FF & *buf++;
jmoreno10 3:5d959275ac05 619 crc = crc ^ data;
jmoreno10 3:5d959275ac05 620
jmoreno10 3:5d959275ac05 621 for(i = 8; i > 0; i--)
jmoreno10 3:5d959275ac05 622 {
jmoreno10 3:5d959275ac05 623 if(crc & 0x0001)
jmoreno10 3:5d959275ac05 624 crc = (crc >> 1) ^ 0x8408;
jmoreno10 3:5d959275ac05 625 else
jmoreno10 3:5d959275ac05 626 crc >>=1;
jmoreno10 3:5d959275ac05 627 }
jmoreno10 3:5d959275ac05 628
jmoreno10 3:5d959275ac05 629 }while (--len);
jmoreno10 3:5d959275ac05 630
jmoreno10 3:5d959275ac05 631 crc = ~crc;
jmoreno10 3:5d959275ac05 632
jmoreno10 3:5d959275ac05 633 // Note, this number has low and high bytes swapped, so use it accordingly (or swap bytes)
jmoreno10 3:5d959275ac05 634 return (crc);
jmoreno10 3:5d959275ac05 635 }
jmoreno10 3:5d959275ac05 636
jmoreno10 3:5d959275ac05 637 void combine(char* s, char c)
jmoreno10 3:5d959275ac05 638 {
jmoreno10 3:5d959275ac05 639 int len = strlen(s);
jmoreno10 3:5d959275ac05 640 s[len] = c;
jmoreno10 3:5d959275ac05 641 s[len+1] = '\0';
jmoreno10 3:5d959275ac05 642 }