WappAutomation 2 : - WITH RESET - WITHOUT Switch Cable Tested on TEL50

Dependencies:   MFRC522

Committer:
cybermars
Date:
Fri Dec 13 14:17:55 2019 +0000
Revision:
12:81209b6a2318
Parent:
11:275b5ff86ab0
Wapp automation 2 :; - WITH RESET; - WITHOUT Switch Cable

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dalbanf 0:8814d243dfec 1 #include "mbed.h"
dalbanf 0:8814d243dfec 2 #include "MFRC522.h"
dalbanf 0:8814d243dfec 3 #include "EthernetInterface.h"
dalbanf 0:8814d243dfec 4
dalbanf 0:8814d243dfec 5
dalbanf 0:8814d243dfec 6 //***************************** Change this for each new prober installation ********************************
cybermars 11:275b5ff86ab0 7 #define PROBER_NAME "tl50"
cybermars 11:275b5ff86ab0 8 #define IP "10.129.97.130"
dalbanf 0:8814d243dfec 9 /*Please update the list below:
dalbanf 0:8814d243dfec 10 TEL12 : 10.129.97.100
dalbanf 0:8814d243dfec 11 TEL20 : 10.129.97.101
dalbanf 0:8814d243dfec 12 TEL23 : 10.129.97.102
dalbanf 0:8814d243dfec 13 TEL36 : 10.129.97.103
dalbanf 5:2b7c8f43efd9 14 TEL01 : 10.129.97.105
dalbanf 5:2b7c8f43efd9 15 TEL19 : 10.129.97.106
dalbanf 5:2b7c8f43efd9 16 TEL27 : 10.129.97.107
dalbanf 6:f7c355fcb302 17 TEL37 : 10.129.97.108
dalbanf 6:f7c355fcb302 18 TEL38 : 10.129.97.109
dalbanf 6:f7c355fcb302 19 TEL39 : 10.129.97.110
dalbanf 6:f7c355fcb302 20 TEL40 : 10.129.97.111
dalbanf 6:f7c355fcb302 21 TEL16 : 10.129.97.112
dalbanf 6:f7c355fcb302 22 TEL21 : 10.129.97.113
dalbanf 6:f7c355fcb302 23 TEL22 : 10.129.97.114
dalbanf 6:f7c355fcb302 24 TEL34 : 10.129.97.115
dalbanf 7:64d536d218c3 25 TEL30 : 10.129.97.116
dalbanf 7:64d536d218c3 26 TEL32 : 10.129.97.117
dalbanf 7:64d536d218c3 27 TEL26 : 10.129.97.118
dalbanf 7:64d536d218c3 28 TEL25 : 10.129.97.119
dalbanf 7:64d536d218c3 29 TEL28 : 10.129.97.120
dalbanf 7:64d536d218c3 30 TEL29 : 10.129.97.121
dalbanf 7:64d536d218c3 31 TEL31 : 10.129.97.122
dalbanf 7:64d536d218c3 32 TEL33 : 10.129.97.123
dalbanf 7:64d536d218c3 33 TEL42 : 10.129.97.124
dalbanf 7:64d536d218c3 34 TEL43 : 10.129.97.125
dalbanf 7:64d536d218c3 35 TEL44 : 10.129.97.126
cybermars 10:4eebb90e8e06 36 TEL45 : 10.129.97.127
cybermars 10:4eebb90e8e06 37 TEL46 : 10.129.97.128
cybermars 10:4eebb90e8e06 38 TEL47 : 10.129.97.129
cybermars 10:4eebb90e8e06 39 TEL48 : 10.129.97.104
cybermars 11:275b5ff86ab0 40 TEL50 : 10.129.97.130
dalbanf 0:8814d243dfec 41 ************************************************************************************************************/
dalbanf 0:8814d243dfec 42
dalbanf 0:8814d243dfec 43
dalbanf 0:8814d243dfec 44 //******************************************* RFID Antenna **************************************************
dalbanf 0:8814d243dfec 45 //Cheap 13.56 Mhz RFID-RC522 module (This code is based on Martin Olejar's MFRC522 library. Minimal changes)
dalbanf 1:24db8b26b816 46 //On Nucleo-F429ZI, SPI1 and SPI2 could not be used in the same time with EthernetInterface -> SPI4 used
dalbanf 0:8814d243dfec 47 //RFID IRQ=pin5 -> Not used. Leave open
dalbanf 0:8814d243dfec 48 //RFID MISO=pin4 -> Nucleo SPI_MISO -> White -> PE_5
dalbanf 0:8814d243dfec 49 //RFID MOSI=pin3 -> Nucleo SPI_MOSI -> Green -> PE_6
dalbanf 0:8814d243dfec 50 //RFID SCK=pin2 -> Nucleo SPI_SCK -> Yellow -> PE_2
dalbanf 0:8814d243dfec 51 //RFID SDA=pin1 -> Nucleo SPI_CS -> Blue -> PE_4
dalbanf 0:8814d243dfec 52 //RFID RST=pin7 -> Nucleo DigitalOut -> Brown -> D8
dalbanf 0:8814d243dfec 53 //***********************************************************************************************************
dalbanf 0:8814d243dfec 54
dalbanf 0:8814d243dfec 55
dalbanf 0:8814d243dfec 56 //********************************************* Antenna LED *************************************************
dalbanf 0:8814d243dfec 57 //Anode -> +3.3v pin
dalbanf 0:8814d243dfec 58 //Cathode -> D3 pin
dalbanf 0:8814d243dfec 59 //Use LED_ON and LED_OFF to use the LED
dalbanf 0:8814d243dfec 60 //***********************************************************************************************************
dalbanf 0:8814d243dfec 61
dalbanf 0:8814d243dfec 62
dalbanf 0:8814d243dfec 63 //****************************************** Interlock Relay ************************************************
dalbanf 0:8814d243dfec 64 //Power + -> +5v pin
dalbanf 0:8814d243dfec 65 //Power - -> GND pin
dalbanf 0:8814d243dfec 66 //Command -> D4 pin
dalbanf 0:8814d243dfec 67 //Use RELAY_OPEN and RELAY_CLOSE to use the relay
dalbanf 0:8814d243dfec 68 //***********************************************************************************************************
dalbanf 0:8814d243dfec 69
dalbanf 0:8814d243dfec 70
dalbanf 0:8814d243dfec 71 #define MF_RESET D8 // Nucleo Pin for MFRC522 reset
dalbanf 0:8814d243dfec 72 #define LED_ON 0
dalbanf 0:8814d243dfec 73 #define LED_OFF 1
dalbanf 1:24db8b26b816 74 #define RELAY_CLOSED 0
dalbanf 1:24db8b26b816 75 #define RELAY_OPEN 1
dalbanf 0:8814d243dfec 76
dalbanf 0:8814d243dfec 77 #define INTERLOCK_DELAY 5000 // Delay (in milliseconds) between alarm received and relay off to simulate open interlock
dalbanf 0:8814d243dfec 78 #define APCD_READ_DELAY 500 // Delay (in milliseconds) before read the APCD data
dalbanf 0:8814d243dfec 79 #define SOCKETCONNECTION_ATTEMPT 5 // Number of attempts for socket connection
dalbanf 0:8814d243dfec 80 #define TIMEOUT_WAITTAG 20 // Timeout in case of New Tag Present detected
dalbanf 0:8814d243dfec 81
dalbanf 4:caf61234018c 82 #define GATEWAY "10.129.97.254" //The gateway to go out the prober VLAN
dalbanf 0:8814d243dfec 83 #define MASK "255.255.255.0"
dalbanf 7:64d536d218c3 84 #define SERVER "10.18.47.90" //Automation server IP Address - { 164, 129, 103, 88 } for Dev Automation server
dalbanf 4:caf61234018c 85 #define PORT 7778 //Automation port
dalbanf 0:8814d243dfec 86
dalbanf 4:caf61234018c 87 #define MBX_OPEN "MBX_OPEN srvpat" //"MBX_OPEN srv_pat"
cybermars 12:81209b6a2318 88 #define MBX_CLOSE "MBX_DISCONNECT"
dalbanf 0:8814d243dfec 89 #define MBX_COUNT "MBX_COUNT STM32Insrv_" PROBER_NAME
dalbanf 0:8814d243dfec 90 #define MBX_GET "MBX_GET 5,STM32Insrv_" PROBER_NAME
dalbanf 0:8814d243dfec 91 #define MBX_PUT_BEGIN "MBX_PUT STM32Outsrv, CMD/A=\"WAPP\" MID/A=\"gnb3t" PROBER_NAME "\" MTY/A=\"E\" WAPPID/A=\""
dalbanf 0:8814d243dfec 92 #define MBX_PUT_END "\""
dalbanf 0:8814d243dfec 93
dalbanf 0:8814d243dfec 94
dalbanf 0:8814d243dfec 95 Serial PC(USBTX, USBRX);
dalbanf 0:8814d243dfec 96 MFRC522 Antenna(PE_6, PE_5, PE_2, PE_4, MF_RESET);
dalbanf 0:8814d243dfec 97 EthernetInterface eth;
dalbanf 0:8814d243dfec 98 TCPSocket apcd;
dalbanf 0:8814d243dfec 99 DigitalIn WappExchangeSwitch(D2);
dalbanf 0:8814d243dfec 100 DigitalOut TagReadLED(D3);
dalbanf 0:8814d243dfec 101 DigitalOut Interlock(D4);
dalbanf 0:8814d243dfec 102 DigitalOut red(LED3);
dalbanf 0:8814d243dfec 103 DigitalOut blue(LED2);
dalbanf 0:8814d243dfec 104 DigitalOut green(LED1);
dalbanf 0:8814d243dfec 105
dalbanf 0:8814d243dfec 106 char bufTagID[256];
dalbanf 0:8814d243dfec 107 int APCDsendData (char *tcpCmd);
dalbanf 0:8814d243dfec 108 char *APCDgetData ();
dalbanf 0:8814d243dfec 109
dalbanf 0:8814d243dfec 110
dalbanf 0:8814d243dfec 111 //IsTagPresent(): function to read the Tag ID
dalbanf 0:8814d243dfec 112 // Return false if no Tag present
dalbanf 0:8814d243dfec 113 // Return true if a Tag ID was read (Tag ID is saved int the bufTagID buffer)
cybermars 12:81209b6a2318 114 bool IsTagPresent()
cybermars 12:81209b6a2318 115 {
dalbanf 9:cfa9a379dbd3 116 /*
dalbanf 0:8814d243dfec 117 if (Antenna.PICC_IsNewCardPresent() && WappExchangeSwitch == 1){
dalbanf 0:8814d243dfec 118 PC.printf("TAG detected ... ");
cybermars 12:81209b6a2318 119
dalbanf 0:8814d243dfec 120 //Select one of the cards
dalbanf 0:8814d243dfec 121 int count = 0;
dalbanf 0:8814d243dfec 122 while (!Antenna.PICC_ReadCardSerial() && WappExchangeSwitch == 1 && count < TIMEOUT_WAITTAG){
dalbanf 0:8814d243dfec 123 count++;
dalbanf 0:8814d243dfec 124 wait_ms(100);
dalbanf 0:8814d243dfec 125 }
dalbanf 0:8814d243dfec 126 if (count == TIMEOUT_WAITTAG){
dalbanf 0:8814d243dfec 127 PC.printf("Timeout occured -> no Tag present\r\n");
dalbanf 0:8814d243dfec 128 return false;
dalbanf 0:8814d243dfec 129 }
cybermars 12:81209b6a2318 130 if (WappExchangeSwitch == 0) return false;
cybermars 12:81209b6a2318 131
dalbanf 0:8814d243dfec 132 //Light during 1s Tag LED to indicate that a tag was read
dalbanf 0:8814d243dfec 133 TagReadLED = LED_ON;
dalbanf 0:8814d243dfec 134 wait_ms(500);
cybermars 12:81209b6a2318 135 TagReadLED = LED_OFF;
cybermars 12:81209b6a2318 136
dalbanf 0:8814d243dfec 137 //Save Tag ID into buffer
dalbanf 0:8814d243dfec 138 PC.printf("ID = ");
dalbanf 0:8814d243dfec 139 int pos = 0;
dalbanf 0:8814d243dfec 140 char hexbuf[2];
dalbanf 0:8814d243dfec 141 for (int i = 0; i < 256; i++) bufTagID[i] = '\0';
dalbanf 0:8814d243dfec 142 for (uint8_t i = 0; i < Antenna.uid.size; i++) {
dalbanf 0:8814d243dfec 143 sprintf(hexbuf, "%02x", Antenna.uid.uidByte[i]);
dalbanf 0:8814d243dfec 144 PC.putc(hexbuf[0]);
dalbanf 0:8814d243dfec 145 PC.putc(hexbuf[1]);
dalbanf 0:8814d243dfec 146 bufTagID[pos] = hexbuf[0];
dalbanf 0:8814d243dfec 147 pos++;
dalbanf 0:8814d243dfec 148 bufTagID[pos] = hexbuf[1];
dalbanf 0:8814d243dfec 149 pos++;
dalbanf 0:8814d243dfec 150 }
cybermars 12:81209b6a2318 151 PC.printf("\r\n");
dalbanf 0:8814d243dfec 152 return true;
dalbanf 0:8814d243dfec 153 }
dalbanf 0:8814d243dfec 154 else return false;
dalbanf 9:cfa9a379dbd3 155 */
cybermars 12:81209b6a2318 156
dalbanf 9:cfa9a379dbd3 157 //Look for new cards during 5s
dalbanf 9:cfa9a379dbd3 158 int timeout = 0;
cybermars 12:81209b6a2318 159 while ( ! Antenna.PICC_IsNewCardPresent() == 1 && timeout < TIMEOUT_WAITTAG) {
dalbanf 9:cfa9a379dbd3 160 wait_ms(100);
dalbanf 9:cfa9a379dbd3 161 timeout++;
dalbanf 9:cfa9a379dbd3 162 }
dalbanf 9:cfa9a379dbd3 163 if (timeout >= TIMEOUT_WAITTAG) {
dalbanf 9:cfa9a379dbd3 164 PC.printf("Timeout occured -> no Tag present\r\n");
dalbanf 9:cfa9a379dbd3 165 return false;
dalbanf 9:cfa9a379dbd3 166 }
cybermars 12:81209b6a2318 167 //if (WappExchangeSwitch == 0) return false;
cybermars 12:81209b6a2318 168 PC.printf("TAG detected ... ");
dalbanf 9:cfa9a379dbd3 169
dalbanf 9:cfa9a379dbd3 170 //pc.printf("Yes, tag is present... Try to read Tag ID\r\n");
cybermars 12:81209b6a2318 171
dalbanf 9:cfa9a379dbd3 172 //Select one of the cards
dalbanf 9:cfa9a379dbd3 173 timeout = 0;
cybermars 12:81209b6a2318 174 while ( ! Antenna.PICC_ReadCardSerial() == 1 && timeout < TIMEOUT_WAITTAG) {
dalbanf 9:cfa9a379dbd3 175 wait_ms(100);
dalbanf 9:cfa9a379dbd3 176 timeout++;
dalbanf 9:cfa9a379dbd3 177 }
dalbanf 9:cfa9a379dbd3 178 if (timeout >= TIMEOUT_WAITTAG) {
dalbanf 9:cfa9a379dbd3 179 PC.printf("Timeout occured during ReadCardSerial\r\n");
dalbanf 9:cfa9a379dbd3 180 return false;
dalbanf 9:cfa9a379dbd3 181 }
cybermars 12:81209b6a2318 182 //if (WappExchangeSwitch == 0) return false;
cybermars 12:81209b6a2318 183
dalbanf 9:cfa9a379dbd3 184 //Light during 1s Tag LED to indicate that a tag was read
dalbanf 9:cfa9a379dbd3 185 TagReadLED = LED_ON;
dalbanf 9:cfa9a379dbd3 186 wait_ms(500);
cybermars 12:81209b6a2318 187 TagReadLED = LED_OFF;
cybermars 12:81209b6a2318 188
dalbanf 9:cfa9a379dbd3 189 //Save Tag ID into buffer
dalbanf 9:cfa9a379dbd3 190 PC.printf("ID = ");
dalbanf 9:cfa9a379dbd3 191 int pos = 0;
dalbanf 9:cfa9a379dbd3 192 char hexbuf[2];
dalbanf 9:cfa9a379dbd3 193 for (int i = 0; i < 256; i++) bufTagID[i] = '\0';
dalbanf 9:cfa9a379dbd3 194 for (uint8_t i = 0; i < Antenna.uid.size; i++) {
dalbanf 9:cfa9a379dbd3 195 sprintf(hexbuf, "%02x", Antenna.uid.uidByte[i]);
dalbanf 9:cfa9a379dbd3 196 PC.putc(hexbuf[0]);
dalbanf 9:cfa9a379dbd3 197 PC.putc(hexbuf[1]);
dalbanf 9:cfa9a379dbd3 198 bufTagID[pos] = hexbuf[0];
dalbanf 9:cfa9a379dbd3 199 pos++;
dalbanf 9:cfa9a379dbd3 200 bufTagID[pos] = hexbuf[1];
dalbanf 9:cfa9a379dbd3 201 pos++;
dalbanf 9:cfa9a379dbd3 202 }
dalbanf 9:cfa9a379dbd3 203 PC.printf("\r\n");
cybermars 12:81209b6a2318 204
dalbanf 9:cfa9a379dbd3 205 return true;
dalbanf 0:8814d243dfec 206 }
dalbanf 0:8814d243dfec 207
dalbanf 0:8814d243dfec 208 //APCDGetWappAlarm: function to check from APCD mailbox if a wapp alarm was sent by automation
dalbanf 0:8814d243dfec 209 // return 1 in case of alarm
dalbanf 0:8814d243dfec 210 // return 2 if apcd.connect failed
dalbanf 0:8814d243dfec 211 // return 0 if there is no alarm
cybermars 12:81209b6a2318 212 int APCDGetWappAlarm()
cybermars 12:81209b6a2318 213 {
dalbanf 0:8814d243dfec 214 int result = 2;
dalbanf 0:8814d243dfec 215 int rtrn = 2;
dalbanf 0:8814d243dfec 216 int attempt = 0;
cybermars 12:81209b6a2318 217
dalbanf 0:8814d243dfec 218 //Open a TCP socket
dalbanf 0:8814d243dfec 219 rtrn = apcd.open(&eth);
dalbanf 0:8814d243dfec 220 PC.printf("\r\nAPCDGetWappAlarm:\r\n");
dalbanf 0:8814d243dfec 221 PC.printf("\tOpen socket -> %d\r\n", rtrn);
dalbanf 0:8814d243dfec 222 blue = 1;
cybermars 12:81209b6a2318 223
dalbanf 0:8814d243dfec 224 //Try APCD connection
dalbanf 0:8814d243dfec 225 rtrn = apcd.connect(SERVER, PORT);
cybermars 12:81209b6a2318 226 while (rtrn < 0 && attempt < SOCKETCONNECTION_ATTEMPT) {
dalbanf 0:8814d243dfec 227 wait_ms(500);
dalbanf 0:8814d243dfec 228 rtrn = apcd.connect(SERVER, PORT);
dalbanf 0:8814d243dfec 229 attempt++;
dalbanf 0:8814d243dfec 230 }
dalbanf 0:8814d243dfec 231 PC.printf("\tConnection -> %d\r\n", rtrn);
cybermars 12:81209b6a2318 232
cybermars 12:81209b6a2318 233 if (rtrn == 0) { //Automation server connection successfully
dalbanf 0:8814d243dfec 234 APCDsendData(MBX_OPEN); //Open the APCD bus
dalbanf 0:8814d243dfec 235 APCDgetData();
cybermars 12:81209b6a2318 236
dalbanf 0:8814d243dfec 237 //Get message's number in the mailbox
dalbanf 0:8814d243dfec 238 PC.printf("\tAPCD -> %s\r\n", MBX_COUNT);
cybermars 12:81209b6a2318 239 APCDsendData(MBX_COUNT);
cybermars 12:81209b6a2318 240
dalbanf 0:8814d243dfec 241 //Extract the data from the string received
dalbanf 0:8814d243dfec 242 char buf[256];
dalbanf 0:8814d243dfec 243 sprintf(buf,"%s", APCDgetData());
dalbanf 0:8814d243dfec 244 unsigned short int answerLen = strlen(buf);
dalbanf 0:8814d243dfec 245 PC.printf("\tAnswer -> %s\r\n", buf);
cybermars 12:81209b6a2318 246 if (answerLen > 10) { //Answer will be MBX_COUNT,xx where xx is the number of message
dalbanf 0:8814d243dfec 247 int nbMsg = 0;
dalbanf 0:8814d243dfec 248 char nb[10];
dalbanf 0:8814d243dfec 249 int pos = 10;
cybermars 12:81209b6a2318 250 while (buf[pos] != '\0' && pos < 20) {
dalbanf 0:8814d243dfec 251 nb[pos-10] = buf[pos];
dalbanf 0:8814d243dfec 252 pos++;
dalbanf 0:8814d243dfec 253 }
dalbanf 0:8814d243dfec 254 nb[pos-10] = '\0';
dalbanf 0:8814d243dfec 255 nbMsg = atoi(nb);
dalbanf 0:8814d243dfec 256 PC.printf("\tMsg count -> %d\r\n", nbMsg);
cybermars 12:81209b6a2318 257 //If there is a message or more, get all message (=> mailbox will be empty)
cybermars 12:81209b6a2318 258 if (nbMsg > 0) {
dalbanf 0:8814d243dfec 259 result = 1;
cybermars 12:81209b6a2318 260 while (nbMsg > 0) { //Get all VFEI message in the mailbox
dalbanf 0:8814d243dfec 261 PC.printf("\tAPCD -> %s\r\n", MBX_GET);
dalbanf 0:8814d243dfec 262 APCDsendData(MBX_GET);
dalbanf 0:8814d243dfec 263 APCDgetData();
dalbanf 0:8814d243dfec 264 nbMsg--;
dalbanf 0:8814d243dfec 265 }
cybermars 12:81209b6a2318 266 } else result = 0;
dalbanf 0:8814d243dfec 267 }
cybermars 12:81209b6a2318 268
dalbanf 0:8814d243dfec 269 //Close the APCD bus
cybermars 12:81209b6a2318 270 APCDsendData(MBX_CLOSE);
dalbanf 0:8814d243dfec 271 PC.printf("\tAPCD -> %s\r\n", MBX_CLOSE);
dalbanf 0:8814d243dfec 272 APCDgetData();
cybermars 12:81209b6a2318 273 } else result = 2;
cybermars 12:81209b6a2318 274
dalbanf 0:8814d243dfec 275 apcd.close();
cybermars 12:81209b6a2318 276 blue = 0;
dalbanf 0:8814d243dfec 277 return result;
dalbanf 0:8814d243dfec 278 }
dalbanf 0:8814d243dfec 279
dalbanf 0:8814d243dfec 280 //APCDSendTagID: function to send the VFEI message with TagID to the automation
dalbanf 0:8814d243dfec 281 // return 1 if data sent correctly
dalbanf 0:8814d243dfec 282 // return 2 if apcd.connect failed
dalbanf 0:8814d243dfec 283 // return 0 if sent data lenght doesn't match with message lenght
cybermars 12:81209b6a2318 284 int APCDSendTagID()
cybermars 12:81209b6a2318 285 {
dalbanf 0:8814d243dfec 286 int attempt = 0;
dalbanf 0:8814d243dfec 287 int result = 2;
dalbanf 0:8814d243dfec 288 int rtrn = 2;
dalbanf 0:8814d243dfec 289 PC.printf("\r\nAPCDSendTagID:\r\n");
dalbanf 0:8814d243dfec 290
dalbanf 0:8814d243dfec 291 //Build VFEI message
dalbanf 0:8814d243dfec 292 char concatBuffer[256];
dalbanf 0:8814d243dfec 293 sprintf(concatBuffer, "%s%s%s\0", MBX_PUT_BEGIN, bufTagID, MBX_PUT_END);
dalbanf 0:8814d243dfec 294 PC.printf("\tVFEI message : %s\r\n", concatBuffer);
cybermars 12:81209b6a2318 295
dalbanf 0:8814d243dfec 296 //Open a TCP socket
dalbanf 0:8814d243dfec 297 rtrn = apcd.open(&eth);
dalbanf 0:8814d243dfec 298 PC.printf("\tOpen socket -> %d\r\n", rtrn);
dalbanf 0:8814d243dfec 299 blue = 1;
dalbanf 0:8814d243dfec 300
dalbanf 0:8814d243dfec 301 //Try APCD connection
dalbanf 0:8814d243dfec 302 rtrn = apcd.connect(SERVER, PORT);
cybermars 12:81209b6a2318 303 while (rtrn < 0 && attempt < SOCKETCONNECTION_ATTEMPT) {
dalbanf 0:8814d243dfec 304 wait_ms(500);
dalbanf 0:8814d243dfec 305 rtrn = apcd.connect(SERVER, PORT);
dalbanf 0:8814d243dfec 306 attempt++;
dalbanf 0:8814d243dfec 307 }
dalbanf 0:8814d243dfec 308 PC.printf("\tConnection -> %d\r\n", rtrn);
dalbanf 0:8814d243dfec 309
dalbanf 0:8814d243dfec 310 //Send VFEI message if possible
cybermars 12:81209b6a2318 311 if (rtrn == 0) {
dalbanf 0:8814d243dfec 312 PC.printf("\tAPCD -> %s\r\n", MBX_OPEN);
dalbanf 0:8814d243dfec 313 APCDsendData(MBX_OPEN); //Open the APCD bus
dalbanf 0:8814d243dfec 314 APCDgetData();
dalbanf 0:8814d243dfec 315 rtrn = APCDsendData(concatBuffer); //Send the VFEI message
dalbanf 0:8814d243dfec 316 APCDgetData();
dalbanf 0:8814d243dfec 317 PC.printf("\tAPCD -> %s\r\n", MBX_CLOSE);
dalbanf 0:8814d243dfec 318 APCDsendData(MBX_CLOSE); //Close the APCD bus
dalbanf 0:8814d243dfec 319 APCDgetData();
dalbanf 0:8814d243dfec 320 result = 1;
cybermars 12:81209b6a2318 321 } else result = 2;
cybermars 12:81209b6a2318 322
dalbanf 0:8814d243dfec 323 apcd.close();
dalbanf 0:8814d243dfec 324 blue = 0;
dalbanf 0:8814d243dfec 325 return result;
dalbanf 0:8814d243dfec 326 }
dalbanf 0:8814d243dfec 327
dalbanf 0:8814d243dfec 328 //APCDsendData: function to send data to APCD bus
dalbanf 0:8814d243dfec 329 // Return 1 if data sent correctly, 0 in other case
dalbanf 0:8814d243dfec 330 // Author: F. Frezot from Arduino code
cybermars 12:81209b6a2318 331 int APCDsendData (char *tcpCmd)
cybermars 12:81209b6a2318 332 {
dalbanf 0:8814d243dfec 333 unsigned short int dataLength = strlen(tcpCmd);
dalbanf 0:8814d243dfec 334 unsigned char len[2];
cybermars 12:81209b6a2318 335
dalbanf 0:8814d243dfec 336 len[0] = ((dataLength>>8)&0xFF); //MSB
dalbanf 0:8814d243dfec 337 len[1] = ((dataLength>>0)&0xFF); //LSB
dalbanf 0:8814d243dfec 338
dalbanf 0:8814d243dfec 339 int rtrnLenght = apcd.send(len, sizeof(len));
dalbanf 0:8814d243dfec 340 rtrnLenght = apcd.send(tcpCmd, dataLength);
dalbanf 0:8814d243dfec 341 if (rtrnLenght == dataLength) return 1;
dalbanf 0:8814d243dfec 342 else return 0;
dalbanf 0:8814d243dfec 343 }
cybermars 12:81209b6a2318 344
dalbanf 0:8814d243dfec 345
dalbanf 0:8814d243dfec 346 //APCDgetData: function to read data from APCD bus
dalbanf 0:8814d243dfec 347 // Return a char array with data read
dalbanf 0:8814d243dfec 348 // Author: F. Frezot from Arduino code
cybermars 12:81209b6a2318 349 char *APCDgetData ()
cybermars 12:81209b6a2318 350 {
dalbanf 0:8814d243dfec 351 char MSB[1];
dalbanf 0:8814d243dfec 352 char LSB[1];
dalbanf 0:8814d243dfec 353 unsigned short int dataLength;
dalbanf 0:8814d243dfec 354 char readBuf[256] = "\0";
cybermars 12:81209b6a2318 355
dalbanf 0:8814d243dfec 356 wait_ms(APCD_READ_DELAY);
dalbanf 0:8814d243dfec 357
dalbanf 0:8814d243dfec 358 apcd.recv(MSB, 1);
dalbanf 0:8814d243dfec 359 apcd.recv(LSB, 1);
cybermars 12:81209b6a2318 360 dataLength = ((MSB[0]<<8)&0xFF00)|(LSB[0]<<0)&0x00FF;
dalbanf 0:8814d243dfec 361 apcd.recv(readBuf, dataLength);
cybermars 12:81209b6a2318 362
dalbanf 0:8814d243dfec 363 return (readBuf);
cybermars 12:81209b6a2318 364 }
dalbanf 0:8814d243dfec 365
cybermars 12:81209b6a2318 366 int main()
cybermars 12:81209b6a2318 367 {
dalbanf 0:8814d243dfec 368 // Init Serial and nucleo board LED (off)
cybermars 12:81209b6a2318 369 PC.baud(9600);
dalbanf 0:8814d243dfec 370 PC.printf("Running ...\r\n");
dalbanf 0:8814d243dfec 371 green = 0;
dalbanf 0:8814d243dfec 372 red = 0;
dalbanf 0:8814d243dfec 373 blue = 0;
cybermars 12:81209b6a2318 374
dalbanf 0:8814d243dfec 375 // Init RC522 Chip
dalbanf 0:8814d243dfec 376 PC.printf("\tInit RFID...");
dalbanf 0:8814d243dfec 377 wait_ms(500);
dalbanf 0:8814d243dfec 378 Antenna.PCD_Init();
dalbanf 0:8814d243dfec 379 wait_ms(100);
cybermars 12:81209b6a2318 380 Antenna.PCD_AntennaOff(); //Turn off the RFID antenna.
dalbanf 0:8814d243dfec 381 TagReadLED = LED_OFF; //Turn off the LED who indicate if a TAG was read
dalbanf 0:8814d243dfec 382 PC.printf("DONE\r\n");
dalbanf 0:8814d243dfec 383
dalbanf 1:24db8b26b816 384 //PC.printf("\tClose relay for prober Interlock\r\n");
dalbanf 1:24db8b26b816 385 //Interlock = RELAY_CLOSED; //Close relay for prober interlock
cybermars 12:81209b6a2318 386
dalbanf 0:8814d243dfec 387 //Ethernet Init
dalbanf 0:8814d243dfec 388 PC.printf("\tInit Ethernet...");
dalbanf 0:8814d243dfec 389 eth.set_network(IP, MASK, GATEWAY);
dalbanf 0:8814d243dfec 390 int rtrn = eth.connect();
cybermars 10:4eebb90e8e06 391 int reset_eth = 0;
cybermars 12:81209b6a2318 392 if (rtrn == 0) {
dalbanf 0:8814d243dfec 393 PC.printf("DONE\r\n");
dalbanf 0:8814d243dfec 394 const char *ip = eth.get_ip_address();
dalbanf 0:8814d243dfec 395 const char *mac = eth.get_mac_address();
dalbanf 0:8814d243dfec 396 PC.printf("\tIP address = %s\n\r", ip ? ip : "No IP");
dalbanf 0:8814d243dfec 397 PC.printf("\tMAC address = %s\n\r", mac ? mac : "No MAC");
dalbanf 0:8814d243dfec 398 PC.printf("Running DONE\r\n\r\n");
cybermars 12:81209b6a2318 399 } else {
dalbanf 0:8814d243dfec 400 PC.printf("FAIL -> Check if Network cable is plug-in then reset the board\r\n");
dalbanf 0:8814d243dfec 401 red = 0;
dalbanf 0:8814d243dfec 402 green = 0;
dalbanf 0:8814d243dfec 403 PC.printf("Running FAIL -> Program aborted\r\n\r\n");
cybermars 12:81209b6a2318 404 while (reset_eth <= 900) {
dalbanf 0:8814d243dfec 405 blue = !blue;
dalbanf 0:8814d243dfec 406 TagReadLED = !TagReadLED;
dalbanf 0:8814d243dfec 407 wait_ms(200);
cybermars 10:4eebb90e8e06 408 reset_eth++;
dalbanf 0:8814d243dfec 409 }
cybermars 10:4eebb90e8e06 410 NVIC_SystemReset(); // reset system if no ethernet connection succeeded after 180sec Added by B. Tournier
cybermars 12:81209b6a2318 411
dalbanf 0:8814d243dfec 412 }
cybermars 12:81209b6a2318 413
dalbanf 0:8814d243dfec 414 //Waiting Tag and WAPP alarm
dalbanf 0:8814d243dfec 415 int count = 0;
cybermars 10:4eebb90e8e06 416 int reset_trigger = 0;
dalbanf 0:8814d243dfec 417 while (true) {
dalbanf 0:8814d243dfec 418 //Check if Tag read
cybermars 12:81209b6a2318 419 //if (true) {
dalbanf 0:8814d243dfec 420 //Turn on the antenna
dalbanf 0:8814d243dfec 421 Antenna.PCD_AntennaOn();
dalbanf 0:8814d243dfec 422 wait_ms(100);
cybermars 12:81209b6a2318 423
dalbanf 0:8814d243dfec 424 //Waiting Tag ID
cybermars 12:81209b6a2318 425 if (IsTagPresent()) {
dalbanf 0:8814d243dfec 426 green = 0;
cybermars 12:81209b6a2318 427 int rtrn = APCDSendTagID();
cybermars 12:81209b6a2318 428 if (rtrn == 1) {
dalbanf 0:8814d243dfec 429 PC.printf("\tTag ID sent correctly (Code=%d)\r\n", rtrn);
dalbanf 0:8814d243dfec 430 red = 0;
dalbanf 0:8814d243dfec 431 //Blink Tag LED during 3s
cybermars 12:81209b6a2318 432 for (int i = 0; i < 10; i++) {
dalbanf 0:8814d243dfec 433 TagReadLED = !TagReadLED;
dalbanf 0:8814d243dfec 434 wait_ms(500);
dalbanf 0:8814d243dfec 435 }
dalbanf 0:8814d243dfec 436 //Tag LED continuous ON during 1s
dalbanf 0:8814d243dfec 437 TagReadLED = LED_ON;
dalbanf 0:8814d243dfec 438 wait_ms(2000);
cybermars 12:81209b6a2318 439
dalbanf 0:8814d243dfec 440 //Turn off Tag LED
cybermars 12:81209b6a2318 441 TagReadLED = LED_OFF;
cybermars 12:81209b6a2318 442 } else {
dalbanf 0:8814d243dfec 443 PC.printf("\tWARNING: Fail to send Tag ID (Code=%d)\r\n", rtrn);
dalbanf 0:8814d243dfec 444 red = 1;
dalbanf 0:8814d243dfec 445 }
dalbanf 0:8814d243dfec 446 }
dalbanf 0:8814d243dfec 447 Antenna.PCD_AntennaOff();
cybermars 12:81209b6a2318 448 //}
dalbanf 0:8814d243dfec 449
dalbanf 4:caf61234018c 450 //Check alarm each 4s
cybermars 12:81209b6a2318 451 if (count >= 8) { // Count value = each xx seconds * 2. Example: Count >= 4 for check alarm each 2s
dalbanf 0:8814d243dfec 452 green = 0;
dalbanf 0:8814d243dfec 453 count = -1;
dalbanf 0:8814d243dfec 454 int rtrn = APCDGetWappAlarm();
cybermars 12:81209b6a2318 455 if (rtrn == 1) {
dalbanf 0:8814d243dfec 456 red = 0;
cybermars 12:81209b6a2318 457 PC.printf("Wapp alarm received");
cybermars 12:81209b6a2318 458 //wait_ms(INTERLOCK_DELAY);
cybermars 12:81209b6a2318 459 //Interlock = RELAY_OPEN; //Activate the relay on prober interlock
cybermars 12:81209b6a2318 460 wait_ms(2000);
cybermars 12:81209b6a2318 461 //Interlock = RELAY_CLOSED;
cybermars 12:81209b6a2318 462 //PC.printf(" -> Close interlock relay\r\n");
cybermars 12:81209b6a2318 463 } else if (rtrn == 2) {
dalbanf 0:8814d243dfec 464 PC.printf("WARNING: Fail to check if alarm is present (Code=%d)\r\n", rtrn);
dalbanf 0:8814d243dfec 465 red = 1;
cybermars 12:81209b6a2318 466 } else if (rtrn == 0) {
dalbanf 0:8814d243dfec 467 red = 0;
dalbanf 0:8814d243dfec 468 }
cybermars 12:81209b6a2318 469 }
dalbanf 0:8814d243dfec 470
dalbanf 0:8814d243dfec 471 green = !green;
dalbanf 0:8814d243dfec 472 count++;
cybermars 10:4eebb90e8e06 473 reset_trigger++;
dalbanf 0:8814d243dfec 474 wait_ms(500);
cybermars 12:81209b6a2318 475 if (reset_trigger >= 14400) {
cybermars 10:4eebb90e8e06 476 NVIC_SystemReset(); // reset system each 2 hours
cybermars 10:4eebb90e8e06 477 }
dalbanf 0:8814d243dfec 478 }
cybermars 10:4eebb90e8e06 479 }