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.
Fork of d7a_1x by
Diff: src/d7a_modem.cpp
- Revision:
- 43:28202405094d
- Parent:
- 38:c1e7f97ab396
- Child:
- 44:8ebe6b70f932
diff -r c1e7f97ab396 -r 28202405094d src/d7a_modem.cpp --- a/src/d7a_modem.cpp Thu Aug 25 09:38:40 2016 +0000 +++ b/src/d7a_modem.cpp Tue Aug 30 16:59:12 2016 +0000 @@ -6,6 +6,7 @@ #include "d7a_modem.h" #include "d7a_sys.h" #include "d7a_common.h" +#include "d7a.h" typedef struct { Thread* thread; @@ -41,7 +42,6 @@ } d7a_modem_reset(); - ASSERT(d7a_sys_ping_modem(30000), "Modem does not respond\r\n"); } static bool d7a_modem_wait_boot( uint32_t millisec ) @@ -92,7 +92,7 @@ } -void d7a_modem_reset( void ) +void d7a_modem_reset(void) { FPRINT("\r\n"); bool reset_ok = false; @@ -109,7 +109,7 @@ ASSERT(reset_ok, "MODEM BOOT Timeout\r\n"); g_modem_ctx.booted = true; - ASSERT(d7a_modem_wait_ready(3000), "MODEM READY Timeout\r\n"); + ASSERT(d7a_modem_wait_ready(10000), "MODEM READY Timeout\r\n"); IPRINT("MODEM Ready.\r\n"); } @@ -119,7 +119,7 @@ ASSERT(g_modem_ctx.pkt_queue.put(pkt) == osOK, "MODEM queue full!\r\n"); } -d7a_com_rx_msg_t* d7a_modem_wait_pkt( uint32_t millisec ) +d7a_com_rx_msg_t* d7a_modem_wait_pkt(uint32_t millisec) { FPRINT("(millisec:%d)\r\n", millisec); osEvent evt = g_modem_ctx.pkt_queue.get(millisec); @@ -130,7 +130,7 @@ { FPRINT("(value:0x%02X, buf:0x%08x, len:%d)\r\n", value, buf, len); d7a_com_tx_msg_t msg; - uint8_t val=value; + uint8_t val = value; msg.id = KAL_COM_FLOW_CMD; msg.pbuf = &val; msg.abuf = buf; @@ -139,82 +139,61 @@ d7a_com_post_msg(&msg); } -bool d7a_modem_register_file(uint8_t fid, uint8_t retry_policy) +bool d7a_modem_register(register_file_param_t* file_infos) { - bool ret = true; - - FPRINT("(fid:%d, retry_policy:0x%02X)\r\n", fid, retry_policy); - register_file_param_t* rparams = (register_file_param_t*)MALLOC(sizeof(register_file_param_t)); - - rparams->bf.fid = fid; - rparams->bf.retry_policy = retry_policy; - - // Check If modem already has it - PRINT("Register: %d\r\n", rparams->bf.fid); + bool err; - g_modem_ctx.status = d7a_fs_distant_stat(rparams->bf.fid, NULL); - if (g_modem_ctx.status < 0) - { - d7a_fs_properties_t props; - // retrieve local properties - d7a_fs_get_properties(rparams->bf.fid, KAL_FS_PROP_ALL, &props); - // create a remote Host file matching our local one - props.type |= HOST; - g_modem_ctx.status = d7a_fs_distant_create(rparams->bf.fid, &props); - } + DPRINT("Declare %d.\r\n", file_infos->fid); + + d7a_modem_msg(WM_CMD_DECLARE_FILE, (uint8_t*)file_infos, sizeof(register_file_param_t)); + err = d7a_modem_wait_ready(TO_FS); - if (g_modem_ctx.status == 0) - { - // Distant file is ready, lets register a D7A Interface for it - d7a_modem_msg(WM_CMD_REGISTER_FILE,(uint8_t*)rparams,sizeof(register_file_param_t)); - ret = d7a_modem_wait_ready(TO_FS); - } - else - { - ret = false; - } + WARNING(!err, "Timeout on declare FID:%d\r\n", file_infos->fid); + + DPRINT("Declare %d done.\r\n", file_infos->fid); - //Thread::wait(100); // Let time to the modem to write to the flash - - // save registered file - g_modem_ctx.registered_files.put(rparams); - g_modem_ctx.nb_files++; - - DPRINT("Register done.\r\n"); - //g_modem_ctx.ressource->release(); - - return ret; + return err; } -void d7a_modem_notify_file(uint8_t fid, uint32_t offset, uint32_t length) +bool d7a_modem_start(void) { - FPRINT("(fid:%d, offset:%d, length:%d)\r\n", fid, offset, length); - DPRINT("Notify %d.\r\n", fid); + bool err; + + DPRINT("Start modem.\r\n"); + + d7a_modem_msg(WM_CMD_START_STACK, NULL, 0); + err = d7a_modem_wait_ready(TO_FS); + + WARNING(!err, "Timeout on start\r\n"); + + DPRINT("Start done.\r\n"); - notify_file_param_t nfp = { - .bf.fid = fid, - .bf.offset = offset, - .bf.size = length - }; + return err; +} + +bool d7a_modem_stop(void) +{ + bool err; + + DPRINT("Stop modem.\r\n"); - d7a_modem_msg(WM_CMD_NOTIFY_FILE,(uint8_t*)&nfp,sizeof(notify_file_param_t)); - WARNING(d7a_modem_wait_ready(TO_FS), "Notification Timeout on FID:%d\r\n", fid); + d7a_modem_msg(WM_CMD_STOP_STACK, NULL, 0); + err = d7a_modem_wait_ready(TO_FS); - //Thread::wait(100); // XXX: To avoid lost packets + WARNING(!err, "Timeout on stop\r\n"); + + DPRINT("Stop done.\r\n"); - DPRINT("Notify %d done.\r\n", fid); - //g_modem_ctx.ressource->release(); + return err; } void d7a_modem_print_infos( void ) { uint8_t uid[8]; - revision_t rev; + d7a_revision_t rev; - //g_modem_ctx.ressource->wait(); - - D7A_FS_READ(0, uid, 0, 8); - D7A_FS_READ(2, &rev, 0, sizeof(revision_t)); + //D7A_FS_READ(0, uid, 0, 8); + //D7A_FS_READ(2, &rev, 0, sizeof(d7a_revision_t)); PRINT("------------ D7A Modem infos ------------\r\n"); PRINT("| UID: %02X%02X%02X%02X%02X%02X%02X%02X |\r\n", uid[0], uid[1], uid[2], uid[3], uid[4], uid[5], uid[6], uid[7]); @@ -225,35 +204,8 @@ PRINT("| File system CRC: 0x%08x |\r\n", rev.fs_crc); PRINT("-----------------------------------------\r\n"); - //g_modem_ctx.ressource->release(); } - -void d7a_modem_recover_thread(const void *p) -{ - WARNING(false, "Modem rebooting, %d files to restore\r\n", g_modem_ctx.nb_files); - // Reset modem - ASSERT(d7a_modem_wait_ready(3000), "MODEM READY Timeout\r\n"); - - d7a_com_start_tx(); - - uint8_t nb = g_modem_ctx.nb_files; - // register files again - for (int i = 0; i < nb; i++) - { - osEvent evt = g_modem_ctx.registered_files.get(1000); - register_file_param_t* file = (evt.status == osEventMessage)? (register_file_param_t*)evt.value.p: NULL; - - ASSERT(file != NULL, "NULL file while recovering\r\n"); - - d7a_modem_register_file(file->bf.fid, file->bf.retry_policy); - } - - g_modem_ctx.nb_files = nb; - IPRINT("Modem reboot OK\r\n"); -} - - void d7a_modem_thread(const void *p) { FPRINT("\r\n"); @@ -279,8 +231,7 @@ if (g_modem_ctx.booted == true) { - d7a_com_stop_tx(); - Thread* reset_th = new Thread(d7a_modem_recover_thread, NULL, osPriorityRealtime); + // Do something? } else {