forked from espressif/esp-protocols
modem debugging work in progress
This commit is contained in:
@ -141,6 +141,7 @@ public:
|
||||
|
||||
int write(uint8_t *data, size_t len) override
|
||||
{
|
||||
ESP_LOGI("TAG", "%zd %.*s", len, len, (const char *)data);
|
||||
return cmux->write(instance, data, len);
|
||||
}
|
||||
void set_read_cb(std::function<bool(uint8_t *data, size_t len)> f) override
|
||||
|
@ -67,26 +67,35 @@ public:
|
||||
{
|
||||
if (mode == modem_mode::DATA_MODE) {
|
||||
if (set_data_mode() != command_result::OK) {
|
||||
return resume_data_mode() == command_result::OK;
|
||||
const auto result = resume_data_mode() == command_result::OK;
|
||||
ESP_LOGI("TAG", "result = %s", result?"true":"false");
|
||||
return result;
|
||||
}
|
||||
ESP_LOGI("TAG", "result OK");
|
||||
return true;
|
||||
} else if (mode == modem_mode::COMMAND_MODE) {
|
||||
Task::Delay(1000); // Mandatory 1s pause before
|
||||
int retry = 0;
|
||||
while (retry++ < 3) {
|
||||
if (set_command_mode() == command_result::OK) {
|
||||
ESP_LOGI("TAG", "result OK");
|
||||
return true;
|
||||
}
|
||||
Task::Delay(1000); // Mandatory 1s pause after escape
|
||||
if (sync() == command_result::OK) {
|
||||
ESP_LOGI("TAG", "result OK");
|
||||
return true;
|
||||
}
|
||||
Task::Delay(1000); // Mandatory 1s pause before escape
|
||||
}
|
||||
ESP_LOGI("TAG", "result NOT OK");
|
||||
return false;
|
||||
} else if (mode == modem_mode::CMUX_MODE) {
|
||||
return set_cmux() == command_result::OK;
|
||||
const auto result = set_cmux() == command_result::OK;
|
||||
ESP_LOGI("TAG", "result = %s", result?"true":"false");
|
||||
return result;
|
||||
}
|
||||
ESP_LOGI("TAG", "result OK");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -134,6 +134,7 @@ void CMux::data_available(uint8_t *data, size_t len)
|
||||
sabm_ack = dlci;
|
||||
} else if (data == nullptr) {
|
||||
int virtual_term = dlci - 1;
|
||||
ESP_LOGI("TAG", "%zd %.*s", total_payload_size, total_payload_size, payload_start);
|
||||
if (virtual_term < MAX_TERMINALS_NUM && read_cb[virtual_term]) {
|
||||
#ifdef DEFRAGMENT_CMUX_PAYLOAD
|
||||
read_cb[virtual_term](payload_start, total_payload_size);
|
||||
|
@ -52,13 +52,17 @@ static bool exit_data(DTE &dte, ModuleIf &device, Netif &netif)
|
||||
|
||||
static bool enter_data(DTE &dte, ModuleIf &device, Netif &netif)
|
||||
{
|
||||
ESP_LOGI("TAG", "hatschi3");
|
||||
if (!device.setup_data_mode()) {
|
||||
ESP_LOGW("TAG", "nix da 3");
|
||||
return false;
|
||||
}
|
||||
if (!device.set_mode(modem_mode::DATA_MODE)) {
|
||||
ESP_LOGW("TAG", "nix da 4");
|
||||
return false;
|
||||
}
|
||||
if (!dte.set_mode(modem_mode::DATA_MODE)) {
|
||||
ESP_LOGW("TAG", "nix da 5");
|
||||
return false;
|
||||
}
|
||||
netif.start();
|
||||
@ -119,13 +123,16 @@ bool DCE_Mode::set_unsafe(DTE *dte, ModuleIf *device, Netif &netif, modem_mode m
|
||||
mode = m;
|
||||
return true;
|
||||
case modem_mode::CMUX_MODE:
|
||||
ESP_LOGI("TAG", "switching to CMUX_MODE");
|
||||
if (mode == modem_mode::DATA_MODE || mode == modem_mode::CMUX_MODE || mode >= modem_mode::CMUX_MANUAL_MODE) {
|
||||
ESP_LOGW("TAG", "nix da 1 %i", std::to_underlying(mode));
|
||||
return false;
|
||||
}
|
||||
device->set_mode(modem_mode::CMUX_MODE); // switch the device into CMUX mode
|
||||
usleep(100'000); // some devices need a few ms to switch
|
||||
|
||||
if (!dte->set_mode(modem_mode::CMUX_MODE)) {
|
||||
ESP_LOGW("TAG", "nix da 2");
|
||||
return false;
|
||||
}
|
||||
mode = modem_mode::CMUX_MODE;
|
||||
|
@ -68,6 +68,7 @@ command_result DTE::command(std::string_view command, got_line_cb got_line, uint
|
||||
|
||||
command_result DTE::command(std::string_view cmd, got_line_cb got_line, uint32_t time_ms)
|
||||
{
|
||||
ESP_LOGI("TAG", "cmd=%.*s", cmd.size(), cmd.data());
|
||||
return command(cmd, got_line, time_ms, '\n');
|
||||
}
|
||||
|
||||
@ -103,14 +104,17 @@ bool DTE::setup_cmux()
|
||||
|
||||
bool DTE::set_mode(modem_mode m)
|
||||
{
|
||||
ESP_LOGI("TAG", "hatschi2");
|
||||
// transitions (COMMAND|UNDEF) -> CMUX
|
||||
if (m == modem_mode::CMUX_MODE) {
|
||||
if (mode == modem_mode::UNDEF || mode == modem_mode::COMMAND_MODE) {
|
||||
if (setup_cmux()) {
|
||||
mode = m;
|
||||
ESP_LOGI("TAG", "gut 1");
|
||||
return true;
|
||||
}
|
||||
mode = modem_mode::UNDEF;
|
||||
ESP_LOGW("TAG", "schlecht 1");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -122,6 +126,7 @@ bool DTE::set_mode(modem_mode m)
|
||||
} else {
|
||||
mode = m;
|
||||
}
|
||||
ESP_LOGI("TAG", "gut 2");
|
||||
return true;
|
||||
}
|
||||
// transitions (DATA|DUAL|CMUX|UNDEF) -> COMMAND
|
||||
@ -129,14 +134,18 @@ bool DTE::set_mode(modem_mode m)
|
||||
if (mode == modem_mode::CMUX_MODE) {
|
||||
if (exit_cmux()) {
|
||||
mode = m;
|
||||
ESP_LOGI("TAG", "gut 3");
|
||||
return true;
|
||||
}
|
||||
mode = modem_mode::UNDEF;
|
||||
ESP_LOGW("TAG", "schlecht 2");
|
||||
return false;
|
||||
} if (mode == modem_mode::CMUX_MANUAL_MODE || mode == modem_mode::DUAL_MODE) {
|
||||
ESP_LOGI("TAG", "gut 4");
|
||||
return true;
|
||||
} else {
|
||||
mode = m;
|
||||
ESP_LOGI("TAG", "gut 5");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -144,26 +153,32 @@ bool DTE::set_mode(modem_mode m)
|
||||
if (m == modem_mode::CMUX_MANUAL_MODE) {
|
||||
if (setup_cmux()) {
|
||||
mode = m;
|
||||
ESP_LOGI("TAG", "gut 6");
|
||||
return true;
|
||||
}
|
||||
mode = modem_mode::UNDEF;
|
||||
ESP_LOGW("TAG", "schlecht 3");
|
||||
return false;
|
||||
}
|
||||
// manual CMUX transitions: Exit CMUX
|
||||
if (m == modem_mode::CMUX_MANUAL_EXIT && mode == modem_mode::CMUX_MANUAL_MODE) {
|
||||
if (exit_cmux()) {
|
||||
mode = modem_mode::COMMAND_MODE;
|
||||
ESP_LOGI("TAG", "gut 7");
|
||||
return true;
|
||||
}
|
||||
mode = modem_mode::UNDEF;
|
||||
ESP_LOGW("TAG", "schlecht 4");
|
||||
return false;
|
||||
}
|
||||
// manual CMUX transitions: Swap terminals
|
||||
if (m == modem_mode::CMUX_MANUAL_SWAP && mode == modem_mode::CMUX_MANUAL_MODE) {
|
||||
secondary_term.swap(primary_term);
|
||||
ESP_LOGI("TAG", "gut 8");
|
||||
return true;
|
||||
}
|
||||
mode = modem_mode::UNDEF;
|
||||
ESP_LOGW("TAG", "schlecht 5");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -147,6 +147,7 @@ int FdTerminal::read(uint8_t *data, size_t len)
|
||||
|
||||
int FdTerminal::write(uint8_t *data, size_t len)
|
||||
{
|
||||
ESP_LOGI("TAG", "%zd %.*s", len, len, (const char *)data);
|
||||
int size = ::write(f.fd, data, len);
|
||||
if (size < 0) {
|
||||
ESP_LOGE(TAG, "Error occurred during read: %d", errno);
|
||||
|
@ -124,6 +124,7 @@ void UartTerminal::task()
|
||||
switch (event.type) {
|
||||
case UART_DATA:
|
||||
uart_get_buffered_data_len(uart.port, &len);
|
||||
ESP_LOGD("TAG", "%zd aber ohne data ptr", len);
|
||||
if (len && on_read) {
|
||||
on_read(nullptr, len);
|
||||
}
|
||||
@ -174,13 +175,17 @@ int UartTerminal::read(uint8_t *data, size_t len)
|
||||
uart_get_buffered_data_len(uart.port, &length);
|
||||
length = std::min(len, length);
|
||||
if (length > 0) {
|
||||
return uart_read_bytes(uart.port, data, length, portMAX_DELAY);
|
||||
const auto really_gelesen = uart_read_bytes(uart.port, data, length, portMAX_DELAY);
|
||||
ESP_LOGI("TAG", "%p %zd", data, really_gelesen);
|
||||
ESP_LOGI("TAG", "%zd %.*s", really_gelesen, really_gelesen, data);
|
||||
return really_gelesen;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int UartTerminal::write(uint8_t *data, size_t len)
|
||||
{
|
||||
ESP_LOGI("TAG", "%zd %.*s", len, len, (const char *)data);
|
||||
return uart_write_bytes_compat(uart.port, data, len);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user