Broadcast read demo.

Dependencies:   modem_ref_helper DebouncedInterrupt

Revision:
4:94bfd123f8e6
Parent:
3:a240b300fae9
Child:
5:c39a1bb57cf3
--- a/main.cpp	Wed May 17 14:42:28 2017 +0000
+++ b/main.cpp	Thu May 18 13:07:43 2017 +0000
@@ -1,30 +1,14 @@
 // @autor: jeremie@wizzilab.com
 // @date: 2017-05-02
 
-#include "mbed.h"
-#include "rtos.h"
 #include "DebouncedInterrupt.h"
-#include "WizziDebug.h"
-#include "WizziCom.h"
-
-#include "hwcfg.h"
+#include "modem_ref_helper.h"
 #include "modem_callbacks.h"
 
-#include "revision.h"
-#include "alp_spec.h"
-#include "alp_helpers.h"
-#include "modem_ref.h"
-#include "kal_fs.h"
-#include "d7a_1x.h"
-#include "d7a_1x_fs.h"
-#include "alp.h"
+#define MY_POLICY_IDX           0
 
-#define MODEM_VERSION_MAJOR         4
-#define MODEM_VERSION_MINOR         8
-
-WizziCom* g_modem_com;
 Semaphore button_user(0);
-Semaphore modem_ready[MAX_USER_NB];
+Semaphore modem_ready(0);
 Queue<void, 8> modem_resp;
 
 enum {
@@ -35,14 +19,6 @@
 
 uint8_t g_main_id;
 
-TYPEDEF_STRUCT_PACKED {
-    uint8_t type;
-    d7a_sp_cfg_t cfg;
-} alp_d7a_itf_t;
-
-#define WM_FID_ALP_CFG          50
-#define MY_POLICY_IDX           0
-
 alp_retry_policy_t my_policy = {
     .meta.procedure     = 0,
     .meta.respond       = true,
@@ -53,8 +29,6 @@
     .slot_time          = 0
 };
 
-#define D7A_CTF_VAL(mant,exp)   ((uint8_t)(mant|(exp<<5)))
-#define ALP_ITF_TYPE_D7A        0xD7
 alp_d7a_itf_t my_itf = {
     .type                           = ALP_ITF_TYPE_D7A,
     .cfg.to                         = 0,
@@ -69,14 +43,6 @@
     .cfg.addressee.id[0]            = D7A_CTF_VAL(8,0),
 };
 
-#define MY_D7_ITF_SIZE(_itf) (1+my_alp_itf_d7a_cfg_size(&(_itf)->cfg))
-int my_alp_itf_d7a_cfg_size(d7a_sp_cfg_t* cfg)
-{
-    int size = sizeof(d7a_sp_cfg_t) - sizeof(d7a_addressee_t);
-    size += D7A_ADDR_LEN(cfg->addressee.ctrl);
-    return size;
-}
-
 void print_status(int status)
 {
     switch (status)
@@ -137,6 +103,8 @@
 
 void button_user_thread()
 {
+    FPRINT("(id:0x%08x)\r\n", osThreadGetId());
+
     osEvent evt;
     uint32_t resp;
     d7a_sp_res_t istat;
@@ -144,18 +112,12 @@
     uint8_t nb = 0;
 
     uint8_t my_user_id = modem_get_id(my_read_response_callback);
-    
-    FPRINT("(id:0x%08x)\r\n", osThreadGetId());
-    
+        
     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();
-    
     while (true)
     {
         // Wait for button press
@@ -168,7 +130,7 @@
             
             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, D7A_FID_FIRMWARE_VERSION, (void*)&fw_ver, 12, sizeof(fw_version_t), my_user_id);
+            modem_remote_read_file((uint8_t*)&my_itf, D7_ITF_SIZE(&my_itf), (void*)&istat, D7A_FID_FIRMWARE_VERSION, (void*)&fw_ver, 12, sizeof(fw_version_t), my_user_id);
             
             do
             {
@@ -195,30 +157,13 @@
     }
 }
 
-// Serial adapters to WizziLab's own architecture
-// ============================================================{{{
-
-void my_serial_input(WizziCom* com, WizziComPacket_t* pkt)
-{
-    modem_input(wizzicom_type_to_flow(pkt->type), pkt->data, pkt->length);
-    FREE(pkt);
-}
-
-int my_serial_send(uint8_t* data1, uint8_t size1, uint8_t* data2, uint8_t size2)
-{
-    (void)size1;
-    
-    g_modem_com->send((WizziComPacketType)wizzicom_flow_to_type(data1[4]), size2, data2);
-
-    return (size1 + size2);
-}
-
 modem_callbacks_t callbacks = {
     .read       = my_read,
     .write      = my_write,
     .read_fprop = my_read_fprop,
     .flush      = my_flush,
     .remove     = my_delete,
+    .udata      = my_udata,
     .lqual      = my_lqual,
     .ldown      = my_ldown,
     .reset      = my_reset,
@@ -233,7 +178,7 @@
     if (terminal)
     {    
         print_status(err);
-        modem_ready[id].release();
+        modem_ready.release();
     }
     else
     {
@@ -245,70 +190,30 @@
 int main()
 {
     // Start & initialize
+#ifdef DEBUG_LED
     DBG_OPEN(DEBUG_LED);
+#else
+    DBG_OPEN(NC);
+#endif
     PRINT("\r\n--- Starting new run ---\r\n");
     FPRINT("(id:0x%08x)\r\n", osThreadGetId());
     
-    static union {
-        uint8_t      b[8];
-        uint32_t     w[2];
-    } uid;
-    revision_t rev;
-            
-    // Hardware reset
-    DigitalOut reset_low(MODEM_PIN_RESET, 0);
-    Thread::wait(100);
-        
-    // Release reset
-    DigitalIn reset_release(MODEM_PIN_RESET);
-    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);
-    
-    // Redirect All Port traffic to my_serial_input
-    g_modem_com->attach(my_serial_input, WizziComPacketOther);
-
-    modem_open(my_serial_send, &callbacks);
+    modem_helper_open(&callbacks);
     
     g_main_id = modem_get_id(my_main_callback);
-
-    PRINT("Start Modem Process (id=%d)\n", g_main_id);
-    Thread::wait(1000);
     
-    modem_read_file(D7A_FID_UID, uid.b, 0, 8, g_main_id);
-    modem_ready[g_main_id].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");
-    PRINT(" - Manufacturer ID:  %08X\r\n", rev.manufacturer_id);
-    PRINT(" - Device ID:        %08X\r\n", rev.device_id);
-    PRINT(" - Hardware version: %08X\r\n", rev.hw_version);
-    PRINT(" - Firmware version: v%d.%d.%d\r\n", rev.fw_version.major, rev.fw_version.minor, rev.fw_version.patch);
-    PRINT(" - File system CRC:  0x%08x\r\n", rev.fs_crc);
-    PRINT("-----------------------------------------\r\n");
-    
-    // Check version
-    if (rev.fw_version.major != MODEM_VERSION_MAJOR || rev.fw_version.minor != MODEM_VERSION_MINOR)
-    {
-        PRINT("You need a modem at version %d.%d.x to use this APP.\n"
-              "Please check updates by importing:\n"
-              "https://developer.mbed.org/teams/WizziLab/code/D7A_WM_Updater\n"
-              , MODEM_VERSION_MAJOR, MODEM_VERSION_MINOR);
-        Thread::wait(osWaitForever);
-    }
+    // 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();
     
     // 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[g_main_id].wait();
+    modem_ready.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[g_main_id].wait();
+    modem_activate_itf(ALP_ITF_TYPE_D7A, 24, 0, ALP_D7A_ISTAT_RESP | ALP_D7A_ISTAT_UNS, true, g_main_id);
+    modem_ready.wait();
 
 #ifdef DEBUG_BUTTON
     DebouncedInterrupt user_interrupt(DEBUG_BUTTON);
@@ -317,9 +222,11 @@
     Thread but_th(osPriorityNormal, 2048, NULL);
     osStatus status = but_th.start(button_user_thread);
     ASSERT(status == osOK, "Failed to start but thread (err: %d)\r\n", status);
+#else
+    #error You need a button to use this APP as is
 #endif
 
-#if (DEBUG_LED != NC)
+#ifdef DEBUG_LED
     DigitalOut my_led(DEBUG_LED);
 #endif
     
@@ -328,7 +235,7 @@
     while(true)
     {
         Thread::wait(500);
-#if (DEBUG_LED != NC)
+#ifdef DEBUG_LED
         my_led = !my_led;
 #endif
     }