Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,8 @@ static bool nfc_scene_saved_menu_on_event_iso15693_3(NfcApp* instance, uint32_t
}

const NfcProtocolSupportBase nfc_protocol_support_iso15693_3 = {
.features = NfcProtocolFeatureEmulateFull, // | NfcProtocolFeatureEditUid, // TODO: Implement better UID editing
.features =
NfcProtocolFeatureEmulateFull, // | NfcProtocolFeatureEditUid, // TODO: Implement better UID editing

.scene_info =
{
Expand Down
13 changes: 11 additions & 2 deletions firmware/targets/f7/api_symbols.csv
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
entry,status,name,type,params
Version,+,35.0,,
Version,+,36.2,,
Header,+,applications/services/bt/bt_service/bt.h,,
Header,+,applications/services/cli/cli.h,,
Header,+,applications/services/cli/cli_vcp.h,,
Expand Down Expand Up @@ -182,6 +182,7 @@ Header,+,lib/one_wire/one_wire_host.h,,
Header,+,lib/one_wire/one_wire_slave.h,,
Header,+,lib/print/wrappers.h,,
Header,+,lib/pulse_reader/pulse_reader.h,,
Header,+,lib/signal_reader/signal_reader.h,,
Header,+,lib/stm32wb_hal/Inc/stm32wbxx_ll_adc.h,,
Header,+,lib/stm32wb_hal/Inc/stm32wbxx_ll_bus.h,,
Header,+,lib/stm32wb_hal/Inc/stm32wbxx_ll_comp.h,,
Expand Down Expand Up @@ -871,7 +872,6 @@ Function,-,expm1l,long double,long double
Function,-,f_hal_nfc_abort,FHalNfcError,
Function,-,f_hal_nfc_acquire,FHalNfcError,
Function,+,f_hal_nfc_event_start,FHalNfcError,
Function,+,f_hal_nfc_event_wait,FHalNfcEvent,uint32_t
Function,-,f_hal_nfc_init,FHalNfcError,
Function,-,f_hal_nfc_is_hal_ready,FHalNfcError,
Function,-,f_hal_nfc_listener_disable_auto_col_res,FHalNfcError,
Expand All @@ -881,12 +881,14 @@ Function,+,f_hal_nfc_listener_rx_start,FHalNfcError,
Function,-,f_hal_nfc_listener_sleep,FHalNfcError,
Function,+,f_hal_nfc_listener_start,FHalNfcError,
Function,-,f_hal_nfc_listener_tx,FHalNfcError,"const uint8_t*, size_t"
Function,-,f_hal_nfc_listener_wait_event,FHalNfcEvent,uint32_t
Function,-,f_hal_nfc_low_power_mode_start,FHalNfcError,
Function,-,f_hal_nfc_low_power_mode_stop,FHalNfcError,
Function,-,f_hal_nfc_poller_field_on,FHalNfcError,
Function,-,f_hal_nfc_poller_rx,FHalNfcError,"uint8_t*, size_t, size_t*"
Function,-,f_hal_nfc_poller_tx,FHalNfcError,"const uint8_t*, size_t"
Function,-,f_hal_nfc_poller_tx_custom_parity,FHalNfcError,"const uint8_t*, size_t"
Function,-,f_hal_nfc_poller_wait_event,FHalNfcEvent,uint32_t
Function,-,f_hal_nfc_release,FHalNfcError,
Function,-,f_hal_nfc_reset_mode,FHalNfcError,
Function,-,f_hal_nfc_set_mask_receive_timer,void,uint32_t
Expand Down Expand Up @@ -2667,6 +2669,13 @@ Function,+,sha256_finish,void,"sha256_context*, unsigned char[32]"
Function,+,sha256_process,void,sha256_context*
Function,+,sha256_start,void,sha256_context*
Function,+,sha256_update,void,"sha256_context*, const unsigned char*, unsigned int"
Function,+,signal_reader_alloc,SignalReader*,"const GpioPin*, uint32_t"
Function,+,signal_reader_free,void,SignalReader*
Function,+,signal_reader_set_polarity,void,"SignalReader*, SignalReaderPolarity"
Function,+,signal_reader_set_pull,void,"SignalReader*, GpioPull"
Function,+,signal_reader_set_sample_rate,void,"SignalReader*, SignalReaderTimeUnit, uint32_t"
Function,+,signal_reader_start,void,"SignalReader*, SignalReaderCallback, void*"
Function,+,signal_reader_stop,void,SignalReader*
Function,+,simple_array_alloc,SimpleArray*,const SimpleArrayConfig*
Function,+,simple_array_cget,const SimpleArrayElement*,"const SimpleArray*, uint32_t"
Function,+,simple_array_cget_data,const SimpleArrayData*,const SimpleArray*
Expand Down
44 changes: 34 additions & 10 deletions firmware/targets/f7/furi_hal/f_hal_nfc.c
Original file line number Diff line number Diff line change
Expand Up @@ -433,11 +433,13 @@ FHalNfcError f_hal_nfc_poller_tx_custom_parity(const uint8_t* tx_data, size_t tx
return err;
}

FHalNfcError f_hal_nfc_poller_tx(const uint8_t* tx_data, size_t tx_bits) {
FHalNfcError f_hal_nfc_poller_tx_common(
FuriHalSpiBusHandle* handle,
const uint8_t* tx_data,
size_t tx_bits) {
furi_assert(tx_data);

FHalNfcError err = FHalNfcErrorNone;
FuriHalSpiBusHandle* handle = &furi_hal_spi_bus_handle_nfc;

// Prepare tx
st25r3916_direct_cmd(handle, ST25R3916_CMD_CLEAR_FIFO);
Expand Down Expand Up @@ -474,6 +476,36 @@ FHalNfcError
return err;
}

FHalNfcError f_hal_nfc_poller_tx(const uint8_t* tx_data, size_t tx_bits) {
furi_assert(f_hal_nfc.mode == FHalNfcModePoller);
furi_assert(f_hal_nfc.tech < FHalNfcTechNum);
FuriHalSpiBusHandle* handle = &furi_hal_spi_bus_handle_nfc;

return f_hal_nfc_tech[f_hal_nfc.tech]->poller.tx(handle, tx_data, tx_bits);
}

FHalNfcError f_hal_nfc_poller_rx(uint8_t* rx_data, size_t rx_data_size, size_t* rx_bits) {
furi_assert(f_hal_nfc.mode == FHalNfcModePoller);
furi_assert(f_hal_nfc.tech < FHalNfcTechNum);
FuriHalSpiBusHandle* handle = &furi_hal_spi_bus_handle_nfc;

return f_hal_nfc_tech[f_hal_nfc.tech]->poller.rx(handle, rx_data, rx_data_size, rx_bits);
}

FHalNfcEvent f_hal_nfc_poller_wait_event(uint32_t timeout_ms) {
furi_assert(f_hal_nfc.mode == FHalNfcModePoller);
furi_assert(f_hal_nfc.tech < FHalNfcTechNum);

return f_hal_nfc_tech[f_hal_nfc.tech]->poller.wait_event(timeout_ms);
}

FHalNfcEvent f_hal_nfc_listener_wait_event(uint32_t timeout_ms) {
furi_assert(f_hal_nfc.mode == FHalNfcModeListener);
furi_assert(f_hal_nfc.tech < FHalNfcTechNum);

return f_hal_nfc_tech[f_hal_nfc.tech]->listener.wait_event(timeout_ms);
}

FHalNfcError f_hal_nfc_listener_tx(const uint8_t* tx_data, size_t tx_bits) {
furi_assert(tx_data);

Expand Down Expand Up @@ -523,14 +555,6 @@ FHalNfcError f_hal_nfc_listener_rx(uint8_t* rx_data, size_t rx_data_size, size_t
return f_hal_nfc_tech[f_hal_nfc.tech]->listener.rx(handle, rx_data, rx_data_size, rx_bits);
}

FHalNfcError f_hal_nfc_poller_rx(uint8_t* rx_data, size_t rx_data_size, size_t* rx_bits) {
furi_assert(rx_data);
furi_assert(rx_bits);

FuriHalSpiBusHandle* handle = &furi_hal_spi_bus_handle_nfc;
return f_hal_nfc_common_fifo_rx(handle, rx_data, rx_data_size, rx_bits);
}

FHalNfcError f_hal_nfc_trx_reset() {
FuriHalSpiBusHandle* handle = &furi_hal_spi_bus_handle_nfc;

Expand Down
20 changes: 1 addition & 19 deletions firmware/targets/f7/furi_hal/f_hal_nfc_event.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ FHalNfcError f_hal_nfc_abort() {
return FHalNfcErrorNone;
}

FHalNfcEvent f_hal_nfc_event_wait(uint32_t timeout_ms) {
FHalNfcEvent f_hal_nfc_wait_event_common(uint32_t timeout_ms) {
furi_assert(f_hal_nfc_event);
furi_assert(f_hal_nfc_event->thread);

Expand Down Expand Up @@ -81,24 +81,6 @@ FHalNfcEvent f_hal_nfc_event_wait(uint32_t timeout_ms) {
event |= FHalNfcEventAbortRequest;
furi_thread_flags_clear(FHalNfcEventInternalTypeAbort);
}
// Transparent mode events
// TODO: Rework transparent mode
if(event_flag & FHalNfcEventInternalTypeTransparentFieldOn) {
event |= FHalNfcEventFieldOn;
furi_thread_flags_clear(FHalNfcEventInternalTypeTransparentFieldOn);
}
if(event_flag & FHalNfcEventInternalTypeTransparentFieldOff) {
event |= FHalNfcEventFieldOff;
furi_thread_flags_clear(FHalNfcEventInternalTypeTransparentFieldOff);
}
if(event_flag & FHalNfcEventInternalTypeTransparentRxEnd) {
event |= FHalNfcEventRxEnd;
furi_thread_flags_clear(FHalNfcEventInternalTypeTransparentRxEnd);
}
if(event_flag & FHalNfcEventInternalTypeTransparentTimeout) {
event |= FHalNfcEventTimeout;
furi_thread_flags_clear(FHalNfcEventInternalTypeTransparentTimeout);
}
} else {
event = FHalNfcEventTimeout;
}
Expand Down
29 changes: 18 additions & 11 deletions firmware/targets/f7/furi_hal/f_hal_nfc_i.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,13 @@ typedef enum {
FHalNfcEventInternalTypeIrq = (1U << 1),
FHalNfcEventInternalTypeTimerFwtExpired = (1U << 2),
FHalNfcEventInternalTypeTimerBlockTxExpired = (1U << 3),
FHalNfcEventInternalTypeTransparentFieldOn = (1U << 4),
FHalNfcEventInternalTypeTransparentFieldOff = (1U << 5),
FHalNfcEventInternalTypeTransparentRxEnd = (1U << 6),
FHalNfcEventInternalTypeTransparentTimeout = (1U << 7),
FHalNfcEventInternalTypeTransparentDataReceived = (1U << 4),
} FHalNfcEventInternalType;

#define F_HAL_NFC_EVENT_INTERNAL_ALL \
((FHalNfcEventInternalTypeAbort | FHalNfcEventInternalTypeIrq | \
FHalNfcEventInternalTypeTimerFwtExpired | FHalNfcEventInternalTypeTimerBlockTxExpired))
#define F_HAL_NFC_EVENT_INTERNAL_ALL \
((FHalNfcEventInternalTypeAbort | FHalNfcEventInternalTypeIrq | \
FHalNfcEventInternalTypeTimerFwtExpired | FHalNfcEventInternalTypeTimerBlockTxExpired | \
FHalNfcEventInternalTypeTransparentDataReceived))

typedef struct {
FuriThreadId thread;
Expand Down Expand Up @@ -58,6 +56,7 @@ bool f_hal_nfc_event_wait_for_specific_irq(
uint32_t timeout_ms);

// Common technology methods
FHalNfcEvent f_hal_nfc_wait_event_common(uint32_t timeout_ms);
FHalNfcError f_hal_nfc_common_listener_rx_start(FuriHalSpiBusHandle* handle);
FHalNfcError
f_hal_nfc_common_fifo_tx(FuriHalSpiBusHandle* handle, const uint8_t* tx_data, size_t tx_bits);
Expand All @@ -67,27 +66,35 @@ FHalNfcError f_hal_nfc_common_fifo_rx(
size_t rx_data_size,
size_t* rx_bits);

FHalNfcError
f_hal_nfc_poller_tx_common(FuriHalSpiBusHandle* handle, const uint8_t* tx_data, size_t tx_bits);

// Technology specific API
typedef FHalNfcError (*FHalNfcChipConfig)(FuriHalSpiBusHandle* handle);
typedef FHalNfcError (
*FHalNfcChipTx)(FuriHalSpiBusHandle* handle, const uint8_t* tx_data, size_t tx_bits);
typedef FHalNfcError (*FHalNfcChipRx)(
*FHalNfcTx)(FuriHalSpiBusHandle* handle, const uint8_t* tx_data, size_t tx_bits);
typedef FHalNfcError (*FHalNfcRx)(
FuriHalSpiBusHandle* handle,
uint8_t* rx_data,
size_t rx_data_size,
size_t* rx_bits);
typedef FHalNfcEvent (*FHalNfcWaitEvent)(uint32_t timeout_ms);

typedef struct {
FHalNfcChipConfig init;
FHalNfcChipConfig deinit;
FHalNfcWaitEvent wait_event;
FHalNfcTx tx;
FHalNfcRx rx;
} FHalNfcTechPollerBase;

typedef struct {
FHalNfcChipConfig init;
FHalNfcChipConfig deinit;
FHalNfcWaitEvent wait_event;
FHalNfcChipConfig rx_start;
FHalNfcChipTx tx;
FHalNfcChipRx rx;
FHalNfcTx tx;
FHalNfcRx rx;
} FHalNfcTechListenerBase;

typedef struct {
Expand Down
4 changes: 4 additions & 0 deletions firmware/targets/f7/furi_hal/f_hal_nfc_iso14443a.c
Original file line number Diff line number Diff line change
Expand Up @@ -218,12 +218,16 @@ const FHalNfcTechBase f_hal_nfc_iso14443a = {
{
.init = f_hal_nfc_iso14443a_poller_init,
.deinit = f_hal_nfc_iso14443a_poller_deinit,
.wait_event = f_hal_nfc_wait_event_common,
.tx = f_hal_nfc_poller_tx_common,
.rx = f_hal_nfc_common_fifo_rx,
},

.listener =
{
.init = f_hal_nfc_iso14443a_listener_init,
.deinit = f_hal_nfc_iso14443a_listener_deinit,
.wait_event = f_hal_nfc_wait_event_common,
.rx_start = f_hal_nfc_common_listener_rx_start,
.tx = f_hal_nfc_common_fifo_tx,
.rx = f_hal_nfc_common_fifo_rx,
Expand Down
3 changes: 3 additions & 0 deletions firmware/targets/f7/furi_hal/f_hal_nfc_iso14443b.c
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,9 @@ const FHalNfcTechBase f_hal_nfc_iso14443b = {
{
.init = f_hal_nfc_iso14443b_poller_init,
.deinit = f_hal_nfc_iso14443b_poller_deinit,
.wait_event = f_hal_nfc_wait_event_common,
.tx = f_hal_nfc_poller_tx_common,
.rx = f_hal_nfc_common_fifo_rx,
},

.listener = {0},
Expand Down
Loading