[FL-2528] Fix iButton crash on successful emulation #1220

This commit is contained in:
Georgii Surkov 2022-05-11 18:47:01 +03:00 committed by GitHub
parent 9a11d3996d
commit 85a129b89f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 13 additions and 3 deletions

View file

@ -9,6 +9,7 @@ typedef enum {
iButtonMessageRead,
iButtonMessageWrite,
iButtonMessageEmulate,
iButtonMessageNotifyEmulate,
} iButtonMessageType;
typedef struct {
@ -145,6 +146,11 @@ void ibutton_worker_switch_mode(iButtonWorker* worker, iButtonWorkerMode mode) {
ibutton_worker_modes[worker->mode_index].start(worker);
}
void ibutton_worker_notify_emulate(iButtonWorker* worker) {
iButtonMessage message = {.type = iButtonMessageNotifyEmulate};
furi_check(osMessageQueuePut(worker->messages, &message, 0, 0) == osOK);
}
void ibutton_worker_set_key_p(iButtonWorker* worker, iButtonKey* key) {
worker->key_p = key;
}
@ -183,6 +189,11 @@ static int32_t ibutton_worker_thread(void* thread_context) {
ibutton_worker_set_key_p(worker, message.data.key);
ibutton_worker_switch_mode(worker, iButtonWorkerEmulate);
break;
case iButtonMessageNotifyEmulate:
if(worker->emulate_cb) {
worker->emulate_cb(worker->cb_ctx, true);
}
break;
}
} else if(status == osErrorTimeout) {
ibutton_worker_modes[worker->mode_index].tick(worker);

View file

@ -73,6 +73,7 @@ struct iButtonWorker {
extern const iButtonWorkerModeType ibutton_worker_modes[];
void ibutton_worker_switch_mode(iButtonWorker* worker, iButtonWorkerMode mode);
void ibutton_worker_notify_emulate(iButtonWorker* worker);
#ifdef __cplusplus
}

View file

@ -184,9 +184,7 @@ void ibutton_worker_mode_read_stop(iButtonWorker* worker) {
static void onewire_slave_callback(void* context) {
furi_assert(context);
iButtonWorker* worker = context;
if(worker->emulate_cb != NULL) {
worker->emulate_cb(worker->cb_ctx, true);
}
ibutton_worker_notify_emulate(worker);
}
void ibutton_worker_emulate_dallas_start(iButtonWorker* worker) {