ufbt format

This commit is contained in:
Eric Betts
2023-06-17 17:28:58 -07:00
parent c685c4a4d4
commit 012b7cf052
8 changed files with 117 additions and 140 deletions

View File

@@ -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
View File

@@ -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);

View File

@@ -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,

View File

@@ -1,4 +1,3 @@
#pragma once
typedef struct Seader Seader;

View File

@@ -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 {

View File

@@ -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
View File

@@ -42,5 +42,4 @@ struct SeaderUartBridge {
size_t tx_len;
};
typedef struct SeaderUartBridge SeaderUartBridge;

1
uart.h
View File

@@ -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);