modem debugging work in progress

This commit is contained in:
2023-06-06 17:36:36 +02:00
parent 2ded13f195
commit fe2e286c45
7 changed files with 42 additions and 3 deletions

View File

@ -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

View File

@ -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;
}

View File

@ -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);

View File

@ -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;

View File

@ -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;
}

View File

@ -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);

View File

@ -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);
}