Dash7Board Code Upgrade Protocol demonstration code.
Dependencies: modem_ref_helper CRC
Diff: main.cpp
- Revision:
- 9:d110f2b86831
- Parent:
- 8:6b7d38139b43
--- a/main.cpp Thu May 28 09:11:58 2020 +0000 +++ b/main.cpp Fri Feb 19 11:00:25 2021 +0000 @@ -1,7 +1,7 @@ // @autor: jeremie@wizzilab.com // @date: 2017-12-14 -#include "modem_ref_helper.h" +#include "modem_d7a.h" #include "modem_callbacks.h" #include "files.h" #include "crc.h" @@ -9,16 +9,13 @@ #define CHUNK_SIZE (128) -Semaphore modem_ready(0); Queue<touch_t, 8> g_file_modified; // CRC calculated on the incoming data stream extern uint32_t stream_crc; extern int32_t last_end; -const uint8_t default_root_key[] = DEFAULT_ROOT_KEY; - -modem_callbacks_t callbacks = { +modem_ref_callbacks_t callbacks = { .read = my_read, .write = my_write, .read_fprop = my_read_fprop, @@ -32,22 +29,6 @@ .busy = my_busy }; -// Callback -void my_main_callback(uint8_t terminal, int8_t err, uint8_t id) -{ - (void)id; - - if (ALP_ERR_NONE > err) - { - modem_print_error(ALP_ITF_TYPE_D7A, err); - } - - if (terminal) - { - modem_ready.release(); - } -} - void thread_file_modified() { touch_t* touch; @@ -57,8 +38,6 @@ uint32_t next_chunk = 0; uint32_t chunks=0; - uint8_t id = modem_get_id(my_main_callback); - PRINT("Ready\n"); while (true) @@ -73,7 +52,7 @@ { cup_cfg_bcast_header_t cup_cfg; - ram_fs_read(FID_APP_CUP_CFG_BCAST, 0, sizeof(cup_cfg_bcast_header_t), (uint8_t*)&cup_cfg); + ram_fs_read(FID_APP_CUP_CFG_BCAST, (uint8_t*)&cup_cfg, 0, sizeof(cup_cfg_bcast_header_t)); if (CUP_CMD_UPGRADE_FILE_START == cup_cfg.cmd) { @@ -94,8 +73,7 @@ .cmd = CUP_CMD_UPGRADE_UPLOAD, .arch_nb = cup_cfg.to, }; - modem_write_file_root(FID_CUP_CFG, (uint8_t*)&cup_start, 0, 4, (uint8_t*)default_root_key, id); - modem_ready.acquire(); + modem_write_file(FID_CUP_CFG, (uint8_t*)&cup_start, 0, 4); } else { @@ -114,7 +92,7 @@ cup_cfg_t cup_cfg = { 0 }; uint8_t* data = (uint8_t*)((uint8_t*)&cup_cfg + touch->offset); - ram_fs_read(touch->fid, touch->offset, touch->length, data); + ram_fs_read(touch->fid, data, touch->offset, touch->length); if (CUP_CMD_UPGRADE_FILE_END == cup_cfg.cmd) { @@ -147,8 +125,7 @@ // Notify modem code file to reset upload watchdog // else the device will exit upload mode after the watchdog timeout - modem_notify_file(FID_CUP_CODE, 0, 1, id); - modem_ready.acquire(); + modem_notify_file(FID_CUP_CODE, 0, 1); break; } @@ -174,7 +151,7 @@ "---------------- Demo CUP ---------------\n" "-----------------------------------------\n"); - modem_helper_open(&callbacks); + modem_open(&callbacks); PRINT("--------------- APP infos ---------------\r\n"); PRINT(" - Manufacturer ID: %08X\r\n", f_rev.manufacturer_id); @@ -184,32 +161,39 @@ PRINT(" - CUP max size: %d\r\n", f_rev.cup_max_size); PRINT("-----------------------------------------\r\n"); - uint8_t id = modem_get_id(my_main_callback); - PRINT("Register Files\n"); - modem_update_file(FID_HOST_REV, (alp_file_header_t*)&h_rev, (uint8_t*)&f_rev); - modem_update_file(FID_APP_CUP_CFG, (alp_file_header_t*)&h_cup_cfg, (uint8_t*)&f_cup_cfg); - modem_update_file(FID_APP_CUP_CFG_BCAST, (alp_file_header_t*)&h_cup_cfg_bcast, (uint8_t*)&f_cup_cfg_bcast); + ram_fs_new(FID_APP_CUP_CFG, (uint8_t*)&h_cup_cfg, (uint8_t*)&f_cup_cfg); + ram_fs_new(FID_APP_CUP_CFG_BCAST, (uint8_t*)&h_cup_cfg_bcast, (uint8_t*)&f_cup_cfg_bcast); + modem_declare_file(FID_APP_CUP_CFG, (alp_file_header_t*)&h_cup_cfg); + modem_declare_file(FID_APP_CUP_CFG_BCAST, (alp_file_header_t*)&h_cup_cfg_bcast); // Declare the cup code file // It needs a special handling of its data in my_write callback since we want to keep them. // (can't be done with the current RAM file system) - modem_declare_file(FID_APP_CUP_CODE, (alp_file_header_t*)&h_cup_code, true, id); - modem_ready.acquire(); + modem_declare_file(FID_APP_CUP_CODE, (alp_file_header_t*)&h_cup_code); - PRINT("Start D7A Stack\n"); - modem_activate_itf(ALP_ITF_TYPE_D7A, 24, 0, ALP_D7A_ISTAT_RESP | ALP_D7A_ISTAT_UNS | ALP_D7A_ISTAT_EOP, true, id); - modem_ready.acquire(); + PRINT("Enable D7A interface\n"); + modem_d7a_enable_itf(); + + // Host revision file is in the modem. Update it. + PRINT("Update host revision\n"); + modem_write_file(FID_HOST_REV, &f_rev, 0, sizeof(revision_t)); - PRINT("Notify Modem Version\n"); - modem_notify_file(D7A_FID_FIRMWARE_VERSION, 0, sizeof(revision_t), id); - modem_ready.acquire(); + // Retrieve modem revision + PRINT("Send revision\n"); + revision_t rev; + modem_read_file(FID_WM_REV, &rev, 0, sizeof(revision_t)); - PRINT("Notify Host Version\n"); - modem_notify_host_rev(&f_rev, &h_rev, (uint8_t*)default_root_key); + // Send both to the server + // Build payload + alp_payload_t* alp = NULL; + alp = alp_payload_rsp_f_data(alp, FID_WM_REV, &rev, 0, sizeof(revision_t)); + alp = alp_payload_rsp_f_data(alp, FID_HOST_REV, &f_rev, 0, sizeof(revision_t)); - // id no longer needed - modem_free_id(id); + // Send + alp_itf_d7a_cfg_t report_itf; + modem_read_file(IFID_REPORT, &report_itf, 0, sizeof(alp_itf_d7a_cfg_t)); + modem_remote_raw_alp((void*)&report_itf, alp, NULL, 10000); // Start file modified thread Thread th_file_modified(osPriorityNormal, 1024, NULL);