Broadcast read demo.

Dependencies:   modem_ref_helper DebouncedInterrupt

Revision:
2:4629eacf9851
Parent:
1:5ddd7f4db10d
Child:
3:a240b300fae9
--- a/main.cpp	Thu May 11 16:49:40 2017 +0000
+++ b/main.cpp	Mon May 15 16:02:19 2017 +0000
@@ -16,12 +16,13 @@
 #include "modem_ref.h"
 #include "kal_fs.h"
 #include "d7a_1x.h"
+#include "d7a_1x_fs.h"
 #include "alp.h"
 
 
 WizziCom* g_modem_com;
 Semaphore button_user(0);
-Semaphore modem_ready(0);
+Semaphore modem_ready[MAX_USER_NB];
 Queue<void, 8> modem_resp;
 
 enum {
@@ -146,6 +147,9 @@
     
     uint8_t scan_xcl[] = { 0x0F, 0x2F };
     
+    memset(&istat, 0, sizeof(d7a_sp_res_t));
+    memset(&fw_ver, 0, sizeof(fw_version_t));
+    
     // Set custom retry policy
     //modem_write_file(WM_FID_ALP_CFG, &my_policy, MY_POLICY_IDX * sizeof(alp_retry_policy_t), sizeof(alp_retry_policy_t), g_main_id);
     //modem_ready.wait();
@@ -162,12 +166,12 @@
             
             PRINT("Scanning XCL 0x%02X...\n", my_itf.cfg.addressee.xcl.byte);
             
-            modem_remote_read_file((uint8_t*)&my_itf, MY_D7_ITF_SIZE(&my_itf), (void*)&istat, 2, (void*)&fw_ver, 12, sizeof(fw_version_t), my_user_id);
+            modem_remote_read_file((uint8_t*)&my_itf, MY_D7_ITF_SIZE(&my_itf), (void*)&istat, D7A_FID_FIRMWARE_VERSION, (void*)&fw_ver, 12, sizeof(fw_version_t), my_user_id);
             
             do
             {
                 evt = modem_resp.get();
-                resp = (evt.status == osEventMessage)? (uint32_t)evt.value.p : NULL;
+                resp = (evt.status == osEventMessage)? (uint32_t)evt.value.p : MODEM_RESP_NO;
                 
                 if (MODEM_RESP_DONE == resp)
                 {
@@ -176,8 +180,12 @@
                     PRINT_DATA("UID:", "%02X", istat.addressee.id, 8, " ");
                     PRINT("rxlev:%d lb:%d ", istat.rxlev, istat.lb);
                     PRINT("v%d.%d.%d\n", fw_ver.major, fw_ver.minor, fw_ver.patch);
+                    
+                    // Reset variables
+                    memset(&istat, 0, sizeof(d7a_sp_res_t));
+                    memset(&fw_ver, 0, sizeof(fw_version_t));
+                }
 
-                }
             } while (MODEM_RESP_TERMINAL != resp);
         }
         
@@ -223,7 +231,7 @@
     if (terminal)
     {    
         print_status(err);
-        modem_ready.release();
+        modem_ready[id].release();
     }
     else
     {
@@ -251,7 +259,7 @@
         
     // Release reset
     DigitalIn reset_release(MODEM_PIN_RESET);
-    Thread::wait(1000);
+    Thread::wait(2000);
     
     // Open modem Com port
     g_modem_com = new WizziCom(MODEM_PIN_TX, MODEM_PIN_RX, MODEM_PIN_IRQ_OUT, MODEM_PIN_IRQ_IN);
@@ -266,11 +274,11 @@
     PRINT("Start Modem Process (id=%d)\n", g_main_id);
     Thread::wait(1000);
     
-    modem_read_file(0, uid.b, 0, 8, g_main_id);
-    modem_ready.wait();
+    modem_read_file(D7A_FID_UID, uid.b, 0, 8, g_main_id);
+    modem_ready[g_main_id].wait();
     
-    modem_read_file(2, &rev, 0, sizeof(revision_t), g_main_id);
-    modem_ready.wait();
+    modem_read_file(D7A_FID_FIRMWARE_VERSION, &rev, 0, sizeof(revision_t), g_main_id);
+    modem_ready[g_main_id].wait();
     
     PRINT("------------ D7A Modem infos ------------\r\n");
     PRINT_DATA(" - UID:              ", "%02X", uid.b, 8, "\r\n");
@@ -284,11 +292,11 @@
     // Configure URC: LQUAL on report file notification every 10 reports
     PRINT("Setup URCs\n");
     modem_enable_urc(ALP_URC_TYPE_LQUAL, IFID_REPORT, 10, true, g_main_id);
-    modem_ready.wait();
+    modem_ready[g_main_id].wait();
     
     PRINT("Start D7A Stack\n");
     modem_activate_itf(ALP_ITF_TYPE_D7A, 24, 0, ALP_D7A_ISTAT_RESP , true, g_main_id);
-    modem_ready.wait();
+    modem_ready[g_main_id].wait();
 
 #ifdef DEBUG_BUTTON
     DebouncedInterrupt user_interrupt(DEBUG_BUTTON);
@@ -299,7 +307,7 @@
     ASSERT(status == osOK, "Failed to start but thread (err: %d)\r\n", status);
 #endif
 
-#ifdef DEBUG_LED
+#if (DEBUG_LED != NC)
     DigitalOut my_led(DEBUG_LED);
 #endif
     
@@ -308,7 +316,7 @@
     while(true)
     {
         Thread::wait(500);
-#ifdef DEBUG_LED
+#if (DEBUG_LED != NC)
         my_led = !my_led;
 #endif
     }