#pragma once #include #include "config.h" #include "player.h" #include "playlist.h" #include "playlist_manager.h" #include "mqtt_client.h" #include enum ControllerState { NORMAL, LOCKING, LOCKED }; class Controller { private: MFRC522* _rfid; MQTTClient* _mqtt_client; PlaylistManager* _pm; ControllerState _state = NORMAL; bool _rfid_enabled = true; void _check_rfid(); void _check_serial(); void _check_buttons(); bool _debounce_button(uint8_t index); uint32_t _get_rfid_card_uid(); String _read_rfid_data(); bool _rfid_present = false; uint32_t _last_rfid_card_uid = 0; uint8_t _no_rfid_card_count = 0; Player* _player; unsigned long _last_rfid_scan_at = 0; String _serial_buffer = String(); void _execute_serial_command(String cmd); void _execute_command_ls(String path); void _execute_command_ids(); void _execute_command_help(); unsigned long _button_last_pressed_at[NUM_BUTTONS]; bool _check_button(uint8_t btn); unsigned long _last_mqtt_report_at = 0; void _send_mqtt_report(); public: Controller(Player* p, PlaylistManager* pm); void set_mqtt_client(MQTTClient* m); String get_status_json(); void loop(); };