mirror of
https://gitlab.com/fabinfra/fabhardware/fabreader.git
synced 2025-03-12 22:51:43 +01:00
Ready to test
This commit is contained in:
parent
e4049af19e
commit
984bc9d873
@ -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:
|
||||
|
@ -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)
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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");
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user