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