-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathseader_worker.h
75 lines (60 loc) · 2.23 KB
/
seader_worker.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#pragma once
#include <lib/nfc/protocols/iso14443_4a/iso14443_4a_poller.h>
#include <lib/nfc/protocols/mf_classic/mf_classic_poller.h>
#include "sam_api.h"
#include "seader_credential.h"
#include "seader_bridge.h"
#include "apdu_runner.h"
typedef struct SeaderWorker SeaderWorker;
typedef struct CCID_Message CCID_Message;
typedef struct SeaderAPDU SeaderAPDU;
typedef enum {
// Init states
SeaderWorkerStateNone,
SeaderWorkerStateBroken,
SeaderWorkerStateReady,
// Main worker states
SeaderWorkerStateCheckSam,
SeaderWorkerStateVirtualCredential,
SeaderWorkerStateAPDURunner,
// 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,
SeaderWorkerEventAPDURunnerUpdate,
SeaderWorkerEventAPDURunnerSuccess,
SeaderWorkerEventAPDURunnerError,
} SeaderWorkerEvent;
typedef enum {
SeaderPollerEventTypeCardDetect,
SeaderPollerEventTypeConversation,
SeaderPollerEventTypeComplete,
SeaderPollerEventTypeSuccess,
SeaderPollerEventTypeFail,
} SeaderPollerEventType;
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,
SeaderWorkerCallback callback,
void* context);
void seader_worker_stop(SeaderWorker* seader_worker);
bool seader_worker_process_sam_message(Seader* seader, uint8_t* apdu, uint32_t len);
void seader_worker_send_version(Seader* seader);
NfcCommand seader_worker_poller_callback_iso14443_4a(NfcGenericEvent event, void* context);
NfcCommand seader_worker_poller_callback_mfc(NfcGenericEvent event, void* context);
NfcCommand seader_worker_poller_callback_picopass(PicopassPollerEvent event, void* context);