Jonathan Moreno
/
PYL_v7_1
AguilaBoard program. No library.
Fork of PYL_v6 by
main.cpp@4:4e90dab088f1, 2018-07-16 (annotated)
- Committer:
- jmoreno10
- Date:
- Mon Jul 16 23:57:28 2018 +0000
- Revision:
- 4:4e90dab088f1
- Parent:
- 3:5d959275ac05
new
Who changed what in which revision?
User | Revision | Line number | New 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 | } |