void espParse(void){ u08 Len = FIFO_FRONT(espRxBuf); u08* ptrData = malloc(Len); if (ptrData == NULL) //Не хватило памяти для обработки команды, подождем может появится SetTask(espParse); else{ u08* Data = ptrData; FIFO_POP(espRxBuf); for(u08 i=Len;i;i--){ //Извлекаем данные из буфера *Data = FIFO_FRONT(espRxBuf); Data++; FIFO_POP(espRxBuf); } u08 Cmd = FIFO_FRONT(espRxBuf); FIFO_POP(espRxBuf); for (u08 i=0; i < UART_CMD_NUM_MAX; i++) { if (espCmdCode(i) == ClkCmdCode(Cmd)){ //Команда найдена ((VOID_CLK_UART_CMD)&espCmdExec(i))(Cmd, ptrData, Len);//Отрабатываем break; } } free(ptrData); } }
PR_END_EXTERN_C /*********************** * Р Е А Л И З А Ц И Я * ~~~~~~~~~~~~~~~~~~~ ************************/ uint8_t CConsole::GetChar() { uint8_t ret = 0; __disable_interrupt(); if ( !FIFO_IS_EMPTY( uart_rx_fifo ) ) { // Если в буфере есть данные, то извлекаем их. ret = FIFO_FRONT( uart_rx_fifo ); FIFO_POP( uart_rx_fifo ); } __enable_interrupt(); return ret; }
uint16_t get_pitch_event(void) { if (FIFO_COUNT(pitch_events) != 0) { uint16_t event = FIFO_FRONT(pitch_events); FIFO_POP(pitch_events); return event + 1; } else { return 0; } }
uint16_t get_slider_event(void) { if (FIFO_COUNT(sliders_events) != 0) { uint16_t event = FIFO_FRONT(sliders_events); FIFO_POP(sliders_events); //event maybe = 0, so this is for correct sending return event + 1; } else { return 0; } }
void usb_midi_refresh(void){ uint32_t buf[128]; uint8_t count=FIFO_COUNT(USB_midi_packets_in); if (count && USB_transferPossible){ for (uint8_t i=0; i<count; i++){ buf[i]=FIFO_FRONT(USB_midi_packets_in); FIFO_POP(USB_midi_packets_in); } DCD_EP_Tx(&USB_OTG_dev, MIDI_IN_EP, (uint8_t*)buf, count<<2); } }
void checkButtons_events(Button_type* buttons, uint8_t analog) { uint8_t event; if (FIFO_COUNT(control_events) == 0) return; //No events event = FIFO_FRONT(control_events); FIFO_POP(control_events); uint8_t btn_num = event & 0x7F; //messages has number > ENCODER_LEFT1 //so messages sends to menu_btns_n_msg_handler if (btn_num == BUTTON_PANIC) { if (!(event & 0x80)) sendPanic(analog); } else if (btn_num <= BUTTON_RIGHT || btn_num >= ENCODER_LEFT1 || buttonsToMenu) { if (!(event & 0x80)) menu_btns_n_msg_handler(event); } else { button_midi_send(event, buttons, analog); } }