Ready to test

This commit is contained in:
TheJoKlLa 2022-09-24 09:30:34 +02:00
parent e4049af19e
commit 984bc9d873
5 changed files with 67 additions and 25 deletions

View File

@ -5,7 +5,7 @@ READERID is 5 Digits
1. Request: Topic="fabreader/READERID/requestOTA", Payload=256 Bytes APDU Command 1. Request: Topic="fabreader/READERID/requestOTA", Payload=256 Bytes APDU Command
1. Response: Topic="fabreader/READERID/responseOTA", Payload=256 Bytes APDU Response 1. Response: Topic="fabreader/READERID/responseOTA", Payload=256 Bytes APDU Response
1. Stop: Topic="fabreader/READERID/stopOTA", Payload=NULL 1. Stop: Topic="fabreader/READERID/stopOTA", Payload=NULL
1. Cancel: Topic="fabreader/READERID/cancelOTA", Payload=NULL 1. Cancel: Topic="fabreader/READERID/cancelOTA", Payload=UID of Card
1. Restart: Topic="fabreader/READERID/restartOTA", Payload=NULL 1. Restart: Topic="fabreader/READERID/restartOTA", Payload=NULL
## Procedure: ## Procedure:

View File

@ -13,12 +13,12 @@ NFC::NFC(int pin_ss, int pin_rst)
bool NFC::hasNewCard() bool NFC::hasNewCard()
{ {
if(rfid->PICC_IsNewCardPresent() && rfid->PICC_ReadCardSerial() && rfid->uid.sak == 0x20) if(rfid->PICC_IsNewCardPresent() && rfid->PICC_ReadCardSerial())
{ {
byte atqaLen = sizeof(atqa); byte atqaLen = sizeof(atqa);
MFRC522::StatusCode status = rfid->PICC_RequestA(atqa, &atqaLen); MFRC522::StatusCode status = rfid->PICC_RequestA(atqa, &atqaLen);
Serial.printf("PICC_RequestA: 0x%02x\n", status); Serial.printf("PICC_RequestA: 0x%02x\n", status);
if(atqa[0] == 0x44) if(status == MFRC522::STATUS_OK && atqa[0] == 0x44)
{ {
return true; return true;
} }
@ -26,27 +26,56 @@ bool NFC::hasNewCard()
return false; return false;
} }
void NFC::selectCard() bool NFC::selectCard()
{ {
MFRC522::StatusCode status = rfid->PICC_Select(&(rfid->uid)); MFRC522::StatusCode status = rfid->PICC_Select(&(rfid->uid));
Serial.printf("PICC_Select: 0x%02x\n", status); Serial.printf("PICC_Select: 0x%02x\n", status);
uid = rfid->uid; if(status != MFRC522::STATUS_OK)
{
return false;
}
cardSelected = true; cardSelected = true;
uid = rfid->uid;
Serial.println("Card Selected"); Serial.println("Card Selected");
return true;
} }
void NFC::deselectCard()
bool NFC::deselectCard()
{ {
MFRC522::StatusCode status = rfid->PICC_HaltA(); MFRC522::StatusCode status = rfid->PICC_HaltA();
Serial.printf("PICC_HaltA: 0x%02x\n", status); Serial.printf("PICC_HaltA: 0x%02x\n", status);
if(status != MFRC522::STATUS_OK)
{
return false;
}
cardSelected = false; cardSelected = false;
Serial.println("Card Deselected");
return true;
} }
bool NFC::isCardLost() bool NFC::isCardLost()
{ {
MFRC522::StatusCode status = rfid->PICC_Select(&(uid)); uint8_t control = 0x00;
Serial.printf("PICC_Select: 0x%02x\n", status); for(int i=0; i<3; i++)
{
return status != MFRC522::STATUS_OK; if(!rfid->PICC_IsNewCardPresent())
{
if(rfid->PICC_ReadCardSerial())
{
control |= 0x16;
}
if(rfid->PICC_ReadCardSerial())
{
control |= 0x16;
}
control += 0x1;
}
control += 0x4;
}
return !(control == 13 || control == 14);
} }
MFRC522::StatusCode NFC::Transceive(byte* command, byte command_len, byte* response, byte response_len) MFRC522::StatusCode NFC::Transceive(byte* command, byte command_len, byte* response, byte response_len)

View File

@ -16,8 +16,8 @@ class NFC
MFRC522* rfid; MFRC522* rfid;
NFC(int pin_ss, int pin_rst); NFC(int pin_ss, int pin_rst);
bool hasNewCard(); bool hasNewCard();
void selectCard(); bool selectCard();
void deselectCard(); bool deselectCard();
bool isCardLost(); bool isCardLost();
MFRC522::Uid getUID(); MFRC522::Uid getUID();

View File

@ -16,13 +16,18 @@ bool OTAProxy::hasActiveOTA()
void OTAProxy::startOTA() void OTAProxy::startOTA()
{ {
nfc->selectCard(); if(!(nfc->selectCard()))
{
return;
}
activeOTA = true; activeOTA = true;
char topic[] = "fabreader/00000/startOTA"; char topic[] = "fabreader/00000/startOTA";
sprintf(topic, "fabreader/%05d/startOTA", id); sprintf(topic, "fabreader/%05d/startOTA", id);
MFRC522::Uid uid = nfc->getUID(); MFRC522::Uid uid = nfc->getUID();
mqtt->publish(topic, uid.uidByte, int(uid.size)); mqtt->publish(topic, uid.uidByte, uid.size);
Serial.println("Start OTA");
} }
void OTAProxy::continueOTA(char* topic, byte* payload, unsigned int length) void OTAProxy::continueOTA(char* topic, byte* payload, unsigned int length)
@ -41,22 +46,25 @@ void OTAProxy::continueOTA(char* topic, byte* payload, unsigned int length)
if(strcmp(topic, topic_requestOTA)) if(strcmp(topic, topic_requestOTA))
{ {
Serial.println("Request OTA");
byte response[APDU_BUFFER_SIZE] = {0}; byte response[APDU_BUFFER_SIZE] = {0};
nfc->Transceive(payload, length, response, APDU_BUFFER_SIZE); nfc->Transceive(payload, length, response, APDU_BUFFER_SIZE);
mqtt->publish(topic_responseOTA, response, APDU_BUFFER_SIZE); mqtt->publish(topic_responseOTA, response, APDU_BUFFER_SIZE);
Serial.println("Response OTA");
} }
else if(strcmp(topic, topic_stopOTA)) else if(strcmp(topic, topic_stopOTA))
{ {
nfc->deselectCard(); Serial.println("Stop OTA");
while(!(nfc->deselectCard()));
activeOTA = false; activeOTA = false;
} }
else if(strcmp(topic, topic_restartOTA)) else if(strcmp(topic, topic_restartOTA))
{ {
nfc->deselectCard(); Serial.println("Restart OTA");
while(!(nfc->deselectCard()));
if(nfc->hasNewCard()) if(nfc->hasNewCard())
{ {
nfc->selectCard();
startOTA(); startOTA();
} }
} }
@ -66,8 +74,11 @@ void OTAProxy::cancelOTA()
{ {
char topic_cancelOTA[] = "fabreader/00000/cancelOTA"; char topic_cancelOTA[] = "fabreader/00000/cancelOTA";
sprintf(topic_cancelOTA, "fabreader/%05d/cancelOTA", id); sprintf(topic_cancelOTA, "fabreader/%05d/cancelOTA", id);
mqtt->publish(topic_cancelOTA, ""); MFRC522::Uid uid = nfc->getUID();
mqtt->publish(topic_cancelOTA, uid.uidByte, uid.size);
nfc->deselectCard(); while(!(nfc->deselectCard()));
activeOTA = false; activeOTA = false;
Serial.println("Cancel OTA");
} }

View File

@ -75,7 +75,6 @@ void callback(char* topic, byte* payload, unsigned int length)
Serial.println("Recive Message"); Serial.println("Recive Message");
if(ota->hasActiveOTA()) if(ota->hasActiveOTA())
{ {
Serial.println("Continue OTA");
ota->continueOTA(topic, payload, length); ota->continueOTA(topic, payload, length);
} }
} }
@ -83,9 +82,9 @@ void callback(char* topic, byte* payload, unsigned int length)
void setup() void setup()
{ {
config.ID = 1; config.ID = 1;
strcpy(config.WLAN_SSID, "SSID"); strcpy(config.WLAN_SSID, "");
strcpy(config.WLAN_Password, "dodahV3eePeiducaicae"); strcpy(config.WLAN_Password, "");
strcpy(config.MQTT_Broker, "10.7.255.233"); strcpy(config.MQTT_Broker, "");
Serial.begin(115200); Serial.begin(115200);
Serial.print("\n\n\n"); Serial.print("\n\n\n");
@ -98,6 +97,11 @@ void setup()
Serial.println("Connecting NFC ..."); Serial.println("Connecting NFC ...");
nfc = new NFC(PIN_RFID_SPI_SS, PIN_RFID_RST); nfc = new NFC(PIN_RFID_SPI_SS, PIN_RFID_RST);
if(!(nfc->rfid->PCD_PerformSelfTest()))
{
Serial.println("NFC Test failed");
}
//nfc->rfid->PCD_SetAntennaGain(MFRC522::RxGain_max);
Serial.println("NFC connected"); Serial.println("NFC connected");
setup_wifi(); setup_wifi();
@ -119,12 +123,10 @@ void loop()
if(!ota->hasActiveOTA() && nfc->hasNewCard()) if(!ota->hasActiveOTA() && nfc->hasNewCard())
{ {
Serial.println("Start OTA");
ota->startOTA(); ota->startOTA();
} }
if(ota->hasActiveOTA() && nfc->isCardLost()) if(ota->hasActiveOTA() && nfc->isCardLost())
{ {
Serial.println("Cancel OTA");
ota->cancelOTA(); ota->cancelOTA();
} }
} }