Exportable version of WizziLab's modem driver.
Diff: src/modem_ref.cpp
- 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;