Trond Enger / d7a_1x

Fork of d7a_1x by WizziLab

Revision:
43:28202405094d
Parent:
38:c1e7f97ab396
Child:
44:8ebe6b70f932
--- 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
                     {