ReSpeaker Switch V02

Dependencies:   mbed MbedJSONValue

Committer:
Arkadi
Date:
Sun Feb 04 11:43:12 2018 +0000
Revision:
1:2b61ae8e6f94
Parent:
0:f65ba5fb350e
Child:
2:5c531dfe890b
Updated to json parser

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Arkadi 0:f65ba5fb350e 1 ////////////////////////////////////////
Arkadi 1:2b61ae8e6f94 2 // Tau_ReSpeaker_Sitch_V01 //
Arkadi 0:f65ba5fb350e 3 // Arkadiraf@gmail.com - 05/06/2017 //
Arkadi 0:f65ba5fb350e 4 ////////////////////////////////////////
Arkadi 0:f65ba5fb350e 5 /*
Arkadi 0:f65ba5fb350e 6 Receive byte from pc to reroute input outputs
Arkadi 1:2b61ae8e6f94 7 b1xxxxxxx (0x8x) - define input port; b10000000 - port 0, b10000001 - port 1, b10000010 - port 2 etc , b10000011 - port 3 etc.
Arkadi 0:f65ba5fb350e 8 b0xxxxxxx - define output ports; b10000001 - port 1, b10000011 - port 1&2, b10000000 - non.
Arkadi 1:2b61ae8e6f94 9 off all: 0x00
Arkadi 1:2b61ae8e6f94 10 All ports: 0x1f
Arkadi 1:2b61ae8e6f94 11 speaker 5: 0x10
Arkadi 1:2b61ae8e6f94 12 speaker 1: 0x01
Arkadi 1:2b61ae8e6f94 13
Arkadi 1:2b61ae8e6f94 14 Alternative json format:
Arkadi 1:2b61ae8e6f94 15 Json Format: {"mic":0, "spk": [0,1,0,0,0]}
Arkadi 1:2b61ae8e6f94 16
Arkadi 0:f65ba5fb350e 17 */
Arkadi 0:f65ba5fb350e 18
Arkadi 0:f65ba5fb350e 19 /*
Arkadi 0:f65ba5fb350e 20 Board : Nucleo STM32F446RE
Arkadi 0:f65ba5fb350e 21 Power Source : USB || Jumper 5V source from STM32 DSP board
Arkadi 0:f65ba5fb350e 22 */
Arkadi 0:f65ba5fb350e 23
Arkadi 0:f65ba5fb350e 24 /*
Arkadi 0:f65ba5fb350e 25 Nucleo board modification:
Arkadi 1:2b61ae8e6f94 26 to use PH_0(MUX_S2) as IO modify boards as followed:
Arkadi 0:f65ba5fb350e 27 SB54 and SB55 ON
Arkadi 0:f65ba5fb350e 28 SB16 and SB50 (MCO) OFF
Arkadi 1:2b61ae8e6f94 29 http://www.st.com/content/ccc/resource/technical/document/user_manual/98/2e/fa/4b/e0/82/43/b7/DM00105823.pdf/files/DM00105823.pdf/jcr:content/translations/en.DM00105823.pdf
Arkadi 0:f65ba5fb350e 30 */
Arkadi 0:f65ba5fb350e 31
Arkadi 0:f65ba5fb350e 32 /*
Arkadi 0:f65ba5fb350e 33 Pinout:
Arkadi 0:f65ba5fb350e 34 PC - Serial 2
Arkadi 0:f65ba5fb350e 35 PA_2 (Tx) --> STLINK
Arkadi 0:f65ba5fb350e 36 PA_3 (Rx) --> STLINK
Arkadi 0:f65ba5fb350e 37
Arkadi 0:f65ba5fb350e 38 Switch - Serial 3
Arkadi 0:f65ba5fb350e 39 PC_10 (Tx) --> SW_Rx
Arkadi 0:f65ba5fb350e 40 PC_11 (Rx) --> SW_Tx
Arkadi 0:f65ba5fb350e 41
Arkadi 0:f65ba5fb350e 42 I2C_Bus
Arkadi 0:f65ba5fb350e 43 PB_8 --> SCL
Arkadi 0:f65ba5fb350e 44 PB_9 --> SDA
Arkadi 0:f65ba5fb350e 45
Arkadi 0:f65ba5fb350e 46 Digital output :
Arkadi 0:f65ba5fb350e 47 PA_5 --> led (DigitalOut)
Arkadi 0:f65ba5fb350e 48 PA_10 --> SW_Trigger
Arkadi 0:f65ba5fb350e 49
Arkadi 0:f65ba5fb350e 50 MUX: CD74HC4067
Arkadi 0:f65ba5fb350e 51 PC_12 --> MUX_S0
Arkadi 0:f65ba5fb350e 52 PD_2 --> MUX_S1
Arkadi 0:f65ba5fb350e 53 PH_0 --> MUX_S2
Arkadi 0:f65ba5fb350e 54 PH_1 --> MUX_S3
Arkadi 0:f65ba5fb350e 55
Arkadi 0:f65ba5fb350e 56 Speaker Switch : SN74LVC1G3157
Arkadi 0:f65ba5fb350e 57 PB_2 --> EN_SPK_1
Arkadi 0:f65ba5fb350e 58 PB_1 --> EN_SPK_2
Arkadi 0:f65ba5fb350e 59 PB_15 --> EN_SPK_3
Arkadi 0:f65ba5fb350e 60 PB_14 --> EN_SPK_4
Arkadi 0:f65ba5fb350e 61 PB_13 --> EN_SPK_5
Arkadi 0:f65ba5fb350e 62
Arkadi 0:f65ba5fb350e 63 MIC Interrupts:
Arkadi 0:f65ba5fb350e 64 PC_15 --> INTER_1
Arkadi 0:f65ba5fb350e 65 PC_14 --> INTER_2
Arkadi 0:f65ba5fb350e 66 PA_15 --> INTER_3
Arkadi 0:f65ba5fb350e 67 PA_14 --> INTER_4
Arkadi 0:f65ba5fb350e 68 PA_13 --> INTER_5
Arkadi 0:f65ba5fb350e 69
Arkadi 0:f65ba5fb350e 70 Digital Input
Arkadi 0:f65ba5fb350e 71 PC_13 --> BTN (Blue)
Arkadi 0:f65ba5fb350e 72
Arkadi 0:f65ba5fb350e 73 Analog Input
Arkadi 0:f65ba5fb350e 74 PA_0 --> A_DATA_1
Arkadi 0:f65ba5fb350e 75 PA_1 --> A_DATA_2
Arkadi 0:f65ba5fb350e 76 PA_4 --> A_DATA_3
Arkadi 0:f65ba5fb350e 77 PB_0 --> A_DATA_4
Arkadi 0:f65ba5fb350e 78 PC_1 --> A_DATA_5
Arkadi 0:f65ba5fb350e 79
Arkadi 0:f65ba5fb350e 80 Analog Output
Arkadi 0:f65ba5fb350e 81
Arkadi 0:f65ba5fb350e 82
Arkadi 0:f65ba5fb350e 83 */
Arkadi 0:f65ba5fb350e 84
Arkadi 0:f65ba5fb350e 85 ///////////////
Arkadi 0:f65ba5fb350e 86 // Libraries //
Arkadi 0:f65ba5fb350e 87 ///////////////
Arkadi 0:f65ba5fb350e 88 #include "mbed.h"
Arkadi 1:2b61ae8e6f94 89 #include "MbedJSONValue.h"
Arkadi 1:2b61ae8e6f94 90 //#include <string>
Arkadi 0:f65ba5fb350e 91
Arkadi 0:f65ba5fb350e 92 ///////////////
Arkadi 0:f65ba5fb350e 93 // #defines //
Arkadi 0:f65ba5fb350e 94 ///////////////
Arkadi 0:f65ba5fb350e 95
Arkadi 0:f65ba5fb350e 96 #define DEBUG_MOD1
Arkadi 1:2b61ae8e6f94 97 #define MSG_BUFFER_SIZE 512
Arkadi 1:2b61ae8e6f94 98 #define HEADER_SIZE 5
Arkadi 1:2b61ae8e6f94 99 #define FOOTER_SIZE 2
Arkadi 0:f65ba5fb350e 100 /////////////
Arkadi 0:f65ba5fb350e 101 // Objects //
Arkadi 0:f65ba5fb350e 102 /////////////
Arkadi 0:f65ba5fb350e 103
Arkadi 0:f65ba5fb350e 104 // uart
Arkadi 1:2b61ae8e6f94 105 Serial pc(USBTX, USBRX);
Arkadi 0:f65ba5fb350e 106
Arkadi 0:f65ba5fb350e 107 // digital input
Arkadi 0:f65ba5fb350e 108 DigitalIn user_button(PC_13);
Arkadi 0:f65ba5fb350e 109
Arkadi 0:f65ba5fb350e 110 // digital output
Arkadi 0:f65ba5fb350e 111 DigitalOut led(PA_5);
Arkadi 0:f65ba5fb350e 112 DigitalOut sw_trigger(PA_10);
Arkadi 0:f65ba5fb350e 113
Arkadi 0:f65ba5fb350e 114 // MUX: CD74HC4067
Arkadi 0:f65ba5fb350e 115 DigitalOut mux_s0(PC_12);
Arkadi 0:f65ba5fb350e 116 DigitalOut mux_s1(PD_2);
Arkadi 0:f65ba5fb350e 117 DigitalOut mux_s2(PH_0);
Arkadi 0:f65ba5fb350e 118 DigitalOut mux_s3(PH_1);
Arkadi 0:f65ba5fb350e 119
Arkadi 0:f65ba5fb350e 120 // speaker switch
Arkadi 0:f65ba5fb350e 121 DigitalOut en_spk_1(PB_2);
Arkadi 0:f65ba5fb350e 122 DigitalOut en_spk_2(PB_1);
Arkadi 0:f65ba5fb350e 123 DigitalOut en_spk_3(PB_15);
Arkadi 0:f65ba5fb350e 124 DigitalOut en_spk_4(PB_14);
Arkadi 0:f65ba5fb350e 125 DigitalOut en_spk_5(PB_13);
Arkadi 0:f65ba5fb350e 126
Arkadi 0:f65ba5fb350e 127 // MIC interrupts
Arkadi 0:f65ba5fb350e 128 DigitalOut inter_1(PC_15);
Arkadi 0:f65ba5fb350e 129 DigitalOut inter_2(PC_14);
Arkadi 0:f65ba5fb350e 130 DigitalOut inter_3(PA_15);
Arkadi 0:f65ba5fb350e 131 DigitalOut inter_4(PA_14);
Arkadi 0:f65ba5fb350e 132 DigitalOut inter_5(PA_13);
Arkadi 0:f65ba5fb350e 133
Arkadi 0:f65ba5fb350e 134 // analog input
Arkadi 0:f65ba5fb350e 135 AnalogIn a_data_1(PA_0);
Arkadi 0:f65ba5fb350e 136 AnalogIn a_data_2(PA_1);
Arkadi 0:f65ba5fb350e 137 AnalogIn a_data_3(PA_4);
Arkadi 0:f65ba5fb350e 138 AnalogIn a_data_4(PB_0);
Arkadi 0:f65ba5fb350e 139 AnalogIn a_data_5(PC_1);
Arkadi 0:f65ba5fb350e 140
Arkadi 0:f65ba5fb350e 141 ///////////////
Arkadi 0:f65ba5fb350e 142 // variables //
Arkadi 0:f65ba5fb350e 143 ///////////////
Arkadi 1:2b61ae8e6f94 144 // analog input from microphone
Arkadi 1:2b61ae8e6f94 145 uint16_t micAData[5]= {0};
Arkadi 0:f65ba5fb350e 146
Arkadi 1:2b61ae8e6f94 147 // json buffer
Arkadi 1:2b61ae8e6f94 148 char json[MSG_BUFFER_SIZE];
Arkadi 1:2b61ae8e6f94 149
Arkadi 1:2b61ae8e6f94 150 // packet variables
Arkadi 1:2b61ae8e6f94 151 struct packetMSG_struct {
Arkadi 1:2b61ae8e6f94 152 // recieve message variables
Arkadi 1:2b61ae8e6f94 153 uint8_t header[HEADER_SIZE];
Arkadi 1:2b61ae8e6f94 154 uint8_t footer[FOOTER_SIZE];
Arkadi 1:2b61ae8e6f94 155 uint8_t syncIndex; // sync index for header / footer
Arkadi 1:2b61ae8e6f94 156 uint8_t syncFlag; // 0 - waiting for header, 1 - waiting for footer, 2 - verify footer, 3 - finish footer send to parser, flash buffer
Arkadi 1:2b61ae8e6f94 157 // buffer
Arkadi 1:2b61ae8e6f94 158 uint16_t bufferIndex; // buffer index
Arkadi 1:2b61ae8e6f94 159 uint8_t buffer[MSG_BUFFER_SIZE];
Arkadi 1:2b61ae8e6f94 160 } ;
Arkadi 1:2b61ae8e6f94 161 packetMSG_struct packetMSG;
Arkadi 1:2b61ae8e6f94 162
Arkadi 0:f65ba5fb350e 163
Arkadi 0:f65ba5fb350e 164 ///////////////
Arkadi 0:f65ba5fb350e 165 // Functions //
Arkadi 0:f65ba5fb350e 166 ///////////////
Arkadi 0:f65ba5fb350e 167
Arkadi 1:2b61ae8e6f94 168 // Serial Event function
Arkadi 1:2b61ae8e6f94 169 void rxCallback(void);
Arkadi 1:2b61ae8e6f94 170
Arkadi 1:2b61ae8e6f94 171 // initialize packet struct
Arkadi 1:2b61ae8e6f94 172 void initPacket(void);
Arkadi 1:2b61ae8e6f94 173
Arkadi 1:2b61ae8e6f94 174 // Packet Parser
Arkadi 1:2b61ae8e6f94 175 void parsePacket(void);
Arkadi 1:2b61ae8e6f94 176
Arkadi 1:2b61ae8e6f94 177 // initialize switch
Arkadi 1:2b61ae8e6f94 178 void initSwitch(void);
Arkadi 0:f65ba5fb350e 179 ////////////////////////
Arkadi 0:f65ba5fb350e 180 // Main Code Setup : //
Arkadi 0:f65ba5fb350e 181 ////////////////////////
Arkadi 0:f65ba5fb350e 182 int main()
Arkadi 0:f65ba5fb350e 183 {
Arkadi 1:2b61ae8e6f94 184 // init packet:
Arkadi 1:2b61ae8e6f94 185 initPacket();
Arkadi 1:2b61ae8e6f94 186 // init uart
Arkadi 0:f65ba5fb350e 187 pc.baud(57600);
Arkadi 1:2b61ae8e6f94 188 // attach serial event interrupt
Arkadi 1:2b61ae8e6f94 189 pc.attach(&rxCallback, Serial::RxIrq);
Arkadi 1:2b61ae8e6f94 190
Arkadi 1:2b61ae8e6f94 191 // initialize switch
Arkadi 1:2b61ae8e6f94 192 initSwitch();
Arkadi 0:f65ba5fb350e 193 #ifdef DEBUG_MOD1
Arkadi 0:f65ba5fb350e 194 pc.printf("ReSpeaker Test \r\n");
Arkadi 0:f65ba5fb350e 195 #endif
Arkadi 0:f65ba5fb350e 196 ///////////////////////
Arkadi 0:f65ba5fb350e 197 // Main Code Loop : //
Arkadi 0:f65ba5fb350e 198 ///////////////////////
Arkadi 1:2b61ae8e6f94 199 while(0) {
Arkadi 1:2b61ae8e6f94 200 if(1) {
Arkadi 1:2b61ae8e6f94 201 micAData[0] = a_data_1.read_u16();
Arkadi 1:2b61ae8e6f94 202 micAData[1] = a_data_2.read_u16();
Arkadi 1:2b61ae8e6f94 203 micAData[2] = a_data_3.read_u16();
Arkadi 1:2b61ae8e6f94 204 micAData[3] = a_data_4.read_u16();
Arkadi 1:2b61ae8e6f94 205 micAData[4] = a_data_5.read_u16();
Arkadi 1:2b61ae8e6f94 206 pc.printf("Data:%d,%d,%d,%d,%d\r\n",micAData[0],micAData[1],micAData[2],micAData[3],micAData[4]);
Arkadi 1:2b61ae8e6f94 207 wait(1);
Arkadi 1:2b61ae8e6f94 208 }
Arkadi 0:f65ba5fb350e 209
Arkadi 0:f65ba5fb350e 210 }// end main loop
Arkadi 0:f65ba5fb350e 211 }// end main
Arkadi 0:f65ba5fb350e 212 ///////////////
Arkadi 0:f65ba5fb350e 213 // Functions //
Arkadi 0:f65ba5fb350e 214 ///////////////
Arkadi 1:2b61ae8e6f94 215
Arkadi 1:2b61ae8e6f94 216 // initialize switch
Arkadi 1:2b61ae8e6f94 217 void initSwitch(void)
Arkadi 1:2b61ae8e6f94 218 {
Arkadi 1:2b61ae8e6f94 219 // attach serial event interrupt
Arkadi 1:2b61ae8e6f94 220 pc.attach(&rxCallback, Serial::RxIrq);
Arkadi 1:2b61ae8e6f94 221 // reset output / input
Arkadi 1:2b61ae8e6f94 222 mux_s0.write(0);
Arkadi 1:2b61ae8e6f94 223 mux_s1.write(0);
Arkadi 1:2b61ae8e6f94 224 mux_s2.write(0);
Arkadi 1:2b61ae8e6f94 225 mux_s3.write(0);
Arkadi 1:2b61ae8e6f94 226 en_spk_1.write(0);
Arkadi 1:2b61ae8e6f94 227 en_spk_2.write(0);
Arkadi 1:2b61ae8e6f94 228 en_spk_3.write(0);
Arkadi 1:2b61ae8e6f94 229 en_spk_4.write(0);
Arkadi 1:2b61ae8e6f94 230 en_spk_5.write(0);
Arkadi 1:2b61ae8e6f94 231 }// end init switch
Arkadi 1:2b61ae8e6f94 232
Arkadi 1:2b61ae8e6f94 233
Arkadi 1:2b61ae8e6f94 234 // Serial Event function
Arkadi 1:2b61ae8e6f94 235 void rxCallback(void)
Arkadi 1:2b61ae8e6f94 236 {
Arkadi 1:2b61ae8e6f94 237 while (pc.readable()) {
Arkadi 1:2b61ae8e6f94 238 // read icoming
Arkadi 1:2b61ae8e6f94 239 //led = !led;
Arkadi 1:2b61ae8e6f94 240 uint8_t in_byte = pc.getc();
Arkadi 1:2b61ae8e6f94 241 #ifdef DEBUG_MOD1
Arkadi 1:2b61ae8e6f94 242 pc.putc(in_byte);
Arkadi 1:2b61ae8e6f94 243 #endif
Arkadi 1:2b61ae8e6f94 244 // detect start message , end message
Arkadi 1:2b61ae8e6f94 245 switch (packetMSG.syncFlag) {
Arkadi 1:2b61ae8e6f94 246 // waiting for header
Arkadi 1:2b61ae8e6f94 247 case 0: {
Arkadi 1:2b61ae8e6f94 248 if (packetMSG.header[packetMSG.syncIndex] == in_byte) {
Arkadi 1:2b61ae8e6f94 249 packetMSG.syncIndex++;
Arkadi 1:2b61ae8e6f94 250 if (packetMSG.syncIndex == HEADER_SIZE) { // finish header SYNC
Arkadi 1:2b61ae8e6f94 251 packetMSG.syncFlag = 1; // start collecting data, wait for footer
Arkadi 1:2b61ae8e6f94 252 packetMSG.bufferIndex = 0;
Arkadi 1:2b61ae8e6f94 253 packetMSG.syncIndex=0;
Arkadi 1:2b61ae8e6f94 254 }
Arkadi 1:2b61ae8e6f94 255 } else { // reinit sync
Arkadi 1:2b61ae8e6f94 256 packetMSG.syncIndex=0;
Arkadi 1:2b61ae8e6f94 257 }
Arkadi 1:2b61ae8e6f94 258 //pc.printf("case 0 , %d \r\n",packetMSG.syncIndex);
Arkadi 1:2b61ae8e6f94 259 break;
Arkadi 1:2b61ae8e6f94 260 }
Arkadi 1:2b61ae8e6f94 261 // waiting for footer
Arkadi 1:2b61ae8e6f94 262 case 1: {
Arkadi 1:2b61ae8e6f94 263 // add byte to buffer
Arkadi 1:2b61ae8e6f94 264 packetMSG.buffer[packetMSG.bufferIndex] = in_byte;
Arkadi 1:2b61ae8e6f94 265 packetMSG.bufferIndex++;
Arkadi 1:2b61ae8e6f94 266 if (packetMSG.bufferIndex >= MSG_BUFFER_SIZE) { // buffer overflow
Arkadi 1:2b61ae8e6f94 267 // reset buffer
Arkadi 1:2b61ae8e6f94 268 packetMSG.bufferIndex = 0;
Arkadi 1:2b61ae8e6f94 269 packetMSG.syncIndex = 0;
Arkadi 1:2b61ae8e6f94 270 packetMSG.syncFlag = 0;
Arkadi 1:2b61ae8e6f94 271 } else if (packetMSG.footer[packetMSG.syncIndex] == in_byte) { // footer char recieved
Arkadi 1:2b61ae8e6f94 272 packetMSG.syncIndex++;
Arkadi 1:2b61ae8e6f94 273 packetMSG.syncFlag=2; // move to verify footer
Arkadi 1:2b61ae8e6f94 274 }
Arkadi 1:2b61ae8e6f94 275 //pc.printf("case 2 , %d \r\n",packetMSG.syncIndex);
Arkadi 1:2b61ae8e6f94 276 break;
Arkadi 1:2b61ae8e6f94 277 }
Arkadi 1:2b61ae8e6f94 278 // verify footer
Arkadi 1:2b61ae8e6f94 279 case 2: {
Arkadi 1:2b61ae8e6f94 280 // add byte to buffer
Arkadi 1:2b61ae8e6f94 281 packetMSG.buffer[packetMSG.bufferIndex] = in_byte;
Arkadi 1:2b61ae8e6f94 282 packetMSG.bufferIndex++;
Arkadi 1:2b61ae8e6f94 283 if (packetMSG.bufferIndex >= MSG_BUFFER_SIZE) { // buffer overflow
Arkadi 1:2b61ae8e6f94 284 // reset buffer
Arkadi 1:2b61ae8e6f94 285 packetMSG.bufferIndex = 0;
Arkadi 1:2b61ae8e6f94 286 packetMSG.syncIndex = 0;
Arkadi 1:2b61ae8e6f94 287 packetMSG.syncFlag = 0;
Arkadi 1:2b61ae8e6f94 288 } else if (packetMSG.footer[packetMSG.syncIndex] == in_byte) { // footer char recieved
Arkadi 1:2b61ae8e6f94 289 packetMSG.syncIndex++;
Arkadi 1:2b61ae8e6f94 290 if (packetMSG.syncIndex == FOOTER_SIZE) { // finish footer SYNC
Arkadi 1:2b61ae8e6f94 291 packetMSG.syncFlag = 3;
Arkadi 1:2b61ae8e6f94 292 // copy packet to json buffer
Arkadi 1:2b61ae8e6f94 293 memcpy (&json, &packetMSG.buffer, packetMSG.bufferIndex);
Arkadi 1:2b61ae8e6f94 294 json[packetMSG.bufferIndex]=NULL; // end with NULL to indicate end of string
Arkadi 1:2b61ae8e6f94 295 // copy packet to json buffer with sprintf
Arkadi 1:2b61ae8e6f94 296 //sprintf(json, "%.*s", packetMSG.bufferIndex, packetMSG.buffer );
Arkadi 1:2b61ae8e6f94 297 // send msg to parse.
Arkadi 1:2b61ae8e6f94 298 parsePacket();
Arkadi 1:2b61ae8e6f94 299 // reset buffer
Arkadi 1:2b61ae8e6f94 300 packetMSG.bufferIndex = 0;
Arkadi 1:2b61ae8e6f94 301 packetMSG.syncIndex = 0;
Arkadi 1:2b61ae8e6f94 302 packetMSG.syncFlag = 0;
Arkadi 1:2b61ae8e6f94 303 }
Arkadi 1:2b61ae8e6f94 304 } else { // footer broke restart wait for footer
Arkadi 1:2b61ae8e6f94 305 packetMSG.syncFlag=1;
Arkadi 1:2b61ae8e6f94 306 // verify that it didnt broke on first footer char
Arkadi 1:2b61ae8e6f94 307 if (packetMSG.footer[0] == in_byte) {
Arkadi 1:2b61ae8e6f94 308 packetMSG.syncIndex=1;
Arkadi 1:2b61ae8e6f94 309 } else {
Arkadi 1:2b61ae8e6f94 310 packetMSG.syncIndex=0;
Arkadi 1:2b61ae8e6f94 311 }
Arkadi 1:2b61ae8e6f94 312 }
Arkadi 1:2b61ae8e6f94 313 break;
Arkadi 1:2b61ae8e6f94 314 }
Arkadi 1:2b61ae8e6f94 315 default: {
Arkadi 1:2b61ae8e6f94 316 pc.printf("Sonmething went wrong \r\n");
Arkadi 1:2b61ae8e6f94 317 break;
Arkadi 1:2b61ae8e6f94 318 }
Arkadi 1:2b61ae8e6f94 319 } // end switch
Arkadi 1:2b61ae8e6f94 320 }// end uart readable
Arkadi 1:2b61ae8e6f94 321 } // end rxCallback
Arkadi 1:2b61ae8e6f94 322
Arkadi 1:2b61ae8e6f94 323
Arkadi 1:2b61ae8e6f94 324 // initialize packet struct
Arkadi 1:2b61ae8e6f94 325 void initPacket(void)
Arkadi 1:2b61ae8e6f94 326 {
Arkadi 1:2b61ae8e6f94 327 // init variables to default:
Arkadi 1:2b61ae8e6f94 328 packetMSG.header[0] = 'j';
Arkadi 1:2b61ae8e6f94 329 packetMSG.header[1] = 's';
Arkadi 1:2b61ae8e6f94 330 packetMSG.header[2] = 'o';
Arkadi 1:2b61ae8e6f94 331 packetMSG.header[3] = 'n';
Arkadi 1:2b61ae8e6f94 332 packetMSG.header[4] = ':';
Arkadi 1:2b61ae8e6f94 333
Arkadi 1:2b61ae8e6f94 334 packetMSG.footer[0]= 13; // /r
Arkadi 1:2b61ae8e6f94 335 packetMSG.footer[1]= 10; // /n
Arkadi 1:2b61ae8e6f94 336
Arkadi 1:2b61ae8e6f94 337 packetMSG.syncIndex=0; // sync index for header / footer
Arkadi 1:2b61ae8e6f94 338 packetMSG.syncFlag=0; // 0 - waiting for header, 1 - waiting for footer, 2 - verify footer, 3 - finish footer send to parser, flash buffer
Arkadi 1:2b61ae8e6f94 339 packetMSG.bufferIndex=0; // buffer index
Arkadi 1:2b61ae8e6f94 340 }
Arkadi 1:2b61ae8e6f94 341
Arkadi 1:2b61ae8e6f94 342 // Packet Parser
Arkadi 1:2b61ae8e6f94 343 void parsePacket(void)
Arkadi 1:2b61ae8e6f94 344 {
Arkadi 1:2b61ae8e6f94 345 static int micChannle = 0;
Arkadi 1:2b61ae8e6f94 346 static bool spkChannle[5]= {0};
Arkadi 1:2b61ae8e6f94 347 #ifdef DEBUG_MOD1
Arkadi 1:2b61ae8e6f94 348 // write buffer to screen
Arkadi 1:2b61ae8e6f94 349 //pc.printf("%d, %.*s", packetMSG.bufferIndex ,packetMSG.bufferIndex, packetMSG.buffer );
Arkadi 1:2b61ae8e6f94 350 //pc.printf("%s", json);
Arkadi 1:2b61ae8e6f94 351 #endif
Arkadi 1:2b61ae8e6f94 352
Arkadi 1:2b61ae8e6f94 353 MbedJSONValue guiCmd;
Arkadi 1:2b61ae8e6f94 354
Arkadi 1:2b61ae8e6f94 355 //const char * json = "{\"my_array\": [\"demo_string\", 10], \"my_boolean\": true}";
Arkadi 1:2b61ae8e6f94 356 // json:{"my_array": ["demo_string", 10], "my_boolean": true}
Arkadi 1:2b61ae8e6f94 357 //parse the previous string and fill the object demo
Arkadi 1:2b61ae8e6f94 358
Arkadi 1:2b61ae8e6f94 359 // GUI message format: {"mic":0, "spk": [0,1,0,0,0]}
Arkadi 1:2b61ae8e6f94 360 parse(guiCmd, json);
Arkadi 1:2b61ae8e6f94 361
Arkadi 1:2b61ae8e6f94 362 micChannle = guiCmd["mic"].get<int>();
Arkadi 1:2b61ae8e6f94 363 for (int ii=0 ; ii < 5 ; ii++) {
Arkadi 1:2b61ae8e6f94 364 spkChannle[ii] = guiCmd["spk"][ii].get<bool>();
Arkadi 1:2b61ae8e6f94 365 }
Arkadi 1:2b61ae8e6f94 366
Arkadi 1:2b61ae8e6f94 367 #ifdef DEBUG_MOD1
Arkadi 1:2b61ae8e6f94 368 // send parsed values
Arkadi 1:2b61ae8e6f94 369 printf("mic: %d , spk: [%d,%d,%d,%d,%d]\r\n", micChannle,spkChannle[0],spkChannle[1],spkChannle[2],spkChannle[3],spkChannle[4]);
Arkadi 1:2b61ae8e6f94 370 #endif
Arkadi 1:2b61ae8e6f94 371
Arkadi 1:2b61ae8e6f94 372
Arkadi 1:2b61ae8e6f94 373 // update hardware
Arkadi 1:2b61ae8e6f94 374
Arkadi 1:2b61ae8e6f94 375 // update mic select mux
Arkadi 1:2b61ae8e6f94 376 uint8_t micByte = (uint8_t) micChannle;
Arkadi 1:2b61ae8e6f94 377 mux_s0.write((bool)(micByte & 0b00000001));
Arkadi 1:2b61ae8e6f94 378 mux_s1.write((bool)(micByte & 0b00000010));
Arkadi 1:2b61ae8e6f94 379 mux_s2.write((bool)(micByte & 0b00000100));
Arkadi 1:2b61ae8e6f94 380 mux_s3.write((bool)(micByte & 0b00001000));
Arkadi 1:2b61ae8e6f94 381
Arkadi 1:2b61ae8e6f94 382 // update speakers:
Arkadi 1:2b61ae8e6f94 383 en_spk_1.write(spkChannle[0]);
Arkadi 1:2b61ae8e6f94 384 en_spk_2.write(spkChannle[1]);
Arkadi 1:2b61ae8e6f94 385 en_spk_3.write(spkChannle[2]);
Arkadi 1:2b61ae8e6f94 386 en_spk_4.write(spkChannle[3]);
Arkadi 1:2b61ae8e6f94 387 en_spk_5.write(spkChannle[4]);
Arkadi 1:2b61ae8e6f94 388
Arkadi 1:2b61ae8e6f94 389 // led blink
Arkadi 1:2b61ae8e6f94 390 led = !led;
Arkadi 1:2b61ae8e6f94 391 }// end parse
Arkadi 1:2b61ae8e6f94 392
Arkadi 1:2b61ae8e6f94 393
Arkadi 1:2b61ae8e6f94 394
Arkadi 1:2b61ae8e6f94 395 //// Serial Event function simple byte parser
Arkadi 1:2b61ae8e6f94 396 //void rxCallback(void)
Arkadi 1:2b61ae8e6f94 397 //{
Arkadi 1:2b61ae8e6f94 398 // // incoming buffer
Arkadi 1:2b61ae8e6f94 399 // uint8_t in_byte;
Arkadi 1:2b61ae8e6f94 400 // // read icoming
Arkadi 1:2b61ae8e6f94 401 // led = !led;
Arkadi 1:2b61ae8e6f94 402 // in_byte = pc.getc();
Arkadi 1:2b61ae8e6f94 403 //#ifdef DEBUG_MOD1
Arkadi 1:2b61ae8e6f94 404 // pc.putc(in_byte);
Arkadi 1:2b61ae8e6f94 405 //#endif
Arkadi 1:2b61ae8e6f94 406 // // check if command of input or output
Arkadi 1:2b61ae8e6f94 407 // if ((bool)(in_byte & 0b10000000)) { // set input
Arkadi 1:2b61ae8e6f94 408 // mux_s0.write((bool)(in_byte & 0b00000001));
Arkadi 1:2b61ae8e6f94 409 // mux_s1.write((bool)(in_byte & 0b00000010));
Arkadi 1:2b61ae8e6f94 410 // mux_s2.write((bool)(in_byte & 0b00000100));
Arkadi 1:2b61ae8e6f94 411 // mux_s3.write((bool)(in_byte & 0b00001000));
Arkadi 1:2b61ae8e6f94 412 // } else { // set output
Arkadi 1:2b61ae8e6f94 413 // en_spk_1.write((bool)(in_byte & 0b00000001));
Arkadi 1:2b61ae8e6f94 414 // en_spk_2.write((bool)(in_byte & 0b00000010));
Arkadi 1:2b61ae8e6f94 415 // en_spk_3.write((bool)(in_byte & 0b00000100));
Arkadi 1:2b61ae8e6f94 416 // en_spk_4.write((bool)(in_byte & 0b00001000));
Arkadi 1:2b61ae8e6f94 417 // en_spk_5.write((bool)(in_byte & 0b00010000));
Arkadi 1:2b61ae8e6f94 418 // }
Arkadi 1:2b61ae8e6f94 419 //} // end rxCallback