mirror of
https://github.com/DarkFlippers/unleashed-firmware
synced 2024-11-22 20:43:07 +00:00
[FL-2528] Fix iButton crash on successful emulation #1220
This commit is contained in:
parent
9a11d3996d
commit
85a129b89f
3 changed files with 13 additions and 3 deletions
|
@ -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 a new issue