// #include <Arduino.h>
// #include "WS_NRF24.hpp"
// #include "drivers/LED_Handler.h"
// #include "WS_Data.hpp"
// #define RECEIVER
// using namespace crepp::drivers;
// LED_Handler led;
// WS_NRF24 nrf24(20,21, 0xFF00FF00FF);
// static void queueAckPayload(uint16_t counter) {
// Serial.print(F("Queue ACK payload: "));
// int mode = counter % 4;
// if (mode == 0) {
// Acknowledgement ack;
// ack.dataType = END_OF_COMMUNICATION;
// nrf24.setAckPayloadStruct(1, ack);
// Serial.println(F("END_OF_COMMUNICATION"));
// } else if(mode == 1) {
// Request_Settings reqAck;
// reqAck.dataType = REQUEST_SETTINGS;
// reqAck.indexCommand = GET_VOLTAGE;
// reqAck.indexSequence = 10;
// nrf24.setAckPayloadStruct(1, reqAck);
// Serial.println(F("REQUEST_SETTINGS"));
// }
// else if(mode == 2) {
// Settings settingsAck;
// settingsAck.dataType = SET_SETTINGS;
// settingsAck.indexCommand = SET_SEND_INTERVAL;
// settingsAck.indexSequence = 20;
// settingsAck.settingValue = 2; // Example: set send interval to 5000ms
// nrf24.setAckPayloadStruct(1, settingsAck);
// Serial.println(F("SET_SETTINGS"));
// }
// else if(mode == 3) {
// Settings settingsAck;
// settingsAck.dataType = SET_SETTINGS;
// settingsAck.indexCommand = CALIBRATE_TIME;
// settingsAck.indexSequence = 0;
// settingsAck.settingValue = 0; // Example: set send interval to 5000ms
// nrf24.setAckPayloadStruct(1, settingsAck);
// Serial.println(F("SET_SETTINGS"));
// }
// }
// void setup() {
// Serial.begin(9600);
// led.begin();
// led.setBrightness(50);
// led.startRainbow(20);
// // DEBUG: Print struct sizes
// Serial.print(F("sizeof(Weather_Data) = ")); Serial.println(sizeof(Weather_Data));
// Serial.print(F("sizeof(Request_Settings) = ")); Serial.println(sizeof(Request_Settings));
// Serial.print(F("sizeof(Settings) = ")); Serial.println(sizeof(Settings));
// bool status_NRF24 = nrf24.beginReceiver(108);
// Serial.print(F("NRF24 Receiver status: ")); Serial.println(status_NRF24);
// delay(5000);
// queueAckPayload(0);
// delay(100);
// delay(2000);
// if(status_NRF24) Serial.println("NRF24 : OK");
// }
// void loop()
// {
// static uint16_t counter = 0;
// uint8_t buffer[32];
// led.update();
// if (nrf24.readData(buffer, 32)) {
// Serial.println(F("\n========== DATA RECEIVED =========="));
// // DEBUG: Print raw bytes
// Serial.print(F("Raw bytes: "));
// for (uint8_t i = 0; i < 15; i++) {
// if (buffer[i] < 0x10) Serial.print(F("0"));
// Serial.print(buffer[i], HEX);
// Serial.print(F(" "));
// }
// Serial.println();
// // Lire le type depuis le premier octet
// Data_Type type = static_cast<Data_Type>(buffer[0]);
// switch(type) {
// case SEND_WEATHER_DATA: {
// Weather_Data data;
// memcpy(&data, buffer, sizeof(Weather_Data));
// Serial.println(F("Weather Data received"));
// Serial.print(F("Temperature: ")); Serial.print(data.temperature/10.0); Serial.println(F(" °C"));
// Serial.print(F("Humidity: ")); Serial.print(data.humidity/10.0); Serial.println(F(" %"));
// Serial.print(F("Pressure: ")); Serial.print(data.pressure/10.0); Serial.println(F(" hPa"));
// Serial.print(F("Wind Speed: ")); Serial.print(data.windSpeed); Serial.println(F(" ticks/5s"));
// Serial.print(F("Wind Direction: ")); Serial.print(data.windDirection); Serial.println(F(" (analog value)"));
// Serial.print(F("Raining Level: ")); Serial.print(data.rainingLevel); Serial.println(F(" ticks"));
// Serial.print(F("Hours since reboot: ")); Serial.println(data.hoursSinceReboot);
// break;
// }
// case SEND_SETTINGS: {
// Settings settings;
// memcpy(&settings, buffer, sizeof(Settings));
// Serial.println(F("Settings Data received"));
// Serial.print(F("Command: ")); Serial.println(settings.indexCommand);
// Serial.print(F("Sequence: ")); Serial.println(settings.indexSequence);
// Serial.print(F("Value: ")); Serial.println(settings.settingValue);
// break;
// }
// default:
// Serial.print(F("Unknown type received: "));
// Serial.println(buffer[0]);
// break;
// }
// // Envoyer ACK dynamique
// Serial.println(F("Sending ACK... "));
// counter++;
// queueAckPayload(counter);
// Serial.println(F("========== END DATA ==========\n"));
// // Optional: clear IRQ flags without restarting the radio state machine
// //nrf24.clearRxInterrupt();
// delay(1000);
// }
// delay(10);
// }