diff --git a/lib/hardware/hardware_led.hpp b/lib/hardware/hardware_led.hpp index c2333ed..28649f6 100644 --- a/lib/hardware/hardware_led.hpp +++ b/lib/hardware/hardware_led.hpp @@ -1,5 +1,4 @@ -#ifndef HARDWARE_LED_HPP -#define HARDWARE_LED_HPP +#pragma once #include "hardware.pb.h" #include @@ -33,5 +32,3 @@ private: unsigned long _fadeStartTime; bool _isActive; }; - -#endif \ No newline at end of file diff --git a/lib/hardware/hardware_rfid.cpp b/lib/hardware/hardware_rfid.cpp new file mode 100644 index 0000000..bfa888b --- /dev/null +++ b/lib/hardware/hardware_rfid.cpp @@ -0,0 +1,44 @@ +#include "hardware_rfid.hpp" +#include + +HardwareRfid::HardwareRfid(uint8_t ssPin, uint8_t rstPin) + : _mfrc(ssPin, rstPin) {} + +void HardwareRfid::begin() { + _mfrc.PCD_Init(); +} + +void HardwareRfid::end() { + // Nothing special to do +} + +void HardwareRfid::update() { + if (!_mfrc.PICC_IsNewCardPresent() || !_mfrc.PICC_ReadCardSerial()) { + return; + } + + // Get the UID + uint32_t cardId = 0; + for (byte i = 0; i < _mfrc.uid.size; i++) { + cardId = (cardId << 8) | _mfrc.uid.uidByte[i]; + } + + // Create the message + hardware_SensorToControlMessage msg = {0}; + msg.sensor_id = 0; // Assuming single sensor + msg.which_payload = hardware_SensorToControlMessage_rfid_reading_tag; // Assuming this is the tag + msg.payload.rfid_reading.card_id = cardId; + + // Call the callback if set + if (_callback) { + _callback(msg); + } + + // Halt the card + _mfrc.PICC_HaltA(); + _mfrc.PCD_StopCrypto1(); +} + +void HardwareRfid::setCallback(RfidCallback cb) { + _callback = cb; +} \ No newline at end of file diff --git a/lib/hardware/hardware_rfid.hpp b/lib/hardware/hardware_rfid.hpp new file mode 100644 index 0000000..0bf4c8d --- /dev/null +++ b/lib/hardware/hardware_rfid.hpp @@ -0,0 +1,20 @@ +#pragma once + +#include +#include +#include "hardware.pb.h" + +typedef std::function RfidCallback; + +class HardwareRfid { +public: + HardwareRfid(uint8_t ssPin, uint8_t rstPin); + void begin(); + void end(); + void update(); + void setCallback(RfidCallback cb); + +private: + MFRC522 _mfrc; + RfidCallback _callback; +}; diff --git a/src/main.cpp b/src/main.cpp index 8fcefa1..37be572 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,17 +1,28 @@ #include #include +#include #include "hardware.pb.h" // Demo for HardwareLed HardwareLed led(2); // Assuming NeoPixel on pin 4 (D2 on ESP8266) +// Demo for HardwareRfid +HardwareRfid rfid(4, 5); // SS=D2 (GPIO4), RST=D1 (GPIO5) + hardware_LedConfig configs[4]; unsigned long lastChange = 0; int currentConfig = 0; +void onRfidTag(const hardware_SensorToControlMessage& msg) { + Serial.print("RFID Tag detected: 0x"); + Serial.println(msg.payload.rfid_reading.card_id, HEX); +} + void setup() { Serial.begin(9600); led.begin(); + rfid.begin(); + rfid.setCallback(onRfidTag); // Static config configs[0] = {0}; @@ -53,6 +64,7 @@ void setup() { void loop() { led.update(); + rfid.update(); if (millis() - lastChange >= 10000) { lastChange = millis();