added NfcV emulation

This commit is contained in:
g3gg0
2022-11-14 21:12:18 +01:00
parent fe216b4ddd
commit bcd33ca125
18 changed files with 1150 additions and 48 deletions

View File

@@ -1,5 +1,5 @@
entry,status,name,type,params
Version,+,7.5,,
Version,+,7.12,,
Header,+,applications/services/bt/bt_service/bt.h,,
Header,+,applications/services/cli/cli.h,,
Header,+,applications/services/cli/cli_vcp.h,,
@@ -1181,6 +1181,7 @@ Function,+,furi_hal_nfc_stop,void,
Function,+,furi_hal_nfc_stop_cmd,void,
Function,+,furi_hal_nfc_tx_rx,_Bool,"FuriHalNfcTxRxContext*, uint16_t"
Function,+,furi_hal_nfc_tx_rx_full,_Bool,FuriHalNfcTxRxContext*
Function,-,furi_hal_nfcv_listen_start,void,
Function,-,furi_hal_os_init,void,
Function,+,furi_hal_os_tick,void,
Function,+,furi_hal_power_check_otg_status,void,
@@ -1958,8 +1959,12 @@ Function,-,nfca_get_crc16,uint16_t,"uint8_t*, uint16_t"
Function,-,nfca_signal_alloc,NfcaSignal*,
Function,-,nfca_signal_encode,void,"NfcaSignal*, uint8_t*, uint16_t, uint8_t*"
Function,-,nfca_signal_free,void,NfcaSignal*
Function,-,nfcv_emu_deinit,void,
Function,-,nfcv_emu_init,void,
Function,-,nfcv_emu_loop,_Bool,"FuriHalNfcDevData*, NfcVData*, uint32_t"
Function,-,nfcv_inventory,ReturnCode,uint8_t*
Function,-,nfcv_read_blocks,ReturnCode,"NfcVReader*, NfcVData*"
Function,-,nfcv_read_card,_Bool,"NfcVReader*, FuriHalNfcDevData*, NfcVData*"
Function,-,nfcv_read_sysinfo,ReturnCode,"FuriHalNfcDevData*, NfcVData*"
Function,+,notification_internal_message,void,"NotificationApp*, const NotificationSequence*"
Function,+,notification_internal_message_block,void,"NotificationApp*, const NotificationSequence*"
1 entry status name type params
2 Version + 7.5 7.12
3 Header + applications/services/bt/bt_service/bt.h
4 Header + applications/services/cli/cli.h
5 Header + applications/services/cli/cli_vcp.h
1181 Function + furi_hal_nfc_stop_cmd void
1182 Function + furi_hal_nfc_tx_rx _Bool FuriHalNfcTxRxContext*, uint16_t
1183 Function + furi_hal_nfc_tx_rx_full _Bool FuriHalNfcTxRxContext*
1184 Function - furi_hal_nfcv_listen_start void
1185 Function - furi_hal_os_init void
1186 Function + furi_hal_os_tick void
1187 Function + furi_hal_power_check_otg_status void
1959 Function - nfca_signal_alloc NfcaSignal*
1960 Function - nfca_signal_encode void NfcaSignal*, uint8_t*, uint16_t, uint8_t*
1961 Function - nfca_signal_free void NfcaSignal*
1962 Function - nfcv_emu_deinit void
1963 Function - nfcv_emu_init void
1964 Function - nfcv_emu_loop _Bool FuriHalNfcDevData*, NfcVData*, uint32_t
1965 Function - nfcv_inventory ReturnCode uint8_t*
1966 Function - nfcv_read_blocks ReturnCode NfcVReader*, NfcVData*
1967 Function - nfcv_read_card _Bool NfcVReader*, FuriHalNfcDevData*, NfcVData*
1968 Function - nfcv_read_sysinfo ReturnCode FuriHalNfcDevData*, NfcVData*
1969 Function + notification_internal_message void NotificationApp*, const NotificationSequence*
1970 Function + notification_internal_message_block void NotificationApp*, const NotificationSequence*

View File

@@ -367,6 +367,39 @@ void furi_hal_nfc_listen_start(FuriHalNfcDevData* nfc_data) {
st25r3916ExecuteCommand(ST25R3916_CMD_GOTO_SENSE);
}
void furi_hal_nfcv_listen_start() {
furi_hal_gpio_init(&gpio_nfc_irq_rfid_pull, GpioModeInput, GpioPullDown, GpioSpeedVeryHigh);
// Clear interrupts
st25r3916ClearInterrupts();
// Mask all interrupts
st25r3916DisableInterrupts(ST25R3916_IRQ_MASK_ALL);
// RESET
st25r3916ExecuteCommand(ST25R3916_CMD_STOP);
// Setup registers
st25r3916WriteRegister(
ST25R3916_REG_OP_CONTROL,
ST25R3916_REG_OP_CONTROL_en | ST25R3916_REG_OP_CONTROL_rx_en |
ST25R3916_REG_OP_CONTROL_en_fd_auto_efd);
st25r3916WriteRegister(
ST25R3916_REG_MODE,
ST25R3916_REG_MODE_targ_targ | ST25R3916_REG_MODE_om3 | ST25R3916_REG_MODE_om0);
st25r3916WriteRegister(
ST25R3916_REG_PASSIVE_TARGET,
ST25R3916_REG_PASSIVE_TARGET_fdel_2 | ST25R3916_REG_PASSIVE_TARGET_fdel_0 |
ST25R3916_REG_PASSIVE_TARGET_d_ac_ap2p | ST25R3916_REG_PASSIVE_TARGET_d_212_424_1r);
st25r3916WriteRegister(ST25R3916_REG_MASK_RX_TIMER, 0x02);
// Mask interrupts
uint32_t clear_irq_mask =
(ST25R3916_IRQ_MASK_RXE | ST25R3916_IRQ_MASK_RXE_PTA | ST25R3916_IRQ_MASK_WU_A_X |
ST25R3916_IRQ_MASK_WU_A);
st25r3916EnableInterrupts(clear_irq_mask);
// Go to sense
st25r3916ExecuteCommand(ST25R3916_CMD_GOTO_SENSE);
}
void rfal_interrupt_callback_handler() {
furi_event_flag_set(event, EVENT_FLAG_INTERRUPT);
}