Files
seader/seader_worker.h
2023-07-08 14:49:31 -07:00

55 lines
1.5 KiB
C

#pragma once
#include "seader_credential.h"
#include "seader_bridge.h"
typedef struct SeaderWorker SeaderWorker;
typedef struct CCID_Message CCID_Message;
typedef enum {
// Init states
SeaderWorkerStateNone,
SeaderWorkerStateBroken,
SeaderWorkerStateReady,
// Main worker states
SeaderWorkerStateCheckSam,
SeaderWorkerStateReadPicopass,
SeaderWorkerStateRead14a,
// Transition
SeaderWorkerStateStop,
} SeaderWorkerState;
typedef enum {
// Reserve first 50 events for application events
SeaderWorkerEventReserved = 50,
// Seader worker common events
SeaderWorkerEventSuccess,
SeaderWorkerEventFail,
SeaderWorkerEventSamPresent,
SeaderWorkerEventSamWrong,
SeaderWorkerEventSamMissing,
SeaderWorkerEventNoCardDetected,
SeaderWorkerEventStartReading,
} SeaderWorkerEvent;
typedef void (*SeaderWorkerCallback)(SeaderWorkerEvent event, void* context);
SeaderWorker* seader_worker_alloc();
SeaderWorkerState seader_worker_get_state(SeaderWorker* seader_worker);
void seader_worker_free(SeaderWorker* seader_worker);
void seader_worker_start(
SeaderWorker* seader_worker,
SeaderWorkerState state,
SeaderUartBridge* uart,
SeaderCredential* credential,
SeaderWorkerCallback callback,
void* context);
void seader_worker_stop(SeaderWorker* seader_worker);
void seader_worker_process_message(SeaderWorker* seader_worker, CCID_Message* message);
void seader_worker_send_version(SeaderWorker* seader_worker);