LFRFID RC fixes (#1652)
* lfrid: fix write validation * lfrid app: restore key data after write
This commit is contained in:
		
							parent
							
								
									7c54fcf60a
								
							
						
					
					
						commit
						7e20df7e93
					
				| @ -35,6 +35,11 @@ void LfRfidAppSceneWrite::on_enter(LfRfidApp* app, bool /* need_restore */) { | |||||||
|     popup->set_icon(0, 3, &I_RFIDDolphinSend_97x61); |     popup->set_icon(0, 3, &I_RFIDDolphinSend_97x61); | ||||||
| 
 | 
 | ||||||
|     app->view_controller.switch_to<PopupVM>(); |     app->view_controller.switch_to<PopupVM>(); | ||||||
|  | 
 | ||||||
|  |     size_t size = protocol_dict_get_data_size(app->dict, app->protocol_id); | ||||||
|  |     app->old_key_data = (uint8_t*)malloc(size); | ||||||
|  |     protocol_dict_get_data(app->dict, app->protocol_id, app->old_key_data, size); | ||||||
|  | 
 | ||||||
|     lfrfid_worker_start_thread(app->lfworker); |     lfrfid_worker_start_thread(app->lfworker); | ||||||
|     lfrfid_worker_write_start( |     lfrfid_worker_write_start( | ||||||
|         app->lfworker, (LFRFIDProtocol)app->protocol_id, lfrfid_write_callback, app); |         app->lfworker, (LFRFIDProtocol)app->protocol_id, lfrfid_write_callback, app); | ||||||
| @ -76,4 +81,8 @@ void LfRfidAppSceneWrite::on_exit(LfRfidApp* app) { | |||||||
|     app->view_controller.get<PopupVM>()->clean(); |     app->view_controller.get<PopupVM>()->clean(); | ||||||
|     lfrfid_worker_stop(app->lfworker); |     lfrfid_worker_stop(app->lfworker); | ||||||
|     lfrfid_worker_stop_thread(app->lfworker); |     lfrfid_worker_stop_thread(app->lfworker); | ||||||
|  | 
 | ||||||
|  |     size_t size = protocol_dict_get_data_size(app->dict, app->protocol_id); | ||||||
|  |     protocol_dict_set_data(app->dict, app->protocol_id, app->old_key_data, size); | ||||||
|  |     free(app->old_key_data); | ||||||
| } | } | ||||||
|  | |||||||
| @ -522,9 +522,17 @@ static void lfrfid_worker_mode_write_process(LFRFIDWorker* worker) { | |||||||
|                 &read_result); |                 &read_result); | ||||||
| 
 | 
 | ||||||
|             if(state == LFRFIDWorkerReadOK) { |             if(state == LFRFIDWorkerReadOK) { | ||||||
|                 protocol_dict_get_data(worker->protocols, protocol, read_data, data_size); |                 bool read_success = false; | ||||||
| 
 | 
 | ||||||
|                 if(memcmp(read_data, verify_data, data_size) == 0) { |                 if(read_result == protocol) { | ||||||
|  |                     protocol_dict_get_data(worker->protocols, protocol, read_data, data_size); | ||||||
|  | 
 | ||||||
|  |                     if(memcmp(read_data, verify_data, data_size) == 0) { | ||||||
|  |                         read_success = true; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 if(read_success) { | ||||||
|                     if(worker->write_cb) { |                     if(worker->write_cb) { | ||||||
|                         worker->write_cb(LFRFIDWorkerWriteOK, worker->cb_ctx); |                         worker->write_cb(LFRFIDWorkerWriteOK, worker->cb_ctx); | ||||||
|                     } |                     } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 SG
						SG