esmp3/include/controller.h

62 lines
1.6 KiB
C
Raw Normal View History

2019-08-02 21:48:36 +00:00
#pragma once
#include <Arduino.h>
#include <ESPAsyncWebServer.h>
#include "config.h"
class Controller;
2019-08-02 21:48:36 +00:00
#include "player.h"
#include "playlist.h"
#include "playlist_manager.h"
#include "mqtt_client.h"
#include "http_server.h"
#include <MFRC522.h>
2019-08-02 21:48:36 +00:00
enum ControllerState { NORMAL, LOCKING, LOCKED };
2019-08-02 21:48:36 +00:00
class Controller {
private:
MFRC522* _rfid;
MQTTClient* _mqtt_client;
HTTPServer* _http_server;
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;
String _last_rfid_uid = "";
String _last_rfid_data = "";
2019-08-02 21:48:36 +00:00
Player* _player;
unsigned long _last_rfid_scan_at = 0;
unsigned long _last_position_info_at = 0;
String _serial_buffer = String();
String _cmd_queue = "";
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();
2019-08-02 21:48:36 +00:00
public:
Controller(Player* p, PlaylistManager* pm);
void set_mqtt_client(MQTTClient* m);
void register_http_server(HTTPServer* h);
void loop();
void send_controller_status();
void send_player_status();
void send_playlist_manager_status();
void send_position();
void inform_new_client(AsyncWebSocketClient* client);
String json();
bool process_message(String m);
void queue_command(String cmd);
void update_playlist_manager();
2019-08-02 21:48:36 +00:00
};