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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 DrZlo13
						DrZlo13