Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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)