1
0
Fork 0

IDs: Introduce ID handling functions and data

IDs will be needed by multiple subsystems, so introduce the needed
variables and handling functions.
This commit is contained in:
Teo-CD 2023-10-21 16:00:08 +01:00
parent da837ffbb4
commit 6c5a670366
5 changed files with 85 additions and 2 deletions

37
include/IDs.h Normal file
View file

@ -0,0 +1,37 @@
//
// Created by Teo-CD on 19/10/23.
//
#ifndef JIN_BARBAPAPA_IDS_H
#define JIN_BARBAPAPA_IDS_H
#include <Arduino.h>
/***
* Convenience functions and variables to handle IDs and data that they link to.
*/
constexpr uint8_t idMaskGone = 0b10000000;
constexpr uint8_t idMaskChar = 0b01000000;
bool isIdGone(int8_t ID);
bool isIdCharacter(int8_t ID);
/***
* Get the ID without the control bits : direction and character/promotion bit.
* @param ID to check, with all bits
* @return The ID with only index bits.
*/
uint8_t getRawId(int8_t ID);
/***
* Checks if the ID is known to the firmware, either as a character or promotion.
* @param ID to check, with all bits
* @return True if valid as a character or promotion, false otherwise.
*/
bool isValidId(int8_t ID);
static constexpr uint8_t dirStrSize = 10;
extern const char promoDirs[][dirStrSize];
extern const char charDirs[][dirStrSize];
#endif //JIN_BARBAPAPA_IDS_H

View file

@ -15,6 +15,7 @@
#include <MFRC522DriverPinSimple.h> #include <MFRC522DriverPinSimple.h>
#include <MFRC522DriverSPI.h> #include <MFRC522DriverSPI.h>
#include "IDs.h"
#include "Pinout.h" #include "Pinout.h"
/*** /***

45
src/IDs.cpp Normal file
View file

@ -0,0 +1,45 @@
//
// Created by Teo-CD on 19/10/23.
//
#include "IDs.h"
/* IDs are greater than one, offset the array to make it easier to use. */
constexpr char promoDirs[][dirStrSize] = {
"INVALIDE",
"RANDONNEE",
"RESTO",
"AUTOBUS",
"MAYO",
"MADO",
"COOP",
"OURS",
"BAGAR",
"INCAPABLE",
"MYSTERE"
};
constexpr char charDirs[][dirStrSize] = {
"INVALIDE",
"GUILLAUME",
"MICHEL"
};
bool isIdGone(int8_t ID) {
return ID & idMaskGone;
}
bool isIdCharacter(int8_t ID) {
return ID & idMaskChar;
}
uint8_t getRawId(int8_t ID) {
return ID & ~(idMaskGone | idMaskChar);
}
bool isValidId(int8_t ID) {
uint8_t rawId = getRawId(ID);
if (isIdCharacter(ID))
return rawId < sizeof(charDirs) / dirStrSize;
else
return rawId < sizeof(promoDirs) / dirStrSize;
}

View file

@ -39,7 +39,7 @@ int8_t RFID::checkTags() {
removeActiveTag(node, previousNode); removeActiveTag(node, previousNode);
// Return the ID with the sign bit set to signal it has gone. // Return the ID with the sign bit set to signal it has gone.
// If other tags are gone we can check on the next loop. // If other tags are gone we can check on the next loop.
return node->tag_ID | 1<<7; return node->tag_ID | idMaskGone;
} }
} }
} }

View file

@ -2,8 +2,8 @@
#include "Pinout.h" #include "Pinout.h"
#include "RFID.h"
#include "Com.h" #include "Com.h"
#include "RFID.h"
__attribute__((noreturn)) int main() { __attribute__((noreturn)) int main() {
pinMode(pin_DBG_LED_1, OUTPUT); pinMode(pin_DBG_LED_1, OUTPUT);