Tau ReSpeaker Setup V01

Dependencies:   MbedJSONValue mbed

Fork of TAU_ReSpeaker_DSP_Test by Yossi_Students

Committer:
Arkadi
Date:
Mon Feb 19 11:50:39 2018 +0000
Revision:
3:48258b86e182
Parent:
2:59c1a24aed7c
Child:
4:59319802012b
added faster selected operation mode

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Arkadi 0:bfac05b2d50f 1 ////////////////////////////////////////
Arkadi 1:574b54755983 2 // Tau_ReSpeaker_DSP V01 //
Arkadi 1:574b54755983 3 // Arkadiraf@gmail.com - 11/02/2018 //
Arkadi 0:bfac05b2d50f 4 ////////////////////////////////////////
Arkadi 0:bfac05b2d50f 5 /*
Arkadi 2:59c1a24aed7c 6 Json Format: json:{"name":"dsp","filter":"none","mode":"off"}\r\n
Arkadi 2:59c1a24aed7c 7 */
Arkadi 1:574b54755983 8
Arkadi 3:48258b86e182 9
Arkadi 0:bfac05b2d50f 10
Arkadi 0:bfac05b2d50f 11 /*
Arkadi 0:bfac05b2d50f 12 Board : Nucleo STM32F446RE
Arkadi 0:bfac05b2d50f 13 Power Source : USB
Arkadi 0:bfac05b2d50f 14 */
Arkadi 0:bfac05b2d50f 15
Arkadi 0:bfac05b2d50f 16 /*
Arkadi 0:bfac05b2d50f 17 Pinout:
Arkadi 0:bfac05b2d50f 18 PC - Serial 2
Arkadi 0:bfac05b2d50f 19 PA_2 (Tx) --> STLINK
Arkadi 0:bfac05b2d50f 20 PA_3 (Rx) --> STLINK
Arkadi 0:bfac05b2d50f 21
Arkadi 0:bfac05b2d50f 22 Switch - Serial 3
Arkadi 0:bfac05b2d50f 23 PC_10 (Tx) --> SW_Rx
Arkadi 0:bfac05b2d50f 24 PC_11 (Rx) --> SW_Tx
Arkadi 0:bfac05b2d50f 25
Arkadi 0:bfac05b2d50f 26 I2C_Bus
Arkadi 0:bfac05b2d50f 27 PB_8 --> SCL
Arkadi 0:bfac05b2d50f 28 PB_9 --> SDA
Arkadi 0:bfac05b2d50f 29
Arkadi 0:bfac05b2d50f 30 Digital output
Arkadi 0:bfac05b2d50f 31 PA_5 --> led (DigitalOut)
Arkadi 0:bfac05b2d50f 32
Arkadi 0:bfac05b2d50f 33 Digital Input
Arkadi 0:bfac05b2d50f 34 PA_10 --> SW_Trigger
Arkadi 0:bfac05b2d50f 35 PC_13 --> BTN (Blue)
Arkadi 0:bfac05b2d50f 36
Arkadi 1:574b54755983 37 PA_6 --> Toggle Pin (Loop Freq D12)
Arkadi 1:574b54755983 38
Arkadi 0:bfac05b2d50f 39 Analog Input
Arkadi 1:574b54755983 40 PA_0 --> SIG_IN_DSP (A0)
Arkadi 0:bfac05b2d50f 41
Arkadi 0:bfac05b2d50f 42 Analog Output
Arkadi 1:574b54755983 43 PA_4 --> SIG_OUT_DSP (A2)
Arkadi 0:bfac05b2d50f 44
Arkadi 0:bfac05b2d50f 45 */
Arkadi 0:bfac05b2d50f 46
Arkadi 0:bfac05b2d50f 47 ///////////////
Arkadi 0:bfac05b2d50f 48 // Libraries //
Arkadi 0:bfac05b2d50f 49 ///////////////
Arkadi 0:bfac05b2d50f 50 #include "mbed.h"
Arkadi 1:574b54755983 51 #include "MbedJSONValue.h"
Arkadi 0:bfac05b2d50f 52
Arkadi 0:bfac05b2d50f 53 ///////////////
Arkadi 0:bfac05b2d50f 54 // #defines //
Arkadi 0:bfac05b2d50f 55 ///////////////
Arkadi 1:574b54755983 56 // UART debug modes:
Arkadi 1:574b54755983 57 //#define DEBUG_MOD1 // json packet recognise
Arkadi 1:574b54755983 58 #define DEBUG_MOD2 // json parse
Arkadi 1:574b54755983 59 #define DEBUG_MOD3 // dsp handler
Arkadi 1:574b54755983 60 #define DEBUG_MOD10 // responsivity msges to gui
Arkadi 3:48258b86e182 61 #define DEBUG_MOD11 // loop frequency indicator
Arkadi 0:bfac05b2d50f 62
Arkadi 0:bfac05b2d50f 63 // Sine generator
Arkadi 1:574b54755983 64 #define PI_DOUBLE (3.141592653589793238462)
Arkadi 1:574b54755983 65 #define PI_FLOAT (3.14159f)
Arkadi 1:574b54755983 66
Arkadi 1:574b54755983 67 // json commad
Arkadi 1:574b54755983 68 #define MSG_BUFFER_SIZE 512
Arkadi 1:574b54755983 69 #define HEADER_SIZE 5
Arkadi 1:574b54755983 70 #define FOOTER_SIZE 2
Arkadi 0:bfac05b2d50f 71
Arkadi 0:bfac05b2d50f 72 /////////////
Arkadi 0:bfac05b2d50f 73 // Objects //
Arkadi 0:bfac05b2d50f 74 /////////////
Arkadi 1:574b54755983 75 // json
Arkadi 1:574b54755983 76 MbedJSONValue guiCmd;
Arkadi 0:bfac05b2d50f 77
Arkadi 0:bfac05b2d50f 78 // uart
Arkadi 1:574b54755983 79 Serial pc(USBTX, USBRX);
Arkadi 0:bfac05b2d50f 80
Arkadi 2:59c1a24aed7c 81 // uart switch_dsp
Arkadi 2:59c1a24aed7c 82 Serial switch_dsp(PC_10, PC_11);
Arkadi 2:59c1a24aed7c 83
Arkadi 0:bfac05b2d50f 84 // digital
Arkadi 0:bfac05b2d50f 85 DigitalIn user_button(PC_13);
Arkadi 0:bfac05b2d50f 86 DigitalIn sw_trigger(PA_10);
Arkadi 0:bfac05b2d50f 87 DigitalOut led(PA_5);
Arkadi 1:574b54755983 88 DigitalOut mytoggle(PA_6);
Arkadi 0:bfac05b2d50f 89
Arkadi 1:574b54755983 90 // analog / define to init at mbed initialization. work directly with registers
Arkadi 0:bfac05b2d50f 91 AnalogOut dsp_output(PA_4);
Arkadi 0:bfac05b2d50f 92 AnalogIn dsp_input(PA_0);
Arkadi 0:bfac05b2d50f 93
Arkadi 1:574b54755983 94
Arkadi 1:574b54755983 95 // ADC/DAC declarations
Arkadi 1:574b54755983 96 ADC_HandleTypeDef hadc1;
Arkadi 1:574b54755983 97 DAC_HandleTypeDef hdac1;
Arkadi 1:574b54755983 98
Arkadi 0:bfac05b2d50f 99 ///////////////
Arkadi 0:bfac05b2d50f 100 // variables //
Arkadi 0:bfac05b2d50f 101 ///////////////
Arkadi 0:bfac05b2d50f 102
Arkadi 1:574b54755983 103 // json buffer
Arkadi 1:574b54755983 104 char json[MSG_BUFFER_SIZE];
Arkadi 1:574b54755983 105
Arkadi 1:574b54755983 106 // packet variables
Arkadi 1:574b54755983 107 struct packetMSG_struct {
Arkadi 1:574b54755983 108 // recieve message variables
Arkadi 1:574b54755983 109 uint8_t header[HEADER_SIZE];
Arkadi 1:574b54755983 110 uint8_t footer[FOOTER_SIZE];
Arkadi 1:574b54755983 111 uint8_t syncIndex; // sync index for header / footer
Arkadi 1:574b54755983 112 uint8_t syncFlag; // 0 - waiting for header, 1 - waiting for footer, 2 - verify footer, 3 - finish footer send to parser, flash buffer
Arkadi 1:574b54755983 113 // buffer
Arkadi 1:574b54755983 114 uint16_t bufferIndex; // buffer index
Arkadi 1:574b54755983 115 uint8_t buffer[MSG_BUFFER_SIZE];
Arkadi 1:574b54755983 116 } ;
Arkadi 1:574b54755983 117 packetMSG_struct packetMSG;
Arkadi 1:574b54755983 118
Arkadi 1:574b54755983 119
Arkadi 1:574b54755983 120 // Dac Register for direct method of setting DAC value`s
Arkadi 1:574b54755983 121 __IO uint32_t Dac_Reg = 0;
Arkadi 1:574b54755983 122
Arkadi 0:bfac05b2d50f 123 // analog input
Arkadi 0:bfac05b2d50f 124 uint16_t adc_in=0;
Arkadi 0:bfac05b2d50f 125
Arkadi 1:574b54755983 126 // toogle pin state
Arkadi 1:574b54755983 127 bool toggelState=0;
Arkadi 1:574b54755983 128
Arkadi 1:574b54755983 129 // create function pointer
Arkadi 1:574b54755983 130 typedef void(*functionPtr)(void);
Arkadi 1:574b54755983 131 functionPtr FilterFunction;
Arkadi 1:574b54755983 132
Arkadi 3:48258b86e182 133 // alternative functuin selection (faster mcu process)
Arkadi 3:48258b86e182 134 uint8_t operationMode = 0;
Arkadi 3:48258b86e182 135 // 0 - no filter
Arkadi 3:48258b86e182 136 // 1 - High Pass filter
Arkadi 3:48258b86e182 137
Arkadi 0:bfac05b2d50f 138 ///////////////
Arkadi 0:bfac05b2d50f 139 // Functions //
Arkadi 0:bfac05b2d50f 140 ///////////////
Arkadi 0:bfac05b2d50f 141
Arkadi 1:574b54755983 142 // init functions header //hadc1 needs to be defined preiod #incude
Arkadi 1:574b54755983 143 #include "adc_init.h" // initialize adc/dac directly for continious sample
Arkadi 1:574b54755983 144 #include "filters.h"
Arkadi 1:574b54755983 145
Arkadi 1:574b54755983 146 // nop operation
Arkadi 1:574b54755983 147 inline void NOP()
Arkadi 1:574b54755983 148 {
Arkadi 1:574b54755983 149 __ASM volatile ("nop"); // one tick operation, Use to adjust frequency by slowing down the proccess
Arkadi 1:574b54755983 150 }
Arkadi 1:574b54755983 151
Arkadi 1:574b54755983 152 // Serial Event function
Arkadi 1:574b54755983 153 void rxCallback(void);
Arkadi 1:574b54755983 154
Arkadi 1:574b54755983 155 // initialize packet struct
Arkadi 1:574b54755983 156 void initPacket(void);
Arkadi 1:574b54755983 157
Arkadi 1:574b54755983 158 // Packet Parser
Arkadi 1:574b54755983 159 void parsePacket(void);
Arkadi 1:574b54755983 160
Arkadi 1:574b54755983 161 // DSP Packet Handler
Arkadi 1:574b54755983 162 void dspPacket(void);
Arkadi 1:574b54755983 163
Arkadi 1:574b54755983 164 // initialize DSP
Arkadi 1:574b54755983 165 void initDSP(void);
Arkadi 0:bfac05b2d50f 166
Arkadi 0:bfac05b2d50f 167 ////////////////////////
Arkadi 0:bfac05b2d50f 168 // Main Code Setup : //
Arkadi 0:bfac05b2d50f 169 ////////////////////////
Arkadi 0:bfac05b2d50f 170 int main()
Arkadi 0:bfac05b2d50f 171 {
Arkadi 1:574b54755983 172 // init packet:
Arkadi 1:574b54755983 173 initPacket();
Arkadi 1:574b54755983 174
Arkadi 1:574b54755983 175 // initialize DSP
Arkadi 1:574b54755983 176 initDSP();
Arkadi 1:574b54755983 177
Arkadi 0:bfac05b2d50f 178 pc.baud(57600);
Arkadi 2:59c1a24aed7c 179 switch_dsp.baud(57600);
Arkadi 2:59c1a24aed7c 180
Arkadi 2:59c1a24aed7c 181
Arkadi 2:59c1a24aed7c 182 // pc is used for debbuging, in application mode the commands are from the switch_dsp.
Arkadi 1:574b54755983 183 // attach serial event interrupt
Arkadi 1:574b54755983 184 pc.attach(&rxCallback, Serial::RxIrq);
Arkadi 2:59c1a24aed7c 185
Arkadi 2:59c1a24aed7c 186 // attach serial event interrupt
Arkadi 2:59c1a24aed7c 187 switch_dsp.attach(&rxCallback, Serial::RxIrq);
Arkadi 2:59c1a24aed7c 188
Arkadi 0:bfac05b2d50f 189 #ifdef DEBUG_MOD1
Arkadi 0:bfac05b2d50f 190 pc.printf("ReSpeaker Test \r\n");
Arkadi 0:bfac05b2d50f 191 #endif
Arkadi 0:bfac05b2d50f 192
Arkadi 0:bfac05b2d50f 193 ///////////////////////
Arkadi 0:bfac05b2d50f 194 // Main Code Loop : //
Arkadi 0:bfac05b2d50f 195 ///////////////////////
Arkadi 0:bfac05b2d50f 196 while(1) {
Arkadi 1:574b54755983 197 // run selected filter
Arkadi 3:48258b86e182 198 if (operationMode == 0) {
Arkadi 3:48258b86e182 199 no_filter();
Arkadi 3:48258b86e182 200 } else if (operationMode == 1) {
Arkadi 3:48258b86e182 201 highpass_filter();
Arkadi 3:48258b86e182 202 //pc.printf("Mode: %d \r\n", operationMode);
Arkadi 3:48258b86e182 203 //wait(0.1);
Arkadi 3:48258b86e182 204 }
Arkadi 3:48258b86e182 205 // more elegant but much slower option:
Arkadi 3:48258b86e182 206 //FilterFunction();
Arkadi 1:574b54755983 207 #ifdef DEBUG_MOD11
Arkadi 1:574b54755983 208 // toggle pin, Loop frequency indicator
Arkadi 1:574b54755983 209 toggelState=!toggelState;
Arkadi 1:574b54755983 210 mytoggle.write(toggelState);
Arkadi 1:574b54755983 211 #endif
Arkadi 3:48258b86e182 212 } // end loop
Arkadi 3:48258b86e182 213 } // end main
Arkadi 0:bfac05b2d50f 214
Arkadi 0:bfac05b2d50f 215 ///////////////
Arkadi 0:bfac05b2d50f 216 // Functions //
Arkadi 0:bfac05b2d50f 217 ///////////////
Arkadi 0:bfac05b2d50f 218
Arkadi 1:574b54755983 219 // initialize DSP
Arkadi 1:574b54755983 220 void initDSP(void)
Arkadi 1:574b54755983 221 {
Arkadi 1:574b54755983 222 // init dac
Arkadi 1:574b54755983 223 ADC1_Init();
Arkadi 1:574b54755983 224 DAC1_Init();
Arkadi 1:574b54755983 225
Arkadi 1:574b54755983 226 HAL_ADC_Start(&hadc1);
Arkadi 1:574b54755983 227 HAL_DAC_Start(&hdac1, DAC_CHANNEL_1);
Arkadi 1:574b54755983 228
Arkadi 1:574b54755983 229 // define Dac Register for direct method of setting DAC value`s
Arkadi 1:574b54755983 230 Dac_Reg = (uint32_t) (hdac1.Instance);
Arkadi 1:574b54755983 231 Dac_Reg += __HAL_DHR12R1_ALIGNEMENT(DAC_ALIGN_12B_R);
Arkadi 1:574b54755983 232
Arkadi 1:574b54755983 233 // intialize filter function pointer
Arkadi 3:48258b86e182 234 FilterFunction = no_filter;//highpass_filter;//no_filter;
Arkadi 3:48258b86e182 235 operationMode = 0 ;
Arkadi 1:574b54755983 236 }
Arkadi 1:574b54755983 237
Arkadi 1:574b54755983 238 // Serial Event function
Arkadi 1:574b54755983 239 void rxCallback(void)
Arkadi 0:bfac05b2d50f 240 {
Arkadi 2:59c1a24aed7c 241 while ((pc.readable()) || (switch_dsp.readable())) {
Arkadi 1:574b54755983 242 // read icoming
Arkadi 2:59c1a24aed7c 243 uint8_t in_byte=0;
Arkadi 1:574b54755983 244 //led = !led;
Arkadi 2:59c1a24aed7c 245 if (pc.readable()) {
Arkadi 2:59c1a24aed7c 246 in_byte = pc.getc();
Arkadi 2:59c1a24aed7c 247 } else if (switch_dsp.readable()) {
Arkadi 2:59c1a24aed7c 248 in_byte = switch_dsp.getc();
Arkadi 2:59c1a24aed7c 249 }
Arkadi 1:574b54755983 250 #ifdef DEBUG_MOD1
Arkadi 1:574b54755983 251 pc.putc(in_byte);
Arkadi 1:574b54755983 252 #endif
Arkadi 1:574b54755983 253 // detect start message , end message
Arkadi 1:574b54755983 254 switch (packetMSG.syncFlag) {
Arkadi 1:574b54755983 255 // waiting for header
Arkadi 1:574b54755983 256 case 0: {
Arkadi 1:574b54755983 257 if (packetMSG.header[packetMSG.syncIndex] == in_byte) {
Arkadi 1:574b54755983 258 packetMSG.syncIndex++;
Arkadi 1:574b54755983 259 if (packetMSG.syncIndex == HEADER_SIZE) { // finish header SYNC
Arkadi 1:574b54755983 260 packetMSG.syncFlag = 1; // start collecting data, wait for footer
Arkadi 1:574b54755983 261 packetMSG.bufferIndex = 0;
Arkadi 1:574b54755983 262 packetMSG.syncIndex=0;
Arkadi 1:574b54755983 263 }
Arkadi 1:574b54755983 264 } else { // reinit sync
Arkadi 1:574b54755983 265 packetMSG.syncIndex=0;
Arkadi 1:574b54755983 266 }
Arkadi 1:574b54755983 267 //pc.printf("case 0 , %d \r\n",packetMSG.syncIndex);
Arkadi 1:574b54755983 268 break;
Arkadi 1:574b54755983 269 }
Arkadi 1:574b54755983 270 // waiting for footer
Arkadi 1:574b54755983 271 case 1: {
Arkadi 1:574b54755983 272 // add byte to buffer
Arkadi 1:574b54755983 273 packetMSG.buffer[packetMSG.bufferIndex] = in_byte;
Arkadi 1:574b54755983 274 packetMSG.bufferIndex++;
Arkadi 1:574b54755983 275 if (packetMSG.bufferIndex >= MSG_BUFFER_SIZE) { // buffer overflow
Arkadi 1:574b54755983 276 // reset buffer
Arkadi 1:574b54755983 277 packetMSG.bufferIndex = 0;
Arkadi 1:574b54755983 278 packetMSG.syncIndex = 0;
Arkadi 1:574b54755983 279 packetMSG.syncFlag = 0;
Arkadi 1:574b54755983 280 } else if (packetMSG.footer[packetMSG.syncIndex] == in_byte) { // footer char recieved
Arkadi 1:574b54755983 281 packetMSG.syncIndex++;
Arkadi 1:574b54755983 282 packetMSG.syncFlag=2; // move to verify footer
Arkadi 1:574b54755983 283 }
Arkadi 1:574b54755983 284 //pc.printf("case 2 , %d \r\n",packetMSG.syncIndex);
Arkadi 1:574b54755983 285 break;
Arkadi 1:574b54755983 286 }
Arkadi 1:574b54755983 287 // verify footer
Arkadi 1:574b54755983 288 case 2: {
Arkadi 1:574b54755983 289 // add byte to buffer
Arkadi 1:574b54755983 290 packetMSG.buffer[packetMSG.bufferIndex] = in_byte;
Arkadi 1:574b54755983 291 packetMSG.bufferIndex++;
Arkadi 1:574b54755983 292 if (packetMSG.bufferIndex >= MSG_BUFFER_SIZE) { // buffer overflow
Arkadi 1:574b54755983 293 // reset buffer
Arkadi 1:574b54755983 294 packetMSG.bufferIndex = 0;
Arkadi 1:574b54755983 295 packetMSG.syncIndex = 0;
Arkadi 1:574b54755983 296 packetMSG.syncFlag = 0;
Arkadi 1:574b54755983 297 } else if (packetMSG.footer[packetMSG.syncIndex] == in_byte) { // footer char recieved
Arkadi 1:574b54755983 298 packetMSG.syncIndex++;
Arkadi 1:574b54755983 299 if (packetMSG.syncIndex == FOOTER_SIZE) { // finish footer SYNC
Arkadi 1:574b54755983 300 packetMSG.syncFlag = 3;
Arkadi 1:574b54755983 301 // copy packet to json buffer
Arkadi 1:574b54755983 302 memcpy (&json, &packetMSG.buffer, packetMSG.bufferIndex);
Arkadi 1:574b54755983 303 json[packetMSG.bufferIndex]=NULL; // end with NULL to indicate end of string
Arkadi 1:574b54755983 304 // copy packet to json buffer with sprintf
Arkadi 1:574b54755983 305 //sprintf(json, "%.*s", packetMSG.bufferIndex, packetMSG.buffer );
Arkadi 1:574b54755983 306 // send msg to parse.
Arkadi 1:574b54755983 307 parsePacket();
Arkadi 1:574b54755983 308 // reset buffer
Arkadi 1:574b54755983 309 packetMSG.bufferIndex = 0;
Arkadi 1:574b54755983 310 packetMSG.syncIndex = 0;
Arkadi 1:574b54755983 311 packetMSG.syncFlag = 0;
Arkadi 1:574b54755983 312 }
Arkadi 1:574b54755983 313 } else { // footer broke restart wait for footer
Arkadi 1:574b54755983 314 packetMSG.syncFlag=1;
Arkadi 1:574b54755983 315 // verify that it didnt broke on first footer char
Arkadi 1:574b54755983 316 if (packetMSG.footer[0] == in_byte) {
Arkadi 1:574b54755983 317 packetMSG.syncIndex=1;
Arkadi 1:574b54755983 318 } else {
Arkadi 1:574b54755983 319 packetMSG.syncIndex=0;
Arkadi 1:574b54755983 320 }
Arkadi 1:574b54755983 321 }
Arkadi 1:574b54755983 322 break;
Arkadi 1:574b54755983 323 }
Arkadi 1:574b54755983 324 default: {
Arkadi 1:574b54755983 325 pc.printf("Sonmething went wrong \r\n");
Arkadi 1:574b54755983 326 break;
Arkadi 1:574b54755983 327 }
Arkadi 1:574b54755983 328 } // end switch
Arkadi 1:574b54755983 329 }// end uart readable
Arkadi 1:574b54755983 330 } // end rxCallback
Arkadi 1:574b54755983 331
Arkadi 1:574b54755983 332 // initialize packet struct
Arkadi 1:574b54755983 333 void initPacket(void)
Arkadi 1:574b54755983 334 {
Arkadi 1:574b54755983 335 // init variables to default:
Arkadi 1:574b54755983 336 packetMSG.header[0] = 'j';
Arkadi 1:574b54755983 337 packetMSG.header[1] = 's';
Arkadi 1:574b54755983 338 packetMSG.header[2] = 'o';
Arkadi 1:574b54755983 339 packetMSG.header[3] = 'n';
Arkadi 1:574b54755983 340 packetMSG.header[4] = ':';
Arkadi 1:574b54755983 341
Arkadi 1:574b54755983 342 packetMSG.footer[0]= 13; // /r
Arkadi 1:574b54755983 343 packetMSG.footer[1]= 10; // /n
Arkadi 1:574b54755983 344
Arkadi 1:574b54755983 345 packetMSG.syncIndex=0; // sync index for header / footer
Arkadi 1:574b54755983 346 packetMSG.syncFlag=0; // 0 - waiting for header, 1 - waiting for footer, 2 - verify footer, 3 - finish footer send to parser, flash buffer
Arkadi 1:574b54755983 347 packetMSG.bufferIndex=0; // buffer index
Arkadi 1:574b54755983 348 }// end init Packet struct
Arkadi 1:574b54755983 349
Arkadi 1:574b54755983 350
Arkadi 1:574b54755983 351
Arkadi 1:574b54755983 352 // Packet Parser
Arkadi 1:574b54755983 353 void parsePacket(void)
Arkadi 1:574b54755983 354 {
Arkadi 1:574b54755983 355 string targetName;
Arkadi 1:574b54755983 356 #ifdef DEBUG_MOD2
Arkadi 1:574b54755983 357 // write buffer to screen
Arkadi 1:574b54755983 358 //pc.printf("%d, %.*s", packetMSG.bufferIndex ,packetMSG.bufferIndex, packetMSG.buffer );
Arkadi 1:574b54755983 359 pc.printf("%s", json);
Arkadi 1:574b54755983 360 #endif
Arkadi 1:574b54755983 361
Arkadi 1:574b54755983 362 // GUI message format Switch: {"name":"switch","mic":0, "spk": [0,1,0,0,0]}
Arkadi 1:574b54755983 363 parse(guiCmd, json);
Arkadi 1:574b54755983 364
Arkadi 1:574b54755983 365 // get target:
Arkadi 1:574b54755983 366 targetName = guiCmd["name"].get<string>(); // switch / dsp
Arkadi 1:574b54755983 367
Arkadi 1:574b54755983 368 #ifdef DEBUG_MOD2
Arkadi 1:574b54755983 369 // send parsed values
Arkadi 1:574b54755983 370 pc.printf("targetName: %s \r\n", targetName.c_str());
Arkadi 1:574b54755983 371 #endif
Arkadi 1:574b54755983 372
Arkadi 1:574b54755983 373 // select handler based on target mcu
Arkadi 1:574b54755983 374 if (targetName == "dsp") {
Arkadi 1:574b54755983 375 dspPacket();
Arkadi 1:574b54755983 376 } else {
Arkadi 1:574b54755983 377 #ifdef DEBUG_MOD2
Arkadi 1:574b54755983 378 // unrecognised target
Arkadi 1:574b54755983 379 pc.printf("unrecognised target: %s \r\n", targetName.c_str());
Arkadi 1:574b54755983 380 #endif
Arkadi 0:bfac05b2d50f 381 }
Arkadi 1:574b54755983 382 // led blink
Arkadi 1:574b54755983 383 led = !led;
Arkadi 1:574b54755983 384 }// end parse
Arkadi 1:574b54755983 385
Arkadi 1:574b54755983 386 // DSP Packet Handler
Arkadi 1:574b54755983 387 void dspPacket(void)
Arkadi 1:574b54755983 388 {
Arkadi 1:574b54755983 389 string filterType;
Arkadi 1:574b54755983 390 string modeType;
Arkadi 1:574b54755983 391 // get mic channle
Arkadi 1:574b54755983 392 filterType = guiCmd["filter"].get<string>();
Arkadi 1:574b54755983 393 modeType = guiCmd["mode"].get<string>();
Arkadi 1:574b54755983 394
Arkadi 1:574b54755983 395 #ifdef DEBUG_MOD10
Arkadi 1:574b54755983 396 // send parsed values
Arkadi 1:574b54755983 397 pc.printf("filter: %s , mode: %s\r\n", filterType.c_str(),modeType.c_str());
Arkadi 2:59c1a24aed7c 398 switch_dsp.printf("filter: %s , mode: %s\r\n", filterType.c_str(),modeType.c_str());
Arkadi 1:574b54755983 399 #endif
Arkadi 1:574b54755983 400 // selected operation mode
Arkadi 1:574b54755983 401 if ( filterType == "none" ) {
Arkadi 1:574b54755983 402 FilterFunction = no_filter;
Arkadi 3:48258b86e182 403 operationMode = 0 ;
Arkadi 1:574b54755983 404 } else if( filterType == "hpf" ) {
Arkadi 3:48258b86e182 405 FilterFunction = highpass_filter;
Arkadi 3:48258b86e182 406 operationMode = 1 ;
Arkadi 1:574b54755983 407 } else {
Arkadi 2:59c1a24aed7c 408 switch_dsp.printf("undefined filter %s \r\n", filterType.c_str());
Arkadi 1:574b54755983 409 FilterFunction = no_filter;
Arkadi 3:48258b86e182 410 operationMode = 0 ;
Arkadi 1:574b54755983 411 }
Arkadi 1:574b54755983 412
Arkadi 1:574b54755983 413 // selected operation mode
Arkadi 1:574b54755983 414 if ( modeType == "off" ) {
Arkadi 1:574b54755983 415 } else if( modeType == "on" ) {
Arkadi 1:574b54755983 416 } else {
Arkadi 2:59c1a24aed7c 417 switch_dsp.printf("undefined filter %s \r\n", modeType.c_str());
Arkadi 1:574b54755983 418 }
Arkadi 1:574b54755983 419
Arkadi 1:574b54755983 420 }// end dspPacket