[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,
|
iButtonMessageRead,
|
||||||
iButtonMessageWrite,
|
iButtonMessageWrite,
|
||||||
iButtonMessageEmulate,
|
iButtonMessageEmulate,
|
||||||
|
iButtonMessageNotifyEmulate,
|
||||||
} iButtonMessageType;
|
} iButtonMessageType;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -145,6 +146,11 @@ void ibutton_worker_switch_mode(iButtonWorker* worker, iButtonWorkerMode mode) {
|
|||||||
ibutton_worker_modes[worker->mode_index].start(worker);
|
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) {
|
void ibutton_worker_set_key_p(iButtonWorker* worker, iButtonKey* key) {
|
||||||
worker->key_p = 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_set_key_p(worker, message.data.key);
|
||||||
ibutton_worker_switch_mode(worker, iButtonWorkerEmulate);
|
ibutton_worker_switch_mode(worker, iButtonWorkerEmulate);
|
||||||
break;
|
break;
|
||||||
|
case iButtonMessageNotifyEmulate:
|
||||||
|
if(worker->emulate_cb) {
|
||||||
|
worker->emulate_cb(worker->cb_ctx, true);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
} else if(status == osErrorTimeout) {
|
} else if(status == osErrorTimeout) {
|
||||||
ibutton_worker_modes[worker->mode_index].tick(worker);
|
ibutton_worker_modes[worker->mode_index].tick(worker);
|
||||||
|
@ -73,6 +73,7 @@ struct iButtonWorker {
|
|||||||
extern const iButtonWorkerModeType ibutton_worker_modes[];
|
extern const iButtonWorkerModeType ibutton_worker_modes[];
|
||||||
|
|
||||||
void ibutton_worker_switch_mode(iButtonWorker* worker, iButtonWorkerMode mode);
|
void ibutton_worker_switch_mode(iButtonWorker* worker, iButtonWorkerMode mode);
|
||||||
|
void ibutton_worker_notify_emulate(iButtonWorker* worker);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -184,9 +184,7 @@ void ibutton_worker_mode_read_stop(iButtonWorker* worker) {
|
|||||||
static void onewire_slave_callback(void* context) {
|
static void onewire_slave_callback(void* context) {
|
||||||
furi_assert(context);
|
furi_assert(context);
|
||||||
iButtonWorker* worker = context;
|
iButtonWorker* worker = context;
|
||||||
if(worker->emulate_cb != NULL) {
|
ibutton_worker_notify_emulate(worker);
|
||||||
worker->emulate_cb(worker->cb_ctx, true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ibutton_worker_emulate_dallas_start(iButtonWorker* worker) {
|
void ibutton_worker_emulate_dallas_start(iButtonWorker* worker) {
|
||||||
|
Loading…
Reference in New Issue
Block a user