mirror of
https://gitlab.com/fabinfra/fabhardware/fabreader.git
synced 2025-03-14 07:31:42 +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. 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:
|
||||||
|
@ -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)
|
||||||
|
@ -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();
|
||||||
|
|
||||||
|
@ -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");
|
||||||
}
|
}
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user