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_d7a.cpp
- Revision:
- 75:dad2f09cb870
- Parent:
- 72:15bf99fcfed9
- Child:
- 76:cbe558f136a4
--- a/modem_d7a.cpp Tue Sep 07 08:44:08 2021 +0000 +++ b/modem_d7a.cpp Tue Sep 07 15:59:23 2021 +0000 @@ -1,6 +1,7 @@ #include "mbed.h" #include "modem_d7a.h" +#include "modem_cup.h" #if 0 #define HELPER_PRINT(...) PRINT(__VA_ARGS__) @@ -73,7 +74,7 @@ return size; } -Semaphore boot(0); +static Semaphore boot(0); void my_startup_boot(u8 cause, u16 number) { HELPER_PRINT("Modem BOOT[%c] #%d\r\n", cause, number); @@ -215,31 +216,7 @@ PRINT("-----------------------------------------\r\n"); FLUSH(); - if (MODEM_DEVICE_ID == rev.device_id) - { - // Check version - uint32_t rev_sum1 = (rev.fw_version.major << 24) | (rev.fw_version.minor << 16) | rev.fw_version.patch; - uint32_t rev_sum2 = (MODEM_VERSION_MAJOR << 24) | (MODEM_VERSION_MINOR << 16) | MODEM_VERSION_PATCH; - if (rev_sum1 < rev_sum2) - { - PRINT("\r\nYou need a modem at version %d.%d.%d or above to use this Driver.\r\n" - "You can:\r\n" - " - Check modem updates on the Dash7Board:\r\n" - " Go to your site's version manager.\r\n" - " - Check modem updates by importing:\r\n" - " https://developer.mbed.org/teams/WizziLab/code/D7A_WM_Updater\r\n" - " - Choose the right 'modem_ref_helper' revision.\r\n" - " Right click on modem_ref_helper -> Revision.\r\n" - , MODEM_VERSION_MAJOR, MODEM_VERSION_MINOR, MODEM_VERSION_PATCH); - - ThisThread::sleep_for(osWaitForever); - } - } - else - { - // Do not check version - PRINT("/!\\ Not a modem firmware /!\\\r\n"); - } + modem_cup_update(&rev); return 0; } @@ -311,9 +288,8 @@ { int err = ALP_ERR_UNKNOWN; alp_payload_t* alp_rsp = NULL; - alp_payload_t* alp_tmp = NULL; - err = _modem_d7a_send(NULL, alp, &alp_rsp, timeout); + err = _modem_d7a_send(itf, alp, &alp_rsp, timeout); do { if (ALP_ERR_NONE > err) { PRINT("Send ALP timeout\n"); break; } @@ -339,7 +315,6 @@ int err = ALP_ERR_UNKNOWN; alp_payload_t* alp = NULL; alp_payload_t* alp_rsp = NULL; - alp_payload_t* alp_tmp = NULL; alp = alp_payload_f_rd_data(NULL, fid, offset, length, false); @@ -352,11 +327,11 @@ if (ALP_ERR_NONE > err) { PRINT("Read file err %d\n", err); break; } - alp_tmp = alp_payload_get(alp_rsp, ALP_OPCODE_RSP_F_DATA); - if (alp_tmp) + alp = alp_payload_get(alp_rsp, ALP_OPCODE_RSP_F_DATA); + if (alp) { alp_parsed_chunk_t r; - u8* p = alp_tmp->d; + u8* p = alp->d; alp_parse_chunk(&p, &r); memcpy(data, r.data, r.meta.f_data.length); @@ -380,105 +355,50 @@ return err; } -static int _modem_write_file(uint8_t* itf, void *istatus, uint8_t fid, void *data, uint32_t offset, uint32_t length, uint32_t timeout) +int modem_read_file(uint8_t fid, void *data, uint32_t offset, uint32_t length) { - int err = ALP_ERR_UNKNOWN; - alp_payload_t* alp = NULL; - alp_payload_t* alp_rsp = NULL; - alp_payload_t* alp_tmp = NULL; - - alp = alp_payload_f_wr_data(NULL, fid, data, offset, length, false); - - err = _modem_d7a_send(NULL, alp, &alp_rsp, timeout); - - do { - if (ALP_ERR_NONE > err) { PRINT("Write file timeout\n"); break; } - - err = alp_payload_get_err(alp_rsp); - - if (ALP_ERR_NONE > err) { PRINT("Write file err %d\n", err); break; } - - if (istatus) - { - _modem_get_istatus(alp_rsp, istatus); - } - - } while (0); - - alp_payload_free(alp_rsp); - - return err; + return _modem_read_file(NULL, NULL, fid, data, offset, length, MODEM_TIMEOUT_LOCAL); } -int modem_read_file(uint8_t fid, void *data, uint32_t offset, uint32_t length) +int modem_remote_read_file(uint8_t* itf, void *istatus, uint8_t fid, void *data, uint32_t offset, uint32_t length) { - return _modem_read_file(NULL, NULL, fid, data, offset, length, MODEM_TIMEOUT); -} - -int modem_remote_read_file(uint8_t* itf, void *istatus, uint8_t fid, void *data, uint32_t offset, uint32_t length, uint32_t timeout) -{ - return _modem_read_file(itf, istatus, fid, data, offset, length, timeout); + return _modem_read_file(itf, istatus, fid, data, offset, length, MODEM_TIMEOUT_DISTANT); } int modem_write_file(uint8_t fid, void *data, uint32_t offset, uint32_t length) { - return _modem_write_file(NULL, NULL, fid, data, offset, length, MODEM_TIMEOUT); + alp_payload_t* alp = alp_payload_f_wr_data(NULL, fid, data, offset, length, false); + return modem_send_alp(NULL, NULL, alp, MODEM_TIMEOUT_LOCAL); } -int modem_remote_write_file(uint8_t* itf, void *istatus , uint8_t fid, void *data, uint32_t offset, uint32_t length, uint32_t timeout) +int modem_remote_write_file(uint8_t* itf, void *istatus , uint8_t fid, void *data, uint32_t offset, uint32_t length) { - return _modem_write_file(itf, istatus, fid, data, offset, length, timeout); + alp_payload_t* alp = alp_payload_f_wr_data(NULL, fid, data, offset, length, false); + return modem_send_alp(itf, istatus, alp, MODEM_TIMEOUT_DISTANT); +} + +int modem_flush_file(uint8_t fid) +{ + alp_payload_t* alp = alp_payload_f_flush(NULL, fid, false); + return modem_send_alp(NULL, NULL, alp, MODEM_TIMEOUT_LOCAL); } int modem_declare_file(uint8_t fid, alp_file_header_t* header) { - int err = ALP_ERR_UNKNOWN; - alp_payload_t* alp = NULL; - alp_payload_t* alp_rsp = NULL; - - alp = alp_payload_f_declare(NULL, fid, header); - - _modem_d7a_send(NULL, alp, &alp_rsp, MODEM_TIMEOUT); - - err = alp_payload_get_err(alp_rsp); - - alp_payload_free(alp_rsp); - - return err; + alp_payload_t* alp = alp_payload_f_declare(NULL, fid, header); + return modem_send_alp(NULL, NULL, alp, MODEM_TIMEOUT_LOCAL); } int modem_notify_file(uint8_t fid, uint32_t offset, uint32_t length) { - int err = ALP_ERR_UNKNOWN; - alp_payload_t* alp = NULL; - alp_payload_t* alp_rsp = NULL; - - alp = alp_payload_f_touch(NULL, fid, offset, length, false); - - _modem_d7a_send(NULL, alp, &alp_rsp, MODEM_TIMEOUT); - - err = alp_payload_get_err(alp_rsp); - - alp_payload_free(alp_rsp); - - return err; + alp_payload_t* alp = alp_payload_f_touch(NULL, fid, offset, length, false); + return modem_send_alp(NULL, NULL, alp, MODEM_TIMEOUT_LOCAL); } static int _modem_d7a_itf_enable(u8 enable) { - int err = ALP_ERR_UNKNOWN; - alp_payload_t* alp = NULL; - alp_payload_t* alp_rsp = NULL; - - alp = alp_payload_activate_itf(NULL, ALP_ITF_TYPE_D7A, 24, 0, ALP_D7A_ISTAT_RESP | ALP_D7A_ISTAT_UNS | ALP_D7A_ISTAT_EOP, enable); - - _modem_d7a_send(NULL, alp, &alp_rsp, MODEM_TIMEOUT); - - err = alp_payload_get_err(alp_rsp); - - alp_payload_free(alp_rsp); - - return err; + alp_payload_t* alp = alp_payload_activate_itf(NULL, ALP_ITF_TYPE_D7A, 24, 0, ALP_D7A_ISTAT_RESP | ALP_D7A_ISTAT_UNS | ALP_D7A_ISTAT_EOP, enable); + return modem_send_alp(NULL, NULL, alp, MODEM_TIMEOUT_LOCAL); } int modem_d7a_enable_itf(void) @@ -493,36 +413,14 @@ static int modem_lwan_set_urc(void) { - int err = ALP_ERR_UNKNOWN; - alp_payload_t* alp = NULL; - alp_payload_t* alp_rsp = NULL; - - alp = alp_payload_urcc_en(NULL, ALP_URC_TYPE_ITF_BUSY, FID_LWAN_ITF, 1); - - _modem_d7a_send(NULL, alp, &alp_rsp, MODEM_TIMEOUT); - - err = alp_payload_get_err(alp_rsp); - - alp_payload_free(alp_rsp); - - return err; + alp_payload_t* alp = alp_payload_urcc_en(NULL, ALP_URC_TYPE_ITF_BUSY, FID_LWAN_ITF, 1); + return modem_send_alp(NULL, NULL, alp, MODEM_TIMEOUT_LOCAL); } static int modem_lwan_enable_itf(void) { - int err = ALP_ERR_UNKNOWN; - alp_payload_t* alp = NULL; - alp_payload_t* alp_rsp = NULL; - - alp = alp_payload_activate_itf(NULL, ALP_ITF_TYPE_LWAN, 1, FID_LWAN_ITF, 0, true); - - _modem_d7a_send(NULL, alp, &alp_rsp, MODEM_TIMEOUT); - - err = alp_payload_get_err(alp_rsp); - - alp_payload_free(alp_rsp); - - return err; + alp_payload_t* alp = alp_payload_activate_itf(NULL, ALP_ITF_TYPE_LWAN, 1, FID_LWAN_ITF, 0, true); + return modem_send_alp(NULL, NULL, alp, MODEM_TIMEOUT_LOCAL); } int modem_lwan_open(modem_lwan_callbacks_t* callbacks) @@ -553,7 +451,7 @@ { alp_itf_lwan_cfg_t itf = { .type = ALP_ITF_TYPE_LWAN }; - return modem_remote_raw_alp((void*)&itf, alp, NULL, MODEM_TIMEOUT); + return modem_remote_raw_alp((void*)&itf, alp, NULL, MODEM_TIMEOUT_DISTANT); } int modem_lwan_get_status(lwan_status_t* status)