Exportable version of WizziLab's modem driver.

Dependents:   modem_ref_helper

Revision:
58:8d58e5cb4037
Parent:
57:5444cfda9889
Child:
59:3b38b5f499db
--- a/src/modem_ref.cpp	Fri Jan 29 16:36:32 2021 +0000
+++ b/src/modem_ref.cpp	Tue Feb 16 09:30:20 2021 +0000
@@ -246,10 +246,12 @@
     {
         case WC_FLOW_ALP_UNS:
         case WC_FLOW_ALP_CMD:
-        
+
             // pre-parse payload
             alp = alp_payload_parse(p, size);
-            //alp_payload_print(alp);
+            
+            PRINT("ALP_UNS:\n");
+            alp_payload_print(alp);
             
             if (ALP_OPCODE_TAG == (alp->d[0] & 0x3F))
             {
@@ -269,7 +271,9 @@
         
             // pre-parse payload
             alp = alp_payload_parse(p, size);
-            //alp_payload_print(alp);
+            
+            PRINT("ALP_RESP:\n");
+            alp_payload_print(alp);
             
             p = alp->d;
             alp_parse_chunk(&p, &r);
@@ -279,11 +283,27 @@
             
             id  = r.meta.tag.id;
             eop = r.meta.tag.eop;
-            ASSERT(g_modem.user[id].cb != NULL, "ASSERT: NULL Callback for ID %d\n", id);
+            
+            if (g_modem.user[id].cb == NULL)
+            {
+                PRINT("WARNING: NULL Callback for ID %d\n", id);
+                alp_payload_print(alp);
+                alp_payload_free(alp);
+                break;
+            }
+            //ASSERT(g_modem.user[id].cb != NULL, "ASSERT: NULL Callback for ID %d\n", id);
 
-            // Give the remaining of the payload to the user to deal with
-            *(g_modem.user[id].alp_rsp) = alp_payload_append(*(g_modem.user[id].alp_rsp), alp);
-                        
+            if (g_modem.user[id].alp_rsp)
+            {
+                // Give the remaining of the payload to the user to deal with
+                *(g_modem.user[id].alp_rsp) = alp_payload_append(*(g_modem.user[id].alp_rsp), alp);
+            }
+            else
+            {
+                // Discard payload
+                alp_payload_free(alp);
+            }
+            
             if(eop)
             { // This is mainly for debug, catch old pointers
                 //g_modem.user[id].data   = NULL;
@@ -357,7 +377,7 @@
         {
             g_modem.user[id].cb = cb;
             rolling++;
-            //REF_PRINT("Get ID:%d/0x%08x\n", i, cb);
+            //PRINT("Get ID:%d/0x%08x\n", id, cb);
             return id;
         }
     }
@@ -370,7 +390,7 @@
     if (id < MAX_USER_NB)
     {
         g_modem.user[id].cb     = NULL;
-        //REF_PRINT("Free ID:%d\n", id);
+        //PRINT("Free ID:%d\n", id);
         return id;
     }
     return -1;