diff --git a/README.md b/README.md index a8c26d5..87ae17e 100644 --- a/README.md +++ b/README.md @@ -69,64 +69,7 @@ mise à jour et suivi des dépendances. La structure du code assume une carte Teensy. En particulier, il est conçu pour la [Teensy 4.1](https://www.pjrc.com/store/teensy41.html). -# Interfaçage avec l'application Unity - -Afin de permettre la détection automatique de l'objet, la communication se fait -par Human Interface Device (HID). -La communication HID est possible grâce aux bibliothèques de Teensyduino qui -fournissent des fonctionnalités de base. -Ces fonctionnalités ne sont pas idéales et gâchent pas mal de bande passante, -en effet par défaut on ne peut qu'envoyer des rapports HIDs de 64 octets, malgré -le besoin de n'en consommer que quelques-uns dans le cas général. -Faute de vouloir modifier les bibliothèques Teensyduino, nous nous contenterons -de ce gâchis, la Teensy étant absurdement rapide de toute façon. - -## Protocole - -Le protocole est constitué de messages avec un octet d'en-tête, puis d'un message -de longueur définie par l'en-tête, potentiellement variable jusqu'au maximum de -64 octets (avec en-tête). - -### Changement de figurine - -**En-tête** : `@` -**Longueur** : 1 octet -**Description** : Message envoyé lors de la dépose ou du retrait d'une figurine. -Il contient l'ID de la figurine sur les bits 0-5 de l'octet, si la figurine -est un personnage (1) ou une année (0) sur le bit 6 et si la figurine a été posée -(0) ou retirée (1) sur le bit 7. -Ainsi, si on interprète l'octet comme un nombre signé, si le nombre est négatif -on sait que la figurine a été retirée. - -#### Schéma -``` -Octet 1 -┌─┬─┬───────────┐ -│D│C│ Figure ID │ -└─┴─┴───────────┘ - 7 0 - Bits -``` -`D`: bit 7, 1 si enlevé, 0 sinon -`C`: bit 6, 1 si personnage, 0 si année - -### Message informatif - -**En-tête** : `#` -**Longueur** : 1+[1-62] octets -**Description** : Message générique à titre informatif, utile pour la communication -d'informations lors du développement ou de débug. -Le premier octet est fixe et donne la longueur du reste du message, le message -est du texte encodé en ASCII. - -#### Schéma -``` - ┌───┬── ── ── ──┐ - │Len│ Message │ - └───┴── ── ── ──┘ - 0 1 Len - Octets -``` - # License -Les éléments dans ce dépôt sont Open Source, sous license +Les éléments dans ce dépôts sont Open Source, sous license [Apache License V2.0](https://apache.org/licenses/LICENSE-2.0). diff --git a/include/Com.h b/include/Com.h deleted file mode 100644 index b4f376f..0000000 --- a/include/Com.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// Created by Teo-CD on 24/09/23. -// - -#ifndef JIN_BARBAPAPA_COM_H -#define JIN_BARBAPAPA_COM_H - -#include -#include - -/** - * Handle communication with a connected device and provide convenience - * functions for the fixed protocols. - */ -namespace Com { - void sendFigUpdate(int8_t event); - void sendComment(const char* message, ...); -} - -#endif //JIN_BARBAPAPA_COM_H diff --git a/platformio.ini b/platformio.ini index f348053..33cfd2d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -17,5 +17,3 @@ lib_deps = adafruit/Adafruit PCD8544 Nokia 5110 LCD library adafruit/Adafruit GFX Library adafruit/Adafruit BusIO -; Should be uncommented in production in order to use HID. -;build_flags = -D USB_RAWHID diff --git a/src/Com.cpp b/src/Com.cpp deleted file mode 100644 index bd33269..0000000 --- a/src/Com.cpp +++ /dev/null @@ -1,39 +0,0 @@ -// -// Created by Teo-CD on 24/09/23. -// - -#include "Com.h" - -namespace Com { - byte buffer[64]; - /** - * Will flush buffer through either HID or Serial depending on build - * options. - * HID is the expected production usage as the interactive software will - * use it for auto-detection. - */ - inline void flushBuffer() { -#ifdef USB_RAWHID - usb_rawhid_send(buffer, 0); -#else - Serial.write((const char*)buffer); -#endif - /* Clear the buffer. */ - memset(buffer, 0, 64); - } - - void sendFigUpdate(int8_t event) { - buffer[0] = '@'; - buffer[1] = event; - flushBuffer(); - } - - void sendComment(const char *message, ...) { - va_list args; - va_start(args, message); - buffer[0] = '#'; - buffer[1] = vsnprintf((char *)(buffer + 2), 62, message, args); - va_end(args); - flushBuffer(); - } -} diff --git a/src/RFID.cpp b/src/RFID.cpp index 0ba5e1b..da42d4e 100644 --- a/src/RFID.cpp +++ b/src/RFID.cpp @@ -37,9 +37,9 @@ int8_t RFID::checkTags() { // Serial.printf("UID 0x%lX is gone\n", *(uint32_t *)node->uid.uidByte); // If we don't, assume the tag is gone and remove it from the list. removeActiveTag(node, previousNode); - // Return the ID with the sign bit set to signal it has gone. + // Return the negative ID to signal it has gone. // If other tags are gone we can check on the next loop. - return node->tag_ID | 1<<7; + return -node->tag_ID; } } } diff --git a/src/main.cpp b/src/main.cpp index ddebea6..677112f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,7 +3,6 @@ #include "Pinout.h" #include "RFID.h" -#include "Com.h" __attribute__((noreturn)) int main() { pinMode(pin_DBG_LED_1, OUTPUT); @@ -37,7 +36,7 @@ __attribute__((noreturn)) int main() { */ Serial.begin(115200); - Com::sendComment("# System is powered up, running set-up."); + Serial.println("# System is powered up, running set-up."); /* TODO: Setups once module structure is up. */ RFID rfid; @@ -46,11 +45,11 @@ __attribute__((noreturn)) int main() { /* Main loop */ while (true) { - int8_t tagEvent; + int8_t tagID; - tagEvent = rfid.checkTags(); - if (tagEvent) { - Com::sendFigUpdate(tagEvent); + tagID = rfid.checkTags(); + if (tagID) { + Serial.printf("Check tag result : %d\n", tagID); } delay(100);