IrDA test app^ acquire state only when needed, fix exit, remove delay in main program cycle (#335)
This commit is contained in:
parent
0899c18d38
commit
0846de20a4
@ -294,20 +294,27 @@ void irda(void* p) {
|
|||||||
AppEvent event;
|
AppEvent event;
|
||||||
while(1) {
|
while(1) {
|
||||||
osStatus_t event_status = osMessageQueueGet(event_queue, &event, NULL, 500);
|
osStatus_t event_status = osMessageQueueGet(event_queue, &event, NULL, 500);
|
||||||
State* state = (State*)acquire_mutex_block(&state_mutex);
|
|
||||||
|
|
||||||
if(event_status == osOK) {
|
if(event_status == osOK) {
|
||||||
if(event.type == EventTypeKey) {
|
if(event.type == EventTypeKey) {
|
||||||
|
State* state = (State*)acquire_mutex_block(&state_mutex);
|
||||||
|
|
||||||
// press events
|
// press events
|
||||||
if(event.value.input.type == InputTypeShort &&
|
if(event.value.input.type == InputTypeShort &&
|
||||||
event.value.input.key == InputKeyBack) {
|
event.value.input.key == InputKeyBack) {
|
||||||
|
api_interrupt_remove(irda_timer_capture_callback, InterruptTypeTimerCapture);
|
||||||
|
release_mutex(&state_mutex, state);
|
||||||
|
|
||||||
// remove all view_ports create by app
|
// remove all view_ports create by app
|
||||||
view_port_enabled_set(view_port, false);
|
|
||||||
gui_remove_view_port(gui, view_port);
|
gui_remove_view_port(gui, view_port);
|
||||||
|
view_port_free(view_port);
|
||||||
|
|
||||||
// free decoder
|
// free decoder
|
||||||
free_decoder(decoder);
|
free_decoder(decoder);
|
||||||
|
|
||||||
|
delete_mutex(&state_mutex);
|
||||||
|
osMessageQueueDelete(event_queue);
|
||||||
|
|
||||||
// exit
|
// exit
|
||||||
furiac_exit(NULL);
|
furiac_exit(NULL);
|
||||||
}
|
}
|
||||||
@ -327,6 +334,10 @@ void irda(void* p) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
modes[state->mode_id].input(&event, state);
|
modes[state->mode_id].input(&event, state);
|
||||||
|
|
||||||
|
release_mutex(&state_mutex, state);
|
||||||
|
view_port_update(view_port);
|
||||||
|
|
||||||
} else if(event.type == EventTypeRX) {
|
} else if(event.type == EventTypeRX) {
|
||||||
IrDADecoderOutputData out;
|
IrDADecoderOutputData out;
|
||||||
const uint8_t out_data_length = 4;
|
const uint8_t out_data_length = 4;
|
||||||
@ -342,6 +353,8 @@ void irda(void* p) {
|
|||||||
|
|
||||||
if(decoded) {
|
if(decoded) {
|
||||||
// save only if we in packet mode
|
// save only if we in packet mode
|
||||||
|
State* state = (State*)acquire_mutex_block(&state_mutex);
|
||||||
|
|
||||||
if(state->mode_id == 1) {
|
if(state->mode_id == 1) {
|
||||||
if(out.protocol == IRDA_NEC) {
|
if(out.protocol == IRDA_NEC) {
|
||||||
printf("P=NEC ");
|
printf("P=NEC ");
|
||||||
@ -361,9 +374,11 @@ void irda(void* p) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
release_mutex(&state_mutex, state);
|
||||||
|
view_port_update(view_port);
|
||||||
|
|
||||||
// blink anyway
|
// blink anyway
|
||||||
gpio_write(green_led_record, false);
|
gpio_write(green_led_record, false);
|
||||||
delay(10);
|
|
||||||
gpio_write(green_led_record, true);
|
gpio_write(green_led_record, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -371,8 +386,5 @@ void irda(void* p) {
|
|||||||
} else {
|
} else {
|
||||||
// event timeout
|
// event timeout
|
||||||
}
|
}
|
||||||
|
|
||||||
release_mutex(&state_mutex, state);
|
|
||||||
view_port_update(view_port);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user