#pragma once #include #include namespace ugv { namespace e32 { enum TxMode { TxTransparent = 0, TxFixed = 1, }; enum IoMode { IoOpenCollector = 0, IoPushPull = 1, }; typedef uint16_t Address; typedef uint8_t Channel; constexpr Address BroadcastAddress = 0xFFFF; struct Config { public: Config(); uart_port_t uart_port; uart_parity_t uart_parity; int uart_tx_pin; int uart_rx_pin; int uart_baud; }; struct Params { public: Params(); bool save_params; Address address; uart_parity_t uart_partity; int uart_baud; // bps int air_data_rate; // bps Channel comm_channel; TxMode tx_mode; IoMode io_mode; uint16_t wake_up_time; // ms bool fec_enabled; uint16_t tx_power; // dBm }; class E32_Driver { public: explicit E32_Driver(); ~E32_Driver(); esp_err_t Init(Config config = Config()); esp_err_t Free(); esp_err_t ReadParams(Params& params); esp_err_t WriteParams(const Params& params); int Write(Address address, Channel channel, const uint8_t* data, size_t data_size); int Write(const uint8_t* data, size_t data_size); int Write(Address address, Channel channel, const std::string& data); int Write(const std::string& data); int WriteLn(const uint8_t* data, size_t data_size); int WriteLn(const std::string& data); esp_err_t WaitWriteDone(TickType_t ticks_to_wait = portMAX_DELAY); int Read(uint8_t* data, int max_len, TickType_t ticks_to_wait = portMAX_DELAY); int ReadLn(char* data, size_t data_size, TickType_t ticks_to_wait = portMAX_DELAY); int ReadLn(std::string& data, TickType_t ticks_to_wait = portMAX_DELAY); void Flush(); private: bool initialized_; Config config_; Params params_; int RawWrite(const uint8_t* data, size_t data_size); }; } // namespace e32 } // namespace ugv