[FL-2528] Fix iButton crash on successful emulation #1220
This commit is contained in:
parent
9a11d3996d
commit
85a129b89f
@ -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);
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user