FL-810 fix emulating init state (#312)
* fix emulating init state * add/remove comparator callback on start/stop reading
This commit is contained in:
		
							parent
							
								
									312d3fbd9e
								
							
						
					
					
						commit
						a7951ade69
					
				| @ -21,6 +21,7 @@ typedef struct { | |||||||
|     bool on; |     bool on; | ||||||
|     uint8_t customer_id; |     uint8_t customer_id; | ||||||
|     uint32_t em_data; |     uint32_t em_data; | ||||||
|  |     bool dirty; | ||||||
| } State; | } State; | ||||||
| 
 | 
 | ||||||
| static void render_callback(Canvas* canvas, void* ctx) { | static void render_callback(Canvas* canvas, void* ctx) { | ||||||
| @ -178,7 +179,6 @@ void lf_rfid_workaround(void* p) { | |||||||
| 
 | 
 | ||||||
|     // init ctx
 |     // init ctx
 | ||||||
|     void* comp_ctx = (void*)event_queue; |     void* comp_ctx = (void*)event_queue; | ||||||
|     api_interrupt_add(comparator_trigger_callback, InterruptTypeComparatorTrigger, comp_ctx); |  | ||||||
| 
 | 
 | ||||||
|     // start comp
 |     // start comp
 | ||||||
|     HAL_COMP_Start(&hcomp1); |     HAL_COMP_Start(&hcomp1); | ||||||
| @ -190,6 +190,7 @@ void lf_rfid_workaround(void* p) { | |||||||
|     _state.on = false; |     _state.on = false; | ||||||
|     _state.customer_id = 01; |     _state.customer_id = 01; | ||||||
|     _state.em_data = 4378151; |     _state.em_data = 4378151; | ||||||
|  |     _state.dirty = true; | ||||||
| 
 | 
 | ||||||
|     ValueMutex state_mutex; |     ValueMutex state_mutex; | ||||||
|     if(!init_mutex(&state_mutex, &_state, sizeof(State))) { |     if(!init_mutex(&state_mutex, &_state, sizeof(State))) { | ||||||
| @ -295,10 +296,12 @@ void lf_rfid_workaround(void* p) { | |||||||
|                     } |                     } | ||||||
| 
 | 
 | ||||||
|                     if(event.value.input.state && event.value.input.input == InputUp) { |                     if(event.value.input.state && event.value.input.input == InputUp) { | ||||||
|  |                         state->dirty = true; | ||||||
|                         state->freq_khz += 10; |                         state->freq_khz += 10; | ||||||
|                     } |                     } | ||||||
| 
 | 
 | ||||||
|                     if(event.value.input.state && event.value.input.input == InputDown) { |                     if(event.value.input.state && event.value.input.input == InputDown) { | ||||||
|  |                         state->dirty = true; | ||||||
|                         state->freq_khz -= 10; |                         state->freq_khz -= 10; | ||||||
|                     } |                     } | ||||||
| 
 | 
 | ||||||
| @ -309,24 +312,35 @@ void lf_rfid_workaround(void* p) { | |||||||
|                     } |                     } | ||||||
| 
 | 
 | ||||||
|                     if(event.value.input.state && event.value.input.input == InputOk) { |                     if(event.value.input.state && event.value.input.input == InputOk) { | ||||||
|  |                         state->dirty = true; | ||||||
|                         state->on = !state->on; |                         state->on = !state->on; | ||||||
| 
 |  | ||||||
|                         if(!state->on) { |  | ||||||
|                             prepare_data(state->em_data, state->customer_id, emulation_data); |  | ||||||
|                         } |  | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             } else { |             } else { | ||||||
|                 // event timeout
 |                 // event timeout
 | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  |             if(state->dirty) { | ||||||
|  |                 if(!state->on) { | ||||||
|  |                     prepare_data(state->em_data, state->customer_id, emulation_data); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 if(state->on) { | ||||||
|  |                     gpio_write(pull_pin_record, false); | ||||||
|  |                     api_interrupt_add( | ||||||
|  |                         comparator_trigger_callback, InterruptTypeComparatorTrigger, comp_ctx); | ||||||
|  |                 } else { | ||||||
|  |                     api_interrupt_remove(comparator_trigger_callback); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|                 hal_pwmn_set( |                 hal_pwmn_set( | ||||||
|                     state->on ? 0.5 : 0.0, (float)(state->freq_khz * 1000), &LFRFID_TIM, LFRFID_CH); |                     state->on ? 0.5 : 0.0, (float)(state->freq_khz * 1000), &LFRFID_TIM, LFRFID_CH); | ||||||
| 
 | 
 | ||||||
|  |                 state->dirty = false; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|             if(!state->on) { |             if(!state->on) { | ||||||
|                 em4100_emulation(emulation_data, pull_pin_record); |                 em4100_emulation(emulation_data, pull_pin_record); | ||||||
|             } else { |  | ||||||
|                 gpio_write(pull_pin_record, false); |  | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             // common code, for example, force update UI
 |             // common code, for example, force update UI
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 coreglitch
						coreglitch