From acc594432390303b407149fa856954624b5472d1 Mon Sep 17 00:00:00 2001 From: Clement Date: Fri, 19 Jan 2024 16:53:50 +0100 Subject: [PATCH] add bigNFC lib --- lib/BigNFC/include/BigNFC.h | 63 +++++++++++++++++++++++++++++ lib/BigNFC/include/TrameList.h | 29 ++++++++++++++ lib/BigNFC/src/BigNFC.cpp | 73 ++++++++++++++++++++++++++++++++++ 3 files changed, 165 insertions(+) create mode 100644 lib/BigNFC/include/BigNFC.h create mode 100644 lib/BigNFC/include/TrameList.h create mode 100644 lib/BigNFC/src/BigNFC.cpp diff --git a/lib/BigNFC/include/BigNFC.h b/lib/BigNFC/include/BigNFC.h new file mode 100644 index 0000000..3d14dcb --- /dev/null +++ b/lib/BigNFC/include/BigNFC.h @@ -0,0 +1,63 @@ +#ifndef BIG_NFC_H +#define BIG_NFC_H + +#include +#include +#include "TrameList.h" + +class BigNFC{ +public: + BigNFC(); + + /** + * @brief initialise le lecteur NFC + * + * @return true le lecteur NFC est initialisé + * @return false le lecteur NFC n'est pas initialisé (erreur) + */ + bool init(); + + /** + * @brief rafraichit les données du lecteur NFC + * + */ + void refresh(); + + /** + * @brief affiche la dernière trame lue + * + */ + void printTrame(); + + /** + * @brief retourne le nombre de tags lus + * + * @return int nombre de tags lus + */ + int getNbTags(); + +private: + + /** + * @brief convertit un nombre en hexadécimal (a 2 chiffres) + * + * @param number nombre à convertir + * @return String nombre converti + */ + String digitify(int number); + + /** + * @brief variable pair/impair pour le type de trame + * + */ + bool pair; + + /** + * @brief dernière trame lue + * + */ + std::vector* trame; + +}; + +#endif diff --git a/lib/BigNFC/include/TrameList.h b/lib/BigNFC/include/TrameList.h new file mode 100644 index 0000000..9e412ae --- /dev/null +++ b/lib/BigNFC/include/TrameList.h @@ -0,0 +1,29 @@ +#ifndef TRAM_LIST_H +#define TRAM_LIST_H + +#include +#include + +const std::vector SEARCH_TRAM_0 = {0x05, 0x07, 0x01, 0x01, 0x01, 0x00, 0xEB, 0x5F}; + +const std::vector INIT_TRAM_0 = {0xFA, 0x05, 0x01, 0xC0, 0x5A, 0xDF}; +const std::vector INIT_TRAM_1 = {0xFA, 0x08, 0x01, 0x00, 0x01, 0x01, 0x01, 0xE1, 0x70}; +const std::vector INIT_TRAM_2 = {0xFA, 0x08, 0x01, 0x40, 0x01, 0x02, 0x01, 0x3E, 0x4C}; +const std::vector INIT_TRAM_3 = {0xFA, 0x08, 0x01, 0x00, 0x01, 0x03, 0x01, 0x51, 0x43}; +const std::vector INIT_TRAM_4 = {0xFA, 0x08, 0x01, 0x40, 0x01, 0x04, 0x01, 0xEE, 0x18}; +const std::vector INIT_TRAM_5 = {0xFA, 0x08, 0x01, 0x00, 0x01, 0x05, 0x01, 0x81, 0x17}; +const std::vector INIT_TRAM_6 = {0xFA, 0x08, 0x01, 0x40, 0x01, 0x06, 0x01, 0x5E, 0x2B}; +const std::vector INIT_TRAM_7 = {0xFA, 0x08, 0x01, 0x00, 0x01, 0x07, 0x01, 0x31, 0x24}; + +const std::vector REP_TRAM_0 = {0xFA, 0x05, 0x01, 0xE0, 0x58, 0xFE}; +const std::vector REP_TRAM_1 = {0xFA, 0x17, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x04, 0x00, 0x00, 0x03, 0x01, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x8A}; +const std::vector REP_TRAM_2 = {0xFA, 0x17, 0x01, 0x40, 0x01, 0x00, 0x00, 0x01, 0x00, 0x09, 0x00, 0xFF, 0x00, 0x10, 0x07, 0x13, 0x01, 0x0E, 0x08, 0x09, 0x0B, 0x00, 0x2D, 0x98}; +const std::vector REP_TRAM_3 = {0xFA, 0x17, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xE8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x43, 0x83, 0x00, 0x00, 0x00, 0x9A, 0xBF}; +const std::vector REP_TRAM_4 = {0xFA, 0x17, 0x01, 0x40, 0x01, 0x00, 0x00, 0x01, 0x04, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7, 0x15}; +const std::vector REP_TRAM_5 = {0xFA, 0x17, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0A, 0x03, 0x0A, 0x00, 0xF6, 0xCD}; +const std::vector REP_TRAM_6 = {0xFA, 0x17, 0x01, 0x40, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xD4, 0x03}; +const std::vector REP_TRAM_7 = {0xFA, 0x17, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xF6}; + +const std::vector READ_TRAM_0 = {0xFA, 0x24, 0x01, 0x00, 0x31, 0x02, 0x07, 0x0E, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x06, 0x00, 0x03, 0x00, 0xFF, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x5D, 0x74}; +const std::vector READ_TRAM_1 = {0xFA, 0x24, 0x01, 0x40, 0x31, 0x02, 0x07, 0x0E, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x06, 0x00, 0x03, 0x00, 0xFF, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x10, 0x45}; +#endif diff --git a/lib/BigNFC/src/BigNFC.cpp b/lib/BigNFC/src/BigNFC.cpp new file mode 100644 index 0000000..7b0b340 --- /dev/null +++ b/lib/BigNFC/src/BigNFC.cpp @@ -0,0 +1,73 @@ +#include "../include/BigNFC.h" + + +BigNFC::BigNFC(/* args */){ + Serial2.begin(115200,SERIAL_8N1,5,17);//TODO: mettre le port série en paramètre + this->pair = true; + this->trame = new std::vector(); +} + +bool BigNFC::init(){ + const std::vector> INIT_TRAMES = {INIT_TRAM_0, INIT_TRAM_1, INIT_TRAM_2, INIT_TRAM_3, INIT_TRAM_4, INIT_TRAM_5, INIT_TRAM_6, INIT_TRAM_7}; + const std::vector> REP_TRAMES = {REP_TRAM_0, REP_TRAM_1, REP_TRAM_2, REP_TRAM_3, REP_TRAM_4, REP_TRAM_5, REP_TRAM_6, REP_TRAM_7}; + int repnb = 0; + for(std::vector i: INIT_TRAMES){ + for(byte j: i){ + Serial2.write(j); + } + while (Serial2.available() == 0); + while (Serial2.available() > 0){ + for(byte j: REP_TRAMES[repnb]){ + if(Serial2.read() != j){ + Serial.println("NFC reader init failed"); + return false; + } + } + } + repnb++; + } + return true; +} + +void BigNFC::refresh(){ + this->trame->clear(); + std::vector trame = READ_TRAM_0; + if (this->pair){ + trame = READ_TRAM_1; + } + this->pair = !this->pair; + + for(byte i: trame){ + Serial2.write(i); + } + while (Serial2.available() == 0); + while (Serial2.available() > 0){ + this->trame->push_back(Serial2.read()); + } +} + +String BigNFC::digitify(int number){ + String sortie = ""; + + if(number <= 0xF){ + sortie += '0'; + sortie += String(number,HEX); + }else{ + sortie += String(number,HEX); + } + + return sortie; +} + + +void BigNFC::printTrame(){ + for(byte i: *this->trame){ + Serial.print(this->digitify(i)); + Serial.print(" "); + } + Serial.println(); +} + +int BigNFC::getNbTags(){ + return this->trame->at(8); +}