ReSpeaker Switch V02

Dependencies:   mbed MbedJSONValue

Revision:
2:5c531dfe890b
Parent:
1:2b61ae8e6f94
Child:
3:9c3169e549f0
--- a/main.cpp	Sun Feb 04 11:43:12 2018 +0000
+++ b/main.cpp	Sun Feb 04 15:24:26 2018 +0000
@@ -93,7 +93,12 @@
 // #defines  //
 ///////////////
 
-#define DEBUG_MOD1
+//#define DEBUG_MOD1  // json packet recognise
+//#define DEBUG_MOD2   // json parse
+//#define DEBUG_MOD3   // switch handler
+
+#define DEBUG_MOD10   // responsivity msges to gui
+
 #define MSG_BUFFER_SIZE 512
 #define HEADER_SIZE 5
 #define FOOTER_SIZE 2
@@ -101,6 +106,9 @@
 // Objects //
 /////////////
 
+// json
+MbedJSONValue guiCmd;
+
 // uart
 Serial pc(USBTX, USBRX);
 
@@ -174,6 +182,9 @@
 // Packet Parser
 void parsePacket(void);
 
+// switch Packet Handler
+void switchPacket(void);
+
 // initialize switch
 void initSwitch(void);
 ////////////////////////
@@ -342,54 +353,72 @@
 // Packet Parser
 void parsePacket(void)
 {
-    static int micChannle = 0;
-    static bool spkChannle[5]= {0};
-#ifdef DEBUG_MOD1
+    string targetName;
+#ifdef DEBUG_MOD2
     // write buffer to screen
     //pc.printf("%d, %.*s", packetMSG.bufferIndex ,packetMSG.bufferIndex, packetMSG.buffer );
-    //pc.printf("%s", json);
+    pc.printf("%s", json);
+#endif
+
+    // GUI message format Switch: {"name":"switch","mic":0, "spk": [0,1,0,0,0]}
+    parse(guiCmd, json);
+
+    // get target:
+    targetName = guiCmd["name"].get<string>(); // switch / dsp
+
+#ifdef DEBUG_MOD2
+    // send parsed values
+    pc.printf("targetName: %s \r\n", targetName.c_str());
 #endif
 
-    MbedJSONValue guiCmd;
+    // select handler based on target mcu
+    if (targetName == "switch") {
+        switchPacket();
+    } else if (targetName == "dsp") {
+        // send msg to dsp
+        pc.printf("json:%s", json);
+    } else {
+#ifdef DEBUG_MOD2
+        // unrecognised target
+        pc.printf("unrecognised target: %s \r\n", targetName.c_str());
+#endif
+    }
+    // led blink
+    led = !led;
+}// end parse
 
-    //const  char * json = "{\"my_array\": [\"demo_string\", 10], \"my_boolean\": true}";
-    // json:{"my_array": ["demo_string", 10], "my_boolean": true}
-    //parse the previous string and fill the object demo
+// switch Packet Handler
+void switchPacket(void)
+{
+    int micChannle = 0;
+    bool spkChannle[5]= {0};
 
-    // GUI message format: {"mic":0, "spk": [0,1,0,0,0]}
-    parse(guiCmd, json);
-
+    // get mic channle
     micChannle = guiCmd["mic"].get<int>();
+    // get speakers output
     for (int ii=0 ; ii < 5 ; ii++) {
         spkChannle[ii] = guiCmd["spk"][ii].get<bool>();
     }
-
-#ifdef DEBUG_MOD1
+#ifndef DEBUG_MOD10    
     // send parsed values
-    printf("mic: %d , spk: [%d,%d,%d,%d,%d]\r\n", micChannle,spkChannle[0],spkChannle[1],spkChannle[2],spkChannle[3],spkChannle[4]);
-#endif
-
-
+    pc.printf("mic: %d , spk: [%d,%d,%d,%d,%d]\r\n", micChannle,spkChannle[0],spkChannle[1],spkChannle[2],spkChannle[3],spkChannle[4]);
+#endif    
     // update hardware
-    
     // update mic select mux
     uint8_t micByte = (uint8_t) micChannle;
     mux_s0.write((bool)(micByte & 0b00000001));
     mux_s1.write((bool)(micByte & 0b00000010));
     mux_s2.write((bool)(micByte & 0b00000100));
     mux_s3.write((bool)(micByte & 0b00001000));
-
     // update speakers:
     en_spk_1.write(spkChannle[0]);
     en_spk_2.write(spkChannle[1]);
     en_spk_3.write(spkChannle[2]);
     en_spk_4.write(spkChannle[3]);
     en_spk_5.write(spkChannle[4]);
-    
-    // led blink
-    led = !led;
-}// end parse
+    // end switch target parse
 
+}// end switch packet
 
 
 //// Serial Event function  simple byte parser