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. Response: Topic="fabreader/READERID/responseOTA", Payload=256 Bytes APDU Response
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
## Procedure:

View File

@ -13,12 +13,12 @@ NFC::NFC(int pin_ss, int pin_rst)
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);
MFRC522::StatusCode status = rfid->PICC_RequestA(atqa, &atqaLen);
Serial.printf("PICC_RequestA: 0x%02x\n", status);
if(atqa[0] == 0x44)
if(status == MFRC522::STATUS_OK && atqa[0] == 0x44)
{
return true;
}
@ -26,27 +26,56 @@ bool NFC::hasNewCard()
return false;
}
void NFC::selectCard()
bool NFC::selectCard()
{
MFRC522::StatusCode status = rfid->PICC_Select(&(rfid->uid));
Serial.printf("PICC_Select: 0x%02x\n", status);
uid = rfid->uid;
if(status != MFRC522::STATUS_OK)
{
return false;
}
cardSelected = true;
uid = rfid->uid;
Serial.println("Card Selected");
return true;
}
void NFC::deselectCard()
bool NFC::deselectCard()
{
MFRC522::StatusCode status = rfid->PICC_HaltA();
Serial.printf("PICC_HaltA: 0x%02x\n", status);
if(status != MFRC522::STATUS_OK)
{
return false;
}
cardSelected = false;
Serial.println("Card Deselected");
return true;
}
bool NFC::isCardLost()
{
MFRC522::StatusCode status = rfid->PICC_Select(&(uid));
Serial.printf("PICC_Select: 0x%02x\n", status);
return status != MFRC522::STATUS_OK;
uint8_t control = 0x00;
for(int i=0; i<3; i++)
{
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)

View File

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

View File

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

View File

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