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

Dependencies:   MFRC522

Committer:
dalbanf
Date:
Wed Dec 20 09:26:10 2017 +0000
Revision:
5:2b7c8f43efd9
Parent:
4:caf61234018c
Child:
6:f7c355fcb302
Add 3 new prober IP address

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