This commit is contained in:
VerstreuteSeele
2023-02-07 19:12:13 +01:00
230 changed files with 10476 additions and 595 deletions

View File

@@ -42,14 +42,19 @@ 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,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_i2c_types.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_ibutton.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_idle_timer.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_interrupt.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_nfc.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_os.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_pwm.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_resources.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_rfid.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_spi_config.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_spi_types.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_subghz.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_subghz_configs.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_target_hw.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_uart.h,,
Header,+,firmware/targets/f7/furi_hal/furi_hal_usb_cdc.h,,
Header,+,firmware/targets/f7/platform_specific/intrinsic_export.h,,
@@ -62,22 +67,18 @@ Header,+,firmware/targets/furi_hal_include/furi_hal_cortex.h,,
Header,+,firmware/targets/furi_hal_include/furi_hal_crypto.h,,
Header,+,firmware/targets/furi_hal_include/furi_hal_debug.h,,
Header,+,firmware/targets/furi_hal_include/furi_hal_i2c.h,,
Header,+,firmware/targets/furi_hal_include/furi_hal_ibutton.h,,
Header,+,firmware/targets/furi_hal_include/furi_hal_info.h,,
Header,+,firmware/targets/furi_hal_include/furi_hal_infrared.h,,
Header,+,firmware/targets/furi_hal_include/furi_hal_light.h,,
Header,+,firmware/targets/furi_hal_include/furi_hal_memory.h,,
Header,+,firmware/targets/furi_hal_include/furi_hal_mpu.h,,
Header,+,firmware/targets/furi_hal_include/furi_hal_nfc.h,,
Header,+,firmware/targets/furi_hal_include/furi_hal_power.h,,
Header,+,firmware/targets/furi_hal_include/furi_hal_random.h,,
Header,+,firmware/targets/furi_hal_include/furi_hal_region.h,,
Header,+,firmware/targets/furi_hal_include/furi_hal_rfid.h,,
Header,+,firmware/targets/furi_hal_include/furi_hal_rtc.h,,
Header,+,firmware/targets/furi_hal_include/furi_hal_sd.h,,
Header,+,firmware/targets/furi_hal_include/furi_hal_speaker.h,,
Header,+,firmware/targets/furi_hal_include/furi_hal_spi.h,,
Header,+,firmware/targets/furi_hal_include/furi_hal_subghz.h,,
Header,+,firmware/targets/furi_hal_include/furi_hal_usb.h,,
Header,+,firmware/targets/furi_hal_include/furi_hal_usb_hid.h,,
Header,+,firmware/targets/furi_hal_include/furi_hal_usb_hid_u2f.h,,
@@ -153,6 +154,16 @@ Header,+,lib/libusb_stm32/inc/usbd_core.h,,
Header,+,lib/mbedtls/include/mbedtls/des.h,,
Header,+,lib/mbedtls/include/mbedtls/sha1.h,,
Header,+,lib/micro-ecc/uECC.h,,
Header,+,lib/mlib/m-algo.h,,
Header,+,lib/mlib/m-array.h,,
Header,+,lib/mlib/m-bptree.h,,
Header,+,lib/mlib/m-core.h,,
Header,+,lib/mlib/m-deque.h,,
Header,+,lib/mlib/m-dict.h,,
Header,+,lib/mlib/m-list.h,,
Header,+,lib/mlib/m-rbtree.h,,
Header,+,lib/mlib/m-tuple.h,,
Header,+,lib/mlib/m-variant.h,,
Header,+,lib/nfc/nfc_device.h,,
Header,+,lib/one_wire/ibutton/ibutton_worker.h,,
Header,+,lib/one_wire/maxim_crc.h,,
@@ -877,6 +888,7 @@ Function,+,flipper_application_free,void,FlipperApplication*
Function,+,flipper_application_get_manifest,const FlipperApplicationManifest*,FlipperApplication*
Function,+,flipper_application_load_status_to_string,const char*,FlipperApplicationLoadStatus
Function,+,flipper_application_manifest_is_compatible,_Bool,"const FlipperApplicationManifest*, const ElfApiInterface*"
Function,+,flipper_application_manifest_is_target_compatible,_Bool,const FlipperApplicationManifest*
Function,+,flipper_application_manifest_is_valid,_Bool,const FlipperApplicationManifest*
Function,+,flipper_application_map_to_memory,FlipperApplicationLoadStatus,FlipperApplication*
Function,+,flipper_application_preload,FlipperApplicationPreloadStatus,"FlipperApplication*, const char*"
@@ -1047,7 +1059,7 @@ 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"
Function,+,furi_hal_cdc_send,void,"uint8_t, uint8_t*, uint16_t"
Function,+,furi_hal_cdc_set_callbacks,void,"uint8_t, CdcCallbacks*, void*"
Function,+,furi_hal_clock_deinit_early,void,
Function,-,furi_hal_clock_deinit_early,void,
Function,-,furi_hal_clock_init,void,
Function,-,furi_hal_clock_init_early,void,
Function,+,furi_hal_clock_mco_disable,void,
@@ -1128,7 +1140,7 @@ Function,+,furi_hal_hid_u2f_is_connected,_Bool,
Function,+,furi_hal_hid_u2f_send_response,void,"uint8_t*, uint8_t"
Function,+,furi_hal_hid_u2f_set_callback,void,"HidU2fCallback, void*"
Function,+,furi_hal_i2c_acquire,void,FuriHalI2cBusHandle*
Function,+,furi_hal_i2c_deinit_early,void,
Function,-,furi_hal_i2c_deinit_early,void,
Function,-,furi_hal_i2c_init,void,
Function,-,furi_hal_i2c_init_early,void,
Function,+,furi_hal_i2c_is_device_ready,_Bool,"FuriHalI2cBusHandle*, uint8_t, uint32_t"
@@ -1266,7 +1278,7 @@ Function,+,furi_hal_region_init,void,
Function,+,furi_hal_region_is_frequency_allowed,_Bool,uint32_t
Function,+,furi_hal_region_is_provisioned,_Bool,
Function,+,furi_hal_region_set,void,FuriHalRegion*
Function,+,furi_hal_resources_deinit_early,void,
Function,-,furi_hal_resources_deinit_early,void,
Function,-,furi_hal_resources_init,void,
Function,-,furi_hal_resources_init_early,void,
Function,+,furi_hal_rfid_change_read_config,void,"float, float"
@@ -1295,7 +1307,7 @@ Function,+,furi_hal_rfid_tim_read_start,void,
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_deinit_early,void,
Function,+,furi_hal_rtc_get_boot_mode,FuriHalRtcBootMode,
Function,+,furi_hal_rtc_get_datetime,void,FuriHalRtcDateTime*
Function,+,furi_hal_rtc_get_fault_data,uint32_t,
@@ -1339,9 +1351,9 @@ Function,+,furi_hal_spi_bus_init,void,FuriHalSpiBus*
Function,+,furi_hal_spi_bus_rx,_Bool,"FuriHalSpiBusHandle*, uint8_t*, size_t, uint32_t"
Function,+,furi_hal_spi_bus_trx,_Bool,"FuriHalSpiBusHandle*, uint8_t*, uint8_t*, size_t, uint32_t"
Function,+,furi_hal_spi_bus_tx,_Bool,"FuriHalSpiBusHandle*, uint8_t*, size_t, uint32_t"
Function,+,furi_hal_spi_deinit_early,void,
Function,-,furi_hal_spi_init,void,
Function,+,furi_hal_spi_init_early,void,
Function,-,furi_hal_spi_config_deinit_early,void,
Function,-,furi_hal_spi_config_init,void,
Function,-,furi_hal_spi_config_init_early,void,
Function,+,furi_hal_spi_release,void,FuriHalSpiBusHandle*
Function,-,furi_hal_subghz_dump_state,void,
Function,+,furi_hal_subghz_flush_rx,void,
@@ -1396,6 +1408,7 @@ Function,+,furi_hal_version_do_i_belong_here,_Bool,
Function,+,furi_hal_version_get_ble_local_device_name_ptr,const char*,
Function,+,furi_hal_version_get_ble_mac,const uint8_t*,
Function,+,furi_hal_version_get_device_name_ptr,const char*,
Function,+,furi_hal_version_get_fcc_id,const char*,
Function,+,furi_hal_version_get_firmware_version,const Version*,
Function,+,furi_hal_version_get_hw_body,uint8_t,
Function,+,furi_hal_version_get_hw_color,FuriHalVersionColor,
@@ -1406,6 +1419,8 @@ Function,+,furi_hal_version_get_hw_region_name,const char*,
Function,+,furi_hal_version_get_hw_target,uint8_t,
Function,+,furi_hal_version_get_hw_timestamp,uint32_t,
Function,+,furi_hal_version_get_hw_version,uint8_t,
Function,+,furi_hal_version_get_ic_id,const char*,
Function,+,furi_hal_version_get_model_code,const char*,
Function,+,furi_hal_version_get_model_name,const char*,
Function,+,furi_hal_version_get_name_ptr,const char*,
Function,+,furi_hal_version_get_otp_version,FuriHalVersionOtpVersion,
@@ -1895,8 +1910,10 @@ Function,+,menu_reset,void,Menu*
Function,+,menu_set_selected_item,void,"Menu*, uint32_t"
Function,-,mf_classic_auth_attempt,_Bool,"FuriHalNfcTxRxContext*, MfClassicAuthContext*, uint64_t"
Function,-,mf_classic_auth_init_context,void,"MfClassicAuthContext*, uint8_t"
Function,-,mf_classic_auth_write_block,_Bool,"FuriHalNfcTxRxContext*, MfClassicBlock*, uint8_t, MfClassicKey, uint64_t"
Function,-,mf_classic_authenticate,_Bool,"FuriHalNfcTxRxContext*, uint8_t, uint64_t, MfClassicKey"
Function,-,mf_classic_authenticate_skip_activate,_Bool,"FuriHalNfcTxRxContext*, uint8_t, uint64_t, MfClassicKey, _Bool, uint32_t"
Function,-,mf_classic_block_to_value,_Bool,"const uint8_t*, int32_t*, uint8_t*"
Function,-,mf_classic_check_card_type,_Bool,"uint8_t, uint8_t, uint8_t"
Function,-,mf_classic_dict_add_key,_Bool,"MfClassicDict*, uint8_t*"
Function,-,mf_classic_dict_add_key_str,_Bool,"MfClassicDict*, FuriString*"
@@ -1923,6 +1940,7 @@ Function,-,mf_classic_get_sector_trailer_by_sector,MfClassicSectorTrailer*,"MfCl
Function,-,mf_classic_get_total_block_num,uint16_t,MfClassicType
Function,-,mf_classic_get_total_sectors_num,uint8_t,MfClassicType
Function,-,mf_classic_get_type_str,const char*,MfClassicType
Function,-,mf_classic_halt,void,"FuriHalNfcTxRxContext*, Crypto1*"
Function,-,mf_classic_is_allowed_access_data_block,_Bool,"MfClassicData*, uint8_t, MfClassicKey, MfClassicAction"
Function,-,mf_classic_is_allowed_access_sector_trailer,_Bool,"MfClassicData*, uint8_t, MfClassicKey, MfClassicAction"
Function,-,mf_classic_is_block_read,_Bool,"MfClassicData*, uint8_t"
@@ -1931,6 +1949,8 @@ Function,-,mf_classic_is_key_found,_Bool,"MfClassicData*, uint8_t, MfClassicKey"
Function,-,mf_classic_is_sector_data_read,_Bool,"MfClassicData*, uint8_t"
Function,-,mf_classic_is_sector_read,_Bool,"MfClassicData*, uint8_t"
Function,-,mf_classic_is_sector_trailer,_Bool,uint8_t
Function,-,mf_classic_is_value_block,_Bool,"MfClassicData*, uint8_t"
Function,-,mf_classic_read_block,_Bool,"FuriHalNfcTxRxContext*, Crypto1*, uint8_t, MfClassicBlock*"
Function,-,mf_classic_read_card,uint8_t,"FuriHalNfcTxRxContext*, MfClassicReader*, MfClassicData*"
Function,-,mf_classic_read_sector,void,"FuriHalNfcTxRxContext*, MfClassicData*, uint8_t"
Function,-,mf_classic_reader_add_sector,void,"MfClassicReader*, uint8_t, uint64_t, uint64_t"
@@ -1938,8 +1958,12 @@ Function,-,mf_classic_set_block_read,void,"MfClassicData*, uint8_t, MfClassicBlo
Function,-,mf_classic_set_key_found,void,"MfClassicData*, uint8_t, MfClassicKey, uint64_t"
Function,-,mf_classic_set_key_not_found,void,"MfClassicData*, uint8_t, MfClassicKey"
Function,-,mf_classic_set_sector_data_not_read,void,MfClassicData*
Function,-,mf_classic_transfer,_Bool,"FuriHalNfcTxRxContext*, Crypto1*, uint8_t"
Function,-,mf_classic_update_card,uint8_t,"FuriHalNfcTxRxContext*, MfClassicData*"
Function,-,mf_classic_write_block,_Bool,"FuriHalNfcTxRxContext*, MfClassicBlock*, uint8_t, MfClassicKey, uint64_t"
Function,-,mf_classic_value_cmd,_Bool,"FuriHalNfcTxRxContext*, Crypto1*, uint8_t, uint8_t, int32_t"
Function,-,mf_classic_value_cmd_full,_Bool,"FuriHalNfcTxRxContext*, MfClassicBlock*, uint8_t, MfClassicKey, uint64_t, int32_t"
Function,-,mf_classic_value_to_block,void,"int32_t, uint8_t, uint8_t*"
Function,-,mf_classic_write_block,_Bool,"FuriHalNfcTxRxContext*, Crypto1*, uint8_t, MfClassicBlock*"
Function,-,mf_classic_write_sector,_Bool,"FuriHalNfcTxRxContext*, MfClassicData*, MfClassicData*, uint8_t"
Function,-,mf_df_cat_application,void,"MifareDesfireApplication*, FuriString*"
Function,-,mf_df_cat_application_info,void,"MifareDesfireApplication*, FuriString*"
@@ -4637,6 +4661,8 @@ Variable,+,gpio_infrared_rx,const GpioPin,
Variable,+,gpio_infrared_tx,const GpioPin,
Variable,+,gpio_nfc_cs,const GpioPin,
Variable,+,gpio_nfc_irq_rfid_pull,const GpioPin,
Variable,+,gpio_pins,const GpioPinRecord[],
Variable,+,gpio_pins_count,const size_t,
Variable,+,gpio_rf_sw_0,const GpioPin,
Variable,+,gpio_rfid_carrier,const GpioPin,
Variable,+,gpio_rfid_carrier_out,const GpioPin,
1 entry status name type params
42 Header + firmware/targets/f7/furi_hal/furi_hal_gpio.h
43 Header + firmware/targets/f7/furi_hal/furi_hal_i2c_config.h
44 Header + firmware/targets/f7/furi_hal/furi_hal_i2c_types.h
45 Header + firmware/targets/f7/furi_hal/furi_hal_ibutton.h
46 Header + firmware/targets/f7/furi_hal/furi_hal_idle_timer.h
47 Header + firmware/targets/f7/furi_hal/furi_hal_interrupt.h
48 Header + firmware/targets/f7/furi_hal/furi_hal_nfc.h
49 Header + firmware/targets/f7/furi_hal/furi_hal_os.h
50 Header + firmware/targets/f7/furi_hal/furi_hal_pwm.h
51 Header + firmware/targets/f7/furi_hal/furi_hal_resources.h
52 Header + firmware/targets/f7/furi_hal/furi_hal_rfid.h
53 Header + firmware/targets/f7/furi_hal/furi_hal_spi_config.h
54 Header + firmware/targets/f7/furi_hal/furi_hal_spi_types.h
55 Header + firmware/targets/f7/furi_hal/furi_hal_subghz.h
56 Header + firmware/targets/f7/furi_hal/furi_hal_subghz_configs.h
57 Header + firmware/targets/f7/furi_hal/furi_hal_target_hw.h
58 Header + firmware/targets/f7/furi_hal/furi_hal_uart.h
59 Header + firmware/targets/f7/furi_hal/furi_hal_usb_cdc.h
60 Header + firmware/targets/f7/platform_specific/intrinsic_export.h
67 Header + firmware/targets/furi_hal_include/furi_hal_crypto.h
68 Header + firmware/targets/furi_hal_include/furi_hal_debug.h
69 Header + firmware/targets/furi_hal_include/furi_hal_i2c.h
Header + firmware/targets/furi_hal_include/furi_hal_ibutton.h
70 Header + firmware/targets/furi_hal_include/furi_hal_info.h
71 Header + firmware/targets/furi_hal_include/furi_hal_infrared.h
72 Header + firmware/targets/furi_hal_include/furi_hal_light.h
73 Header + firmware/targets/furi_hal_include/furi_hal_memory.h
74 Header + firmware/targets/furi_hal_include/furi_hal_mpu.h
Header + firmware/targets/furi_hal_include/furi_hal_nfc.h
75 Header + firmware/targets/furi_hal_include/furi_hal_power.h
76 Header + firmware/targets/furi_hal_include/furi_hal_random.h
77 Header + firmware/targets/furi_hal_include/furi_hal_region.h
Header + firmware/targets/furi_hal_include/furi_hal_rfid.h
78 Header + firmware/targets/furi_hal_include/furi_hal_rtc.h
79 Header + firmware/targets/furi_hal_include/furi_hal_sd.h
80 Header + firmware/targets/furi_hal_include/furi_hal_speaker.h
81 Header + firmware/targets/furi_hal_include/furi_hal_spi.h
Header + firmware/targets/furi_hal_include/furi_hal_subghz.h
82 Header + firmware/targets/furi_hal_include/furi_hal_usb.h
83 Header + firmware/targets/furi_hal_include/furi_hal_usb_hid.h
84 Header + firmware/targets/furi_hal_include/furi_hal_usb_hid_u2f.h
154 Header + lib/mbedtls/include/mbedtls/des.h
155 Header + lib/mbedtls/include/mbedtls/sha1.h
156 Header + lib/micro-ecc/uECC.h
157 Header + lib/mlib/m-algo.h
158 Header + lib/mlib/m-array.h
159 Header + lib/mlib/m-bptree.h
160 Header + lib/mlib/m-core.h
161 Header + lib/mlib/m-deque.h
162 Header + lib/mlib/m-dict.h
163 Header + lib/mlib/m-list.h
164 Header + lib/mlib/m-rbtree.h
165 Header + lib/mlib/m-tuple.h
166 Header + lib/mlib/m-variant.h
167 Header + lib/nfc/nfc_device.h
168 Header + lib/one_wire/ibutton/ibutton_worker.h
169 Header + lib/one_wire/maxim_crc.h
888 Function + flipper_application_get_manifest const FlipperApplicationManifest* FlipperApplication*
889 Function + flipper_application_load_status_to_string const char* FlipperApplicationLoadStatus
890 Function + flipper_application_manifest_is_compatible _Bool const FlipperApplicationManifest*, const ElfApiInterface*
891 Function + flipper_application_manifest_is_target_compatible _Bool const FlipperApplicationManifest*
892 Function + flipper_application_manifest_is_valid _Bool const FlipperApplicationManifest*
893 Function + flipper_application_map_to_memory FlipperApplicationLoadStatus FlipperApplication*
894 Function + flipper_application_preload FlipperApplicationPreloadStatus FlipperApplication*, const char*
1059 Function + furi_hal_cdc_receive int32_t uint8_t, uint8_t*, uint16_t
1060 Function + furi_hal_cdc_send void uint8_t, uint8_t*, uint16_t
1061 Function + furi_hal_cdc_set_callbacks void uint8_t, CdcCallbacks*, void*
1062 Function + - furi_hal_clock_deinit_early void
1063 Function - furi_hal_clock_init void
1064 Function - furi_hal_clock_init_early void
1065 Function + furi_hal_clock_mco_disable void
1140 Function + furi_hal_hid_u2f_send_response void uint8_t*, uint8_t
1141 Function + furi_hal_hid_u2f_set_callback void HidU2fCallback, void*
1142 Function + furi_hal_i2c_acquire void FuriHalI2cBusHandle*
1143 Function + - furi_hal_i2c_deinit_early void
1144 Function - furi_hal_i2c_init void
1145 Function - furi_hal_i2c_init_early void
1146 Function + furi_hal_i2c_is_device_ready _Bool FuriHalI2cBusHandle*, uint8_t, uint32_t
1278 Function + furi_hal_region_is_frequency_allowed _Bool uint32_t
1279 Function + furi_hal_region_is_provisioned _Bool
1280 Function + furi_hal_region_set void FuriHalRegion*
1281 Function + - furi_hal_resources_deinit_early void
1282 Function - furi_hal_resources_init void
1283 Function - furi_hal_resources_init_early void
1284 Function + furi_hal_rfid_change_read_config void float, float
1307 Function + furi_hal_rfid_tim_read_stop void
1308 Function + furi_hal_rfid_tim_reset void
1309 Function + furi_hal_rtc_datetime_to_timestamp uint32_t FuriHalRtcDateTime*
1310 Function + - furi_hal_rtc_deinit_early void
1311 Function + furi_hal_rtc_get_boot_mode FuriHalRtcBootMode
1312 Function + furi_hal_rtc_get_datetime void FuriHalRtcDateTime*
1313 Function + furi_hal_rtc_get_fault_data uint32_t
1351 Function + furi_hal_spi_bus_rx _Bool FuriHalSpiBusHandle*, uint8_t*, size_t, uint32_t
1352 Function + furi_hal_spi_bus_trx _Bool FuriHalSpiBusHandle*, uint8_t*, uint8_t*, size_t, uint32_t
1353 Function + furi_hal_spi_bus_tx _Bool FuriHalSpiBusHandle*, uint8_t*, size_t, uint32_t
1354 Function + - furi_hal_spi_deinit_early furi_hal_spi_config_deinit_early void
1355 Function - furi_hal_spi_init furi_hal_spi_config_init void
1356 Function + - furi_hal_spi_init_early furi_hal_spi_config_init_early void
1357 Function + furi_hal_spi_release void FuriHalSpiBusHandle*
1358 Function - furi_hal_subghz_dump_state void
1359 Function + furi_hal_subghz_flush_rx void
1408 Function + furi_hal_version_get_ble_local_device_name_ptr const char*
1409 Function + furi_hal_version_get_ble_mac const uint8_t*
1410 Function + furi_hal_version_get_device_name_ptr const char*
1411 Function + furi_hal_version_get_fcc_id const char*
1412 Function + furi_hal_version_get_firmware_version const Version*
1413 Function + furi_hal_version_get_hw_body uint8_t
1414 Function + furi_hal_version_get_hw_color FuriHalVersionColor
1419 Function + furi_hal_version_get_hw_target uint8_t
1420 Function + furi_hal_version_get_hw_timestamp uint32_t
1421 Function + furi_hal_version_get_hw_version uint8_t
1422 Function + furi_hal_version_get_ic_id const char*
1423 Function + furi_hal_version_get_model_code const char*
1424 Function + furi_hal_version_get_model_name const char*
1425 Function + furi_hal_version_get_name_ptr const char*
1426 Function + furi_hal_version_get_otp_version FuriHalVersionOtpVersion
1910 Function + menu_set_selected_item void Menu*, uint32_t
1911 Function - mf_classic_auth_attempt _Bool FuriHalNfcTxRxContext*, MfClassicAuthContext*, uint64_t
1912 Function - mf_classic_auth_init_context void MfClassicAuthContext*, uint8_t
1913 Function - mf_classic_auth_write_block _Bool FuriHalNfcTxRxContext*, MfClassicBlock*, uint8_t, MfClassicKey, uint64_t
1914 Function - mf_classic_authenticate _Bool FuriHalNfcTxRxContext*, uint8_t, uint64_t, MfClassicKey
1915 Function - mf_classic_authenticate_skip_activate _Bool FuriHalNfcTxRxContext*, uint8_t, uint64_t, MfClassicKey, _Bool, uint32_t
1916 Function - mf_classic_block_to_value _Bool const uint8_t*, int32_t*, uint8_t*
1917 Function - mf_classic_check_card_type _Bool uint8_t, uint8_t, uint8_t
1918 Function - mf_classic_dict_add_key _Bool MfClassicDict*, uint8_t*
1919 Function - mf_classic_dict_add_key_str _Bool MfClassicDict*, FuriString*
1940 Function - mf_classic_get_total_block_num uint16_t MfClassicType
1941 Function - mf_classic_get_total_sectors_num uint8_t MfClassicType
1942 Function - mf_classic_get_type_str const char* MfClassicType
1943 Function - mf_classic_halt void FuriHalNfcTxRxContext*, Crypto1*
1944 Function - mf_classic_is_allowed_access_data_block _Bool MfClassicData*, uint8_t, MfClassicKey, MfClassicAction
1945 Function - mf_classic_is_allowed_access_sector_trailer _Bool MfClassicData*, uint8_t, MfClassicKey, MfClassicAction
1946 Function - mf_classic_is_block_read _Bool MfClassicData*, uint8_t
1949 Function - mf_classic_is_sector_data_read _Bool MfClassicData*, uint8_t
1950 Function - mf_classic_is_sector_read _Bool MfClassicData*, uint8_t
1951 Function - mf_classic_is_sector_trailer _Bool uint8_t
1952 Function - mf_classic_is_value_block _Bool MfClassicData*, uint8_t
1953 Function - mf_classic_read_block _Bool FuriHalNfcTxRxContext*, Crypto1*, uint8_t, MfClassicBlock*
1954 Function - mf_classic_read_card uint8_t FuriHalNfcTxRxContext*, MfClassicReader*, MfClassicData*
1955 Function - mf_classic_read_sector void FuriHalNfcTxRxContext*, MfClassicData*, uint8_t
1956 Function - mf_classic_reader_add_sector void MfClassicReader*, uint8_t, uint64_t, uint64_t
1958 Function - mf_classic_set_key_found void MfClassicData*, uint8_t, MfClassicKey, uint64_t
1959 Function - mf_classic_set_key_not_found void MfClassicData*, uint8_t, MfClassicKey
1960 Function - mf_classic_set_sector_data_not_read void MfClassicData*
1961 Function - mf_classic_transfer _Bool FuriHalNfcTxRxContext*, Crypto1*, uint8_t
1962 Function - mf_classic_update_card uint8_t FuriHalNfcTxRxContext*, MfClassicData*
1963 Function - mf_classic_write_block mf_classic_value_cmd _Bool FuriHalNfcTxRxContext*, MfClassicBlock*, uint8_t, MfClassicKey, uint64_t FuriHalNfcTxRxContext*, Crypto1*, uint8_t, uint8_t, int32_t
1964 Function - mf_classic_value_cmd_full _Bool FuriHalNfcTxRxContext*, MfClassicBlock*, uint8_t, MfClassicKey, uint64_t, int32_t
1965 Function - mf_classic_value_to_block void int32_t, uint8_t, uint8_t*
1966 Function - mf_classic_write_block _Bool FuriHalNfcTxRxContext*, Crypto1*, uint8_t, MfClassicBlock*
1967 Function - mf_classic_write_sector _Bool FuriHalNfcTxRxContext*, MfClassicData*, MfClassicData*, uint8_t
1968 Function - mf_df_cat_application void MifareDesfireApplication*, FuriString*
1969 Function - mf_df_cat_application_info void MifareDesfireApplication*, FuriString*
4661 Variable + gpio_infrared_tx const GpioPin
4662 Variable + gpio_nfc_cs const GpioPin
4663 Variable + gpio_nfc_irq_rfid_pull const GpioPin
4664 Variable + gpio_pins const GpioPinRecord[]
4665 Variable + gpio_pins_count const size_t
4666 Variable + gpio_rf_sw_0 const GpioPin
4667 Variable + gpio_rfid_carrier const GpioPin
4668 Variable + gpio_rfid_carrier_out const GpioPin

View File

@@ -17,7 +17,7 @@ void furi_hal_init_early() {
furi_hal_os_init();
furi_hal_spi_init_early();
furi_hal_spi_config_init_early();
furi_hal_i2c_init_early();
furi_hal_light_init();
@@ -29,7 +29,7 @@ void furi_hal_deinit_early() {
furi_hal_rtc_deinit_early();
furi_hal_i2c_deinit_early();
furi_hal_spi_deinit_early();
furi_hal_spi_config_deinit_early();
furi_hal_resources_deinit_early();
@@ -51,7 +51,7 @@ void furi_hal_init() {
furi_hal_version_init();
furi_hal_spi_init();
furi_hal_spi_config_init();
furi_hal_ibutton_init();
FURI_LOG_I(TAG, "iButton OK");

View File

@@ -1,5 +1,5 @@
#include "furi_hal_bt_hid.h"
#include "furi_hal_usb_hid.h"
#include <furi_hal_bt_hid.h>
#include <furi_hal_usb_hid.h>
#include "usb_hid.h"
#include "dev_info_service.h"
#include "battery_service.h"

View File

@@ -1,4 +1,4 @@
#include "furi_hal_bt_serial.h"
#include <furi_hal_bt_serial.h>
#include "dev_info_service.h"
#include "battery_service.h"
#include "serial_service.h"

View File

@@ -1,4 +1,4 @@
#include "furi_hal_cortex.h"
#include <furi_hal_cortex.h>
#include <stm32wbxx.h>

View File

@@ -1,4 +1,4 @@
#include "furi_hal_i2c_config.h"
#include <furi_hal_i2c_config.h>
#include <furi_hal_resources.h>
#include <furi_hal_version.h>
#include <stm32wbxx_ll_bus.h>

View File

@@ -0,0 +1,88 @@
/**
* @file furi_hal_ibutton.h
* iButton HAL API
*/
#pragma once
#include <stdbool.h>
#include <stdint.h>
#include <furi_hal_gpio.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef void (*FuriHalIbuttonEmulateCallback)(void* context);
/** Initialize */
void furi_hal_ibutton_init();
void furi_hal_ibutton_emulate_start(
uint32_t period,
FuriHalIbuttonEmulateCallback callback,
void* context);
void furi_hal_ibutton_emulate_set_next(uint32_t period);
void furi_hal_ibutton_emulate_stop();
/**
* Sets the pin to normal mode (open collector), and sets it to float
*/
void furi_hal_ibutton_start_drive();
/**
* Sets the pin to normal mode (open collector), and clears pin EXTI interrupt.
* Used in EXTI interrupt context.
*/
void furi_hal_ibutton_start_drive_in_isr();
/**
* Sets the pin to interrupt mode (EXTI interrupt on rise or fall), and sets it to float
*/
void furi_hal_ibutton_start_interrupt();
/**
* Sets the pin to interrupt mode (EXTI interrupt on rise or fall), and clears pin EXTI interrupt.
* Used in EXTI interrupt context.
*/
void furi_hal_ibutton_start_interrupt_in_isr();
/**
* Sets the pin to analog mode, and sets it to float
*/
void furi_hal_ibutton_stop();
/**
* Attach interrupt callback to iButton pin
* @param cb callback
* @param context context
*/
void furi_hal_ibutton_add_interrupt(GpioExtiCallback cb, void* context);
/**
* Remove interrupt callback from iButton pin
*/
void furi_hal_ibutton_remove_interrupt();
/**
* Sets the pin to low
*/
void furi_hal_ibutton_pin_low();
/**
* Sets the pin to high (float in iButton pin modes)
*/
void furi_hal_ibutton_pin_high();
/**
* Get pin level
* @return true if level is high
* @return false if level is low
*/
bool furi_hal_ibutton_pin_get_level();
#ifdef __cplusplus
}
#endif

View File

@@ -1,4 +1,4 @@
#include "furi_hal_infrared.h"
#include <furi_hal_infrared.h>
#include <core/check.h>
#include "stm32wbxx_ll_dma.h"
#include "sys/_stdint.h"

View File

@@ -1,5 +1,5 @@
#include "furi_hal_interrupt.h"
#include "furi_hal_os.h"
#include <furi_hal_interrupt.h>
#include <furi_hal_os.h>
#include <furi.h>

View File

@@ -1,5 +1,5 @@
#include <core/common_defines.h>
#include "furi_hal_resources.h"
#include <furi_hal_resources.h>
#include <furi_hal_light.h>
#include <lp5562.h>
#include <stdint.h>

View File

@@ -1,5 +1,5 @@
#include <limits.h>
#include "furi_hal_nfc.h"
#include <furi_hal_nfc.h>
#include <st25r3916.h>
#include <st25r3916_irq.h>
#include <rfal_rf.h>

View File

@@ -0,0 +1,424 @@
/**
* @file furi_hal_nfc.h
* NFC HAL API
*/
#pragma once
#include <st_errno.h>
#include <stdbool.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
#include <rfal_nfc.h>
#include <lib/nfc/protocols/nfca.h>
#define FURI_HAL_NFC_UID_MAX_LEN 10
#define FURI_HAL_NFC_DATA_BUFF_SIZE (512)
#define FURI_HAL_NFC_PARITY_BUFF_SIZE (FURI_HAL_NFC_DATA_BUFF_SIZE / 8)
#define FURI_HAL_NFC_TXRX_DEFAULT \
((uint32_t)RFAL_TXRX_FLAGS_CRC_TX_AUTO | (uint32_t)RFAL_TXRX_FLAGS_CRC_RX_REMV | \
(uint32_t)RFAL_TXRX_FLAGS_PAR_RX_REMV | (uint32_t)RFAL_TXRX_FLAGS_PAR_TX_AUTO)
#define FURI_HAL_NFC_TX_DEFAULT_RX_NO_CRC \
((uint32_t)RFAL_TXRX_FLAGS_CRC_TX_AUTO | (uint32_t)RFAL_TXRX_FLAGS_CRC_RX_KEEP | \
(uint32_t)RFAL_TXRX_FLAGS_PAR_RX_REMV | (uint32_t)RFAL_TXRX_FLAGS_PAR_TX_AUTO)
#define FURI_HAL_NFC_TXRX_WITH_PAR \
((uint32_t)RFAL_TXRX_FLAGS_CRC_TX_MANUAL | (uint32_t)RFAL_TXRX_FLAGS_CRC_RX_KEEP | \
(uint32_t)RFAL_TXRX_FLAGS_PAR_RX_KEEP | (uint32_t)RFAL_TXRX_FLAGS_PAR_TX_AUTO)
#define FURI_HAL_NFC_TXRX_RAW \
((uint32_t)RFAL_TXRX_FLAGS_CRC_TX_MANUAL | (uint32_t)RFAL_TXRX_FLAGS_CRC_RX_KEEP | \
(uint32_t)RFAL_TXRX_FLAGS_PAR_RX_KEEP | (uint32_t)RFAL_TXRX_FLAGS_PAR_TX_NONE)
#define FURI_HAL_NFC_TX_RAW_RX_DEFAULT \
((uint32_t)RFAL_TXRX_FLAGS_CRC_TX_MANUAL | (uint32_t)RFAL_TXRX_FLAGS_CRC_RX_REMV | \
(uint32_t)RFAL_TXRX_FLAGS_PAR_RX_REMV | (uint32_t)RFAL_TXRX_FLAGS_PAR_TX_NONE)
typedef enum {
FuriHalNfcTxRxTypeDefault,
FuriHalNfcTxRxTypeRxNoCrc,
FuriHalNfcTxRxTypeRxKeepPar,
FuriHalNfcTxRxTypeRaw,
FuriHalNfcTxRxTypeRxRaw,
FuriHalNfcTxRxTransparent,
} FuriHalNfcTxRxType;
typedef bool (*FuriHalNfcEmulateCallback)(
uint8_t* buff_rx,
uint16_t buff_rx_len,
uint8_t* buff_tx,
uint16_t* buff_tx_len,
uint32_t* flags,
void* context);
typedef enum {
FuriHalNfcTypeA,
FuriHalNfcTypeB,
FuriHalNfcTypeF,
FuriHalNfcTypeV,
} FuriHalNfcType;
typedef enum {
FuriHalNfcInterfaceRf,
FuriHalNfcInterfaceIsoDep,
FuriHalNfcInterfaceNfcDep,
} FuriHalNfcInterface;
typedef struct {
FuriHalNfcType type;
FuriHalNfcInterface interface;
uint8_t uid_len;
uint8_t uid[10];
uint32_t cuid;
uint8_t atqa[2];
uint8_t sak;
} FuriHalNfcDevData;
typedef void (
*FuriHalNfcTxRxSniffCallback)(uint8_t* data, uint16_t bits, bool crc_dropped, void* context);
typedef struct {
uint8_t tx_data[FURI_HAL_NFC_DATA_BUFF_SIZE];
uint8_t tx_parity[FURI_HAL_NFC_PARITY_BUFF_SIZE];
uint16_t tx_bits;
uint8_t rx_data[FURI_HAL_NFC_DATA_BUFF_SIZE];
uint8_t rx_parity[FURI_HAL_NFC_PARITY_BUFF_SIZE];
uint16_t rx_bits;
FuriHalNfcTxRxType tx_rx_type;
NfcaSignal* nfca_signal;
FuriHalNfcTxRxSniffCallback sniff_tx;
FuriHalNfcTxRxSniffCallback sniff_rx;
void* sniff_context;
} FuriHalNfcTxRxContext;
/** Init nfc
*/
void furi_hal_nfc_init();
/** Check if nfc worker is busy
*
* @return true if busy
*/
bool furi_hal_nfc_is_busy();
/** Check if nfc is initialized
*
* @return true if initialized
*/
bool furi_hal_nfc_is_init();
/** NFC field on
*/
void furi_hal_nfc_field_on();
/** NFC field off
*/
void furi_hal_nfc_field_off();
/** NFC start sleep
*/
void furi_hal_nfc_start_sleep();
void furi_hal_nfc_stop_cmd();
/** NFC stop sleep
*/
void furi_hal_nfc_exit_sleep();
/** NFC poll
*
* @param dev_list pointer to rfalNfcDevice buffer
* @param dev_cnt pointer device count
* @param timeout timeout in ms
* @param deactivate deactivate flag
*
* @return true on success
*/
bool furi_hal_nfc_detect(FuriHalNfcDevData* nfc_data, uint32_t timeout);
/** Activate NFC-A tag
*
* @param timeout timeout in ms
* @param cuid pointer to 32bit uid
*
* @return true on succeess
*/
bool furi_hal_nfc_activate_nfca(uint32_t timeout, uint32_t* cuid);
/** NFC listen
*
* @param uid pointer to uid buffer
* @param uid_len uid length
* @param atqa pointer to atqa
* @param sak sak
* @param activate_after_sak activate after sak flag
* @param timeout timeout in ms
*
* @return true on success
*/
bool furi_hal_nfc_listen(
uint8_t* uid,
uint8_t uid_len,
uint8_t* atqa,
uint8_t sak,
bool activate_after_sak,
uint32_t timeout);
/** Start Target Listen mode
* @note RFAL free implementation
*
* @param nfc_data FuriHalNfcDevData instance
*/
void furi_hal_nfc_listen_start(FuriHalNfcDevData* nfc_data);
/** Read data in Target Listen mode
* @note Must be called only after furi_hal_nfc_listen_start()
*
* @param tx_rx FuriHalNfcTxRxContext instance
* @param timeout_ms timeout im ms
*
* @return true on not empty receive
*/
bool furi_hal_nfc_listen_rx(FuriHalNfcTxRxContext* tx_rx, uint32_t timeout_ms);
/** Set Target in Sleep state */
void furi_hal_nfc_listen_sleep();
/** Emulate NFC-A Target
* @note RFAL based implementation
*
* @param uid NFC-A UID
* @param uid_len NFC-A UID length
* @param atqa NFC-A ATQA
* @param sak NFC-A SAK
* @param callback FuriHalNfcEmulateCallback instance
* @param context pointer to context for callback
* @param timeout timeout in ms
*
* @return true on success
*/
bool furi_hal_nfc_emulate_nfca(
uint8_t* uid,
uint8_t uid_len,
uint8_t* atqa,
uint8_t sak,
FuriHalNfcEmulateCallback callback,
void* context,
uint32_t timeout);
/** NFC data exchange
*
* @param tx_rx_ctx FuriHalNfcTxRxContext instance
*
* @return true on success
*/
bool furi_hal_nfc_tx_rx(FuriHalNfcTxRxContext* tx_rx, uint16_t timeout_ms);
/** NFC data full exhange
*
* @param tx_rx_ctx FuriHalNfcTxRxContext instance
*
* @return true on success
*/
bool furi_hal_nfc_tx_rx_full(FuriHalNfcTxRxContext* tx_rx);
/** NFC deactivate and start sleep
*/
void furi_hal_nfc_sleep();
void furi_hal_nfc_stop();
/* Low level transport API, use it to implement your own transport layers */
#define furi_hal_nfc_ll_ms2fc rfalConvMsTo1fc
#define FURI_HAL_NFC_LL_TXRX_FLAGS_CRC_TX_MANUAL RFAL_TXRX_FLAGS_CRC_TX_MANUAL
#define FURI_HAL_NFC_LL_TXRX_FLAGS_AGC_ON RFAL_TXRX_FLAGS_AGC_ON
#define FURI_HAL_NFC_LL_TXRX_FLAGS_PAR_RX_REMV RFAL_TXRX_FLAGS_PAR_RX_REMV
#define FURI_HAL_NFC_LL_TXRX_FLAGS_CRC_RX_KEEP RFAL_TXRX_FLAGS_CRC_RX_KEEP
typedef enum {
FuriHalNfcReturnOk = 0, /*!< no error occurred */
FuriHalNfcReturnNomem = 1, /*!< not enough memory to perform the requested operation */
FuriHalNfcReturnBusy = 2, /*!< device or resource busy */
FuriHalNfcReturnIo = 3, /*!< generic IO error */
FuriHalNfcReturnTimeout = 4, /*!< error due to timeout */
FuriHalNfcReturnRequest =
5, /*!< invalid request or requested function can't be executed at the moment */
FuriHalNfcReturnNomsg = 6, /*!< No message of desired type */
FuriHalNfcReturnParam = 7, /*!< Parameter error */
FuriHalNfcReturnSystem = 8, /*!< System error */
FuriHalNfcReturnFraming = 9, /*!< Framing error */
FuriHalNfcReturnOverrun = 10, /*!< lost one or more received bytes */
FuriHalNfcReturnProto = 11, /*!< protocol error */
FuriHalNfcReturnInternal = 12, /*!< Internal Error */
FuriHalNfcReturnAgain = 13, /*!< Call again */
FuriHalNfcReturnMemCorrupt = 14, /*!< memory corruption */
FuriHalNfcReturnNotImplemented = 15, /*!< not implemented */
FuriHalNfcReturnPcCorrupt =
16, /*!< Program Counter has been manipulated or spike/noise trigger illegal operation */
FuriHalNfcReturnSend = 17, /*!< error sending*/
FuriHalNfcReturnIgnore = 18, /*!< indicates error detected but to be ignored */
FuriHalNfcReturnSemantic = 19, /*!< indicates error in state machine (unexpected cmd) */
FuriHalNfcReturnSyntax = 20, /*!< indicates error in state machine (unknown cmd) */
FuriHalNfcReturnCrc = 21, /*!< crc error */
FuriHalNfcReturnNotfound = 22, /*!< transponder not found */
FuriHalNfcReturnNotunique =
23, /*!< transponder not unique - more than one transponder in field */
FuriHalNfcReturnNotsupp = 24, /*!< requested operation not supported */
FuriHalNfcReturnWrite = 25, /*!< write error */
FuriHalNfcReturnFifo = 26, /*!< fifo over or underflow error */
FuriHalNfcReturnPar = 27, /*!< parity error */
FuriHalNfcReturnDone = 28, /*!< transfer has already finished */
FuriHalNfcReturnRfCollision =
29, /*!< collision error (Bit Collision or during RF Collision avoidance ) */
FuriHalNfcReturnHwOverrun = 30, /*!< lost one or more received bytes */
FuriHalNfcReturnReleaseReq = 31, /*!< device requested release */
FuriHalNfcReturnSleepReq = 32, /*!< device requested sleep */
FuriHalNfcReturnWrongState = 33, /*!< incorrent state for requested operation */
FuriHalNfcReturnMaxReruns = 34, /*!< blocking procedure reached maximum runs */
FuriHalNfcReturnDisabled = 35, /*!< operation aborted due to disabled configuration */
FuriHalNfcReturnHwMismatch = 36, /*!< expected hw do not match */
FuriHalNfcReturnLinkLoss =
37, /*!< Other device's field didn't behave as expected: turned off by Initiator in Passive mode, or AP2P did not turn on field */
FuriHalNfcReturnInvalidHandle = 38, /*!< invalid or not initalized device handle */
FuriHalNfcReturnIncompleteByte = 40, /*!< Incomplete byte rcvd */
FuriHalNfcReturnIncompleteByte01 = 41, /*!< Incomplete byte rcvd - 1 bit */
FuriHalNfcReturnIncompleteByte02 = 42, /*!< Incomplete byte rcvd - 2 bit */
FuriHalNfcReturnIncompleteByte03 = 43, /*!< Incomplete byte rcvd - 3 bit */
FuriHalNfcReturnIncompleteByte04 = 44, /*!< Incomplete byte rcvd - 4 bit */
FuriHalNfcReturnIncompleteByte05 = 45, /*!< Incomplete byte rcvd - 5 bit */
FuriHalNfcReturnIncompleteByte06 = 46, /*!< Incomplete byte rcvd - 6 bit */
FuriHalNfcReturnIncompleteByte07 = 47, /*!< Incomplete byte rcvd - 7 bit */
} FuriHalNfcReturn;
typedef enum {
FuriHalNfcModeNone = 0, /*!< No mode selected/defined */
FuriHalNfcModePollNfca = 1, /*!< Mode to perform as NFCA (ISO14443A) Poller (PCD) */
FuriHalNfcModePollNfcaT1t = 2, /*!< Mode to perform as NFCA T1T (Topaz) Poller (PCD) */
FuriHalNfcModePollNfcb = 3, /*!< Mode to perform as NFCB (ISO14443B) Poller (PCD) */
FuriHalNfcModePollBPrime = 4, /*!< Mode to perform as B' Calypso (Innovatron) (PCD) */
FuriHalNfcModePollBCts = 5, /*!< Mode to perform as CTS Poller (PCD) */
FuriHalNfcModePollNfcf = 6, /*!< Mode to perform as NFCF (FeliCa) Poller (PCD) */
FuriHalNfcModePollNfcv = 7, /*!< Mode to perform as NFCV (ISO15963) Poller (PCD) */
FuriHalNfcModePollPicopass = 8, /*!< Mode to perform as PicoPass / iClass Poller (PCD) */
FuriHalNfcModePollActiveP2p = 9, /*!< Mode to perform as Active P2P (ISO18092) Initiator */
FuriHalNfcModeListenNfca = 10, /*!< Mode to perform as NFCA (ISO14443A) Listener (PICC) */
FuriHalNfcModeListenNfcb = 11, /*!< Mode to perform as NFCA (ISO14443B) Listener (PICC) */
FuriHalNfcModeListenNfcf = 12, /*!< Mode to perform as NFCA (ISO15963) Listener (PICC) */
FuriHalNfcModeListenActiveP2p = 13 /*!< Mode to perform as Active P2P (ISO18092) Target */
} FuriHalNfcMode;
typedef enum {
FuriHalNfcBitrate106 = 0, /*!< Bit Rate 106 kbit/s (fc/128) */
FuriHalNfcBitrate212 = 1, /*!< Bit Rate 212 kbit/s (fc/64) */
FuriHalNfcBitrate424 = 2, /*!< Bit Rate 424 kbit/s (fc/32) */
FuriHalNfcBitrate848 = 3, /*!< Bit Rate 848 kbit/s (fc/16) */
FuriHalNfcBitrate1695 = 4, /*!< Bit Rate 1695 kbit/s (fc/8) */
FuriHalNfcBitrate3390 = 5, /*!< Bit Rate 3390 kbit/s (fc/4) */
FuriHalNfcBitrate6780 = 6, /*!< Bit Rate 6780 kbit/s (fc/2) */
FuriHalNfcBitrate13560 = 7, /*!< Bit Rate 13560 kbit/s (fc) */
FuriHalNfcBitrate52p97 = 0xEB, /*!< Bit Rate 52.97 kbit/s (fc/256) Fast Mode VICC->VCD */
FuriHalNfcBitrate26p48 =
0xEC, /*!< Bit Rate 26,48 kbit/s (fc/512) NFCV VICC->VCD & VCD->VICC 1of4 */
FuriHalNfcBitrate1p66 = 0xED, /*!< Bit Rate 1,66 kbit/s (fc/8192) NFCV VCD->VICC 1of256 */
FuriHalNfcBitrateKeep = 0xFF /*!< Value indicating to keep the same previous bit rate */
} FuriHalNfcBitrate;
FuriHalNfcReturn
furi_hal_nfc_ll_set_mode(FuriHalNfcMode mode, FuriHalNfcBitrate txBR, FuriHalNfcBitrate rxBR);
#define FURI_HAL_NFC_LL_GT_NFCA furi_hal_nfc_ll_ms2fc(5U) /*!< GTA Digital 2.0 6.10.4.1 & B.2 */
#define FURI_HAL_NFC_LL_GT_NFCB furi_hal_nfc_ll_ms2fc(5U) /*!< GTB Digital 2.0 7.9.4.1 & B.3 */
#define FURI_HAL_NFC_LL_GT_NFCF furi_hal_nfc_ll_ms2fc(20U) /*!< GTF Digital 2.0 8.7.4.1 & B.4 */
#define FURI_HAL_NFC_LL_GT_NFCV furi_hal_nfc_ll_ms2fc(5U) /*!< GTV Digital 2.0 9.7.5.1 & B.5 */
#define FURI_HAL_NFC_LL_GT_PICOPASS furi_hal_nfc_ll_ms2fc(1U) /*!< GT Picopass */
#define FURI_HAL_NFC_LL_GT_AP2P furi_hal_nfc_ll_ms2fc(5U) /*!< TIRFG Ecma 340 11.1.1 */
#define FURI_HAL_NFC_LL_GT_AP2P_ADJUSTED \
furi_hal_nfc_ll_ms2fc( \
5U + \
25U) /*!< Adjusted GT for greater interoperability (Sony XPERIA P, Nokia N9, Huawei P2) */
void furi_hal_nfc_ll_set_guard_time(uint32_t cycles);
typedef enum {
FuriHalNfcErrorHandlingNone = 0, /*!< No special error handling will be performed */
FuriHalNfcErrorHandlingNfc = 1, /*!< Error handling set to perform as NFC compliant device */
FuriHalNfcErrorHandlingEmvco =
2 /*!< Error handling set to perform as EMVCo compliant device */
} FuriHalNfcErrorHandling;
void furi_hal_nfc_ll_set_error_handling(FuriHalNfcErrorHandling eHandling);
/* RFAL Frame Delay Time (FDT) Listen default values */
#define FURI_HAL_NFC_LL_FDT_LISTEN_NFCA_POLLER \
1172U /*!< FDTA,LISTEN,MIN (n=9) Last bit: Logic "1" - tnn,min/2 Digital 1.1 6.10 ; EMV CCP Spec Book D v2.01 4.8.1.3 */
#define FURI_HAL_NFC_LL_FDT_LISTEN_NFCB_POLLER \
1008U /*!< TR0B,MIN Digital 1.1 7.1.3 & A.3 ; EMV CCP Spec Book D v2.01 4.8.1.3 & Table A.5 */
#define FURI_HAL_NFC_LL_FDT_LISTEN_NFCF_POLLER \
2672U /*!< TR0F,LISTEN,MIN Digital 1.1 8.7.1.1 & A.4 */
#define FURI_HAL_NFC_LL_FDT_LISTEN_NFCV_POLLER \
4310U /*!< FDTV,LISTEN,MIN t1 min Digital 2.1 B.5 ; ISO15693-3 2009 9.1 */
#define FURI_HAL_NFC_LL_FDT_LISTEN_PICOPASS_POLLER \
3400U /*!< ISO15693 t1 min - observed adjustment */
#define FURI_HAL_NFC_LL_FDT_LISTEN_AP2P_POLLER \
64U /*!< FDT AP2P No actual FDTListen is required as fields switch and collision avoidance */
#define FURI_HAL_NFC_LL_FDT_LISTEN_NFCA_LISTENER 1172U /*!< FDTA,LISTEN,MIN Digital 1.1 6.10 */
#define FURI_HAL_NFC_LL_FDT_LISTEN_NFCB_LISTENER \
1024U /*!< TR0B,MIN Digital 1.1 7.1.3 & A.3 ; EMV CCP Spec Book D v2.01 4.8.1.3 & Table A.5 */
#define FURI_HAL_NFC_LL_FDT_LISTEN_NFCF_LISTENER \
2688U /*!< TR0F,LISTEN,MIN Digital 2.1 8.7.1.1 & B.4 */
#define FURI_HAL_NFC_LL_FDT_LISTEN_AP2P_LISTENER \
64U /*!< FDT AP2P No actual FDTListen exists as fields switch and collision avoidance */
void furi_hal_nfc_ll_set_fdt_listen(uint32_t cycles);
/* RFAL Frame Delay Time (FDT) Poll default values */
#define FURI_HAL_NFC_LL_FDT_POLL_NFCA_POLLER \
6780U /*!< FDTA,POLL,MIN Digital 1.1 6.10.3.1 & A.2 */
#define FURI_HAL_NFC_LL_FDT_POLL_NFCA_T1T_POLLER \
384U /*!< RRDDT1T,MIN,B1 Digital 1.1 10.7.1 & A.5 */
#define FURI_HAL_NFC_LL_FDT_POLL_NFCB_POLLER \
6780U /*!< FDTB,POLL,MIN = TR2B,MIN,DEFAULT Digital 1.1 7.9.3 & A.3 ; EMVCo 3.0 FDTB,PCD,MIN Table A.5 */
#define FURI_HAL_NFC_LL_FDT_POLL_NFCF_POLLER 6800U /*!< FDTF,POLL,MIN Digital 2.1 8.7.3 & B.4 */
#define FURI_HAL_NFC_LL_FDT_POLL_NFCV_POLLER 4192U /*!< FDTV,POLL Digital 2.1 9.7.3.1 & B.5 */
#define FURI_HAL_NFC_LL_FDT_POLL_PICOPASS_POLLER 1790U /*!< FDT Max */
#define FURI_HAL_NFC_LL_FDT_POLL_AP2P_POLLER \
0U /*!< FDT AP2P No actual FDTPoll exists as fields switch and collision avoidance */
void furi_hal_nfc_ll_set_fdt_poll(uint32_t FDTPoll);
void furi_hal_nfc_ll_txrx_on();
void furi_hal_nfc_ll_txrx_off();
// TODO rework all pollers with furi_hal_nfc_ll_txrx_bits
FuriHalNfcReturn furi_hal_nfc_ll_txrx(
uint8_t* txBuf,
uint16_t txBufLen,
uint8_t* rxBuf,
uint16_t rxBufLen,
uint16_t* actLen,
uint32_t flags,
uint32_t fwt);
FuriHalNfcReturn furi_hal_nfc_ll_txrx_bits(
uint8_t* txBuf,
uint16_t txBufLen,
uint8_t* rxBuf,
uint16_t rxBufLen,
uint16_t* actLen,
uint32_t flags,
uint32_t fwt);
void furi_hal_nfc_ll_poll();
#ifdef __cplusplus
}
#endif

View File

@@ -1,4 +1,4 @@
#include "furi_hal_pwm.h"
#include <furi_hal_pwm.h>
#include <core/check.h>
#include <furi_hal_resources.h>

View File

@@ -1,4 +1,4 @@
#include "furi_hal_random.h"
#include <furi_hal_random.h>
#include <furi.h>
#include <furi_hal.h>
#include <stm32wbxx_ll_rng.h>

View File

@@ -62,6 +62,23 @@ const GpioPin periph_power = {.port = GPIOA, .pin = LL_GPIO_PIN_3};
const GpioPin gpio_usb_dm = {.port = GPIOA, .pin = LL_GPIO_PIN_11};
const GpioPin gpio_usb_dp = {.port = GPIOA, .pin = LL_GPIO_PIN_12};
const GpioPinRecord gpio_pins[] = {
{.pin = &gpio_ext_pa7, .name = "PA7", .debug = false},
{.pin = &gpio_ext_pa6, .name = "PA6", .debug = false},
{.pin = &gpio_ext_pa4, .name = "PA4", .debug = false},
{.pin = &gpio_ext_pb3, .name = "PB3", .debug = false},
{.pin = &gpio_ext_pb2, .name = "PB2", .debug = false},
{.pin = &gpio_ext_pc3, .name = "PC3", .debug = false},
{.pin = &gpio_ext_pc1, .name = "PC1", .debug = false},
{.pin = &gpio_ext_pc0, .name = "PC0", .debug = false},
/* Dangerous pins, may damage hardware */
{.pin = &gpio_usart_rx, .name = "PB7", .debug = true},
{.pin = &gpio_speaker, .name = "PB8", .debug = true},
};
const size_t gpio_pins_count = sizeof(gpio_pins) / sizeof(GpioPinRecord);
const InputPin input_pins[] = {
{.gpio = &gpio_button_up, .key = InputKeyUp, .inverted = true, .name = "Up"},
{.gpio = &gpio_button_down, .key = InputKeyDown, .inverted = true, .name = "Down"},
@@ -73,8 +90,18 @@ const InputPin input_pins[] = {
const size_t input_pins_count = sizeof(input_pins) / sizeof(InputPin);
static void furi_hal_resources_init_input_pins(GpioMode mode) {
for(size_t i = 0; i < input_pins_count; i++) {
furi_hal_gpio_init(
input_pins[i].gpio,
mode,
(input_pins[i].inverted) ? GpioPullUp : GpioPullDown,
GpioSpeedLow);
}
}
void furi_hal_resources_init_early() {
furi_hal_gpio_init(&gpio_button_left, GpioModeInput, GpioPullUp, GpioSpeedLow);
furi_hal_resources_init_input_pins(GpioModeInput);
// SD Card stepdown control
furi_hal_gpio_write(&periph_power, 1);
@@ -117,14 +144,12 @@ void furi_hal_resources_init_early() {
}
void furi_hal_resources_deinit_early() {
furi_hal_resources_init_input_pins(GpioModeAnalog);
}
void furi_hal_resources_init() {
// Button pins
for(size_t i = 0; i < input_pins_count; i++) {
furi_hal_gpio_init(
input_pins[i].gpio, GpioModeInterruptRiseFall, GpioPullUp, GpioSpeedLow);
}
furi_hal_resources_init_input_pins(GpioModeInterruptRiseFall);
// Display pins
furi_hal_gpio_init(&gpio_display_rst_n, GpioModeOutputPushPull, GpioPullNo, GpioSpeedLow);

View File

@@ -38,9 +38,18 @@ typedef struct {
const char* name;
} InputPin;
typedef struct {
const GpioPin* pin;
const char* name;
const bool debug;
} GpioPinRecord;
extern const InputPin input_pins[];
extern const size_t input_pins_count;
extern const GpioPinRecord gpio_pins[];
extern const size_t gpio_pins_count;
extern const GpioPin vibro_gpio;
extern const GpioPin ibutton_gpio;

View File

@@ -0,0 +1,136 @@
/**
* @file furi_hal_rfid.h
* RFID HAL API
*/
#pragma once
#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>
#ifdef __cplusplus
extern "C" {
#endif
/** Initialize RFID subsystem
*/
void furi_hal_rfid_init();
/** Config rfid pins to reset state
*/
void furi_hal_rfid_pins_reset();
/** Config rfid pins to emulate state
*/
void furi_hal_rfid_pins_emulate();
/** Config rfid pins to read state
*/
void furi_hal_rfid_pins_read();
/** Release rfid pull pin
*/
void furi_hal_rfid_pin_pull_release();
/** Pulldown rfid pull pin
*/
void furi_hal_rfid_pin_pull_pulldown();
/** Config rfid timer to read state
*
* @param freq timer frequency
* @param duty_cycle timer duty cycle, 0.0-1.0
*/
void furi_hal_rfid_tim_read(float freq, float duty_cycle);
/** Start read timer
*/
void furi_hal_rfid_tim_read_start();
/** Stop read timer
*/
void furi_hal_rfid_tim_read_stop();
/** Config rfid timer to emulate state
*
* @param freq timer frequency
*/
void furi_hal_rfid_tim_emulate(float freq);
typedef void (*FuriHalRfidEmulateCallback)(void* context);
/** Start emulation timer
*/
void furi_hal_rfid_tim_emulate_start(FuriHalRfidEmulateCallback callback, void* context);
typedef void (*FuriHalRfidReadCaptureCallback)(bool level, uint32_t duration, void* context);
void furi_hal_rfid_tim_read_capture_start(FuriHalRfidReadCaptureCallback callback, void* context);
void furi_hal_rfid_tim_read_capture_stop();
typedef void (*FuriHalRfidDMACallback)(bool half, void* context);
void furi_hal_rfid_tim_emulate_dma_start(
uint32_t* duration,
uint32_t* pulse,
size_t length,
FuriHalRfidDMACallback callback,
void* context);
void furi_hal_rfid_tim_emulate_dma_stop();
/** Stop emulation timer
*/
void furi_hal_rfid_tim_emulate_stop();
/** Config rfid timers to reset state
*/
void furi_hal_rfid_tim_reset();
/** Set emulation timer period
*
* @param period overall duration
*/
void furi_hal_rfid_set_emulate_period(uint32_t period);
/** Set emulation timer pulse
*
* @param pulse duration of high level
*/
void furi_hal_rfid_set_emulate_pulse(uint32_t pulse);
/** Set read timer period
*
* @param period overall duration
*/
void furi_hal_rfid_set_read_period(uint32_t period);
/** Set read timer pulse
*
* @param pulse duration of high level
*/
void furi_hal_rfid_set_read_pulse(uint32_t pulse);
/** Сhanges the configuration of the RFID timer "on a fly"
*
* @param freq new frequency
* @param duty_cycle new duty cycle
*/
void furi_hal_rfid_change_read_config(float freq, float duty_cycle);
/** Start/Enable comparator */
void furi_hal_rfid_comp_start();
/** Stop/Disable comparator */
void furi_hal_rfid_comp_stop();
typedef void (*FuriHalRfidCompCallback)(bool level, void* context);
/** Set comparator callback */
void furi_hal_rfid_comp_set_callback(FuriHalRfidCompCallback callback, void* context);
#ifdef __cplusplus
}
#endif

View File

@@ -1,24 +1,21 @@
#include "furi_hal_sd.h"
#include <furi_hal_sd.h>
#include <stm32wbxx_ll_gpio.h>
#include <furi.h>
#include <furi_hal.h>
void hal_sd_detect_init(void) {
// low speed input with pullup
LL_GPIO_SetPinMode(SD_CD_GPIO_Port, SD_CD_Pin, LL_GPIO_MODE_INPUT);
LL_GPIO_SetPinSpeed(SD_CD_GPIO_Port, SD_CD_Pin, LL_GPIO_SPEED_FREQ_LOW);
LL_GPIO_SetPinPull(SD_CD_GPIO_Port, SD_CD_Pin, LL_GPIO_PULL_UP);
furi_hal_gpio_init(&gpio_sdcard_cd, GpioModeInput, GpioPullUp, GpioSpeedLow);
}
void hal_sd_detect_set_low(void) {
// low speed input with pullup
LL_GPIO_SetPinMode(SD_CD_GPIO_Port, SD_CD_Pin, LL_GPIO_MODE_OUTPUT);
LL_GPIO_SetPinOutputType(SD_CD_GPIO_Port, SD_CD_Pin, LL_GPIO_OUTPUT_OPENDRAIN);
LL_GPIO_ResetOutputPin(SD_CD_GPIO_Port, SD_CD_Pin);
furi_hal_gpio_init_simple(&gpio_sdcard_cd, GpioModeOutputOpenDrain);
furi_hal_gpio_write(&gpio_sdcard_cd, 0);
}
bool hal_sd_detect(void) {
bool result = !(LL_GPIO_IsInputPinSet(SD_CD_GPIO_Port, SD_CD_Pin));
bool result = !furi_hal_gpio_read(&gpio_sdcard_cd);
return result;
}

View File

@@ -1,38 +1,14 @@
#include "furi_hal_spi.h"
#include "furi_hal_resources.h"
#include <furi_hal_spi.h>
#include <furi_hal_resources.h>
#include <furi_hal_power.h>
#include <stdbool.h>
#include <string.h>
#include <furi.h>
#include <stm32wbxx_ll_spi.h>
#include <stm32wbxx_ll_utils.h>
#include <stm32wbxx_ll_cortex.h>
#define TAG "FuriHalSpi"
void furi_hal_spi_init_early() {
furi_hal_spi_bus_init(&furi_hal_spi_bus_d);
furi_hal_spi_bus_handle_init(&furi_hal_spi_bus_handle_display);
}
void furi_hal_spi_deinit_early() {
furi_hal_spi_bus_handle_deinit(&furi_hal_spi_bus_handle_display);
furi_hal_spi_bus_deinit(&furi_hal_spi_bus_d);
}
void furi_hal_spi_init() {
furi_hal_spi_bus_init(&furi_hal_spi_bus_r);
furi_hal_spi_bus_handle_init(&furi_hal_spi_bus_handle_subghz);
furi_hal_spi_bus_handle_init(&furi_hal_spi_bus_handle_nfc);
furi_hal_spi_bus_handle_init(&furi_hal_spi_bus_handle_sd_fast);
furi_hal_spi_bus_handle_init(&furi_hal_spi_bus_handle_sd_slow);
FURI_LOG_I(TAG, "Init OK");
}
void furi_hal_spi_bus_init(FuriHalSpiBus* bus) {
furi_assert(bus);
bus->callback(bus, FuriHalSpiBusEventInit);

View File

@@ -1,5 +1,9 @@
#include <furi_hal_spi_config.h>
#include <furi_hal_resources.h>
#include <furi_hal_spi.h>
#include <furi.h>
#define TAG "FuriHalSpiConfig"
/* SPI Presets */
@@ -72,6 +76,27 @@ const LL_SPI_InitTypeDef furi_hal_spi_preset_1edge_low_2m = {
FuriMutex* furi_hal_spi_bus_r_mutex = NULL;
void furi_hal_spi_config_init_early() {
furi_hal_spi_bus_init(&furi_hal_spi_bus_d);
furi_hal_spi_bus_handle_init(&furi_hal_spi_bus_handle_display);
}
void furi_hal_spi_config_deinit_early() {
furi_hal_spi_bus_handle_deinit(&furi_hal_spi_bus_handle_display);
furi_hal_spi_bus_deinit(&furi_hal_spi_bus_d);
}
void furi_hal_spi_config_init() {
furi_hal_spi_bus_init(&furi_hal_spi_bus_r);
furi_hal_spi_bus_handle_init(&furi_hal_spi_bus_handle_subghz);
furi_hal_spi_bus_handle_init(&furi_hal_spi_bus_handle_nfc);
furi_hal_spi_bus_handle_init(&furi_hal_spi_bus_handle_sd_fast);
furi_hal_spi_bus_handle_init(&furi_hal_spi_bus_handle_sd_slow);
FURI_LOG_I(TAG, "Init OK");
}
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);

View File

@@ -1,5 +1,5 @@
#include "furi_hal_subghz.h"
#include "furi_hal_subghz_configs.h"
#include <furi_hal_subghz.h>
#include <furi_hal_subghz_configs.h>
#include <furi_hal_region.h>
#include <furi_hal_version.h>

View File

@@ -0,0 +1,263 @@
/**
* @file furi_hal_subghz.h
* SubGhz HAL API
*/
#pragma once
#include <stdbool.h>
#include <stdint.h>
#include <stddef.h>
#include <toolbox/level_duration.h>
#include <furi_hal_gpio.h>
#ifdef __cplusplus
extern "C" {
#endif
/** Low level buffer dimensions and guard times */
#define API_HAL_SUBGHZ_ASYNC_TX_BUFFER_FULL (256)
#define API_HAL_SUBGHZ_ASYNC_TX_BUFFER_HALF (API_HAL_SUBGHZ_ASYNC_TX_BUFFER_FULL / 2)
#define API_HAL_SUBGHZ_ASYNC_TX_GUARD_TIME 999
/** Radio Presets */
typedef enum {
FuriHalSubGhzPresetIDLE, /**< default configuration */
FuriHalSubGhzPresetOok270Async, /**< OOK, bandwidth 270kHz, asynchronous */
FuriHalSubGhzPresetOok650Async, /**< OOK, bandwidth 650kHz, asynchronous */
FuriHalSubGhzPreset2FSKDev238Async, /**< FM, deviation 2.380371 kHz, asynchronous */
FuriHalSubGhzPreset2FSKDev476Async, /**< FM, deviation 47.60742 kHz, asynchronous */
FuriHalSubGhzPresetMSK99_97KbAsync, /**< MSK, deviation 47.60742 kHz, 99.97Kb/s, asynchronous */
FuriHalSubGhzPresetGFSK9_99KbAsync, /**< GFSK, deviation 19.042969 kHz, 9.996Kb/s, asynchronous */
FuriHalSubGhzPresetCustom, /**Custom Preset*/
} FuriHalSubGhzPreset;
/** Switchable Radio Paths */
typedef enum {
FuriHalSubGhzPathIsolate, /**< Isolate Radio from antenna */
FuriHalSubGhzPath433, /**< Center Frequency: 433MHz. Path 1: SW1RF1-SW2RF2, LCLCL */
FuriHalSubGhzPath315, /**< Center Frequency: 315MHz. Path 2: SW1RF2-SW2RF1, LCLCLCL */
FuriHalSubGhzPath868, /**< Center Frequency: 868MHz. Path 3: SW1RF3-SW2RF3, LCLC */
} FuriHalSubGhzPath;
/** SubGhz state */
typedef enum {
SubGhzStateInit, /**< Init pending */
SubGhzStateIdle, /**< Idle, energy save mode */
SubGhzStateAsyncRx, /**< Async RX started */
SubGhzStateAsyncTx, /**< Async TX started, DMA and timer is on */
SubGhzStateAsyncTxLast, /**< Async TX continue, DMA completed and timer got last value to go */
SubGhzStateAsyncTxEnd, /**< Async TX complete, cleanup needed */
} SubGhzState;
/** SubGhz regulation, receive transmission on the current frequency for the
* region */
typedef enum {
SubGhzRegulationOnlyRx, /**only Rx*/
SubGhzRegulationTxRx, /**TxRx*/
} SubGhzRegulation;
/* Mirror RX/TX async modulation signal to specified pin
*
* @warning Configures pin to output mode. Make sure it is not connected
* directly to power or ground.
*
* @param[in] pin pointer to the gpio pin structure or NULL to disable
*/
void furi_hal_subghz_set_async_mirror_pin(const GpioPin* pin);
/** Initialize and switch to power save mode Used by internal API-HAL
* initialization routine Can be used to reinitialize device to safe state and
* send it to sleep
*/
void furi_hal_subghz_init();
/** Send device to sleep mode
*/
void furi_hal_subghz_sleep();
/** Dump info to stdout
*/
void furi_hal_subghz_dump_state();
/** Load registers from preset by preset name
*
* @param preset to load
*/
void furi_hal_subghz_load_preset(FuriHalSubGhzPreset preset);
/** Load custom registers from preset
*
* @param preset_data registers to load
*/
void furi_hal_subghz_load_custom_preset(uint8_t* preset_data);
/** Load registers
*
* @param data Registers data
*/
void furi_hal_subghz_load_registers(uint8_t* data);
/** Load PATABLE
*
* @param data 8 uint8_t values
*/
void furi_hal_subghz_load_patable(const uint8_t data[8]);
/** Write packet to FIFO
*
* @param data bytes array
* @param size size
*/
void furi_hal_subghz_write_packet(const uint8_t* data, uint8_t size);
/** Check if receive pipe is not empty
*
* @return true if not empty
*/
bool furi_hal_subghz_rx_pipe_not_empty();
/** Check if received data crc is valid
*
* @return true if valid
*/
bool furi_hal_subghz_is_rx_data_crc_valid();
/** Read packet from FIFO
*
* @param data pointer
* @param size size
*/
void furi_hal_subghz_read_packet(uint8_t* data, uint8_t* size);
/** Flush rx FIFO buffer
*/
void furi_hal_subghz_flush_rx();
/** Flush tx FIFO buffer
*/
void furi_hal_subghz_flush_tx();
/** Shutdown Issue SPWD command
* @warning registers content will be lost
*/
void furi_hal_subghz_shutdown();
/** Reset Issue reset command
* @warning registers content will be lost
*/
void furi_hal_subghz_reset();
/** Switch to Idle
*/
void furi_hal_subghz_idle();
/** Switch to Receive
*/
void furi_hal_subghz_rx();
/** Switch to Transmit
*
* @return true if the transfer is allowed by belonging to the region
*/
bool furi_hal_subghz_tx();
/** Get RSSI value in dBm
*
* @return RSSI value
*/
float furi_hal_subghz_get_rssi();
/** Get LQI
*
* @return LQI value
*/
uint8_t furi_hal_subghz_get_lqi();
/** Check if frequency is in valid range
*
* @param value frequency in Hz
*
* @return true if frequency is valid, otherwise false
*/
bool furi_hal_subghz_is_frequency_valid(uint32_t value);
/** Set frequency and path This function automatically selects antenna matching
* network
*
* @param value frequency in Hz
*
* @return real frequency in Hz
*/
uint32_t furi_hal_subghz_set_frequency_and_path(uint32_t value);
/** Сheck if transmission is allowed on this frequency with your current config
*
* @param value frequency in Hz
*
* @return true if allowed
*/
bool furi_hal_subghz_is_tx_allowed(uint32_t value);
/** Set frequency
*
* @param value frequency in Hz
*
* @return real frequency in Hz
*/
uint32_t furi_hal_subghz_set_frequency(uint32_t value);
/** Set path
*
* @param path path to use
*/
void furi_hal_subghz_set_path(FuriHalSubGhzPath path);
/* High Level API */
/** Signal Timings Capture callback */
typedef void (*FuriHalSubGhzCaptureCallback)(bool level, uint32_t duration, void* context);
/** Enable signal timings capture Initializes GPIO and TIM2 for timings capture
*
* @param callback FuriHalSubGhzCaptureCallback
* @param context callback context
*/
void furi_hal_subghz_start_async_rx(FuriHalSubGhzCaptureCallback callback, void* context);
/** Disable signal timings capture Resets GPIO and TIM2
*/
void furi_hal_subghz_stop_async_rx();
/** Async TX callback type
* @param context callback context
* @return LevelDuration
*/
typedef LevelDuration (*FuriHalSubGhzAsyncTxCallback)(void* context);
/** Start async TX Initializes GPIO, TIM2 and DMA1 for signal output
*
* @param callback FuriHalSubGhzAsyncTxCallback
* @param context callback context
*
* @return true if the transfer is allowed by belonging to the region
*/
bool furi_hal_subghz_start_async_tx(FuriHalSubGhzAsyncTxCallback callback, void* context);
/** Wait for async transmission to complete
*
* @return true if TX complete
*/
bool furi_hal_subghz_is_async_tx_complete();
/** Stop async transmission and cleanup resources Resets GPIO, TIM2, and DMA1
*/
void furi_hal_subghz_stop_async_tx();
#ifdef __cplusplus
}
#endif

View File

@@ -0,0 +1,6 @@
#pragma once
#include <furi_hal_subghz.h>
#include <furi_hal_ibutton.h>
#include <furi_hal_rfid.h>
#include <furi_hal_nfc.h>

View File

@@ -1,6 +1,6 @@
#include "furi_hal_version.h"
#include "furi_hal_usb_i.h"
#include "furi_hal_usb.h"
#include <furi_hal_version.h>
#include <furi_hal_usb_i.h>
#include <furi_hal_usb.h>
#include <furi_hal_power.h>
#include <stm32wbxx_ll_pwr.h>
#include <furi.h>

View File

@@ -1,7 +1,7 @@
#include "furi_hal_version.h"
#include "furi_hal_usb_i.h"
#include "furi_hal_usb.h"
#include "furi_hal_usb_cdc.h"
#include <furi_hal_version.h>
#include <furi_hal_usb_i.h>
#include <furi_hal_usb.h>
#include <furi_hal_usb_cdc.h>
#include <furi.h>
#include "usb.h"

View File

@@ -1,7 +1,7 @@
#include "furi_hal_version.h"
#include "furi_hal_usb_i.h"
#include "furi_hal_usb.h"
#include "furi_hal_usb_hid.h"
#include <furi_hal_version.h>
#include <furi_hal_usb_i.h>
#include <furi_hal_usb.h>
#include <furi_hal_usb_hid.h>
#include <furi.h>
#include "usb.h"

View File

@@ -1,7 +1,7 @@
#include "furi_hal_version.h"
#include "furi_hal_usb_i.h"
#include "furi_hal_usb_hid_u2f.h"
#include "furi_hal_usb.h"
#include <furi_hal_version.h>
#include <furi_hal_usb_i.h>
#include <furi_hal_usb_hid_u2f.h>
#include <furi_hal_usb.h>
#include <furi.h>
#include "usb.h"
#include "usb_hid.h"

View File

@@ -224,14 +224,6 @@ void furi_hal_version_init() {
FURI_LOG_I(TAG, "Init OK");
}
bool furi_hal_version_do_i_belong_here() {
return furi_hal_version_get_hw_target() == 7;
}
const char* furi_hal_version_get_model_name() {
return "Flipper Zero";
}
FuriHalVersionOtpVersion furi_hal_version_get_otp_version() {
if(*(uint64_t*)FURI_HAL_VERSION_OTP_ADDRESS == 0xFFFFFFFF) {
return FuriHalVersionOtpVersionEmpty;

View File

@@ -0,0 +1,21 @@
#include <furi_hal_version.h>
bool furi_hal_version_do_i_belong_here() {
return (furi_hal_version_get_hw_target() == 7) || (furi_hal_version_get_hw_target() == 0);
}
const char* furi_hal_version_get_model_name() {
return "Flipper Zero";
}
const char* furi_hal_version_get_model_code() {
return "FZ.1";
}
const char* furi_hal_version_get_fcc_id() {
return "2A2V6-FZ";
}
const char* furi_hal_version_get_ic_id() {
return "27624-FZ";
}

View File

@@ -8,6 +8,8 @@ void flipper_boot_update_exec();
void flipper_boot_dfu_exec();
void flipper_boot_recovery_exec();
#ifdef __cplusplus
}
#endif

View File

@@ -49,6 +49,10 @@ int main() {
// But if we do, abandon to avoid bootloops
furi_hal_rtc_set_boot_mode(FuriHalRtcBootModeNormal);
furi_hal_power_reset();
} else if(!furi_hal_gpio_read(&gpio_button_up)) {
furi_hal_light_sequence("rgb WR");
flipper_boot_recovery_exec();
furi_hal_power_reset();
} else {
furi_hal_light_sequence("rgb G");
furi_thread_start(main_thread);

View File

@@ -0,0 +1,54 @@
#include <furi.h>
#include <furi_hal.h>
#include <flipper.h>
#include <alt_boot.h>
#include <u8g2_glue.h>
#include <assets_icons.h>
#define COUNTER_VALUE (100U)
static void flipper_boot_recovery_draw_splash(u8g2_t* fb, size_t progress) {
u8g2_ClearBuffer(fb);
u8g2_SetDrawColor(fb, 0x01);
u8g2_SetFont(fb, u8g2_font_helvB08_tr);
u8g2_DrawStr(fb, 2, 8, "PIN and Factory Reset");
u8g2_SetFont(fb, u8g2_font_haxrcorp4089_tr);
u8g2_DrawStr(fb, 2, 21, "Hold Right to confirm");
u8g2_DrawStr(fb, 2, 31, "Press Down to cancel");
if(progress < COUNTER_VALUE) {
size_t width = progress / (COUNTER_VALUE / 100);
u8g2_DrawBox(fb, 14 + (50 - width / 2), 54, width, 3);
}
u8g2_SetPowerSave(fb, 0);
u8g2_SendBuffer(fb);
}
void flipper_boot_recovery_exec() {
u8g2_t* fb = malloc(sizeof(u8g2_t));
u8g2_Setup_st756x_flipper(fb, U8G2_R0, u8x8_hw_spi_stm32, u8g2_gpio_and_delay_stm32);
u8g2_InitDisplay(fb);
size_t counter = COUNTER_VALUE;
while(counter) {
if(!furi_hal_gpio_read(&gpio_button_down)) {
break;
}
if(!furi_hal_gpio_read(&gpio_button_right)) {
counter--;
} else {
counter = COUNTER_VALUE;
}
flipper_boot_recovery_draw_splash(fb, counter);
}
if(!counter) {
furi_hal_rtc_set_flag(FuriHalRtcFlagFactoryReset);
furi_hal_rtc_set_pin_fails(0);
furi_hal_rtc_reset_flag(FuriHalRtcFlagLock);
}
}

View File

@@ -42,7 +42,7 @@ static bool flipper_update_init() {
furi_hal_rtc_init();
furi_hal_interrupt_init();
furi_hal_spi_init();
furi_hal_spi_config_init();
MX_FATFS_Init();
if(!hal_sd_detect()) {

View File

@@ -1,7 +1,7 @@
/**
*****************************************************************************
**
** File : stm32wb55xx_flash_cm4.ld
** File : stm32wb55xx_flash.ld
**
** Abstract : System Workbench Minimal System calls file
**

View File

@@ -1,7 +1,7 @@
/**
*****************************************************************************
**
** File : stm32wb55xx_flash_cm4.ld
** File : stm32wb55xx_ram_fw.ld
**
** Abstract : System Workbench Minimal System calls file
**

View File

@@ -0,0 +1,45 @@
{
"include_paths": [
"ble_glue",
"fatfs",
"furi_hal",
"inc"
],
"sdk_header_paths": [
"../furi_hal_include",
"furi_hal",
"platform_specific"
],
"startup_script": "startup_stm32wb55xx_cm4.s",
"linker_script_flash": "stm32wb55xx_flash.ld",
"linker_script_ram": "stm32wb55xx_ram_fw.ld",
"linker_script_app": "application_ext.ld",
"sdk_symbols": "api_symbols.csv",
"linker_dependencies": [
"print",
"flipper7",
"furi",
"freertos",
"stm32cubewb",
"hwdrivers",
"fatfs",
"littlefs",
"subghz",
"flipperformat",
"toolbox",
"nfc",
"microtar",
"usb_stm32",
"st25rfal002",
"infrared",
"appframe",
"assets",
"one_wire",
"misc",
"mbedtls",
"lfrfid",
"flipper_application",
"flipperformat",
"toolbox"
]
}