Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FL-3295] FuriHal: add bus abstraction #2614

Merged
merged 46 commits into from
May 29, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
df9fb2e
FuriHal: add bus abstraction and port some subsystem to it
skotopes Apr 25, 2023
362dc84
Merge branch 'dev' into aku/stop_verification_toolkit
skotopes Apr 25, 2023
484a808
Merge remote-tracking branch 'origin/dev' into aku/stop_verification_…
skotopes Apr 26, 2023
e0fa29a
Merge remote-tracking branch 'origin/dev' into aku/stop_verification_…
skotopes Apr 27, 2023
959763c
Make PVS happy, cleanup code
skotopes Apr 27, 2023
75085f3
Update API symbols for f18
skotopes Apr 27, 2023
c36b685
F18: backport bus changes from f7
skotopes Apr 27, 2023
e44eb8c
F18: backport bus changes from f7
skotopes Apr 27, 2023
af5c99a
Merge dev, fix conflicts
gsurkov May 3, 2023
b43b12a
Merge dev, resolve conflicts
gsurkov May 4, 2023
3e5a1d3
Revert to STOP2 sleep mode
gsurkov May 4, 2023
40e9fc6
Fix downgrading the firmware via updater
gsurkov May 4, 2023
1c87746
Merge dev, fix conflicts
gsurkov May 5, 2023
1f2d565
Port iButton TIM1 to furi_hal_bus
gsurkov May 5, 2023
6aaeb90
Port Infrared TIM1 and TIM2 to furi_hal_bus
gsurkov May 5, 2023
5ec24d6
Just enable the timer bus
gsurkov May 5, 2023
9698164
Port furi_hal_pwm to bus API
gsurkov May 5, 2023
8b805ac
Fix include statement
gsurkov May 5, 2023
344eabe
Port furi_hal_rfid to bus API
gsurkov May 5, 2023
be034e6
Merge dev, resolve conflicts
gsurkov May 10, 2023
786abd7
Port furi_hal_subghz and others to bus API
gsurkov May 10, 2023
c55b1ef
Remove unneeded include
gsurkov May 10, 2023
9c50517
Improve furi_hal_infrared defines
gsurkov May 10, 2023
ee8f22d
Reset LPTIM1 via furi_hal_bus API
gsurkov May 11, 2023
9c8e32a
Correct formatting
gsurkov May 12, 2023
b125091
Crash when trying to enable an already enabled peripheral
gsurkov May 15, 2023
3c47b89
Merge remote-tracking branch 'origin' into aku/stop_verification_toolkit
gsurkov May 15, 2023
8a61c3f
Better defines
gsurkov May 15, 2023
0de8679
Improved checks
gsurkov May 15, 2023
147b2d0
Lots of macro wrappers
gsurkov May 16, 2023
9be0c6e
Copy spi changes for f18
gsurkov May 16, 2023
08ce87f
Fix crashes in LFRFID system
gsurkov May 16, 2023
9110848
Fix crashes in NFC system
gsurkov May 16, 2023
62e6779
Improve comments
gsurkov May 16, 2023
c96dd9c
Create FuriHalBus.md
gsurkov May 16, 2023
537251f
Update FuriHalBus.md
gsurkov May 16, 2023
839388a
Fix crash when launching updater
gsurkov May 17, 2023
931951e
Documentation: couple small fixes in FuriHalBus
skotopes May 25, 2023
5d2e3c3
FuriHal: fix copypaste in furi_hal_rfid_tim_reset
skotopes May 26, 2023
d434251
Merge remote-tracking branch 'origin/dev' into aku/stop_verification_…
skotopes May 26, 2023
fde50d8
FuriHal: reset radio core related peripherals on restart
skotopes May 26, 2023
5ebe14d
Merge branch 'dev' into aku/stop_verification_toolkit
skotopes May 29, 2023
e08e14c
Format sources and fix pvs warnings
skotopes May 29, 2023
5f4c590
FuriHalBus: is enabled routine and bug fix for uart
skotopes May 29, 2023
1ad99cc
RFID HAL: accomodate furi hal bus
DrZlo13 May 29, 2023
d68acd4
Update f18 api
DrZlo13 May 29, 2023
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 @@ -14,9 +14,7 @@ void lfrfid_debug_scene_tune_on_enter(void* context) {
furi_hal_rfid_comp_set_callback(comparator_trigger_callback, app);
furi_hal_rfid_comp_start();

furi_hal_rfid_pins_read();
furi_hal_rfid_tim_read(125000, 0.5);
furi_hal_rfid_tim_read_start();
furi_hal_rfid_tim_read_start(125000, 0.5);

view_dispatcher_switch_to_view(app->view_dispatcher, LfRfidDebugViewTune);
}
Expand All @@ -43,6 +41,5 @@ void lfrfid_debug_scene_tune_on_exit(void* context) {

furi_hal_gpio_init_simple(&gpio_ext_pa7, GpioModeAnalog);
furi_hal_rfid_tim_read_stop();
furi_hal_rfid_tim_reset();
furi_hal_rfid_pins_reset();
}
113 changes: 113 additions & 0 deletions documentation/FuriHalBus.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# Using FuriHalBus API

## Basic info

On system startup, most of the peripheral devices are under reset and not clocked by default. This is done to reduce power consumption and to guarantee that the device will always be in the same state before use.
Some crucial peripherals are enabled right away by the system, others must be explicitly enabled by the user code.

**NOTE:** Here and afterwards the word *"system"* refers to any code belonging to the operating system, hardware drivers or built-in applications.

To **ENABLE** a peripheral, call `furi_hal_bus_enable()`. At the time of the call, the peripheral in question MUST be disabled, otherwise a crash will occur to indicate improper use. This means that any given peripheral cannot be enabled twice or more without disabling it first.

To **DISABLE** a peripheral, call `furi_hal_bus_disable()`. Likewise, the peripheral in question MUST be enabled, otherwise a crash will occur.

To **RESET** a peripheral, call `furi_hal_bus_reset()`. The peripheral in question MUST be enabled, otherwise a crash will occur. This method is used whenever it is necessary to reset all the peripheral's registers to their initial states without disabling it.

## Peripherals

Built-in peripherals are divided into three categories:
- Enabled by the system on startup, never disabled;
- Enabled and disabled by the system on demand;
- Enabled and disabled by the user code.

### Always-on peripherals

Below is the list of peripherals that are enabled by the system. The user code must NEVER attempt to disable them. If a corresponding API is provided, the user code must employ it in order to access the peripheral.

*Table 1* - Peripherals enabled by the system

| Peripheral | Enabled at |
| :-----------: | :-----------------------: |
| DMA1 | `furi_hal_dma.c` |
| DMA2 | -- |
| DMAMUX | -- |
| GPIOA | `furi_hal_resources.c` |
| GPIOB | -- |
| GPIOC | -- |
| GPIOD | -- |
| GPIOE | -- |
| GPIOH | -- |
| PKA | `furi_hal_bt.c` |
| AES2 | -- |
| HSEM | -- |
| IPCC | -- |
| FLASH | enabled by hardware |

### On-demand system peripherals

Below is the list of peripherals that are enabled and disabled by the system. The user code must avoid using them directly, preferring the respective APIs instead.

When not using the API, these peripherals MUST be enabled by the user code and then disabled when not needed anymore.

*Table 2* - Peripherals enabled and disabled by the system

| Peripheral | API header file |
| :-----------: | :-------------------: |
| RNG | `furi_hal_random.h` |
| SPI1 | `furi_hal_spi.h` |
| SPI2 | -- |
| I2C1 | `furi_hal_i2c.h` |
| I2C3 | -- |
| USART1 | `furi_hal_uart.h` |
| LPUART1 | -- |
| USB | `furi_hal_usb.h` |

### On-demand shared peripherals

Below is the list of peripherals that are not enabled by default and MUST be enabled by the user code each time it accesses them.

Note that some of these peripherals may also be used by the system to implement its certain features.
The system will take over any given peripheral only when the respective feature is in use.

*Table 3* - Peripherals enabled and disabled by user

| Peripheral | System | Purpose |
| :-----------: | :-------: | ------------------------------------- |
| CRC | | |
| TSC | | |
| ADC | | |
| QUADSPI | | |
| TIM1 | yes | subghz, lfrfid, nfc, infrared, etc... |
| TIM2 | yes | -- |
| TIM16 | yes | speaker |
| TIM17 | | |
| LPTIM1 | yes | tickless idle timer |
| LPTIM2 | yes | pwm |
| SAI1 | | |
| LCD | | |


## DMA

The DMA1,2 peripherals are a special case in that they have multiple independent channels. Some of the channels may be in use by the system.

Below is the list of DMA channels and their usage by the system.

*Table 4* - DMA channels

| DMA | Channel | System | Purpose |
| :---: | :-------: | :-------: | ------------------------- |
| DMA1 | 1 | yes | digital signal |
| -- | 2 | yes | -- |
| -- | 3 | | |
| -- | 4 | yes | pulse reader |
| -- | 5 | | |
| -- | 6 | | |
| -- | 7 | | |
| DMA2 | 1 | yes | infrared, lfrfid, subghz |
| -- | 2 | yes | -- |
| -- | 3 | yes | SPI |
| -- | 4 | yes | SPI |
| -- | 5 | | |
| -- | 6 | | |
| -- | 7 | | |
13 changes: 12 additions & 1 deletion firmware/targets/f18/api_symbols.csv
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
entry,status,name,type,params
Version,+,27.1,,
Version,+,28.0,,
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 @@ -40,8 +40,10 @@ Header,-,firmware/targets/f18/furi_hal/furi_hal_power_calibration.h,,
Header,+,firmware/targets/f18/furi_hal/furi_hal_resources.h,,
Header,+,firmware/targets/f18/furi_hal/furi_hal_spi_config.h,,
Header,+,firmware/targets/f18/furi_hal/furi_hal_target_hw.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_bus.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_clock.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_console.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_dma.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_flash.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_gpio.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_i2c_config.h,,
Expand Down Expand Up @@ -873,6 +875,12 @@ Function,+,furi_hal_bt_stop_tone_tx,void,
Function,+,furi_hal_bt_unlock_core2,void,
Function,+,furi_hal_bt_update_battery_level,void,uint8_t
Function,+,furi_hal_bt_update_power_state,void,
Function,+,furi_hal_bus_deinit_early,void,
Function,+,furi_hal_bus_disable,void,FuriHalBus
Function,+,furi_hal_bus_enable,void,FuriHalBus
Function,+,furi_hal_bus_init_early,void,
Function,+,furi_hal_bus_is_enabled,_Bool,FuriHalBus
Function,+,furi_hal_bus_reset,void,FuriHalBus
Function,+,furi_hal_cdc_get_ctrl_line_state,uint8_t,uint8_t
Function,+,furi_hal_cdc_get_port_settings,usb_cdc_line_coding*,uint8_t
Function,+,furi_hal_cdc_receive,int32_t,"uint8_t, uint8_t*, uint16_t"
Expand Down Expand Up @@ -915,6 +923,8 @@ Function,+,furi_hal_debug_disable,void,
Function,+,furi_hal_debug_enable,void,
Function,+,furi_hal_debug_is_gdb_session_active,_Bool,
Function,-,furi_hal_deinit_early,void,
Function,+,furi_hal_dma_deinit_early,void,
Function,+,furi_hal_dma_init_early,void,
Function,-,furi_hal_flash_erase,void,uint8_t
Function,-,furi_hal_flash_get_base,size_t,
Function,-,furi_hal_flash_get_cycles_count,size_t,
Expand Down Expand Up @@ -1033,6 +1043,7 @@ Function,+,furi_hal_pwm_start,void,"FuriHalPwmOutputId, uint32_t, uint8_t"
Function,+,furi_hal_pwm_stop,void,FuriHalPwmOutputId
Function,+,furi_hal_random_fill_buf,void,"uint8_t*, uint32_t"
Function,+,furi_hal_random_get,uint32_t,
Function,+,furi_hal_random_init,void,
Function,+,furi_hal_region_get,const FuriHalRegion*,
Function,+,furi_hal_region_get_band,const FuriHalRegionBand*,uint32_t
Function,+,furi_hal_region_get_name,const char*,
Expand Down
5 changes: 5 additions & 0 deletions firmware/targets/f18/furi_hal/furi_hal.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
void furi_hal_init_early() {
furi_hal_cortex_init_early();
furi_hal_clock_init_early();
furi_hal_bus_init_early();
furi_hal_dma_init_early();
furi_hal_resources_init_early();
furi_hal_os_init();
furi_hal_spi_config_init_early();
Expand All @@ -22,12 +24,15 @@ void furi_hal_deinit_early() {
furi_hal_i2c_deinit_early();
furi_hal_spi_config_deinit_early();
furi_hal_resources_deinit_early();
furi_hal_dma_deinit_early();
furi_hal_bus_deinit_early();
furi_hal_clock_deinit_early();
}

void furi_hal_init() {
furi_hal_mpu_init();
furi_hal_clock_init();
furi_hal_random_init();
furi_hal_console_init();
furi_hal_rtc_init();
furi_hal_interrupt_init();
Expand Down
14 changes: 14 additions & 0 deletions firmware/targets/f18/furi_hal/furi_hal_resources.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include <furi_hal_resources.h>
#include <furi_hal_bus.h>
#include <furi.h>

#include <stm32wbxx_ll_rcc.h>
Expand Down Expand Up @@ -118,6 +119,13 @@ static void furi_hal_resources_init_input_pins(GpioMode mode) {
}

void furi_hal_resources_init_early() {
furi_hal_bus_enable(FuriHalBusGPIOA);
furi_hal_bus_enable(FuriHalBusGPIOB);
furi_hal_bus_enable(FuriHalBusGPIOC);
furi_hal_bus_enable(FuriHalBusGPIOD);
furi_hal_bus_enable(FuriHalBusGPIOE);
furi_hal_bus_enable(FuriHalBusGPIOH);

furi_hal_resources_init_input_pins(GpioModeInput);

// SD Card stepdown control
Expand Down Expand Up @@ -162,6 +170,12 @@ void furi_hal_resources_init_early() {

void furi_hal_resources_deinit_early() {
furi_hal_resources_init_input_pins(GpioModeAnalog);
furi_hal_bus_disable(FuriHalBusGPIOA);
furi_hal_bus_disable(FuriHalBusGPIOB);
furi_hal_bus_disable(FuriHalBusGPIOC);
furi_hal_bus_disable(FuriHalBusGPIOD);
furi_hal_bus_disable(FuriHalBusGPIOE);
furi_hal_bus_disable(FuriHalBusGPIOH);
}

void furi_hal_resources_init() {
Expand Down
31 changes: 5 additions & 26 deletions firmware/targets/f18/furi_hal/furi_hal_spi_config.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include <furi_hal_spi_config.h>
#include <furi_hal_resources.h>
#include <furi_hal_bus.h>
#include <furi_hal_spi.h>
#include <furi.h>

Expand Down Expand Up @@ -96,28 +97,17 @@ void furi_hal_spi_config_init() {
static void furi_hal_spi_bus_r_event_callback(FuriHalSpiBus* bus, FuriHalSpiBusEvent event) {
if(event == FuriHalSpiBusEventInit) {
furi_hal_spi_bus_r_mutex = furi_mutex_alloc(FuriMutexTypeNormal);
FURI_CRITICAL_ENTER();
LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_SPI1);
FURI_CRITICAL_EXIT();
bus->current_handle = NULL;
} else if(event == FuriHalSpiBusEventDeinit) {
furi_mutex_free(furi_hal_spi_bus_r_mutex);
FURI_CRITICAL_ENTER();
LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_SPI1);
LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_SPI1);
FURI_CRITICAL_EXIT();
} else if(event == FuriHalSpiBusEventLock) {
furi_check(furi_mutex_acquire(furi_hal_spi_bus_r_mutex, FuriWaitForever) == FuriStatusOk);
} else if(event == FuriHalSpiBusEventUnlock) {
furi_check(furi_mutex_release(furi_hal_spi_bus_r_mutex) == FuriStatusOk);
} else if(event == FuriHalSpiBusEventActivate) {
FURI_CRITICAL_ENTER();
LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_SPI1);
FURI_CRITICAL_EXIT();
furi_hal_bus_enable(FuriHalBusSPI1);
} else if(event == FuriHalSpiBusEventDeactivate) {
FURI_CRITICAL_ENTER();
LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_SPI1);
FURI_CRITICAL_EXIT();
furi_hal_bus_disable(FuriHalBusSPI1);
}
}

Expand All @@ -131,28 +121,17 @@ FuriMutex* furi_hal_spi_bus_d_mutex = NULL;
static void furi_hal_spi_bus_d_event_callback(FuriHalSpiBus* bus, FuriHalSpiBusEvent event) {
if(event == FuriHalSpiBusEventInit) {
furi_hal_spi_bus_d_mutex = furi_mutex_alloc(FuriMutexTypeNormal);
FURI_CRITICAL_ENTER();
LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_SPI2);
FURI_CRITICAL_EXIT();
bus->current_handle = NULL;
} else if(event == FuriHalSpiBusEventDeinit) {
furi_mutex_free(furi_hal_spi_bus_d_mutex);
FURI_CRITICAL_ENTER();
LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_SPI2);
LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_SPI2);
FURI_CRITICAL_EXIT();
} else if(event == FuriHalSpiBusEventLock) {
furi_check(furi_mutex_acquire(furi_hal_spi_bus_d_mutex, FuriWaitForever) == FuriStatusOk);
} else if(event == FuriHalSpiBusEventUnlock) {
furi_check(furi_mutex_release(furi_hal_spi_bus_d_mutex) == FuriStatusOk);
} else if(event == FuriHalSpiBusEventActivate) {
FURI_CRITICAL_ENTER();
LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_SPI2);
FURI_CRITICAL_EXIT();
furi_hal_bus_enable(FuriHalBusSPI2);
} else if(event == FuriHalSpiBusEventDeactivate) {
FURI_CRITICAL_ENTER();
LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_SPI2);
FURI_CRITICAL_EXIT();
furi_hal_bus_disable(FuriHalBusSPI2);
}
}

Expand Down
27 changes: 15 additions & 12 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,+,27.1,,
Version,+,28.0,,
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 @@ -36,8 +36,10 @@ Header,+,applications/services/notification/notification_messages.h,,
Header,+,applications/services/power/power_service/power.h,,
Header,+,applications/services/rpc/rpc_app.h,,
Header,+,applications/services/storage/storage.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_bus.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_clock.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_console.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_dma.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_flash.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_gpio.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_i2c_config.h,,
Expand Down Expand Up @@ -1065,6 +1067,12 @@ Function,+,furi_hal_bt_stop_tone_tx,void,
Function,+,furi_hal_bt_unlock_core2,void,
Function,+,furi_hal_bt_update_battery_level,void,uint8_t
Function,+,furi_hal_bt_update_power_state,void,
Function,+,furi_hal_bus_deinit_early,void,
Function,+,furi_hal_bus_disable,void,FuriHalBus
Function,+,furi_hal_bus_enable,void,FuriHalBus
Function,+,furi_hal_bus_init_early,void,
Function,+,furi_hal_bus_is_enabled,_Bool,FuriHalBus
Function,+,furi_hal_bus_reset,void,FuriHalBus
Function,+,furi_hal_cdc_get_ctrl_line_state,uint8_t,uint8_t
Function,+,furi_hal_cdc_get_port_settings,usb_cdc_line_coding*,uint8_t
Function,+,furi_hal_cdc_receive,int32_t,"uint8_t, uint8_t*, uint16_t"
Expand Down Expand Up @@ -1107,6 +1115,8 @@ Function,+,furi_hal_debug_disable,void,
Function,+,furi_hal_debug_enable,void,
Function,+,furi_hal_debug_is_gdb_session_active,_Bool,
Function,-,furi_hal_deinit_early,void,
Function,+,furi_hal_dma_deinit_early,void,
Function,+,furi_hal_dma_init_early,void,
Function,-,furi_hal_flash_erase,void,uint8_t
Function,-,furi_hal_flash_get_base,size_t,
Function,-,furi_hal_flash_get_cycles_count,size_t,
Expand Down Expand Up @@ -1273,6 +1283,7 @@ Function,+,furi_hal_pwm_start,void,"FuriHalPwmOutputId, uint32_t, uint8_t"
Function,+,furi_hal_pwm_stop,void,FuriHalPwmOutputId
Function,+,furi_hal_random_fill_buf,void,"uint8_t*, uint32_t"
Function,+,furi_hal_random_get,uint32_t,
Function,+,furi_hal_random_init,void,
Function,+,furi_hal_region_get,const FuriHalRegion*,
Function,+,furi_hal_region_get_band,const FuriHalRegionBand*,uint32_t
Function,+,furi_hal_region_get_name,const char*,
Expand All @@ -1284,31 +1295,23 @@ Function,-,furi_hal_resources_deinit_early,void,
Function,+,furi_hal_resources_get_ext_pin_number,int32_t,const GpioPin*
Function,-,furi_hal_resources_init,void,
Function,-,furi_hal_resources_init_early,void,
Function,+,furi_hal_rfid_change_read_config,void,"float, float"
Function,+,furi_hal_rfid_comp_set_callback,void,"FuriHalRfidCompCallback, void*"
Function,+,furi_hal_rfid_comp_start,void,
Function,+,furi_hal_rfid_comp_stop,void,
Function,-,furi_hal_rfid_init,void,
Function,+,furi_hal_rfid_pin_pull_pulldown,void,
Function,+,furi_hal_rfid_pin_pull_release,void,
Function,+,furi_hal_rfid_pins_emulate,void,
Function,+,furi_hal_rfid_pins_read,void,
Function,+,furi_hal_rfid_pins_reset,void,
Function,+,furi_hal_rfid_set_emulate_period,void,uint32_t
Function,+,furi_hal_rfid_set_emulate_pulse,void,uint32_t
Function,+,furi_hal_rfid_set_read_period,void,uint32_t
Function,+,furi_hal_rfid_set_read_pulse,void,uint32_t
Function,+,furi_hal_rfid_tim_emulate,void,float
Function,+,furi_hal_rfid_tim_emulate_dma_start,void,"uint32_t*, uint32_t*, size_t, FuriHalRfidDMACallback, void*"
Function,+,furi_hal_rfid_tim_emulate_dma_stop,void,
Function,+,furi_hal_rfid_tim_emulate_start,void,"FuriHalRfidEmulateCallback, void*"
Function,+,furi_hal_rfid_tim_emulate_stop,void,
Function,+,furi_hal_rfid_tim_read,void,"float, float"
Function,+,furi_hal_rfid_tim_read_capture_start,void,"FuriHalRfidReadCaptureCallback, void*"
Function,+,furi_hal_rfid_tim_read_capture_stop,void,
Function,+,furi_hal_rfid_tim_read_start,void,
Function,+,furi_hal_rfid_tim_read_continue,void,
Function,+,furi_hal_rfid_tim_read_pause,void,
Function,+,furi_hal_rfid_tim_read_start,void,"float, float"
Function,+,furi_hal_rfid_tim_read_stop,void,
Function,+,furi_hal_rfid_tim_reset,void,
Function,+,furi_hal_rtc_datetime_to_timestamp,uint32_t,FuriHalRtcDateTime*
Function,-,furi_hal_rtc_deinit_early,void,
Function,+,furi_hal_rtc_get_boot_mode,FuriHalRtcBootMode,
Expand Down
Loading