|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <driver/uart.h>
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
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 Read(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
|