Helper library to use modem_ref driver.
Dependencies: WizziCom WizziDebug ram_fs modem_ref
Dependents: D7A_Localisation D7A_1x_demo_send_file_data_and_forget D7A_1x_demo_CodeUpgradeProtocol D7A_1x_demo_LoRaWAN ... more
Diff: modem_ref_helper.cpp
- Revision:
- 66:a529d603be20
- Parent:
- 61:8565bc7a6997
--- a/modem_ref_helper.cpp Thu May 28 09:11:32 2020 +0000 +++ b/modem_ref_helper.cpp Thu Jan 21 10:36:54 2021 +0000 @@ -315,6 +315,7 @@ uint32_t w[2]; } uid; revision_t rev; + uint8_t id; // Override boot callback to catch the first boot message modem_callbacks_t boot_callbacks = { @@ -335,28 +336,65 @@ // Open modem Com port g_modem_com = new WizziCom(MODEM_PIN_RX, MODEM_PIN_TX, MODEM_PIN_IRQ_IN, MODEM_PIN_IRQ_OUT); - // Hardware reset - DigitalOut reset_low(MODEM_PIN_RESET, 0); - ThisThread::sleep_for(100); - - // Open driver to catch boot packet - modem_open(NULL, &boot_callbacks); + // open with user callbacks + modem_open(modem_serial_send, callbacks); // Redirect All Port traffic to modem_serial_input g_modem_com->attach(modem_serial_input, WizziComPacketUntreated); + + // Wait for modem power up + ThisThread::sleep_for(100); - // Release reset - DigitalIn reset_release(MODEM_PIN_RESET); + // Try reading UID + id = modem_get_id(my_main_callback); + modem_read_file(D7A_FID_UID, uid.b, 0, 8, id); + if (!g_modem_ready.try_acquire_for(200)) + { + HELPER_PRINT("Trying software reset...\n"); + + // Open driver to catch boot packet + modem_close(); + modem_open(NULL, &boot_callbacks); - // Wait for first boot packet - HELPER_PRINT("Waiting boot packet...\n"); - boot.acquire(); + // Try software reset + g_modem_com->send(WizziComPacketSysReset, 0, NULL); + + if (!boot.try_acquire_for(1000)) + { + HELPER_PRINT("Trying hardware reset...\n"); + + // Assert reset pin + DigitalOut reset_low(MODEM_PIN_RESET, 0); + ThisThread::sleep_for(100); + + // Release reset pin + DigitalIn reset_release(MODEM_PIN_RESET); + + if (!boot.try_acquire_for(1000)) + { + // Modem not responding! + HELPER_PRINT("Failed to open modem.\n"); + } + else + { + HELPER_PRINT("Modem is up after hardware reset.\n"); + } + } + else + { + HELPER_PRINT("Modem is up after software reset.\n"); + } + } + else + { + HELPER_PRINT("Modem is up.\n"); + } // Re-open with user callbacks modem_close(); modem_open(modem_serial_send, callbacks); - uint8_t id = modem_get_id(my_main_callback); + id = modem_get_id(my_main_callback); HELPER_PRINT("Start Modem Process (id=%d)\n", id); ThisThread::sleep_for(1000);