mirror of
https://github.com/bettse/seader.git
synced 2026-03-30 14:15:56 +00:00
ufbt format
This commit is contained in:
170
assembly.h
170
assembly.h
@@ -21,7 +21,7 @@
|
||||
#endif
|
||||
|
||||
#if defined(__APPLE__) && defined(__aarch64__)
|
||||
#define SEPARATOR %%
|
||||
#define SEPARATOR % %
|
||||
#else
|
||||
#define SEPARATOR ;
|
||||
#endif
|
||||
@@ -42,15 +42,14 @@
|
||||
#define LOCAL_LABEL(name) .L_##name
|
||||
#define FILE_LEVEL_DIRECTIVE
|
||||
#if defined(__arm__) || defined(__aarch64__)
|
||||
#define SYMBOL_IS_FUNC(name) .type name,%function
|
||||
#define SYMBOL_IS_FUNC(name) .type name, % function
|
||||
#else
|
||||
#define SYMBOL_IS_FUNC(name) .type name,@function
|
||||
#define SYMBOL_IS_FUNC(name) .type name, @function
|
||||
#endif
|
||||
#define CONST_SECTION .section .rodata
|
||||
#define CONST_SECTION .section.rodata
|
||||
|
||||
#if defined(__GNU__) || defined(__FreeBSD__) || defined(__Fuchsia__) || \
|
||||
defined(__linux__)
|
||||
#define NO_EXEC_STACK_DIRECTIVE .section .note.GNU-stack,"",%progbits
|
||||
#if defined(__GNU__) || defined(__FreeBSD__) || defined(__Fuchsia__) || defined(__linux__)
|
||||
#define NO_EXEC_STACK_DIRECTIVE .section.note.GNU - stack, "", % progbits
|
||||
#else
|
||||
#define NO_EXEC_STACK_DIRECTIVE
|
||||
#endif
|
||||
@@ -58,23 +57,17 @@
|
||||
#else // !__APPLE__ && !__ELF__
|
||||
|
||||
#define HIDDEN(name)
|
||||
#define LOCAL_LABEL(name) .L ## name
|
||||
#define LOCAL_LABEL(name) .L##name
|
||||
#define FILE_LEVEL_DIRECTIVE
|
||||
#define SYMBOL_IS_FUNC(name) \
|
||||
.def name SEPARATOR \
|
||||
.scl 2 SEPARATOR \
|
||||
.type 32 SEPARATOR \
|
||||
.endef
|
||||
#define CONST_SECTION .section .rdata,"rd"
|
||||
#define SYMBOL_IS_FUNC(name) .def name SEPARATOR.scl 2 SEPARATOR.type 32 SEPARATOR.endef
|
||||
#define CONST_SECTION .section.rdata, "rd"
|
||||
|
||||
#define NO_EXEC_STACK_DIRECTIVE
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(__arm__) || defined(__aarch64__)
|
||||
#define FUNC_ALIGN \
|
||||
.text SEPARATOR \
|
||||
.balign 16 SEPARATOR
|
||||
#define FUNC_ALIGN .text SEPARATOR.balign 16 SEPARATOR
|
||||
#else
|
||||
#define FUNC_ALIGN
|
||||
#endif
|
||||
@@ -97,18 +90,11 @@
|
||||
#define PAC_FLAG 0
|
||||
#endif
|
||||
|
||||
#define GNU_PROPERTY(type, value) \
|
||||
.pushsection .note.gnu.property, "a" SEPARATOR \
|
||||
.p2align 3 SEPARATOR \
|
||||
.word 4 SEPARATOR \
|
||||
.word 16 SEPARATOR \
|
||||
.word NT_GNU_PROPERTY_TYPE_0 SEPARATOR \
|
||||
.asciz "GNU" SEPARATOR \
|
||||
.word type SEPARATOR \
|
||||
.word 4 SEPARATOR \
|
||||
.word value SEPARATOR \
|
||||
.word 0 SEPARATOR \
|
||||
.popsection
|
||||
#define GNU_PROPERTY(type, value) \
|
||||
.pushsection.note.gnu.property, \
|
||||
"a" SEPARATOR.p2align 3 SEPARATOR.word 4 SEPARATOR.word 16 SEPARATOR \
|
||||
.word NT_GNU_PROPERTY_TYPE_0 SEPARATOR.asciz "GNU" SEPARATOR.word type \
|
||||
SEPARATOR.word 4 SEPARATOR.word value SEPARATOR.word 0 SEPARATOR.popsection
|
||||
|
||||
#if BTI_FLAG != 0
|
||||
#define BTI_C hint #34
|
||||
@@ -118,9 +104,8 @@
|
||||
#define BTI_J
|
||||
#endif
|
||||
|
||||
#if (BTI_FLAG | PAC_FLAG) != 0
|
||||
#define GNU_PROPERTY_BTI_PAC \
|
||||
GNU_PROPERTY(GNU_PROPERTY_AARCH64_FEATURE_1_AND, BTI_FLAG | PAC_FLAG)
|
||||
#if(BTI_FLAG | PAC_FLAG) != 0
|
||||
#define GNU_PROPERTY_BTI_PAC GNU_PROPERTY(GNU_PROPERTY_AARCH64_FEATURE_1_AND, BTI_FLAG | PAC_FLAG)
|
||||
#else
|
||||
#define GNU_PROPERTY_BTI_PAC
|
||||
#endif
|
||||
@@ -140,10 +125,10 @@
|
||||
// - for '-mthumb -march=armv7' compiler defines '__thumb__' and '__thumb2__'
|
||||
#if defined(__thumb2__) || defined(__thumb__)
|
||||
#define DEFINE_CODE_STATE .thumb SEPARATOR
|
||||
#define DECLARE_FUNC_ENCODING .thumb_func SEPARATOR
|
||||
#define DECLARE_FUNC_ENCODING .thumb_func SEPARATOR
|
||||
#if defined(__thumb2__)
|
||||
#define USE_THUMB_2
|
||||
#define IT(cond) it cond
|
||||
#define IT(cond) it cond
|
||||
#define ITT(cond) itt cond
|
||||
#define ITE(cond) ite cond
|
||||
#else
|
||||
@@ -167,7 +152,7 @@
|
||||
#if defined(__ARM_ARCH_4T__) || __ARM_ARCH >= 5
|
||||
#define ARM_HAS_BX
|
||||
#endif
|
||||
#if !defined(__ARM_FEATURE_CLZ) && !defined(USE_THUMB_1) && \
|
||||
#if !defined(__ARM_FEATURE_CLZ) && !defined(USE_THUMB_1) && \
|
||||
(__ARM_ARCH >= 6 || (__ARM_ARCH == 5 && !defined(__ARM_ARCH_5__)))
|
||||
#define __ARM_FEATURE_CLZ
|
||||
#endif
|
||||
@@ -182,11 +167,14 @@
|
||||
|
||||
// pop {pc} can't switch Thumb mode on ARMv4T
|
||||
#if __ARM_ARCH >= 5
|
||||
#define POP_PC() pop {pc}
|
||||
#define POP_PC() \
|
||||
pop { \
|
||||
pc \
|
||||
}
|
||||
#else
|
||||
#define POP_PC() \
|
||||
pop {ip}; \
|
||||
JMP(ip)
|
||||
#define POP_PC() \
|
||||
pop{ip}; \
|
||||
JMP(ip)
|
||||
#endif
|
||||
|
||||
#if defined(USE_THUMB_2)
|
||||
@@ -210,83 +198,71 @@
|
||||
#define SYMBOL_NAME(name) GLUE(__USER_LABEL_PREFIX__, name)
|
||||
|
||||
#ifdef VISIBILITY_HIDDEN
|
||||
#define DECLARE_SYMBOL_VISIBILITY(name) \
|
||||
HIDDEN(SYMBOL_NAME(name)) SEPARATOR
|
||||
#define DECLARE_SYMBOL_VISIBILITY_UNMANGLED(name) \
|
||||
HIDDEN(name) SEPARATOR
|
||||
#define DECLARE_SYMBOL_VISIBILITY(name) HIDDEN(SYMBOL_NAME(name)) SEPARATOR
|
||||
#define DECLARE_SYMBOL_VISIBILITY_UNMANGLED(name) HIDDEN(name) SEPARATOR
|
||||
#else
|
||||
#define DECLARE_SYMBOL_VISIBILITY(name)
|
||||
#define DECLARE_SYMBOL_VISIBILITY_UNMANGLED(name)
|
||||
#endif
|
||||
|
||||
#define DEFINE_COMPILERRT_FUNCTION(name) \
|
||||
DEFINE_CODE_STATE \
|
||||
FILE_LEVEL_DIRECTIVE SEPARATOR \
|
||||
.globl SYMBOL_NAME(name) SEPARATOR \
|
||||
SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR \
|
||||
DECLARE_SYMBOL_VISIBILITY(name) \
|
||||
DECLARE_FUNC_ENCODING \
|
||||
SYMBOL_NAME(name):
|
||||
#define DEFINE_COMPILERRT_FUNCTION(name) \
|
||||
DEFINE_CODE_STATE \
|
||||
FILE_LEVEL_DIRECTIVE SEPARATOR.globl SYMBOL_NAME(name) \
|
||||
SEPARATOR \
|
||||
SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR DECLARE_SYMBOL_VISIBILITY(name) \
|
||||
DECLARE_FUNC_ENCODING \
|
||||
SYMBOL_NAME(name) \
|
||||
:
|
||||
|
||||
#define DEFINE_COMPILERRT_THUMB_FUNCTION(name) \
|
||||
DEFINE_CODE_STATE \
|
||||
FILE_LEVEL_DIRECTIVE SEPARATOR \
|
||||
.globl SYMBOL_NAME(name) SEPARATOR \
|
||||
SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR \
|
||||
DECLARE_SYMBOL_VISIBILITY(name) SEPARATOR \
|
||||
.thumb_func SEPARATOR \
|
||||
SYMBOL_NAME(name):
|
||||
#define DEFINE_COMPILERRT_THUMB_FUNCTION(name) \
|
||||
DEFINE_CODE_STATE \
|
||||
FILE_LEVEL_DIRECTIVE SEPARATOR.globl SYMBOL_NAME(name) \
|
||||
SEPARATOR \
|
||||
SYMBOL_IS_FUNC(SYMBOL_NAME(name)) \
|
||||
SEPARATOR DECLARE_SYMBOL_VISIBILITY(name) SEPARATOR.thumb_func SEPARATOR SYMBOL_NAME(name) \
|
||||
:
|
||||
|
||||
#define DEFINE_COMPILERRT_PRIVATE_FUNCTION(name) \
|
||||
DEFINE_CODE_STATE \
|
||||
FILE_LEVEL_DIRECTIVE SEPARATOR \
|
||||
.globl SYMBOL_NAME(name) SEPARATOR \
|
||||
SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR \
|
||||
HIDDEN(SYMBOL_NAME(name)) SEPARATOR \
|
||||
DECLARE_FUNC_ENCODING \
|
||||
SYMBOL_NAME(name):
|
||||
#define DEFINE_COMPILERRT_PRIVATE_FUNCTION(name) \
|
||||
DEFINE_CODE_STATE \
|
||||
FILE_LEVEL_DIRECTIVE SEPARATOR.globl SYMBOL_NAME(name) \
|
||||
SEPARATOR \
|
||||
SYMBOL_IS_FUNC(SYMBOL_NAME(name)) \
|
||||
SEPARATOR HIDDEN(SYMBOL_NAME(name)) SEPARATOR DECLARE_FUNC_ENCODING SYMBOL_NAME(name) \
|
||||
:
|
||||
|
||||
#define DEFINE_COMPILERRT_PRIVATE_FUNCTION_UNMANGLED(name) \
|
||||
DEFINE_CODE_STATE \
|
||||
.globl name SEPARATOR \
|
||||
SYMBOL_IS_FUNC(name) SEPARATOR \
|
||||
HIDDEN(name) SEPARATOR \
|
||||
DECLARE_FUNC_ENCODING \
|
||||
name:
|
||||
#define DEFINE_COMPILERRT_PRIVATE_FUNCTION_UNMANGLED(name) \
|
||||
DEFINE_CODE_STATE.globl name SEPARATOR SYMBOL_IS_FUNC(name) \
|
||||
SEPARATOR \
|
||||
HIDDEN(name) SEPARATOR DECLARE_FUNC_ENCODING name:
|
||||
|
||||
#define DEFINE_COMPILERRT_OUTLINE_FUNCTION_UNMANGLED(name) \
|
||||
DEFINE_CODE_STATE \
|
||||
FUNC_ALIGN \
|
||||
.globl name SEPARATOR \
|
||||
SYMBOL_IS_FUNC(name) SEPARATOR \
|
||||
DECLARE_SYMBOL_VISIBILITY_UNMANGLED(name) SEPARATOR \
|
||||
CFI_START SEPARATOR \
|
||||
DECLARE_FUNC_ENCODING \
|
||||
name: SEPARATOR BTI_C
|
||||
#define DEFINE_COMPILERRT_OUTLINE_FUNCTION_UNMANGLED(name) \
|
||||
DEFINE_CODE_STATE \
|
||||
FUNC_ALIGN.globl name SEPARATOR SYMBOL_IS_FUNC(name) \
|
||||
SEPARATOR \
|
||||
DECLARE_SYMBOL_VISIBILITY_UNMANGLED(name) \
|
||||
SEPARATOR CFI_START SEPARATOR DECLARE_FUNC_ENCODING name : SEPARATOR BTI_C
|
||||
|
||||
#define DEFINE_COMPILERRT_FUNCTION_ALIAS(name, target) \
|
||||
.globl SYMBOL_NAME(name) SEPARATOR \
|
||||
SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR \
|
||||
DECLARE_SYMBOL_VISIBILITY(SYMBOL_NAME(name)) SEPARATOR \
|
||||
.set SYMBOL_NAME(name), SYMBOL_NAME(target) SEPARATOR
|
||||
#define DEFINE_COMPILERRT_FUNCTION_ALIAS(name, target) \
|
||||
.globl SYMBOL_NAME(name) \
|
||||
SEPARATOR \
|
||||
SYMBOL_IS_FUNC(SYMBOL_NAME(name)) \
|
||||
SEPARATOR DECLARE_SYMBOL_VISIBILITY(SYMBOL_NAME(name)) SEPARATOR.set SYMBOL_NAME(name), \
|
||||
SYMBOL_NAME(target) SEPARATOR
|
||||
|
||||
#if defined(__ARM_EABI__)
|
||||
#define DEFINE_AEABI_FUNCTION_ALIAS(aeabi_name, name) \
|
||||
DEFINE_COMPILERRT_FUNCTION_ALIAS(aeabi_name, name)
|
||||
#define DEFINE_AEABI_FUNCTION_ALIAS(aeabi_name, name) \
|
||||
DEFINE_COMPILERRT_FUNCTION_ALIAS(aeabi_name, name)
|
||||
#else
|
||||
#define DEFINE_AEABI_FUNCTION_ALIAS(aeabi_name, name)
|
||||
#endif
|
||||
|
||||
#ifdef __ELF__
|
||||
#define END_COMPILERRT_FUNCTION(name) \
|
||||
.size SYMBOL_NAME(name), . - SYMBOL_NAME(name)
|
||||
#define END_COMPILERRT_OUTLINE_FUNCTION(name) \
|
||||
CFI_END SEPARATOR \
|
||||
.size SYMBOL_NAME(name), . - SYMBOL_NAME(name)
|
||||
#define END_COMPILERRT_FUNCTION(name) .size SYMBOL_NAME(name), .- SYMBOL_NAME(name)
|
||||
#define END_COMPILERRT_OUTLINE_FUNCTION(name) \
|
||||
CFI_END SEPARATOR.size SYMBOL_NAME(name), .- SYMBOL_NAME(name)
|
||||
#else
|
||||
#define END_COMPILERRT_FUNCTION(name)
|
||||
#define END_COMPILERRT_OUTLINE_FUNCTION(name) \
|
||||
CFI_END
|
||||
#define END_COMPILERRT_OUTLINE_FUNCTION(name) CFI_END
|
||||
#endif
|
||||
|
||||
#endif // COMPILERRT_ASSEMBLY_H
|
||||
|
||||
59
ccid.h
59
ccid.h
@@ -1,6 +1,5 @@
|
||||
#pragma once
|
||||
|
||||
|
||||
#include <stdlib.h> // malloc
|
||||
#include <stdint.h> // uint32_t
|
||||
#include <stdarg.h> // __VA_ARGS__
|
||||
@@ -24,42 +23,38 @@
|
||||
* * BULK_OUT messages from PC to Reader
|
||||
* * Defined in CCID Rev 1.1 6.1 (page 26)
|
||||
* */
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_IccPowerOn 0x62
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_IccPowerOff 0x63
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_GetSlotStatus 0x65
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_XfrBlock 0x6f
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_GetParameters 0x6c
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_ResetParameters 0x6d
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_SetParameters 0x61
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_Escape 0x6b
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_IccClock 0x6e
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_T0APDU 0x6a
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_Secure 0x69
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_Mechanical 0x71
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_Abort 0x72
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_IccPowerOn 0x62
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_IccPowerOff 0x63
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_GetSlotStatus 0x65
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_XfrBlock 0x6f
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_GetParameters 0x6c
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_ResetParameters 0x6d
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_SetParameters 0x61
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_Escape 0x6b
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_IccClock 0x6e
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_T0APDU 0x6a
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_Secure 0x69
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_Mechanical 0x71
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_Abort 0x72
|
||||
#define CCID_MESSAGE_TYPE_PC_to_RDR_SetDataRateAndClockFrequency 0x73
|
||||
/*
|
||||
* * BULK_IN messages from Reader to PC
|
||||
* * Defined in CCID Rev 1.1 6.2 (page 48)
|
||||
* */
|
||||
#define CCID_MESSAGE_TYPE_RDR_to_PC_DataBlock 0x80
|
||||
#define CCID_MESSAGE_TYPE_RDR_to_PC_SlotStatus 0x81
|
||||
#define CCID_MESSAGE_TYPE_RDR_to_PC_Parameters 0x82
|
||||
#define CCID_MESSAGE_TYPE_RDR_to_PC_Escape 0x83
|
||||
#define CCID_MESSAGE_TYPE_RDR_to_PC_DataBlock 0x80
|
||||
#define CCID_MESSAGE_TYPE_RDR_to_PC_SlotStatus 0x81
|
||||
#define CCID_MESSAGE_TYPE_RDR_to_PC_Parameters 0x82
|
||||
#define CCID_MESSAGE_TYPE_RDR_to_PC_Escape 0x83
|
||||
#define CCID_MESSAGE_TYPE_RDR_to_PC_DataRateAndClockFrequency 0x84
|
||||
/*
|
||||
* * INTERRUPT_IN messages from Reader to PC
|
||||
* * Defined in CCID Rev 1.1 6.3 (page 56)
|
||||
* */
|
||||
#define CCID_MESSAGE_TYPE_RDR_to_PC_NotifySlotChange 0x50
|
||||
#define CCID_MESSAGE_TYPE_RDR_to_PC_HardwareError 0x51
|
||||
#define CCID_MESSAGE_TYPE_RDR_to_PC_NotifySlotChange 0x50
|
||||
#define CCID_MESSAGE_TYPE_RDR_to_PC_HardwareError 0x51
|
||||
|
||||
/* Status codes that go in bStatus (see 6.2.6) */
|
||||
enum {
|
||||
ICC_STATUS_PRESENT_ACTIVE = 0,
|
||||
ICC_STATUS_PRESENT_INACTIVE,
|
||||
ICC_STATUS_NOT_PRESENT
|
||||
};
|
||||
enum { ICC_STATUS_PRESENT_ACTIVE = 0, ICC_STATUS_PRESENT_INACTIVE, ICC_STATUS_NOT_PRESENT };
|
||||
enum {
|
||||
COMMAND_STATUS_NO_ERROR = 0,
|
||||
COMMAND_STATUS_FAILED,
|
||||
@@ -68,11 +63,11 @@ enum {
|
||||
/* Error codes that go in bError (see 6.2.6) */
|
||||
enum {
|
||||
ERROR_CMD_NOT_SUPPORTED = 0,
|
||||
ERROR_CMD_ABORTED = -1,
|
||||
ERROR_ICC_MUTE = -2,
|
||||
ERROR_XFR_PARITY_ERROR = -3,
|
||||
ERROR_XFR_OVERRUN = -4,
|
||||
ERROR_HW_ERROR = -5,
|
||||
ERROR_CMD_ABORTED = -1,
|
||||
ERROR_ICC_MUTE = -2,
|
||||
ERROR_XFR_PARITY_ERROR = -3,
|
||||
ERROR_XFR_OVERRUN = -4,
|
||||
ERROR_HW_ERROR = -5,
|
||||
};
|
||||
|
||||
struct CCID_Message {
|
||||
@@ -83,7 +78,7 @@ struct CCID_Message {
|
||||
uint8_t bStatus;
|
||||
uint8_t bError;
|
||||
|
||||
uint8_t *payload;
|
||||
uint8_t* payload;
|
||||
size_t consumed;
|
||||
};
|
||||
|
||||
@@ -91,5 +86,5 @@ void PC_to_RDR_IccPowerOn(SeaderUartBridge* seader_uart);
|
||||
void PC_to_RDR_GetSlotStatus(SeaderUartBridge* seader_uart);
|
||||
void PC_to_RDR_SetParameters(SeaderUartBridge* seader_uart);
|
||||
void PC_to_RDR_GetParameters(SeaderUartBridge* seader_uart);
|
||||
void PC_to_RDR_XfrBlock(SeaderUartBridge* seader_uart, uint8_t *data, size_t len);
|
||||
void PC_to_RDR_XfrBlock(SeaderUartBridge* seader_uart, uint8_t* data, size_t len);
|
||||
size_t processCCID(SeaderWorker* seader_worker, uint8_t* cmd, size_t cmd_len);
|
||||
|
||||
@@ -19,9 +19,17 @@ void seader_scene_card_menu_on_enter(void* context) {
|
||||
submenu_add_item(
|
||||
submenu, "Save", SubmenuIndexSave, seader_scene_card_menu_submenu_callback, seader);
|
||||
submenu_add_item(
|
||||
submenu, "Save Picopass", SubmenuIndexSavePicopass, seader_scene_card_menu_submenu_callback, seader);
|
||||
submenu,
|
||||
"Save Picopass",
|
||||
SubmenuIndexSavePicopass,
|
||||
seader_scene_card_menu_submenu_callback,
|
||||
seader);
|
||||
submenu_add_item(
|
||||
submenu, "Save RFID", SubmenuIndexSaveRFID, seader_scene_card_menu_submenu_callback, seader);
|
||||
submenu,
|
||||
"Save RFID",
|
||||
SubmenuIndexSaveRFID,
|
||||
seader_scene_card_menu_submenu_callback,
|
||||
seader);
|
||||
|
||||
submenu_set_selected_item(
|
||||
seader->submenu,
|
||||
|
||||
@@ -11,11 +11,11 @@
|
||||
typedef void (*SeaderLoadingCallback)(void* context, bool state);
|
||||
|
||||
typedef enum {
|
||||
SeaderCredentialTypeNone,
|
||||
SeaderCredentialTypePicopass,
|
||||
SeaderCredentialType14A,
|
||||
// Might need to make 14a into "javacard" and add Desfire
|
||||
SeaderCredentialTypeMifareClassic,
|
||||
SeaderCredentialTypeNone,
|
||||
SeaderCredentialTypePicopass,
|
||||
SeaderCredentialType14A,
|
||||
// Might need to make 14a into "javacard" and add Desfire
|
||||
SeaderCredentialTypeMifareClassic,
|
||||
} SeaderCredentialType;
|
||||
|
||||
typedef enum {
|
||||
|
||||
@@ -201,7 +201,8 @@ bool read_nfc(SeaderUartBridge* seader_uart) {
|
||||
cardDetails->atqa = &atqa;
|
||||
sendCardDetected(seader_uart, cardDetails);
|
||||
rtn = true;
|
||||
} else if(mf_classic_check_card_type(nfc_data.atqa[0], nfc_data.atqa[1], nfc_data.sak)) {
|
||||
} else if(mf_classic_check_card_type(
|
||||
nfc_data.atqa[0], nfc_data.atqa[1], nfc_data.sak)) {
|
||||
FURI_LOG_D(TAG, "MFC");
|
||||
OCTET_STRING_t atqa = {.buf = nfc_data.atqa, .size = sizeof(nfc_data.atqa)};
|
||||
cardDetails->atqa = &atqa;
|
||||
|
||||
1
sub.h
1
sub.h
@@ -42,5 +42,4 @@ struct SeaderUartBridge {
|
||||
size_t tx_len;
|
||||
};
|
||||
|
||||
|
||||
typedef struct SeaderUartBridge SeaderUartBridge;
|
||||
|
||||
1
uart.h
1
uart.h
@@ -15,6 +15,5 @@ void seader_uart_set_config(SeaderUartBridge* seader_uart, SeaderUartConfig* cfg
|
||||
void seader_uart_get_config(SeaderUartBridge* seader_uart, SeaderUartConfig* cfg);
|
||||
void seader_uart_get_state(SeaderUartBridge* seader_uart, SeaderUartState* st);
|
||||
|
||||
|
||||
SeaderUartBridge* seader_uart_alloc();
|
||||
void seader_uart_free(SeaderUartBridge* seader_uart);
|
||||
|
||||
Reference in New Issue
Block a user