feat(modem): DTE to support sending and receiving raw data

MAJOR CHANGE: Enable DTE to redefine on_read() and write(cmd) directly
This commit is contained in:
David Cermak
2023-03-16 19:17:53 +01:00
parent 574738b8d3
commit bf114d3624
6 changed files with 63 additions and 31 deletions
@@ -22,6 +22,19 @@ namespace dce_commands {
* @{
*/
/**
* @brief Generic AT command to be send with pass and fail phrases
*
* @param t Commandable object (anything that can accept commands)
* @param command Command to be sent do the commandable object
* @param pass_phrase String to be present in the reply to pass this command
* @param fail_phrase String to be present in the reply to fail this command
* @param timeout_ms Timeout in ms
*/
command_result generic_command(CommandableIf *t, const std::string &command,
const std::string &pass_phrase,
const std::string &fail_phrase, uint32_t timeout_ms);
/**
* @brief Declaration of all commands is generated from esp_modem_command_declare.inc
*/
@@ -69,6 +69,10 @@ public:
ESP_MODEM_THROW_IF_FALSE(netif != nullptr, "Null netif");
}
explicit Creator(std::shared_ptr<DTE> dte): dte(std::move(dte)), device(nullptr), netif(nullptr)
{
}
~Creator()
{
if (device != nullptr) {
@@ -29,6 +29,13 @@ class CMux;
* @{
*/
struct DTE_Command {
DTE_Command(const std::string &cmd): data((uint8_t *)cmd.c_str()), len(cmd.length()) {}
uint8_t *data;
size_t len;
};
/**
* DTE (Data Terminal Equipment) class
*/
@@ -54,7 +61,9 @@ public:
* @param len Data len to write
* @return number of bytes written
*/
int write(uint8_t *data, size_t len);
int write(uint8_t *data, size_t len) override;
int write(DTE_Command command);
/**
* @brief Reading from the underlying terminal
@@ -70,6 +79,8 @@ public:
*/
void set_read_cb(std::function<bool(uint8_t *data, size_t len)> f);
void on_read(got_line_cb on_data) override;
/**
* @brief Sets DTE error callback
* @param f Function to be called on DTE error
@@ -80,6 +80,9 @@ public:
*/
virtual command_result command(const std::string &command, got_line_cb got_line, uint32_t time_ms, const char separator) = 0;
virtual command_result command(const std::string &command, got_line_cb got_line, uint32_t time_ms) = 0;
virtual int write(uint8_t *data, size_t len) = 0;
virtual void on_read(got_line_cb on_data) = 0;
};
/**