Trond Enger / d7a_1x

Fork of d7a_1x by WizziLab

Revision:
45:b85384e7d825
Parent:
44:8ebe6b70f932
Child:
46:665391110051
--- a/src/d7a_modem.cpp	Tue Aug 30 17:15:31 2016 +0000
+++ b/src/d7a_modem.cpp	Thu Sep 01 09:35:27 2016 +0000
@@ -7,6 +7,7 @@
 #include "d7a_sys.h"
 #include "d7a_common.h"
 #include "d7a.h"
+#include "d7a_alp.h"
 
 #define MODEM_TO    (5000)
 
@@ -26,10 +27,12 @@
 
 void d7a_modem_thread(const void *p);
 
-void d7a_modem_open( PinName reset_pin )
+d7a_errors_t d7a_modem_open( PinName reset_pin )
 {
     FPRINT("\r\n");
     
+    d7a_errors_t err;
+    
     g_modem_ctx.thread = new Thread(d7a_modem_thread, NULL, osPriorityHigh, DEFAULT_STACK_SIZE);
     g_modem_ctx.booted = false;
     g_modem_ctx.nb_files = 0;
@@ -43,22 +46,24 @@
         g_modem_ctx.reset = new DigitalInOut(reset_pin, PIN_OUTPUT, OpenDrain, 1);
     }
 
-    d7a_modem_reset();
+    err = d7a_modem_reset();
+    
+    return err;
 }
 
-static bool d7a_modem_wait_boot( uint32_t millisec )
+d7a_errors_t d7a_modem_wait_boot( uint32_t millisec )
 {
     FPRINT("(%d)\r\n", millisec);
     osEvent evt = g_modem_ctx.boot.get(millisec);
-    return (evt.status == osEventMessage)? true: false;
+    return (evt.status == osEventMessage)? (d7a_errors_t)(int32_t)evt.value.p : D7A_ERR_CMD_TO;
 }
 
 
-static bool d7a_modem_wait_ready( uint32_t millisec )
+d7a_errors_t d7a_modem_wait_ready( uint32_t millisec )
 {
     FPRINT("(%d)\r\n", millisec);
     osEvent evt = g_modem_ctx.ready.get(millisec);
-    return (evt.status == osEventMessage)? true: false;
+    return (evt.status == osEventMessage)? (d7a_errors_t)(int32_t)evt.value.p : D7A_ERR_CMD_TO;
 }
 
 static void d7a_modem_soft_reset(void)
@@ -94,25 +99,29 @@
     
 }
 
-void d7a_modem_reset(void)
+d7a_errors_t d7a_modem_reset(void)
 {
     FPRINT("\r\n");
-    bool reset_ok = false;
+    d7a_errors_t err = D7A_ERR_UNKNOWN;
     g_modem_ctx.booted = false;
 
     //d7a_modem_soft_reset();
-    //reset_ok = d7a_modem_wait_boot(5000);
+    //reset_err = d7a_modem_wait_boot(5000);
     
-    if (!reset_ok)
+    if (err)
     {
         d7a_modem_hard_reset();
-        reset_ok = d7a_modem_wait_boot(MODEM_TO);
+        err = d7a_modem_wait_boot(MODEM_TO);
     }
-    ASSERT(reset_ok, "MODEM BOOT Timeout\r\n");
+    ASSERT(!err, "MODEM BOOT err %d\r\n", err);
     g_modem_ctx.booted = true;
     
-    ASSERT(d7a_modem_wait_ready(MODEM_TO), "MODEM READY Timeout\r\n");
+    err = d7a_modem_wait_ready(MODEM_TO);
+    ASSERT(!err, "MODEM READY err %d\r\n", err);
+    
     IPRINT("MODEM Ready.\r\n");
+    
+    return err;
 }
 
 void d7a_modem_new_pkt(d7a_com_rx_msg_t* pkt)
@@ -141,48 +150,44 @@
     d7a_com_post_msg(&msg);
 }
 
-bool d7a_modem_register(register_file_param_t* file_infos)
+d7a_errors_t d7a_modem_register(register_file_param_t* file_infos)
 {
-    bool err;
+    d7a_errors_t err;
     
-    DPRINT("Declare %d.\r\n", file_infos->fid);
-
-    d7a_modem_msg(WM_CMD_DECLARE_FILE, (uint8_t*)file_infos, sizeof(register_file_param_t));
+    d7a_modem_msg(WM_CMD_REGISTER_FILE, (uint8_t*)file_infos, sizeof(register_file_param_t));
     err = d7a_modem_wait_ready(TO_FS);
     
-    WARNING(!err, "Timeout on declare FID:%d\r\n", file_infos->fid);
+    WARNING(!err, "Declare FID:%d err %d\r\n", file_infos->fid, err);
         
-    DPRINT("Declare %d done.\r\n", file_infos->fid);
-    
     return err;
 }
 
-bool d7a_modem_start(void)
+d7a_errors_t d7a_modem_start(void)
 {
-    bool err;
+    d7a_errors_t err;
     
     DPRINT("Start modem.\r\n");
 
-    d7a_modem_msg(WM_CMD_START_STACK, NULL, 0);
+    d7a_modem_msg(WM_CMD_D7A_STACK_START, NULL, 0);
     err = d7a_modem_wait_ready(TO_FS);
     
-    WARNING(!err, "Timeout on start\r\n");
+    WARNING(!err, "Start modem err %d\r\n", err);
         
     DPRINT("Start done.\r\n");
     
     return err;
 }
 
-bool d7a_modem_stop(void)
+d7a_errors_t d7a_modem_stop(void)
 {
-    bool err;
+    d7a_errors_t err;
     
     DPRINT("Stop modem.\r\n");
 
-    d7a_modem_msg(WM_CMD_STOP_STACK, NULL, 0);
+    d7a_modem_msg(WM_CMD_D7A_STACK_STOP, NULL, 0);
     err = d7a_modem_wait_ready(TO_FS);
     
-    WARNING(!err, "Timeout on stop\r\n");
+    WARNING(!err, "Stop modem err %d\r\n", err);
         
     DPRINT("Stop done.\r\n");
     
@@ -194,8 +199,8 @@
     uint8_t uid[8];
     d7a_revision_t rev;
     
-    //D7A_FS_READ(0, uid, 0, 8);
-    //D7A_FS_READ(2, &rev, 0, sizeof(d7a_revision_t));
+    D7A_READ(0, 0, 8, uid);
+    D7A_READ(2, 0, sizeof(d7a_revision_t), &rev);
     
     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]);
@@ -222,12 +227,12 @@
         {
             case KAL_COM_FLOW_CMD:
                 uint8_t cmd = pkt->buffer[0];
-                if (cmd == WM_CMD_READY)
+                if (cmd == WM_OK)
                 {
                     DPRINT("Modem ready\r\n");
-                    g_modem_ctx.ready.put(NULL);
+                    g_modem_ctx.ready.put((void*)D7A_ERR_NONE);
                 }
-                else if (cmd == WM_CMD_BOOT)
+                else if (cmd == WM_BOOT)
                 {
                     WARNING(false, "Modem booted CAUSE:%d NB_BOOT:%d\r\n", pkt->buffer[1], ((uint16_t)pkt->buffer[4])<<8 & pkt->buffer[3]);
                     
@@ -240,6 +245,24 @@
                         g_modem_ctx.boot.put(NULL);
                     }
                 }
+                else if (cmd == WM_ERROR)
+                {
+                    int8_t err = pkt->buffer[1];
+                    int8_t ret;
+                    
+                    WARNING(false, "Modem cmd error %d\r\n", err);
+                    switch (err)
+                    {
+                        case WM_ERR_NOT_READY:          ret = D7A_ERR_NOT_READY; break;
+                        case WM_ERR_COM_LINK:           ret = D7A_ERR_COM_LINK; break;
+                        case WM_ERR_ILLEGAL_FID:        ret = D7A_ERR_ILLEGAL_FID; break;
+                        case WM_ERR_ILLEGAL_FILE_DEF:   ret = D7A_ERR_ILLEGAL_FILE_DEF; break;
+                        case WM_ERR_UNKNOWN:            ret = D7A_ERR_UNKNOWN; break;
+                        default:                        ret = D7A_ERR_NONE; break;
+                    }
+                    
+                    g_modem_ctx.ready.put((void*)ret);
+                }
                 else
                 {
                     EPRINT("MODEM Unknown cmd %d\r\n", cmd);