Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/flipperzero-firmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorあく <alleteam@gmail.com>2022-01-05 19:10:18 +0300
committerGitHub <noreply@github.com>2022-01-05 19:10:18 +0300
commit389ff92cc14236db06605ee0992c9594da6cd7be (patch)
tree5b2d5777caf2a7a76c2c422c93dbb09f168134fa /firmware
parentc98e54da103ede7923af0a8b555ddb1cb8bb62fe (diff)
Naming and coding style convention, new linter tool. (#945)
* Makefile, Scripts: new linter * About: remove ID from IC * Firmware: remove double define for DIVC/DIVR * Scripts: check folder names too. Docker: replace syntax check with make lint. * Reformat Sources and Migrate to new file naming convention * Docker: symlink clang-format-12 to clang-format * Add coding style guide
Diffstat (limited to 'firmware')
-rw-r--r--firmware/Makefile2
-rw-r--r--firmware/targets/f6/Inc/FreeRTOSConfig.h136
-rw-r--r--firmware/targets/f6/Inc/stm32.h45
-rw-r--r--firmware/targets/f6/Inc/stm32_assert.h10
-rw-r--r--firmware/targets/f6/Inc/stm32wbxx_hal_conf.h173
-rw-r--r--firmware/targets/f6/Inc/stm32wbxx_it.h2
-rw-r--r--firmware/targets/f6/Inc/tim.h2
-rw-r--r--firmware/targets/f6/Src/comp.c96
-rw-r--r--firmware/targets/f6/Src/main.c9
-rw-r--r--firmware/targets/f6/Src/stm32wbxx_hal_msp.c33
-rw-r--r--firmware/targets/f6/Src/stm32wbxx_it.c4
-rw-r--r--firmware/targets/f6/Src/system_stm32wbxx.c244
-rw-r--r--firmware/targets/f6/Src/tim.c526
-rw-r--r--firmware/targets/f6/ble-glue/app_debug.c375
-rw-r--r--firmware/targets/f6/ble-glue/ble_dbg_conf.h199
-rw-r--r--firmware/targets/f6/ble-glue/dev_info_service.c160
-rw-r--r--firmware/targets/f6/ble-glue/dev_info_service.h23
-rw-r--r--firmware/targets/f6/ble-glue/hw_ipcc.c675
-rw-r--r--firmware/targets/f6/ble_glue/app_common.h (renamed from firmware/targets/f6/ble-glue/app_common.h)8
-rw-r--r--firmware/targets/f6/ble_glue/app_conf.h (renamed from firmware/targets/f6/ble-glue/app_conf.h)204
-rw-r--r--firmware/targets/f6/ble_glue/app_debug.c357
-rw-r--r--firmware/targets/f6/ble_glue/app_debug.h (renamed from firmware/targets/f7/ble-glue/app_debug.h)4
-rw-r--r--firmware/targets/f6/ble_glue/battery_service.c (renamed from firmware/targets/f6/ble-glue/battery_service.c)31
-rw-r--r--firmware/targets/f6/ble_glue/battery_service.h (renamed from firmware/targets/f6/ble-glue/battery_service.h)0
-rw-r--r--firmware/targets/f6/ble_glue/ble_app.c (renamed from firmware/targets/f6/ble-glue/ble_app.c)34
-rw-r--r--firmware/targets/f6/ble_glue/ble_app.h (renamed from firmware/targets/f6/ble-glue/ble_app.h)2
-rw-r--r--firmware/targets/f6/ble_glue/ble_conf.h (renamed from firmware/targets/f7/ble-glue/ble_conf.h)16
-rw-r--r--firmware/targets/f6/ble_glue/ble_dbg_conf.h199
-rw-r--r--firmware/targets/f6/ble_glue/ble_glue.c (renamed from firmware/targets/f7/ble-glue/ble_glue.c)56
-rw-r--r--firmware/targets/f6/ble_glue/ble_glue.h (renamed from firmware/targets/f6/ble-glue/ble_glue.h)8
-rw-r--r--firmware/targets/f6/ble_glue/dev_info_service.c174
-rw-r--r--firmware/targets/f6/ble_glue/dev_info_service.h24
-rw-r--r--firmware/targets/f6/ble_glue/gap.c (renamed from firmware/targets/f6/ble-glue/gap.c)393
-rw-r--r--firmware/targets/f6/ble_glue/gap.h (renamed from firmware/targets/f6/ble-glue/gap.h)6
-rw-r--r--firmware/targets/f6/ble_glue/hid_service.c (renamed from firmware/targets/f7/ble-glue/hid_service.c)192
-rw-r--r--firmware/targets/f6/ble_glue/hid_service.h (renamed from firmware/targets/f6/ble-glue/hid_service.h)0
-rw-r--r--firmware/targets/f6/ble_glue/hw_conf.h (renamed from firmware/targets/f7/ble-glue/hw_conf.h)137
-rw-r--r--firmware/targets/f6/ble_glue/hw_if.h (renamed from firmware/targets/f6/ble-glue/hw_if.h)47
-rw-r--r--firmware/targets/f6/ble_glue/hw_ipcc.c597
-rw-r--r--firmware/targets/f6/ble_glue/serial_service.c (renamed from firmware/targets/f6/ble-glue/serial_service.c)130
-rw-r--r--firmware/targets/f6/ble_glue/serial_service.h (renamed from firmware/targets/f7/ble-glue/serial_service.h)7
-rw-r--r--firmware/targets/f6/ble_glue/tl_dbg_conf.h (renamed from firmware/targets/f6/ble-glue/tl_dbg_conf.h)69
-rw-r--r--firmware/targets/f6/ble_glue/utilities_conf.h (renamed from firmware/targets/f7/ble-glue/utilities_conf.h)27
-rw-r--r--firmware/targets/f6/cube/Inc/FreeRTOSConfig.h137
-rw-r--r--firmware/targets/f6/cube/Inc/stm32_assert.h10
-rw-r--r--firmware/targets/f6/cube/Inc/stm32wbxx_hal_conf.h171
-rw-r--r--firmware/targets/f6/cube/Inc/stm32wbxx_it.h2
-rw-r--r--firmware/targets/f6/cube/Inc/tim.h2
-rw-r--r--firmware/targets/f6/cube/Inc/usb_device.h2
-rw-r--r--firmware/targets/f6/cube/Inc/usbd_cdc_if.h6
-rw-r--r--firmware/targets/f6/cube/Inc/usbd_conf.h55
-rw-r--r--firmware/targets/f6/cube/Inc/usbd_desc.h12
-rw-r--r--firmware/targets/f6/cube/Src/adc.c155
-rw-r--r--firmware/targets/f6/cube/Src/aes.c174
-rw-r--r--firmware/targets/f6/cube/Src/app_freertos.c102
-rw-r--r--firmware/targets/f6/cube/Src/comp.c116
-rw-r--r--firmware/targets/f6/cube/Src/crc.c86
-rw-r--r--firmware/targets/f6/cube/Src/gpio.c261
-rw-r--r--firmware/targets/f6/cube/Src/i2c.c73
-rw-r--r--firmware/targets/f6/cube/Src/main.c349
-rw-r--r--firmware/targets/f6/cube/Src/pka.c68
-rw-r--r--firmware/targets/f6/cube/Src/rf.c17
-rw-r--r--firmware/targets/f6/cube/Src/rng.c70
-rw-r--r--firmware/targets/f6/cube/Src/rtc.c152
-rw-r--r--firmware/targets/f6/cube/Src/spi.c302
-rw-r--r--firmware/targets/f6/cube/Src/stm32wbxx_hal_msp.c33
-rw-r--r--firmware/targets/f6/cube/Src/stm32wbxx_it.c248
-rw-r--r--firmware/targets/f6/cube/Src/system_stm32wbxx.c248
-rw-r--r--firmware/targets/f6/cube/Src/tim.c589
-rw-r--r--firmware/targets/f6/cube/Src/usart.c100
-rw-r--r--firmware/targets/f6/cube/Src/usb_device.c43
-rw-r--r--firmware/targets/f6/cube/Src/usbd_cdc_if.c161
-rw-r--r--firmware/targets/f6/cube/Src/usbd_conf.c707
-rw-r--r--firmware/targets/f6/cube/Src/usbd_desc.c272
-rw-r--r--firmware/targets/f6/fatfs/fatfs.c34
-rw-r--r--firmware/targets/f6/fatfs/ffconf.h78
-rw-r--r--firmware/targets/f6/fatfs/spi_sd_hal.c5
-rw-r--r--firmware/targets/f6/fatfs/stm32_adafruit_sd.c59
-rw-r--r--firmware/targets/f6/fatfs/stm32_adafruit_sd.h225
-rw-r--r--firmware/targets/f6/fatfs/syscall.c72
-rw-r--r--firmware/targets/f6/fatfs/user_diskio.c2
-rw-r--r--firmware/targets/f6/furi-hal/furi-hal-usb-cdc.c631
-rw-r--r--firmware/targets/f6/furi-hal/furi-hal-usb-hid.c481
-rw-r--r--firmware/targets/f6/furi-hal/furi-hal-usb_i.h13
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal.c (renamed from firmware/targets/f7/furi-hal/furi-hal.c)17
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_bootloader.c (renamed from firmware/targets/f7/furi-hal/furi-hal-bootloader.c)8
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_bt.c (renamed from firmware/targets/f6/furi-hal/furi-hal-bt.c)89
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_bt_hid.c (renamed from firmware/targets/f7/furi-hal/furi-hal-bt-hid.c)140
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_bt_serial.c (renamed from firmware/targets/f6/furi-hal/furi-hal-bt-serial.c)7
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_clock.c (renamed from firmware/targets/f7/furi-hal/furi-hal-clock.c)51
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_clock.h (renamed from firmware/targets/f6/furi-hal/furi-hal-clock.h)0
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_compress.c (renamed from firmware/targets/f7/furi-hal/furi-hal-compress.c)83
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_console.c (renamed from firmware/targets/f7/furi-hal/furi-hal-console.c)24
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_console.h (renamed from firmware/targets/f6/furi-hal/furi-hal-console.h)0
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_crypto.c (renamed from firmware/targets/f7/furi-hal/furi-hal-crypto.c)32
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_delay.c (renamed from firmware/targets/f6/furi-hal/furi-hal-delay.c)4
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_flash.c (renamed from firmware/targets/f7/furi-hal/furi-hal-flash.c)49
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_flash.h (renamed from firmware/targets/f6/furi-hal/furi-hal-flash.h)1
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_gpio.c (renamed from firmware/targets/f6/furi-hal/furi-hal-gpio.c)4
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_gpio.h (renamed from firmware/targets/f6/furi-hal/furi-hal-gpio.h)0
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_i2c.c (renamed from firmware/targets/f6/furi-hal/furi-hal-i2c.c)7
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_i2c_config.c (renamed from firmware/targets/f7/furi-hal/furi-hal-i2c-config.c)74
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_i2c_config.h (renamed from firmware/targets/f6/furi-hal/furi-hal-i2c-config.h)2
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_i2c_types.h (renamed from firmware/targets/f7/furi-hal/furi-hal-i2c-types.h)4
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_ibutton.c (renamed from firmware/targets/f6/furi-hal/furi-hal-ibutton.c)4
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_info.c (renamed from firmware/targets/f7/furi-hal/furi-hal-info.c)4
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_interrupt.c (renamed from firmware/targets/f7/furi-hal/furi-hal-interrupt.c)67
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_interrupt.h (renamed from firmware/targets/f6/furi-hal/furi-hal-interrupt.h)8
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_irda.c (renamed from firmware/targets/f7/furi-hal/furi-hal-irda.c)202
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_light.c (renamed from firmware/targets/f6/furi-hal/furi-hal-light.c)2
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_nfc.c (renamed from firmware/targets/f7/furi-hal/furi-hal-nfc.c)36
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_os.c (renamed from firmware/targets/f7/furi-hal/furi-hal-os.c)26
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_os.h (renamed from firmware/targets/f7/furi-hal/furi-hal-os.h)1
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_os_timer.h (renamed from firmware/targets/f7/furi-hal/furi-hal-os-timer.h)17
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_power.c (renamed from firmware/targets/f7/furi-hal/furi-hal-power.c)138
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_pwm.c (renamed from firmware/targets/f7/furi-hal/furi-hal-pwm.c)3
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_pwm.h (renamed from firmware/targets/f6/furi-hal/furi-hal-pwm.h)0
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_random.c (renamed from firmware/targets/f7/furi-hal/furi-hal-random.c)26
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_resources.c (renamed from firmware/targets/f6/furi-hal/furi-hal-resources.c)35
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_resources.h (renamed from firmware/targets/f6/furi-hal/furi-hal-resources.h)1
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_rfid.c (renamed from firmware/targets/f6/furi-hal/furi-hal-rfid.c)6
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_rtc.c (renamed from firmware/targets/f7/furi-hal/furi-hal-rtc.c)32
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_sd.c (renamed from firmware/targets/f6/furi-hal/furi-hal-sd.c)2
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_spi.c (renamed from firmware/targets/f7/furi-hal/furi-hal-spi.c)33
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_spi_config.c (renamed from firmware/targets/f7/furi-hal/furi-hal-spi-config.c)198
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_spi_config.h (renamed from firmware/targets/f7/furi-hal/furi-hal-spi-config.h)2
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_spi_types.h (renamed from firmware/targets/f6/furi-hal/furi-hal-spi-types.h)6
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_subghz.c (renamed from firmware/targets/f7/furi-hal/furi-hal-subghz.c)16
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_task.c (renamed from firmware/targets/f7/furi-hal/furi-hal-task.c)2
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_task.h (renamed from firmware/targets/f6/furi-hal/furi-hal-task.h)0
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_uart.c (renamed from firmware/targets/f7/furi-hal/furi-hal-uart.c)4
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_uart.h (renamed from firmware/targets/f7/furi-hal/furi-hal-uart.h)2
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_usb.c (renamed from firmware/targets/f6/furi-hal/furi-hal-usb.c)70
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_usb_cdc.c664
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_usb_cdc_i.h (renamed from firmware/targets/f6/furi-hal/furi-hal-usb-cdc_i.h)2
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_usb_hid.c482
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_usb_i.h13
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_usb_u2f.c (renamed from firmware/targets/f6/furi-hal/furi-hal-usb-u2f.c)165
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_vcp.c (renamed from firmware/targets/f6/furi-hal/furi-hal-vcp.c)114
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_version.c (renamed from firmware/targets/f6/furi-hal/furi-hal-version.c)56
-rw-r--r--firmware/targets/f6/furi_hal/furi_hal_vibro.c (renamed from firmware/targets/f7/furi-hal/furi-hal-vibro.c)5
-rw-r--r--firmware/targets/f6/target.mk6
-rw-r--r--firmware/targets/f7/Inc/FreeRTOSConfig.h136
-rw-r--r--firmware/targets/f7/Inc/stm32.h45
-rw-r--r--firmware/targets/f7/Inc/stm32_assert.h10
-rw-r--r--firmware/targets/f7/Inc/stm32wbxx_hal_conf.h173
-rw-r--r--firmware/targets/f7/Inc/stm32wbxx_it.h2
-rw-r--r--firmware/targets/f7/Inc/tim.h2
-rw-r--r--firmware/targets/f7/Src/comp.c96
-rw-r--r--firmware/targets/f7/Src/main.c9
-rw-r--r--firmware/targets/f7/Src/stm32wbxx_hal_msp.c33
-rw-r--r--firmware/targets/f7/Src/stm32wbxx_it.c4
-rw-r--r--firmware/targets/f7/Src/system_stm32wbxx.c244
-rw-r--r--firmware/targets/f7/Src/tim.c526
-rw-r--r--firmware/targets/f7/ble-glue/app_debug.c375
-rw-r--r--firmware/targets/f7/ble-glue/ble_dbg_conf.h199
-rw-r--r--firmware/targets/f7/ble-glue/dev_info_service.c160
-rw-r--r--firmware/targets/f7/ble-glue/dev_info_service.h23
-rw-r--r--firmware/targets/f7/ble-glue/hw_ipcc.c675
-rw-r--r--firmware/targets/f7/ble_glue/app_common.h (renamed from firmware/targets/f7/ble-glue/app_common.h)8
-rw-r--r--firmware/targets/f7/ble_glue/app_conf.h (renamed from firmware/targets/f7/ble-glue/app_conf.h)204
-rw-r--r--firmware/targets/f7/ble_glue/app_debug.c357
-rw-r--r--firmware/targets/f7/ble_glue/app_debug.h (renamed from firmware/targets/f6/ble-glue/app_debug.h)4
-rw-r--r--firmware/targets/f7/ble_glue/battery_service.c (renamed from firmware/targets/f7/ble-glue/battery_service.c)31
-rw-r--r--firmware/targets/f7/ble_glue/battery_service.h (renamed from firmware/targets/f7/ble-glue/battery_service.h)0
-rw-r--r--firmware/targets/f7/ble_glue/ble_app.c (renamed from firmware/targets/f7/ble-glue/ble_app.c)34
-rw-r--r--firmware/targets/f7/ble_glue/ble_app.h (renamed from firmware/targets/f7/ble-glue/ble_app.h)2
-rw-r--r--firmware/targets/f7/ble_glue/ble_conf.h (renamed from firmware/targets/f6/ble-glue/ble_conf.h)16
-rw-r--r--firmware/targets/f7/ble_glue/ble_dbg_conf.h199
-rw-r--r--firmware/targets/f7/ble_glue/ble_glue.c (renamed from firmware/targets/f6/ble-glue/ble_glue.c)56
-rw-r--r--firmware/targets/f7/ble_glue/ble_glue.h (renamed from firmware/targets/f7/ble-glue/ble_glue.h)8
-rw-r--r--firmware/targets/f7/ble_glue/dev_info_service.c174
-rw-r--r--firmware/targets/f7/ble_glue/dev_info_service.h24
-rw-r--r--firmware/targets/f7/ble_glue/gap.c (renamed from firmware/targets/f7/ble-glue/gap.c)393
-rw-r--r--firmware/targets/f7/ble_glue/gap.h (renamed from firmware/targets/f7/ble-glue/gap.h)6
-rw-r--r--firmware/targets/f7/ble_glue/hid_service.c (renamed from firmware/targets/f6/ble-glue/hid_service.c)192
-rw-r--r--firmware/targets/f7/ble_glue/hid_service.h (renamed from firmware/targets/f7/ble-glue/hid_service.h)0
-rw-r--r--firmware/targets/f7/ble_glue/hw_conf.h (renamed from firmware/targets/f6/ble-glue/hw_conf.h)137
-rw-r--r--firmware/targets/f7/ble_glue/hw_if.h (renamed from firmware/targets/f7/ble-glue/hw_if.h)47
-rw-r--r--firmware/targets/f7/ble_glue/hw_ipcc.c597
-rw-r--r--firmware/targets/f7/ble_glue/serial_service.c (renamed from firmware/targets/f7/ble-glue/serial_service.c)130
-rw-r--r--firmware/targets/f7/ble_glue/serial_service.h (renamed from firmware/targets/f6/ble-glue/serial_service.h)7
-rw-r--r--firmware/targets/f7/ble_glue/tl_dbg_conf.h (renamed from firmware/targets/f7/ble-glue/tl_dbg_conf.h)69
-rw-r--r--firmware/targets/f7/ble_glue/utilities_conf.h (renamed from firmware/targets/f6/ble-glue/utilities_conf.h)27
-rw-r--r--firmware/targets/f7/cube/Inc/FreeRTOSConfig.h137
-rw-r--r--firmware/targets/f7/cube/Inc/stm32_assert.h10
-rw-r--r--firmware/targets/f7/cube/Inc/stm32wbxx_hal_conf.h171
-rw-r--r--firmware/targets/f7/cube/Inc/stm32wbxx_it.h2
-rw-r--r--firmware/targets/f7/cube/Inc/tim.h2
-rw-r--r--firmware/targets/f7/cube/Inc/usb_device.h2
-rw-r--r--firmware/targets/f7/cube/Inc/usbd_cdc_if.h6
-rw-r--r--firmware/targets/f7/cube/Inc/usbd_conf.h55
-rw-r--r--firmware/targets/f7/cube/Inc/usbd_desc.h12
-rw-r--r--firmware/targets/f7/cube/Src/adc.c155
-rw-r--r--firmware/targets/f7/cube/Src/aes.c174
-rw-r--r--firmware/targets/f7/cube/Src/app_freertos.c102
-rw-r--r--firmware/targets/f7/cube/Src/comp.c116
-rw-r--r--firmware/targets/f7/cube/Src/crc.c86
-rw-r--r--firmware/targets/f7/cube/Src/gpio.c238
-rw-r--r--firmware/targets/f7/cube/Src/i2c.c73
-rw-r--r--firmware/targets/f7/cube/Src/main.c349
-rw-r--r--firmware/targets/f7/cube/Src/pka.c68
-rw-r--r--firmware/targets/f7/cube/Src/rf.c17
-rw-r--r--firmware/targets/f7/cube/Src/rng.c70
-rw-r--r--firmware/targets/f7/cube/Src/rtc.c152
-rw-r--r--firmware/targets/f7/cube/Src/spi.c302
-rw-r--r--firmware/targets/f7/cube/Src/stm32wbxx_hal_msp.c33
-rw-r--r--firmware/targets/f7/cube/Src/stm32wbxx_it.c248
-rw-r--r--firmware/targets/f7/cube/Src/system_stm32wbxx.c248
-rw-r--r--firmware/targets/f7/cube/Src/tim.c589
-rw-r--r--firmware/targets/f7/cube/Src/usart.c100
-rw-r--r--firmware/targets/f7/cube/Src/usb_device.c43
-rw-r--r--firmware/targets/f7/cube/Src/usbd_cdc_if.c161
-rw-r--r--firmware/targets/f7/cube/Src/usbd_conf.c707
-rw-r--r--firmware/targets/f7/cube/Src/usbd_desc.c272
-rw-r--r--firmware/targets/f7/fatfs/fatfs.c34
-rw-r--r--firmware/targets/f7/fatfs/ffconf.h78
-rw-r--r--firmware/targets/f7/fatfs/spi_sd_hal.c5
-rw-r--r--firmware/targets/f7/fatfs/stm32_adafruit_sd.c59
-rw-r--r--firmware/targets/f7/fatfs/stm32_adafruit_sd.h225
-rw-r--r--firmware/targets/f7/fatfs/syscall.c72
-rw-r--r--firmware/targets/f7/fatfs/user_diskio.c2
-rw-r--r--firmware/targets/f7/furi-hal/furi-hal-usb-cdc.c631
-rw-r--r--firmware/targets/f7/furi-hal/furi-hal-usb-hid.c481
-rw-r--r--firmware/targets/f7/furi-hal/furi-hal-usb_i.h13
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal.c (renamed from firmware/targets/f6/furi-hal/furi-hal.c)17
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_bootloader.c (renamed from firmware/targets/f6/furi-hal/furi-hal-bootloader.c)8
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_bt.c (renamed from firmware/targets/f7/furi-hal/furi-hal-bt.c)89
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_bt_hid.c (renamed from firmware/targets/f6/furi-hal/furi-hal-bt-hid.c)140
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_bt_serial.c (renamed from firmware/targets/f7/furi-hal/furi-hal-bt-serial.c)7
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_clock.c (renamed from firmware/targets/f6/furi-hal/furi-hal-clock.c)51
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_clock.h (renamed from firmware/targets/f7/furi-hal/furi-hal-clock.h)0
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_compress.c (renamed from firmware/targets/f6/furi-hal/furi-hal-compress.c)83
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_console.c (renamed from firmware/targets/f6/furi-hal/furi-hal-console.c)24
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_console.h (renamed from firmware/targets/f7/furi-hal/furi-hal-console.h)0
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_crypto.c (renamed from firmware/targets/f6/furi-hal/furi-hal-crypto.c)32
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_delay.c (renamed from firmware/targets/f7/furi-hal/furi-hal-delay.c)4
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_flash.c (renamed from firmware/targets/f6/furi-hal/furi-hal-flash.c)49
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_flash.h (renamed from firmware/targets/f7/furi-hal/furi-hal-flash.h)1
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_gpio.c (renamed from firmware/targets/f7/furi-hal/furi-hal-gpio.c)4
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_gpio.h (renamed from firmware/targets/f7/furi-hal/furi-hal-gpio.h)0
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_i2c.c (renamed from firmware/targets/f7/furi-hal/furi-hal-i2c.c)7
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_i2c_config.c (renamed from firmware/targets/f6/furi-hal/furi-hal-i2c-config.c)74
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_i2c_config.h (renamed from firmware/targets/f7/furi-hal/furi-hal-i2c-config.h)2
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_i2c_types.h (renamed from firmware/targets/f6/furi-hal/furi-hal-i2c-types.h)4
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_ibutton.c (renamed from firmware/targets/f7/furi-hal/furi-hal-ibutton.c)4
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_info.c (renamed from firmware/targets/f6/furi-hal/furi-hal-info.c)4
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_interrupt.c (renamed from firmware/targets/f6/furi-hal/furi-hal-interrupt.c)67
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_interrupt.h (renamed from firmware/targets/f7/furi-hal/furi-hal-interrupt.h)8
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_irda.c (renamed from firmware/targets/f6/furi-hal/furi-hal-irda.c)202
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_light.c (renamed from firmware/targets/f7/furi-hal/furi-hal-light.c)2
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_nfc.c (renamed from firmware/targets/f6/furi-hal/furi-hal-nfc.c)36
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_os.c (renamed from firmware/targets/f6/furi-hal/furi-hal-os.c)26
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_os.h (renamed from firmware/targets/f6/furi-hal/furi-hal-os.h)1
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_os_timer.h (renamed from firmware/targets/f6/furi-hal/furi-hal-os-timer.h)17
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_power.c (renamed from firmware/targets/f6/furi-hal/furi-hal-power.c)138
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_pwm.c (renamed from firmware/targets/f6/furi-hal/furi-hal-pwm.c)3
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_pwm.h (renamed from firmware/targets/f7/furi-hal/furi-hal-pwm.h)0
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_random.c (renamed from firmware/targets/f6/furi-hal/furi-hal-random.c)26
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_resources.c (renamed from firmware/targets/f7/furi-hal/furi-hal-resources.c)35
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_resources.h (renamed from firmware/targets/f7/furi-hal/furi-hal-resources.h)1
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_rfid.c (renamed from firmware/targets/f7/furi-hal/furi-hal-rfid.c)6
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_rtc.c (renamed from firmware/targets/f6/furi-hal/furi-hal-rtc.c)32
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_sd.c (renamed from firmware/targets/f7/furi-hal/furi-hal-sd.c)2
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_spi.c (renamed from firmware/targets/f6/furi-hal/furi-hal-spi.c)33
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_spi_config.c (renamed from firmware/targets/f6/furi-hal/furi-hal-spi-config.c)198
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_spi_config.h (renamed from firmware/targets/f6/furi-hal/furi-hal-spi-config.h)2
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_spi_types.h (renamed from firmware/targets/f7/furi-hal/furi-hal-spi-types.h)6
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_subghz.c (renamed from firmware/targets/f6/furi-hal/furi-hal-subghz.c)16
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_task.c (renamed from firmware/targets/f6/furi-hal/furi-hal-task.c)2
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_task.h (renamed from firmware/targets/f7/furi-hal/furi-hal-task.h)0
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_uart.c (renamed from firmware/targets/f6/furi-hal/furi-hal-uart.c)4
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_uart.h (renamed from firmware/targets/f6/furi-hal/furi-hal-uart.h)2
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_usb.c (renamed from firmware/targets/f7/furi-hal/furi-hal-usb.c)70
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_usb_cdc.c664
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_usb_cdc_i.h (renamed from firmware/targets/f7/furi-hal/furi-hal-usb-cdc_i.h)2
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_usb_hid.c482
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_usb_i.h13
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_usb_u2f.c (renamed from firmware/targets/f7/furi-hal/furi-hal-usb-u2f.c)165
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_vcp.c (renamed from firmware/targets/f7/furi-hal/furi-hal-vcp.c)114
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_version.c (renamed from firmware/targets/f7/furi-hal/furi-hal-version.c)56
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_vibro.c (renamed from firmware/targets/f6/furi-hal/furi-hal-vibro.c)5
-rw-r--r--firmware/targets/f7/target.mk6
-rw-r--r--firmware/targets/furi-hal-include/furi-hal.h46
-rw-r--r--firmware/targets/furi_hal_include/furi_hal.h46
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_bootloader.h (renamed from firmware/targets/furi-hal-include/furi-hal-bootloader.h)7
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_bt.h (renamed from firmware/targets/furi-hal-include/furi-hal-bt.h)8
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_bt_hid.h (renamed from firmware/targets/furi-hal-include/furi-hal-bt-hid.h)2
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_bt_serial.h (renamed from firmware/targets/furi-hal-include/furi-hal-bt-serial.h)5
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_compress.h (renamed from firmware/targets/furi-hal-include/furi-hal-compress.h)18
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_crypto.h (renamed from firmware/targets/furi-hal-include/furi-hal-crypto.h)2
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_delay.h (renamed from firmware/targets/furi-hal-include/furi-hal-delay.h)2
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_i2c.h (renamed from firmware/targets/furi-hal-include/furi-hal-i2c.h)4
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_ibutton.h (renamed from firmware/targets/furi-hal-include/furi-hal-ibutton.h)2
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_info.h (renamed from firmware/targets/furi-hal-include/furi-hal-info.h)5
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_irda.h (renamed from firmware/targets/furi-hal-include/furi-hal-irda.h)34
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_light.h (renamed from firmware/targets/furi-hal-include/furi-hal-light.h)4
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_nfc.h (renamed from firmware/targets/furi-hal-include/furi-hal-nfc.h)32
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_power.h (renamed from firmware/targets/furi-hal-include/furi-hal-power.h)2
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_random.h (renamed from firmware/targets/furi-hal-include/furi-hal-random.h)0
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_rfid.h (renamed from firmware/targets/furi-hal-include/furi-hal-rfid.h)2
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_rtc.h (renamed from firmware/targets/furi-hal-include/furi-hal-rtc.h)18
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_sd.h (renamed from firmware/targets/furi-hal-include/furi-hal-sd.h)4
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_spi.h (renamed from firmware/targets/furi-hal-include/furi-hal-spi.h)21
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_subghz.h (renamed from firmware/targets/furi-hal-include/furi-hal-subghz.h)30
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_usb.h (renamed from firmware/targets/furi-hal-include/furi-hal-usb.h)8
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_usb_hid.h (renamed from firmware/targets/furi-hal-include/furi-hal-usb-hid.h)230
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_usb_hid_u2f.h (renamed from firmware/targets/furi-hal-include/furi-hal-usb-hid-u2f.h)0
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_vcp.h (renamed from firmware/targets/furi-hal-include/furi-hal-vcp.h)2
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_version.h (renamed from firmware/targets/furi-hal-include/furi-hal-version.h)32
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_vibro.h (renamed from firmware/targets/furi-hal-include/furi-hal-vibro.h)4
311 files changed, 15154 insertions, 15001 deletions
diff --git a/firmware/Makefile b/firmware/Makefile
index e8f3f93a..cf100a21 100644
--- a/firmware/Makefile
+++ b/firmware/Makefile
@@ -8,7 +8,7 @@ include $(PROJECT_ROOT)/core/core.mk
include $(PROJECT_ROOT)/applications/applications.mk
include $(PROJECT_ROOT)/lib/lib.mk
-CFLAGS += -I$(PROJECT_ROOT) -Itargets/furi-hal-include
+CFLAGS += -I$(PROJECT_ROOT) -Itargets/furi_hal_include
CFLAGS += -Werror -Wno-address-of-packed-member
CPPFLAGS += -Werror
diff --git a/firmware/targets/f6/Inc/FreeRTOSConfig.h b/firmware/targets/f6/Inc/FreeRTOSConfig.h
index 6235a2d4..1128f084 100644
--- a/firmware/targets/f6/Inc/FreeRTOSConfig.h
+++ b/firmware/targets/f6/Inc/FreeRTOSConfig.h
@@ -9,80 +9,80 @@ extern uint32_t SystemCoreClock;
#define CMSIS_device_header "stm32wbxx.h"
#endif /* CMSIS_device_header */
-#define configENABLE_FPU 1
-#define configENABLE_MPU 0
-
-#define configUSE_PREEMPTION 1
-#define configSUPPORT_STATIC_ALLOCATION 0
-#define configSUPPORT_DYNAMIC_ALLOCATION 1
-#define configUSE_IDLE_HOOK 0
-#define configUSE_TICK_HOOK 0
-#define configCPU_CLOCK_HZ ( SystemCoreClock )
-#define configTICK_RATE_HZ ((TickType_t)1024)
-#define configMAX_PRIORITIES ( 56 )
-#define configMINIMAL_STACK_SIZE ((uint16_t)128)
+#define configENABLE_FPU 1
+#define configENABLE_MPU 0
+
+#define configUSE_PREEMPTION 1
+#define configSUPPORT_STATIC_ALLOCATION 0
+#define configSUPPORT_DYNAMIC_ALLOCATION 1
+#define configUSE_IDLE_HOOK 0
+#define configUSE_TICK_HOOK 0
+#define configCPU_CLOCK_HZ (SystemCoreClock)
+#define configTICK_RATE_HZ ((TickType_t)1024)
+#define configMAX_PRIORITIES (56)
+#define configMINIMAL_STACK_SIZE ((uint16_t)128)
/* Heap size determined automatically by linker */
// #define configTOTAL_HEAP_SIZE ((size_t)0)
-#define configMAX_TASK_NAME_LEN ( 16 )
-#define configGENERATE_RUN_TIME_STATS 0
-#define configUSE_TRACE_FACILITY 1
-#define configUSE_16_BIT_TICKS 0
-#define configUSE_MUTEXES 1
-#define configQUEUE_REGISTRY_SIZE 8
-#define configCHECK_FOR_STACK_OVERFLOW 1
-#define configUSE_RECURSIVE_MUTEXES 1
-#define configUSE_COUNTING_SEMAPHORES 1
-#define configENABLE_BACKWARD_COMPATIBILITY 0
-#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
-#define configUSE_TICKLESS_IDLE 2
-#define configRECORD_STACK_HIGH_ADDRESS 1
-#define configUSE_NEWLIB_REENTRANT 0
+#define configMAX_TASK_NAME_LEN (16)
+#define configGENERATE_RUN_TIME_STATS 0
+#define configUSE_TRACE_FACILITY 1
+#define configUSE_16_BIT_TICKS 0
+#define configUSE_MUTEXES 1
+#define configQUEUE_REGISTRY_SIZE 8
+#define configCHECK_FOR_STACK_OVERFLOW 1
+#define configUSE_RECURSIVE_MUTEXES 1
+#define configUSE_COUNTING_SEMAPHORES 1
+#define configENABLE_BACKWARD_COMPATIBILITY 0
+#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
+#define configUSE_TICKLESS_IDLE 2
+#define configRECORD_STACK_HIGH_ADDRESS 1
+#define configUSE_NEWLIB_REENTRANT 0
/* Defaults to size_t for backward compatibility, but can be changed
if lengths will always be less than the number of bytes in a size_t. */
-#define configMESSAGE_BUFFER_LENGTH_TYPE size_t
-#define configNUM_THREAD_LOCAL_STORAGE_POINTERS 1
-#define configEXPECTED_IDLE_TIME_BEFORE_SLEEP 4
+#define configMESSAGE_BUFFER_LENGTH_TYPE size_t
+#define configNUM_THREAD_LOCAL_STORAGE_POINTERS 1
+#define configEXPECTED_IDLE_TIME_BEFORE_SLEEP 4
/* Co-routine definitions. */
-#define configUSE_CO_ROUTINES 0
+#define configUSE_CO_ROUTINES 0
/* Software timer definitions. */
-#define configUSE_TIMERS 1
-#define configTIMER_TASK_PRIORITY ( 2 )
-#define configTIMER_QUEUE_LENGTH 32
-#define configTIMER_TASK_STACK_DEPTH 256
-#define configTIMER_SERVICE_TASK_NAME "TimersSrv"
+#define configUSE_TIMERS 1
+#define configTIMER_TASK_PRIORITY (2)
+#define configTIMER_QUEUE_LENGTH 32
+#define configTIMER_TASK_STACK_DEPTH 256
+#define configTIMER_SERVICE_TASK_NAME "TimersSrv"
-#define configIDLE_TASK_NAME "(-_-)"
+#define configIDLE_TASK_NAME "(-_-)"
/* Set the following definitions to 1 to include the API function, or zero
to exclude the API function. */
-#define INCLUDE_eTaskGetState 1
-#define INCLUDE_uxTaskGetStackHighWaterMark 1
-#define INCLUDE_uxTaskPriorityGet 1
-#define INCLUDE_vTaskCleanUpResources 0
-#define INCLUDE_vTaskDelay 1
-#define INCLUDE_vTaskDelayUntil 1
-#define INCLUDE_vTaskDelete 1
-#define INCLUDE_vTaskPrioritySet 1
-#define INCLUDE_vTaskSuspend 1
-#define INCLUDE_xQueueGetMutexHolder 1
-#define INCLUDE_xTaskGetCurrentTaskHandle 1
-#define INCLUDE_xTaskGetSchedulerState 1
-#define INCLUDE_xTimerPendFunctionCall 1
+#define INCLUDE_eTaskGetState 1
+#define INCLUDE_uxTaskGetStackHighWaterMark 1
+#define INCLUDE_uxTaskPriorityGet 1
+#define INCLUDE_vTaskCleanUpResources 0
+#define INCLUDE_vTaskDelay 1
+#define INCLUDE_vTaskDelayUntil 1
+#define INCLUDE_vTaskDelete 1
+#define INCLUDE_vTaskPrioritySet 1
+#define INCLUDE_vTaskSuspend 1
+#define INCLUDE_xQueueGetMutexHolder 1
+#define INCLUDE_xTaskGetCurrentTaskHandle 1
+#define INCLUDE_xTaskGetSchedulerState 1
+#define INCLUDE_xTimerPendFunctionCall 1
/* CMSIS-RTOS V2 flags */
-#define configUSE_OS2_THREAD_SUSPEND_RESUME 1
-#define configUSE_OS2_THREAD_ENUMERATE 1
-#define configUSE_OS2_EVENTFLAGS_FROM_ISR 1
-#define configUSE_OS2_THREAD_FLAGS 1
-#define configUSE_OS2_TIMER 1
-#define configUSE_OS2_MUTEX 1
+#define configUSE_OS2_THREAD_SUSPEND_RESUME 1
+#define configUSE_OS2_THREAD_ENUMERATE 1
+#define configUSE_OS2_EVENTFLAGS_FROM_ISR 1
+#define configUSE_OS2_THREAD_FLAGS 1
+#define configUSE_OS2_TIMER 1
+#define configUSE_OS2_MUTEX 1
/* CMSIS-RTOS */
-#define configTASK_NOTIFICATION_ARRAY_ENTRIES 2
+#define configTASK_NOTIFICATION_ARRAY_ENTRIES 2
#define CMSIS_TASK_NOTIFY_INDEX 1
/*
@@ -93,15 +93,15 @@ to exclude the API function. */
/* Cortex-M specific definitions. */
#ifdef __NVIC_PRIO_BITS
- /* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */
- #define configPRIO_BITS __NVIC_PRIO_BITS
+/* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */
+#define configPRIO_BITS __NVIC_PRIO_BITS
#else
- #define configPRIO_BITS 4
+#define configPRIO_BITS 4
#endif
/* The lowest interrupt priority that can be used in a call to a "set priority"
function. */
-#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15
+#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15
/* The highest interrupt priority that can be used by any interrupt service
routine that makes calls to interrupt safe FreeRTOS API functions. DO NOT CALL
@@ -111,21 +111,27 @@ PRIORITY THAN THIS! (higher priorities are lower numeric values. */
/* Interrupt priorities used by the kernel port layer itself. These are generic
to all Cortex-M ports, and do not rely on any particular library functions. */
-#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
+#define configKERNEL_INTERRUPT_PRIORITY \
+ (configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
-#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
+#define configMAX_SYSCALL_INTERRUPT_PRIORITY \
+ (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))
/* Normal assert() semantics without relying on the provision of an assert.h
header file. */
#include <furi/check.h>
-#define configASSERT( x ) if ((x) == 0) { furi_crash("FreeRTOS Assert"); }
+#define configASSERT(x) \
+ if((x) == 0) { \
+ furi_crash("FreeRTOS Assert"); \
+ }
/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
standard names. */
-#define vPortSVCHandler SVC_Handler
+#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION 1
-#define configOVERRIDE_DEFAULT_TICK_CONFIGURATION 1 /* required only for Keil but does not hurt otherwise */
+#define configOVERRIDE_DEFAULT_TICK_CONFIGURATION \
+ 1 /* required only for Keil but does not hurt otherwise */
diff --git a/firmware/targets/f6/Inc/stm32.h b/firmware/targets/f6/Inc/stm32.h
index 45344fe3..83dda96e 100644
--- a/firmware/targets/f6/Inc/stm32.h
+++ b/firmware/targets/f6/Inc/stm32.h
@@ -2,51 +2,50 @@
#define _STM32_H_
/* modify bitfield */
-#define _BMD(reg, msk, val) (reg) = (((reg) & ~(msk)) | (val))
+#define _BMD(reg, msk, val) (reg) = (((reg) & ~(msk)) | (val))
/* set bitfield */
-#define _BST(reg, bits) (reg) = ((reg) | (bits))
+#define _BST(reg, bits) (reg) = ((reg) | (bits))
/* clear bitfield */
-#define _BCL(reg, bits) (reg) = ((reg) & ~(bits))
+#define _BCL(reg, bits) (reg) = ((reg) & ~(bits))
/* wait until bitfield set */
-#define _WBS(reg, bits) while(((reg) & (bits)) == 0)
+#define _WBS(reg, bits) while(((reg) & (bits)) == 0)
/* wait until bitfield clear */
-#define _WBC(reg, bits) while(((reg) & (bits)) != 0)
+#define _WBC(reg, bits) while(((reg) & (bits)) != 0)
/* wait for bitfield value */
-#define _WVL(reg, msk, val) while(((reg) & (msk)) != (val))
+#define _WVL(reg, msk, val) while(((reg) & (msk)) != (val))
/* bit value */
-#define _BV(bit) (0x01 << (bit))
+#define _BV(bit) (0x01 << (bit))
#if defined(STM32F0)
- #include "STM32F0xx/Include/stm32f0xx.h"
+#include "STM32F0xx/Include/stm32f0xx.h"
#elif defined(STM32F1)
- #include "STM32F1xx/Include/stm32f1xx.h"
+#include "STM32F1xx/Include/stm32f1xx.h"
#elif defined(STM32F2)
- #include "STM32F2xx/Include/stm32f2xx.h"
+#include "STM32F2xx/Include/stm32f2xx.h"
#elif defined(STM32F3)
- #include "STM32F3xx/Include/stm32f3xx.h"
+#include "STM32F3xx/Include/stm32f3xx.h"
#elif defined(STM32F4)
- #include "STM32F4xx/Include/stm32f4xx.h"
+#include "STM32F4xx/Include/stm32f4xx.h"
#elif defined(STM32F7)
- #include "STM32F7xx/Include/stm32f7xx.h"
+#include "STM32F7xx/Include/stm32f7xx.h"
#elif defined(STM32H7)
- #include "STM32H7xx/Include/stm32h7xx.h"
+#include "STM32H7xx/Include/stm32h7xx.h"
#elif defined(STM32L0)
- #include "STM32L0xx/Include/stm32l0xx.h"
+#include "STM32L0xx/Include/stm32l0xx.h"
#elif defined(STM32L1)
- #include "STM32L1xx/Include/stm32l1xx.h"
+#include "STM32L1xx/Include/stm32l1xx.h"
#elif defined(STM32L4)
- #include "STM32L4xx/Include/stm32l4xx.h"
+#include "STM32L4xx/Include/stm32l4xx.h"
#elif defined(STM32L5)
- #include "STM32L5xx/Include/stm32l5xx.h"
+#include "STM32L5xx/Include/stm32l5xx.h"
#elif defined(STM32G0)
- #include "STM32G0xx/Include/stm32g0xx.h"
+#include "STM32G0xx/Include/stm32g0xx.h"
#elif defined(STM32G4)
- #include "STM32G4xx/Include/stm32g4xx.h"
+#include "STM32G4xx/Include/stm32g4xx.h"
#elif defined(STM32WB)
- #include "STM32WBxx/Include/stm32wbxx.h"
+#include "STM32WBxx/Include/stm32wbxx.h"
#else
- #error "STM32 family not defined"
+#error "STM32 family not defined"
#endif
-
#endif // _STM32_H_
diff --git a/firmware/targets/f6/Inc/stm32_assert.h b/firmware/targets/f6/Inc/stm32_assert.h
index 9f6261ff..b70ee402 100644
--- a/firmware/targets/f6/Inc/stm32_assert.h
+++ b/firmware/targets/f6/Inc/stm32_assert.h
@@ -21,14 +21,14 @@
#define __STM32_ASSERT_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
-#ifdef USE_FULL_ASSERT
- #define assert_param(expr) ((expr) ? (void)0U : assert_failed())
- void assert_failed();
+#ifdef USE_FULL_ASSERT
+#define assert_param(expr) ((expr) ? (void)0U : assert_failed())
+void assert_failed();
#else
- #define assert_param(expr) ((void)0U)
+#define assert_param(expr) ((void)0U)
#endif /* USE_FULL_ASSERT */
#ifdef __cplusplus
diff --git a/firmware/targets/f6/Inc/stm32wbxx_hal_conf.h b/firmware/targets/f6/Inc/stm32wbxx_hal_conf.h
index dc6a7ae4..06f5c167 100644
--- a/firmware/targets/f6/Inc/stm32wbxx_hal_conf.h
+++ b/firmware/targets/f6/Inc/stm32wbxx_hal_conf.h
@@ -22,7 +22,7 @@
#define __STM32WBxx_HAL_CONF_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Exported types ------------------------------------------------------------*/
@@ -66,26 +66,26 @@
#define HAL_PWR_MODULE_ENABLED
#define HAL_RCC_MODULE_ENABLED
-#define USE_HAL_ADC_REGISTER_CALLBACKS 0u
-#define USE_HAL_COMP_REGISTER_CALLBACKS 0u
-#define USE_HAL_CRYP_REGISTER_CALLBACKS 0u
-#define USE_HAL_I2C_REGISTER_CALLBACKS 0u
-#define USE_HAL_IRDA_REGISTER_CALLBACKS 0u
-#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0u
-#define USE_HAL_PCD_REGISTER_CALLBACKS 0u
-#define USE_HAL_PKA_REGISTER_CALLBACKS 0u
-#define USE_HAL_QSPI_REGISTER_CALLBACKS 0u
-#define USE_HAL_RNG_REGISTER_CALLBACKS 0u
-#define USE_HAL_RTC_REGISTER_CALLBACKS 0u
-#define USE_HAL_SAI_REGISTER_CALLBACKS 0u
+#define USE_HAL_ADC_REGISTER_CALLBACKS 0u
+#define USE_HAL_COMP_REGISTER_CALLBACKS 0u
+#define USE_HAL_CRYP_REGISTER_CALLBACKS 0u
+#define USE_HAL_I2C_REGISTER_CALLBACKS 0u
+#define USE_HAL_IRDA_REGISTER_CALLBACKS 0u
+#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0u
+#define USE_HAL_PCD_REGISTER_CALLBACKS 0u
+#define USE_HAL_PKA_REGISTER_CALLBACKS 0u
+#define USE_HAL_QSPI_REGISTER_CALLBACKS 0u
+#define USE_HAL_RNG_REGISTER_CALLBACKS 0u
+#define USE_HAL_RTC_REGISTER_CALLBACKS 0u
+#define USE_HAL_SAI_REGISTER_CALLBACKS 0u
#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0u
-#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0u
-#define USE_HAL_SPI_REGISTER_CALLBACKS 0u
-#define USE_HAL_TIM_REGISTER_CALLBACKS 0u
-#define USE_HAL_TSC_REGISTER_CALLBACKS 0u
-#define USE_HAL_UART_REGISTER_CALLBACKS 0u
-#define USE_HAL_USART_REGISTER_CALLBACKS 0u
-#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u
+#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0u
+#define USE_HAL_SPI_REGISTER_CALLBACKS 0u
+#define USE_HAL_TIM_REGISTER_CALLBACKS 0u
+#define USE_HAL_TSC_REGISTER_CALLBACKS 0u
+#define USE_HAL_UART_REGISTER_CALLBACKS 0u
+#define USE_HAL_USART_REGISTER_CALLBACKS 0u
+#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u
/* ########################## Oscillator Values adaptation ####################*/
/**
@@ -93,20 +93,20 @@
* This value is used by the RCC HAL module to compute the system frequency
* (when HSE is used as system clock source, directly or through the PLL).
*/
-#if !defined (HSE_VALUE)
-#define HSE_VALUE 32000000U /*!< Value of the External oscillator in Hz */
+#if !defined(HSE_VALUE)
+#define HSE_VALUE 32000000U /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
-#if !defined (HSE_STARTUP_TIMEOUT)
- #define HSE_STARTUP_TIMEOUT ((uint32_t)100) /*!< Time out for HSE start up, in ms */
+#if !defined(HSE_STARTUP_TIMEOUT)
+#define HSE_STARTUP_TIMEOUT ((uint32_t)100) /*!< Time out for HSE start up, in ms */
#endif /* HSE_STARTUP_TIMEOUT */
/**
* @brief Internal Multiple Speed oscillator (MSI) default value.
* This value is the default MSI range value after Reset.
*/
-#if !defined (MSI_VALUE)
- #define MSI_VALUE ((uint32_t)4000000) /*!< Value of the Internal oscillator in Hz*/
+#if !defined(MSI_VALUE)
+#define MSI_VALUE ((uint32_t)4000000) /*!< Value of the Internal oscillator in Hz*/
#endif /* MSI_VALUE */
/**
@@ -114,24 +114,24 @@
* This value is used by the RCC HAL module to compute the system frequency
* (when HSI is used as system clock source, directly or through the PLL).
*/
-#if !defined (HSI_VALUE)
-#define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/
+#if !defined(HSI_VALUE)
+#define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/
#endif /* HSI_VALUE */
/**
* @brief Internal Low Speed oscillator (LSI1) value.
*/
-#if !defined (LSI1_VALUE)
- #define LSI1_VALUE ((uint32_t)32000) /*!< LSI1 Typical Value in Hz*/
-#endif /* LSI1_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
+#if !defined(LSI1_VALUE)
+#define LSI1_VALUE ((uint32_t)32000) /*!< LSI1 Typical Value in Hz*/
+#endif /* LSI1_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
The real value may vary depending on the variations
in voltage and temperature.*/
/**
* @brief Internal Low Speed oscillator (LSI2) value.
*/
-#if !defined (LSI2_VALUE)
- #define LSI2_VALUE ((uint32_t)32000) /*!< LSI2 Typical Value in Hz*/
-#endif /* LSI2_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
+#if !defined(LSI2_VALUE)
+#define LSI2_VALUE ((uint32_t)32000) /*!< LSI2 Typical Value in Hz*/
+#endif /* LSI2_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
The real value may vary depending on the variations
in voltage and temperature.*/
@@ -139,20 +139,20 @@
* @brief External Low Speed oscillator (LSE) value.
* This value is used by the UART, RTC HAL module to compute the system frequency
*/
-#if !defined (LSE_VALUE)
-#define LSE_VALUE 32768U /*!< Value of the External oscillator in Hz*/
+#if !defined(LSE_VALUE)
+#define LSE_VALUE 32768U /*!< Value of the External oscillator in Hz*/
#endif /* LSE_VALUE */
/**
* @brief Internal Multiple Speed oscillator (HSI48) default value.
* This value is the default HSI48 range value after Reset.
*/
-#if !defined (HSI48_VALUE)
- #define HSI48_VALUE ((uint32_t)48000000) /*!< Value of the Internal oscillator in Hz*/
+#if !defined(HSI48_VALUE)
+#define HSI48_VALUE ((uint32_t)48000000) /*!< Value of the Internal oscillator in Hz*/
#endif /* HSI48_VALUE */
-#if !defined (LSE_STARTUP_TIMEOUT)
-#define LSE_STARTUP_TIMEOUT 1000U /*!< Time out for LSE start up, in ms */
+#if !defined(LSE_STARTUP_TIMEOUT)
+#define LSE_STARTUP_TIMEOUT 1000U /*!< Time out for LSE start up, in ms */
#endif /* HSE_STARTUP_TIMEOUT */
/**
@@ -160,8 +160,9 @@
* This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source
* frequency.
*/
-#if !defined (EXTERNAL_SAI1_CLOCK_VALUE)
- #define EXTERNAL_SAI1_CLOCK_VALUE ((uint32_t)2097000) /*!< Value of the SAI1 External clock source in Hz*/
+#if !defined(EXTERNAL_SAI1_CLOCK_VALUE)
+#define EXTERNAL_SAI1_CLOCK_VALUE \
+ ((uint32_t)2097000) /*!< Value of the SAI1 External clock source in Hz*/
#endif /* EXTERNAL_SAI1_CLOCK_VALUE */
/* Tip: To avoid modifying this file each time you need to use different HSE,
@@ -172,19 +173,19 @@
* @brief This is the HAL system configuration section
*/
-#define VDD_VALUE 3300U /*!< Value of VDD in mv */
-#define TICK_INT_PRIORITY 0U /*!< tick interrupt priority */
-#define USE_RTOS 0U
-#define PREFETCH_ENABLE 1U
-#define INSTRUCTION_CACHE_ENABLE 1U
-#define DATA_CACHE_ENABLE 1U
+#define VDD_VALUE 3300U /*!< Value of VDD in mv */
+#define TICK_INT_PRIORITY 0U /*!< tick interrupt priority */
+#define USE_RTOS 0U
+#define PREFETCH_ENABLE 1U
+#define INSTRUCTION_CACHE_ENABLE 1U
+#define DATA_CACHE_ENABLE 1U
/* ########################## Assert Selection ############################## */
/**
* @brief Uncomment the line below to expanse the "assert_param" macro in the
* HAL drivers code
*/
-#define USE_FULL_ASSERT 1U
+#define USE_FULL_ASSERT 1U
/* ################## SPI peripheral configuration ########################## */
@@ -193,146 +194,146 @@
* Deactivated: CRC code cleaned from driver
*/
-#define USE_SPI_CRC 0U
+#define USE_SPI_CRC 0U
/* Includes ------------------------------------------------------------------*/
/**
* @brief Include module's header file
*/
#ifdef HAL_DMA_MODULE_ENABLED
- #include "stm32wbxx_hal_dma.h"
+#include "stm32wbxx_hal_dma.h"
#endif /* HAL_DMA_MODULE_ENABLED */
#ifdef HAL_ADC_MODULE_ENABLED
- #include "stm32wbxx_hal_adc.h"
+#include "stm32wbxx_hal_adc.h"
#endif /* HAL_ADC_MODULE_ENABLED */
#ifdef HAL_COMP_MODULE_ENABLED
- #include "stm32wbxx_hal_comp.h"
+#include "stm32wbxx_hal_comp.h"
#endif /* HAL_COMP_MODULE_ENABLED */
#ifdef HAL_CORTEX_MODULE_ENABLED
- #include "stm32wbxx_hal_cortex.h"
+#include "stm32wbxx_hal_cortex.h"
#endif /* HAL_CORTEX_MODULE_ENABLED */
#ifdef HAL_CRC_MODULE_ENABLED
- #include "stm32wbxx_hal_crc.h"
+#include "stm32wbxx_hal_crc.h"
#endif /* HAL_CRC_MODULE_ENABLED */
#ifdef HAL_CRYP_MODULE_ENABLED
- #include "stm32wbxx_hal_cryp.h"
+#include "stm32wbxx_hal_cryp.h"
#endif /* HAL_CRYP_MODULE_ENABLED */
#ifdef HAL_EXTI_MODULE_ENABLED
- #include "stm32wbxx_hal_exti.h"
+#include "stm32wbxx_hal_exti.h"
#endif /* HAL_EXTI_MODULE_ENABLED */
#ifdef HAL_FLASH_MODULE_ENABLED
- #include "stm32wbxx_hal_flash.h"
+#include "stm32wbxx_hal_flash.h"
#endif /* HAL_FLASH_MODULE_ENABLED */
#ifdef HAL_GPIO_MODULE_ENABLED
- #include "stm32wbxx_hal_gpio.h"
+#include "stm32wbxx_hal_gpio.h"
#endif /* HAL_GPIO_MODULE_ENABLED */
#ifdef HAL_HSEM_MODULE_ENABLED
- #include "stm32wbxx_hal_hsem.h"
+#include "stm32wbxx_hal_hsem.h"
#endif /* HAL_HSEM_MODULE_ENABLED */
#ifdef HAL_I2C_MODULE_ENABLED
- #include "stm32wbxx_hal_i2c.h"
+#include "stm32wbxx_hal_i2c.h"
#endif /* HAL_I2C_MODULE_ENABLED */
#ifdef HAL_IPCC_MODULE_ENABLED
- #include "stm32wbxx_hal_ipcc.h"
+#include "stm32wbxx_hal_ipcc.h"
#endif /* HAL_IPCC_MODULE_ENABLED */
#ifdef HAL_IRDA_MODULE_ENABLED
- #include "stm32wbxx_hal_irda.h"
+#include "stm32wbxx_hal_irda.h"
#endif /* HAL_IRDA_MODULE_ENABLED */
#ifdef HAL_IWDG_MODULE_ENABLED
- #include "stm32wbxx_hal_iwdg.h"
+#include "stm32wbxx_hal_iwdg.h"
#endif /* HAL_IWDG_MODULE_ENABLED */
#ifdef HAL_LCD_MODULE_ENABLED
- #include "stm32wbxx_hal_lcd.h"
+#include "stm32wbxx_hal_lcd.h"
#endif /* HAL_LCD_MODULE_ENABLED */
#ifdef HAL_LPTIM_MODULE_ENABLED
- #include "stm32wbxx_hal_lptim.h"
+#include "stm32wbxx_hal_lptim.h"
#endif /* HAL_LPTIM_MODULE_ENABLED */
#ifdef HAL_PCD_MODULE_ENABLED
- #include "stm32wbxx_hal_pcd.h"
+#include "stm32wbxx_hal_pcd.h"
#endif /* HAL_PCD_MODULE_ENABLED */
#ifdef HAL_PKA_MODULE_ENABLED
- #include "stm32wbxx_hal_pka.h"
+#include "stm32wbxx_hal_pka.h"
#endif /* HAL_PKA_MODULE_ENABLED */
#ifdef HAL_PWR_MODULE_ENABLED
- #include "stm32wbxx_hal_pwr.h"
+#include "stm32wbxx_hal_pwr.h"
#endif /* HAL_PWR_MODULE_ENABLED */
#ifdef HAL_QSPI_MODULE_ENABLED
- #include "stm32wbxx_hal_qspi.h"
+#include "stm32wbxx_hal_qspi.h"
#endif /* HAL_QSPI_MODULE_ENABLED */
#ifdef HAL_RCC_MODULE_ENABLED
- #include "stm32wbxx_hal_rcc.h"
+#include "stm32wbxx_hal_rcc.h"
#endif /* HAL_RCC_MODULE_ENABLED */
#ifdef HAL_RNG_MODULE_ENABLED
- #include "stm32wbxx_hal_rng.h"
+#include "stm32wbxx_hal_rng.h"
#endif /* HAL_RNG_MODULE_ENABLED */
#ifdef HAL_RTC_MODULE_ENABLED
- #include "stm32wbxx_hal_rtc.h"
+#include "stm32wbxx_hal_rtc.h"
#endif /* HAL_RTC_MODULE_ENABLED */
#ifdef HAL_SAI_MODULE_ENABLED
- #include "stm32wbxx_hal_sai.h"
+#include "stm32wbxx_hal_sai.h"
#endif /* HAL_SAI_MODULE_ENABLED */
#ifdef HAL_SMARTCARD_MODULE_ENABLED
- #include "stm32wbxx_hal_smartcard.h"
+#include "stm32wbxx_hal_smartcard.h"
#endif /* HAL_SMARTCARD_MODULE_ENABLED */
#ifdef HAL_SMBUS_MODULE_ENABLED
- #include "stm32wbxx_hal_smbus.h"
+#include "stm32wbxx_hal_smbus.h"
#endif /* HAL_SMBUS_MODULE_ENABLED */
#ifdef HAL_SPI_MODULE_ENABLED
- #include "stm32wbxx_hal_spi.h"
+#include "stm32wbxx_hal_spi.h"
#endif /* HAL_SPI_MODULE_ENABLED */
#ifdef HAL_TIM_MODULE_ENABLED
- #include "stm32wbxx_hal_tim.h"
+#include "stm32wbxx_hal_tim.h"
#endif /* HAL_TIM_MODULE_ENABLED */
#ifdef HAL_TSC_MODULE_ENABLED
- #include "stm32wbxx_hal_tsc.h"
+#include "stm32wbxx_hal_tsc.h"
#endif /* HAL_TSC_MODULE_ENABLED */
#ifdef HAL_UART_MODULE_ENABLED
- #include "stm32wbxx_hal_uart.h"
+#include "stm32wbxx_hal_uart.h"
#endif /* HAL_UART_MODULE_ENABLED */
#ifdef HAL_USART_MODULE_ENABLED
- #include "stm32wbxx_hal_usart.h"
+#include "stm32wbxx_hal_usart.h"
#endif /* HAL_USART_MODULE_ENABLED */
#ifdef HAL_WWDG_MODULE_ENABLED
- #include "stm32wbxx_hal_wwdg.h"
+#include "stm32wbxx_hal_wwdg.h"
#endif /* HAL_WWDG_MODULE_ENABLED */
/* Exported macro ------------------------------------------------------------*/
-#ifdef USE_FULL_ASSERT
- #define assert_param(expr) ((expr) ? (void)0U : assert_failed())
- void assert_failed();
+#ifdef USE_FULL_ASSERT
+#define assert_param(expr) ((expr) ? (void)0U : assert_failed())
+void assert_failed();
#else
- #define assert_param(expr) ((void)0U)
+#define assert_param(expr) ((void)0U)
#endif /* USE_FULL_ASSERT */
#ifdef __cplusplus
diff --git a/firmware/targets/f6/Inc/stm32wbxx_it.h b/firmware/targets/f6/Inc/stm32wbxx_it.h
index b7ed315d..d66e6e08 100644
--- a/firmware/targets/f6/Inc/stm32wbxx_it.h
+++ b/firmware/targets/f6/Inc/stm32wbxx_it.h
@@ -23,7 +23,7 @@
#define __STM32WBxx_IT_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Private includes ----------------------------------------------------------*/
diff --git a/firmware/targets/f6/Inc/tim.h b/firmware/targets/f6/Inc/tim.h
index 3a750349..e0f65f10 100644
--- a/firmware/targets/f6/Inc/tim.h
+++ b/firmware/targets/f6/Inc/tim.h
@@ -43,7 +43,7 @@ void MX_TIM1_Init(void);
void MX_TIM2_Init(void);
void MX_TIM16_Init(void);
-void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
+void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim);
/* USER CODE BEGIN Prototypes */
diff --git a/firmware/targets/f6/Src/comp.c b/firmware/targets/f6/Src/comp.c
index 75d49b7e..97631fab 100644
--- a/firmware/targets/f6/Src/comp.c
+++ b/firmware/targets/f6/Src/comp.c
@@ -27,73 +27,63 @@
COMP_HandleTypeDef hcomp1;
/* COMP1 init function */
-void MX_COMP1_Init(void)
-{
-
- hcomp1.Instance = COMP1;
- hcomp1.Init.InputMinus = COMP_INPUT_MINUS_1_4VREFINT;
- hcomp1.Init.InputPlus = COMP_INPUT_PLUS_IO1;
- hcomp1.Init.OutputPol = COMP_OUTPUTPOL_NONINVERTED;
- hcomp1.Init.Hysteresis = COMP_HYSTERESIS_HIGH;
- hcomp1.Init.BlankingSrce = COMP_BLANKINGSRC_NONE;
- hcomp1.Init.Mode = COMP_POWERMODE_MEDIUMSPEED;
- hcomp1.Init.WindowMode = COMP_WINDOWMODE_DISABLE;
- hcomp1.Init.TriggerMode = COMP_TRIGGERMODE_IT_RISING_FALLING;
- if (HAL_COMP_Init(&hcomp1) != HAL_OK)
- {
- Error_Handler();
- }
-
+void MX_COMP1_Init(void) {
+ hcomp1.Instance = COMP1;
+ hcomp1.Init.InputMinus = COMP_INPUT_MINUS_1_4VREFINT;
+ hcomp1.Init.InputPlus = COMP_INPUT_PLUS_IO1;
+ hcomp1.Init.OutputPol = COMP_OUTPUTPOL_NONINVERTED;
+ hcomp1.Init.Hysteresis = COMP_HYSTERESIS_HIGH;
+ hcomp1.Init.BlankingSrce = COMP_BLANKINGSRC_NONE;
+ hcomp1.Init.Mode = COMP_POWERMODE_MEDIUMSPEED;
+ hcomp1.Init.WindowMode = COMP_WINDOWMODE_DISABLE;
+ hcomp1.Init.TriggerMode = COMP_TRIGGERMODE_IT_RISING_FALLING;
+ if(HAL_COMP_Init(&hcomp1) != HAL_OK) {
+ Error_Handler();
+ }
}
-void HAL_COMP_MspInit(COMP_HandleTypeDef* compHandle)
-{
-
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- if(compHandle->Instance==COMP1)
- {
- /* USER CODE BEGIN COMP1_MspInit 0 */
+void HAL_COMP_MspInit(COMP_HandleTypeDef* compHandle) {
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ if(compHandle->Instance == COMP1) {
+ /* USER CODE BEGIN COMP1_MspInit 0 */
- /* USER CODE END COMP1_MspInit 0 */
+ /* USER CODE END COMP1_MspInit 0 */
- __HAL_RCC_GPIOC_CLK_ENABLE();
- /**COMP1 GPIO Configuration
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ /**COMP1 GPIO Configuration
PC5 ------> COMP1_INP
*/
- GPIO_InitStruct.Pin = RFID_RF_IN_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(RFID_RF_IN_GPIO_Port, &GPIO_InitStruct);
-
- /* COMP1 interrupt Init */
- HAL_NVIC_SetPriority(COMP_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(COMP_IRQn);
- /* USER CODE BEGIN COMP1_MspInit 1 */
-
- /* USER CODE END COMP1_MspInit 1 */
- }
+ GPIO_InitStruct.Pin = RFID_RF_IN_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ HAL_GPIO_Init(RFID_RF_IN_GPIO_Port, &GPIO_InitStruct);
+
+ /* COMP1 interrupt Init */
+ HAL_NVIC_SetPriority(COMP_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(COMP_IRQn);
+ /* USER CODE BEGIN COMP1_MspInit 1 */
+
+ /* USER CODE END COMP1_MspInit 1 */
+ }
}
-void HAL_COMP_MspDeInit(COMP_HandleTypeDef* compHandle)
-{
-
- if(compHandle->Instance==COMP1)
- {
- /* USER CODE BEGIN COMP1_MspDeInit 0 */
+void HAL_COMP_MspDeInit(COMP_HandleTypeDef* compHandle) {
+ if(compHandle->Instance == COMP1) {
+ /* USER CODE BEGIN COMP1_MspDeInit 0 */
- /* USER CODE END COMP1_MspDeInit 0 */
+ /* USER CODE END COMP1_MspDeInit 0 */
- /**COMP1 GPIO Configuration
+ /**COMP1 GPIO Configuration
PC5 ------> COMP1_INP
*/
- HAL_GPIO_DeInit(RFID_RF_IN_GPIO_Port, RFID_RF_IN_Pin);
+ HAL_GPIO_DeInit(RFID_RF_IN_GPIO_Port, RFID_RF_IN_Pin);
- /* COMP1 interrupt Deinit */
- HAL_NVIC_DisableIRQ(COMP_IRQn);
- /* USER CODE BEGIN COMP1_MspDeInit 1 */
+ /* COMP1 interrupt Deinit */
+ HAL_NVIC_DisableIRQ(COMP_IRQn);
+ /* USER CODE BEGIN COMP1_MspDeInit 1 */
- /* USER CODE END COMP1_MspDeInit 1 */
- }
+ /* USER CODE END COMP1_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f6/Src/main.c b/firmware/targets/f6/Src/main.c
index 44c5013e..b1ab4dcd 100644
--- a/firmware/targets/f6/Src/main.c
+++ b/firmware/targets/f6/Src/main.c
@@ -1,7 +1,7 @@
#include "main.h"
#include <furi.h>
-#include <furi-hal.h>
+#include <furi_hal.h>
#include <flipper.h>
#define TAG "Main"
@@ -26,14 +26,15 @@ int main(void) {
// Start kernel
osKernelStart();
- while (1) {}
+ while(1) {
+ }
}
void Error_Handler(void) {
furi_crash("ErrorHandler");
}
-#ifdef USE_FULL_ASSERT
+#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
@@ -41,7 +42,7 @@ void Error_Handler(void) {
* @param line: assert_param error line source number
* @retval None
*/
-void assert_failed(uint8_t *file, uint32_t line) {
+void assert_failed(uint8_t* file, uint32_t line) {
furi_crash("HAL assert failed");
}
#endif /* USE_FULL_ASSERT */
diff --git a/firmware/targets/f6/Src/stm32wbxx_hal_msp.c b/firmware/targets/f6/Src/stm32wbxx_hal_msp.c
index 534e6afd..9fa9d660 100644
--- a/firmware/targets/f6/Src/stm32wbxx_hal_msp.c
+++ b/firmware/targets/f6/Src/stm32wbxx_hal_msp.c
@@ -61,29 +61,28 @@
/**
* Initializes the Global MSP.
*/
-void HAL_MspInit(void)
-{
- /* USER CODE BEGIN MspInit 0 */
+void HAL_MspInit(void) {
+ /* USER CODE BEGIN MspInit 0 */
- /* USER CODE END MspInit 0 */
+ /* USER CODE END MspInit 0 */
- __HAL_RCC_HSEM_CLK_ENABLE();
+ __HAL_RCC_HSEM_CLK_ENABLE();
- /* System interrupt init*/
- /* PendSV_IRQn interrupt configuration */
- HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0);
+ /* System interrupt init*/
+ /* PendSV_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0);
- /* Peripheral interrupt init */
- /* RCC_IRQn interrupt configuration */
- HAL_NVIC_SetPriority(RCC_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(RCC_IRQn);
- /* HSEM_IRQn interrupt configuration */
- HAL_NVIC_SetPriority(HSEM_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(HSEM_IRQn);
+ /* Peripheral interrupt init */
+ /* RCC_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(RCC_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(RCC_IRQn);
+ /* HSEM_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(HSEM_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(HSEM_IRQn);
- /* USER CODE BEGIN MspInit 1 */
+ /* USER CODE BEGIN MspInit 1 */
- /* USER CODE END MspInit 1 */
+ /* USER CODE END MspInit 1 */
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f6/Src/stm32wbxx_it.c b/firmware/targets/f6/Src/stm32wbxx_it.c
index d4f71267..d8d763af 100644
--- a/firmware/targets/f6/Src/stm32wbxx_it.c
+++ b/firmware/targets/f6/Src/stm32wbxx_it.c
@@ -39,10 +39,10 @@ void HSEM_IRQHandler(void) {
HAL_HSEM_IRQHandler();
}
-void IPCC_C1_TX_IRQHandler(void){
+void IPCC_C1_TX_IRQHandler(void) {
HW_IPCC_Tx_Handler();
}
-void IPCC_C1_RX_IRQHandler(void){
+void IPCC_C1_RX_IRQHandler(void) {
HW_IPCC_Rx_Handler();
}
diff --git a/firmware/targets/f6/Src/system_stm32wbxx.c b/firmware/targets/f6/Src/system_stm32wbxx.c
index 38db6ece..5b42c579 100644
--- a/firmware/targets/f6/Src/system_stm32wbxx.c
+++ b/firmware/targets/f6/Src/system_stm32wbxx.c
@@ -85,24 +85,24 @@
#include "stm32wbxx.h"
-#if !defined (HSE_VALUE)
- #define HSE_VALUE (32000000UL) /*!< Value of the External oscillator in Hz */
+#if !defined(HSE_VALUE)
+#define HSE_VALUE (32000000UL) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
-#if !defined (MSI_VALUE)
- #define MSI_VALUE (4000000UL) /*!< Value of the Internal oscillator in Hz*/
+#if !defined(MSI_VALUE)
+#define MSI_VALUE (4000000UL) /*!< Value of the Internal oscillator in Hz*/
#endif /* MSI_VALUE */
-#if !defined (HSI_VALUE)
- #define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/
+#if !defined(HSI_VALUE)
+#define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/
#endif /* HSI_VALUE */
-#if !defined (LSI_VALUE)
- #define LSI_VALUE (32000UL) /*!< Value of LSI in Hz*/
-#endif /* LSI_VALUE */
+#if !defined(LSI_VALUE)
+#define LSI_VALUE (32000UL) /*!< Value of LSI in Hz*/
+#endif /* LSI_VALUE */
-#if !defined (LSE_VALUE)
- #define LSE_VALUE (32768UL) /*!< Value of LSE in Hz*/
+#if !defined(LSE_VALUE)
+#define LSE_VALUE (32768UL) /*!< Value of LSE in Hz*/
#endif /* LSE_VALUE */
/**
@@ -124,10 +124,12 @@
/*!< Uncomment the following line if you need to relocate your vector Table in
Internal SRAM. */
/* #define VECT_TAB_SRAM */
-#define VECT_TAB_OFFSET OS_OFFSET /*!< Vector Table base offset field.
+#define VECT_TAB_OFFSET \
+ OS_OFFSET /*!< Vector Table base offset field.
This value must be a multiple of 0x200. */
-#define VECT_TAB_BASE_ADDRESS SRAM1_BASE /*!< Vector Table base offset field.
+#define VECT_TAB_BASE_ADDRESS \
+ SRAM1_BASE /*!< Vector Table base offset field.
This value must be a multiple of 0x200. */
/**
* @}
@@ -144,7 +146,7 @@
/** @addtogroup STM32WBxx_System_Private_Variables
* @{
*/
- /* The SystemCoreClock variable is updated in three ways:
+/* The SystemCoreClock variable is updated in three ways:
1) by calling CMSIS function SystemCoreClockUpdate()
2) by calling HAL API function HAL_RCC_GetHCLKFreq()
3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
@@ -152,20 +154,37 @@
is no need to call the 2 first functions listed above, since SystemCoreClock
variable is updated automatically.
*/
- uint32_t SystemCoreClock = 4000000UL ; /*CPU1: M4 on MSI clock after startup (4MHz)*/
-
- const uint32_t AHBPrescTable[16UL] = {1UL, 3UL, 5UL, 1UL, 1UL, 6UL, 10UL, 32UL, 2UL, 4UL, 8UL, 16UL, 64UL, 128UL, 256UL, 512UL};
-
- const uint32_t APBPrescTable[8UL] = {0UL, 0UL, 0UL, 0UL, 1UL, 2UL, 3UL, 4UL};
-
- const uint32_t MSIRangeTable[16UL] = {100000UL, 200000UL, 400000UL, 800000UL, 1000000UL, 2000000UL, \
- 4000000UL, 8000000UL, 16000000UL, 24000000UL, 32000000UL, 48000000UL, 0UL, 0UL, 0UL, 0UL}; /* 0UL values are incorrect cases */
+uint32_t SystemCoreClock = 4000000UL; /*CPU1: M4 on MSI clock after startup (4MHz)*/
+
+const uint32_t AHBPrescTable[16UL] =
+ {1UL, 3UL, 5UL, 1UL, 1UL, 6UL, 10UL, 32UL, 2UL, 4UL, 8UL, 16UL, 64UL, 128UL, 256UL, 512UL};
+
+const uint32_t APBPrescTable[8UL] = {0UL, 0UL, 0UL, 0UL, 1UL, 2UL, 3UL, 4UL};
+
+const uint32_t MSIRangeTable[16UL] = {
+ 100000UL,
+ 200000UL,
+ 400000UL,
+ 800000UL,
+ 1000000UL,
+ 2000000UL,
+ 4000000UL,
+ 8000000UL,
+ 16000000UL,
+ 24000000UL,
+ 32000000UL,
+ 48000000UL,
+ 0UL,
+ 0UL,
+ 0UL,
+ 0UL}; /* 0UL values are incorrect cases */
#if defined(STM32WB55xx) || defined(STM32WB5Mxx) || defined(STM32WB35xx)
- const uint32_t SmpsPrescalerTable[4UL][6UL]={{1UL,3UL,2UL,2UL,1UL,2UL}, \
- {2UL,6UL,4UL,3UL,2UL,4UL}, \
- {4UL,12UL,8UL,6UL,4UL,8UL}, \
- {4UL,12UL,8UL,6UL,4UL,8UL}};
+const uint32_t SmpsPrescalerTable[4UL][6UL] = {
+ {1UL, 3UL, 2UL, 2UL, 1UL, 2UL},
+ {2UL, 6UL, 4UL, 3UL, 2UL, 4UL},
+ {4UL, 12UL, 8UL, 6UL, 4UL, 8UL},
+ {4UL, 12UL, 8UL, 6UL, 4UL, 8UL}};
#endif
/**
@@ -189,50 +208,51 @@
* @param None
* @retval None
*/
-void SystemInit(void)
-{
- /* Configure the Vector Table location add offset address ------------------*/
-#if defined(VECT_TAB_SRAM) && defined(VECT_TAB_BASE_ADDRESS)
- /* program in SRAMx */
- SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAMx for CPU1 */
-#else /* program in FLASH */
- SCB->VTOR = VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
+void SystemInit(void) {
+ /* Configure the Vector Table location add offset address ------------------*/
+#if defined(VECT_TAB_SRAM) && defined(VECT_TAB_BASE_ADDRESS)
+ /* program in SRAMx */
+ SCB->VTOR = VECT_TAB_BASE_ADDRESS |
+ VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAMx for CPU1 */
+#else /* program in FLASH */
+ SCB->VTOR = VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
#endif
- /* FPU settings ------------------------------------------------------------*/
- #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
- SCB->CPACR |= ((3UL << (10UL*2UL))|(3UL << (11UL*2UL))); /* set CP10 and CP11 Full Access */
- #endif
-
- /* Reset the RCC clock configuration to the default reset state ------------*/
- /* Set MSION bit */
- RCC->CR |= RCC_CR_MSION;
-
- /* Reset CFGR register */
- RCC->CFGR = 0x00070000U;
-
- /* Reset PLLSAI1ON, PLLON, HSECSSON, HSEON, HSION, and MSIPLLON bits */
- RCC->CR &= (uint32_t)0xFAF6FEFBU;
-
- /*!< Reset LSI1 and LSI2 bits */
- RCC->CSR &= (uint32_t)0xFFFFFFFAU;
-
- /*!< Reset HSI48ON bit */
- RCC->CRRCR &= (uint32_t)0xFFFFFFFEU;
-
- /* Reset PLLCFGR register */
- RCC->PLLCFGR = 0x22041000U;
+/* FPU settings ------------------------------------------------------------*/
+#if(__FPU_PRESENT == 1) && (__FPU_USED == 1)
+ SCB->CPACR |=
+ ((3UL << (10UL * 2UL)) | (3UL << (11UL * 2UL))); /* set CP10 and CP11 Full Access */
+#endif
+
+ /* Reset the RCC clock configuration to the default reset state ------------*/
+ /* Set MSION bit */
+ RCC->CR |= RCC_CR_MSION;
+
+ /* Reset CFGR register */
+ RCC->CFGR = 0x00070000U;
+
+ /* Reset PLLSAI1ON, PLLON, HSECSSON, HSEON, HSION, and MSIPLLON bits */
+ RCC->CR &= (uint32_t)0xFAF6FEFBU;
+
+ /*!< Reset LSI1 and LSI2 bits */
+ RCC->CSR &= (uint32_t)0xFFFFFFFAU;
+
+ /*!< Reset HSI48ON bit */
+ RCC->CRRCR &= (uint32_t)0xFFFFFFFEU;
+
+ /* Reset PLLCFGR register */
+ RCC->PLLCFGR = 0x22041000U;
#if defined(STM32WB55xx) || defined(STM32WB5Mxx)
- /* Reset PLLSAI1CFGR register */
- RCC->PLLSAI1CFGR = 0x22041000U;
+ /* Reset PLLSAI1CFGR register */
+ RCC->PLLSAI1CFGR = 0x22041000U;
#endif
-
- /* Reset HSEBYP bit */
- RCC->CR &= 0xFFFBFFFFU;
- /* Disable all interrupts */
- RCC->CIER = 0x00000000;
+ /* Reset HSEBYP bit */
+ RCC->CR &= 0xFFFBFFFFU;
+
+ /* Disable all interrupts */
+ RCC->CIER = 0x00000000;
}
/**
@@ -277,71 +297,65 @@ void SystemInit(void)
* @param None
* @retval None
*/
-void SystemCoreClockUpdate(void)
-{
- uint32_t tmp, msirange, pllvco, pllr, pllsource , pllm;
+void SystemCoreClockUpdate(void) {
+ uint32_t tmp, msirange, pllvco, pllr, pllsource, pllm;
- /* Get MSI Range frequency--------------------------------------------------*/
+ /* Get MSI Range frequency--------------------------------------------------*/
- /*MSI frequency range in Hz*/
- msirange = MSIRangeTable[(RCC->CR & RCC_CR_MSIRANGE) >> RCC_CR_MSIRANGE_Pos];
+ /*MSI frequency range in Hz*/
+ msirange = MSIRangeTable[(RCC->CR & RCC_CR_MSIRANGE) >> RCC_CR_MSIRANGE_Pos];
- /* Get SYSCLK source -------------------------------------------------------*/
- switch (RCC->CFGR & RCC_CFGR_SWS)
- {
- case 0x00: /* MSI used as system clock source */
- SystemCoreClock = msirange;
- break;
+ /* Get SYSCLK source -------------------------------------------------------*/
+ switch(RCC->CFGR & RCC_CFGR_SWS) {
+ case 0x00: /* MSI used as system clock source */
+ SystemCoreClock = msirange;
+ break;
- case 0x04: /* HSI used as system clock source */
- /* HSI used as system clock source */
+ case 0x04: /* HSI used as system clock source */
+ /* HSI used as system clock source */
SystemCoreClock = HSI_VALUE;
- break;
+ break;
- case 0x08: /* HSE used as system clock source */
- SystemCoreClock = HSE_VALUE;
- break;
+ case 0x08: /* HSE used as system clock source */
+ SystemCoreClock = HSE_VALUE;
+ break;
case 0x0C: /* PLL used as system clock source */
- /* PLL_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLM) * PLLN
+ /* PLL_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLM) * PLLN
SYSCLK = PLL_VCO / PLLR
*/
- pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC);
- pllm = ((RCC->PLLCFGR & RCC_PLLCFGR_PLLM) >> RCC_PLLCFGR_PLLM_Pos) + 1UL ;
-
- if(pllsource == 0x02UL) /* HSI used as PLL clock source */
- {
- pllvco = (HSI_VALUE / pllm);
- }
- else if(pllsource == 0x03UL) /* HSE used as PLL clock source */
- {
- pllvco = (HSE_VALUE / pllm);
- }
- else /* MSI used as PLL clock source */
- {
- pllvco = (msirange / pllm);
- }
-
- pllvco = pllvco * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos);
- pllr = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> RCC_PLLCFGR_PLLR_Pos) + 1UL);
-
- SystemCoreClock = pllvco/pllr;
- break;
+ pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC);
+ pllm = ((RCC->PLLCFGR & RCC_PLLCFGR_PLLM) >> RCC_PLLCFGR_PLLM_Pos) + 1UL;
+
+ if(pllsource == 0x02UL) /* HSI used as PLL clock source */
+ {
+ pllvco = (HSI_VALUE / pllm);
+ } else if(pllsource == 0x03UL) /* HSE used as PLL clock source */
+ {
+ pllvco = (HSE_VALUE / pllm);
+ } else /* MSI used as PLL clock source */
+ {
+ pllvco = (msirange / pllm);
+ }
+
+ pllvco = pllvco * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos);
+ pllr = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> RCC_PLLCFGR_PLLR_Pos) + 1UL);
+
+ SystemCoreClock = pllvco / pllr;
+ break;
default:
- SystemCoreClock = msirange;
- break;
- }
-
- /* Compute HCLK clock frequency --------------------------------------------*/
- /* Get HCLK1 prescaler */
- tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos)];
- /* HCLK clock frequency */
- SystemCoreClock = SystemCoreClock / tmp;
-
+ SystemCoreClock = msirange;
+ break;
+ }
+
+ /* Compute HCLK clock frequency --------------------------------------------*/
+ /* Get HCLK1 prescaler */
+ tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos)];
+ /* HCLK clock frequency */
+ SystemCoreClock = SystemCoreClock / tmp;
}
-
/**
* @}
*/
diff --git a/firmware/targets/f6/Src/tim.c b/firmware/targets/f6/Src/tim.c
index 12ff713a..ba27d1cc 100644
--- a/firmware/targets/f6/Src/tim.c
+++ b/firmware/targets/f6/Src/tim.c
@@ -29,329 +29,285 @@ TIM_HandleTypeDef htim2;
TIM_HandleTypeDef htim16;
/* TIM1 init function */
-void MX_TIM1_Init(void)
-{
- TIM_ClockConfigTypeDef sClockSourceConfig = {0};
- TIM_MasterConfigTypeDef sMasterConfig = {0};
- TIM_OC_InitTypeDef sConfigOC = {0};
- TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
-
- htim1.Instance = TIM1;
- htim1.Init.Prescaler = 0;
- htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim1.Init.Period = 65535;
- htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
- htim1.Init.RepetitionCounter = 0;
- htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
- if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
- {
- Error_Handler();
- }
- sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
- if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_TIM_OC_Init(&htim1) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
- {
- Error_Handler();
- }
- sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
- sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
- sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
- if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigOC.OCMode = TIM_OCMODE_TIMING;
- sConfigOC.Pulse = 0;
- sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
- sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
- sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
- sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
- sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
- if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigOC.OCMode = TIM_OCMODE_PWM1;
- if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
- {
- Error_Handler();
- }
- sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
- sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
- sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
- sBreakDeadTimeConfig.DeadTime = 0;
- sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
- sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
- sBreakDeadTimeConfig.BreakFilter = 0;
- sBreakDeadTimeConfig.BreakAFMode = TIM_BREAK_AFMODE_INPUT;
- sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
- sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
- sBreakDeadTimeConfig.Break2Filter = 0;
- sBreakDeadTimeConfig.Break2AFMode = TIM_BREAK_AFMODE_INPUT;
- sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
- if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
- {
- Error_Handler();
- }
- HAL_TIM_MspPostInit(&htim1);
-
+void MX_TIM1_Init(void) {
+ TIM_ClockConfigTypeDef sClockSourceConfig = {0};
+ TIM_MasterConfigTypeDef sMasterConfig = {0};
+ TIM_OC_InitTypeDef sConfigOC = {0};
+ TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
+
+ htim1.Instance = TIM1;
+ htim1.Init.Prescaler = 0;
+ htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
+ htim1.Init.Period = 65535;
+ htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+ htim1.Init.RepetitionCounter = 0;
+ htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
+ if(HAL_TIM_Base_Init(&htim1) != HAL_OK) {
+ Error_Handler();
+ }
+ sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
+ if(HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ if(HAL_TIM_OC_Init(&htim1) != HAL_OK) {
+ Error_Handler();
+ }
+ if(HAL_TIM_PWM_Init(&htim1) != HAL_OK) {
+ Error_Handler();
+ }
+ sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
+ sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
+ sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
+ if(HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ sConfigOC.OCMode = TIM_OCMODE_TIMING;
+ sConfigOC.Pulse = 0;
+ sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
+ sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
+ sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
+ sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
+ sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
+ if(HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) {
+ Error_Handler();
+ }
+ sConfigOC.OCMode = TIM_OCMODE_PWM1;
+ if(HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) {
+ Error_Handler();
+ }
+ sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
+ sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
+ sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
+ sBreakDeadTimeConfig.DeadTime = 0;
+ sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
+ sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
+ sBreakDeadTimeConfig.BreakFilter = 0;
+ sBreakDeadTimeConfig.BreakAFMode = TIM_BREAK_AFMODE_INPUT;
+ sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
+ sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
+ sBreakDeadTimeConfig.Break2Filter = 0;
+ sBreakDeadTimeConfig.Break2AFMode = TIM_BREAK_AFMODE_INPUT;
+ sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
+ if(HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ HAL_TIM_MspPostInit(&htim1);
}
/* TIM2 init function */
-void MX_TIM2_Init(void)
-{
- TIM_ClockConfigTypeDef sClockSourceConfig = {0};
- TIM_MasterConfigTypeDef sMasterConfig = {0};
- TIM_IC_InitTypeDef sConfigIC = {0};
-
- htim2.Instance = TIM2;
- htim2.Init.Prescaler = 64-1;
- htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim2.Init.Period = 4294967295;
- htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
- htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
- if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
- {
- Error_Handler();
- }
- sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
- if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_TIM_IC_Init(&htim2) != HAL_OK)
- {
- Error_Handler();
- }
- sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
- sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
- if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_FALLING;
- sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
- sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
- sConfigIC.ICFilter = 0;
- if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
- sConfigIC.ICSelection = TIM_ICSELECTION_INDIRECTTI;
- if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_2) != HAL_OK)
- {
- Error_Handler();
- }
-
+void MX_TIM2_Init(void) {
+ TIM_ClockConfigTypeDef sClockSourceConfig = {0};
+ TIM_MasterConfigTypeDef sMasterConfig = {0};
+ TIM_IC_InitTypeDef sConfigIC = {0};
+
+ htim2.Instance = TIM2;
+ htim2.Init.Prescaler = 64 - 1;
+ htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
+ htim2.Init.Period = 4294967295;
+ htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+ htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
+ if(HAL_TIM_Base_Init(&htim2) != HAL_OK) {
+ Error_Handler();
+ }
+ sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
+ if(HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ if(HAL_TIM_IC_Init(&htim2) != HAL_OK) {
+ Error_Handler();
+ }
+ sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
+ sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
+ if(HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_FALLING;
+ sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
+ sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
+ sConfigIC.ICFilter = 0;
+ if(HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1) != HAL_OK) {
+ Error_Handler();
+ }
+ sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
+ sConfigIC.ICSelection = TIM_ICSELECTION_INDIRECTTI;
+ if(HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_2) != HAL_OK) {
+ Error_Handler();
+ }
}
/* TIM16 init function */
-void MX_TIM16_Init(void)
-{
- TIM_OC_InitTypeDef sConfigOC = {0};
- TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
-
- htim16.Instance = TIM16;
- htim16.Init.Prescaler = 500 - 1;
- htim16.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim16.Init.Period = 291;
- htim16.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
- htim16.Init.RepetitionCounter = 0;
- htim16.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
- if (HAL_TIM_Base_Init(&htim16) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_TIM_PWM_Init(&htim16) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigOC.OCMode = TIM_OCMODE_PWM1;
- sConfigOC.Pulse = 145;
- sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
- sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
- sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
- sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
- sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
- if (HAL_TIM_PWM_ConfigChannel(&htim16, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
- {
- Error_Handler();
- }
- sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
- sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
- sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
- sBreakDeadTimeConfig.DeadTime = 0;
- sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
- sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
- sBreakDeadTimeConfig.BreakFilter = 0;
- sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
- if (HAL_TIMEx_ConfigBreakDeadTime(&htim16, &sBreakDeadTimeConfig) != HAL_OK)
- {
- Error_Handler();
- }
- HAL_TIM_MspPostInit(&htim16);
-
+void MX_TIM16_Init(void) {
+ TIM_OC_InitTypeDef sConfigOC = {0};
+ TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
+
+ htim16.Instance = TIM16;
+ htim16.Init.Prescaler = 500 - 1;
+ htim16.Init.CounterMode = TIM_COUNTERMODE_UP;
+ htim16.Init.Period = 291;
+ htim16.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+ htim16.Init.RepetitionCounter = 0;
+ htim16.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
+ if(HAL_TIM_Base_Init(&htim16) != HAL_OK) {
+ Error_Handler();
+ }
+ if(HAL_TIM_PWM_Init(&htim16) != HAL_OK) {
+ Error_Handler();
+ }
+ sConfigOC.OCMode = TIM_OCMODE_PWM1;
+ sConfigOC.Pulse = 145;
+ sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
+ sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
+ sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
+ sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
+ sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
+ if(HAL_TIM_PWM_ConfigChannel(&htim16, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) {
+ Error_Handler();
+ }
+ sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
+ sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
+ sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
+ sBreakDeadTimeConfig.DeadTime = 0;
+ sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
+ sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
+ sBreakDeadTimeConfig.BreakFilter = 0;
+ sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
+ if(HAL_TIMEx_ConfigBreakDeadTime(&htim16, &sBreakDeadTimeConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ HAL_TIM_MspPostInit(&htim16);
}
-void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
-{
-
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- if(tim_baseHandle->Instance==TIM1)
- {
- /* USER CODE BEGIN TIM1_MspInit 0 */
+void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) {
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ if(tim_baseHandle->Instance == TIM1) {
+ /* USER CODE BEGIN TIM1_MspInit 0 */
- /* USER CODE END TIM1_MspInit 0 */
- /* TIM1 clock enable */
- __HAL_RCC_TIM1_CLK_ENABLE();
+ /* USER CODE END TIM1_MspInit 0 */
+ /* TIM1 clock enable */
+ __HAL_RCC_TIM1_CLK_ENABLE();
- /* TIM1 interrupt Init */
- HAL_NVIC_SetPriority(TIM1_TRG_COM_TIM17_IRQn, 0, 0);
- HAL_NVIC_EnableIRQ(TIM1_TRG_COM_TIM17_IRQn);
- /* USER CODE BEGIN TIM1_MspInit 1 */
+ /* TIM1 interrupt Init */
+ HAL_NVIC_SetPriority(TIM1_TRG_COM_TIM17_IRQn, 0, 0);
+ HAL_NVIC_EnableIRQ(TIM1_TRG_COM_TIM17_IRQn);
+ /* USER CODE BEGIN TIM1_MspInit 1 */
- /* USER CODE END TIM1_MspInit 1 */
- }
- else if(tim_baseHandle->Instance==TIM2)
- {
- /* USER CODE BEGIN TIM2_MspInit 0 */
+ /* USER CODE END TIM1_MspInit 1 */
+ } else if(tim_baseHandle->Instance == TIM2) {
+ /* USER CODE BEGIN TIM2_MspInit 0 */
- /* USER CODE END TIM2_MspInit 0 */
- /* TIM2 clock enable */
- __HAL_RCC_TIM2_CLK_ENABLE();
+ /* USER CODE END TIM2_MspInit 0 */
+ /* TIM2 clock enable */
+ __HAL_RCC_TIM2_CLK_ENABLE();
- __HAL_RCC_GPIOA_CLK_ENABLE();
- /**TIM2 GPIO Configuration
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ /**TIM2 GPIO Configuration
PA0 ------> TIM2_CH1
*/
- GPIO_InitStruct.Pin = IR_RX_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
- HAL_GPIO_Init(IR_RX_GPIO_Port, &GPIO_InitStruct);
-
- /* TIM2 interrupt Init */
- HAL_NVIC_SetPriority(TIM2_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(TIM2_IRQn);
- /* USER CODE BEGIN TIM2_MspInit 1 */
-
- /* USER CODE END TIM2_MspInit 1 */
- }
- else if(tim_baseHandle->Instance==TIM16)
- {
- /* USER CODE BEGIN TIM16_MspInit 0 */
-
- /* USER CODE END TIM16_MspInit 0 */
- /* TIM16 clock enable */
- __HAL_RCC_TIM16_CLK_ENABLE();
- /* USER CODE BEGIN TIM16_MspInit 1 */
-
- /* USER CODE END TIM16_MspInit 1 */
- }
+ GPIO_InitStruct.Pin = IR_RX_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
+ HAL_GPIO_Init(IR_RX_GPIO_Port, &GPIO_InitStruct);
+
+ /* TIM2 interrupt Init */
+ HAL_NVIC_SetPriority(TIM2_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(TIM2_IRQn);
+ /* USER CODE BEGIN TIM2_MspInit 1 */
+
+ /* USER CODE END TIM2_MspInit 1 */
+ } else if(tim_baseHandle->Instance == TIM16) {
+ /* USER CODE BEGIN TIM16_MspInit 0 */
+
+ /* USER CODE END TIM16_MspInit 0 */
+ /* TIM16 clock enable */
+ __HAL_RCC_TIM16_CLK_ENABLE();
+ /* USER CODE BEGIN TIM16_MspInit 1 */
+
+ /* USER CODE END TIM16_MspInit 1 */
+ }
}
-void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
-{
-
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- if(timHandle->Instance==TIM1)
- {
- /* USER CODE BEGIN TIM1_MspPostInit 0 */
-
- /* USER CODE END TIM1_MspPostInit 0 */
- __HAL_RCC_GPIOB_CLK_ENABLE();
- /**TIM1 GPIO Configuration
+void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) {
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ if(timHandle->Instance == TIM1) {
+ /* USER CODE BEGIN TIM1_MspPostInit 0 */
+
+ /* USER CODE END TIM1_MspPostInit 0 */
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ /**TIM1 GPIO Configuration
PB9 ------> TIM1_CH3N
PB13 ------> TIM1_CH1N
*/
- GPIO_InitStruct.Pin = IR_TX_Pin|RFID_OUT_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+ GPIO_InitStruct.Pin = IR_TX_Pin | RFID_OUT_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
- /* USER CODE BEGIN TIM1_MspPostInit 1 */
+ /* USER CODE BEGIN TIM1_MspPostInit 1 */
- /* USER CODE END TIM1_MspPostInit 1 */
- }
- else if(timHandle->Instance==TIM16)
- {
- /* USER CODE BEGIN TIM16_MspPostInit 0 */
+ /* USER CODE END TIM1_MspPostInit 1 */
+ } else if(timHandle->Instance == TIM16) {
+ /* USER CODE BEGIN TIM16_MspPostInit 0 */
- /* USER CODE END TIM16_MspPostInit 0 */
+ /* USER CODE END TIM16_MspPostInit 0 */
- __HAL_RCC_GPIOB_CLK_ENABLE();
- /**TIM16 GPIO Configuration
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ /**TIM16 GPIO Configuration
PB8 ------> TIM16_CH1
*/
- GPIO_InitStruct.Pin = SPEAKER_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF14_TIM16;
- HAL_GPIO_Init(SPEAKER_GPIO_Port, &GPIO_InitStruct);
+ GPIO_InitStruct.Pin = SPEAKER_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF14_TIM16;
+ HAL_GPIO_Init(SPEAKER_GPIO_Port, &GPIO_InitStruct);
- /* USER CODE BEGIN TIM16_MspPostInit 1 */
-
- /* USER CODE END TIM16_MspPostInit 1 */
- }
+ /* USER CODE BEGIN TIM16_MspPostInit 1 */
+ /* USER CODE END TIM16_MspPostInit 1 */
+ }
}
-void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
-{
-
- if(tim_baseHandle->Instance==TIM1)
- {
- /* USER CODE BEGIN TIM1_MspDeInit 0 */
+void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle) {
+ if(tim_baseHandle->Instance == TIM1) {
+ /* USER CODE BEGIN TIM1_MspDeInit 0 */
- /* USER CODE END TIM1_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_TIM1_CLK_DISABLE();
+ /* USER CODE END TIM1_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_TIM1_CLK_DISABLE();
- /* TIM1 interrupt Deinit */
- HAL_NVIC_DisableIRQ(TIM1_TRG_COM_TIM17_IRQn);
- /* USER CODE BEGIN TIM1_MspDeInit 1 */
+ /* TIM1 interrupt Deinit */
+ HAL_NVIC_DisableIRQ(TIM1_TRG_COM_TIM17_IRQn);
+ /* USER CODE BEGIN TIM1_MspDeInit 1 */
- /* USER CODE END TIM1_MspDeInit 1 */
- }
- else if(tim_baseHandle->Instance==TIM2)
- {
- /* USER CODE BEGIN TIM2_MspDeInit 0 */
+ /* USER CODE END TIM1_MspDeInit 1 */
+ } else if(tim_baseHandle->Instance == TIM2) {
+ /* USER CODE BEGIN TIM2_MspDeInit 0 */
- /* USER CODE END TIM2_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_TIM2_CLK_DISABLE();
+ /* USER CODE END TIM2_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_TIM2_CLK_DISABLE();
- /**TIM2 GPIO Configuration
+ /**TIM2 GPIO Configuration
PA0 ------> TIM2_CH1
*/
- HAL_GPIO_DeInit(IR_RX_GPIO_Port, IR_RX_Pin);
+ HAL_GPIO_DeInit(IR_RX_GPIO_Port, IR_RX_Pin);
- /* TIM2 interrupt Deinit */
- HAL_NVIC_DisableIRQ(TIM2_IRQn);
- /* USER CODE BEGIN TIM2_MspDeInit 1 */
+ /* TIM2 interrupt Deinit */
+ HAL_NVIC_DisableIRQ(TIM2_IRQn);
+ /* USER CODE BEGIN TIM2_MspDeInit 1 */
- /* USER CODE END TIM2_MspDeInit 1 */
- }
- else if(tim_baseHandle->Instance==TIM16)
- {
- /* USER CODE BEGIN TIM16_MspDeInit 0 */
+ /* USER CODE END TIM2_MspDeInit 1 */
+ } else if(tim_baseHandle->Instance == TIM16) {
+ /* USER CODE BEGIN TIM16_MspDeInit 0 */
- /* USER CODE END TIM16_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_TIM16_CLK_DISABLE();
- /* USER CODE BEGIN TIM16_MspDeInit 1 */
+ /* USER CODE END TIM16_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_TIM16_CLK_DISABLE();
+ /* USER CODE BEGIN TIM16_MspDeInit 1 */
- /* USER CODE END TIM16_MspDeInit 1 */
- }
+ /* USER CODE END TIM16_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f6/ble-glue/app_debug.c b/firmware/targets/f6/ble-glue/app_debug.c
deleted file mode 100644
index b2793073..00000000
--- a/firmware/targets/f6/ble-glue/app_debug.c
+++ /dev/null
@@ -1,375 +0,0 @@
-/* USER CODE BEGIN Header */
-/**
- ******************************************************************************
- * File Name : app_debug.c
- * Description : Debug capabilities source file for STM32WPAN Middleware
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
- * All rights reserved.</center></h2>
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-/* USER CODE END Header */
-
-/* Includes ------------------------------------------------------------------*/
-/* USER CODE BEGIN Includes */
-#include "utilities_common.h"
-
-#include "app_common.h"
-#include "app_debug.h"
-#include "shci.h"
-#include "tl.h"
-#include "dbg_trace.h"
-#include <furi-hal.h>
-/* USER CODE END Includes */
-
-/* Private typedef -----------------------------------------------------------*/
-/* USER CODE BEGIN PTD */
-typedef PACKED_STRUCT
-{
- GPIO_TypeDef* port;
- uint16_t pin;
- uint8_t enable;
- uint8_t reserved;
-} APPD_GpioConfig_t;
-/* USER CODE END PTD */
-
-/* Private defines -----------------------------------------------------------*/
-/* USER CODE BEGIN PD */
-#define GPIO_NBR_OF_RF_SIGNALS 9
-#define GPIO_CFG_NBR_OF_FEATURES 34
-#define NBR_OF_TRACES_CONFIG_PARAMETERS 4
-#define NBR_OF_GENERAL_CONFIG_PARAMETERS 4
-
-/**
- * THIS SHALL BE SET TO A VALUE DIFFERENT FROM 0 ONLY ON REQUEST FROM ST SUPPORT
- */
-#define BLE_DTB_CFG 7
-#define SYS_DBG_CFG1 (SHCI_C2_DEBUG_OPTIONS_IPCORE_LP | SHCI_C2_DEBUG_OPTIONS_CPU2_STOP_EN)
-/* USER CODE END PD */
-
-/* Private variables ---------------------------------------------------------*/
-/* USER CODE BEGIN PV */
-PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static SHCI_C2_DEBUG_TracesConfig_t APPD_TracesConfig={0, 0, 0, 0};
-PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static SHCI_C2_DEBUG_GeneralConfig_t APPD_GeneralConfig={BLE_DTB_CFG, SYS_DBG_CFG1, {0, 0}};
-
-/**
- * THE DEBUG ON GPIO FOR CPU2 IS INTENDED TO BE USED ONLY ON REQUEST FROM ST SUPPORT
- * It provides timing information on the CPU2 activity.
- * All configuration of (port, pin) is supported for each features and can be selected by the user
- * depending on the availability
- */
-static const APPD_GpioConfig_t aGpioConfigList[GPIO_CFG_NBR_OF_FEATURES] =
-{
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* BLE_ISR - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_7, 1, 0}, /* BLE_STACK_TICK - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* BLE_CMD_PROCESS - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* BLE_ACL_DATA_PROCESS - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* SYS_CMD_PROCESS - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* RNG_PROCESS - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* NVM_PROCESS - Set on Entry / Reset on Exit */
- { GPIOB, LL_GPIO_PIN_3, 1, 0}, /* IPCC_GENERAL - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_BLE_CMD_RX - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_BLE_EVT_TX - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_BLE_ACL_DATA_RX - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_SYS_CMD_RX - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_SYS_EVT_TX - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_CLI_CMD_RX - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_OT_CMD_RX - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_OT_ACK_TX - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_CLI_ACK_TX - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_MEM_MANAGER_RX - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_TRACES_TX - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_6, 1, 0}, /* HARD_FAULT - Set on Entry / Reset on Exit */
-/* From v1.1.1 */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IP_CORE_LP_STATUS - Set on Entry / Reset on Exit */
-/* From v1.2.0 */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* END_OF_CONNECTION_EVENT - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* TIMER_SERVER_CALLBACK - Toggle on Entry */
- { GPIOA, LL_GPIO_PIN_4, 1, 0}, /* PES_ACTIVITY - Set on Entry / Reset on Exit */
- { GPIOB, LL_GPIO_PIN_2, 1, 0}, /* MB_BLE_SEND_EVT - Set on Entry / Reset on Exit */
-/* From v1.3.0 */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* BLE_NO_DELAY - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* BLE_STACK_STORE_NVM_CB - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* NVMA_WRITE_ONGOING - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* NVMA_WRITE_COMPLETE - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* NVMA_CLEANUP - Set on Entry / Reset on Exit */
-/* From v1.4.0 */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* NVMA_START - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* FLASH_EOP - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* FLASH_WRITE - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* FLASH_ERASE - Set on Entry / Reset on Exit */
-};
-
-/**
- * THE DEBUG ON GPIO FOR CPU2 IS INTENDED TO BE USED ONLY ON REQUEST FROM ST SUPPORT
- * This table is relevant only for BLE
- * It provides timing information on BLE RF activity.
- * New signals may be allocated at any location when requested by ST
- * The GPIO allocated to each signal depend on the BLE_DTB_CFG value and cannot be changed
- */
-#if( BLE_DTB_CFG == 7)
-static const APPD_GpioConfig_t aRfConfigList[GPIO_NBR_OF_RF_SIGNALS] =
-{
- { GPIOB, LL_GPIO_PIN_2, 0, 0}, /* DTB10 - Tx/Rx SPI */
- { GPIOB, LL_GPIO_PIN_7, 0, 0}, /* DTB11 - Tx/Tx SPI Clk */
- { GPIOA, LL_GPIO_PIN_8, 0, 0}, /* DTB12 - Tx/Rx Ready & SPI Select */
- { GPIOA, LL_GPIO_PIN_9, 0, 0}, /* DTB13 - Tx/Rx Start */
- { GPIOA, LL_GPIO_PIN_10, 0, 0}, /* DTB14 - FSM0 */
- { GPIOA, LL_GPIO_PIN_11, 0, 0}, /* DTB15 - FSM1 */
- { GPIOB, LL_GPIO_PIN_8, 0, 0}, /* DTB16 - FSM2 */
- { GPIOB, LL_GPIO_PIN_11, 0, 0}, /* DTB17 - FSM3 */
- { GPIOB, LL_GPIO_PIN_10, 0, 0}, /* DTB18 - FSM4 */
-};
-#endif
-/* USER CODE END PV */
-
-/* Global variables ----------------------------------------------------------*/
-/* USER CODE BEGIN GV */
-/* USER CODE END GV */
-
-/* Private function prototypes -----------------------------------------------*/
-/* USER CODE BEGIN PFP */
-static void APPD_SetCPU2GpioConfig( void );
-static void APPD_BleDtbCfg( void );
-/* USER CODE END PFP */
-
-/* Functions Definition ------------------------------------------------------*/
-void APPD_Init( void )
-{
-/* USER CODE BEGIN APPD_Init */
-#if (CFG_DEBUGGER_SUPPORTED == 1)
- /**
- * Keep debugger enabled while in any low power mode
- */
- HAL_DBGMCU_EnableDBGSleepMode();
- HAL_DBGMCU_EnableDBGStopMode();
-
- /***************** ENABLE DEBUGGER *************************************/
- LL_EXTI_EnableIT_32_63(LL_EXTI_LINE_48);
-
-#else
- GPIO_InitTypeDef gpio_config = {0};
-
- gpio_config.Pull = GPIO_NOPULL;
- gpio_config.Mode = GPIO_MODE_ANALOG;
-
- gpio_config.Pin = GPIO_PIN_15 | GPIO_PIN_14 | GPIO_PIN_13;
- __HAL_RCC_GPIOA_CLK_ENABLE();
- HAL_GPIO_Init(GPIOA, &gpio_config);
- __HAL_RCC_GPIOA_CLK_DISABLE();
-
- gpio_config.Pin = GPIO_PIN_4 | GPIO_PIN_3;
- __HAL_RCC_GPIOB_CLK_ENABLE();
- HAL_GPIO_Init(GPIOB, &gpio_config);
- __HAL_RCC_GPIOB_CLK_DISABLE();
-
- HAL_DBGMCU_DisableDBGSleepMode();
- HAL_DBGMCU_DisableDBGStopMode();
- HAL_DBGMCU_DisableDBGStandbyMode();
-
-#endif /* (CFG_DEBUGGER_SUPPORTED == 1) */
-
-#if(CFG_DEBUG_TRACE != 0)
- DbgTraceInit();
-#endif
-
- APPD_SetCPU2GpioConfig( );
- APPD_BleDtbCfg( );
-
-/* USER CODE END APPD_Init */
- return;
-}
-
-void APPD_EnableCPU2( void )
-{
-/* USER CODE BEGIN APPD_EnableCPU2 */
- SHCI_C2_DEBUG_Init_Cmd_Packet_t DebugCmdPacket =
- {
- {{0,0,0}}, /**< Does not need to be initialized */
- {(uint8_t *)aGpioConfigList,
- (uint8_t *)&APPD_TracesConfig,
- (uint8_t *)&APPD_GeneralConfig,
- GPIO_CFG_NBR_OF_FEATURES,
- NBR_OF_TRACES_CONFIG_PARAMETERS,
- NBR_OF_GENERAL_CONFIG_PARAMETERS}
- };
-
- /**< Traces channel initialization */
- TL_TRACES_Init( );
-
- /** GPIO DEBUG Initialization */
- SHCI_C2_DEBUG_Init( &DebugCmdPacket );
-
- // GPIO_InitTypeDef GPIO_InitStruct;
- // GPIO_InitStruct.Pull = GPIO_NOPULL;
- // GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- // GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- // GPIO_InitStruct.Pin = LL_GPIO_PIN_3;
- // HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
- // SHCI_C2_ExtpaConfig((uint32_t)GPIOC, LL_GPIO_PIN_3, EXT_PA_ENABLED_LOW, EXT_PA_ENABLED);
-
-/* USER CODE END APPD_EnableCPU2 */
- return;
-}
-
-/*************************************************************
- *
- * LOCAL FUNCTIONS
- *
- *************************************************************/
-static void APPD_SetCPU2GpioConfig( void )
-{
-/* USER CODE BEGIN APPD_SetCPU2GpioConfig */
- GPIO_InitTypeDef gpio_config = {0};
- uint8_t local_loop;
- uint16_t gpioa_pin_list;
- uint16_t gpiob_pin_list;
- uint16_t gpioc_pin_list;
-
- gpioa_pin_list = 0;
- gpiob_pin_list = 0;
- gpioc_pin_list = 0;
-
- for(local_loop = 0 ; local_loop < GPIO_CFG_NBR_OF_FEATURES; local_loop++)
- {
- if( aGpioConfigList[local_loop].enable != 0)
- {
- switch((uint32_t)aGpioConfigList[local_loop].port)
- {
- case (uint32_t)GPIOA:
- gpioa_pin_list |= aGpioConfigList[local_loop].pin;
- break;
-
- case (uint32_t)GPIOB:
- gpiob_pin_list |= aGpioConfigList[local_loop].pin;
- break;
-
- case (uint32_t)GPIOC:
- gpioc_pin_list |= aGpioConfigList[local_loop].pin;
- break;
-
- default:
- break;
- }
- }
- }
-
- gpio_config.Pull = GPIO_NOPULL;
- gpio_config.Mode = GPIO_MODE_OUTPUT_PP;
- gpio_config.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
-
- if(gpioa_pin_list != 0)
- {
- gpio_config.Pin = gpioa_pin_list;
- __HAL_RCC_GPIOA_CLK_ENABLE();
- __HAL_RCC_C2GPIOA_CLK_ENABLE();
- HAL_GPIO_Init(GPIOA, &gpio_config);
- HAL_GPIO_WritePin(GPIOA, gpioa_pin_list, GPIO_PIN_RESET);
- }
-
- if(gpiob_pin_list != 0)
- {
- gpio_config.Pin = gpiob_pin_list;
- __HAL_RCC_GPIOB_CLK_ENABLE();
- __HAL_RCC_C2GPIOB_CLK_ENABLE();
- HAL_GPIO_Init(GPIOB, &gpio_config);
- HAL_GPIO_WritePin(GPIOB, gpiob_pin_list, GPIO_PIN_RESET);
- }
-
- if(gpioc_pin_list != 0)
- {
- gpio_config.Pin = gpioc_pin_list;
- __HAL_RCC_GPIOC_CLK_ENABLE();
- __HAL_RCC_C2GPIOC_CLK_ENABLE();
- HAL_GPIO_Init(GPIOC, &gpio_config);
- HAL_GPIO_WritePin(GPIOC, gpioc_pin_list, GPIO_PIN_RESET);
- }
-
-/* USER CODE END APPD_SetCPU2GpioConfig */
- return;
-}
-
-static void APPD_BleDtbCfg( void )
-{
-/* USER CODE BEGIN APPD_BleDtbCfg */
-#if (BLE_DTB_CFG != 0)
- GPIO_InitTypeDef gpio_config = {0};
- uint8_t local_loop;
- uint16_t gpioa_pin_list;
- uint16_t gpiob_pin_list;
-
- gpioa_pin_list = 0;
- gpiob_pin_list = 0;
-
- for(local_loop = 0 ; local_loop < GPIO_NBR_OF_RF_SIGNALS; local_loop++)
- {
- if( aRfConfigList[local_loop].enable != 0)
- {
- switch((uint32_t)aRfConfigList[local_loop].port)
- {
- case (uint32_t)GPIOA:
- gpioa_pin_list |= aRfConfigList[local_loop].pin;
- break;
-
- case (uint32_t)GPIOB:
- gpiob_pin_list |= aRfConfigList[local_loop].pin;
- break;
-
- default:
- break;
- }
- }
- }
-
- gpio_config.Pull = GPIO_NOPULL;
- gpio_config.Mode = GPIO_MODE_AF_PP;
- gpio_config.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- gpio_config.Alternate = GPIO_AF6_RF_DTB7;
-
- if(gpioa_pin_list != 0)
- {
- gpio_config.Pin = gpioa_pin_list;
- __HAL_RCC_GPIOA_CLK_ENABLE();
- __HAL_RCC_C2GPIOA_CLK_ENABLE();
- HAL_GPIO_Init(GPIOA, &gpio_config);
- }
-
- if(gpiob_pin_list != 0)
- {
- gpio_config.Pin = gpiob_pin_list;
- __HAL_RCC_GPIOB_CLK_ENABLE();
- __HAL_RCC_C2GPIOB_CLK_ENABLE();
- HAL_GPIO_Init(GPIOB, &gpio_config);
- }
-#endif
-
-/* USER CODE END APPD_BleDtbCfg */
- return;
-}
-
-/*************************************************************
- *
- * WRAP FUNCTIONS
- *
-*************************************************************/
-#if(CFG_DEBUG_TRACE != 0)
-void DbgOutputInit( void )
-{
-}
-
-void DbgOutputTraces( uint8_t *p_data, uint16_t size, void (*cb)(void) )
-{
- furi_hal_console_tx(p_data, size);
- cb();
-}
-#endif
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ \ No newline at end of file
diff --git a/firmware/targets/f6/ble-glue/ble_dbg_conf.h b/firmware/targets/f6/ble-glue/ble_dbg_conf.h
deleted file mode 100644
index 7bb35216..00000000
--- a/firmware/targets/f6/ble-glue/ble_dbg_conf.h
+++ /dev/null
@@ -1,199 +0,0 @@
-/**
- ******************************************************************************
- * File Name : App/ble_dbg_conf.h
- * Description : Debug configuration file for BLE Middleware.
- *
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
- * All rights reserved.</center></h2>
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __BLE_DBG_CONF_H
-#define __BLE_DBG_CONF_H
-
-/**
- * Enable or Disable traces from BLE
- */
-
-#define BLE_DBG_APP_EN 1
-#define BLE_DBG_DIS_EN 1
-#define BLE_DBG_HRS_EN 1
-#define BLE_DBG_SVCCTL_EN 1
-#define BLE_DBG_BLS_EN 1
-#define BLE_DBG_HTS_EN 1
-#define BLE_DBG_P2P_STM_EN 1
-
-/**
- * Macro definition
- */
-#if ( BLE_DBG_APP_EN != 0 )
-#define BLE_DBG_APP_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_APP_MSG PRINT_NO_MESG
-#endif
-
-#if ( BLE_DBG_DIS_EN != 0 )
-#define BLE_DBG_DIS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_DIS_MSG PRINT_NO_MESG
-#endif
-
-#if ( BLE_DBG_HRS_EN != 0 )
-#define BLE_DBG_HRS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_HRS_MSG PRINT_NO_MESG
-#endif
-
-#if ( BLE_DBG_P2P_STM_EN != 0 )
-#define BLE_DBG_P2P_STM_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_P2P_STM_MSG PRINT_NO_MESG
-#endif
-
-#if ( BLE_DBG_TEMPLATE_STM_EN != 0 )
-#define BLE_DBG_TEMPLATE_STM_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_TEMPLATE_STM_MSG PRINT_NO_MESG
-#endif
-
-#if ( BLE_DBG_EDS_STM_EN != 0 )
-#define BLE_DBG_EDS_STM_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_EDS_STM_MSG PRINT_NO_MESG
-#endif
-
-#if ( BLE_DBG_LBS_STM_EN != 0 )
-#define BLE_DBG_LBS_STM_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_LBS_STM_MSG PRINT_NO_MESG
-#endif
-
-#if ( BLE_DBG_SVCCTL_EN != 0 )
-#define BLE_DBG_SVCCTL_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_SVCCTL_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_CTS_EN != 0)
-#define BLE_DBG_CTS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_CTS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_HIDS_EN != 0)
-#define BLE_DBG_HIDS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_HIDS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_PASS_EN != 0)
-#define BLE_DBG_PASS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_PASS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_BLS_EN != 0)
-#define BLE_DBG_BLS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_BLS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_HTS_EN != 0)
-#define BLE_DBG_HTS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_HTS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_ANS_EN != 0)
-#define BLE_DBG_ANS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_ANS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_ESS_EN != 0)
-#define BLE_DBG_ESS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_ESS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_GLS_EN != 0)
-#define BLE_DBG_GLS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_GLS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_BAS_EN != 0)
-#define BLE_DBG_BAS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_BAS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_RTUS_EN != 0)
-#define BLE_DBG_RTUS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_RTUS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_HPS_EN != 0)
-#define BLE_DBG_HPS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_HPS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_TPS_EN != 0)
-#define BLE_DBG_TPS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_TPS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_LLS_EN != 0)
-#define BLE_DBG_LLS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_LLS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_IAS_EN != 0)
-#define BLE_DBG_IAS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_IAS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_WSS_EN != 0)
-#define BLE_DBG_WSS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_WSS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_LNS_EN != 0)
-#define BLE_DBG_LNS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_LNS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_SCPS_EN != 0)
-#define BLE_DBG_SCPS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_SCPS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_DTS_EN != 0)
-#define BLE_DBG_DTS_MSG PRINT_MESG_DBG
-#define BLE_DBG_DTS_BUF PRINT_LOG_BUFF_DBG
-#else
-#define BLE_DBG_DTS_MSG PRINT_NO_MESG
-#define BLE_DBG_DTS_BUF PRINT_NO_MESG
-#endif
-
-#endif /*__BLE_DBG_CONF_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/firmware/targets/f6/ble-glue/dev_info_service.c b/firmware/targets/f6/ble-glue/dev_info_service.c
deleted file mode 100644
index e47fdf66..00000000
--- a/firmware/targets/f6/ble-glue/dev_info_service.c
+++ /dev/null
@@ -1,160 +0,0 @@
-#include "dev_info_service.h"
-#include "app_common.h"
-#include "ble.h"
-
-#include <furi.h>
-
-#define TAG "BtDevInfoSvc"
-
-typedef struct {
- uint16_t service_handle;
- uint16_t man_name_char_handle;
- uint16_t serial_num_char_handle;
- uint16_t firmware_rev_char_handle;
- uint16_t software_rev_char_handle;
-} DevInfoSvc;
-
-static DevInfoSvc* dev_info_svc = NULL;
-
-static const char dev_info_man_name[] = "Flipper Devices Inc.";
-static const char dev_info_serial_num[] = "1.0";
-static const char dev_info_firmware_rev_num[] = TOSTRING(TARGET);
-static const char dev_info_software_rev_num[] = GIT_COMMIT " " GIT_BRANCH " " GIT_BRANCH_NUM " " BUILD_DATE;
-
-void dev_info_svc_start() {
- dev_info_svc = furi_alloc(sizeof(DevInfoSvc));
- tBleStatus status;
-
- // Add Device Information Service
- uint16_t uuid = DEVICE_INFORMATION_SERVICE_UUID;
- status = aci_gatt_add_service(UUID_TYPE_16, (Service_UUID_t*)&uuid, PRIMARY_SERVICE, 9, &dev_info_svc->service_handle);
- if(status) {
- FURI_LOG_E(TAG, "Failed to add Device Information Service: %d", status);
- }
-
- // Add characteristics
- uuid = MANUFACTURER_NAME_UUID;
- status = aci_gatt_add_char(dev_info_svc->service_handle,
- UUID_TYPE_16,
- (Char_UUID_t*)&uuid,
- strlen(dev_info_man_name),
- CHAR_PROP_READ,
- ATTR_PERMISSION_AUTHEN_READ,
- GATT_DONT_NOTIFY_EVENTS,
- 10,
- CHAR_VALUE_LEN_CONSTANT,
- &dev_info_svc->man_name_char_handle);
- if(status) {
- FURI_LOG_E(TAG, "Failed to add manufacturer name char: %d", status);
- }
- uuid = SERIAL_NUMBER_UUID;
- status = aci_gatt_add_char(dev_info_svc->service_handle,
- UUID_TYPE_16,
- (Char_UUID_t*)&uuid,
- strlen(dev_info_serial_num),
- CHAR_PROP_READ,
- ATTR_PERMISSION_AUTHEN_READ,
- GATT_DONT_NOTIFY_EVENTS,
- 10,
- CHAR_VALUE_LEN_CONSTANT,
- &dev_info_svc->serial_num_char_handle);
- if(status) {
- FURI_LOG_E(TAG, "Failed to add serial number char: %d", status);
- }
- uuid = FIRMWARE_REVISION_UUID;
- status = aci_gatt_add_char(dev_info_svc->service_handle,
- UUID_TYPE_16,
- (Char_UUID_t*)&uuid,
- strlen(dev_info_firmware_rev_num),
- CHAR_PROP_READ,
- ATTR_PERMISSION_AUTHEN_READ,
- GATT_DONT_NOTIFY_EVENTS,
- 10,
- CHAR_VALUE_LEN_CONSTANT,
- &dev_info_svc->firmware_rev_char_handle);
- if(status) {
- FURI_LOG_E(TAG, "Failed to add firmware revision char: %d", status);
- }
- uuid = SOFTWARE_REVISION_UUID;
- status = aci_gatt_add_char(dev_info_svc->service_handle,
- UUID_TYPE_16,
- (Char_UUID_t*)&uuid,
- strlen(dev_info_software_rev_num),
- CHAR_PROP_READ,
- ATTR_PERMISSION_AUTHEN_READ,
- GATT_DONT_NOTIFY_EVENTS,
- 10,
- CHAR_VALUE_LEN_CONSTANT,
- &dev_info_svc->software_rev_char_handle);
- if(status) {
- FURI_LOG_E(TAG, "Failed to add software revision char: %d", status);
- }
-
- // Update characteristics
- status = aci_gatt_update_char_value(dev_info_svc->service_handle,
- dev_info_svc->man_name_char_handle,
- 0,
- strlen(dev_info_man_name),
- (uint8_t*)dev_info_man_name);
- if(status) {
- FURI_LOG_E(TAG, "Failed to update manufacturer name char: %d", status);
- }
- status = aci_gatt_update_char_value(dev_info_svc->service_handle,
- dev_info_svc->serial_num_char_handle,
- 0,
- strlen(dev_info_serial_num),
- (uint8_t*)dev_info_serial_num);
- if(status) {
- FURI_LOG_E(TAG, "Failed to update serial number char: %d", status);
- }
- status = aci_gatt_update_char_value(dev_info_svc->service_handle,
- dev_info_svc->firmware_rev_char_handle,
- 0,
- strlen(dev_info_firmware_rev_num),
- (uint8_t*)dev_info_firmware_rev_num);
- if(status) {
- FURI_LOG_E(TAG, "Failed to update firmware revision char: %d", status);
- }
- status = aci_gatt_update_char_value(dev_info_svc->service_handle,
- dev_info_svc->software_rev_char_handle,
- 0,
- strlen(dev_info_software_rev_num),
- (uint8_t*)dev_info_software_rev_num);
- if(status) {
- FURI_LOG_E(TAG, "Failed to update software revision char: %d", status);
- }
-}
-
-void dev_info_svc_stop() {
- tBleStatus status;
- if(dev_info_svc) {
- // Delete service characteristics
- status = aci_gatt_del_char(dev_info_svc->service_handle, dev_info_svc->man_name_char_handle);
- if(status) {
- FURI_LOG_E(TAG, "Failed to delete manufacturer name char: %d", status);
- }
- status = aci_gatt_del_char(dev_info_svc->service_handle, dev_info_svc->serial_num_char_handle);
- if(status) {
- FURI_LOG_E(TAG, "Failed to delete serial number char: %d", status);
- }
- status = aci_gatt_del_char(dev_info_svc->service_handle, dev_info_svc->firmware_rev_char_handle);
- if(status) {
- FURI_LOG_E(TAG, "Failed to delete firmware revision char: %d", status);
- }
- status = aci_gatt_del_char(dev_info_svc->service_handle, dev_info_svc->software_rev_char_handle);
- if(status) {
- FURI_LOG_E(TAG, "Failed to delete software revision char: %d", status);
- }
- // Delete service
- status = aci_gatt_del_service(dev_info_svc->service_handle);
- if(status) {
- FURI_LOG_E(TAG, "Failed to delete device info service: %d", status);
- }
- free(dev_info_svc);
- dev_info_svc = NULL;
- }
-}
-
-bool dev_info_svc_is_started() {
- return dev_info_svc != NULL;
-}
diff --git a/firmware/targets/f6/ble-glue/dev_info_service.h b/firmware/targets/f6/ble-glue/dev_info_service.h
deleted file mode 100644
index f5531fc7..00000000
--- a/firmware/targets/f6/ble-glue/dev_info_service.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#pragma once
-
-#include <stdint.h>
-#include <stdbool.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define DEV_INFO_MANUFACTURER_NAME "Flipper Devices Inc."
-#define DEV_INFO_SERIAL_NUMBER "1.0"
-#define DEV_INFO_FIRMWARE_REVISION_NUMBER TARGET
-#define DEV_INFO_SOFTWARE_REVISION_NUMBER GIT_COMMIT " " GIT_BRANCH " " GIT_BRANCH_NUM " " BUILD_DATE
-
-void dev_info_svc_start();
-
-void dev_info_svc_stop();
-
-bool dev_info_svc_is_started();
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/firmware/targets/f6/ble-glue/hw_ipcc.c b/firmware/targets/f6/ble-glue/hw_ipcc.c
deleted file mode 100644
index 17b5a4d8..00000000
--- a/firmware/targets/f6/ble-glue/hw_ipcc.c
+++ /dev/null
@@ -1,675 +0,0 @@
-/**
- ******************************************************************************
- * File Name : Target/hw_ipcc.c
- * Description : Hardware IPCC source file for STM32WPAN Middleware.
- *
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
- * All rights reserved.</center></h2>
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "app_common.h"
-#include "mbox_def.h"
-
-/* Global variables ---------------------------------------------------------*/
-/* Private defines -----------------------------------------------------------*/
-#define HW_IPCC_TX_PENDING( channel ) ( !(LL_C1_IPCC_IsActiveFlag_CHx( IPCC, channel )) ) && (((~(IPCC->C1MR)) & (channel << 16U)))
-#define HW_IPCC_RX_PENDING( channel ) (LL_C2_IPCC_IsActiveFlag_CHx( IPCC, channel )) && (((~(IPCC->C1MR)) & (channel << 0U)))
-
-/* Private macros ------------------------------------------------------------*/
-/* Private typedef -----------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-static void (*FreeBufCb)( void );
-
-/* Private function prototypes -----------------------------------------------*/
-static void HW_IPCC_BLE_EvtHandler( void );
-static void HW_IPCC_BLE_AclDataEvtHandler( void );
-static void HW_IPCC_MM_FreeBufHandler( void );
-static void HW_IPCC_SYS_CmdEvtHandler( void );
-static void HW_IPCC_SYS_EvtHandler( void );
-static void HW_IPCC_TRACES_EvtHandler( void );
-
-#ifdef THREAD_WB
-static void HW_IPCC_OT_CmdEvtHandler( void );
-static void HW_IPCC_THREAD_NotEvtHandler( void );
-static void HW_IPCC_THREAD_CliNotEvtHandler( void );
-#endif
-
-#ifdef LLD_TESTS_WB
-static void HW_IPCC_LLDTESTS_ReceiveCliRspHandler( void );
-static void HW_IPCC_LLDTESTS_ReceiveM0CmdHandler( void );
-#endif
-#ifdef LLD_BLE_WB
-/*static void HW_IPCC_LLD_BLE_ReceiveCliRspHandler( void );*/
-static void HW_IPCC_LLD_BLE_ReceiveRspHandler( void );
-static void HW_IPCC_LLD_BLE_ReceiveM0CmdHandler( void );
-#endif
-
-#ifdef MAC_802_15_4_WB
-static void HW_IPCC_MAC_802_15_4_CmdEvtHandler( void );
-static void HW_IPCC_MAC_802_15_4_NotEvtHandler( void );
-#endif
-
-#ifdef ZIGBEE_WB
-static void HW_IPCC_ZIGBEE_CmdEvtHandler( void );
-static void HW_IPCC_ZIGBEE_StackNotifEvtHandler( void );
-static void HW_IPCC_ZIGBEE_StackM0RequestHandler( void );
-#endif
-
-/* Public function definition -----------------------------------------------*/
-
-/******************************************************************************
- * INTERRUPT HANDLER
- ******************************************************************************/
-void HW_IPCC_Rx_Handler( void )
-{
- if (HW_IPCC_RX_PENDING( HW_IPCC_SYSTEM_EVENT_CHANNEL ))
- {
- HW_IPCC_SYS_EvtHandler();
- }
-#ifdef MAC_802_15_4_WB
- else if (HW_IPCC_RX_PENDING( HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL ))
- {
- HW_IPCC_MAC_802_15_4_NotEvtHandler();
- }
-#endif /* MAC_802_15_4_WB */
-#ifdef THREAD_WB
- else if (HW_IPCC_RX_PENDING( HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL ))
- {
- HW_IPCC_THREAD_NotEvtHandler();
- }
- else if (HW_IPCC_RX_PENDING( HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL ))
- {
- HW_IPCC_THREAD_CliNotEvtHandler();
- }
-#endif /* THREAD_WB */
-#ifdef LLD_TESTS_WB
- else if (HW_IPCC_RX_PENDING( HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL ))
- {
- HW_IPCC_LLDTESTS_ReceiveCliRspHandler();
- }
- else if (HW_IPCC_RX_PENDING( HW_IPCC_LLDTESTS_M0_CMD_CHANNEL ))
- {
- HW_IPCC_LLDTESTS_ReceiveM0CmdHandler();
- }
-#endif /* LLD_TESTS_WB */
-#ifdef LLD_BLE_WB
- else if (HW_IPCC_RX_PENDING( HW_IPCC_LLD_BLE_RSP_CHANNEL ))
- {
- HW_IPCC_LLD_BLE_ReceiveRspHandler();
- }
- else if (HW_IPCC_RX_PENDING( HW_IPCC_LLD_BLE_M0_CMD_CHANNEL ))
- {
- HW_IPCC_LLD_BLE_ReceiveM0CmdHandler();
- }
-#endif /* LLD_TESTS_WB */
-#ifdef ZIGBEE_WB
- else if (HW_IPCC_RX_PENDING( HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL ))
- {
- HW_IPCC_ZIGBEE_StackNotifEvtHandler();
- }
- else if (HW_IPCC_RX_PENDING( HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL ))
- {
- HW_IPCC_ZIGBEE_StackM0RequestHandler();
- }
-#endif /* ZIGBEE_WB */
- else if (HW_IPCC_RX_PENDING( HW_IPCC_BLE_EVENT_CHANNEL ))
- {
- HW_IPCC_BLE_EvtHandler();
- }
- else if (HW_IPCC_RX_PENDING( HW_IPCC_TRACES_CHANNEL ))
- {
- HW_IPCC_TRACES_EvtHandler();
- }
-
- return;
-}
-
-void HW_IPCC_Tx_Handler( void )
-{
- if (HW_IPCC_TX_PENDING( HW_IPCC_SYSTEM_CMD_RSP_CHANNEL ))
- {
- HW_IPCC_SYS_CmdEvtHandler();
- }
-#ifdef MAC_802_15_4_WB
- else if (HW_IPCC_TX_PENDING( HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL ))
- {
- HW_IPCC_MAC_802_15_4_CmdEvtHandler();
- }
-#endif /* MAC_802_15_4_WB */
-#ifdef THREAD_WB
- else if (HW_IPCC_TX_PENDING( HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL ))
- {
- HW_IPCC_OT_CmdEvtHandler();
- }
-#endif /* THREAD_WB */
-#ifdef LLD_TESTS_WB
-// No TX handler for LLD tests
-#endif /* LLD_TESTS_WB */
-#ifdef ZIGBEE_WB
- if (HW_IPCC_TX_PENDING( HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL ))
- {
- HW_IPCC_ZIGBEE_CmdEvtHandler();
- }
-#endif /* ZIGBEE_WB */
- else if (HW_IPCC_TX_PENDING( HW_IPCC_SYSTEM_CMD_RSP_CHANNEL ))
- {
- HW_IPCC_SYS_CmdEvtHandler();
- }
- else if (HW_IPCC_TX_PENDING( HW_IPCC_MM_RELEASE_BUFFER_CHANNEL ))
- {
- HW_IPCC_MM_FreeBufHandler();
- }
- else if (HW_IPCC_TX_PENDING( HW_IPCC_HCI_ACL_DATA_CHANNEL ))
- {
- HW_IPCC_BLE_AclDataEvtHandler();
- }
-
- return;
-}
-/******************************************************************************
- * GENERAL
- ******************************************************************************/
-void HW_IPCC_Enable( void )
-{
- /**
- * Such as IPCC IP available to the CPU2, it is required to keep the IPCC clock running
- when FUS is running on CPU2 and CPU1 enters deep sleep mode
- */
- LL_C2_AHB3_GRP1_EnableClock(LL_C2_AHB3_GRP1_PERIPH_IPCC);
-
- /**
- * When the device is out of standby, it is required to use the EXTI mechanism to wakeup CPU2
- */
- LL_C2_EXTI_EnableEvent_32_63( LL_EXTI_LINE_41 );
- LL_EXTI_EnableRisingTrig_32_63( LL_EXTI_LINE_41 );
-
- /**
- * In case the SBSFU is implemented, it may have already set the C2BOOT bit to startup the CPU2.
- * In that case, to keep the mechanism transparent to the user application, it shall call the system command
- * SHCI_C2_Reinit( ) before jumping to the application.
- * When the CPU2 receives that command, it waits for its event input to be set to restart the CPU2 firmware.
- * This is required because once C2BOOT has been set once, a clear/set on C2BOOT has no effect.
- * When SHCI_C2_Reinit( ) is not called, generating an event to the CPU2 does not have any effect
- * So, by default, the application shall both set the event flag and set the C2BOOT bit.
- */
- __SEV( ); /* Set the internal event flag and send an event to the CPU2 */
- __WFE( ); /* Clear the internal event flag */
- LL_PWR_EnableBootC2( );
-
- return;
-}
-
-void HW_IPCC_Init( void )
-{
- LL_AHB3_GRP1_EnableClock( LL_AHB3_GRP1_PERIPH_IPCC );
-
- LL_C1_IPCC_EnableIT_RXO( IPCC );
- LL_C1_IPCC_EnableIT_TXF( IPCC );
-
- HAL_NVIC_SetPriority(IPCC_C1_RX_IRQn, 6, 0);
- HAL_NVIC_EnableIRQ(IPCC_C1_RX_IRQn);
- HAL_NVIC_SetPriority(IPCC_C1_TX_IRQn, 6, 0);
- HAL_NVIC_EnableIRQ(IPCC_C1_TX_IRQn);
-
- return;
-}
-
-/******************************************************************************
- * BLE
- ******************************************************************************/
-void HW_IPCC_BLE_Init( void )
-{
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_BLE_EVENT_CHANNEL );
-
- return;
-}
-
-void HW_IPCC_BLE_SendCmd( void )
-{
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_BLE_CMD_CHANNEL );
-
- return;
-}
-
-static void HW_IPCC_BLE_EvtHandler( void )
-{
- HW_IPCC_BLE_RxEvtNot();
-
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_BLE_EVENT_CHANNEL );
-
- return;
-}
-
-void HW_IPCC_BLE_SendAclData( void )
-{
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL );
- LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL );
-
- return;
-}
-
-static void HW_IPCC_BLE_AclDataEvtHandler( void )
-{
- LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL );
-
- HW_IPCC_BLE_AclDataAckNot();
-
- return;
-}
-
-__weak void HW_IPCC_BLE_AclDataAckNot( void ){};
-__weak void HW_IPCC_BLE_RxEvtNot( void ){};
-
-/******************************************************************************
- * SYSTEM
- ******************************************************************************/
-void HW_IPCC_SYS_Init( void )
-{
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_SYSTEM_EVENT_CHANNEL );
-
- return;
-}
-
-void HW_IPCC_SYS_SendCmd( void )
-{
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
- LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
-
- return;
-}
-
-static void HW_IPCC_SYS_CmdEvtHandler( void )
-{
- LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
-
- HW_IPCC_SYS_CmdEvtNot();
-
- return;
-}
-
-static void HW_IPCC_SYS_EvtHandler( void )
-{
- HW_IPCC_SYS_EvtNot();
-
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_SYSTEM_EVENT_CHANNEL );
-
- return;
-}
-
-__weak void HW_IPCC_SYS_CmdEvtNot( void ){};
-__weak void HW_IPCC_SYS_EvtNot( void ){};
-
-/******************************************************************************
- * MAC 802.15.4
- ******************************************************************************/
-#ifdef MAC_802_15_4_WB
-void HW_IPCC_MAC_802_15_4_Init( void )
-{
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL );
-
- return;
-}
-
-void HW_IPCC_MAC_802_15_4_SendCmd( void )
-{
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL );
- LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL );
-
- return;
-}
-
-void HW_IPCC_MAC_802_15_4_SendAck( void )
-{
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL );
-
- return;
-}
-
-static void HW_IPCC_MAC_802_15_4_CmdEvtHandler( void )
-{
- LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL );
-
- HW_IPCC_MAC_802_15_4_CmdEvtNot();
-
- return;
-}
-
-static void HW_IPCC_MAC_802_15_4_NotEvtHandler( void )
-{
- LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL );
-
- HW_IPCC_MAC_802_15_4_EvtNot();
-
- return;
-}
-__weak void HW_IPCC_MAC_802_15_4_CmdEvtNot( void ){};
-__weak void HW_IPCC_MAC_802_15_4_EvtNot( void ){};
-#endif
-
-/******************************************************************************
- * THREAD
- ******************************************************************************/
-#ifdef THREAD_WB
-void HW_IPCC_THREAD_Init( void )
-{
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
-
- return;
-}
-
-void HW_IPCC_OT_SendCmd( void )
-{
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
- LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
-
- return;
-}
-
-void HW_IPCC_CLI_SendCmd( void )
-{
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_THREAD_CLI_CMD_CHANNEL );
-
- return;
-}
-
-void HW_IPCC_THREAD_SendAck( void )
-{
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
-
- return;
-}
-
-void HW_IPCC_THREAD_CliSendAck( void )
-{
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
-
- return;
-}
-
-static void HW_IPCC_OT_CmdEvtHandler( void )
-{
- LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
-
- HW_IPCC_OT_CmdEvtNot();
-
- return;
-}
-
-static void HW_IPCC_THREAD_NotEvtHandler( void )
-{
- LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
-
- HW_IPCC_THREAD_EvtNot();
-
- return;
-}
-
-static void HW_IPCC_THREAD_CliNotEvtHandler( void )
-{
- LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
-
- HW_IPCC_THREAD_CliEvtNot();
-
- return;
-}
-
-__weak void HW_IPCC_OT_CmdEvtNot( void ){};
-__weak void HW_IPCC_CLI_CmdEvtNot( void ){};
-__weak void HW_IPCC_THREAD_EvtNot( void ){};
-
-#endif /* THREAD_WB */
-
-/******************************************************************************
- * LLD TESTS
- ******************************************************************************/
-#ifdef LLD_TESTS_WB
-void HW_IPCC_LLDTESTS_Init( void )
-{
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL );
- return;
-}
-
-void HW_IPCC_LLDTESTS_SendCliCmd( void )
-{
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_LLDTESTS_CLI_CMD_CHANNEL );
- return;
-}
-
-static void HW_IPCC_LLDTESTS_ReceiveCliRspHandler( void )
-{
- LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL );
- HW_IPCC_LLDTESTS_ReceiveCliRsp();
- return;
-}
-
-void HW_IPCC_LLDTESTS_SendCliRspAck( void )
-{
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL );
- return;
-}
-
-static void HW_IPCC_LLDTESTS_ReceiveM0CmdHandler( void )
-{
- LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL );
- HW_IPCC_LLDTESTS_ReceiveM0Cmd();
- return;
-}
-
-void HW_IPCC_LLDTESTS_SendM0CmdAck( void )
-{
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL );
- return;
-}
-__weak void HW_IPCC_LLDTESTS_ReceiveCliRsp( void ){};
-__weak void HW_IPCC_LLDTESTS_ReceiveM0Cmd( void ){};
-#endif /* LLD_TESTS_WB */
-
-/******************************************************************************
- * LLD BLE
- ******************************************************************************/
-#ifdef LLD_BLE_WB
-void HW_IPCC_LLD_BLE_Init( void )
-{
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL );
- return;
-}
-
-void HW_IPCC_LLD_BLE_SendCliCmd( void )
-{
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_LLD_BLE_CLI_CMD_CHANNEL );
- return;
-}
-
-/*static void HW_IPCC_LLD_BLE_ReceiveCliRspHandler( void )
-{
- LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_CLI_RSP_CHANNEL );
- HW_IPCC_LLD_BLE_ReceiveCliRsp();
- return;
-}*/
-
-void HW_IPCC_LLD_BLE_SendCliRspAck( void )
-{
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_LLD_BLE_CLI_RSP_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_CLI_RSP_CHANNEL );
- return;
-}
-
-static void HW_IPCC_LLD_BLE_ReceiveM0CmdHandler( void )
-{
- //LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL );
- HW_IPCC_LLD_BLE_ReceiveM0Cmd();
- return;
-}
-
-void HW_IPCC_LLD_BLE_SendM0CmdAck( void )
-{
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL );
- //LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL );
- return;
-}
-__weak void HW_IPCC_LLD_BLE_ReceiveCliRsp( void ){};
-__weak void HW_IPCC_LLD_BLE_ReceiveM0Cmd( void ){};
-
-/* Transparent Mode */
-void HW_IPCC_LLD_BLE_SendCmd( void )
-{
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_LLD_BLE_CMD_CHANNEL );
- return;
-}
-
-static void HW_IPCC_LLD_BLE_ReceiveRspHandler( void )
-{
- LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL );
- HW_IPCC_LLD_BLE_ReceiveRsp();
- return;
-}
-
-void HW_IPCC_LLD_BLE_SendRspAck( void )
-{
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL );
- return;
-}
-
-#endif /* LLD_BLE_WB */
-
-/******************************************************************************
- * ZIGBEE
- ******************************************************************************/
-#ifdef ZIGBEE_WB
-void HW_IPCC_ZIGBEE_Init( void )
-{
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL );
-
- return;
-}
-
-void HW_IPCC_ZIGBEE_SendM4RequestToM0( void )
-{
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL );
- LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL );
-
- return;
-}
-
-void HW_IPCC_ZIGBEE_SendM4AckToM0Notify( void )
-{
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL );
-
- return;
-}
-
-static void HW_IPCC_ZIGBEE_CmdEvtHandler( void )
-{
- LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL );
-
- HW_IPCC_ZIGBEE_RecvAppliAckFromM0();
-
- return;
-}
-
-static void HW_IPCC_ZIGBEE_StackNotifEvtHandler( void )
-{
- LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL );
-
- HW_IPCC_ZIGBEE_RecvM0NotifyToM4();
-
- return;
-}
-
-static void HW_IPCC_ZIGBEE_StackM0RequestHandler( void )
-{
- LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL );
-
- HW_IPCC_ZIGBEE_RecvM0RequestToM4();
-
- return;
-}
-
-void HW_IPCC_ZIGBEE_SendM4AckToM0Request( void )
-{
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL );
-
- return;
-}
-
-__weak void HW_IPCC_ZIGBEE_RecvAppliAckFromM0( void ){};
-__weak void HW_IPCC_ZIGBEE_RecvM0NotifyToM4( void ){};
-__weak void HW_IPCC_ZIGBEE_RecvM0RequestToM4( void ){};
-#endif /* ZIGBEE_WB */
-
-/******************************************************************************
- * MEMORY MANAGER
- ******************************************************************************/
-void HW_IPCC_MM_SendFreeBuf( void (*cb)( void ) )
-{
- if ( LL_C1_IPCC_IsActiveFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL ) )
- {
- FreeBufCb = cb;
- LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
- }
- else
- {
- cb();
-
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
- }
-
- return;
-}
-
-static void HW_IPCC_MM_FreeBufHandler( void )
-{
- LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
-
- FreeBufCb();
-
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
-
- return;
-}
-
-/******************************************************************************
- * TRACES
- ******************************************************************************/
-void HW_IPCC_TRACES_Init( void )
-{
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_TRACES_CHANNEL );
-
- return;
-}
-
-static void HW_IPCC_TRACES_EvtHandler( void )
-{
- HW_IPCC_TRACES_EvtNot();
-
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_TRACES_CHANNEL );
-
- return;
-}
-
-__weak void HW_IPCC_TRACES_EvtNot( void ){};
-
-/******************* (C) COPYRIGHT 2019 STMicroelectronics *****END OF FILE****/
diff --git a/firmware/targets/f6/ble-glue/app_common.h b/firmware/targets/f6/ble_glue/app_common.h
index d21860f6..a94a96c7 100644
--- a/firmware/targets/f6/ble-glue/app_common.h
+++ b/firmware/targets/f6/ble_glue/app_common.h
@@ -23,7 +23,7 @@
#define APP_COMMON_H
#ifdef __cplusplus
-extern "C"{
+extern "C" {
#endif
#include <stdint.h>
@@ -36,8 +36,4 @@ extern "C"{
#include "app_conf.h"
-#define DIVC( x, y ) (((x)+(y)-1)/(y))
-
-#define DIVR( x, y ) (((x)+((y)/2))/(y))
-
-#endif \ No newline at end of file
+#endif
diff --git a/firmware/targets/f6/ble-glue/app_conf.h b/firmware/targets/f6/ble_glue/app_conf.h
index ec8fc604..96a0c25b 100644
--- a/firmware/targets/f6/ble-glue/app_conf.h
+++ b/firmware/targets/f6/ble_glue/app_conf.h
@@ -5,94 +5,102 @@
#include "hw_if.h"
#include "ble_bufsize.h"
-#define CFG_TX_POWER (0x19) /* +0dBm */
+#define CFG_TX_POWER (0x19) /* +0dBm */
/**
* Define Advertising parameters
*/
-#define CFG_ADV_BD_ADDRESS (0x7257acd87a6c)
-#define CFG_FAST_CONN_ADV_INTERVAL_MIN (0x80) /**< 80ms */
-#define CFG_FAST_CONN_ADV_INTERVAL_MAX (0xa0) /**< 100ms */
-#define CFG_LP_CONN_ADV_INTERVAL_MIN (0x640) /**< 1s */
-#define CFG_LP_CONN_ADV_INTERVAL_MAX (0xfa0) /**< 2.5s */
+#define CFG_ADV_BD_ADDRESS (0x7257acd87a6c)
+#define CFG_FAST_CONN_ADV_INTERVAL_MIN (0x80) /**< 80ms */
+#define CFG_FAST_CONN_ADV_INTERVAL_MAX (0xa0) /**< 100ms */
+#define CFG_LP_CONN_ADV_INTERVAL_MIN (0x640) /**< 1s */
+#define CFG_LP_CONN_ADV_INTERVAL_MAX (0xfa0) /**< 2.5s */
/**
* Define IO Authentication
*/
-#define CFG_BONDING_MODE (1)
-#define CFG_FIXED_PIN (111111)
-#define CFG_USED_FIXED_PIN (1)
-#define CFG_ENCRYPTION_KEY_SIZE_MAX (16)
-#define CFG_ENCRYPTION_KEY_SIZE_MIN (8)
+#define CFG_BONDING_MODE (1)
+#define CFG_FIXED_PIN (111111)
+#define CFG_USED_FIXED_PIN (1)
+#define CFG_ENCRYPTION_KEY_SIZE_MAX (16)
+#define CFG_ENCRYPTION_KEY_SIZE_MIN (8)
/**
* Define IO capabilities
*/
-#define CFG_IO_CAPABILITY_DISPLAY_ONLY (0x00)
-#define CFG_IO_CAPABILITY_DISPLAY_YES_NO (0x01)
-#define CFG_IO_CAPABILITY_KEYBOARD_ONLY (0x02)
+#define CFG_IO_CAPABILITY_DISPLAY_ONLY (0x00)
+#define CFG_IO_CAPABILITY_DISPLAY_YES_NO (0x01)
+#define CFG_IO_CAPABILITY_KEYBOARD_ONLY (0x02)
#define CFG_IO_CAPABILITY_NO_INPUT_NO_OUTPUT (0x03)
-#define CFG_IO_CAPABILITY_KEYBOARD_DISPLAY (0x04)
+#define CFG_IO_CAPABILITY_KEYBOARD_DISPLAY (0x04)
-#define CFG_IO_CAPABILITY CFG_IO_CAPABILITY_DISPLAY_YES_NO
+#define CFG_IO_CAPABILITY CFG_IO_CAPABILITY_DISPLAY_YES_NO
/**
* Define MITM modes
*/
-#define CFG_MITM_PROTECTION_NOT_REQUIRED (0x00)
-#define CFG_MITM_PROTECTION_REQUIRED (0x01)
+#define CFG_MITM_PROTECTION_NOT_REQUIRED (0x00)
+#define CFG_MITM_PROTECTION_REQUIRED (0x01)
-#define CFG_MITM_PROTECTION CFG_MITM_PROTECTION_REQUIRED
+#define CFG_MITM_PROTECTION CFG_MITM_PROTECTION_REQUIRED
/**
* Define Secure Connections Support
*/
-#define CFG_SECURE_NOT_SUPPORTED (0x00)
-#define CFG_SECURE_OPTIONAL (0x01)
-#define CFG_SECURE_MANDATORY (0x02)
+#define CFG_SECURE_NOT_SUPPORTED (0x00)
+#define CFG_SECURE_OPTIONAL (0x01)
+#define CFG_SECURE_MANDATORY (0x02)
-#define CFG_SC_SUPPORT CFG_SECURE_OPTIONAL
+#define CFG_SC_SUPPORT CFG_SECURE_OPTIONAL
/**
* Define Keypress Notification Support
*/
-#define CFG_KEYPRESS_NOT_SUPPORTED (0x00)
-#define CFG_KEYPRESS_SUPPORTED (0x01)
+#define CFG_KEYPRESS_NOT_SUPPORTED (0x00)
+#define CFG_KEYPRESS_SUPPORTED (0x01)
-#define CFG_KEYPRESS_NOTIFICATION_SUPPORT CFG_KEYPRESS_NOT_SUPPORTED
+#define CFG_KEYPRESS_NOTIFICATION_SUPPORT CFG_KEYPRESS_NOT_SUPPORTED
/**
* Numeric Comparison Answers
*/
#define YES (0x01)
-#define NO (0x00)
+#define NO (0x00)
/**
* Device name configuration for Generic Access Service
*/
-#define CFG_GAP_DEVICE_NAME "TEMPLATE"
-#define CFG_GAP_DEVICE_NAME_LENGTH (8)
+#define CFG_GAP_DEVICE_NAME "TEMPLATE"
+#define CFG_GAP_DEVICE_NAME_LENGTH (8)
/**
* Define PHY
*/
-#define ALL_PHYS_PREFERENCE 0x00
-#define RX_2M_PREFERRED 0x02
-#define TX_2M_PREFERRED 0x02
-#define TX_1M 0x01
-#define TX_2M 0x02
-#define RX_1M 0x01
-#define RX_2M 0x02
+#define ALL_PHYS_PREFERENCE 0x00
+#define RX_2M_PREFERRED 0x02
+#define TX_2M_PREFERRED 0x02
+#define TX_1M 0x01
+#define TX_2M 0x02
+#define RX_1M 0x01
+#define RX_2M 0x02
/**
* Identity root key used to derive LTK and CSRK
*/
-#define CFG_BLE_IRK {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0}
+#define CFG_BLE_IRK \
+ { \
+ 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, \
+ 0xf0 \
+ }
/**
* Encryption root key used to derive LTK and CSRK
*/
-#define CFG_BLE_ERK {0xfe,0xdc,0xba,0x09,0x87,0x65,0x43,0x21,0xfe,0xdc,0xba,0x09,0x87,0x65,0x43,0x21}
+#define CFG_BLE_ERK \
+ { \
+ 0xfe, 0xdc, 0xba, 0x09, 0x87, 0x65, 0x43, 0x21, 0xfe, 0xdc, 0xba, 0x09, 0x87, 0x65, 0x43, \
+ 0x21 \
+ }
/* USER CODE BEGIN Generic_Parameters */
/**
@@ -100,7 +108,7 @@
* SMPS not used when Set to 0
* SMPS used when Set to 1
*/
-#define CFG_USE_SMPS 1
+#define CFG_USE_SMPS 1
/* USER CODE END Generic_Parameters */
/**< specific parameters */
@@ -110,7 +118,7 @@
* AD Element - Group B Feature
*/
/* LSB - Second Byte */
-#define CFG_FEATURE_OTA_REBOOT (0x20)
+#define CFG_FEATURE_OTA_REBOOT (0x20)
/******************************************************************************
* BLE Stack
@@ -119,13 +127,13 @@
* Maximum number of simultaneous connections that the device will support.
* Valid values are from 1 to 8
*/
-#define CFG_BLE_NUM_LINK 2
+#define CFG_BLE_NUM_LINK 2
/**
* Maximum number of Services that can be stored in the GATT database.
* Note that the GAP and GATT services are automatically added so this parameter should be 2 plus the number of user services
*/
-#define CFG_BLE_NUM_GATT_SERVICES 8
+#define CFG_BLE_NUM_GATT_SERVICES 8
/**
* Maximum number of Attributes
@@ -139,7 +147,7 @@
/**
* Maximum supported ATT_MTU size
*/
-#define CFG_BLE_MAX_ATT_MTU (256+128+16+8+4+2)
+#define CFG_BLE_MAX_ATT_MTU (256 + 128 + 16 + 8 + 4 + 2)
/**
* Size of the storage area for Attribute values
@@ -151,27 +159,28 @@
* - 2, if extended properties is used
* The total amount of memory needed is the sum of the above quantities for each attribute.
*/
-#define CFG_BLE_ATT_VALUE_ARRAY_SIZE (1344)
+#define CFG_BLE_ATT_VALUE_ARRAY_SIZE (1344)
/**
* Prepare Write List size in terms of number of packet
*/
-#define CFG_BLE_PREPARE_WRITE_LIST_SIZE BLE_PREP_WRITE_X_ATT(CFG_BLE_MAX_ATT_MTU)
+#define CFG_BLE_PREPARE_WRITE_LIST_SIZE BLE_PREP_WRITE_X_ATT(CFG_BLE_MAX_ATT_MTU)
/**
* Number of allocated memory blocks
*/
-#define CFG_BLE_MBLOCK_COUNT (BLE_MBLOCKS_CALC(CFG_BLE_PREPARE_WRITE_LIST_SIZE, CFG_BLE_MAX_ATT_MTU, CFG_BLE_NUM_LINK))
+#define CFG_BLE_MBLOCK_COUNT \
+ (BLE_MBLOCKS_CALC(CFG_BLE_PREPARE_WRITE_LIST_SIZE, CFG_BLE_MAX_ATT_MTU, CFG_BLE_NUM_LINK))
/**
* Enable or disable the Extended Packet length feature. Valid values are 0 or 1.
*/
-#define CFG_BLE_DATA_LENGTH_EXTENSION 1
+#define CFG_BLE_DATA_LENGTH_EXTENSION 1
/**
* Sleep clock accuracy in Slave mode (ppm value)
*/
-#define CFG_BLE_SLAVE_SCA 500
+#define CFG_BLE_SLAVE_SCA 500
/**
* Sleep clock accuracy in Master mode
@@ -184,31 +193,31 @@
* 6 : 21 ppm to 30 ppm
* 7 : 0 ppm to 20 ppm
*/
-#define CFG_BLE_MASTER_SCA 0
+#define CFG_BLE_MASTER_SCA 0
/**
* Source for the low speed clock for RF wake-up
* 1 : external high speed crystal HSE/32/32
* 0 : external low speed crystal ( no calibration )
*/
-#define CFG_BLE_LSE_SOURCE 0
+#define CFG_BLE_LSE_SOURCE 0
/**
* Start up time of the high speed (16 or 32 MHz) crystal oscillator in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_HSE_STARTUP_TIME 0x148
+#define CFG_BLE_HSE_STARTUP_TIME 0x148
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH ( 0xFFFFFFFF )
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
* 1 : enabled
* 0 : disabled
*/
-#define CFG_BLE_VITERBI_MODE 1
+#define CFG_BLE_VITERBI_MODE 1
/**
* BLE stack Options flags to be configured with:
@@ -239,7 +248,10 @@
* 0: LE Power Class 2-3
* other bits: reserved (shall be set to 0)
*/
-#define CFG_BLE_OPTIONS (SHCI_C2_BLE_INIT_OPTIONS_LL_HOST | SHCI_C2_BLE_INIT_OPTIONS_WITH_SVC_CHANGE_DESC | SHCI_C2_BLE_INIT_OPTIONS_DEVICE_NAME_RW | SHCI_C2_BLE_INIT_OPTIONS_NO_EXT_ADV | SHCI_C2_BLE_INIT_OPTIONS_NO_CS_ALGO2 | SHCI_C2_BLE_INIT_OPTIONS_POWER_CLASS_2_3)
+#define CFG_BLE_OPTIONS \
+ (SHCI_C2_BLE_INIT_OPTIONS_LL_HOST | SHCI_C2_BLE_INIT_OPTIONS_WITH_SVC_CHANGE_DESC | \
+ SHCI_C2_BLE_INIT_OPTIONS_DEVICE_NAME_RW | SHCI_C2_BLE_INIT_OPTIONS_NO_EXT_ADV | \
+ SHCI_C2_BLE_INIT_OPTIONS_NO_CS_ALGO2 | SHCI_C2_BLE_INIT_OPTIONS_POWER_CLASS_2_3)
/**
* Queue length of BLE Event
@@ -263,9 +275,10 @@
* With the current wireless firmware implementation, this parameter shall be kept to 255
*
*/
-#define CFG_TLBLE_MOST_EVENT_PAYLOAD_SIZE 255 /**< Set to 255 with the memory manager and the mailbox */
+#define CFG_TLBLE_MOST_EVENT_PAYLOAD_SIZE \
+ 255 /**< Set to 255 with the memory manager and the mailbox */
-#define TL_BLE_EVENT_FRAME_SIZE ( TL_EVT_HDR_SIZE + CFG_TLBLE_MOST_EVENT_PAYLOAD_SIZE )
+#define TL_BLE_EVENT_FRAME_SIZE (TL_EVT_HDR_SIZE + CFG_TLBLE_MOST_EVENT_PAYLOAD_SIZE)
/******************************************************************************
* UART interfaces
******************************************************************************/
@@ -273,8 +286,8 @@
/**
* Select UART interfaces
*/
-#define CFG_DEBUG_TRACE_UART hw_uart1
-#define CFG_CONSOLE_MENU 0
+#define CFG_DEBUG_TRACE_UART hw_uart1
+#define CFG_CONSOLE_MENU 0
/******************************************************************************
* Low Power
@@ -283,7 +296,7 @@
* When set to 1, the low power mode is enable
* When set to 0, the device stays in RUN mode
*/
-#define CFG_LPM_SUPPORTED 1
+#define CFG_LPM_SUPPORTED 1
/******************************************************************************
* Timer Server
@@ -310,62 +323,61 @@
*/
#define CFG_RTCCLK_DIVIDER_CONF 0
-#if (CFG_RTCCLK_DIVIDER_CONF == 0)
+#if(CFG_RTCCLK_DIVIDER_CONF == 0)
/**
* Custom configuration
* It does not support 1Hz calendar
* It divides the RTC CLK by 16
*/
-#define CFG_RTCCLK_DIV (16)
+#define CFG_RTCCLK_DIV (16)
#define CFG_RTC_WUCKSEL_DIVIDER (0)
#define CFG_RTC_ASYNCH_PRESCALER (CFG_RTCCLK_DIV - 1)
#define CFG_RTC_SYNCH_PRESCALER (0x7FFF)
#else
-#if (CFG_RTCCLK_DIVIDER_CONF == 2)
+#if(CFG_RTCCLK_DIVIDER_CONF == 2)
/**
* It divides the RTC CLK by 2
*/
#define CFG_RTC_WUCKSEL_DIVIDER (3)
#endif
-#if (CFG_RTCCLK_DIVIDER_CONF == 4)
+#if(CFG_RTCCLK_DIVIDER_CONF == 4)
/**
* It divides the RTC CLK by 4
*/
#define CFG_RTC_WUCKSEL_DIVIDER (2)
#endif
-#if (CFG_RTCCLK_DIVIDER_CONF == 8)
+#if(CFG_RTCCLK_DIVIDER_CONF == 8)
/**
* It divides the RTC CLK by 8
*/
#define CFG_RTC_WUCKSEL_DIVIDER (1)
#endif
-#if (CFG_RTCCLK_DIVIDER_CONF == 16)
+#if(CFG_RTCCLK_DIVIDER_CONF == 16)
/**
* It divides the RTC CLK by 16
*/
#define CFG_RTC_WUCKSEL_DIVIDER (0)
#endif
-#define CFG_RTCCLK_DIV CFG_RTCCLK_DIVIDER_CONF
-#define CFG_RTC_ASYNCH_PRESCALER (CFG_RTCCLK_DIV - 1)
-#define CFG_RTC_SYNCH_PRESCALER (DIVR( LSE_VALUE, (CFG_RTC_ASYNCH_PRESCALER+1) ) - 1 )
+#define CFG_RTCCLK_DIV CFG_RTCCLK_DIVIDER_CONF
+#define CFG_RTC_ASYNCH_PRESCALER (CFG_RTCCLK_DIV - 1)
+#define CFG_RTC_SYNCH_PRESCALER (DIVR(LSE_VALUE, (CFG_RTC_ASYNCH_PRESCALER + 1)) - 1)
#endif
/** tick timer value in us */
-#define CFG_TS_TICK_VAL DIVR( (CFG_RTCCLK_DIV * 1000000), LSE_VALUE )
+#define CFG_TS_TICK_VAL DIVR((CFG_RTCCLK_DIV * 1000000), LSE_VALUE)
-typedef enum
-{
- CFG_TIM_PROC_ID_ISR,
- /* USER CODE BEGIN CFG_TimProcID_t */
+typedef enum {
+ CFG_TIM_PROC_ID_ISR,
+ /* USER CODE BEGIN CFG_TimProcID_t */
- /* USER CODE END CFG_TimProcID_t */
+ /* USER CODE END CFG_TimProcID_t */
} CFG_TimProcID_t;
/******************************************************************************
@@ -378,39 +390,39 @@ typedef enum
* This shall be set to 0 in a final product
*
*/
-#define CFG_HW_RESET_BY_FW 0
+#define CFG_HW_RESET_BY_FW 0
/**
* keep debugger enabled while in any low power mode when set to 1
* should be set to 0 in production
*/
-#define CFG_DEBUGGER_SUPPORTED 0
+#define CFG_DEBUGGER_SUPPORTED 0
/**
* When set to 1, the traces are enabled in the BLE services
*/
-#define CFG_DEBUG_BLE_TRACE 0
+#define CFG_DEBUG_BLE_TRACE 0
/**
* Enable or Disable traces in application
*/
-#define CFG_DEBUG_APP_TRACE 0
+#define CFG_DEBUG_APP_TRACE 0
-#if (CFG_DEBUG_APP_TRACE != 0)
-#define APP_DBG_MSG PRINT_MESG_DBG
+#if(CFG_DEBUG_APP_TRACE != 0)
+#define APP_DBG_MSG PRINT_MESG_DBG
#else
-#define APP_DBG_MSG PRINT_NO_MESG
+#define APP_DBG_MSG PRINT_NO_MESG
#endif
-#if ( (CFG_DEBUG_BLE_TRACE != 0) || (CFG_DEBUG_APP_TRACE != 0) )
-#define CFG_DEBUG_TRACE 1
+#if((CFG_DEBUG_BLE_TRACE != 0) || (CFG_DEBUG_APP_TRACE != 0))
+#define CFG_DEBUG_TRACE 1
#endif
-#if (CFG_DEBUG_TRACE != 0)
+#if(CFG_DEBUG_TRACE != 0)
#undef CFG_LPM_SUPPORTED
#undef CFG_DEBUGGER_SUPPORTED
-#define CFG_LPM_SUPPORTED 0
-#define CFG_DEBUGGER_SUPPORTED 1
+#define CFG_LPM_SUPPORTED 0
+#define CFG_DEBUGGER_SUPPORTED 1
#endif
/**
@@ -420,21 +432,21 @@ typedef enum
* When both are set to 0, no trace are output
* When both are set to 1, CFG_DEBUG_TRACE_FULL is selected
*/
-#define CFG_DEBUG_TRACE_LIGHT 0
-#define CFG_DEBUG_TRACE_FULL 0
+#define CFG_DEBUG_TRACE_LIGHT 0
+#define CFG_DEBUG_TRACE_FULL 0
-#if (( CFG_DEBUG_TRACE != 0 ) && ( CFG_DEBUG_TRACE_LIGHT == 0 ) && (CFG_DEBUG_TRACE_FULL == 0))
+#if((CFG_DEBUG_TRACE != 0) && (CFG_DEBUG_TRACE_LIGHT == 0) && (CFG_DEBUG_TRACE_FULL == 0))
#undef CFG_DEBUG_TRACE_FULL
#undef CFG_DEBUG_TRACE_LIGHT
-#define CFG_DEBUG_TRACE_FULL 0
-#define CFG_DEBUG_TRACE_LIGHT 1
+#define CFG_DEBUG_TRACE_FULL 0
+#define CFG_DEBUG_TRACE_LIGHT 1
#endif
-#if ( CFG_DEBUG_TRACE == 0 )
+#if(CFG_DEBUG_TRACE == 0)
#undef CFG_DEBUG_TRACE_FULL
#undef CFG_DEBUG_TRACE_LIGHT
-#define CFG_DEBUG_TRACE_FULL 0
-#define CFG_DEBUG_TRACE_LIGHT 0
+#define CFG_DEBUG_TRACE_FULL 0
+#define CFG_DEBUG_TRACE_LIGHT 0
#endif
/**
@@ -449,5 +461,5 @@ typedef enum
#define DBG_TRACE_MSG_QUEUE_SIZE 4096
#define MAX_DBG_TRACE_MSG_SIZE 1024
-#define CFG_OTP_BASE_ADDRESS OTP_AREA_BASE
-#define CFG_OTP_END_ADRESS OTP_AREA_END_ADDR
+#define CFG_OTP_BASE_ADDRESS OTP_AREA_BASE
+#define CFG_OTP_END_ADRESS OTP_AREA_END_ADDR
diff --git a/firmware/targets/f6/ble_glue/app_debug.c b/firmware/targets/f6/ble_glue/app_debug.c
new file mode 100644
index 00000000..07824920
--- /dev/null
+++ b/firmware/targets/f6/ble_glue/app_debug.c
@@ -0,0 +1,357 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : app_debug.c
+ * Description : Debug capabilities source file for STM32WPAN Middleware
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Includes ------------------------------------------------------------------*/
+/* USER CODE BEGIN Includes */
+#include "utilities_common.h"
+
+#include "app_common.h"
+#include "app_debug.h"
+#include "shci.h"
+#include "tl.h"
+#include "dbg_trace.h"
+#include <furi_hal.h>
+/* USER CODE END Includes */
+
+/* Private typedef -----------------------------------------------------------*/
+/* USER CODE BEGIN PTD */
+typedef PACKED_STRUCT {
+ GPIO_TypeDef* port;
+ uint16_t pin;
+ uint8_t enable;
+ uint8_t reserved;
+}
+APPD_GpioConfig_t;
+/* USER CODE END PTD */
+
+/* Private defines -----------------------------------------------------------*/
+/* USER CODE BEGIN PD */
+#define GPIO_NBR_OF_RF_SIGNALS 9
+#define GPIO_CFG_NBR_OF_FEATURES 34
+#define NBR_OF_TRACES_CONFIG_PARAMETERS 4
+#define NBR_OF_GENERAL_CONFIG_PARAMETERS 4
+
+/**
+ * THIS SHALL BE SET TO A VALUE DIFFERENT FROM 0 ONLY ON REQUEST FROM ST SUPPORT
+ */
+#define BLE_DTB_CFG 7
+#define SYS_DBG_CFG1 (SHCI_C2_DEBUG_OPTIONS_IPCORE_LP | SHCI_C2_DEBUG_OPTIONS_CPU2_STOP_EN)
+/* USER CODE END PD */
+
+/* Private variables ---------------------------------------------------------*/
+/* USER CODE BEGIN PV */
+PLACE_IN_SECTION("MB_MEM2")
+ALIGN(4) static SHCI_C2_DEBUG_TracesConfig_t APPD_TracesConfig = {0, 0, 0, 0};
+PLACE_IN_SECTION("MB_MEM2")
+ALIGN(4)
+static SHCI_C2_DEBUG_GeneralConfig_t APPD_GeneralConfig = {BLE_DTB_CFG, SYS_DBG_CFG1, {0, 0}};
+
+/**
+ * THE DEBUG ON GPIO FOR CPU2 IS INTENDED TO BE USED ONLY ON REQUEST FROM ST SUPPORT
+ * It provides timing information on the CPU2 activity.
+ * All configuration of (port, pin) is supported for each features and can be selected by the user
+ * depending on the availability
+ */
+static const APPD_GpioConfig_t aGpioConfigList[GPIO_CFG_NBR_OF_FEATURES] = {
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* BLE_ISR - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_7, 1, 0}, /* BLE_STACK_TICK - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* BLE_CMD_PROCESS - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* BLE_ACL_DATA_PROCESS - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* SYS_CMD_PROCESS - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* RNG_PROCESS - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* NVM_PROCESS - Set on Entry / Reset on Exit */
+ {GPIOB, LL_GPIO_PIN_3, 1, 0}, /* IPCC_GENERAL - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_BLE_CMD_RX - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_BLE_EVT_TX - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_BLE_ACL_DATA_RX - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_SYS_CMD_RX - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_SYS_EVT_TX - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_CLI_CMD_RX - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_OT_CMD_RX - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_OT_ACK_TX - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_CLI_ACK_TX - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_MEM_MANAGER_RX - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_TRACES_TX - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_6, 1, 0}, /* HARD_FAULT - Set on Entry / Reset on Exit */
+ /* From v1.1.1 */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IP_CORE_LP_STATUS - Set on Entry / Reset on Exit */
+ /* From v1.2.0 */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* END_OF_CONNECTION_EVENT - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* TIMER_SERVER_CALLBACK - Toggle on Entry */
+ {GPIOA, LL_GPIO_PIN_4, 1, 0}, /* PES_ACTIVITY - Set on Entry / Reset on Exit */
+ {GPIOB, LL_GPIO_PIN_2, 1, 0}, /* MB_BLE_SEND_EVT - Set on Entry / Reset on Exit */
+ /* From v1.3.0 */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* BLE_NO_DELAY - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* BLE_STACK_STORE_NVM_CB - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* NVMA_WRITE_ONGOING - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* NVMA_WRITE_COMPLETE - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* NVMA_CLEANUP - Set on Entry / Reset on Exit */
+ /* From v1.4.0 */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* NVMA_START - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* FLASH_EOP - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* FLASH_WRITE - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* FLASH_ERASE - Set on Entry / Reset on Exit */
+};
+
+/**
+ * THE DEBUG ON GPIO FOR CPU2 IS INTENDED TO BE USED ONLY ON REQUEST FROM ST SUPPORT
+ * This table is relevant only for BLE
+ * It provides timing information on BLE RF activity.
+ * New signals may be allocated at any location when requested by ST
+ * The GPIO allocated to each signal depend on the BLE_DTB_CFG value and cannot be changed
+ */
+#if(BLE_DTB_CFG == 7)
+static const APPD_GpioConfig_t aRfConfigList[GPIO_NBR_OF_RF_SIGNALS] = {
+ {GPIOB, LL_GPIO_PIN_2, 0, 0}, /* DTB10 - Tx/Rx SPI */
+ {GPIOB, LL_GPIO_PIN_7, 0, 0}, /* DTB11 - Tx/Tx SPI Clk */
+ {GPIOA, LL_GPIO_PIN_8, 0, 0}, /* DTB12 - Tx/Rx Ready & SPI Select */
+ {GPIOA, LL_GPIO_PIN_9, 0, 0}, /* DTB13 - Tx/Rx Start */
+ {GPIOA, LL_GPIO_PIN_10, 0, 0}, /* DTB14 - FSM0 */
+ {GPIOA, LL_GPIO_PIN_11, 0, 0}, /* DTB15 - FSM1 */
+ {GPIOB, LL_GPIO_PIN_8, 0, 0}, /* DTB16 - FSM2 */
+ {GPIOB, LL_GPIO_PIN_11, 0, 0}, /* DTB17 - FSM3 */
+ {GPIOB, LL_GPIO_PIN_10, 0, 0}, /* DTB18 - FSM4 */
+};
+#endif
+/* USER CODE END PV */
+
+/* Global variables ----------------------------------------------------------*/
+/* USER CODE BEGIN GV */
+/* USER CODE END GV */
+
+/* Private function prototypes -----------------------------------------------*/
+/* USER CODE BEGIN PFP */
+static void APPD_SetCPU2GpioConfig(void);
+static void APPD_BleDtbCfg(void);
+/* USER CODE END PFP */
+
+/* Functions Definition ------------------------------------------------------*/
+void APPD_Init(void) {
+/* USER CODE BEGIN APPD_Init */
+#if(CFG_DEBUGGER_SUPPORTED == 1)
+ /**
+ * Keep debugger enabled while in any low power mode
+ */
+ HAL_DBGMCU_EnableDBGSleepMode();
+ HAL_DBGMCU_EnableDBGStopMode();
+
+ /***************** ENABLE DEBUGGER *************************************/
+ LL_EXTI_EnableIT_32_63(LL_EXTI_LINE_48);
+
+#else
+ GPIO_InitTypeDef gpio_config = {0};
+
+ gpio_config.Pull = GPIO_NOPULL;
+ gpio_config.Mode = GPIO_MODE_ANALOG;
+
+ gpio_config.Pin = GPIO_PIN_15 | GPIO_PIN_14 | GPIO_PIN_13;
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ HAL_GPIO_Init(GPIOA, &gpio_config);
+ __HAL_RCC_GPIOA_CLK_DISABLE();
+
+ gpio_config.Pin = GPIO_PIN_4 | GPIO_PIN_3;
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ HAL_GPIO_Init(GPIOB, &gpio_config);
+ __HAL_RCC_GPIOB_CLK_DISABLE();
+
+ HAL_DBGMCU_DisableDBGSleepMode();
+ HAL_DBGMCU_DisableDBGStopMode();
+ HAL_DBGMCU_DisableDBGStandbyMode();
+
+#endif /* (CFG_DEBUGGER_SUPPORTED == 1) */
+
+#if(CFG_DEBUG_TRACE != 0)
+ DbgTraceInit();
+#endif
+
+ APPD_SetCPU2GpioConfig();
+ APPD_BleDtbCfg();
+
+ /* USER CODE END APPD_Init */
+ return;
+}
+
+void APPD_EnableCPU2(void) {
+ /* USER CODE BEGIN APPD_EnableCPU2 */
+ SHCI_C2_DEBUG_Init_Cmd_Packet_t DebugCmdPacket = {
+ {{0, 0, 0}}, /**< Does not need to be initialized */
+ {(uint8_t*)aGpioConfigList,
+ (uint8_t*)&APPD_TracesConfig,
+ (uint8_t*)&APPD_GeneralConfig,
+ GPIO_CFG_NBR_OF_FEATURES,
+ NBR_OF_TRACES_CONFIG_PARAMETERS,
+ NBR_OF_GENERAL_CONFIG_PARAMETERS}};
+
+ /**< Traces channel initialization */
+ TL_TRACES_Init();
+
+ /** GPIO DEBUG Initialization */
+ SHCI_C2_DEBUG_Init(&DebugCmdPacket);
+
+ // GPIO_InitTypeDef GPIO_InitStruct;
+ // GPIO_InitStruct.Pull = GPIO_NOPULL;
+ // GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ // GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ // GPIO_InitStruct.Pin = LL_GPIO_PIN_3;
+ // HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+ // SHCI_C2_ExtpaConfig((uint32_t)GPIOC, LL_GPIO_PIN_3, EXT_PA_ENABLED_LOW, EXT_PA_ENABLED);
+
+ /* USER CODE END APPD_EnableCPU2 */
+ return;
+}
+
+/*************************************************************
+ *
+ * LOCAL FUNCTIONS
+ *
+ *************************************************************/
+static void APPD_SetCPU2GpioConfig(void) {
+ /* USER CODE BEGIN APPD_SetCPU2GpioConfig */
+ GPIO_InitTypeDef gpio_config = {0};
+ uint8_t local_loop;
+ uint16_t gpioa_pin_list;
+ uint16_t gpiob_pin_list;
+ uint16_t gpioc_pin_list;
+
+ gpioa_pin_list = 0;
+ gpiob_pin_list = 0;
+ gpioc_pin_list = 0;
+
+ for(local_loop = 0; local_loop < GPIO_CFG_NBR_OF_FEATURES; local_loop++) {
+ if(aGpioConfigList[local_loop].enable != 0) {
+ switch((uint32_t)aGpioConfigList[local_loop].port) {
+ case(uint32_t)GPIOA:
+ gpioa_pin_list |= aGpioConfigList[local_loop].pin;
+ break;
+
+ case(uint32_t)GPIOB:
+ gpiob_pin_list |= aGpioConfigList[local_loop].pin;
+ break;
+
+ case(uint32_t)GPIOC:
+ gpioc_pin_list |= aGpioConfigList[local_loop].pin;
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+
+ gpio_config.Pull = GPIO_NOPULL;
+ gpio_config.Mode = GPIO_MODE_OUTPUT_PP;
+ gpio_config.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+
+ if(gpioa_pin_list != 0) {
+ gpio_config.Pin = gpioa_pin_list;
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ __HAL_RCC_C2GPIOA_CLK_ENABLE();
+ HAL_GPIO_Init(GPIOA, &gpio_config);
+ HAL_GPIO_WritePin(GPIOA, gpioa_pin_list, GPIO_PIN_RESET);
+ }
+
+ if(gpiob_pin_list != 0) {
+ gpio_config.Pin = gpiob_pin_list;
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ __HAL_RCC_C2GPIOB_CLK_ENABLE();
+ HAL_GPIO_Init(GPIOB, &gpio_config);
+ HAL_GPIO_WritePin(GPIOB, gpiob_pin_list, GPIO_PIN_RESET);
+ }
+
+ if(gpioc_pin_list != 0) {
+ gpio_config.Pin = gpioc_pin_list;
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ __HAL_RCC_C2GPIOC_CLK_ENABLE();
+ HAL_GPIO_Init(GPIOC, &gpio_config);
+ HAL_GPIO_WritePin(GPIOC, gpioc_pin_list, GPIO_PIN_RESET);
+ }
+
+ /* USER CODE END APPD_SetCPU2GpioConfig */
+ return;
+}
+
+static void APPD_BleDtbCfg(void) {
+/* USER CODE BEGIN APPD_BleDtbCfg */
+#if(BLE_DTB_CFG != 0)
+ GPIO_InitTypeDef gpio_config = {0};
+ uint8_t local_loop;
+ uint16_t gpioa_pin_list;
+ uint16_t gpiob_pin_list;
+
+ gpioa_pin_list = 0;
+ gpiob_pin_list = 0;
+
+ for(local_loop = 0; local_loop < GPIO_NBR_OF_RF_SIGNALS; local_loop++) {
+ if(aRfConfigList[local_loop].enable != 0) {
+ switch((uint32_t)aRfConfigList[local_loop].port) {
+ case(uint32_t)GPIOA:
+ gpioa_pin_list |= aRfConfigList[local_loop].pin;
+ break;
+
+ case(uint32_t)GPIOB:
+ gpiob_pin_list |= aRfConfigList[local_loop].pin;
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+
+ gpio_config.Pull = GPIO_NOPULL;
+ gpio_config.Mode = GPIO_MODE_AF_PP;
+ gpio_config.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ gpio_config.Alternate = GPIO_AF6_RF_DTB7;
+
+ if(gpioa_pin_list != 0) {
+ gpio_config.Pin = gpioa_pin_list;
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ __HAL_RCC_C2GPIOA_CLK_ENABLE();
+ HAL_GPIO_Init(GPIOA, &gpio_config);
+ }
+
+ if(gpiob_pin_list != 0) {
+ gpio_config.Pin = gpiob_pin_list;
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ __HAL_RCC_C2GPIOB_CLK_ENABLE();
+ HAL_GPIO_Init(GPIOB, &gpio_config);
+ }
+#endif
+
+ /* USER CODE END APPD_BleDtbCfg */
+ return;
+}
+
+/*************************************************************
+ *
+ * WRAP FUNCTIONS
+ *
+*************************************************************/
+#if(CFG_DEBUG_TRACE != 0)
+void DbgOutputInit(void) {
+}
+
+void DbgOutputTraces(uint8_t* p_data, uint16_t size, void (*cb)(void)) {
+ furi_hal_console_tx(p_data, size);
+ cb();
+}
+#endif
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ \ No newline at end of file
diff --git a/firmware/targets/f7/ble-glue/app_debug.h b/firmware/targets/f6/ble_glue/app_debug.h
index 2cb31e53..e1bd65fc 100644
--- a/firmware/targets/f7/ble-glue/app_debug.h
+++ b/firmware/targets/f6/ble_glue/app_debug.h
@@ -26,8 +26,8 @@
extern "C" {
#endif
- void APPD_Init( void );
- void APPD_EnableCPU2( void );
+void APPD_Init(void);
+void APPD_EnableCPU2(void);
#ifdef __cplusplus
}
diff --git a/firmware/targets/f6/ble-glue/battery_service.c b/firmware/targets/f6/ble_glue/battery_service.c
index 08dec734..fcf640c8 100644
--- a/firmware/targets/f6/ble-glue/battery_service.c
+++ b/firmware/targets/f6/ble_glue/battery_service.c
@@ -21,21 +21,23 @@ void battery_svc_start() {
tBleStatus status;
// Add Battery service
- status = aci_gatt_add_service(UUID_TYPE_16, (Service_UUID_t*)&service_uuid, PRIMARY_SERVICE, 4, &battery_svc->svc_handle);
+ status = aci_gatt_add_service(
+ UUID_TYPE_16, (Service_UUID_t*)&service_uuid, PRIMARY_SERVICE, 4, &battery_svc->svc_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add Battery service: %d", status);
}
// Add Battery level characteristic
- status = aci_gatt_add_char(battery_svc->svc_handle,
- UUID_TYPE_16,
- (Char_UUID_t *) &char_battery_level_uuid,
- 1,
- CHAR_PROP_READ | CHAR_PROP_NOTIFY,
- ATTR_PERMISSION_AUTHEN_READ,
- GATT_DONT_NOTIFY_EVENTS,
- 10,
- CHAR_VALUE_LEN_CONSTANT,
- &battery_svc->char_level_handle);
+ status = aci_gatt_add_char(
+ battery_svc->svc_handle,
+ UUID_TYPE_16,
+ (Char_UUID_t*)&char_battery_level_uuid,
+ 1,
+ CHAR_PROP_READ | CHAR_PROP_NOTIFY,
+ ATTR_PERMISSION_AUTHEN_READ,
+ GATT_DONT_NOTIFY_EVENTS,
+ 10,
+ CHAR_VALUE_LEN_CONSTANT,
+ &battery_svc->char_level_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add Battery level characteristic: %d", status);
}
@@ -70,11 +72,8 @@ bool battery_svc_update_level(uint8_t battery_charge) {
}
// Update battery level characteristic
FURI_LOG_I(TAG, "Updating battery level characteristic");
- tBleStatus result = aci_gatt_update_char_value(battery_svc->svc_handle,
- battery_svc->char_level_handle,
- 0,
- 1,
- &battery_charge);
+ tBleStatus result = aci_gatt_update_char_value(
+ battery_svc->svc_handle, battery_svc->char_level_handle, 0, 1, &battery_charge);
if(result) {
FURI_LOG_E(TAG, "Failed updating RX characteristic: %d", result);
}
diff --git a/firmware/targets/f6/ble-glue/battery_service.h b/firmware/targets/f6/ble_glue/battery_service.h
index 2d35e252..2d35e252 100644
--- a/firmware/targets/f6/ble-glue/battery_service.h
+++ b/firmware/targets/f6/ble_glue/battery_service.h
diff --git a/firmware/targets/f6/ble-glue/ble_app.c b/firmware/targets/f6/ble_glue/ble_app.c
index ebb94892..c3359e58 100644
--- a/firmware/targets/f6/ble-glue/ble_app.c
+++ b/firmware/targets/f6/ble_glue/ble_app.c
@@ -5,7 +5,7 @@
#include "shci.h"
#include "gap.h"
-#include <furi-hal.h>
+#include <furi_hal.h>
#define TAG "Bt"
@@ -16,7 +16,9 @@
PLACE_IN_SECTION("MB_MEM1") ALIGN(4) static TL_CmdPacket_t ble_app_cmd_buffer;
PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static uint32_t ble_app_nvm[BLE_NVM_SRAM_SIZE];
-_Static_assert(sizeof(SHCI_C2_Ble_Init_Cmd_Packet_t) == 49, "Ble stack config structure size mismatch");
+_Static_assert(
+ sizeof(SHCI_C2_Ble_Init_Cmd_Packet_t) == 49,
+ "Ble stack config structure size mismatch");
typedef struct {
osMutexId_t hci_mtx;
@@ -56,7 +58,7 @@ bool ble_app_init() {
// Configure NVM store for pairing data
SHCI_C2_CONFIG_Cmd_Param_t config_param = {
.PayloadCmdSize = SHCI_C2_CONFIG_PAYLOAD_CMD_SIZE,
- .Config1 =SHCI_C2_CONFIG_CONFIG1_BIT0_BLE_NVM_DATA_TO_SRAM,
+ .Config1 = SHCI_C2_CONFIG_CONFIG1_BIT0_BLE_NVM_DATA_TO_SRAM,
.BleNvmRamAddress = (uint32_t)ble_app_nvm,
.EvtMask1 = SHCI_C2_CONFIG_EVTMASK1_BIT1_BLE_NVM_RAM_UPDATE_ENABLE,
};
@@ -67,7 +69,7 @@ bool ble_app_init() {
// Start ble stack on 2nd core
SHCI_C2_Ble_Init_Cmd_Packet_t ble_init_cmd_packet = {
- .Header = {{0,0,0}}, // Header unused
+ .Header = {{0, 0, 0}}, // Header unused
.Param = {
.pBleBufferAddress = 0, // pBleBufferAddress not used
.BleBufferSize = 0, // BleBufferSize not used
@@ -91,8 +93,7 @@ bool ble_app_init() {
.min_tx_power = 0,
.max_tx_power = 0,
.rx_model_config = 1,
- }
- };
+ }};
status = SHCI_C2_BLE_Init(&ble_init_cmd_packet);
if(status) {
FURI_LOG_E(TAG, "Failed to start ble stack: %d", status);
@@ -122,10 +123,11 @@ void ble_app_thread_stop() {
}
}
-static int32_t ble_app_hci_thread(void *arg) {
+static int32_t ble_app_hci_thread(void* arg) {
uint32_t flags = 0;
while(1) {
- flags = osEventFlagsWait(ble_app->event_flags, BLE_APP_FLAG_ALL, osFlagsWaitAny, osWaitForever);
+ flags = osEventFlagsWait(
+ ble_app->event_flags, BLE_APP_FLAG_ALL, osFlagsWaitAny, osWaitForever);
if(flags & BLE_APP_FLAG_KILL_THREAD) {
break;
}
@@ -146,7 +148,7 @@ void hci_notify_asynch_evt(void* pdata) {
void hci_cmd_resp_release(uint32_t flag) {
if(ble_app) {
- osSemaphoreRelease(ble_app->hci_sem);
+ osSemaphoreRelease(ble_app->hci_sem);
}
}
@@ -156,13 +158,13 @@ void hci_cmd_resp_wait(uint32_t timeout) {
}
}
-static void ble_app_hci_event_handler( void * pPayload ) {
+static void ble_app_hci_event_handler(void* pPayload) {
SVCCTL_UserEvtFlowStatus_t svctl_return_status;
- tHCI_UserEvtRxParam *pParam = (tHCI_UserEvtRxParam *)pPayload;
+ tHCI_UserEvtRxParam* pParam = (tHCI_UserEvtRxParam*)pPayload;
if(ble_app) {
- svctl_return_status = SVCCTL_UserEvtRx((void *)&(pParam->pckt->evtserial));
- if (svctl_return_status != SVCCTL_UserEvtFlowDisable) {
+ svctl_return_status = SVCCTL_UserEvtRx((void*)&(pParam->pckt->evtserial));
+ if(svctl_return_status != SVCCTL_UserEvtFlowDisable) {
pParam->status = HCI_TL_UserEventFlow_Enable;
} else {
pParam->status = HCI_TL_UserEventFlow_Disable;
@@ -170,14 +172,14 @@ static void ble_app_hci_event_handler( void * pPayload ) {
}
}
-static void ble_app_hci_status_not_handler( HCI_TL_CmdStatus_t status ) {
+static void ble_app_hci_status_not_handler(HCI_TL_CmdStatus_t status) {
if(status == HCI_TL_CmdBusy) {
- osMutexAcquire(ble_app->hci_mtx, osWaitForever );
+ osMutexAcquire(ble_app->hci_mtx, osWaitForever);
} else if(status == HCI_TL_CmdAvailable) {
osMutexRelease(ble_app->hci_mtx);
}
}
-void SVCCTL_ResumeUserEventFlow( void ) {
+void SVCCTL_ResumeUserEventFlow(void) {
hci_resume_flow();
}
diff --git a/firmware/targets/f6/ble-glue/ble_app.h b/firmware/targets/f6/ble_glue/ble_app.h
index 062154e9..495005ec 100644
--- a/firmware/targets/f6/ble-glue/ble_app.h
+++ b/firmware/targets/f6/ble_glue/ble_app.h
@@ -1,4 +1,4 @@
-#pragma once
+#pragma once
#ifdef __cplusplus
extern "C" {
diff --git a/firmware/targets/f7/ble-glue/ble_conf.h b/firmware/targets/f6/ble_glue/ble_conf.h
index 0acd8860..97650670 100644
--- a/firmware/targets/f7/ble-glue/ble_conf.h
+++ b/firmware/targets/f6/ble_glue/ble_conf.h
@@ -30,17 +30,17 @@
*
******************************************************************************/
- /**
+/**
* This setting shall be set to '1' if the device needs to support the Peripheral Role
* In the MS configuration, both BLE_CFG_PERIPHERAL and BLE_CFG_CENTRAL shall be set to '1'
*/
-#define BLE_CFG_PERIPHERAL 1
+#define BLE_CFG_PERIPHERAL 1
/**
* This setting shall be set to '1' if the device needs to support the Central Role
* In the MS configuration, both BLE_CFG_PERIPHERAL and BLE_CFG_CENTRAL shall be set to '1'
*/
-#define BLE_CFG_CENTRAL 0
+#define BLE_CFG_CENTRAL 0
/**
* There is one handler per service enabled
@@ -49,21 +49,21 @@
* This shall take into account all registered handlers
* (from either the provided services or the custom services)
*/
-#define BLE_CFG_SVC_MAX_NBR_CB 7
+#define BLE_CFG_SVC_MAX_NBR_CB 7
-#define BLE_CFG_CLT_MAX_NBR_CB 0
+#define BLE_CFG_CLT_MAX_NBR_CB 0
/******************************************************************************
* GAP Service - Apprearance
******************************************************************************/
-#define BLE_CFG_UNKNOWN_APPEARANCE (0)
-#define BLE_CFG_GAP_APPEARANCE (0x0086)
+#define BLE_CFG_UNKNOWN_APPEARANCE (0)
+#define BLE_CFG_GAP_APPEARANCE (0x0086)
/******************************************************************************
* Over The Air Feature (OTA) - STM Proprietary
******************************************************************************/
-#define BLE_CFG_OTA_REBOOT_CHAR 0/**< REBOOT OTA MODE CHARACTERISTIC */
+#define BLE_CFG_OTA_REBOOT_CHAR 0 /**< REBOOT OTA MODE CHARACTERISTIC */
#endif /*BLE_CONF_H */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/firmware/targets/f6/ble_glue/ble_dbg_conf.h b/firmware/targets/f6/ble_glue/ble_dbg_conf.h
new file mode 100644
index 00000000..8305f810
--- /dev/null
+++ b/firmware/targets/f6/ble_glue/ble_dbg_conf.h
@@ -0,0 +1,199 @@
+/**
+ ******************************************************************************
+ * File Name : App/ble_dbg_conf.h
+ * Description : Debug configuration file for BLE Middleware.
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __BLE_DBG_CONF_H
+#define __BLE_DBG_CONF_H
+
+/**
+ * Enable or Disable traces from BLE
+ */
+
+#define BLE_DBG_APP_EN 1
+#define BLE_DBG_DIS_EN 1
+#define BLE_DBG_HRS_EN 1
+#define BLE_DBG_SVCCTL_EN 1
+#define BLE_DBG_BLS_EN 1
+#define BLE_DBG_HTS_EN 1
+#define BLE_DBG_P2P_STM_EN 1
+
+/**
+ * Macro definition
+ */
+#if(BLE_DBG_APP_EN != 0)
+#define BLE_DBG_APP_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_APP_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_DIS_EN != 0)
+#define BLE_DBG_DIS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_DIS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_HRS_EN != 0)
+#define BLE_DBG_HRS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_HRS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_P2P_STM_EN != 0)
+#define BLE_DBG_P2P_STM_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_P2P_STM_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_TEMPLATE_STM_EN != 0)
+#define BLE_DBG_TEMPLATE_STM_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_TEMPLATE_STM_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_EDS_STM_EN != 0)
+#define BLE_DBG_EDS_STM_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_EDS_STM_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_LBS_STM_EN != 0)
+#define BLE_DBG_LBS_STM_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_LBS_STM_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_SVCCTL_EN != 0)
+#define BLE_DBG_SVCCTL_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_SVCCTL_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_CTS_EN != 0)
+#define BLE_DBG_CTS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_CTS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_HIDS_EN != 0)
+#define BLE_DBG_HIDS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_HIDS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_PASS_EN != 0)
+#define BLE_DBG_PASS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_PASS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_BLS_EN != 0)
+#define BLE_DBG_BLS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_BLS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_HTS_EN != 0)
+#define BLE_DBG_HTS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_HTS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_ANS_EN != 0)
+#define BLE_DBG_ANS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_ANS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_ESS_EN != 0)
+#define BLE_DBG_ESS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_ESS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_GLS_EN != 0)
+#define BLE_DBG_GLS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_GLS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_BAS_EN != 0)
+#define BLE_DBG_BAS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_BAS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_RTUS_EN != 0)
+#define BLE_DBG_RTUS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_RTUS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_HPS_EN != 0)
+#define BLE_DBG_HPS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_HPS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_TPS_EN != 0)
+#define BLE_DBG_TPS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_TPS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_LLS_EN != 0)
+#define BLE_DBG_LLS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_LLS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_IAS_EN != 0)
+#define BLE_DBG_IAS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_IAS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_WSS_EN != 0)
+#define BLE_DBG_WSS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_WSS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_LNS_EN != 0)
+#define BLE_DBG_LNS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_LNS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_SCPS_EN != 0)
+#define BLE_DBG_SCPS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_SCPS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_DTS_EN != 0)
+#define BLE_DBG_DTS_MSG PRINT_MESG_DBG
+#define BLE_DBG_DTS_BUF PRINT_LOG_BUFF_DBG
+#else
+#define BLE_DBG_DTS_MSG PRINT_NO_MESG
+#define BLE_DBG_DTS_BUF PRINT_NO_MESG
+#endif
+
+#endif /*__BLE_DBG_CONF_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/firmware/targets/f7/ble-glue/ble_glue.c b/firmware/targets/f6/ble_glue/ble_glue.c
index 25162331..2fe3b3b4 100644
--- a/firmware/targets/f7/ble-glue/ble_glue.c
+++ b/firmware/targets/f6/ble_glue/ble_glue.c
@@ -7,7 +7,7 @@
#include "shci.h"
#include "shci_tl.h"
#include "app_debug.h"
-#include <furi-hal.h>
+#include <furi_hal.h>
#define TAG "Core2"
@@ -15,12 +15,18 @@
#define BLE_GLUE_FLAG_KILL_THREAD (1UL << 1)
#define BLE_GLUE_FLAG_ALL (BLE_GLUE_FLAG_SHCI_EVENT | BLE_GLUE_FLAG_KILL_THREAD)
-#define POOL_SIZE (CFG_TLBLE_EVT_QUEUE_LENGTH*4U*DIVC(( sizeof(TL_PacketHeader_t) + TL_BLE_EVENT_FRAME_SIZE ), 4U))
+#define POOL_SIZE \
+ (CFG_TLBLE_EVT_QUEUE_LENGTH * 4U * \
+ DIVC((sizeof(TL_PacketHeader_t) + TL_BLE_EVENT_FRAME_SIZE), 4U))
PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static uint8_t ble_glue_event_pool[POOL_SIZE];
PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static TL_CmdPacket_t ble_glue_system_cmd_buff;
-PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static uint8_t ble_glue_system_spare_event_buff[sizeof(TL_PacketHeader_t) + TL_EVT_HDR_SIZE + 255U];
-PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static uint8_t ble_glue_ble_spare_event_buff[sizeof(TL_PacketHeader_t) + TL_EVT_HDR_SIZE + 255];
+PLACE_IN_SECTION("MB_MEM2")
+ALIGN(4)
+static uint8_t ble_glue_system_spare_event_buff[sizeof(TL_PacketHeader_t) + TL_EVT_HDR_SIZE + 255U];
+PLACE_IN_SECTION("MB_MEM2")
+ALIGN(4)
+static uint8_t ble_glue_ble_spare_event_buff[sizeof(TL_PacketHeader_t) + TL_EVT_HDR_SIZE + 255];
typedef enum {
// Stage 1: core2 startup and FUS
@@ -44,11 +50,13 @@ typedef struct {
static BleGlue* ble_glue = NULL;
-static int32_t ble_glue_shci_thread(void *argument);
+static int32_t ble_glue_shci_thread(void* argument);
static void ble_glue_sys_status_not_callback(SHCI_TL_CmdStatus_t status);
static void ble_glue_sys_user_event_callback(void* pPayload);
-void ble_glue_set_key_storage_changed_callback(BleGlueKeyStorageChangedCallback callback, void* context) {
+void ble_glue_set_key_storage_changed_callback(
+ BleGlueKeyStorageChangedCallback callback,
+ void* context) {
furi_assert(ble_glue);
furi_assert(callback);
ble_glue->callback = callback;
@@ -89,14 +97,14 @@ void ble_glue_init() {
// System channel initialization
SHci_Tl_Init_Conf.p_cmdbuffer = (uint8_t*)&ble_glue_system_cmd_buff;
SHci_Tl_Init_Conf.StatusNotCallBack = ble_glue_sys_status_not_callback;
- shci_init(ble_glue_sys_user_event_callback, (void*) &SHci_Tl_Init_Conf);
+ shci_init(ble_glue_sys_user_event_callback, (void*)&SHci_Tl_Init_Conf);
/**< Memory Manager channel initialization */
tl_mm_config.p_BleSpareEvtBuffer = ble_glue_ble_spare_event_buff;
tl_mm_config.p_SystemSpareEvtBuffer = ble_glue_system_spare_event_buff;
tl_mm_config.p_AsynchEvtPool = ble_glue_event_pool;
tl_mm_config.AsynchEvtPoolSize = POOL_SIZE;
- TL_MM_Init( &tl_mm_config );
+ TL_MM_Init(&tl_mm_config);
TL_Enable();
/*
@@ -109,8 +117,8 @@ void ble_glue_init() {
bool ble_glue_wait_for_fus_start(WirelessFwInfo_t* info) {
bool ret = false;
size_t countdown = 1000;
- while (countdown > 0) {
- if (ble_glue->status == BleGlueStatusFusStarted) {
+ while(countdown > 0) {
+ if(ble_glue->status == BleGlueStatusFusStarted) {
ret = true;
break;
}
@@ -130,7 +138,7 @@ bool ble_glue_wait_for_fus_start(WirelessFwInfo_t* info) {
bool ble_glue_start() {
furi_assert(ble_glue);
- if (ble_glue->status != BleGlueStatusFusStarted) {
+ if(ble_glue->status != BleGlueStatusFusStarted) {
return false;
}
@@ -172,16 +180,16 @@ bool ble_glue_is_radio_stack_ready() {
}
static void ble_glue_sys_status_not_callback(SHCI_TL_CmdStatus_t status) {
- switch (status) {
+ switch(status) {
case SHCI_TL_CmdBusy:
- osMutexAcquire( ble_glue->shci_mtx, osWaitForever );
+ osMutexAcquire(ble_glue->shci_mtx, osWaitForever);
break;
case SHCI_TL_CmdAvailable:
- osMutexRelease( ble_glue->shci_mtx );
+ osMutexRelease(ble_glue->shci_mtx);
break;
default:
break;
- }
+ }
}
/*
@@ -193,13 +201,14 @@ static void ble_glue_sys_status_not_callback(SHCI_TL_CmdStatus_t status) {
* ( eg ((tSHCI_UserEvtRxParam*)pPayload)->status shall be set to SHCI_TL_UserEventFlow_Disable )
* When the status is not filled, the buffer is released by default
*/
-static void ble_glue_sys_user_event_callback( void * pPayload ) {
+static void ble_glue_sys_user_event_callback(void* pPayload) {
UNUSED(pPayload);
/* Traces channel initialization */
// APPD_EnableCPU2( );
- TL_AsynchEvt_t *p_sys_event = (TL_AsynchEvt_t*)(((tSHCI_UserEvtRxParam*)pPayload)->pckt->evtserial.evt.payload);
-
+ TL_AsynchEvt_t* p_sys_event =
+ (TL_AsynchEvt_t*)(((tSHCI_UserEvtRxParam*)pPayload)->pckt->evtserial.evt.payload);
+
if(p_sys_event->subevtcode == SHCI_SUB_EVT_CODE_READY) {
FURI_LOG_I(TAG, "Fus started");
ble_glue->status = BleGlueStatusFusStarted;
@@ -208,9 +217,13 @@ static void ble_glue_sys_user_event_callback( void * pPayload ) {
FURI_LOG_E(TAG, "Error during initialization");
furi_hal_power_insomnia_exit();
} else if(p_sys_event->subevtcode == SHCI_SUB_EVT_BLE_NVM_RAM_UPDATE) {
- SHCI_C2_BleNvmRamUpdate_Evt_t* p_sys_ble_nvm_ram_update_event = (SHCI_C2_BleNvmRamUpdate_Evt_t*)p_sys_event->payload;
+ SHCI_C2_BleNvmRamUpdate_Evt_t* p_sys_ble_nvm_ram_update_event =
+ (SHCI_C2_BleNvmRamUpdate_Evt_t*)p_sys_event->payload;
if(ble_glue->callback) {
- ble_glue->callback((uint8_t*)p_sys_ble_nvm_ram_update_event->StartAddress, p_sys_ble_nvm_ram_update_event->Size, ble_glue->context);
+ ble_glue->callback(
+ (uint8_t*)p_sys_ble_nvm_ram_update_event->StartAddress,
+ p_sys_ble_nvm_ram_update_event->Size,
+ ble_glue->context);
}
}
}
@@ -243,7 +256,8 @@ void ble_glue_thread_stop() {
static int32_t ble_glue_shci_thread(void* context) {
uint32_t flags = 0;
while(true) {
- flags = osEventFlagsWait(ble_glue->event_flags, BLE_GLUE_FLAG_ALL, osFlagsWaitAny, osWaitForever);
+ flags = osEventFlagsWait(
+ ble_glue->event_flags, BLE_GLUE_FLAG_ALL, osFlagsWaitAny, osWaitForever);
if(flags & BLE_GLUE_FLAG_SHCI_EVENT) {
shci_user_evt_proc();
}
diff --git a/firmware/targets/f6/ble-glue/ble_glue.h b/firmware/targets/f6/ble_glue/ble_glue.h
index 598ab072..6c8cdce6 100644
--- a/firmware/targets/f6/ble-glue/ble_glue.h
+++ b/firmware/targets/f6/ble_glue/ble_glue.h
@@ -8,8 +8,8 @@
extern "C" {
#endif
-typedef void(*BleGlueKeyStorageChangedCallback)(uint8_t* change_addr_start, uint16_t size, void* context);
-
+typedef void (
+ *BleGlueKeyStorageChangedCallback)(uint8_t* change_addr_start, uint16_t size, void* context);
/** Initialize start core2 and initialize transport */
void ble_glue_init();
@@ -39,7 +39,9 @@ bool ble_glue_is_radio_stack_ready();
* @param[in] callback The callback to call on NVM change
* @param context The context for callback
*/
-void ble_glue_set_key_storage_changed_callback(BleGlueKeyStorageChangedCallback callback, void* context);
+void ble_glue_set_key_storage_changed_callback(
+ BleGlueKeyStorageChangedCallback callback,
+ void* context);
void ble_glue_thread_stop();
diff --git a/firmware/targets/f6/ble_glue/dev_info_service.c b/firmware/targets/f6/ble_glue/dev_info_service.c
new file mode 100644
index 00000000..1c9b94eb
--- /dev/null
+++ b/firmware/targets/f6/ble_glue/dev_info_service.c
@@ -0,0 +1,174 @@
+#include "dev_info_service.h"
+#include "app_common.h"
+#include "ble.h"
+
+#include <furi.h>
+
+#define TAG "BtDevInfoSvc"
+
+typedef struct {
+ uint16_t service_handle;
+ uint16_t man_name_char_handle;
+ uint16_t serial_num_char_handle;
+ uint16_t firmware_rev_char_handle;
+ uint16_t software_rev_char_handle;
+} DevInfoSvc;
+
+static DevInfoSvc* dev_info_svc = NULL;
+
+static const char dev_info_man_name[] = "Flipper Devices Inc.";
+static const char dev_info_serial_num[] = "1.0";
+static const char dev_info_firmware_rev_num[] = TOSTRING(TARGET);
+static const char dev_info_software_rev_num[] = GIT_COMMIT " " GIT_BRANCH " " GIT_BRANCH_NUM
+ " " BUILD_DATE;
+
+void dev_info_svc_start() {
+ dev_info_svc = furi_alloc(sizeof(DevInfoSvc));
+ tBleStatus status;
+
+ // Add Device Information Service
+ uint16_t uuid = DEVICE_INFORMATION_SERVICE_UUID;
+ status = aci_gatt_add_service(
+ UUID_TYPE_16, (Service_UUID_t*)&uuid, PRIMARY_SERVICE, 9, &dev_info_svc->service_handle);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to add Device Information Service: %d", status);
+ }
+
+ // Add characteristics
+ uuid = MANUFACTURER_NAME_UUID;
+ status = aci_gatt_add_char(
+ dev_info_svc->service_handle,
+ UUID_TYPE_16,
+ (Char_UUID_t*)&uuid,
+ strlen(dev_info_man_name),
+ CHAR_PROP_READ,
+ ATTR_PERMISSION_AUTHEN_READ,
+ GATT_DONT_NOTIFY_EVENTS,
+ 10,
+ CHAR_VALUE_LEN_CONSTANT,
+ &dev_info_svc->man_name_char_handle);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to add manufacturer name char: %d", status);
+ }
+ uuid = SERIAL_NUMBER_UUID;
+ status = aci_gatt_add_char(
+ dev_info_svc->service_handle,
+ UUID_TYPE_16,
+ (Char_UUID_t*)&uuid,
+ strlen(dev_info_serial_num),
+ CHAR_PROP_READ,
+ ATTR_PERMISSION_AUTHEN_READ,
+ GATT_DONT_NOTIFY_EVENTS,
+ 10,
+ CHAR_VALUE_LEN_CONSTANT,
+ &dev_info_svc->serial_num_char_handle);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to add serial number char: %d", status);
+ }
+ uuid = FIRMWARE_REVISION_UUID;
+ status = aci_gatt_add_char(
+ dev_info_svc->service_handle,
+ UUID_TYPE_16,
+ (Char_UUID_t*)&uuid,
+ strlen(dev_info_firmware_rev_num),
+ CHAR_PROP_READ,
+ ATTR_PERMISSION_AUTHEN_READ,
+ GATT_DONT_NOTIFY_EVENTS,
+ 10,
+ CHAR_VALUE_LEN_CONSTANT,
+ &dev_info_svc->firmware_rev_char_handle);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to add firmware revision char: %d", status);
+ }
+ uuid = SOFTWARE_REVISION_UUID;
+ status = aci_gatt_add_char(
+ dev_info_svc->service_handle,
+ UUID_TYPE_16,
+ (Char_UUID_t*)&uuid,
+ strlen(dev_info_software_rev_num),
+ CHAR_PROP_READ,
+ ATTR_PERMISSION_AUTHEN_READ,
+ GATT_DONT_NOTIFY_EVENTS,
+ 10,
+ CHAR_VALUE_LEN_CONSTANT,
+ &dev_info_svc->software_rev_char_handle);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to add software revision char: %d", status);
+ }
+
+ // Update characteristics
+ status = aci_gatt_update_char_value(
+ dev_info_svc->service_handle,
+ dev_info_svc->man_name_char_handle,
+ 0,
+ strlen(dev_info_man_name),
+ (uint8_t*)dev_info_man_name);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to update manufacturer name char: %d", status);
+ }
+ status = aci_gatt_update_char_value(
+ dev_info_svc->service_handle,
+ dev_info_svc->serial_num_char_handle,
+ 0,
+ strlen(dev_info_serial_num),
+ (uint8_t*)dev_info_serial_num);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to update serial number char: %d", status);
+ }
+ status = aci_gatt_update_char_value(
+ dev_info_svc->service_handle,
+ dev_info_svc->firmware_rev_char_handle,
+ 0,
+ strlen(dev_info_firmware_rev_num),
+ (uint8_t*)dev_info_firmware_rev_num);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to update firmware revision char: %d", status);
+ }
+ status = aci_gatt_update_char_value(
+ dev_info_svc->service_handle,
+ dev_info_svc->software_rev_char_handle,
+ 0,
+ strlen(dev_info_software_rev_num),
+ (uint8_t*)dev_info_software_rev_num);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to update software revision char: %d", status);
+ }
+}
+
+void dev_info_svc_stop() {
+ tBleStatus status;
+ if(dev_info_svc) {
+ // Delete service characteristics
+ status =
+ aci_gatt_del_char(dev_info_svc->service_handle, dev_info_svc->man_name_char_handle);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to delete manufacturer name char: %d", status);
+ }
+ status =
+ aci_gatt_del_char(dev_info_svc->service_handle, dev_info_svc->serial_num_char_handle);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to delete serial number char: %d", status);
+ }
+ status = aci_gatt_del_char(
+ dev_info_svc->service_handle, dev_info_svc->firmware_rev_char_handle);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to delete firmware revision char: %d", status);
+ }
+ status = aci_gatt_del_char(
+ dev_info_svc->service_handle, dev_info_svc->software_rev_char_handle);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to delete software revision char: %d", status);
+ }
+ // Delete service
+ status = aci_gatt_del_service(dev_info_svc->service_handle);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to delete device info service: %d", status);
+ }
+ free(dev_info_svc);
+ dev_info_svc = NULL;
+ }
+}
+
+bool dev_info_svc_is_started() {
+ return dev_info_svc != NULL;
+}
diff --git a/firmware/targets/f6/ble_glue/dev_info_service.h b/firmware/targets/f6/ble_glue/dev_info_service.h
new file mode 100644
index 00000000..2faac8a6
--- /dev/null
+++ b/firmware/targets/f6/ble_glue/dev_info_service.h
@@ -0,0 +1,24 @@
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DEV_INFO_MANUFACTURER_NAME "Flipper Devices Inc."
+#define DEV_INFO_SERIAL_NUMBER "1.0"
+#define DEV_INFO_FIRMWARE_REVISION_NUMBER TARGET
+#define DEV_INFO_SOFTWARE_REVISION_NUMBER \
+ GIT_COMMIT " " GIT_BRANCH " " GIT_BRANCH_NUM " " BUILD_DATE
+
+void dev_info_svc_start();
+
+void dev_info_svc_stop();
+
+bool dev_info_svc_is_started();
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/firmware/targets/f6/ble-glue/gap.c b/firmware/targets/f6/ble_glue/gap.c
index 5c454422..dfcd174e 100644
--- a/firmware/targets/f6/ble-glue/gap.c
+++ b/firmware/targets/f6/ble_glue/gap.c
@@ -2,7 +2,7 @@
#include "ble.h"
-#include <furi-hal.h>
+#include <furi_hal.h>
#include <furi.h>
#define TAG "BtGap"
@@ -46,9 +46,11 @@ typedef struct {
} GapScan;
// Identity root key
-static const uint8_t gap_irk[16] = {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0};
+static const uint8_t gap_irk[16] =
+ {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0};
// Encryption root key
-static const uint8_t gap_erk[16] = {0xfe,0xdc,0xba,0x09,0x87,0x65,0x43,0x21,0xfe,0xdc,0xba,0x09,0x87,0x65,0x43,0x21};
+static const uint8_t gap_erk[16] =
+ {0xfe, 0xdc, 0xba, 0x09, 0x87, 0x65, 0x43, 0x21, 0xfe, 0xdc, 0xba, 0x09, 0x87, 0x65, 0x43, 0x21};
static Gap* gap = NULL;
static GapScan* gap_scan = NULL;
@@ -56,8 +58,7 @@ static GapScan* gap_scan = NULL;
static void gap_advertise_start(GapState new_state);
static int32_t gap_app(void* context);
-SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification( void *pckt )
-{
+SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification(void* pckt) {
hci_event_pckt* event_pckt;
evt_le_meta_event* meta_evt;
evt_blue_aci* blue_evt;
@@ -71,168 +72,173 @@ SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification( void *pckt )
if(gap) {
osMutexAcquire(gap->state_mutex, osWaitForever);
}
- switch (event_pckt->evt) {
- case EVT_DISCONN_COMPLETE:
- {
- hci_disconnection_complete_event_rp0 *disconnection_complete_event = (hci_disconnection_complete_event_rp0 *) event_pckt->data;
- if (disconnection_complete_event->Connection_Handle == gap->service.connection_handle) {
- gap->service.connection_handle = 0;
- gap->state = GapStateIdle;
- FURI_LOG_I(TAG, "Disconnect from client. Reason: %02X", disconnection_complete_event->Reason);
+ switch(event_pckt->evt) {
+ case EVT_DISCONN_COMPLETE: {
+ hci_disconnection_complete_event_rp0* disconnection_complete_event =
+ (hci_disconnection_complete_event_rp0*)event_pckt->data;
+ if(disconnection_complete_event->Connection_Handle == gap->service.connection_handle) {
+ gap->service.connection_handle = 0;
+ gap->state = GapStateIdle;
+ FURI_LOG_I(
+ TAG, "Disconnect from client. Reason: %02X", disconnection_complete_event->Reason);
+ }
+ if(gap->enable_adv) {
+ // Restart advertising
+ gap_advertise_start(GapStateAdvFast);
+ furi_hal_power_insomnia_exit();
+ }
+ GapEvent event = {.type = GapEventTypeDisconnected};
+ gap->on_event_cb(event, gap->context);
+ } break;
+
+ case EVT_LE_META_EVENT:
+ meta_evt = (evt_le_meta_event*)event_pckt->data;
+ switch(meta_evt->subevent) {
+ case EVT_LE_CONN_UPDATE_COMPLETE:
+ FURI_LOG_D(TAG, "Connection update event");
+ break;
+
+ case EVT_LE_PHY_UPDATE_COMPLETE:
+ evt_le_phy_update_complete = (hci_le_phy_update_complete_event_rp0*)meta_evt->data;
+ if(evt_le_phy_update_complete->Status) {
+ FURI_LOG_E(
+ TAG, "Update PHY failed, status %d", evt_le_phy_update_complete->Status);
+ } else {
+ FURI_LOG_I(TAG, "Update PHY succeed");
}
- if(gap->enable_adv) {
- // Restart advertising
- gap_advertise_start(GapStateAdvFast);
- furi_hal_power_insomnia_exit();
+ ret = hci_le_read_phy(gap->service.connection_handle, &tx_phy, &rx_phy);
+ if(ret) {
+ FURI_LOG_E(TAG, "Read PHY failed, status: %d", ret);
+ } else {
+ FURI_LOG_I(TAG, "PHY Params TX = %d, RX = %d ", tx_phy, rx_phy);
}
- GapEvent event = {.type = GapEventTypeDisconnected};
- gap->on_event_cb(event, gap->context);
- }
- break;
+ break;
- case EVT_LE_META_EVENT:
- meta_evt = (evt_le_meta_event*) event_pckt->data;
- switch (meta_evt->subevent) {
- case EVT_LE_CONN_UPDATE_COMPLETE:
- FURI_LOG_D(TAG, "Connection update event");
- break;
-
- case EVT_LE_PHY_UPDATE_COMPLETE:
- evt_le_phy_update_complete = (hci_le_phy_update_complete_event_rp0*)meta_evt->data;
- if(evt_le_phy_update_complete->Status) {
- FURI_LOG_E(TAG, "Update PHY failed, status %d", evt_le_phy_update_complete->Status);
- } else {
- FURI_LOG_I(TAG, "Update PHY succeed");
- }
- ret = hci_le_read_phy(gap->service.connection_handle,&tx_phy,&rx_phy);
- if(ret) {
- FURI_LOG_E(TAG, "Read PHY failed, status: %d", ret);
- } else {
- FURI_LOG_I(TAG, "PHY Params TX = %d, RX = %d ", tx_phy, rx_phy);
- }
- break;
-
- case EVT_LE_CONN_COMPLETE:
- furi_hal_power_insomnia_enter();
- hci_le_connection_complete_event_rp0* connection_complete_event = (hci_le_connection_complete_event_rp0 *) meta_evt->data;
- FURI_LOG_I(TAG, "Connection complete for connection handle 0x%x", connection_complete_event->Connection_Handle);
-
- // Stop advertising as connection completed
- osTimerStop(gap->advertise_timer);
-
- // Update connection status and handle
- gap->state = GapStateConnected;
- gap->service.connection_handle = connection_complete_event->Connection_Handle;
-
- // Start pairing by sending security request
- aci_gap_slave_security_req(connection_complete_event->Connection_Handle);
- break;
-
- case EVT_LE_ADVERTISING_REPORT: {
- if(gap_scan) {
- GapAddress address;
- hci_le_advertising_report_event_rp0* evt = (hci_le_advertising_report_event_rp0*) meta_evt->data;
- for(uint8_t i = 0; i < evt->Num_Reports; i++) {
- Advertising_Report_t* rep = &evt->Advertising_Report[i];
- address.type = rep->Address_Type;
- // Original MAC addres is in inverted order
- for(uint8_t j = 0; j < sizeof(address.mac); j++) {
- address.mac[j] = rep->Address[sizeof(address.mac) - j - 1];
- }
- gap_scan->callback(address, gap_scan->context);
- }
+ case EVT_LE_CONN_COMPLETE:
+ furi_hal_power_insomnia_enter();
+ hci_le_connection_complete_event_rp0* connection_complete_event =
+ (hci_le_connection_complete_event_rp0*)meta_evt->data;
+ FURI_LOG_I(
+ TAG,
+ "Connection complete for connection handle 0x%x",
+ connection_complete_event->Connection_Handle);
+
+ // Stop advertising as connection completed
+ osTimerStop(gap->advertise_timer);
+
+ // Update connection status and handle
+ gap->state = GapStateConnected;
+ gap->service.connection_handle = connection_complete_event->Connection_Handle;
+
+ // Start pairing by sending security request
+ aci_gap_slave_security_req(connection_complete_event->Connection_Handle);
+ break;
+
+ case EVT_LE_ADVERTISING_REPORT: {
+ if(gap_scan) {
+ GapAddress address;
+ hci_le_advertising_report_event_rp0* evt =
+ (hci_le_advertising_report_event_rp0*)meta_evt->data;
+ for(uint8_t i = 0; i < evt->Num_Reports; i++) {
+ Advertising_Report_t* rep = &evt->Advertising_Report[i];
+ address.type = rep->Address_Type;
+ // Original MAC addres is in inverted order
+ for(uint8_t j = 0; j < sizeof(address.mac); j++) {
+ address.mac[j] = rep->Address[sizeof(address.mac) - j - 1];
}
+ gap_scan->callback(address, gap_scan->context);
}
- break;
-
- default:
- break;
}
+ } break;
+
+ default:
+ break;
+ }
break;
- case EVT_VENDOR:
- blue_evt = (evt_blue_aci*) event_pckt->data;
- switch (blue_evt->ecode) {
- aci_gap_pairing_complete_event_rp0 *pairing_complete;
-
- case EVT_BLUE_GAP_LIMITED_DISCOVERABLE:
- FURI_LOG_I(TAG, "Limited discoverable event");
- break;
-
- case EVT_BLUE_GAP_PASS_KEY_REQUEST:
- {
- // Generate random PIN code
- uint32_t pin = rand() % 999999;
- aci_gap_pass_key_resp(gap->service.connection_handle, pin);
- FURI_LOG_I(TAG, "Pass key request event. Pin: %06d", pin);
- GapEvent event = {.type = GapEventTypePinCodeShow, .data.pin_code = pin};
- gap->on_event_cb(event, gap->context);
- }
- break;
-
- case EVT_BLUE_ATT_EXCHANGE_MTU_RESP:
- {
- aci_att_exchange_mtu_resp_event_rp0 *pr = (void*)blue_evt->data;
- FURI_LOG_I(TAG, "Rx MTU size: %d", pr->Server_RX_MTU);
- // Set maximum packet size given header size is 3 bytes
- GapEvent event = {.type = GapEventTypeUpdateMTU, .data.max_packet_size = pr->Server_RX_MTU - 3};
- gap->on_event_cb(event, gap->context);
- }
- break;
-
- case EVT_BLUE_GAP_AUTHORIZATION_REQUEST:
- FURI_LOG_I(TAG, "Authorization request event");
- break;
-
- case EVT_BLUE_GAP_SLAVE_SECURITY_INITIATED:
- FURI_LOG_I(TAG, "Slave security initiated");
- break;
-
- case EVT_BLUE_GAP_BOND_LOST:
- FURI_LOG_I(TAG, "Bond lost event. Start rebonding");
- aci_gap_allow_rebond(gap->service.connection_handle);
- break;
-
- case EVT_BLUE_GAP_DEVICE_FOUND:
- FURI_LOG_I(TAG, "Device found event");
- break;
-
- case EVT_BLUE_GAP_ADDR_NOT_RESOLVED:
- FURI_LOG_I(TAG, "Address not resolved event");
- break;
-
- case EVT_BLUE_GAP_KEYPRESS_NOTIFICATION:
- FURI_LOG_I(TAG, "Key press notification event");
- break;
-
- case EVT_BLUE_GAP_NUMERIC_COMPARISON_VALUE:
- {
- uint32_t pin = ((aci_gap_numeric_comparison_value_event_rp0 *)(blue_evt->data))->Numeric_Value;
- FURI_LOG_I(TAG, "Verify numeric comparison: %06d", pin);
- GapEvent event = {.type = GapEventTypePinCodeVerify, .data.pin_code = pin};
- bool result = gap->on_event_cb(event, gap->context);
- aci_gap_numeric_comparison_value_confirm_yesno(gap->service.connection_handle, result);
- break;
- }
+ case EVT_VENDOR:
+ blue_evt = (evt_blue_aci*)event_pckt->data;
+ switch(blue_evt->ecode) {
+ aci_gap_pairing_complete_event_rp0* pairing_complete;
- case EVT_BLUE_GAP_PAIRING_CMPLT:
- pairing_complete = (aci_gap_pairing_complete_event_rp0*)blue_evt->data;
- if (pairing_complete->Status) {
- FURI_LOG_E(TAG, "Pairing failed with status: %d. Terminating connection", pairing_complete->Status);
- aci_gap_terminate(gap->service.connection_handle, 5);
- } else {
- FURI_LOG_I(TAG, "Pairing complete");
- GapEvent event = {.type = GapEventTypeConnected};
- gap->on_event_cb(event, gap->context);
- }
- break;
+ case EVT_BLUE_GAP_LIMITED_DISCOVERABLE:
+ FURI_LOG_I(TAG, "Limited discoverable event");
+ break;
+
+ case EVT_BLUE_GAP_PASS_KEY_REQUEST: {
+ // Generate random PIN code
+ uint32_t pin = rand() % 999999;
+ aci_gap_pass_key_resp(gap->service.connection_handle, pin);
+ FURI_LOG_I(TAG, "Pass key request event. Pin: %06d", pin);
+ GapEvent event = {.type = GapEventTypePinCodeShow, .data.pin_code = pin};
+ gap->on_event_cb(event, gap->context);
+ } break;
+
+ case EVT_BLUE_ATT_EXCHANGE_MTU_RESP: {
+ aci_att_exchange_mtu_resp_event_rp0* pr = (void*)blue_evt->data;
+ FURI_LOG_I(TAG, "Rx MTU size: %d", pr->Server_RX_MTU);
+ // Set maximum packet size given header size is 3 bytes
+ GapEvent event = {
+ .type = GapEventTypeUpdateMTU, .data.max_packet_size = pr->Server_RX_MTU - 3};
+ gap->on_event_cb(event, gap->context);
+ } break;
+
+ case EVT_BLUE_GAP_AUTHORIZATION_REQUEST:
+ FURI_LOG_I(TAG, "Authorization request event");
+ break;
+
+ case EVT_BLUE_GAP_SLAVE_SECURITY_INITIATED:
+ FURI_LOG_I(TAG, "Slave security initiated");
+ break;
+
+ case EVT_BLUE_GAP_BOND_LOST:
+ FURI_LOG_I(TAG, "Bond lost event. Start rebonding");
+ aci_gap_allow_rebond(gap->service.connection_handle);
+ break;
- case EVT_BLUE_GAP_PROCEDURE_COMPLETE:
- FURI_LOG_I(TAG, "Procedure complete event");
- break;
+ case EVT_BLUE_GAP_DEVICE_FOUND:
+ FURI_LOG_I(TAG, "Device found event");
+ break;
+
+ case EVT_BLUE_GAP_ADDR_NOT_RESOLVED:
+ FURI_LOG_I(TAG, "Address not resolved event");
+ break;
+
+ case EVT_BLUE_GAP_KEYPRESS_NOTIFICATION:
+ FURI_LOG_I(TAG, "Key press notification event");
+ break;
+
+ case EVT_BLUE_GAP_NUMERIC_COMPARISON_VALUE: {
+ uint32_t pin =
+ ((aci_gap_numeric_comparison_value_event_rp0*)(blue_evt->data))->Numeric_Value;
+ FURI_LOG_I(TAG, "Verify numeric comparison: %06d", pin);
+ GapEvent event = {.type = GapEventTypePinCodeVerify, .data.pin_code = pin};
+ bool result = gap->on_event_cb(event, gap->context);
+ aci_gap_numeric_comparison_value_confirm_yesno(gap->service.connection_handle, result);
+ break;
+ }
+
+ case EVT_BLUE_GAP_PAIRING_CMPLT:
+ pairing_complete = (aci_gap_pairing_complete_event_rp0*)blue_evt->data;
+ if(pairing_complete->Status) {
+ FURI_LOG_E(
+ TAG,
+ "Pairing failed with status: %d. Terminating connection",
+ pairing_complete->Status);
+ aci_gap_terminate(gap->service.connection_handle, 5);
+ } else {
+ FURI_LOG_I(TAG, "Pairing complete");
+ GapEvent event = {.type = GapEventTypeConnected};
+ gap->on_event_cb(event, gap->context);
}
- default:
- break;
+ break;
+
+ case EVT_BLUE_GAP_PROCEDURE_COMPLETE:
+ FURI_LOG_I(TAG, "Procedure complete event");
+ break;
+ }
+ default:
+ break;
}
if(gap) {
osMutexRelease(gap->state_mutex);
@@ -243,7 +249,7 @@ SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification( void *pckt )
static void set_advertisment_service_uid(uint8_t* uid, uint8_t uid_len) {
if(uid_len == 2) {
gap->service.adv_svc_uuid[0] = AD_TYPE_16_BIT_SERV_UUID;
- } else if (uid_len == 4) {
+ } else if(uid_len == 4) {
gap->service.adv_svc_uuid[0] = AD_TYPE_32_BIT_SERV_UUID;
} else if(uid_len == 16) {
gap->service.adv_svc_uuid[0] = AD_TYPE_128_BIT_SERV_UUID_CMPLT_LIST;
@@ -259,7 +265,8 @@ static void gap_init_svc(Gap* gap) {
// HCI Reset to synchronise BLE Stack
hci_reset();
// Configure mac address
- aci_hal_write_config_data(CONFIG_DATA_PUBADDR_OFFSET, CONFIG_DATA_PUBADDR_LEN, gap->config->mac_address);
+ aci_hal_write_config_data(
+ CONFIG_DATA_PUBADDR_OFFSET, CONFIG_DATA_PUBADDR_LEN, gap->config->mac_address);
/* Static random Address
* The two upper bits shall be set to 1
@@ -268,28 +275,45 @@ static void gap_init_svc(Gap* gap) {
*/
srd_bd_addr[1] = 0x0000ED6E;
srd_bd_addr[0] = LL_FLASH_GetUDN();
- aci_hal_write_config_data( CONFIG_DATA_RANDOM_ADDRESS_OFFSET, CONFIG_DATA_RANDOM_ADDRESS_LEN, (uint8_t*)srd_bd_addr );
+ aci_hal_write_config_data(
+ CONFIG_DATA_RANDOM_ADDRESS_OFFSET, CONFIG_DATA_RANDOM_ADDRESS_LEN, (uint8_t*)srd_bd_addr);
// Set Identity root key used to derive LTK and CSRK
- aci_hal_write_config_data( CONFIG_DATA_IR_OFFSET, CONFIG_DATA_IR_LEN, (uint8_t*)gap_irk );
+ aci_hal_write_config_data(CONFIG_DATA_IR_OFFSET, CONFIG_DATA_IR_LEN, (uint8_t*)gap_irk);
// Set Encryption root key used to derive LTK and CSRK
- aci_hal_write_config_data( CONFIG_DATA_ER_OFFSET, CONFIG_DATA_ER_LEN, (uint8_t*)gap_erk );
+ aci_hal_write_config_data(CONFIG_DATA_ER_OFFSET, CONFIG_DATA_ER_LEN, (uint8_t*)gap_erk);
// Set TX Power to 0 dBm
aci_hal_set_tx_power_level(1, 0x19);
// Initialize GATT interface
aci_gatt_init();
// Initialize GAP interface
// Skip fist symbol AD_TYPE_COMPLETE_LOCAL_NAME
- char *name = gap->service.adv_name + 1;
- aci_gap_init(GAP_PERIPHERAL_ROLE, 0, strlen(name),
- &gap->service.gap_svc_handle, &gap->service.dev_name_char_handle, &gap->service.appearance_char_handle);
+ char* name = gap->service.adv_name + 1;
+ aci_gap_init(
+ GAP_PERIPHERAL_ROLE,
+ 0,
+ strlen(name),
+ &gap->service.gap_svc_handle,
+ &gap->service.dev_name_char_handle,
+ &gap->service.appearance_char_handle);
// Set GAP characteristics
- status = aci_gatt_update_char_value(gap->service.gap_svc_handle, gap->service.dev_name_char_handle, 0, strlen(name), (uint8_t *) name);
- if (status) {
+ status = aci_gatt_update_char_value(
+ gap->service.gap_svc_handle,
+ gap->service.dev_name_char_handle,
+ 0,
+ strlen(name),
+ (uint8_t*)name);
+ if(status) {
FURI_LOG_E(TAG, "Failed updating name characteristic: %d", status);
}
- uint8_t gap_appearence_char_uuid[2] = {gap->config->appearance_char & 0xff, gap->config->appearance_char >> 8};
- status = aci_gatt_update_char_value(gap->service.gap_svc_handle, gap->service.appearance_char_handle, 0, 2, gap_appearence_char_uuid);
+ uint8_t gap_appearence_char_uuid[2] = {
+ gap->config->appearance_char & 0xff, gap->config->appearance_char >> 8};
+ status = aci_gatt_update_char_value(
+ gap->service.gap_svc_handle,
+ gap->service.appearance_char_handle,
+ 0,
+ 2,
+ gap_appearence_char_uuid);
if(status) {
FURI_LOG_E(TAG, "Failed updating appearence characteristic: %d", status);
}
@@ -299,7 +323,7 @@ static void gap_init_svc(Gap* gap) {
bool keypress_supported = false;
if(gap->config->pairing_method == GapPairingPinCodeShow) {
aci_gap_set_io_capability(IO_CAP_DISPLAY_ONLY);
- } else if(gap->config->pairing_method == GapPairingPinCodeVerifyYesNo){
+ } else if(gap->config->pairing_method == GapPairingPinCodeVerifyYesNo) {
aci_gap_set_io_capability(IO_CAP_DISPLAY_YES_NO);
keypress_supported = true;
}
@@ -318,13 +342,12 @@ static void gap_init_svc(Gap* gap) {
aci_gap_configure_whitelist();
}
-static void gap_advertise_start(GapState new_state)
-{
+static void gap_advertise_start(GapState new_state) {
tBleStatus status;
uint16_t min_interval;
uint16_t max_interval;
- if (new_state == GapStateAdvFast) {
+ if(new_state == GapStateAdvFast) {
min_interval = 0x80; // 80 ms
max_interval = 0xa0; // 100 ms
} else {
@@ -334,17 +357,27 @@ static void gap_advertise_start(GapState new_state)
// Stop advertising timer
osTimerStop(gap->advertise_timer);
- if ((new_state == GapStateAdvLowPower) && ((gap->state == GapStateAdvFast) || (gap->state == GapStateAdvLowPower))) {
+ if((new_state == GapStateAdvLowPower) &&
+ ((gap->state == GapStateAdvFast) || (gap->state == GapStateAdvLowPower))) {
// Stop advertising
status = aci_gap_set_non_discoverable();
- if (status) {
+ if(status) {
FURI_LOG_E(TAG, "Stop Advertising Failed, result: %d", status);
}
}
// Configure advertising
- status = aci_gap_set_discoverable(ADV_IND, min_interval, max_interval, PUBLIC_ADDR, 0,
- strlen(gap->service.adv_name), (uint8_t*)gap->service.adv_name,
- gap->service.adv_svc_uuid_len, gap->service.adv_svc_uuid, 0, 0);
+ status = aci_gap_set_discoverable(
+ ADV_IND,
+ min_interval,
+ max_interval,
+ PUBLIC_ADDR,
+ 0,
+ strlen(gap->service.adv_name),
+ (uint8_t*)gap->service.adv_name,
+ gap->service.adv_svc_uuid_len,
+ gap->service.adv_svc_uuid,
+ 0,
+ 0);
if(status) {
FURI_LOG_E(TAG, "Set discoverable err: %d", status);
}
@@ -398,7 +431,7 @@ static void gap_advetise_timer_callback(void* context) {
}
bool gap_init(GapConfig* config, GapEventCallback on_event_cb, void* context) {
- if (!ble_glue_is_radio_stack_ready()) {
+ if(!ble_glue_is_radio_stack_ready()) {
return false;
}
@@ -446,7 +479,7 @@ GapState gap_get_state() {
if(gap) {
osMutexAcquire(gap->state_mutex, osWaitForever);
state = gap->state;
- osMutexRelease(gap->state_mutex );
+ osMutexRelease(gap->state_mutex);
} else {
state = GapStateUninitialized;
}
@@ -490,7 +523,7 @@ void gap_thread_stop() {
}
}
-static int32_t gap_app(void *context) {
+static int32_t gap_app(void* context) {
GapCommand command;
while(1) {
osStatus_t status = osMessageQueueGet(gap->command_queue, &command, NULL, osWaitForever);
diff --git a/firmware/targets/f6/ble-glue/gap.h b/firmware/targets/f6/ble_glue/gap.h
index 2ea3cdd2..635a4c3c 100644
--- a/firmware/targets/f6/ble-glue/gap.h
+++ b/firmware/targets/f6/ble_glue/gap.h
@@ -3,7 +3,7 @@
#include <stdint.h>
#include <stdbool.h>
-#include <furi-hal-version.h>
+#include <furi_hal_version.h>
#define GAP_MAC_ADDR_SIZE (6)
@@ -31,14 +31,14 @@ typedef struct {
GapEventData data;
} GapEvent;
-typedef bool(*GapEventCallback) (GapEvent event, void* context);
+typedef bool (*GapEventCallback)(GapEvent event, void* context);
typedef struct {
uint8_t type;
uint8_t mac[6];
} GapAddress;
-typedef void(*GapScanCallback) (GapAddress address, void* context);
+typedef void (*GapScanCallback)(GapAddress address, void* context);
typedef enum {
GapStateUninitialized,
diff --git a/firmware/targets/f7/ble-glue/hid_service.c b/firmware/targets/f6/ble_glue/hid_service.c
index dc9a7fa5..ec8854e6 100644
--- a/firmware/targets/f7/ble-glue/hid_service.c
+++ b/firmware/targets/f6/ble_glue/hid_service.c
@@ -19,9 +19,9 @@ typedef struct {
static HIDSvc* hid_svc = NULL;
-static SVCCTL_EvtAckStatus_t hid_svc_event_handler(void *event) {
+static SVCCTL_EvtAckStatus_t hid_svc_event_handler(void* event) {
SVCCTL_EvtAckStatus_t ret = SVCCTL_EvtNotAck;
- hci_event_pckt* event_pckt = (hci_event_pckt *)(((hci_uart_pckt*)event)->data);
+ hci_event_pckt* event_pckt = (hci_event_pckt*)(((hci_uart_pckt*)event)->data);
evt_blecore_aci* blecore_evt = (evt_blecore_aci*)event_pckt->data;
// aci_gatt_attribute_modified_event_rp0* attribute_modified;
if(event_pckt->evt == HCI_VENDOR_SPECIFIC_DEBUG_EVT_CODE) {
@@ -47,130 +47,131 @@ void hid_svc_start() {
SVCCTL_RegisterSvcHandler(hid_svc_event_handler);
// Add service
svc_uuid.Service_UUID_16 = HUMAN_INTERFACE_DEVICE_SERVICE_UUID;
- status = aci_gatt_add_service(UUID_TYPE_16,
- &svc_uuid,
- PRIMARY_SERVICE,
- 30,
- &hid_svc->svc_handle);
+ status =
+ aci_gatt_add_service(UUID_TYPE_16, &svc_uuid, PRIMARY_SERVICE, 30, &hid_svc->svc_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add HID service: %d", status);
}
// Add Protocol mode characterstics
char_uuid.Char_UUID_16 = PROTOCOL_MODE_CHAR_UUID;
- status = aci_gatt_add_char(hid_svc->svc_handle,
- UUID_TYPE_16,
- &char_uuid,
- 1,
- CHAR_PROP_READ | CHAR_PROP_WRITE_WITHOUT_RESP,
- ATTR_PERMISSION_NONE,
- GATT_NOTIFY_ATTRIBUTE_WRITE,
- 10,
- CHAR_VALUE_LEN_CONSTANT,
- &hid_svc->protocol_mode_char_handle);
+ status = aci_gatt_add_char(
+ hid_svc->svc_handle,
+ UUID_TYPE_16,
+ &char_uuid,
+ 1,
+ CHAR_PROP_READ | CHAR_PROP_WRITE_WITHOUT_RESP,
+ ATTR_PERMISSION_NONE,
+ GATT_NOTIFY_ATTRIBUTE_WRITE,
+ 10,
+ CHAR_VALUE_LEN_CONSTANT,
+ &hid_svc->protocol_mode_char_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add protocol mode characteristic: %d", status);
}
// Update Protocol mode characteristic
uint8_t protocol_mode = 1;
- status = aci_gatt_update_char_value(hid_svc->svc_handle,
- hid_svc->protocol_mode_char_handle,
- 0,
- 1,
- &protocol_mode);
+ status = aci_gatt_update_char_value(
+ hid_svc->svc_handle, hid_svc->protocol_mode_char_handle, 0, 1, &protocol_mode);
if(status) {
FURI_LOG_E(TAG, "Failed to update protocol mode characteristic: %d", status);
}
// Add Report characterstics
char_uuid.Char_UUID_16 = REPORT_CHAR_UUID;
- status = aci_gatt_add_char(hid_svc->svc_handle,
- UUID_TYPE_16,
- &char_uuid,
- HID_SVC_REPORT_MAX_LEN,
- CHAR_PROP_READ | CHAR_PROP_NOTIFY,
- ATTR_PERMISSION_NONE,
- GATT_DONT_NOTIFY_EVENTS,
- 10,
- CHAR_VALUE_LEN_VARIABLE,
- &hid_svc->report_char_handle);
+ status = aci_gatt_add_char(
+ hid_svc->svc_handle,
+ UUID_TYPE_16,
+ &char_uuid,
+ HID_SVC_REPORT_MAX_LEN,
+ CHAR_PROP_READ | CHAR_PROP_NOTIFY,
+ ATTR_PERMISSION_NONE,
+ GATT_DONT_NOTIFY_EVENTS,
+ 10,
+ CHAR_VALUE_LEN_VARIABLE,
+ &hid_svc->report_char_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add report characteristic: %d", status);
}
// Add Report descriptor
uint8_t desc_val[] = {0x00, 0x01};
desc_uuid.Char_UUID_16 = REPORT_REFERENCE_DESCRIPTOR_UUID;
- status = aci_gatt_add_char_desc(hid_svc->svc_handle,
- hid_svc->report_char_handle,
- UUID_TYPE_16,
- &desc_uuid,
- HID_SVC_REPORT_REF_LEN,
- HID_SVC_REPORT_REF_LEN,
- desc_val,
- ATTR_PERMISSION_NONE,
- ATTR_ACCESS_READ_ONLY,
- GATT_DONT_NOTIFY_EVENTS,
- MIN_ENCRY_KEY_SIZE,
- CHAR_VALUE_LEN_CONSTANT,
- &hid_svc->report_ref_desc_handle);
+ status = aci_gatt_add_char_desc(
+ hid_svc->svc_handle,
+ hid_svc->report_char_handle,
+ UUID_TYPE_16,
+ &desc_uuid,
+ HID_SVC_REPORT_REF_LEN,
+ HID_SVC_REPORT_REF_LEN,
+ desc_val,
+ ATTR_PERMISSION_NONE,
+ ATTR_ACCESS_READ_ONLY,
+ GATT_DONT_NOTIFY_EVENTS,
+ MIN_ENCRY_KEY_SIZE,
+ CHAR_VALUE_LEN_CONSTANT,
+ &hid_svc->report_ref_desc_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add report reference descriptor: %d", status);
}
// Add Report Map characteristic
char_uuid.Char_UUID_16 = REPORT_MAP_CHAR_UUID;
- status = aci_gatt_add_char(hid_svc->svc_handle,
- UUID_TYPE_16,
- &char_uuid,
- HID_SVC_REPORT_MAP_MAX_LEN,
- CHAR_PROP_READ,
- ATTR_PERMISSION_NONE,
- GATT_DONT_NOTIFY_EVENTS,
- 10,
- CHAR_VALUE_LEN_VARIABLE,
- &hid_svc->report_map_char_handle);
+ status = aci_gatt_add_char(
+ hid_svc->svc_handle,
+ UUID_TYPE_16,
+ &char_uuid,
+ HID_SVC_REPORT_MAP_MAX_LEN,
+ CHAR_PROP_READ,
+ ATTR_PERMISSION_NONE,
+ GATT_DONT_NOTIFY_EVENTS,
+ 10,
+ CHAR_VALUE_LEN_VARIABLE,
+ &hid_svc->report_map_char_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add report map characteristic: %d", status);
}
// Add Boot Keyboard characteristic
char_uuid.Char_UUID_16 = BOOT_KEYBOARD_INPUT_REPORT_CHAR_UUID;
- status = aci_gatt_add_char(hid_svc->svc_handle,
- UUID_TYPE_16,
- &char_uuid,
- HID_SVC_BOOT_KEYBOARD_INPUT_REPORT_MAX_LEN,
- CHAR_PROP_READ | CHAR_PROP_NOTIFY,
- ATTR_PERMISSION_NONE,
- GATT_NOTIFY_WRITE_REQ_AND_WAIT_FOR_APPL_RESP,
- 10,
- CHAR_VALUE_LEN_VARIABLE,
- &hid_svc->keyboard_boot_char_handle);
+ status = aci_gatt_add_char(
+ hid_svc->svc_handle,
+ UUID_TYPE_16,
+ &char_uuid,
+ HID_SVC_BOOT_KEYBOARD_INPUT_REPORT_MAX_LEN,
+ CHAR_PROP_READ | CHAR_PROP_NOTIFY,
+ ATTR_PERMISSION_NONE,
+ GATT_NOTIFY_WRITE_REQ_AND_WAIT_FOR_APPL_RESP,
+ 10,
+ CHAR_VALUE_LEN_VARIABLE,
+ &hid_svc->keyboard_boot_char_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add report map characteristic: %d", status);
}
// Add Information characteristic
char_uuid.Char_UUID_16 = HID_INFORMATION_CHAR_UUID;
- status = aci_gatt_add_char(hid_svc->svc_handle,
- UUID_TYPE_16,
- &char_uuid,
- HID_SVC_INFO_LEN,
- CHAR_PROP_READ,
- ATTR_PERMISSION_NONE,
- GATT_DONT_NOTIFY_EVENTS,
- 10,
- CHAR_VALUE_LEN_CONSTANT,
- &hid_svc->info_char_handle);
+ status = aci_gatt_add_char(
+ hid_svc->svc_handle,
+ UUID_TYPE_16,
+ &char_uuid,
+ HID_SVC_INFO_LEN,
+ CHAR_PROP_READ,
+ ATTR_PERMISSION_NONE,
+ GATT_DONT_NOTIFY_EVENTS,
+ 10,
+ CHAR_VALUE_LEN_CONSTANT,
+ &hid_svc->info_char_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add information characteristic: %d", status);
}
// Add Control Point characteristic
char_uuid.Char_UUID_16 = HID_CONTROL_POINT_CHAR_UUID;
- status = aci_gatt_add_char(hid_svc->svc_handle,
- UUID_TYPE_16,
- &char_uuid,
- HID_SVC_CONTROL_POINT_LEN,
- CHAR_PROP_WRITE_WITHOUT_RESP,
- ATTR_PERMISSION_NONE,
- GATT_NOTIFY_ATTRIBUTE_WRITE,
- 10,
- CHAR_VALUE_LEN_CONSTANT,
- &hid_svc->ctrl_point_char_handle);
+ status = aci_gatt_add_char(
+ hid_svc->svc_handle,
+ UUID_TYPE_16,
+ &char_uuid,
+ HID_SVC_CONTROL_POINT_LEN,
+ CHAR_PROP_WRITE_WITHOUT_RESP,
+ ATTR_PERMISSION_NONE,
+ GATT_NOTIFY_ATTRIBUTE_WRITE,
+ 10,
+ CHAR_VALUE_LEN_CONSTANT,
+ &hid_svc->ctrl_point_char_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add control point characteristic: %d", status);
}
@@ -180,11 +181,8 @@ bool hid_svc_update_report_map(uint8_t* data, uint16_t len) {
furi_assert(data);
furi_assert(hid_svc);
- tBleStatus status = aci_gatt_update_char_value(hid_svc->svc_handle,
- hid_svc->report_map_char_handle,
- 0,
- len,
- data);
+ tBleStatus status = aci_gatt_update_char_value(
+ hid_svc->svc_handle, hid_svc->report_map_char_handle, 0, len, data);
if(status) {
FURI_LOG_E(TAG, "Failed updating report map characteristic");
return false;
@@ -196,11 +194,8 @@ bool hid_svc_update_input_report(uint8_t* data, uint16_t len) {
furi_assert(data);
furi_assert(hid_svc);
- tBleStatus status = aci_gatt_update_char_value(hid_svc->svc_handle,
- hid_svc->report_char_handle,
- 0,
- len,
- data);
+ tBleStatus status =
+ aci_gatt_update_char_value(hid_svc->svc_handle, hid_svc->report_char_handle, 0, len, data);
if(status) {
FURI_LOG_E(TAG, "Failed updating report characteristic");
return false;
@@ -212,11 +207,8 @@ bool hid_svc_update_info(uint8_t* data, uint16_t len) {
furi_assert(data);
furi_assert(hid_svc);
- tBleStatus status = aci_gatt_update_char_value(hid_svc->svc_handle,
- hid_svc->info_char_handle,
- 0,
- len,
- data);
+ tBleStatus status =
+ aci_gatt_update_char_value(hid_svc->svc_handle, hid_svc->info_char_handle, 0, len, data);
if(status) {
FURI_LOG_E(TAG, "Failed updating info characteristic");
return false;
diff --git a/firmware/targets/f6/ble-glue/hid_service.h b/firmware/targets/f6/ble_glue/hid_service.h
index ed1394be..ed1394be 100644
--- a/firmware/targets/f6/ble-glue/hid_service.h
+++ b/firmware/targets/f6/ble_glue/hid_service.h
diff --git a/firmware/targets/f7/ble-glue/hw_conf.h b/firmware/targets/f6/ble_glue/hw_conf.h
index 9545238b..bf18a7d0 100644
--- a/firmware/targets/f7/ble-glue/hw_conf.h
+++ b/firmware/targets/f6/ble_glue/hw_conf.h
@@ -33,7 +33,7 @@
* Index of the semaphore used the prevent conflicts after standby sleep.
* Each CPUs takes this semaphore at standby wakeup until conclicting elements are restored.
*/
-#define CFG_HW_PWR_STANDBY_SEMID 10
+#define CFG_HW_PWR_STANDBY_SEMID 10
/**
* The CPU2 may be configured to store the Thread persistent data either in internal NVM storage on CPU2 or in
* SRAM2 buffer provided by the user application. This can be configured with the system command SHCI_C2_Config()
@@ -45,7 +45,7 @@
* CFG_HW_THREAD_NVM_SRAM_SEMID semaphore makes sure CPU2 does not update the persistent data in SRAM2 at the same time CPU1 is reading them.
* There is no timing constraint on how long this semaphore can be kept.
*/
-#define CFG_HW_THREAD_NVM_SRAM_SEMID 9
+#define CFG_HW_THREAD_NVM_SRAM_SEMID 9
/**
* The CPU2 may be configured to store the BLE persistent data either in internal NVM storage on CPU2 or in
@@ -58,7 +58,7 @@
* CFG_HW_BLE_NVM_SRAM_SEMID semaphore makes sure CPU2 does not update the persistent data in SRAM2 at the same time CPU1 is reading them.
* There is no timing constraint on how long this semaphore can be kept.
*/
-#define CFG_HW_BLE_NVM_SRAM_SEMID 8
+#define CFG_HW_BLE_NVM_SRAM_SEMID 8
/**
* Index of the semaphore used by CPU2 to prevent the CPU1 to either write or erase data in flash
@@ -71,7 +71,7 @@
* By default, CPU2 is using the PES bit to protect its timing. The CPU1 may request the CPU2 to use the semaphore
* instead of the PES bit by sending the system command SHCI_C2_SetFlashActivityControl()
*/
-#define CFG_HW_BLOCK_FLASH_REQ_BY_CPU2_SEMID 7
+#define CFG_HW_BLOCK_FLASH_REQ_BY_CPU2_SEMID 7
/**
* Index of the semaphore used by CPU1 to prevent the CPU2 to either write or erase data in flash
@@ -79,7 +79,7 @@
* write or erase in flash (as this will stall both CPUs)
* The PES bit shall not be used as this may stall the CPU2 in some cases.
*/
-#define CFG_HW_BLOCK_FLASH_REQ_BY_CPU1_SEMID 6
+#define CFG_HW_BLOCK_FLASH_REQ_BY_CPU1_SEMID 6
/**
* Index of the semaphore used to manage the CLK48 clock configuration
@@ -88,22 +88,22 @@
* When using the RNG, it is good enough to use CFG_HW_RNG_SEMID to control CLK48.
* More details in AN5289
*/
-#define CFG_HW_CLK48_CONFIG_SEMID 5
+#define CFG_HW_CLK48_CONFIG_SEMID 5
/* Index of the semaphore used to manage the entry Stop Mode procedure */
-#define CFG_HW_ENTRY_STOP_MODE_SEMID 4
+#define CFG_HW_ENTRY_STOP_MODE_SEMID 4
/* Index of the semaphore used to access the RCC */
-#define CFG_HW_RCC_SEMID 3
+#define CFG_HW_RCC_SEMID 3
/* Index of the semaphore used to access the FLASH */
-#define CFG_HW_FLASH_SEMID 2
+#define CFG_HW_FLASH_SEMID 2
/* Index of the semaphore used to access the PKA */
-#define CFG_HW_PKA_SEMID 1
+#define CFG_HW_PKA_SEMID 1
/* Index of the semaphore used to access the RNG */
-#define CFG_HW_RNG_SEMID 0
+#define CFG_HW_RNG_SEMID 0
/******************************************************************************
* HW TIMER SERVER
@@ -112,14 +112,15 @@
* The user may define the maximum number of virtual timers supported.
* It shall not exceed 255
*/
-#define CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER 6
+#define CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER 6
/**
* The user may define the priority in the NVIC of the RTC_WKUP interrupt handler that is used to manage the
* wakeup timer.
* This setting is the preemptpriority part of the NVIC.
*/
-#define CFG_HW_TS_NVIC_RTC_WAKEUP_IT_PREEMPTPRIO (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY + 1) /* FreeRTOS requirement */
+#define CFG_HW_TS_NVIC_RTC_WAKEUP_IT_PREEMPTPRIO \
+ (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY + 1) /* FreeRTOS requirement */
/**
* The user may define the priority in the NVIC of the RTC_WKUP interrupt handler that is used to manage the
@@ -127,7 +128,7 @@
* This setting is the subpriority part of the NVIC. It does not exist on all processors. When it is not supported
* on the CPU, the setting is ignored
*/
-#define CFG_HW_TS_NVIC_RTC_WAKEUP_IT_SUBPRIO 0
+#define CFG_HW_TS_NVIC_RTC_WAKEUP_IT_SUBPRIO 0
/**
* Define a critical section in the Timer server
@@ -143,7 +144,7 @@
* re-implement TIMER_ENTER_CRITICAL_SECTION and TIMER_EXIT_CRITICAL_SECTION and shall make sure that no TimerServer
* API are called when the TIMER critical section is entered
*/
-#define CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION 1
+#define CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION 1
/**
* This value shall reflect the maximum delay there could be in the application between the time the RTC interrupt
@@ -156,74 +157,74 @@
* recommended to select a value large enough to make sure it is not too short to ensure reliability of the system
* as this will have marginal impact on low power mode
*/
-#define CFG_HW_TS_RTC_HANDLER_MAX_DELAY ( 10 * (LSI_VALUE/1000) )
+#define CFG_HW_TS_RTC_HANDLER_MAX_DELAY (10 * (LSI_VALUE / 1000))
- /**
+/**
* Interrupt ID in the NVIC of the RTC Wakeup interrupt handler
* It shall be type of IRQn_Type
*/
-#define CFG_HW_TS_RTC_WAKEUP_HANDLER_ID RTC_WKUP_IRQn
+#define CFG_HW_TS_RTC_WAKEUP_HANDLER_ID RTC_WKUP_IRQn
/******************************************************************************
* HW UART
*****************************************************************************/
-#define CFG_HW_LPUART1_ENABLED 0
-#define CFG_HW_LPUART1_DMA_TX_SUPPORTED 0
+#define CFG_HW_LPUART1_ENABLED 0
+#define CFG_HW_LPUART1_DMA_TX_SUPPORTED 0
-#define CFG_HW_USART1_ENABLED 1
-#define CFG_HW_USART1_DMA_TX_SUPPORTED 1
+#define CFG_HW_USART1_ENABLED 1
+#define CFG_HW_USART1_DMA_TX_SUPPORTED 1
/**
* UART1
*/
-#define CFG_HW_USART1_PREEMPTPRIORITY 0x0F
-#define CFG_HW_USART1_SUBPRIORITY 0
+#define CFG_HW_USART1_PREEMPTPRIORITY 0x0F
+#define CFG_HW_USART1_SUBPRIORITY 0
/** < The application shall check the selected source clock is enable */
-#define CFG_HW_USART1_SOURCE_CLOCK RCC_USART1CLKSOURCE_SYSCLK
-
-#define CFG_HW_USART1_BAUDRATE 115200
-#define CFG_HW_USART1_WORDLENGTH UART_WORDLENGTH_8B
-#define CFG_HW_USART1_STOPBITS UART_STOPBITS_1
-#define CFG_HW_USART1_PARITY UART_PARITY_NONE
-#define CFG_HW_USART1_HWFLOWCTL UART_HWCONTROL_NONE
-#define CFG_HW_USART1_MODE UART_MODE_TX_RX
-#define CFG_HW_USART1_ADVFEATUREINIT UART_ADVFEATURE_NO_INIT
-#define CFG_HW_USART1_OVERSAMPLING UART_OVERSAMPLING_8
-
-#define CFG_HW_USART1_TX_PORT_CLK_ENABLE __HAL_RCC_GPIOB_CLK_ENABLE
-#define CFG_HW_USART1_TX_PORT GPIOB
-#define CFG_HW_USART1_TX_PIN GPIO_PIN_6
-#define CFG_HW_USART1_TX_MODE GPIO_MODE_AF_PP
-#define CFG_HW_USART1_TX_PULL GPIO_NOPULL
-#define CFG_HW_USART1_TX_SPEED GPIO_SPEED_FREQ_VERY_HIGH
-#define CFG_HW_USART1_TX_ALTERNATE GPIO_AF7_USART1
-
-#define CFG_HW_USART1_RX_PORT_CLK_ENABLE __HAL_RCC_GPIOB_CLK_ENABLE
-#define CFG_HW_USART1_RX_PORT GPIOB
-#define CFG_HW_USART1_RX_PIN GPIO_PIN_7
-#define CFG_HW_USART1_RX_MODE GPIO_MODE_AF_PP
-#define CFG_HW_USART1_RX_PULL GPIO_NOPULL
-#define CFG_HW_USART1_RX_SPEED GPIO_SPEED_FREQ_VERY_HIGH
-#define CFG_HW_USART1_RX_ALTERNATE GPIO_AF7_USART1
-
-#define CFG_HW_USART1_CTS_PORT_CLK_ENABLE __HAL_RCC_GPIOA_CLK_ENABLE
-#define CFG_HW_USART1_CTS_PORT GPIOA
-#define CFG_HW_USART1_CTS_PIN GPIO_PIN_11
-#define CFG_HW_USART1_CTS_MODE GPIO_MODE_AF_PP
-#define CFG_HW_USART1_CTS_PULL GPIO_PULLDOWN
-#define CFG_HW_USART1_CTS_SPEED GPIO_SPEED_FREQ_VERY_HIGH
-#define CFG_HW_USART1_CTS_ALTERNATE GPIO_AF7_USART1
-
-#define CFG_HW_USART1_DMA_TX_PREEMPTPRIORITY 0x0F
-#define CFG_HW_USART1_DMA_TX_SUBPRIORITY 0
-
-#define CFG_HW_USART1_DMAMUX_CLK_ENABLE __HAL_RCC_DMAMUX1_CLK_ENABLE
-#define CFG_HW_USART1_DMA_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE
-#define CFG_HW_USART1_TX_DMA_REQ DMA_REQUEST_USART1_TX
-#define CFG_HW_USART1_TX_DMA_CHANNEL DMA2_Channel4
-#define CFG_HW_USART1_TX_DMA_IRQn DMA2_Channel4_IRQn
-#define CFG_HW_USART1_DMA_TX_IRQHandler DMA2_Channel4_IRQHandler
+#define CFG_HW_USART1_SOURCE_CLOCK RCC_USART1CLKSOURCE_SYSCLK
+
+#define CFG_HW_USART1_BAUDRATE 115200
+#define CFG_HW_USART1_WORDLENGTH UART_WORDLENGTH_8B
+#define CFG_HW_USART1_STOPBITS UART_STOPBITS_1
+#define CFG_HW_USART1_PARITY UART_PARITY_NONE
+#define CFG_HW_USART1_HWFLOWCTL UART_HWCONTROL_NONE
+#define CFG_HW_USART1_MODE UART_MODE_TX_RX
+#define CFG_HW_USART1_ADVFEATUREINIT UART_ADVFEATURE_NO_INIT
+#define CFG_HW_USART1_OVERSAMPLING UART_OVERSAMPLING_8
+
+#define CFG_HW_USART1_TX_PORT_CLK_ENABLE __HAL_RCC_GPIOB_CLK_ENABLE
+#define CFG_HW_USART1_TX_PORT GPIOB
+#define CFG_HW_USART1_TX_PIN GPIO_PIN_6
+#define CFG_HW_USART1_TX_MODE GPIO_MODE_AF_PP
+#define CFG_HW_USART1_TX_PULL GPIO_NOPULL
+#define CFG_HW_USART1_TX_SPEED GPIO_SPEED_FREQ_VERY_HIGH
+#define CFG_HW_USART1_TX_ALTERNATE GPIO_AF7_USART1
+
+#define CFG_HW_USART1_RX_PORT_CLK_ENABLE __HAL_RCC_GPIOB_CLK_ENABLE
+#define CFG_HW_USART1_RX_PORT GPIOB
+#define CFG_HW_USART1_RX_PIN GPIO_PIN_7
+#define CFG_HW_USART1_RX_MODE GPIO_MODE_AF_PP
+#define CFG_HW_USART1_RX_PULL GPIO_NOPULL
+#define CFG_HW_USART1_RX_SPEED GPIO_SPEED_FREQ_VERY_HIGH
+#define CFG_HW_USART1_RX_ALTERNATE GPIO_AF7_USART1
+
+#define CFG_HW_USART1_CTS_PORT_CLK_ENABLE __HAL_RCC_GPIOA_CLK_ENABLE
+#define CFG_HW_USART1_CTS_PORT GPIOA
+#define CFG_HW_USART1_CTS_PIN GPIO_PIN_11
+#define CFG_HW_USART1_CTS_MODE GPIO_MODE_AF_PP
+#define CFG_HW_USART1_CTS_PULL GPIO_PULLDOWN
+#define CFG_HW_USART1_CTS_SPEED GPIO_SPEED_FREQ_VERY_HIGH
+#define CFG_HW_USART1_CTS_ALTERNATE GPIO_AF7_USART1
+
+#define CFG_HW_USART1_DMA_TX_PREEMPTPRIORITY 0x0F
+#define CFG_HW_USART1_DMA_TX_SUBPRIORITY 0
+
+#define CFG_HW_USART1_DMAMUX_CLK_ENABLE __HAL_RCC_DMAMUX1_CLK_ENABLE
+#define CFG_HW_USART1_DMA_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE
+#define CFG_HW_USART1_TX_DMA_REQ DMA_REQUEST_USART1_TX
+#define CFG_HW_USART1_TX_DMA_CHANNEL DMA2_Channel4
+#define CFG_HW_USART1_TX_DMA_IRQn DMA2_Channel4_IRQn
+#define CFG_HW_USART1_DMA_TX_IRQHandler DMA2_Channel4_IRQHandler
#endif /*HW_CONF_H */
diff --git a/firmware/targets/f6/ble-glue/hw_if.h b/firmware/targets/f6/ble_glue/hw_if.h
index f9dc0a6d..a0ac23df 100644
--- a/firmware/targets/f6/ble-glue/hw_if.h
+++ b/firmware/targets/f6/ble_glue/hw_if.h
@@ -27,7 +27,7 @@
extern "C" {
#endif
- /* Includes ------------------------------------------------------------------*/
+/* Includes ------------------------------------------------------------------*/
#include "stm32wbxx.h"
#include "stm32wbxx_ll_exti.h"
#include "stm32wbxx_ll_system.h"
@@ -41,13 +41,13 @@ extern "C" {
#include "stm32wbxx_ll_gpio.h"
#include "stm32wbxx_ll_rtc.h"
-#ifdef USE_STM32WBXX_USB_DONGLE
+#ifdef USE_STM32WBXX_USB_DONGLE
#include "stm32wbxx_usb_dongle.h"
#endif
-#ifdef USE_STM32WBXX_NUCLEO
+#ifdef USE_STM32WBXX_NUCLEO
#include "stm32wbxx_nucleo.h"
#endif
-#ifdef USE_X_NUCLEO_EPD
+#ifdef USE_X_NUCLEO_EPD
#include "x_nucleo_epd.h"
#endif
@@ -56,31 +56,42 @@ extern "C" {
/* USER CODE END Includes */
- /******************************************************************************
+/******************************************************************************
* HW UART
******************************************************************************/
- typedef enum
- {
+typedef enum {
hw_uart1,
hw_uart2,
hw_lpuart1,
- } hw_uart_id_t;
+} hw_uart_id_t;
- typedef enum
- {
+typedef enum {
hw_uart_ok,
hw_uart_error,
hw_uart_busy,
hw_uart_to,
- } hw_status_t;
+} hw_status_t;
- void HW_UART_Init(hw_uart_id_t hw_uart_id);
- void HW_UART_Receive_IT(hw_uart_id_t hw_uart_id, uint8_t *pData, uint16_t Size, void (*Callback)(void));
- void HW_UART_Transmit_IT(hw_uart_id_t hw_uart_id, uint8_t *pData, uint16_t Size, void (*Callback)(void));
- hw_status_t HW_UART_Transmit(hw_uart_id_t hw_uart_id, uint8_t *p_data, uint16_t size, uint32_t timeout);
- hw_status_t HW_UART_Transmit_DMA(hw_uart_id_t hw_uart_id, uint8_t *p_data, uint16_t size, void (*Callback)(void));
- void HW_UART_Interrupt_Handler(hw_uart_id_t hw_uart_id);
- void HW_UART_DMA_Interrupt_Handler(hw_uart_id_t hw_uart_id);
+void HW_UART_Init(hw_uart_id_t hw_uart_id);
+void HW_UART_Receive_IT(
+ hw_uart_id_t hw_uart_id,
+ uint8_t* pData,
+ uint16_t Size,
+ void (*Callback)(void));
+void HW_UART_Transmit_IT(
+ hw_uart_id_t hw_uart_id,
+ uint8_t* pData,
+ uint16_t Size,
+ void (*Callback)(void));
+hw_status_t
+ HW_UART_Transmit(hw_uart_id_t hw_uart_id, uint8_t* p_data, uint16_t size, uint32_t timeout);
+hw_status_t HW_UART_Transmit_DMA(
+ hw_uart_id_t hw_uart_id,
+ uint8_t* p_data,
+ uint16_t size,
+ void (*Callback)(void));
+void HW_UART_Interrupt_Handler(hw_uart_id_t hw_uart_id);
+void HW_UART_DMA_Interrupt_Handler(hw_uart_id_t hw_uart_id);
#ifdef __cplusplus
}
diff --git a/firmware/targets/f6/ble_glue/hw_ipcc.c b/firmware/targets/f6/ble_glue/hw_ipcc.c
new file mode 100644
index 00000000..ab404327
--- /dev/null
+++ b/firmware/targets/f6/ble_glue/hw_ipcc.c
@@ -0,0 +1,597 @@
+/**
+ ******************************************************************************
+ * File Name : Target/hw_ipcc.c
+ * Description : Hardware IPCC source file for STM32WPAN Middleware.
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "app_common.h"
+#include "mbox_def.h"
+
+/* Global variables ---------------------------------------------------------*/
+/* Private defines -----------------------------------------------------------*/
+#define HW_IPCC_TX_PENDING(channel) \
+ (!(LL_C1_IPCC_IsActiveFlag_CHx(IPCC, channel))) && (((~(IPCC->C1MR)) & (channel << 16U)))
+#define HW_IPCC_RX_PENDING(channel) \
+ (LL_C2_IPCC_IsActiveFlag_CHx(IPCC, channel)) && (((~(IPCC->C1MR)) & (channel << 0U)))
+
+/* Private macros ------------------------------------------------------------*/
+/* Private typedef -----------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+static void (*FreeBufCb)(void);
+
+/* Private function prototypes -----------------------------------------------*/
+static void HW_IPCC_BLE_EvtHandler(void);
+static void HW_IPCC_BLE_AclDataEvtHandler(void);
+static void HW_IPCC_MM_FreeBufHandler(void);
+static void HW_IPCC_SYS_CmdEvtHandler(void);
+static void HW_IPCC_SYS_EvtHandler(void);
+static void HW_IPCC_TRACES_EvtHandler(void);
+
+#ifdef THREAD_WB
+static void HW_IPCC_OT_CmdEvtHandler(void);
+static void HW_IPCC_THREAD_NotEvtHandler(void);
+static void HW_IPCC_THREAD_CliNotEvtHandler(void);
+#endif
+
+#ifdef LLD_TESTS_WB
+static void HW_IPCC_LLDTESTS_ReceiveCliRspHandler(void);
+static void HW_IPCC_LLDTESTS_ReceiveM0CmdHandler(void);
+#endif
+#ifdef LLD_BLE_WB
+/*static void HW_IPCC_LLD_BLE_ReceiveCliRspHandler( void );*/
+static void HW_IPCC_LLD_BLE_ReceiveRspHandler(void);
+static void HW_IPCC_LLD_BLE_ReceiveM0CmdHandler(void);
+#endif
+
+#ifdef MAC_802_15_4_WB
+static void HW_IPCC_MAC_802_15_4_CmdEvtHandler(void);
+static void HW_IPCC_MAC_802_15_4_NotEvtHandler(void);
+#endif
+
+#ifdef ZIGBEE_WB
+static void HW_IPCC_ZIGBEE_CmdEvtHandler(void);
+static void HW_IPCC_ZIGBEE_StackNotifEvtHandler(void);
+static void HW_IPCC_ZIGBEE_StackM0RequestHandler(void);
+#endif
+
+/* Public function definition -----------------------------------------------*/
+
+/******************************************************************************
+ * INTERRUPT HANDLER
+ ******************************************************************************/
+void HW_IPCC_Rx_Handler(void) {
+ if(HW_IPCC_RX_PENDING(HW_IPCC_SYSTEM_EVENT_CHANNEL)) {
+ HW_IPCC_SYS_EvtHandler();
+ }
+#ifdef MAC_802_15_4_WB
+ else if(HW_IPCC_RX_PENDING(HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL)) {
+ HW_IPCC_MAC_802_15_4_NotEvtHandler();
+ }
+#endif /* MAC_802_15_4_WB */
+#ifdef THREAD_WB
+ else if(HW_IPCC_RX_PENDING(HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL)) {
+ HW_IPCC_THREAD_NotEvtHandler();
+ } else if(HW_IPCC_RX_PENDING(HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL)) {
+ HW_IPCC_THREAD_CliNotEvtHandler();
+ }
+#endif /* THREAD_WB */
+#ifdef LLD_TESTS_WB
+ else if(HW_IPCC_RX_PENDING(HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL)) {
+ HW_IPCC_LLDTESTS_ReceiveCliRspHandler();
+ } else if(HW_IPCC_RX_PENDING(HW_IPCC_LLDTESTS_M0_CMD_CHANNEL)) {
+ HW_IPCC_LLDTESTS_ReceiveM0CmdHandler();
+ }
+#endif /* LLD_TESTS_WB */
+#ifdef LLD_BLE_WB
+ else if(HW_IPCC_RX_PENDING(HW_IPCC_LLD_BLE_RSP_CHANNEL)) {
+ HW_IPCC_LLD_BLE_ReceiveRspHandler();
+ } else if(HW_IPCC_RX_PENDING(HW_IPCC_LLD_BLE_M0_CMD_CHANNEL)) {
+ HW_IPCC_LLD_BLE_ReceiveM0CmdHandler();
+ }
+#endif /* LLD_TESTS_WB */
+#ifdef ZIGBEE_WB
+ else if(HW_IPCC_RX_PENDING(HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL)) {
+ HW_IPCC_ZIGBEE_StackNotifEvtHandler();
+ } else if(HW_IPCC_RX_PENDING(HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL)) {
+ HW_IPCC_ZIGBEE_StackM0RequestHandler();
+ }
+#endif /* ZIGBEE_WB */
+ else if(HW_IPCC_RX_PENDING(HW_IPCC_BLE_EVENT_CHANNEL)) {
+ HW_IPCC_BLE_EvtHandler();
+ } else if(HW_IPCC_RX_PENDING(HW_IPCC_TRACES_CHANNEL)) {
+ HW_IPCC_TRACES_EvtHandler();
+ }
+
+ return;
+}
+
+void HW_IPCC_Tx_Handler(void) {
+ if(HW_IPCC_TX_PENDING(HW_IPCC_SYSTEM_CMD_RSP_CHANNEL)) {
+ HW_IPCC_SYS_CmdEvtHandler();
+ }
+#ifdef MAC_802_15_4_WB
+ else if(HW_IPCC_TX_PENDING(HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL)) {
+ HW_IPCC_MAC_802_15_4_CmdEvtHandler();
+ }
+#endif /* MAC_802_15_4_WB */
+#ifdef THREAD_WB
+ else if(HW_IPCC_TX_PENDING(HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL)) {
+ HW_IPCC_OT_CmdEvtHandler();
+ }
+#endif /* THREAD_WB */
+#ifdef LLD_TESTS_WB
+// No TX handler for LLD tests
+#endif /* LLD_TESTS_WB */
+#ifdef ZIGBEE_WB
+ if(HW_IPCC_TX_PENDING(HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL)) {
+ HW_IPCC_ZIGBEE_CmdEvtHandler();
+ }
+#endif /* ZIGBEE_WB */
+ else if(HW_IPCC_TX_PENDING(HW_IPCC_SYSTEM_CMD_RSP_CHANNEL)) {
+ HW_IPCC_SYS_CmdEvtHandler();
+ } else if(HW_IPCC_TX_PENDING(HW_IPCC_MM_RELEASE_BUFFER_CHANNEL)) {
+ HW_IPCC_MM_FreeBufHandler();
+ } else if(HW_IPCC_TX_PENDING(HW_IPCC_HCI_ACL_DATA_CHANNEL)) {
+ HW_IPCC_BLE_AclDataEvtHandler();
+ }
+
+ return;
+}
+/******************************************************************************
+ * GENERAL
+ ******************************************************************************/
+void HW_IPCC_Enable(void) {
+ /**
+ * Such as IPCC IP available to the CPU2, it is required to keep the IPCC clock running
+ when FUS is running on CPU2 and CPU1 enters deep sleep mode
+ */
+ LL_C2_AHB3_GRP1_EnableClock(LL_C2_AHB3_GRP1_PERIPH_IPCC);
+
+ /**
+ * When the device is out of standby, it is required to use the EXTI mechanism to wakeup CPU2
+ */
+ LL_C2_EXTI_EnableEvent_32_63(LL_EXTI_LINE_41);
+ LL_EXTI_EnableRisingTrig_32_63(LL_EXTI_LINE_41);
+
+ /**
+ * In case the SBSFU is implemented, it may have already set the C2BOOT bit to startup the CPU2.
+ * In that case, to keep the mechanism transparent to the user application, it shall call the system command
+ * SHCI_C2_Reinit( ) before jumping to the application.
+ * When the CPU2 receives that command, it waits for its event input to be set to restart the CPU2 firmware.
+ * This is required because once C2BOOT has been set once, a clear/set on C2BOOT has no effect.
+ * When SHCI_C2_Reinit( ) is not called, generating an event to the CPU2 does not have any effect
+ * So, by default, the application shall both set the event flag and set the C2BOOT bit.
+ */
+ __SEV(); /* Set the internal event flag and send an event to the CPU2 */
+ __WFE(); /* Clear the internal event flag */
+ LL_PWR_EnableBootC2();
+
+ return;
+}
+
+void HW_IPCC_Init(void) {
+ LL_AHB3_GRP1_EnableClock(LL_AHB3_GRP1_PERIPH_IPCC);
+
+ LL_C1_IPCC_EnableIT_RXO(IPCC);
+ LL_C1_IPCC_EnableIT_TXF(IPCC);
+
+ HAL_NVIC_SetPriority(IPCC_C1_RX_IRQn, 6, 0);
+ HAL_NVIC_EnableIRQ(IPCC_C1_RX_IRQn);
+ HAL_NVIC_SetPriority(IPCC_C1_TX_IRQn, 6, 0);
+ HAL_NVIC_EnableIRQ(IPCC_C1_TX_IRQn);
+
+ return;
+}
+
+/******************************************************************************
+ * BLE
+ ******************************************************************************/
+void HW_IPCC_BLE_Init(void) {
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_BLE_EVENT_CHANNEL);
+
+ return;
+}
+
+void HW_IPCC_BLE_SendCmd(void) {
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_BLE_CMD_CHANNEL);
+
+ return;
+}
+
+static void HW_IPCC_BLE_EvtHandler(void) {
+ HW_IPCC_BLE_RxEvtNot();
+
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_BLE_EVENT_CHANNEL);
+
+ return;
+}
+
+void HW_IPCC_BLE_SendAclData(void) {
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL);
+ LL_C1_IPCC_EnableTransmitChannel(IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL);
+
+ return;
+}
+
+static void HW_IPCC_BLE_AclDataEvtHandler(void) {
+ LL_C1_IPCC_DisableTransmitChannel(IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL);
+
+ HW_IPCC_BLE_AclDataAckNot();
+
+ return;
+}
+
+__weak void HW_IPCC_BLE_AclDataAckNot(void){};
+__weak void HW_IPCC_BLE_RxEvtNot(void){};
+
+/******************************************************************************
+ * SYSTEM
+ ******************************************************************************/
+void HW_IPCC_SYS_Init(void) {
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_SYSTEM_EVENT_CHANNEL);
+
+ return;
+}
+
+void HW_IPCC_SYS_SendCmd(void) {
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL);
+ LL_C1_IPCC_EnableTransmitChannel(IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL);
+
+ return;
+}
+
+static void HW_IPCC_SYS_CmdEvtHandler(void) {
+ LL_C1_IPCC_DisableTransmitChannel(IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL);
+
+ HW_IPCC_SYS_CmdEvtNot();
+
+ return;
+}
+
+static void HW_IPCC_SYS_EvtHandler(void) {
+ HW_IPCC_SYS_EvtNot();
+
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_SYSTEM_EVENT_CHANNEL);
+
+ return;
+}
+
+__weak void HW_IPCC_SYS_CmdEvtNot(void){};
+__weak void HW_IPCC_SYS_EvtNot(void){};
+
+/******************************************************************************
+ * MAC 802.15.4
+ ******************************************************************************/
+#ifdef MAC_802_15_4_WB
+void HW_IPCC_MAC_802_15_4_Init(void) {
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL);
+
+ return;
+}
+
+void HW_IPCC_MAC_802_15_4_SendCmd(void) {
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL);
+ LL_C1_IPCC_EnableTransmitChannel(IPCC, HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL);
+
+ return;
+}
+
+void HW_IPCC_MAC_802_15_4_SendAck(void) {
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL);
+
+ return;
+}
+
+static void HW_IPCC_MAC_802_15_4_CmdEvtHandler(void) {
+ LL_C1_IPCC_DisableTransmitChannel(IPCC, HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL);
+
+ HW_IPCC_MAC_802_15_4_CmdEvtNot();
+
+ return;
+}
+
+static void HW_IPCC_MAC_802_15_4_NotEvtHandler(void) {
+ LL_C1_IPCC_DisableReceiveChannel(IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL);
+
+ HW_IPCC_MAC_802_15_4_EvtNot();
+
+ return;
+}
+__weak void HW_IPCC_MAC_802_15_4_CmdEvtNot(void){};
+__weak void HW_IPCC_MAC_802_15_4_EvtNot(void){};
+#endif
+
+/******************************************************************************
+ * THREAD
+ ******************************************************************************/
+#ifdef THREAD_WB
+void HW_IPCC_THREAD_Init(void) {
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL);
+
+ return;
+}
+
+void HW_IPCC_OT_SendCmd(void) {
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL);
+ LL_C1_IPCC_EnableTransmitChannel(IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL);
+
+ return;
+}
+
+void HW_IPCC_CLI_SendCmd(void) {
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_THREAD_CLI_CMD_CHANNEL);
+
+ return;
+}
+
+void HW_IPCC_THREAD_SendAck(void) {
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL);
+
+ return;
+}
+
+void HW_IPCC_THREAD_CliSendAck(void) {
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL);
+
+ return;
+}
+
+static void HW_IPCC_OT_CmdEvtHandler(void) {
+ LL_C1_IPCC_DisableTransmitChannel(IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL);
+
+ HW_IPCC_OT_CmdEvtNot();
+
+ return;
+}
+
+static void HW_IPCC_THREAD_NotEvtHandler(void) {
+ LL_C1_IPCC_DisableReceiveChannel(IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL);
+
+ HW_IPCC_THREAD_EvtNot();
+
+ return;
+}
+
+static void HW_IPCC_THREAD_CliNotEvtHandler(void) {
+ LL_C1_IPCC_DisableReceiveChannel(IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL);
+
+ HW_IPCC_THREAD_CliEvtNot();
+
+ return;
+}
+
+__weak void HW_IPCC_OT_CmdEvtNot(void){};
+__weak void HW_IPCC_CLI_CmdEvtNot(void){};
+__weak void HW_IPCC_THREAD_EvtNot(void){};
+
+#endif /* THREAD_WB */
+
+/******************************************************************************
+ * LLD TESTS
+ ******************************************************************************/
+#ifdef LLD_TESTS_WB
+void HW_IPCC_LLDTESTS_Init(void) {
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL);
+ return;
+}
+
+void HW_IPCC_LLDTESTS_SendCliCmd(void) {
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_LLDTESTS_CLI_CMD_CHANNEL);
+ return;
+}
+
+static void HW_IPCC_LLDTESTS_ReceiveCliRspHandler(void) {
+ LL_C1_IPCC_DisableReceiveChannel(IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL);
+ HW_IPCC_LLDTESTS_ReceiveCliRsp();
+ return;
+}
+
+void HW_IPCC_LLDTESTS_SendCliRspAck(void) {
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL);
+ return;
+}
+
+static void HW_IPCC_LLDTESTS_ReceiveM0CmdHandler(void) {
+ LL_C1_IPCC_DisableReceiveChannel(IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL);
+ HW_IPCC_LLDTESTS_ReceiveM0Cmd();
+ return;
+}
+
+void HW_IPCC_LLDTESTS_SendM0CmdAck(void) {
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL);
+ return;
+}
+__weak void HW_IPCC_LLDTESTS_ReceiveCliRsp(void){};
+__weak void HW_IPCC_LLDTESTS_ReceiveM0Cmd(void){};
+#endif /* LLD_TESTS_WB */
+
+/******************************************************************************
+ * LLD BLE
+ ******************************************************************************/
+#ifdef LLD_BLE_WB
+void HW_IPCC_LLD_BLE_Init(void) {
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL);
+ return;
+}
+
+void HW_IPCC_LLD_BLE_SendCliCmd(void) {
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_LLD_BLE_CLI_CMD_CHANNEL);
+ return;
+}
+
+/*static void HW_IPCC_LLD_BLE_ReceiveCliRspHandler( void )
+{
+ LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_CLI_RSP_CHANNEL );
+ HW_IPCC_LLD_BLE_ReceiveCliRsp();
+ return;
+}*/
+
+void HW_IPCC_LLD_BLE_SendCliRspAck(void) {
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_LLD_BLE_CLI_RSP_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_LLD_BLE_CLI_RSP_CHANNEL);
+ return;
+}
+
+static void HW_IPCC_LLD_BLE_ReceiveM0CmdHandler(void) {
+ //LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL );
+ HW_IPCC_LLD_BLE_ReceiveM0Cmd();
+ return;
+}
+
+void HW_IPCC_LLD_BLE_SendM0CmdAck(void) {
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL);
+ //LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL );
+ return;
+}
+__weak void HW_IPCC_LLD_BLE_ReceiveCliRsp(void){};
+__weak void HW_IPCC_LLD_BLE_ReceiveM0Cmd(void){};
+
+/* Transparent Mode */
+void HW_IPCC_LLD_BLE_SendCmd(void) {
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_LLD_BLE_CMD_CHANNEL);
+ return;
+}
+
+static void HW_IPCC_LLD_BLE_ReceiveRspHandler(void) {
+ LL_C1_IPCC_DisableReceiveChannel(IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL);
+ HW_IPCC_LLD_BLE_ReceiveRsp();
+ return;
+}
+
+void HW_IPCC_LLD_BLE_SendRspAck(void) {
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL);
+ return;
+}
+
+#endif /* LLD_BLE_WB */
+
+/******************************************************************************
+ * ZIGBEE
+ ******************************************************************************/
+#ifdef ZIGBEE_WB
+void HW_IPCC_ZIGBEE_Init(void) {
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL);
+
+ return;
+}
+
+void HW_IPCC_ZIGBEE_SendM4RequestToM0(void) {
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL);
+ LL_C1_IPCC_EnableTransmitChannel(IPCC, HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL);
+
+ return;
+}
+
+void HW_IPCC_ZIGBEE_SendM4AckToM0Notify(void) {
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL);
+
+ return;
+}
+
+static void HW_IPCC_ZIGBEE_CmdEvtHandler(void) {
+ LL_C1_IPCC_DisableTransmitChannel(IPCC, HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL);
+
+ HW_IPCC_ZIGBEE_RecvAppliAckFromM0();
+
+ return;
+}
+
+static void HW_IPCC_ZIGBEE_StackNotifEvtHandler(void) {
+ LL_C1_IPCC_DisableReceiveChannel(IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL);
+
+ HW_IPCC_ZIGBEE_RecvM0NotifyToM4();
+
+ return;
+}
+
+static void HW_IPCC_ZIGBEE_StackM0RequestHandler(void) {
+ LL_C1_IPCC_DisableReceiveChannel(IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL);
+
+ HW_IPCC_ZIGBEE_RecvM0RequestToM4();
+
+ return;
+}
+
+void HW_IPCC_ZIGBEE_SendM4AckToM0Request(void) {
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL);
+
+ return;
+}
+
+__weak void HW_IPCC_ZIGBEE_RecvAppliAckFromM0(void){};
+__weak void HW_IPCC_ZIGBEE_RecvM0NotifyToM4(void){};
+__weak void HW_IPCC_ZIGBEE_RecvM0RequestToM4(void){};
+#endif /* ZIGBEE_WB */
+
+/******************************************************************************
+ * MEMORY MANAGER
+ ******************************************************************************/
+void HW_IPCC_MM_SendFreeBuf(void (*cb)(void)) {
+ if(LL_C1_IPCC_IsActiveFlag_CHx(IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL)) {
+ FreeBufCb = cb;
+ LL_C1_IPCC_EnableTransmitChannel(IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL);
+ } else {
+ cb();
+
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL);
+ }
+
+ return;
+}
+
+static void HW_IPCC_MM_FreeBufHandler(void) {
+ LL_C1_IPCC_DisableTransmitChannel(IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL);
+
+ FreeBufCb();
+
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL);
+
+ return;
+}
+
+/******************************************************************************
+ * TRACES
+ ******************************************************************************/
+void HW_IPCC_TRACES_Init(void) {
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_TRACES_CHANNEL);
+
+ return;
+}
+
+static void HW_IPCC_TRACES_EvtHandler(void) {
+ HW_IPCC_TRACES_EvtNot();
+
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_TRACES_CHANNEL);
+
+ return;
+}
+
+__weak void HW_IPCC_TRACES_EvtNot(void){};
+
+/******************* (C) COPYRIGHT 2019 STMicroelectronics *****END OF FILE****/
diff --git a/firmware/targets/f6/ble-glue/serial_service.c b/firmware/targets/f6/ble_glue/serial_service.c
index ae887ceb..4acba7f0 100644
--- a/firmware/targets/f6/ble-glue/serial_service.c
+++ b/firmware/targets/f6/ble_glue/serial_service.c
@@ -20,14 +20,18 @@ typedef struct {
static SerialSvc* serial_svc = NULL;
-static const uint8_t service_uuid[] = {0x00, 0x00, 0xfe, 0x60, 0xcc, 0x7a, 0x48, 0x2a, 0x98, 0x4a, 0x7f, 0x2e, 0xd5, 0xb3, 0xe5, 0x8f};
-static const uint8_t char_tx_uuid[] = {0x00, 0x00, 0xfe, 0x61, 0x8e, 0x22, 0x45, 0x41, 0x9d, 0x4c, 0x21, 0xed, 0xae, 0x82, 0xed, 0x19};
-static const uint8_t char_rx_uuid[] = {0x00, 0x00, 0xfe, 0x62, 0x8e, 0x22, 0x45, 0x41, 0x9d, 0x4c, 0x21, 0xed, 0xae, 0x82, 0xed, 0x19};
-static const uint8_t flow_ctrl_uuid[] = {0x00, 0x00, 0xfe, 0x63, 0x8e, 0x22, 0x45, 0x41, 0x9d, 0x4c, 0x21, 0xed, 0xae, 0x82, 0xed, 0x19};
-
-static SVCCTL_EvtAckStatus_t serial_svc_event_handler(void *event) {
+static const uint8_t service_uuid[] =
+ {0x00, 0x00, 0xfe, 0x60, 0xcc, 0x7a, 0x48, 0x2a, 0x98, 0x4a, 0x7f, 0x2e, 0xd5, 0xb3, 0xe5, 0x8f};
+static const uint8_t char_tx_uuid[] =
+ {0x00, 0x00, 0xfe, 0x61, 0x8e, 0x22, 0x45, 0x41, 0x9d, 0x4c, 0x21, 0xed, 0xae, 0x82, 0xed, 0x19};
+static const uint8_t char_rx_uuid[] =
+ {0x00, 0x00, 0xfe, 0x62, 0x8e, 0x22, 0x45, 0x41, 0x9d, 0x4c, 0x21, 0xed, 0xae, 0x82, 0xed, 0x19};
+static const uint8_t flow_ctrl_uuid[] =
+ {0x00, 0x00, 0xfe, 0x63, 0x8e, 0x22, 0x45, 0x41, 0x9d, 0x4c, 0x21, 0xed, 0xae, 0x82, 0xed, 0x19};
+
+static SVCCTL_EvtAckStatus_t serial_svc_event_handler(void* event) {
SVCCTL_EvtAckStatus_t ret = SVCCTL_EvtNotAck;
- hci_event_pckt* event_pckt = (hci_event_pckt *)(((hci_uart_pckt*)event)->data);
+ hci_event_pckt* event_pckt = (hci_event_pckt*)(((hci_uart_pckt*)event)->data);
evt_blecore_aci* blecore_evt = (evt_blecore_aci*)event_pckt->data;
aci_gatt_attribute_modified_event_rp0* attribute_modified;
if(event_pckt->evt == HCI_VENDOR_SPECIFIC_DEBUG_EVT_CODE) {
@@ -43,19 +47,20 @@ static SVCCTL_EvtAckStatus_t serial_svc_event_handler(void *event) {
furi_check(osMutexAcquire(serial_svc->buff_size_mtx, osWaitForever) == osOK);
if(attribute_modified->Attr_Data_Length > serial_svc->bytes_ready_to_receive) {
FURI_LOG_W(
- TAG, "Received %d, while was ready to receive %d bytes. Can lead to buffer overflow!",
- attribute_modified->Attr_Data_Length, serial_svc->bytes_ready_to_receive);
+ TAG,
+ "Received %d, while was ready to receive %d bytes. Can lead to buffer overflow!",
+ attribute_modified->Attr_Data_Length,
+ serial_svc->bytes_ready_to_receive);
}
- serial_svc->bytes_ready_to_receive -= MIN(serial_svc->bytes_ready_to_receive, attribute_modified->Attr_Data_Length);
+ serial_svc->bytes_ready_to_receive -= MIN(
+ serial_svc->bytes_ready_to_receive, attribute_modified->Attr_Data_Length);
SerialServiceEvent event = {
.event = SerialServiceEventTypeDataReceived,
.data = {
.buffer = attribute_modified->Attr_Data,
.size = attribute_modified->Attr_Data_Length,
- }
- };
- uint32_t buff_free_size =
- serial_svc->callback(event, serial_svc->context);
+ }};
+ uint32_t buff_free_size = serial_svc->callback(event, serial_svc->context);
FURI_LOG_D(TAG, "Available buff size: %d", buff_free_size);
furi_check(osMutexRelease(serial_svc->buff_size_mtx) == osOK);
}
@@ -82,45 +87,55 @@ void serial_svc_start() {
SVCCTL_RegisterSvcHandler(serial_svc_event_handler);
// Add service
- status = aci_gatt_add_service(UUID_TYPE_128, (Service_UUID_t *)service_uuid, PRIMARY_SERVICE, 10, &serial_svc->svc_handle);
+ status = aci_gatt_add_service(
+ UUID_TYPE_128, (Service_UUID_t*)service_uuid, PRIMARY_SERVICE, 10, &serial_svc->svc_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add Serial service: %d", status);
}
// Add RX characteristics
- status = aci_gatt_add_char(serial_svc->svc_handle, UUID_TYPE_128, (const Char_UUID_t*)char_rx_uuid,
- SERIAL_SVC_DATA_LEN_MAX,
- CHAR_PROP_WRITE_WITHOUT_RESP | CHAR_PROP_WRITE | CHAR_PROP_READ,
- ATTR_PERMISSION_AUTHEN_READ | ATTR_PERMISSION_AUTHEN_WRITE,
- GATT_NOTIFY_ATTRIBUTE_WRITE,
- 10,
- CHAR_VALUE_LEN_VARIABLE,
- &serial_svc->rx_char_handle);
+ status = aci_gatt_add_char(
+ serial_svc->svc_handle,
+ UUID_TYPE_128,
+ (const Char_UUID_t*)char_rx_uuid,
+ SERIAL_SVC_DATA_LEN_MAX,
+ CHAR_PROP_WRITE_WITHOUT_RESP | CHAR_PROP_WRITE | CHAR_PROP_READ,
+ ATTR_PERMISSION_AUTHEN_READ | ATTR_PERMISSION_AUTHEN_WRITE,
+ GATT_NOTIFY_ATTRIBUTE_WRITE,
+ 10,
+ CHAR_VALUE_LEN_VARIABLE,
+ &serial_svc->rx_char_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add RX characteristic: %d", status);
}
// Add TX characteristic
- status = aci_gatt_add_char(serial_svc->svc_handle, UUID_TYPE_128, (const Char_UUID_t*)char_tx_uuid,
- SERIAL_SVC_DATA_LEN_MAX,
- CHAR_PROP_READ | CHAR_PROP_INDICATE,
- ATTR_PERMISSION_AUTHEN_READ,
- GATT_DONT_NOTIFY_EVENTS,
- 10,
- CHAR_VALUE_LEN_VARIABLE,
- &serial_svc->tx_char_handle);
+ status = aci_gatt_add_char(
+ serial_svc->svc_handle,
+ UUID_TYPE_128,
+ (const Char_UUID_t*)char_tx_uuid,
+ SERIAL_SVC_DATA_LEN_MAX,
+ CHAR_PROP_READ | CHAR_PROP_INDICATE,
+ ATTR_PERMISSION_AUTHEN_READ,
+ GATT_DONT_NOTIFY_EVENTS,
+ 10,
+ CHAR_VALUE_LEN_VARIABLE,
+ &serial_svc->tx_char_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add TX characteristic: %d", status);
}
// Add Flow Control characteristic
- status = aci_gatt_add_char(serial_svc->svc_handle, UUID_TYPE_128, (const Char_UUID_t*)flow_ctrl_uuid,
- sizeof(uint32_t),
- CHAR_PROP_READ | CHAR_PROP_NOTIFY,
- ATTR_PERMISSION_AUTHEN_READ,
- GATT_DONT_NOTIFY_EVENTS,
- 10,
- CHAR_VALUE_LEN_CONSTANT,
- &serial_svc->flow_ctrl_char_handle);
+ status = aci_gatt_add_char(
+ serial_svc->svc_handle,
+ UUID_TYPE_128,
+ (const Char_UUID_t*)flow_ctrl_uuid,
+ sizeof(uint32_t),
+ CHAR_PROP_READ | CHAR_PROP_NOTIFY,
+ ATTR_PERMISSION_AUTHEN_READ,
+ GATT_DONT_NOTIFY_EVENTS,
+ 10,
+ CHAR_VALUE_LEN_CONSTANT,
+ &serial_svc->flow_ctrl_char_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add Flow Control characteristic: %d", status);
}
@@ -128,14 +143,22 @@ void serial_svc_start() {
serial_svc->buff_size_mtx = osMutexNew(NULL);
}
-void serial_svc_set_callbacks(uint16_t buff_size, SerialServiceEventCallback callback, void* context) {
+void serial_svc_set_callbacks(
+ uint16_t buff_size,
+ SerialServiceEventCallback callback,
+ void* context) {
furi_assert(serial_svc);
serial_svc->callback = callback;
serial_svc->context = context;
serial_svc->buff_size = buff_size;
serial_svc->bytes_ready_to_receive = buff_size;
uint32_t buff_size_reversed = REVERSE_BYTES_U32(serial_svc->buff_size);
- aci_gatt_update_char_value(serial_svc->svc_handle, serial_svc->flow_ctrl_char_handle, 0, sizeof(uint32_t), (uint8_t*)&buff_size_reversed);
+ aci_gatt_update_char_value(
+ serial_svc->svc_handle,
+ serial_svc->flow_ctrl_char_handle,
+ 0,
+ sizeof(uint32_t),
+ (uint8_t*)&buff_size_reversed);
}
void serial_svc_notify_buffer_is_empty() {
@@ -147,7 +170,12 @@ void serial_svc_notify_buffer_is_empty() {
FURI_LOG_D(TAG, "Buffer is empty. Notifying client");
serial_svc->bytes_ready_to_receive = serial_svc->buff_size;
uint32_t buff_size_reversed = REVERSE_BYTES_U32(serial_svc->buff_size);
- aci_gatt_update_char_value(serial_svc->svc_handle, serial_svc->flow_ctrl_char_handle, 0, sizeof(uint32_t), (uint8_t*)&buff_size_reversed);
+ aci_gatt_update_char_value(
+ serial_svc->svc_handle,
+ serial_svc->flow_ctrl_char_handle,
+ 0,
+ sizeof(uint32_t),
+ (uint8_t*)&buff_size_reversed);
}
furi_check(osMutexRelease(serial_svc->buff_size_mtx) == osOK);
}
@@ -194,15 +222,15 @@ bool serial_svc_update_tx(uint8_t* data, uint16_t data_len) {
uint16_t value_offset = data_len - remained;
remained -= value_len;
- tBleStatus result = aci_gatt_update_char_value_ext(
- 0,
- serial_svc->svc_handle,
- serial_svc->tx_char_handle,
- remained ? 0x00 : 0x02,
- data_len,
- value_offset,
- value_len,
- data + value_offset);
+ tBleStatus result = aci_gatt_update_char_value_ext(
+ 0,
+ serial_svc->svc_handle,
+ serial_svc->tx_char_handle,
+ remained ? 0x00 : 0x02,
+ data_len,
+ value_offset,
+ value_len,
+ data + value_offset);
if(result) {
FURI_LOG_E(TAG, "Failed updating TX characteristic: %d", result);
diff --git a/firmware/targets/f7/ble-glue/serial_service.h b/firmware/targets/f6/ble_glue/serial_service.h
index 6e19f86d..a1e5bc1c 100644
--- a/firmware/targets/f7/ble-glue/serial_service.h
+++ b/firmware/targets/f6/ble_glue/serial_service.h
@@ -25,11 +25,14 @@ typedef struct {
SerialServiceData data;
} SerialServiceEvent;
-typedef uint16_t(*SerialServiceEventCallback)(SerialServiceEvent event, void* context);
+typedef uint16_t (*SerialServiceEventCallback)(SerialServiceEvent event, void* context);
void serial_svc_start();
-void serial_svc_set_callbacks(uint16_t buff_size, SerialServiceEventCallback callback, void* context);
+void serial_svc_set_callbacks(
+ uint16_t buff_size,
+ SerialServiceEventCallback callback,
+ void* context);
void serial_svc_notify_buffer_is_empty();
diff --git a/firmware/targets/f6/ble-glue/tl_dbg_conf.h b/firmware/targets/f6/ble_glue/tl_dbg_conf.h
index 842cba0e..1f09b7e4 100644
--- a/firmware/targets/f6/ble-glue/tl_dbg_conf.h
+++ b/firmware/targets/f6/ble_glue/tl_dbg_conf.h
@@ -30,54 +30,57 @@ extern "C" {
/* USER CODE BEGIN Tl_Conf */
/* Includes ------------------------------------------------------------------*/
-#include "app_conf.h" /* required as some configuration used in dbg_trace.h are set there */
+#include "app_conf.h" /* required as some configuration used in dbg_trace.h are set there */
#include "dbg_trace.h"
#include "hw_if.h"
-#include <furi-hal.h>
+#include <furi_hal.h>
/**
* Enable or Disable traces
* The raw data output is the hci binary packet format as specified by the BT specification *
*/
-#define TL_SHCI_CMD_DBG_EN 1 /* Reports System commands sent to CPU2 and the command response */
-#define TL_SHCI_CMD_DBG_RAW_EN 0 /* Reports raw data System commands sent to CPU2 and the command response */
-#define TL_SHCI_EVT_DBG_EN 1 /* Reports System Asynchronous Events received from CPU2 */
-#define TL_SHCI_EVT_DBG_RAW_EN 0 /* Reports raw data System Asynchronous Events received from CPU2 */
+#define TL_SHCI_CMD_DBG_EN 1 /* Reports System commands sent to CPU2 and the command response */
+#define TL_SHCI_CMD_DBG_RAW_EN \
+ 0 /* Reports raw data System commands sent to CPU2 and the command response */
+#define TL_SHCI_EVT_DBG_EN 1 /* Reports System Asynchronous Events received from CPU2 */
+#define TL_SHCI_EVT_DBG_RAW_EN \
+ 0 /* Reports raw data System Asynchronous Events received from CPU2 */
-#define TL_HCI_CMD_DBG_EN 1 /* Reports BLE command sent to CPU2 and the command response */
-#define TL_HCI_CMD_DBG_RAW_EN 0 /* Reports raw data BLE command sent to CPU2 and the command response */
-#define TL_HCI_EVT_DBG_EN 1 /* Reports BLE Asynchronous Events received from CPU2 */
-#define TL_HCI_EVT_DBG_RAW_EN 0 /* Reports raw data BLE Asynchronous Events received from CPU2 */
+#define TL_HCI_CMD_DBG_EN 1 /* Reports BLE command sent to CPU2 and the command response */
+#define TL_HCI_CMD_DBG_RAW_EN \
+ 0 /* Reports raw data BLE command sent to CPU2 and the command response */
+#define TL_HCI_EVT_DBG_EN 1 /* Reports BLE Asynchronous Events received from CPU2 */
+#define TL_HCI_EVT_DBG_RAW_EN 0 /* Reports raw data BLE Asynchronous Events received from CPU2 */
-#define TL_MM_DBG_EN 1 /* Reports the informations of the buffer released to CPU2 */
+#define TL_MM_DBG_EN 1 /* Reports the informations of the buffer released to CPU2 */
/**
* System Transport Layer
*/
-#if (TL_SHCI_CMD_DBG_EN != 0)
-#define TL_SHCI_CMD_DBG_MSG PRINT_MESG_DBG
-#define TL_SHCI_CMD_DBG_BUF PRINT_LOG_BUFF_DBG
+#if(TL_SHCI_CMD_DBG_EN != 0)
+#define TL_SHCI_CMD_DBG_MSG PRINT_MESG_DBG
+#define TL_SHCI_CMD_DBG_BUF PRINT_LOG_BUFF_DBG
#else
#define TL_SHCI_CMD_DBG_MSG(...)
#define TL_SHCI_CMD_DBG_BUF(...)
#endif
-#if (TL_SHCI_CMD_DBG_RAW_EN != 0)
-#define TL_SHCI_CMD_DBG_RAW(_PDATA_, _SIZE_) furi_hal_console_tx_with_new_line(_PDATA_, _SIZE_)
+#if(TL_SHCI_CMD_DBG_RAW_EN != 0)
+#define TL_SHCI_CMD_DBG_RAW(_PDATA_, _SIZE_) furi_hal_console_tx_with_new_line(_PDATA_, _SIZE_)
#else
#define TL_SHCI_CMD_DBG_RAW(...)
#endif
-#if (TL_SHCI_EVT_DBG_EN != 0)
-#define TL_SHCI_EVT_DBG_MSG PRINT_MESG_DBG
-#define TL_SHCI_EVT_DBG_BUF PRINT_LOG_BUFF_DBG
+#if(TL_SHCI_EVT_DBG_EN != 0)
+#define TL_SHCI_EVT_DBG_MSG PRINT_MESG_DBG
+#define TL_SHCI_EVT_DBG_BUF PRINT_LOG_BUFF_DBG
#else
#define TL_SHCI_EVT_DBG_MSG(...)
#define TL_SHCI_EVT_DBG_BUF(...)
#endif
-#if (TL_SHCI_EVT_DBG_RAW_EN != 0)
-#define TL_SHCI_EVT_DBG_RAW(_PDATA_, _SIZE_) furi_hal_console_tx_with_new_line(_PDATA_, _SIZE_)
+#if(TL_SHCI_EVT_DBG_RAW_EN != 0)
+#define TL_SHCI_EVT_DBG_RAW(_PDATA_, _SIZE_) furi_hal_console_tx_with_new_line(_PDATA_, _SIZE_)
#else
#define TL_SHCI_EVT_DBG_RAW(...)
#endif
@@ -85,30 +88,30 @@ extern "C" {
/**
* BLE Transport Layer
*/
-#if (TL_HCI_CMD_DBG_EN != 0)
-#define TL_HCI_CMD_DBG_MSG PRINT_MESG_DBG
-#define TL_HCI_CMD_DBG_BUF PRINT_LOG_BUFF_DBG
+#if(TL_HCI_CMD_DBG_EN != 0)
+#define TL_HCI_CMD_DBG_MSG PRINT_MESG_DBG
+#define TL_HCI_CMD_DBG_BUF PRINT_LOG_BUFF_DBG
#else
#define TL_HCI_CMD_DBG_MSG(...)
#define TL_HCI_CMD_DBG_BUF(...)
#endif
-#if (TL_HCI_CMD_DBG_RAW_EN != 0)
-#define TL_HCI_CMD_DBG_RAW(_PDATA_, _SIZE_) furi_hal_console_tx_with_new_line(_PDATA_, _SIZE_)
+#if(TL_HCI_CMD_DBG_RAW_EN != 0)
+#define TL_HCI_CMD_DBG_RAW(_PDATA_, _SIZE_) furi_hal_console_tx_with_new_line(_PDATA_, _SIZE_)
#else
#define TL_HCI_CMD_DBG_RAW(...)
#endif
-#if (TL_HCI_EVT_DBG_EN != 0)
-#define TL_HCI_EVT_DBG_MSG PRINT_MESG_DBG
-#define TL_HCI_EVT_DBG_BUF PRINT_LOG_BUFF_DBG
+#if(TL_HCI_EVT_DBG_EN != 0)
+#define TL_HCI_EVT_DBG_MSG PRINT_MESG_DBG
+#define TL_HCI_EVT_DBG_BUF PRINT_LOG_BUFF_DBG
#else
#define TL_HCI_EVT_DBG_MSG(...)
#define TL_HCI_EVT_DBG_BUF(...)
#endif
-#if (TL_HCI_EVT_DBG_RAW_EN != 0)
-#define TL_HCI_EVT_DBG_RAW(_PDATA_, _SIZE_) furi_hal_console_tx_with_new_line(_PDATA_, _SIZE_)
+#if(TL_HCI_EVT_DBG_RAW_EN != 0)
+#define TL_HCI_EVT_DBG_RAW(_PDATA_, _SIZE_) furi_hal_console_tx_with_new_line(_PDATA_, _SIZE_)
#else
#define TL_HCI_EVT_DBG_RAW(...)
#endif
@@ -116,8 +119,8 @@ extern "C" {
/**
* Memory Manager - Released buffer tracing
*/
-#if (TL_MM_DBG_EN != 0)
-#define TL_MM_DBG_MSG PRINT_MESG_DBG
+#if(TL_MM_DBG_EN != 0)
+#define TL_MM_DBG_MSG PRINT_MESG_DBG
#else
#define TL_MM_DBG_MSG(...)
#endif
diff --git a/firmware/targets/f7/ble-glue/utilities_conf.h b/firmware/targets/f6/ble_glue/utilities_conf.h
index 92a5d07a..9143d4c0 100644
--- a/firmware/targets/f7/ble-glue/utilities_conf.h
+++ b/firmware/targets/f6/ble_glue/utilities_conf.h
@@ -33,31 +33,32 @@ extern "C" {
/******************************************************************************
* common
******************************************************************************/
-#define UTILS_ENTER_CRITICAL_SECTION( ) uint32_t primask_bit = __get_PRIMASK( );\
- __disable_irq( )
+#define UTILS_ENTER_CRITICAL_SECTION() \
+ uint32_t primask_bit = __get_PRIMASK(); \
+ __disable_irq()
-#define UTILS_EXIT_CRITICAL_SECTION( ) __set_PRIMASK( primask_bit )
+#define UTILS_EXIT_CRITICAL_SECTION() __set_PRIMASK(primask_bit)
-#define UTILS_MEMSET8( dest, value, size ) memset( dest, value, size);
+#define UTILS_MEMSET8(dest, value, size) memset(dest, value, size);
/******************************************************************************
* tiny low power manager
* (any macro that does not need to be modified can be removed)
******************************************************************************/
-#define UTIL_LPM_INIT_CRITICAL_SECTION( )
-#define UTIL_LPM_ENTER_CRITICAL_SECTION( ) UTILS_ENTER_CRITICAL_SECTION( )
-#define UTIL_LPM_EXIT_CRITICAL_SECTION( ) UTILS_EXIT_CRITICAL_SECTION( )
+#define UTIL_LPM_INIT_CRITICAL_SECTION()
+#define UTIL_LPM_ENTER_CRITICAL_SECTION() UTILS_ENTER_CRITICAL_SECTION()
+#define UTIL_LPM_EXIT_CRITICAL_SECTION() UTILS_EXIT_CRITICAL_SECTION()
/******************************************************************************
* sequencer
* (any macro that does not need to be modified can be removed)
******************************************************************************/
-#define UTIL_SEQ_INIT_CRITICAL_SECTION( )
-#define UTIL_SEQ_ENTER_CRITICAL_SECTION( ) UTILS_ENTER_CRITICAL_SECTION( )
-#define UTIL_SEQ_EXIT_CRITICAL_SECTION( ) UTILS_EXIT_CRITICAL_SECTION( )
-#define UTIL_SEQ_CONF_TASK_NBR (32)
-#define UTIL_SEQ_CONF_PRIO_NBR (2)
-#define UTIL_SEQ_MEMSET8( dest, value, size ) UTILS_MEMSET8( dest, value, size )
+#define UTIL_SEQ_INIT_CRITICAL_SECTION()
+#define UTIL_SEQ_ENTER_CRITICAL_SECTION() UTILS_ENTER_CRITICAL_SECTION()
+#define UTIL_SEQ_EXIT_CRITICAL_SECTION() UTILS_EXIT_CRITICAL_SECTION()
+#define UTIL_SEQ_CONF_TASK_NBR (32)
+#define UTIL_SEQ_CONF_PRIO_NBR (2)
+#define UTIL_SEQ_MEMSET8(dest, value, size) UTILS_MEMSET8(dest, value, size)
#ifdef __cplusplus
}
diff --git a/firmware/targets/f6/cube/Inc/FreeRTOSConfig.h b/firmware/targets/f6/cube/Inc/FreeRTOSConfig.h
index 8f955a03..47883e66 100644
--- a/firmware/targets/f6/cube/Inc/FreeRTOSConfig.h
+++ b/firmware/targets/f6/cube/Inc/FreeRTOSConfig.h
@@ -49,83 +49,83 @@
/* Ensure definitions are only used by the compiler, and not by the assembler. */
#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)
- #include <stdint.h>
- extern uint32_t SystemCoreClock;
- void xPortSysTickHandler(void);
+#include <stdint.h>
+extern uint32_t SystemCoreClock;
+void xPortSysTickHandler(void);
/* USER CODE BEGIN 0 */
- extern void configureTimerForRunTimeStats(void);
- extern unsigned long getRunTimeCounterValue(void);
+extern void configureTimerForRunTimeStats(void);
+extern unsigned long getRunTimeCounterValue(void);
/* USER CODE END 0 */
#endif
#ifndef CMSIS_device_header
#define CMSIS_device_header "stm32wbxx.h"
#endif /* CMSIS_device_header */
-#define configENABLE_FPU 1
-#define configENABLE_MPU 0
-
-#define configUSE_PREEMPTION 1
-#define configSUPPORT_STATIC_ALLOCATION 1
-#define configSUPPORT_DYNAMIC_ALLOCATION 1
-#define configUSE_IDLE_HOOK 1
-#define configUSE_TICK_HOOK 0
-#define configCPU_CLOCK_HZ ( SystemCoreClock )
-#define configTICK_RATE_HZ ((TickType_t)1000)
-#define configMAX_PRIORITIES ( 56 )
-#define configMINIMAL_STACK_SIZE ((uint16_t)128)
-#define configTOTAL_HEAP_SIZE ((size_t)40960)
-#define configMAX_TASK_NAME_LEN ( 16 )
-#define configGENERATE_RUN_TIME_STATS 1
-#define configUSE_TRACE_FACILITY 1
-#define configUSE_16_BIT_TICKS 0
-#define configUSE_MUTEXES 1
-#define configQUEUE_REGISTRY_SIZE 8
-#define configCHECK_FOR_STACK_OVERFLOW 1
-#define configUSE_RECURSIVE_MUTEXES 1
-#define configUSE_COUNTING_SEMAPHORES 1
-#define configENABLE_BACKWARD_COMPATIBILITY 0
-#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
-#define configUSE_TICKLESS_IDLE 2
-#define configRECORD_STACK_HIGH_ADDRESS 1
+#define configENABLE_FPU 1
+#define configENABLE_MPU 0
+
+#define configUSE_PREEMPTION 1
+#define configSUPPORT_STATIC_ALLOCATION 1
+#define configSUPPORT_DYNAMIC_ALLOCATION 1
+#define configUSE_IDLE_HOOK 1
+#define configUSE_TICK_HOOK 0
+#define configCPU_CLOCK_HZ (SystemCoreClock)
+#define configTICK_RATE_HZ ((TickType_t)1000)
+#define configMAX_PRIORITIES (56)
+#define configMINIMAL_STACK_SIZE ((uint16_t)128)
+#define configTOTAL_HEAP_SIZE ((size_t)40960)
+#define configMAX_TASK_NAME_LEN (16)
+#define configGENERATE_RUN_TIME_STATS 1
+#define configUSE_TRACE_FACILITY 1
+#define configUSE_16_BIT_TICKS 0
+#define configUSE_MUTEXES 1
+#define configQUEUE_REGISTRY_SIZE 8
+#define configCHECK_FOR_STACK_OVERFLOW 1
+#define configUSE_RECURSIVE_MUTEXES 1
+#define configUSE_COUNTING_SEMAPHORES 1
+#define configENABLE_BACKWARD_COMPATIBILITY 0
+#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
+#define configUSE_TICKLESS_IDLE 2
+#define configRECORD_STACK_HIGH_ADDRESS 1
/* USER CODE BEGIN MESSAGE_BUFFER_LENGTH_TYPE */
/* Defaults to size_t for backward compatibility, but can be changed
if lengths will always be less than the number of bytes in a size_t. */
-#define configMESSAGE_BUFFER_LENGTH_TYPE size_t
+#define configMESSAGE_BUFFER_LENGTH_TYPE size_t
/* USER CODE END MESSAGE_BUFFER_LENGTH_TYPE */
/* Co-routine definitions. */
-#define configUSE_CO_ROUTINES 0
-#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
+#define configUSE_CO_ROUTINES 0
+#define configMAX_CO_ROUTINE_PRIORITIES (2)
/* Software timer definitions. */
-#define configUSE_TIMERS 1
-#define configTIMER_TASK_PRIORITY ( 2 )
-#define configTIMER_QUEUE_LENGTH 10
-#define configTIMER_TASK_STACK_DEPTH 256
+#define configUSE_TIMERS 1
+#define configTIMER_TASK_PRIORITY (2)
+#define configTIMER_QUEUE_LENGTH 10
+#define configTIMER_TASK_STACK_DEPTH 256
/* CMSIS-RTOS V2 flags */
-#define configUSE_OS2_THREAD_SUSPEND_RESUME 1
-#define configUSE_OS2_THREAD_ENUMERATE 1
-#define configUSE_OS2_EVENTFLAGS_FROM_ISR 1
-#define configUSE_OS2_THREAD_FLAGS 1
-#define configUSE_OS2_TIMER 1
-#define configUSE_OS2_MUTEX 1
+#define configUSE_OS2_THREAD_SUSPEND_RESUME 1
+#define configUSE_OS2_THREAD_ENUMERATE 1
+#define configUSE_OS2_EVENTFLAGS_FROM_ISR 1
+#define configUSE_OS2_THREAD_FLAGS 1
+#define configUSE_OS2_TIMER 1
+#define configUSE_OS2_MUTEX 1
/* Set the following definitions to 1 to include the API function, or zero
to exclude the API function. */
-#define INCLUDE_vTaskPrioritySet 1
-#define INCLUDE_uxTaskPriorityGet 1
-#define INCLUDE_vTaskDelete 1
-#define INCLUDE_vTaskCleanUpResources 1
-#define INCLUDE_vTaskSuspend 1
-#define INCLUDE_vTaskDelayUntil 1
-#define INCLUDE_vTaskDelay 1
-#define INCLUDE_xTaskGetSchedulerState 1
-#define INCLUDE_xTimerPendFunctionCall 1
-#define INCLUDE_xQueueGetMutexHolder 1
-#define INCLUDE_uxTaskGetStackHighWaterMark 1
-#define INCLUDE_xTaskGetCurrentTaskHandle 1
-#define INCLUDE_eTaskGetState 1
+#define INCLUDE_vTaskPrioritySet 1
+#define INCLUDE_uxTaskPriorityGet 1
+#define INCLUDE_vTaskDelete 1
+#define INCLUDE_vTaskCleanUpResources 1
+#define INCLUDE_vTaskSuspend 1
+#define INCLUDE_vTaskDelayUntil 1
+#define INCLUDE_vTaskDelay 1
+#define INCLUDE_xTaskGetSchedulerState 1
+#define INCLUDE_xTimerPendFunctionCall 1
+#define INCLUDE_xQueueGetMutexHolder 1
+#define INCLUDE_uxTaskGetStackHighWaterMark 1
+#define INCLUDE_xTaskGetCurrentTaskHandle 1
+#define INCLUDE_eTaskGetState 1
/*
* The CMSIS-RTOS V2 FreeRTOS wrapper is dependent on the heap implementation used
@@ -135,15 +135,15 @@ to exclude the API function. */
/* Cortex-M specific definitions. */
#ifdef __NVIC_PRIO_BITS
- /* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */
- #define configPRIO_BITS __NVIC_PRIO_BITS
+/* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */
+#define configPRIO_BITS __NVIC_PRIO_BITS
#else
- #define configPRIO_BITS 4
+#define configPRIO_BITS 4
#endif
/* The lowest interrupt priority that can be used in a call to a "set priority"
function. */
-#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15
+#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15
/* The highest interrupt priority that can be used by any interrupt service
routine that makes calls to interrupt safe FreeRTOS API functions. DO NOT CALL
@@ -153,20 +153,27 @@ PRIORITY THAN THIS! (higher priorities are lower numeric values. */
/* Interrupt priorities used by the kernel port layer itself. These are generic
to all Cortex-M ports, and do not rely on any particular library functions. */
-#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
+#define configKERNEL_INTERRUPT_PRIORITY \
+ (configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
-#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
+#define configMAX_SYSCALL_INTERRUPT_PRIORITY \
+ (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))
/* Normal assert() semantics without relying on the provision of an assert.h
header file. */
/* USER CODE BEGIN 1 */
-#define configASSERT( x ) if ((x) == 0) {taskDISABLE_INTERRUPTS(); for( ;; );}
+#define configASSERT(x) \
+ if((x) == 0) { \
+ taskDISABLE_INTERRUPTS(); \
+ for(;;) \
+ ; \
+ }
/* USER CODE END 1 */
/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
standard names. */
-#define vPortSVCHandler SVC_Handler
+#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
/* IMPORTANT: After 10.3.1 update, Systick_Handler comes from NVIC (if SYS timebase = systick), otherwise from cmsis_os2.c */
diff --git a/firmware/targets/f6/cube/Inc/stm32_assert.h b/firmware/targets/f6/cube/Inc/stm32_assert.h
index f086878e..b9dad5de 100644
--- a/firmware/targets/f6/cube/Inc/stm32_assert.h
+++ b/firmware/targets/f6/cube/Inc/stm32_assert.h
@@ -21,14 +21,14 @@
#define __STM32_ASSERT_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Includes ------------------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
-#ifdef USE_FULL_ASSERT
+#ifdef USE_FULL_ASSERT
/**
* @brief The assert_param macro is used for function's parameters check.
* @param expr: If expr is false, it calls assert_failed function
@@ -37,11 +37,11 @@
* If expr is true, it returns no value.
* @retval None
*/
- #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
+#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t*)__FILE__, __LINE__))
/* Exported functions ------------------------------------------------------- */
- void assert_failed(uint8_t* file, uint32_t line);
+void assert_failed(uint8_t* file, uint32_t line);
#else
- #define assert_param(expr) ((void)0U)
+#define assert_param(expr) ((void)0U)
#endif /* USE_FULL_ASSERT */
#ifdef __cplusplus
diff --git a/firmware/targets/f6/cube/Inc/stm32wbxx_hal_conf.h b/firmware/targets/f6/cube/Inc/stm32wbxx_hal_conf.h
index 6b1d2553..e151d81b 100644
--- a/firmware/targets/f6/cube/Inc/stm32wbxx_hal_conf.h
+++ b/firmware/targets/f6/cube/Inc/stm32wbxx_hal_conf.h
@@ -22,7 +22,7 @@
#define __STM32WBxx_HAL_CONF_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Exported types ------------------------------------------------------------*/
@@ -66,26 +66,26 @@
#define HAL_PWR_MODULE_ENABLED
#define HAL_RCC_MODULE_ENABLED
-#define USE_HAL_ADC_REGISTER_CALLBACKS 0u
-#define USE_HAL_COMP_REGISTER_CALLBACKS 0u
-#define USE_HAL_CRYP_REGISTER_CALLBACKS 0u
-#define USE_HAL_I2C_REGISTER_CALLBACKS 0u
-#define USE_HAL_IRDA_REGISTER_CALLBACKS 0u
-#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0u
-#define USE_HAL_PCD_REGISTER_CALLBACKS 0u
-#define USE_HAL_PKA_REGISTER_CALLBACKS 0u
-#define USE_HAL_QSPI_REGISTER_CALLBACKS 0u
-#define USE_HAL_RNG_REGISTER_CALLBACKS 0u
-#define USE_HAL_RTC_REGISTER_CALLBACKS 0u
-#define USE_HAL_SAI_REGISTER_CALLBACKS 0u
+#define USE_HAL_ADC_REGISTER_CALLBACKS 0u
+#define USE_HAL_COMP_REGISTER_CALLBACKS 0u
+#define USE_HAL_CRYP_REGISTER_CALLBACKS 0u
+#define USE_HAL_I2C_REGISTER_CALLBACKS 0u
+#define USE_HAL_IRDA_REGISTER_CALLBACKS 0u
+#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0u
+#define USE_HAL_PCD_REGISTER_CALLBACKS 0u
+#define USE_HAL_PKA_REGISTER_CALLBACKS 0u
+#define USE_HAL_QSPI_REGISTER_CALLBACKS 0u
+#define USE_HAL_RNG_REGISTER_CALLBACKS 0u
+#define USE_HAL_RTC_REGISTER_CALLBACKS 0u
+#define USE_HAL_SAI_REGISTER_CALLBACKS 0u
#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0u
-#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0u
-#define USE_HAL_SPI_REGISTER_CALLBACKS 0u
-#define USE_HAL_TIM_REGISTER_CALLBACKS 0u
-#define USE_HAL_TSC_REGISTER_CALLBACKS 0u
-#define USE_HAL_UART_REGISTER_CALLBACKS 0u
-#define USE_HAL_USART_REGISTER_CALLBACKS 0u
-#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u
+#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0u
+#define USE_HAL_SPI_REGISTER_CALLBACKS 0u
+#define USE_HAL_TIM_REGISTER_CALLBACKS 0u
+#define USE_HAL_TSC_REGISTER_CALLBACKS 0u
+#define USE_HAL_UART_REGISTER_CALLBACKS 0u
+#define USE_HAL_USART_REGISTER_CALLBACKS 0u
+#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u
/* ########################## Oscillator Values adaptation ####################*/
/**
@@ -93,20 +93,20 @@
* This value is used by the RCC HAL module to compute the system frequency
* (when HSE is used as system clock source, directly or through the PLL).
*/
-#if !defined (HSE_VALUE)
-#define HSE_VALUE 32000000U /*!< Value of the External oscillator in Hz */
+#if !defined(HSE_VALUE)
+#define HSE_VALUE 32000000U /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
-#if !defined (HSE_STARTUP_TIMEOUT)
- #define HSE_STARTUP_TIMEOUT ((uint32_t)100) /*!< Time out for HSE start up, in ms */
+#if !defined(HSE_STARTUP_TIMEOUT)
+#define HSE_STARTUP_TIMEOUT ((uint32_t)100) /*!< Time out for HSE start up, in ms */
#endif /* HSE_STARTUP_TIMEOUT */
/**
* @brief Internal Multiple Speed oscillator (MSI) default value.
* This value is the default MSI range value after Reset.
*/
-#if !defined (MSI_VALUE)
- #define MSI_VALUE ((uint32_t)4000000) /*!< Value of the Internal oscillator in Hz*/
+#if !defined(MSI_VALUE)
+#define MSI_VALUE ((uint32_t)4000000) /*!< Value of the Internal oscillator in Hz*/
#endif /* MSI_VALUE */
/**
@@ -114,24 +114,24 @@
* This value is used by the RCC HAL module to compute the system frequency
* (when HSI is used as system clock source, directly or through the PLL).
*/
-#if !defined (HSI_VALUE)
-#define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/
+#if !defined(HSI_VALUE)
+#define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/
#endif /* HSI_VALUE */
/**
* @brief Internal Low Speed oscillator (LSI1) value.
*/
-#if !defined (LSI1_VALUE)
- #define LSI1_VALUE ((uint32_t)32000) /*!< LSI1 Typical Value in Hz*/
-#endif /* LSI1_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
+#if !defined(LSI1_VALUE)
+#define LSI1_VALUE ((uint32_t)32000) /*!< LSI1 Typical Value in Hz*/
+#endif /* LSI1_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
The real value may vary depending on the variations
in voltage and temperature.*/
/**
* @brief Internal Low Speed oscillator (LSI2) value.
*/
-#if !defined (LSI2_VALUE)
- #define LSI2_VALUE ((uint32_t)32000) /*!< LSI2 Typical Value in Hz*/
-#endif /* LSI2_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
+#if !defined(LSI2_VALUE)
+#define LSI2_VALUE ((uint32_t)32000) /*!< LSI2 Typical Value in Hz*/
+#endif /* LSI2_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
The real value may vary depending on the variations
in voltage and temperature.*/
@@ -139,20 +139,20 @@
* @brief External Low Speed oscillator (LSE) value.
* This value is used by the UART, RTC HAL module to compute the system frequency
*/
-#if !defined (LSE_VALUE)
-#define LSE_VALUE 32768U /*!< Value of the External oscillator in Hz*/
+#if !defined(LSE_VALUE)
+#define LSE_VALUE 32768U /*!< Value of the External oscillator in Hz*/
#endif /* LSE_VALUE */
/**
* @brief Internal Multiple Speed oscillator (HSI48) default value.
* This value is the default HSI48 range value after Reset.
*/
-#if !defined (HSI48_VALUE)
- #define HSI48_VALUE ((uint32_t)48000000) /*!< Value of the Internal oscillator in Hz*/
+#if !defined(HSI48_VALUE)
+#define HSI48_VALUE ((uint32_t)48000000) /*!< Value of the Internal oscillator in Hz*/
#endif /* HSI48_VALUE */
-#if !defined (LSE_STARTUP_TIMEOUT)
-#define LSE_STARTUP_TIMEOUT 1000U /*!< Time out for LSE start up, in ms */
+#if !defined(LSE_STARTUP_TIMEOUT)
+#define LSE_STARTUP_TIMEOUT 1000U /*!< Time out for LSE start up, in ms */
#endif /* HSE_STARTUP_TIMEOUT */
/**
@@ -160,8 +160,9 @@
* This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source
* frequency.
*/
-#if !defined (EXTERNAL_SAI1_CLOCK_VALUE)
- #define EXTERNAL_SAI1_CLOCK_VALUE ((uint32_t)2097000) /*!< Value of the SAI1 External clock source in Hz*/
+#if !defined(EXTERNAL_SAI1_CLOCK_VALUE)
+#define EXTERNAL_SAI1_CLOCK_VALUE \
+ ((uint32_t)2097000) /*!< Value of the SAI1 External clock source in Hz*/
#endif /* EXTERNAL_SAI1_CLOCK_VALUE */
/* Tip: To avoid modifying this file each time you need to use different HSE,
@@ -172,12 +173,12 @@
* @brief This is the HAL system configuration section
*/
-#define VDD_VALUE 3300U /*!< Value of VDD in mv */
-#define TICK_INT_PRIORITY 15U /*!< tick interrupt priority */
-#define USE_RTOS 0U
-#define PREFETCH_ENABLE 1U
-#define INSTRUCTION_CACHE_ENABLE 1U
-#define DATA_CACHE_ENABLE 1U
+#define VDD_VALUE 3300U /*!< Value of VDD in mv */
+#define TICK_INT_PRIORITY 15U /*!< tick interrupt priority */
+#define USE_RTOS 0U
+#define PREFETCH_ENABLE 1U
+#define INSTRUCTION_CACHE_ENABLE 1U
+#define DATA_CACHE_ENABLE 1U
/* ########################## Assert Selection ############################## */
/**
@@ -193,142 +194,142 @@
* Deactivated: CRC code cleaned from driver
*/
-#define USE_SPI_CRC 0U
+#define USE_SPI_CRC 0U
/* Includes ------------------------------------------------------------------*/
/**
* @brief Include module's header file
*/
#ifdef HAL_DMA_MODULE_ENABLED
- #include "stm32wbxx_hal_dma.h"
+#include "stm32wbxx_hal_dma.h"
#endif /* HAL_DMA_MODULE_ENABLED */
#ifdef HAL_ADC_MODULE_ENABLED
- #include "stm32wbxx_hal_adc.h"
+#include "stm32wbxx_hal_adc.h"
#endif /* HAL_ADC_MODULE_ENABLED */
#ifdef HAL_COMP_MODULE_ENABLED
- #include "stm32wbxx_hal_comp.h"
+#include "stm32wbxx_hal_comp.h"
#endif /* HAL_COMP_MODULE_ENABLED */
#ifdef HAL_CORTEX_MODULE_ENABLED
- #include "stm32wbxx_hal_cortex.h"
+#include "stm32wbxx_hal_cortex.h"
#endif /* HAL_CORTEX_MODULE_ENABLED */
#ifdef HAL_CRC_MODULE_ENABLED
- #include "stm32wbxx_hal_crc.h"
+#include "stm32wbxx_hal_crc.h"
#endif /* HAL_CRC_MODULE_ENABLED */
#ifdef HAL_CRYP_MODULE_ENABLED
- #include "stm32wbxx_hal_cryp.h"
+#include "stm32wbxx_hal_cryp.h"
#endif /* HAL_CRYP_MODULE_ENABLED */
#ifdef HAL_EXTI_MODULE_ENABLED
- #include "stm32wbxx_hal_exti.h"
+#include "stm32wbxx_hal_exti.h"
#endif /* HAL_EXTI_MODULE_ENABLED */
#ifdef HAL_FLASH_MODULE_ENABLED
- #include "stm32wbxx_hal_flash.h"
+#include "stm32wbxx_hal_flash.h"
#endif /* HAL_FLASH_MODULE_ENABLED */
#ifdef HAL_GPIO_MODULE_ENABLED
- #include "stm32wbxx_hal_gpio.h"
+#include "stm32wbxx_hal_gpio.h"
#endif /* HAL_GPIO_MODULE_ENABLED */
#ifdef HAL_HSEM_MODULE_ENABLED
- #include "stm32wbxx_hal_hsem.h"
+#include "stm32wbxx_hal_hsem.h"
#endif /* HAL_HSEM_MODULE_ENABLED */
#ifdef HAL_I2C_MODULE_ENABLED
- #include "stm32wbxx_hal_i2c.h"
+#include "stm32wbxx_hal_i2c.h"
#endif /* HAL_I2C_MODULE_ENABLED */
#ifdef HAL_IPCC_MODULE_ENABLED
- #include "stm32wbxx_hal_ipcc.h"
+#include "stm32wbxx_hal_ipcc.h"
#endif /* HAL_IPCC_MODULE_ENABLED */
#ifdef HAL_IRDA_MODULE_ENABLED
- #include "stm32wbxx_hal_irda.h"
+#include "stm32wbxx_hal_irda.h"
#endif /* HAL_IRDA_MODULE_ENABLED */
#ifdef HAL_IWDG_MODULE_ENABLED
- #include "stm32wbxx_hal_iwdg.h"
+#include "stm32wbxx_hal_iwdg.h"
#endif /* HAL_IWDG_MODULE_ENABLED */
#ifdef HAL_LCD_MODULE_ENABLED
- #include "stm32wbxx_hal_lcd.h"
+#include "stm32wbxx_hal_lcd.h"
#endif /* HAL_LCD_MODULE_ENABLED */
#ifdef HAL_LPTIM_MODULE_ENABLED
- #include "stm32wbxx_hal_lptim.h"
+#include "stm32wbxx_hal_lptim.h"
#endif /* HAL_LPTIM_MODULE_ENABLED */
#ifdef HAL_PCD_MODULE_ENABLED
- #include "stm32wbxx_hal_pcd.h"
+#include "stm32wbxx_hal_pcd.h"
#endif /* HAL_PCD_MODULE_ENABLED */
#ifdef HAL_PKA_MODULE_ENABLED
- #include "stm32wbxx_hal_pka.h"
+#include "stm32wbxx_hal_pka.h"
#endif /* HAL_PKA_MODULE_ENABLED */
#ifdef HAL_PWR_MODULE_ENABLED
- #include "stm32wbxx_hal_pwr.h"
+#include "stm32wbxx_hal_pwr.h"
#endif /* HAL_PWR_MODULE_ENABLED */
#ifdef HAL_QSPI_MODULE_ENABLED
- #include "stm32wbxx_hal_qspi.h"
+#include "stm32wbxx_hal_qspi.h"
#endif /* HAL_QSPI_MODULE_ENABLED */
#ifdef HAL_RCC_MODULE_ENABLED
- #include "stm32wbxx_hal_rcc.h"
+#include "stm32wbxx_hal_rcc.h"
#endif /* HAL_RCC_MODULE_ENABLED */
#ifdef HAL_RNG_MODULE_ENABLED
- #include "stm32wbxx_hal_rng.h"
+#include "stm32wbxx_hal_rng.h"
#endif /* HAL_RNG_MODULE_ENABLED */
#ifdef HAL_RTC_MODULE_ENABLED
- #include "stm32wbxx_hal_rtc.h"
+#include "stm32wbxx_hal_rtc.h"
#endif /* HAL_RTC_MODULE_ENABLED */
#ifdef HAL_SAI_MODULE_ENABLED
- #include "stm32wbxx_hal_sai.h"
+#include "stm32wbxx_hal_sai.h"
#endif /* HAL_SAI_MODULE_ENABLED */
#ifdef HAL_SMARTCARD_MODULE_ENABLED
- #include "stm32wbxx_hal_smartcard.h"
+#include "stm32wbxx_hal_smartcard.h"
#endif /* HAL_SMARTCARD_MODULE_ENABLED */
#ifdef HAL_SMBUS_MODULE_ENABLED
- #include "stm32wbxx_hal_smbus.h"
+#include "stm32wbxx_hal_smbus.h"
#endif /* HAL_SMBUS_MODULE_ENABLED */
#ifdef HAL_SPI_MODULE_ENABLED
- #include "stm32wbxx_hal_spi.h"
+#include "stm32wbxx_hal_spi.h"
#endif /* HAL_SPI_MODULE_ENABLED */
#ifdef HAL_TIM_MODULE_ENABLED
- #include "stm32wbxx_hal_tim.h"
+#include "stm32wbxx_hal_tim.h"
#endif /* HAL_TIM_MODULE_ENABLED */
#ifdef HAL_TSC_MODULE_ENABLED
- #include "stm32wbxx_hal_tsc.h"
+#include "stm32wbxx_hal_tsc.h"
#endif /* HAL_TSC_MODULE_ENABLED */
#ifdef HAL_UART_MODULE_ENABLED
- #include "stm32wbxx_hal_uart.h"
+#include "stm32wbxx_hal_uart.h"
#endif /* HAL_UART_MODULE_ENABLED */
#ifdef HAL_USART_MODULE_ENABLED
- #include "stm32wbxx_hal_usart.h"
+#include "stm32wbxx_hal_usart.h"
#endif /* HAL_USART_MODULE_ENABLED */
#ifdef HAL_WWDG_MODULE_ENABLED
- #include "stm32wbxx_hal_wwdg.h"
+#include "stm32wbxx_hal_wwdg.h"
#endif /* HAL_WWDG_MODULE_ENABLED */
/* Exported macro ------------------------------------------------------------*/
-#ifdef USE_FULL_ASSERT
+#ifdef USE_FULL_ASSERT
/**
* @brief The assert_param macro is used for function's parameters check.
* @param expr If expr is false, it calls assert_failed function
@@ -337,11 +338,11 @@
* If expr is true, it returns no value.
* @retval None
*/
- #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
+#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t*)__FILE__, __LINE__))
/* Exported functions ------------------------------------------------------- */
- void assert_failed(uint8_t* file, uint32_t line);
+void assert_failed(uint8_t* file, uint32_t line);
#else
- #define assert_param(expr) ((void)0U)
+#define assert_param(expr) ((void)0U)
#endif /* USE_FULL_ASSERT */
#ifdef __cplusplus
diff --git a/firmware/targets/f6/cube/Inc/stm32wbxx_it.h b/firmware/targets/f6/cube/Inc/stm32wbxx_it.h
index df0f1f99..095a83ec 100644
--- a/firmware/targets/f6/cube/Inc/stm32wbxx_it.h
+++ b/firmware/targets/f6/cube/Inc/stm32wbxx_it.h
@@ -23,7 +23,7 @@
#define __STM32WBxx_IT_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Private includes ----------------------------------------------------------*/
diff --git a/firmware/targets/f6/cube/Inc/tim.h b/firmware/targets/f6/cube/Inc/tim.h
index 3a750349..e0f65f10 100644
--- a/firmware/targets/f6/cube/Inc/tim.h
+++ b/firmware/targets/f6/cube/Inc/tim.h
@@ -43,7 +43,7 @@ void MX_TIM1_Init(void);
void MX_TIM2_Init(void);
void MX_TIM16_Init(void);
-void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
+void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim);
/* USER CODE BEGIN Prototypes */
diff --git a/firmware/targets/f6/cube/Inc/usb_device.h b/firmware/targets/f6/cube/Inc/usb_device.h
index 4ec69d3b..b9a4bf43 100644
--- a/firmware/targets/f6/cube/Inc/usb_device.h
+++ b/firmware/targets/f6/cube/Inc/usb_device.h
@@ -24,7 +24,7 @@
#define __USB_DEVICE__H__
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
diff --git a/firmware/targets/f6/cube/Inc/usbd_cdc_if.h b/firmware/targets/f6/cube/Inc/usbd_cdc_if.h
index be388ddf..7ddbe67a 100644
--- a/firmware/targets/f6/cube/Inc/usbd_cdc_if.h
+++ b/firmware/targets/f6/cube/Inc/usbd_cdc_if.h
@@ -24,7 +24,7 @@
#define __USBD_CDC_IF_H__
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
@@ -49,8 +49,8 @@
* @{
*/
/* Define size for the receive and transmit buffer over CDC */
-#define APP_RX_DATA_SIZE 512
-#define APP_TX_DATA_SIZE 512
+#define APP_RX_DATA_SIZE 512
+#define APP_TX_DATA_SIZE 512
/* USER CODE BEGIN EXPORTED_DEFINES */
/* USER CODE END EXPORTED_DEFINES */
diff --git a/firmware/targets/f6/cube/Inc/usbd_conf.h b/firmware/targets/f6/cube/Inc/usbd_conf.h
index 21f4b5a6..98306d6a 100644
--- a/firmware/targets/f6/cube/Inc/usbd_conf.h
+++ b/firmware/targets/f6/cube/Inc/usbd_conf.h
@@ -24,7 +24,7 @@
#define __USBD_CONF__H__
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
@@ -66,21 +66,21 @@
*/
/*---------- -----------*/
-#define USBD_MAX_NUM_INTERFACES 1U
+#define USBD_MAX_NUM_INTERFACES 1U
/*---------- -----------*/
-#define USBD_MAX_NUM_CONFIGURATION 1U
+#define USBD_MAX_NUM_CONFIGURATION 1U
/*---------- -----------*/
-#define USBD_MAX_STR_DESC_SIZ 512U
+#define USBD_MAX_STR_DESC_SIZ 512U
/*---------- -----------*/
-#define USBD_DEBUG_LEVEL 0U
+#define USBD_DEBUG_LEVEL 0U
/*---------- -----------*/
-#define USBD_LPM_ENABLED 1U
+#define USBD_LPM_ENABLED 1U
/*---------- -----------*/
-#define USBD_SELF_POWERED 1U
+#define USBD_SELF_POWERED 1U
/****************************************/
/* #define for FS and HS identification */
-#define DEVICE_FS 0
+#define DEVICE_FS 0
/**
* @}
@@ -94,41 +94,44 @@
/* Memory management macros */
/** Alias for memory allocation. */
-#define USBD_malloc (void *)USBD_static_malloc
+#define USBD_malloc (void*)USBD_static_malloc
/** Alias for memory release. */
-#define USBD_free USBD_static_free
+#define USBD_free USBD_static_free
/** Alias for memory set. */
-#define USBD_memset memset
+#define USBD_memset memset
/** Alias for memory copy. */
-#define USBD_memcpy memcpy
+#define USBD_memcpy memcpy
/** Alias for delay. */
-#define USBD_Delay HAL_Delay
+#define USBD_Delay HAL_Delay
/* DEBUG macros */
-#if (USBD_DEBUG_LEVEL > 0)
-#define USBD_UsrLog(...) printf(__VA_ARGS__);\
- printf("\n");
+#if(USBD_DEBUG_LEVEL > 0)
+#define USBD_UsrLog(...) \
+ printf(__VA_ARGS__); \
+ printf("\n");
#else
#define USBD_UsrLog(...)
#endif
-#if (USBD_DEBUG_LEVEL > 1)
+#if(USBD_DEBUG_LEVEL > 1)
-#define USBD_ErrLog(...) printf("ERROR: ") ;\
- printf(__VA_ARGS__);\
- printf("\n");
+#define USBD_ErrLog(...) \
+ printf("ERROR: "); \
+ printf(__VA_ARGS__); \
+ printf("\n");
#else
#define USBD_ErrLog(...)
#endif
-#if (USBD_DEBUG_LEVEL > 2)
-#define USBD_DbgLog(...) printf("DEBUG : ") ;\
- printf(__VA_ARGS__);\
- printf("\n");
+#if(USBD_DEBUG_LEVEL > 2)
+#define USBD_DbgLog(...) \
+ printf("DEBUG : "); \
+ printf(__VA_ARGS__); \
+ printf("\n");
#else
#define USBD_DbgLog(...)
#endif
@@ -152,8 +155,8 @@
*/
/* Exported functions -------------------------------------------------------*/
-void *USBD_static_malloc(uint32_t size);
-void USBD_static_free(void *p);
+void* USBD_static_malloc(uint32_t size);
+void USBD_static_free(void* p);
/**
* @}
diff --git a/firmware/targets/f6/cube/Inc/usbd_desc.h b/firmware/targets/f6/cube/Inc/usbd_desc.h
index 7e7b58b5..67a70dc6 100644
--- a/firmware/targets/f6/cube/Inc/usbd_desc.h
+++ b/firmware/targets/f6/cube/Inc/usbd_desc.h
@@ -24,7 +24,7 @@
#define __USBD_DESC__C__
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
@@ -47,11 +47,11 @@
* @brief Constants.
* @{
*/
-#define DEVICE_ID1 (UID_BASE)
-#define DEVICE_ID2 (UID_BASE + 0x4)
-#define DEVICE_ID3 (UID_BASE + 0x8)
+#define DEVICE_ID1 (UID_BASE)
+#define DEVICE_ID2 (UID_BASE + 0x4)
+#define DEVICE_ID3 (UID_BASE + 0x8)
-#define USB_SIZ_STRING_SERIAL 0x1A
+#define USB_SIZ_STRING_SERIAL 0x1A
/* USER CODE BEGIN EXPORTED_CONSTANTS */
@@ -105,7 +105,7 @@
* @{
*/
-extern USBD_DescriptorsTypeDef CDC_Desc;
+extern USBD_DescriptorsTypeDef CDC_Desc;
/* USER CODE BEGIN EXPORTED_VARIABLES */
diff --git a/firmware/targets/f6/cube/Src/adc.c b/firmware/targets/f6/cube/Src/adc.c
index aa49bab4..d0c3d98e 100644
--- a/firmware/targets/f6/cube/Src/adc.c
+++ b/firmware/targets/f6/cube/Src/adc.c
@@ -27,109 +27,98 @@
ADC_HandleTypeDef hadc1;
/* ADC1 init function */
-void MX_ADC1_Init(void)
-{
+void MX_ADC1_Init(void) {
+ /* USER CODE BEGIN ADC1_Init 0 */
- /* USER CODE BEGIN ADC1_Init 0 */
+ /* USER CODE END ADC1_Init 0 */
- /* USER CODE END ADC1_Init 0 */
+ ADC_ChannelConfTypeDef sConfig = {0};
- ADC_ChannelConfTypeDef sConfig = {0};
+ /* USER CODE BEGIN ADC1_Init 1 */
- /* USER CODE BEGIN ADC1_Init 1 */
-
- /* USER CODE END ADC1_Init 1 */
- /** Common config
+ /* USER CODE END ADC1_Init 1 */
+ /** Common config
*/
- hadc1.Instance = ADC1;
- hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
- hadc1.Init.Resolution = ADC_RESOLUTION_12B;
- hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
- hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
- hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
- hadc1.Init.LowPowerAutoWait = DISABLE;
- hadc1.Init.ContinuousConvMode = DISABLE;
- hadc1.Init.NbrOfConversion = 1;
- hadc1.Init.DiscontinuousConvMode = DISABLE;
- hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
- hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
- hadc1.Init.DMAContinuousRequests = DISABLE;
- hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
- hadc1.Init.OversamplingMode = DISABLE;
- if (HAL_ADC_Init(&hadc1) != HAL_OK)
- {
- Error_Handler();
- }
- /** Configure Regular Channel
+ hadc1.Instance = ADC1;
+ hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
+ hadc1.Init.Resolution = ADC_RESOLUTION_12B;
+ hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
+ hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
+ hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
+ hadc1.Init.LowPowerAutoWait = DISABLE;
+ hadc1.Init.ContinuousConvMode = DISABLE;
+ hadc1.Init.NbrOfConversion = 1;
+ hadc1.Init.DiscontinuousConvMode = DISABLE;
+ hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
+ hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
+ hadc1.Init.DMAContinuousRequests = DISABLE;
+ hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
+ hadc1.Init.OversamplingMode = DISABLE;
+ if(HAL_ADC_Init(&hadc1) != HAL_OK) {
+ Error_Handler();
+ }
+ /** Configure Regular Channel
*/
- sConfig.Channel = ADC_CHANNEL_14;
- sConfig.Rank = ADC_REGULAR_RANK_1;
- sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
- sConfig.SingleDiff = ADC_SINGLE_ENDED;
- sConfig.OffsetNumber = ADC_OFFSET_NONE;
- sConfig.Offset = 0;
- if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN ADC1_Init 2 */
-
- /* USER CODE END ADC1_Init 2 */
-
+ sConfig.Channel = ADC_CHANNEL_14;
+ sConfig.Rank = ADC_REGULAR_RANK_1;
+ sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
+ sConfig.SingleDiff = ADC_SINGLE_ENDED;
+ sConfig.OffsetNumber = ADC_OFFSET_NONE;
+ sConfig.Offset = 0;
+ if(HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN ADC1_Init 2 */
+
+ /* USER CODE END ADC1_Init 2 */
}
-void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
-{
+void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle) {
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ if(adcHandle->Instance == ADC1) {
+ /* USER CODE BEGIN ADC1_MspInit 0 */
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- if(adcHandle->Instance==ADC1)
- {
- /* USER CODE BEGIN ADC1_MspInit 0 */
+ /* USER CODE END ADC1_MspInit 0 */
+ /* ADC1 clock enable */
+ __HAL_RCC_ADC_CLK_ENABLE();
- /* USER CODE END ADC1_MspInit 0 */
- /* ADC1 clock enable */
- __HAL_RCC_ADC_CLK_ENABLE();
-
- __HAL_RCC_GPIOC_CLK_ENABLE();
- /**ADC1 GPIO Configuration
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ /**ADC1 GPIO Configuration
PC5 ------> ADC1_IN14
*/
- GPIO_InitStruct.Pin = RFID_RF_IN_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(RFID_RF_IN_GPIO_Port, &GPIO_InitStruct);
-
- /* ADC1 interrupt Init */
- HAL_NVIC_SetPriority(ADC1_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(ADC1_IRQn);
- /* USER CODE BEGIN ADC1_MspInit 1 */
-
- /* USER CODE END ADC1_MspInit 1 */
- }
+ GPIO_InitStruct.Pin = RFID_RF_IN_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ HAL_GPIO_Init(RFID_RF_IN_GPIO_Port, &GPIO_InitStruct);
+
+ /* ADC1 interrupt Init */
+ HAL_NVIC_SetPriority(ADC1_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(ADC1_IRQn);
+ /* USER CODE BEGIN ADC1_MspInit 1 */
+
+ /* USER CODE END ADC1_MspInit 1 */
+ }
}
-void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle)
-{
-
- if(adcHandle->Instance==ADC1)
- {
- /* USER CODE BEGIN ADC1_MspDeInit 0 */
+void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle) {
+ if(adcHandle->Instance == ADC1) {
+ /* USER CODE BEGIN ADC1_MspDeInit 0 */
- /* USER CODE END ADC1_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_ADC_CLK_DISABLE();
+ /* USER CODE END ADC1_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_ADC_CLK_DISABLE();
- /**ADC1 GPIO Configuration
+ /**ADC1 GPIO Configuration
PC5 ------> ADC1_IN14
*/
- HAL_GPIO_DeInit(RFID_RF_IN_GPIO_Port, RFID_RF_IN_Pin);
+ HAL_GPIO_DeInit(RFID_RF_IN_GPIO_Port, RFID_RF_IN_Pin);
- /* ADC1 interrupt Deinit */
- HAL_NVIC_DisableIRQ(ADC1_IRQn);
- /* USER CODE BEGIN ADC1_MspDeInit 1 */
+ /* ADC1 interrupt Deinit */
+ HAL_NVIC_DisableIRQ(ADC1_IRQn);
+ /* USER CODE BEGIN ADC1_MspDeInit 1 */
- /* USER CODE END ADC1_MspDeInit 1 */
- }
+ /* USER CODE END ADC1_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f6/cube/Src/aes.c b/firmware/targets/f6/cube/Src/aes.c
index 5d5cc06a..ace83341 100644
--- a/firmware/targets/f6/cube/Src/aes.c
+++ b/firmware/targets/f6/cube/Src/aes.c
@@ -25,119 +25,101 @@
/* USER CODE END 0 */
CRYP_HandleTypeDef hcryp1;
-__ALIGN_BEGIN static const uint32_t pKeyAES1[4] __ALIGN_END = {
- 0x00000000,0x00000000,0x00000000,0x00000000};
+__ALIGN_BEGIN static const uint32_t pKeyAES1[4] __ALIGN_END =
+ {0x00000000, 0x00000000, 0x00000000, 0x00000000};
CRYP_HandleTypeDef hcryp2;
-__ALIGN_BEGIN static const uint32_t pKeyAES2[4] __ALIGN_END = {
- 0x00000000,0x00000000,0x00000000,0x00000000};
+__ALIGN_BEGIN static const uint32_t pKeyAES2[4] __ALIGN_END =
+ {0x00000000, 0x00000000, 0x00000000, 0x00000000};
/* AES1 init function */
-void MX_AES1_Init(void)
-{
-
- /* USER CODE BEGIN AES1_Init 0 */
-
- /* USER CODE END AES1_Init 0 */
-
- /* USER CODE BEGIN AES1_Init 1 */
-
- /* USER CODE END AES1_Init 1 */
- hcryp1.Instance = AES1;
- hcryp1.Init.DataType = CRYP_DATATYPE_32B;
- hcryp1.Init.KeySize = CRYP_KEYSIZE_128B;
- hcryp1.Init.pKey = (uint32_t *)pKeyAES1;
- hcryp1.Init.Algorithm = CRYP_AES_ECB;
- hcryp1.Init.DataWidthUnit = CRYP_DATAWIDTHUNIT_WORD;
- hcryp1.Init.KeyIVConfigSkip = CRYP_KEYIVCONFIG_ALWAYS;
- if (HAL_CRYP_Init(&hcryp1) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN AES1_Init 2 */
-
- /* USER CODE END AES1_Init 2 */
-
+void MX_AES1_Init(void) {
+ /* USER CODE BEGIN AES1_Init 0 */
+
+ /* USER CODE END AES1_Init 0 */
+
+ /* USER CODE BEGIN AES1_Init 1 */
+
+ /* USER CODE END AES1_Init 1 */
+ hcryp1.Instance = AES1;
+ hcryp1.Init.DataType = CRYP_DATATYPE_32B;
+ hcryp1.Init.KeySize = CRYP_KEYSIZE_128B;
+ hcryp1.Init.pKey = (uint32_t*)pKeyAES1;
+ hcryp1.Init.Algorithm = CRYP_AES_ECB;
+ hcryp1.Init.DataWidthUnit = CRYP_DATAWIDTHUNIT_WORD;
+ hcryp1.Init.KeyIVConfigSkip = CRYP_KEYIVCONFIG_ALWAYS;
+ if(HAL_CRYP_Init(&hcryp1) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN AES1_Init 2 */
+
+ /* USER CODE END AES1_Init 2 */
}
/* AES2 init function */
-void MX_AES2_Init(void)
-{
-
- /* USER CODE BEGIN AES2_Init 0 */
-
- /* USER CODE END AES2_Init 0 */
-
- /* USER CODE BEGIN AES2_Init 1 */
-
- /* USER CODE END AES2_Init 1 */
- hcryp2.Instance = AES2;
- hcryp2.Init.DataType = CRYP_DATATYPE_32B;
- hcryp2.Init.KeySize = CRYP_KEYSIZE_128B;
- hcryp2.Init.pKey = (uint32_t *)pKeyAES2;
- hcryp2.Init.Algorithm = CRYP_AES_ECB;
- hcryp2.Init.DataWidthUnit = CRYP_DATAWIDTHUNIT_WORD;
- hcryp2.Init.KeyIVConfigSkip = CRYP_KEYIVCONFIG_ALWAYS;
- if (HAL_CRYP_Init(&hcryp2) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN AES2_Init 2 */
-
- /* USER CODE END AES2_Init 2 */
-
+void MX_AES2_Init(void) {
+ /* USER CODE BEGIN AES2_Init 0 */
+
+ /* USER CODE END AES2_Init 0 */
+
+ /* USER CODE BEGIN AES2_Init 1 */
+
+ /* USER CODE END AES2_Init 1 */
+ hcryp2.Instance = AES2;
+ hcryp2.Init.DataType = CRYP_DATATYPE_32B;
+ hcryp2.Init.KeySize = CRYP_KEYSIZE_128B;
+ hcryp2.Init.pKey = (uint32_t*)pKeyAES2;
+ hcryp2.Init.Algorithm = CRYP_AES_ECB;
+ hcryp2.Init.DataWidthUnit = CRYP_DATAWIDTHUNIT_WORD;
+ hcryp2.Init.KeyIVConfigSkip = CRYP_KEYIVCONFIG_ALWAYS;
+ if(HAL_CRYP_Init(&hcryp2) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN AES2_Init 2 */
+
+ /* USER CODE END AES2_Init 2 */
}
-void HAL_CRYP_MspInit(CRYP_HandleTypeDef* crypHandle)
-{
-
- if(crypHandle->Instance==AES1)
- {
- /* USER CODE BEGIN AES1_MspInit 0 */
+void HAL_CRYP_MspInit(CRYP_HandleTypeDef* crypHandle) {
+ if(crypHandle->Instance == AES1) {
+ /* USER CODE BEGIN AES1_MspInit 0 */
- /* USER CODE END AES1_MspInit 0 */
- /* AES1 clock enable */
- __HAL_RCC_AES1_CLK_ENABLE();
- /* USER CODE BEGIN AES1_MspInit 1 */
+ /* USER CODE END AES1_MspInit 0 */
+ /* AES1 clock enable */
+ __HAL_RCC_AES1_CLK_ENABLE();
+ /* USER CODE BEGIN AES1_MspInit 1 */
- /* USER CODE END AES1_MspInit 1 */
- }
- else if(crypHandle->Instance==AES2)
- {
- /* USER CODE BEGIN AES2_MspInit 0 */
+ /* USER CODE END AES1_MspInit 1 */
+ } else if(crypHandle->Instance == AES2) {
+ /* USER CODE BEGIN AES2_MspInit 0 */
- /* USER CODE END AES2_MspInit 0 */
- /* AES2 clock enable */
- __HAL_RCC_AES2_CLK_ENABLE();
- /* USER CODE BEGIN AES2_MspInit 1 */
+ /* USER CODE END AES2_MspInit 0 */
+ /* AES2 clock enable */
+ __HAL_RCC_AES2_CLK_ENABLE();
+ /* USER CODE BEGIN AES2_MspInit 1 */
- /* USER CODE END AES2_MspInit 1 */
- }
+ /* USER CODE END AES2_MspInit 1 */
+ }
}
-void HAL_CRYP_MspDeInit(CRYP_HandleTypeDef* crypHandle)
-{
-
- if(crypHandle->Instance==AES1)
- {
- /* USER CODE BEGIN AES1_MspDeInit 0 */
+void HAL_CRYP_MspDeInit(CRYP_HandleTypeDef* crypHandle) {
+ if(crypHandle->Instance == AES1) {
+ /* USER CODE BEGIN AES1_MspDeInit 0 */
- /* USER CODE END AES1_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_AES1_CLK_DISABLE();
- /* USER CODE BEGIN AES1_MspDeInit 1 */
+ /* USER CODE END AES1_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_AES1_CLK_DISABLE();
+ /* USER CODE BEGIN AES1_MspDeInit 1 */
- /* USER CODE END AES1_MspDeInit 1 */
- }
- else if(crypHandle->Instance==AES2)
- {
- /* USER CODE BEGIN AES2_MspDeInit 0 */
+ /* USER CODE END AES1_MspDeInit 1 */
+ } else if(crypHandle->Instance == AES2) {
+ /* USER CODE BEGIN AES2_MspDeInit 0 */
- /* USER CODE END AES2_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_AES2_CLK_DISABLE();
- /* USER CODE BEGIN AES2_MspDeInit 1 */
+ /* USER CODE END AES2_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_AES2_CLK_DISABLE();
+ /* USER CODE BEGIN AES2_MspDeInit 1 */
- /* USER CODE END AES2_MspDeInit 1 */
- }
+ /* USER CODE END AES2_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f6/cube/Src/app_freertos.c b/firmware/targets/f6/cube/Src/app_freertos.c
index c4af8e87..fcb18ce6 100644
--- a/firmware/targets/f6/cube/Src/app_freertos.c
+++ b/firmware/targets/f6/cube/Src/app_freertos.c
@@ -51,17 +51,16 @@
/* Definitions for app_main */
osThreadId_t app_mainHandle;
const osThreadAttr_t app_main_attributes = {
- .name = "app_main",
- .priority = (osPriority_t) osPriorityNormal,
- .stack_size = 1024 * 4
-};
+ .name = "app_main",
+ .priority = (osPriority_t)osPriorityNormal,
+ .stack_size = 1024 * 4};
/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes */
/* USER CODE END FunctionPrototypes */
-void app(void *argument);
+void app(void* argument);
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
@@ -69,25 +68,21 @@ void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
void configureTimerForRunTimeStats(void);
unsigned long getRunTimeCounterValue(void);
void vApplicationIdleHook(void);
-void vApplicationStackOverflowHook(TaskHandle_t xTask, signed char *pcTaskName);
+void vApplicationStackOverflowHook(TaskHandle_t xTask, signed char* pcTaskName);
/* USER CODE BEGIN 1 */
/* Functions needed when configGENERATE_RUN_TIME_STATS is on */
-__weak void configureTimerForRunTimeStats(void)
-{
-
+__weak void configureTimerForRunTimeStats(void) {
}
-__weak unsigned long getRunTimeCounterValue(void)
-{
-return 0;
+__weak unsigned long getRunTimeCounterValue(void) {
+ return 0;
}
/* USER CODE END 1 */
/* USER CODE BEGIN 2 */
-void vApplicationIdleHook( void )
-{
- /* vApplicationIdleHook() will only be called if configUSE_IDLE_HOOK is set
+void vApplicationIdleHook(void) {
+ /* vApplicationIdleHook() will only be called if configUSE_IDLE_HOOK is set
to 1 in FreeRTOSConfig.h. It will be called on each iteration of the idle
task. It is essential that code added to this hook function never attempts
to block in any way (for example, call xQueueReceive() with a block time
@@ -100,20 +95,18 @@ void vApplicationIdleHook( void )
/* USER CODE END 2 */
/* USER CODE BEGIN 4 */
-void vApplicationStackOverflowHook(TaskHandle_t xTask, signed char *pcTaskName)
-{
- /* Run time stack overflow checking is performed if
+void vApplicationStackOverflowHook(TaskHandle_t xTask, signed char* pcTaskName) {
+ /* Run time stack overflow checking is performed if
configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook function is
called if a stack overflow is detected. */
}
/* USER CODE END 4 */
/* USER CODE BEGIN VPORT_SUPPORT_TICKS_AND_SLEEP */
-__weak void vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime )
-{
- // Generated when configUSE_TICKLESS_IDLE == 2.
- // Function called in tasks.c (in portTASK_FUNCTION).
- // TO BE COMPLETED or TO BE REPLACED by a user one, overriding that weak one.
+__weak void vPortSuppressTicksAndSleep(TickType_t xExpectedIdleTime) {
+ // Generated when configUSE_TICKLESS_IDLE == 2.
+ // Function called in tasks.c (in portTASK_FUNCTION).
+ // TO BE COMPLETED or TO BE REPLACED by a user one, overriding that weak one.
}
/* USER CODE END VPORT_SUPPORT_TICKS_AND_SLEEP */
@@ -123,38 +116,37 @@ __weak void vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime )
* @retval None
*/
void MX_FREERTOS_Init(void) {
- /* USER CODE BEGIN Init */
-
- /* USER CODE END Init */
+ /* USER CODE BEGIN Init */
- /* USER CODE BEGIN RTOS_MUTEX */
- /* add mutexes, ... */
- /* USER CODE END RTOS_MUTEX */
+ /* USER CODE END Init */
- /* USER CODE BEGIN RTOS_SEMAPHORES */
- /* add semaphores, ... */
- /* USER CODE END RTOS_SEMAPHORES */
+ /* USER CODE BEGIN RTOS_MUTEX */
+ /* add mutexes, ... */
+ /* USER CODE END RTOS_MUTEX */
- /* USER CODE BEGIN RTOS_TIMERS */
- /* start timers, add new ones, ... */
- /* USER CODE END RTOS_TIMERS */
+ /* USER CODE BEGIN RTOS_SEMAPHORES */
+ /* add semaphores, ... */
+ /* USER CODE END RTOS_SEMAPHORES */
- /* USER CODE BEGIN RTOS_QUEUES */
- /* add queues, ... */
- /* USER CODE END RTOS_QUEUES */
+ /* USER CODE BEGIN RTOS_TIMERS */
+ /* start timers, add new ones, ... */
+ /* USER CODE END RTOS_TIMERS */
- /* Create the thread(s) */
- /* creation of app_main */
- app_mainHandle = osThreadNew(app, NULL, &app_main_attributes);
+ /* USER CODE BEGIN RTOS_QUEUES */
+ /* add queues, ... */
+ /* USER CODE END RTOS_QUEUES */
- /* USER CODE BEGIN RTOS_THREADS */
- /* add threads, ... */
- /* USER CODE END RTOS_THREADS */
+ /* Create the thread(s) */
+ /* creation of app_main */
+ app_mainHandle = osThreadNew(app, NULL, &app_main_attributes);
- /* USER CODE BEGIN RTOS_EVENTS */
- /* add events, ... */
- /* USER CODE END RTOS_EVENTS */
+ /* USER CODE BEGIN RTOS_THREADS */
+ /* add threads, ... */
+ /* USER CODE END RTOS_THREADS */
+ /* USER CODE BEGIN RTOS_EVENTS */
+ /* add events, ... */
+ /* USER CODE END RTOS_EVENTS */
}
/* USER CODE BEGIN Header_app */
@@ -164,15 +156,13 @@ void MX_FREERTOS_Init(void) {
* @retval None
*/
/* USER CODE END Header_app */
-__weak void app(void *argument)
-{
- /* USER CODE BEGIN app */
- /* Infinite loop */
- for(;;)
- {
- osDelay(1);
- }
- /* USER CODE END app */
+__weak void app(void* argument) {
+ /* USER CODE BEGIN app */
+ /* Infinite loop */
+ for(;;) {
+ osDelay(1);
+ }
+ /* USER CODE END app */
}
/* Private application code --------------------------------------------------*/
diff --git a/firmware/targets/f6/cube/Src/comp.c b/firmware/targets/f6/cube/Src/comp.c
index 11ae0757..95e697e3 100644
--- a/firmware/targets/f6/cube/Src/comp.c
+++ b/firmware/targets/f6/cube/Src/comp.c
@@ -27,83 +27,73 @@
COMP_HandleTypeDef hcomp1;
/* COMP1 init function */
-void MX_COMP1_Init(void)
-{
-
- /* USER CODE BEGIN COMP1_Init 0 */
-
- /* USER CODE END COMP1_Init 0 */
-
- /* USER CODE BEGIN COMP1_Init 1 */
-
- /* USER CODE END COMP1_Init 1 */
- hcomp1.Instance = COMP1;
- hcomp1.Init.InputMinus = COMP_INPUT_MINUS_1_4VREFINT;
- hcomp1.Init.InputPlus = COMP_INPUT_PLUS_IO1;
- hcomp1.Init.OutputPol = COMP_OUTPUTPOL_NONINVERTED;
- hcomp1.Init.Hysteresis = COMP_HYSTERESIS_HIGH;
- hcomp1.Init.BlankingSrce = COMP_BLANKINGSRC_NONE;
- hcomp1.Init.Mode = COMP_POWERMODE_MEDIUMSPEED;
- hcomp1.Init.WindowMode = COMP_WINDOWMODE_DISABLE;
- hcomp1.Init.TriggerMode = COMP_TRIGGERMODE_IT_RISING_FALLING;
- if (HAL_COMP_Init(&hcomp1) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN COMP1_Init 2 */
-
- /* USER CODE END COMP1_Init 2 */
-
+void MX_COMP1_Init(void) {
+ /* USER CODE BEGIN COMP1_Init 0 */
+
+ /* USER CODE END COMP1_Init 0 */
+
+ /* USER CODE BEGIN COMP1_Init 1 */
+
+ /* USER CODE END COMP1_Init 1 */
+ hcomp1.Instance = COMP1;
+ hcomp1.Init.InputMinus = COMP_INPUT_MINUS_1_4VREFINT;
+ hcomp1.Init.InputPlus = COMP_INPUT_PLUS_IO1;
+ hcomp1.Init.OutputPol = COMP_OUTPUTPOL_NONINVERTED;
+ hcomp1.Init.Hysteresis = COMP_HYSTERESIS_HIGH;
+ hcomp1.Init.BlankingSrce = COMP_BLANKINGSRC_NONE;
+ hcomp1.Init.Mode = COMP_POWERMODE_MEDIUMSPEED;
+ hcomp1.Init.WindowMode = COMP_WINDOWMODE_DISABLE;
+ hcomp1.Init.TriggerMode = COMP_TRIGGERMODE_IT_RISING_FALLING;
+ if(HAL_COMP_Init(&hcomp1) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN COMP1_Init 2 */
+
+ /* USER CODE END COMP1_Init 2 */
}
-void HAL_COMP_MspInit(COMP_HandleTypeDef* compHandle)
-{
+void HAL_COMP_MspInit(COMP_HandleTypeDef* compHandle) {
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ if(compHandle->Instance == COMP1) {
+ /* USER CODE BEGIN COMP1_MspInit 0 */
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- if(compHandle->Instance==COMP1)
- {
- /* USER CODE BEGIN COMP1_MspInit 0 */
+ /* USER CODE END COMP1_MspInit 0 */
- /* USER CODE END COMP1_MspInit 0 */
-
- __HAL_RCC_GPIOC_CLK_ENABLE();
- /**COMP1 GPIO Configuration
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ /**COMP1 GPIO Configuration
PC5 ------> COMP1_INP
*/
- GPIO_InitStruct.Pin = RFID_RF_IN_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(RFID_RF_IN_GPIO_Port, &GPIO_InitStruct);
-
- /* COMP1 interrupt Init */
- HAL_NVIC_SetPriority(COMP_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(COMP_IRQn);
- /* USER CODE BEGIN COMP1_MspInit 1 */
-
- /* USER CODE END COMP1_MspInit 1 */
- }
+ GPIO_InitStruct.Pin = RFID_RF_IN_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ HAL_GPIO_Init(RFID_RF_IN_GPIO_Port, &GPIO_InitStruct);
+
+ /* COMP1 interrupt Init */
+ HAL_NVIC_SetPriority(COMP_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(COMP_IRQn);
+ /* USER CODE BEGIN COMP1_MspInit 1 */
+
+ /* USER CODE END COMP1_MspInit 1 */
+ }
}
-void HAL_COMP_MspDeInit(COMP_HandleTypeDef* compHandle)
-{
-
- if(compHandle->Instance==COMP1)
- {
- /* USER CODE BEGIN COMP1_MspDeInit 0 */
+void HAL_COMP_MspDeInit(COMP_HandleTypeDef* compHandle) {
+ if(compHandle->Instance == COMP1) {
+ /* USER CODE BEGIN COMP1_MspDeInit 0 */
- /* USER CODE END COMP1_MspDeInit 0 */
+ /* USER CODE END COMP1_MspDeInit 0 */
- /**COMP1 GPIO Configuration
+ /**COMP1 GPIO Configuration
PC5 ------> COMP1_INP
*/
- HAL_GPIO_DeInit(RFID_RF_IN_GPIO_Port, RFID_RF_IN_Pin);
+ HAL_GPIO_DeInit(RFID_RF_IN_GPIO_Port, RFID_RF_IN_Pin);
- /* COMP1 interrupt Deinit */
- HAL_NVIC_DisableIRQ(COMP_IRQn);
- /* USER CODE BEGIN COMP1_MspDeInit 1 */
+ /* COMP1 interrupt Deinit */
+ HAL_NVIC_DisableIRQ(COMP_IRQn);
+ /* USER CODE BEGIN COMP1_MspDeInit 1 */
- /* USER CODE END COMP1_MspDeInit 1 */
- }
+ /* USER CODE END COMP1_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f6/cube/Src/crc.c b/firmware/targets/f6/cube/Src/crc.c
index 7873e85a..203032ea 100644
--- a/firmware/targets/f6/cube/Src/crc.c
+++ b/firmware/targets/f6/cube/Src/crc.c
@@ -27,62 +27,52 @@
CRC_HandleTypeDef hcrc;
/* CRC init function */
-void MX_CRC_Init(void)
-{
-
- /* USER CODE BEGIN CRC_Init 0 */
-
- /* USER CODE END CRC_Init 0 */
-
- /* USER CODE BEGIN CRC_Init 1 */
-
- /* USER CODE END CRC_Init 1 */
- hcrc.Instance = CRC;
- hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_ENABLE;
- hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE;
- hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_NONE;
- hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_DISABLE;
- hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;
- if (HAL_CRC_Init(&hcrc) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN CRC_Init 2 */
-
- /* USER CODE END CRC_Init 2 */
-
+void MX_CRC_Init(void) {
+ /* USER CODE BEGIN CRC_Init 0 */
+
+ /* USER CODE END CRC_Init 0 */
+
+ /* USER CODE BEGIN CRC_Init 1 */
+
+ /* USER CODE END CRC_Init 1 */
+ hcrc.Instance = CRC;
+ hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_ENABLE;
+ hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE;
+ hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_NONE;
+ hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_DISABLE;
+ hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;
+ if(HAL_CRC_Init(&hcrc) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN CRC_Init 2 */
+
+ /* USER CODE END CRC_Init 2 */
}
-void HAL_CRC_MspInit(CRC_HandleTypeDef* crcHandle)
-{
+void HAL_CRC_MspInit(CRC_HandleTypeDef* crcHandle) {
+ if(crcHandle->Instance == CRC) {
+ /* USER CODE BEGIN CRC_MspInit 0 */
- if(crcHandle->Instance==CRC)
- {
- /* USER CODE BEGIN CRC_MspInit 0 */
+ /* USER CODE END CRC_MspInit 0 */
+ /* CRC clock enable */
+ __HAL_RCC_CRC_CLK_ENABLE();
+ /* USER CODE BEGIN CRC_MspInit 1 */
- /* USER CODE END CRC_MspInit 0 */
- /* CRC clock enable */
- __HAL_RCC_CRC_CLK_ENABLE();
- /* USER CODE BEGIN CRC_MspInit 1 */
-
- /* USER CODE END CRC_MspInit 1 */
- }
+ /* USER CODE END CRC_MspInit 1 */
+ }
}
-void HAL_CRC_MspDeInit(CRC_HandleTypeDef* crcHandle)
-{
-
- if(crcHandle->Instance==CRC)
- {
- /* USER CODE BEGIN CRC_MspDeInit 0 */
+void HAL_CRC_MspDeInit(CRC_HandleTypeDef* crcHandle) {
+ if(crcHandle->Instance == CRC) {
+ /* USER CODE BEGIN CRC_MspDeInit 0 */
- /* USER CODE END CRC_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_CRC_CLK_DISABLE();
- /* USER CODE BEGIN CRC_MspDeInit 1 */
+ /* USER CODE END CRC_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_CRC_CLK_DISABLE();
+ /* USER CODE BEGIN CRC_MspDeInit 1 */
- /* USER CODE END CRC_MspDeInit 1 */
- }
+ /* USER CODE END CRC_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f6/cube/Src/gpio.c b/firmware/targets/f6/cube/Src/gpio.c
index 0bec4feb..098ab19d 100644
--- a/firmware/targets/f6/cube/Src/gpio.c
+++ b/firmware/targets/f6/cube/Src/gpio.c
@@ -38,138 +38,135 @@
* EVENT_OUT
* EXTI
*/
-void MX_GPIO_Init(void)
-{
-
- GPIO_InitTypeDef GPIO_InitStruct = {0};
-
- /* GPIO Ports Clock Enable */
- __HAL_RCC_GPIOC_CLK_ENABLE();
- __HAL_RCC_GPIOH_CLK_ENABLE();
- __HAL_RCC_GPIOB_CLK_ENABLE();
- __HAL_RCC_GPIOA_CLK_ENABLE();
- __HAL_RCC_GPIOE_CLK_ENABLE();
- __HAL_RCC_GPIOD_CLK_ENABLE();
-
- /*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(GPIOA, RFID_PULL_Pin|RFID_TUNE_Pin|VIBRO_Pin, GPIO_PIN_RESET);
-
- /*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(PERIPH_POWER_GPIO_Port, PERIPH_POWER_Pin, GPIO_PIN_SET);
-
- /*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(RF_SW_0_GPIO_Port, RF_SW_0_Pin, GPIO_PIN_RESET);
-
- /*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(GPIOB, DISPLAY_RST_Pin|DISPLAY_DI_Pin, GPIO_PIN_RESET);
-
- /*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(NFC_CS_GPIO_Port, NFC_CS_Pin, GPIO_PIN_SET);
-
- /*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(GPIOC, DISPLAY_CS_Pin|SD_CS_Pin, GPIO_PIN_SET);
-
- /*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(CC1101_CS_GPIO_Port, CC1101_CS_Pin, GPIO_PIN_SET);
-
- /*Configure GPIO pin : PtPin */
- GPIO_InitStruct.Pin = BUTTON_BACK_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- HAL_GPIO_Init(BUTTON_BACK_GPIO_Port, &GPIO_InitStruct);
-
- /*Configure GPIO pin : PtPin */
- GPIO_InitStruct.Pin = BUTTON_OK_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(BUTTON_OK_GPIO_Port, &GPIO_InitStruct);
-
- /*Configure GPIO pins : PCPin PCPin PCPin */
- GPIO_InitStruct.Pin = PC0_Pin|PC1_Pin|PC3_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
-
- /*Configure GPIO pins : PAPin PAPin PAPin PAPin */
- GPIO_InitStruct.Pin = CC1101_G0_Pin|PA4_Pin|PA6_Pin|PA7_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
-
- /*Configure GPIO pins : PAPin PAPin PAPin */
- GPIO_InitStruct.Pin = RFID_PULL_Pin|RFID_TUNE_Pin|VIBRO_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
-
- /*Configure GPIO pin : PtPin */
- GPIO_InitStruct.Pin = PERIPH_POWER_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- HAL_GPIO_Init(PERIPH_POWER_GPIO_Port, &GPIO_InitStruct);
-
- /*Configure GPIO pins : PCPin PCPin */
- GPIO_InitStruct.Pin = RF_SW_0_Pin|DISPLAY_CS_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
-
- /*Configure GPIO pins : PBPin PBPin PBPin */
- GPIO_InitStruct.Pin = PB2_Pin|iBTN_Pin|PB3_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-
- /*Configure GPIO pins : PBPin PBPin PBPin */
- GPIO_InitStruct.Pin = BUTTON_UP_Pin|BUTTON_LEFT_Pin|BUTTON_RIGHT_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-
- /*Configure GPIO pins : PBPin PBPin */
- GPIO_InitStruct.Pin = DISPLAY_RST_Pin|DISPLAY_DI_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-
- /*Configure GPIO pin : PtPin */
- GPIO_InitStruct.Pin = NFC_CS_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- HAL_GPIO_Init(NFC_CS_GPIO_Port, &GPIO_InitStruct);
-
- /*Configure GPIO pins : PCPin PCPin */
- GPIO_InitStruct.Pin = BUTTON_DOWN_Pin|SD_CD_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
-
- /*Configure GPIO pin : PtPin */
- GPIO_InitStruct.Pin = SD_CS_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- HAL_GPIO_Init(SD_CS_GPIO_Port, &GPIO_InitStruct);
-
- /*Configure GPIO pin : PtPin */
- GPIO_InitStruct.Pin = CC1101_CS_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- HAL_GPIO_Init(CC1101_CS_GPIO_Port, &GPIO_InitStruct);
-
- /* EXTI interrupt init*/
- HAL_NVIC_SetPriority(EXTI3_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(EXTI3_IRQn);
-
- HAL_NVIC_SetPriority(EXTI15_10_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
-
+void MX_GPIO_Init(void) {
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+
+ /* GPIO Ports Clock Enable */
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ __HAL_RCC_GPIOH_CLK_ENABLE();
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ __HAL_RCC_GPIOE_CLK_ENABLE();
+ __HAL_RCC_GPIOD_CLK_ENABLE();
+
+ /*Configure GPIO pin Output Level */
+ HAL_GPIO_WritePin(GPIOA, RFID_PULL_Pin | RFID_TUNE_Pin | VIBRO_Pin, GPIO_PIN_RESET);
+
+ /*Configure GPIO pin Output Level */
+ HAL_GPIO_WritePin(PERIPH_POWER_GPIO_Port, PERIPH_POWER_Pin, GPIO_PIN_SET);
+
+ /*Configure GPIO pin Output Level */
+ HAL_GPIO_WritePin(RF_SW_0_GPIO_Port, RF_SW_0_Pin, GPIO_PIN_RESET);
+
+ /*Configure GPIO pin Output Level */
+ HAL_GPIO_WritePin(GPIOB, DISPLAY_RST_Pin | DISPLAY_DI_Pin, GPIO_PIN_RESET);
+
+ /*Configure GPIO pin Output Level */
+ HAL_GPIO_WritePin(NFC_CS_GPIO_Port, NFC_CS_Pin, GPIO_PIN_SET);
+
+ /*Configure GPIO pin Output Level */
+ HAL_GPIO_WritePin(GPIOC, DISPLAY_CS_Pin | SD_CS_Pin, GPIO_PIN_SET);
+
+ /*Configure GPIO pin Output Level */
+ HAL_GPIO_WritePin(CC1101_CS_GPIO_Port, CC1101_CS_Pin, GPIO_PIN_SET);
+
+ /*Configure GPIO pin : PtPin */
+ GPIO_InitStruct.Pin = BUTTON_BACK_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
+ GPIO_InitStruct.Pull = GPIO_PULLUP;
+ HAL_GPIO_Init(BUTTON_BACK_GPIO_Port, &GPIO_InitStruct);
+
+ /*Configure GPIO pin : PtPin */
+ GPIO_InitStruct.Pin = BUTTON_OK_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ HAL_GPIO_Init(BUTTON_OK_GPIO_Port, &GPIO_InitStruct);
+
+ /*Configure GPIO pins : PCPin PCPin PCPin */
+ GPIO_InitStruct.Pin = PC0_Pin | PC1_Pin | PC3_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+
+ /*Configure GPIO pins : PAPin PAPin PAPin PAPin */
+ GPIO_InitStruct.Pin = CC1101_G0_Pin | PA4_Pin | PA6_Pin | PA7_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+ /*Configure GPIO pins : PAPin PAPin PAPin */
+ GPIO_InitStruct.Pin = RFID_PULL_Pin | RFID_TUNE_Pin | VIBRO_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+ /*Configure GPIO pin : PtPin */
+ GPIO_InitStruct.Pin = PERIPH_POWER_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ HAL_GPIO_Init(PERIPH_POWER_GPIO_Port, &GPIO_InitStruct);
+
+ /*Configure GPIO pins : PCPin PCPin */
+ GPIO_InitStruct.Pin = RF_SW_0_Pin | DISPLAY_CS_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+
+ /*Configure GPIO pins : PBPin PBPin PBPin */
+ GPIO_InitStruct.Pin = PB2_Pin | iBTN_Pin | PB3_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
+ /*Configure GPIO pins : PBPin PBPin PBPin */
+ GPIO_InitStruct.Pin = BUTTON_UP_Pin | BUTTON_LEFT_Pin | BUTTON_RIGHT_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
+ GPIO_InitStruct.Pull = GPIO_PULLUP;
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
+ /*Configure GPIO pins : PBPin PBPin */
+ GPIO_InitStruct.Pin = DISPLAY_RST_Pin | DISPLAY_DI_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
+ /*Configure GPIO pin : PtPin */
+ GPIO_InitStruct.Pin = NFC_CS_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ HAL_GPIO_Init(NFC_CS_GPIO_Port, &GPIO_InitStruct);
+
+ /*Configure GPIO pins : PCPin PCPin */
+ GPIO_InitStruct.Pin = BUTTON_DOWN_Pin | SD_CD_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+
+ /*Configure GPIO pin : PtPin */
+ GPIO_InitStruct.Pin = SD_CS_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ HAL_GPIO_Init(SD_CS_GPIO_Port, &GPIO_InitStruct);
+
+ /*Configure GPIO pin : PtPin */
+ GPIO_InitStruct.Pin = CC1101_CS_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ HAL_GPIO_Init(CC1101_CS_GPIO_Port, &GPIO_InitStruct);
+
+ /* EXTI interrupt init*/
+ HAL_NVIC_SetPriority(EXTI3_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(EXTI3_IRQn);
+
+ HAL_NVIC_SetPriority(EXTI15_10_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
}
/* USER CODE BEGIN 2 */
diff --git a/firmware/targets/f6/cube/Src/i2c.c b/firmware/targets/f6/cube/Src/i2c.c
index acc5ba38..0ad9765a 100644
--- a/firmware/targets/f6/cube/Src/i2c.c
+++ b/firmware/targets/f6/cube/Src/i2c.c
@@ -25,55 +25,52 @@
/* USER CODE END 0 */
/* I2C1 init function */
-void MX_I2C1_Init(void)
-{
+void MX_I2C1_Init(void) {
+ /* USER CODE BEGIN I2C1_Init 0 */
- /* USER CODE BEGIN I2C1_Init 0 */
+ /* USER CODE END I2C1_Init 0 */
- /* USER CODE END I2C1_Init 0 */
+ LL_I2C_InitTypeDef I2C_InitStruct = {0};
- LL_I2C_InitTypeDef I2C_InitStruct = {0};
+ LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
- LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
-
- LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA);
- /**I2C1 GPIO Configuration
+ LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA);
+ /**I2C1 GPIO Configuration
PA9 ------> I2C1_SCL
PA10 ------> I2C1_SDA
*/
- GPIO_InitStruct.Pin = LL_GPIO_PIN_9|LL_GPIO_PIN_10;
- GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
- GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
- GPIO_InitStruct.Alternate = LL_GPIO_AF_4;
- LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+ GPIO_InitStruct.Pin = LL_GPIO_PIN_9 | LL_GPIO_PIN_10;
+ GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
+ GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
+ GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
+ GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
+ GPIO_InitStruct.Alternate = LL_GPIO_AF_4;
+ LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- /* Peripheral clock enable */
- LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C1);
+ /* Peripheral clock enable */
+ LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C1);
- /* USER CODE BEGIN I2C1_Init 1 */
+ /* USER CODE BEGIN I2C1_Init 1 */
- /* USER CODE END I2C1_Init 1 */
- /** I2C Initialization
+ /* USER CODE END I2C1_Init 1 */
+ /** I2C Initialization
*/
- I2C_InitStruct.PeripheralMode = LL_I2C_MODE_I2C;
- I2C_InitStruct.Timing = 0x10707DBC;
- I2C_InitStruct.AnalogFilter = LL_I2C_ANALOGFILTER_ENABLE;
- I2C_InitStruct.DigitalFilter = 0;
- I2C_InitStruct.OwnAddress1 = 0;
- I2C_InitStruct.TypeAcknowledge = LL_I2C_ACK;
- I2C_InitStruct.OwnAddrSize = LL_I2C_OWNADDRESS1_7BIT;
- LL_I2C_Init(I2C1, &I2C_InitStruct);
- LL_I2C_EnableAutoEndMode(I2C1);
- LL_I2C_SetOwnAddress2(I2C1, 0, LL_I2C_OWNADDRESS2_NOMASK);
- LL_I2C_DisableOwnAddress2(I2C1);
- LL_I2C_DisableGeneralCall(I2C1);
- LL_I2C_EnableClockStretching(I2C1);
- /* USER CODE BEGIN I2C1_Init 2 */
-
- /* USER CODE END I2C1_Init 2 */
-
+ I2C_InitStruct.PeripheralMode = LL_I2C_MODE_I2C;
+ I2C_InitStruct.Timing = 0x10707DBC;
+ I2C_InitStruct.AnalogFilter = LL_I2C_ANALOGFILTER_ENABLE;
+ I2C_InitStruct.DigitalFilter = 0;
+ I2C_InitStruct.OwnAddress1 = 0;
+ I2C_InitStruct.TypeAcknowledge = LL_I2C_ACK;
+ I2C_InitStruct.OwnAddrSize = LL_I2C_OWNADDRESS1_7BIT;
+ LL_I2C_Init(I2C1, &I2C_InitStruct);
+ LL_I2C_EnableAutoEndMode(I2C1);
+ LL_I2C_SetOwnAddress2(I2C1, 0, LL_I2C_OWNADDRESS2_NOMASK);
+ LL_I2C_DisableOwnAddress2(I2C1);
+ LL_I2C_DisableGeneralCall(I2C1);
+ LL_I2C_EnableClockStretching(I2C1);
+ /* USER CODE BEGIN I2C1_Init 2 */
+
+ /* USER CODE END I2C1_Init 2 */
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f6/cube/Src/main.c b/firmware/targets/f6/cube/Src/main.c
index 8e65442d..d4ec7ec2 100644
--- a/firmware/targets/f6/cube/Src/main.c
+++ b/firmware/targets/f6/cube/Src/main.c
@@ -76,179 +76,167 @@ void MX_FREERTOS_Init(void);
* @brief The application entry point.
* @retval int
*/
-int main(void)
-{
- /* USER CODE BEGIN 1 */
-
- /* USER CODE END 1 */
-
- /* MCU Configuration--------------------------------------------------------*/
-
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- HAL_Init();
-
- /* USER CODE BEGIN Init */
-
- /* USER CODE END Init */
-
- /* Configure the system clock */
- SystemClock_Config();
-
- /* USER CODE BEGIN SysInit */
-
- /* USER CODE END SysInit */
-
- /* Initialize all configured peripherals */
- MX_GPIO_Init();
- MX_ADC1_Init();
- MX_I2C1_Init();
- MX_RTC_Init();
- MX_SPI1_Init();
- MX_SPI2_Init();
- MX_USB_Device_Init();
- MX_TIM1_Init();
- MX_TIM2_Init();
- MX_TIM16_Init();
- MX_COMP1_Init();
- MX_RF_Init();
- MX_PKA_Init();
- MX_RNG_Init();
- MX_AES1_Init();
- MX_AES2_Init();
- MX_CRC_Init();
- MX_USART1_UART_Init();
- /* USER CODE BEGIN 2 */
-
- /* USER CODE END 2 */
-
- /* Init scheduler */
- osKernelInitialize(); /* Call init function for freertos objects (in freertos.c) */
- MX_FREERTOS_Init();
- /* Start scheduler */
- osKernelStart();
-
- /* We should never get here as control is now taken by the scheduler */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- /* USER CODE END WHILE */
-
- /* USER CODE BEGIN 3 */
- }
- /* USER CODE END 3 */
+int main(void) {
+ /* USER CODE BEGIN 1 */
+
+ /* USER CODE END 1 */
+
+ /* MCU Configuration--------------------------------------------------------*/
+
+ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
+ HAL_Init();
+
+ /* USER CODE BEGIN Init */
+
+ /* USER CODE END Init */
+
+ /* Configure the system clock */
+ SystemClock_Config();
+
+ /* USER CODE BEGIN SysInit */
+
+ /* USER CODE END SysInit */
+
+ /* Initialize all configured peripherals */
+ MX_GPIO_Init();
+ MX_ADC1_Init();
+ MX_I2C1_Init();
+ MX_RTC_Init();
+ MX_SPI1_Init();
+ MX_SPI2_Init();
+ MX_USB_Device_Init();
+ MX_TIM1_Init();
+ MX_TIM2_Init();
+ MX_TIM16_Init();
+ MX_COMP1_Init();
+ MX_RF_Init();
+ MX_PKA_Init();
+ MX_RNG_Init();
+ MX_AES1_Init();
+ MX_AES2_Init();
+ MX_CRC_Init();
+ MX_USART1_UART_Init();
+ /* USER CODE BEGIN 2 */
+
+ /* USER CODE END 2 */
+
+ /* Init scheduler */
+ osKernelInitialize(); /* Call init function for freertos objects (in freertos.c) */
+ MX_FREERTOS_Init();
+ /* Start scheduler */
+ osKernelStart();
+
+ /* We should never get here as control is now taken by the scheduler */
+ /* Infinite loop */
+ /* USER CODE BEGIN WHILE */
+ while(1) {
+ /* USER CODE END WHILE */
+
+ /* USER CODE BEGIN 3 */
+ }
+ /* USER CODE END 3 */
}
/**
* @brief System Clock Configuration
* @retval None
*/
-void SystemClock_Config(void)
-{
- LL_FLASH_SetLatency(LL_FLASH_LATENCY_3);
- while(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_3)
- {
- }
-
- /* HSE configuration and activation */
- LL_RCC_HSE_Enable();
- while(LL_RCC_HSE_IsReady() != 1)
- {
- }
-
- /* HSI configuration and activation */
- LL_RCC_HSI_Enable();
- while(LL_RCC_HSI_IsReady() != 1)
- {
- }
-
- LL_PWR_EnableBkUpAccess();
- if(LL_RCC_GetRTCClockSource() != LL_RCC_RTC_CLKSOURCE_LSE)
- {
- LL_RCC_ForceBackupDomainReset();
- LL_RCC_ReleaseBackupDomainReset();
- }
- LL_RCC_LSE_SetDriveCapability(LL_RCC_LSEDRIVE_MEDIUMLOW);
- LL_RCC_LSE_Enable();
-
- /* Wait till LSE is ready */
- while(LL_RCC_LSE_IsReady() != 1)
- {
- }
-
- LL_RCC_HSE_EnableCSS();
- LL_RCC_LSE_EnableCSS();
- /* Main PLL configuration and activation */
- LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 8, LL_RCC_PLLR_DIV_2);
- LL_RCC_PLL_Enable();
- LL_RCC_PLL_EnableDomain_SYS();
- while(LL_RCC_PLL_IsReady() != 1)
- {
- }
-
- LL_RCC_PLLSAI1_ConfigDomain_48M(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 6, LL_RCC_PLLSAI1Q_DIV_2);
- LL_RCC_PLLSAI1_ConfigDomain_ADC(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 6, LL_RCC_PLLSAI1R_DIV_2);
- LL_RCC_PLLSAI1_Enable();
- LL_RCC_PLLSAI1_EnableDomain_48M();
- LL_RCC_PLLSAI1_EnableDomain_ADC();
-
- /* Wait till PLLSAI1 is ready */
- while(LL_RCC_PLLSAI1_IsReady() != 1)
- {
- }
-
- /* Sysclk activation on the main PLL */
- /* Set CPU1 prescaler*/
- LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
-
- /* Set CPU2 prescaler*/
- LL_C2_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_2);
-
- LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);
- while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL)
- {
- }
-
- /* Set AHB SHARED prescaler*/
- LL_RCC_SetAHB4Prescaler(LL_RCC_SYSCLK_DIV_1);
-
- /* Set APB1 prescaler*/
- LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);
-
- /* Set APB2 prescaler*/
- LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);
-
- /* Disable MSI */
- LL_RCC_MSI_Disable();
- while(LL_RCC_MSI_IsReady() != 0)
- {
- }
-
- /* Update CMSIS variable (which can be updated also through SystemCoreClockUpdate function) */
- LL_SetSystemCoreClock(64000000);
-
- /* Update the time base */
- if (HAL_InitTick (TICK_INT_PRIORITY) != HAL_OK)
- {
- Error_Handler();
- }
- if(LL_RCC_GetRTCClockSource() != LL_RCC_RTC_CLKSOURCE_LSE)
- {
- LL_RCC_SetRTCClockSource(LL_RCC_RTC_CLKSOURCE_LSE);
- }
- LL_RCC_EnableRTC();
- LL_RCC_SetUSARTClockSource(LL_RCC_USART1_CLKSOURCE_PCLK2);
- LL_RCC_SetADCClockSource(LL_RCC_ADC_CLKSOURCE_PLLSAI1);
- LL_RCC_SetI2CClockSource(LL_RCC_I2C1_CLKSOURCE_PCLK1);
- LL_RCC_SetRNGClockSource(LL_RCC_RNG_CLKSOURCE_CLK48);
- LL_RCC_SetUSBClockSource(LL_RCC_USB_CLKSOURCE_PLLSAI1);
- LL_RCC_SetCLK48ClockSource(LL_RCC_CLK48_CLKSOURCE_PLLSAI1);
- LL_RCC_SetSMPSClockSource(LL_RCC_SMPS_CLKSOURCE_HSE);
- LL_RCC_SetSMPSPrescaler(LL_RCC_SMPS_DIV_1);
- LL_RCC_SetRFWKPClockSource(LL_RCC_RFWKP_CLKSOURCE_LSE);
- /* USER CODE BEGIN Smps */
-
- /* USER CODE END Smps */
+void SystemClock_Config(void) {
+ LL_FLASH_SetLatency(LL_FLASH_LATENCY_3);
+ while(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_3) {
+ }
+
+ /* HSE configuration and activation */
+ LL_RCC_HSE_Enable();
+ while(LL_RCC_HSE_IsReady() != 1) {
+ }
+
+ /* HSI configuration and activation */
+ LL_RCC_HSI_Enable();
+ while(LL_RCC_HSI_IsReady() != 1) {
+ }
+
+ LL_PWR_EnableBkUpAccess();
+ if(LL_RCC_GetRTCClockSource() != LL_RCC_RTC_CLKSOURCE_LSE) {
+ LL_RCC_ForceBackupDomainReset();
+ LL_RCC_ReleaseBackupDomainReset();
+ }
+ LL_RCC_LSE_SetDriveCapability(LL_RCC_LSEDRIVE_MEDIUMLOW);
+ LL_RCC_LSE_Enable();
+
+ /* Wait till LSE is ready */
+ while(LL_RCC_LSE_IsReady() != 1) {
+ }
+
+ LL_RCC_HSE_EnableCSS();
+ LL_RCC_LSE_EnableCSS();
+ /* Main PLL configuration and activation */
+ LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 8, LL_RCC_PLLR_DIV_2);
+ LL_RCC_PLL_Enable();
+ LL_RCC_PLL_EnableDomain_SYS();
+ while(LL_RCC_PLL_IsReady() != 1) {
+ }
+
+ LL_RCC_PLLSAI1_ConfigDomain_48M(
+ LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 6, LL_RCC_PLLSAI1Q_DIV_2);
+ LL_RCC_PLLSAI1_ConfigDomain_ADC(
+ LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 6, LL_RCC_PLLSAI1R_DIV_2);
+ LL_RCC_PLLSAI1_Enable();
+ LL_RCC_PLLSAI1_EnableDomain_48M();
+ LL_RCC_PLLSAI1_EnableDomain_ADC();
+
+ /* Wait till PLLSAI1 is ready */
+ while(LL_RCC_PLLSAI1_IsReady() != 1) {
+ }
+
+ /* Sysclk activation on the main PLL */
+ /* Set CPU1 prescaler*/
+ LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
+
+ /* Set CPU2 prescaler*/
+ LL_C2_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_2);
+
+ LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);
+ while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL) {
+ }
+
+ /* Set AHB SHARED prescaler*/
+ LL_RCC_SetAHB4Prescaler(LL_RCC_SYSCLK_DIV_1);
+
+ /* Set APB1 prescaler*/
+ LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);
+
+ /* Set APB2 prescaler*/
+ LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);
+
+ /* Disable MSI */
+ LL_RCC_MSI_Disable();
+ while(LL_RCC_MSI_IsReady() != 0) {
+ }
+
+ /* Update CMSIS variable (which can be updated also through SystemCoreClockUpdate function) */
+ LL_SetSystemCoreClock(64000000);
+
+ /* Update the time base */
+ if(HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK) {
+ Error_Handler();
+ }
+ if(LL_RCC_GetRTCClockSource() != LL_RCC_RTC_CLKSOURCE_LSE) {
+ LL_RCC_SetRTCClockSource(LL_RCC_RTC_CLKSOURCE_LSE);
+ }
+ LL_RCC_EnableRTC();
+ LL_RCC_SetUSARTClockSource(LL_RCC_USART1_CLKSOURCE_PCLK2);
+ LL_RCC_SetADCClockSource(LL_RCC_ADC_CLKSOURCE_PLLSAI1);
+ LL_RCC_SetI2CClockSource(LL_RCC_I2C1_CLKSOURCE_PCLK1);
+ LL_RCC_SetRNGClockSource(LL_RCC_RNG_CLKSOURCE_CLK48);
+ LL_RCC_SetUSBClockSource(LL_RCC_USB_CLKSOURCE_PLLSAI1);
+ LL_RCC_SetCLK48ClockSource(LL_RCC_CLK48_CLKSOURCE_PLLSAI1);
+ LL_RCC_SetSMPSClockSource(LL_RCC_SMPS_CLKSOURCE_HSE);
+ LL_RCC_SetSMPSPrescaler(LL_RCC_SMPS_DIV_1);
+ LL_RCC_SetRFWKPClockSource(LL_RCC_RFWKP_CLKSOURCE_LSE);
+ /* USER CODE BEGIN Smps */
+
+ /* USER CODE END Smps */
}
/* USER CODE BEGIN 4 */
@@ -259,18 +247,16 @@ void SystemClock_Config(void)
* @brief This function is executed in case of error occurrence.
* @retval None
*/
-void Error_Handler(void)
-{
- /* USER CODE BEGIN Error_Handler_Debug */
- /* User can add his own implementation to report the HAL error return state */
- __disable_irq();
- while (1)
- {
- }
- /* USER CODE END Error_Handler_Debug */
+void Error_Handler(void) {
+ /* USER CODE BEGIN Error_Handler_Debug */
+ /* User can add his own implementation to report the HAL error return state */
+ __disable_irq();
+ while(1) {
+ }
+ /* USER CODE END Error_Handler_Debug */
}
-#ifdef USE_FULL_ASSERT
+#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
@@ -278,12 +264,11 @@ void Error_Handler(void)
* @param line: assert_param error line source number
* @retval None
*/
-void assert_failed(uint8_t *file, uint32_t line)
-{
- /* USER CODE BEGIN 6 */
- /* User can add his own implementation to report the file name and line number,
+void assert_failed(uint8_t* file, uint32_t line) {
+ /* USER CODE BEGIN 6 */
+ /* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
- /* USER CODE END 6 */
+ /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */
diff --git a/firmware/targets/f6/cube/Src/pka.c b/firmware/targets/f6/cube/Src/pka.c
index 0655c2e6..6a581317 100644
--- a/firmware/targets/f6/cube/Src/pka.c
+++ b/firmware/targets/f6/cube/Src/pka.c
@@ -27,57 +27,47 @@
PKA_HandleTypeDef hpka;
/* PKA init function */
-void MX_PKA_Init(void)
-{
+void MX_PKA_Init(void) {
+ /* USER CODE BEGIN PKA_Init 0 */
- /* USER CODE BEGIN PKA_Init 0 */
+ /* USER CODE END PKA_Init 0 */
- /* USER CODE END PKA_Init 0 */
+ /* USER CODE BEGIN PKA_Init 1 */
- /* USER CODE BEGIN PKA_Init 1 */
-
- /* USER CODE END PKA_Init 1 */
- hpka.Instance = PKA;
- if (HAL_PKA_Init(&hpka) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN PKA_Init 2 */
-
- /* USER CODE END PKA_Init 2 */
+ /* USER CODE END PKA_Init 1 */
+ hpka.Instance = PKA;
+ if(HAL_PKA_Init(&hpka) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN PKA_Init 2 */
+ /* USER CODE END PKA_Init 2 */
}
-void HAL_PKA_MspInit(PKA_HandleTypeDef* pkaHandle)
-{
+void HAL_PKA_MspInit(PKA_HandleTypeDef* pkaHandle) {
+ if(pkaHandle->Instance == PKA) {
+ /* USER CODE BEGIN PKA_MspInit 0 */
- if(pkaHandle->Instance==PKA)
- {
- /* USER CODE BEGIN PKA_MspInit 0 */
+ /* USER CODE END PKA_MspInit 0 */
+ /* PKA clock enable */
+ __HAL_RCC_PKA_CLK_ENABLE();
+ /* USER CODE BEGIN PKA_MspInit 1 */
- /* USER CODE END PKA_MspInit 0 */
- /* PKA clock enable */
- __HAL_RCC_PKA_CLK_ENABLE();
- /* USER CODE BEGIN PKA_MspInit 1 */
-
- /* USER CODE END PKA_MspInit 1 */
- }
+ /* USER CODE END PKA_MspInit 1 */
+ }
}
-void HAL_PKA_MspDeInit(PKA_HandleTypeDef* pkaHandle)
-{
-
- if(pkaHandle->Instance==PKA)
- {
- /* USER CODE BEGIN PKA_MspDeInit 0 */
+void HAL_PKA_MspDeInit(PKA_HandleTypeDef* pkaHandle) {
+ if(pkaHandle->Instance == PKA) {
+ /* USER CODE BEGIN PKA_MspDeInit 0 */
- /* USER CODE END PKA_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_PKA_CLK_DISABLE();
- /* USER CODE BEGIN PKA_MspDeInit 1 */
+ /* USER CODE END PKA_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_PKA_CLK_DISABLE();
+ /* USER CODE BEGIN PKA_MspDeInit 1 */
- /* USER CODE END PKA_MspDeInit 1 */
- }
+ /* USER CODE END PKA_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f6/cube/Src/rf.c b/firmware/targets/f6/cube/Src/rf.c
index a23e20d7..eaa4ba67 100644
--- a/firmware/targets/f6/cube/Src/rf.c
+++ b/firmware/targets/f6/cube/Src/rf.c
@@ -25,20 +25,17 @@
/* USER CODE END 0 */
/* RF init function */
-void MX_RF_Init(void)
-{
+void MX_RF_Init(void) {
+ /* USER CODE BEGIN RF_Init 0 */
- /* USER CODE BEGIN RF_Init 0 */
+ /* USER CODE END RF_Init 0 */
- /* USER CODE END RF_Init 0 */
+ /* USER CODE BEGIN RF_Init 1 */
- /* USER CODE BEGIN RF_Init 1 */
-
- /* USER CODE END RF_Init 1 */
- /* USER CODE BEGIN RF_Init 2 */
-
- /* USER CODE END RF_Init 2 */
+ /* USER CODE END RF_Init 1 */
+ /* USER CODE BEGIN RF_Init 2 */
+ /* USER CODE END RF_Init 2 */
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f6/cube/Src/rng.c b/firmware/targets/f6/cube/Src/rng.c
index dbf929ec..bab1b278 100644
--- a/firmware/targets/f6/cube/Src/rng.c
+++ b/firmware/targets/f6/cube/Src/rng.c
@@ -27,58 +27,48 @@
RNG_HandleTypeDef hrng;
/* RNG init function */
-void MX_RNG_Init(void)
-{
+void MX_RNG_Init(void) {
+ /* USER CODE BEGIN RNG_Init 0 */
- /* USER CODE BEGIN RNG_Init 0 */
+ /* USER CODE END RNG_Init 0 */
- /* USER CODE END RNG_Init 0 */
+ /* USER CODE BEGIN RNG_Init 1 */
- /* USER CODE BEGIN RNG_Init 1 */
-
- /* USER CODE END RNG_Init 1 */
- hrng.Instance = RNG;
- hrng.Init.ClockErrorDetection = RNG_CED_ENABLE;
- if (HAL_RNG_Init(&hrng) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN RNG_Init 2 */
-
- /* USER CODE END RNG_Init 2 */
+ /* USER CODE END RNG_Init 1 */
+ hrng.Instance = RNG;
+ hrng.Init.ClockErrorDetection = RNG_CED_ENABLE;
+ if(HAL_RNG_Init(&hrng) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN RNG_Init 2 */
+ /* USER CODE END RNG_Init 2 */
}
-void HAL_RNG_MspInit(RNG_HandleTypeDef* rngHandle)
-{
+void HAL_RNG_MspInit(RNG_HandleTypeDef* rngHandle) {
+ if(rngHandle->Instance == RNG) {
+ /* USER CODE BEGIN RNG_MspInit 0 */
- if(rngHandle->Instance==RNG)
- {
- /* USER CODE BEGIN RNG_MspInit 0 */
+ /* USER CODE END RNG_MspInit 0 */
+ /* RNG clock enable */
+ __HAL_RCC_RNG_CLK_ENABLE();
+ /* USER CODE BEGIN RNG_MspInit 1 */
- /* USER CODE END RNG_MspInit 0 */
- /* RNG clock enable */
- __HAL_RCC_RNG_CLK_ENABLE();
- /* USER CODE BEGIN RNG_MspInit 1 */
-
- /* USER CODE END RNG_MspInit 1 */
- }
+ /* USER CODE END RNG_MspInit 1 */
+ }
}
-void HAL_RNG_MspDeInit(RNG_HandleTypeDef* rngHandle)
-{
-
- if(rngHandle->Instance==RNG)
- {
- /* USER CODE BEGIN RNG_MspDeInit 0 */
+void HAL_RNG_MspDeInit(RNG_HandleTypeDef* rngHandle) {
+ if(rngHandle->Instance == RNG) {
+ /* USER CODE BEGIN RNG_MspDeInit 0 */
- /* USER CODE END RNG_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_RNG_CLK_DISABLE();
- /* USER CODE BEGIN RNG_MspDeInit 1 */
+ /* USER CODE END RNG_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_RNG_CLK_DISABLE();
+ /* USER CODE BEGIN RNG_MspDeInit 1 */
- /* USER CODE END RNG_MspDeInit 1 */
- }
+ /* USER CODE END RNG_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f6/cube/Src/rtc.c b/firmware/targets/f6/cube/Src/rtc.c
index 91e92390..416159f8 100644
--- a/firmware/targets/f6/cube/Src/rtc.c
+++ b/firmware/targets/f6/cube/Src/rtc.c
@@ -27,104 +27,92 @@
RTC_HandleTypeDef hrtc;
/* RTC init function */
-void MX_RTC_Init(void)
-{
+void MX_RTC_Init(void) {
+ /* USER CODE BEGIN RTC_Init 0 */
- /* USER CODE BEGIN RTC_Init 0 */
+ /* USER CODE END RTC_Init 0 */
- /* USER CODE END RTC_Init 0 */
+ RTC_TimeTypeDef sTime = {0};
+ RTC_DateTypeDef sDate = {0};
- RTC_TimeTypeDef sTime = {0};
- RTC_DateTypeDef sDate = {0};
+ /* USER CODE BEGIN RTC_Init 1 */
- /* USER CODE BEGIN RTC_Init 1 */
-
- /* USER CODE END RTC_Init 1 */
- /** Initialize RTC Only
+ /* USER CODE END RTC_Init 1 */
+ /** Initialize RTC Only
*/
- hrtc.Instance = RTC;
- hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
- hrtc.Init.AsynchPrediv = 127;
- hrtc.Init.SynchPrediv = 255;
- hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
- hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
- hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
- hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
- if (HAL_RTC_Init(&hrtc) != HAL_OK)
- {
- Error_Handler();
- }
-
- /* USER CODE BEGIN Check_RTC_BKUP */
-
- /* USER CODE END Check_RTC_BKUP */
-
- /** Initialize RTC and set the Time and Date
+ hrtc.Instance = RTC;
+ hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
+ hrtc.Init.AsynchPrediv = 127;
+ hrtc.Init.SynchPrediv = 255;
+ hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
+ hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
+ hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
+ hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
+ if(HAL_RTC_Init(&hrtc) != HAL_OK) {
+ Error_Handler();
+ }
+
+ /* USER CODE BEGIN Check_RTC_BKUP */
+
+ /* USER CODE END Check_RTC_BKUP */
+
+ /** Initialize RTC and set the Time and Date
*/
- sTime.Hours = 0x0;
- sTime.Minutes = 0x0;
- sTime.Seconds = 0x0;
- sTime.SubSeconds = 0x0;
- sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
- sTime.StoreOperation = RTC_STOREOPERATION_RESET;
- if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
- {
- Error_Handler();
- }
- sDate.WeekDay = RTC_WEEKDAY_MONDAY;
- sDate.Month = RTC_MONTH_JANUARY;
- sDate.Date = 0x1;
- sDate.Year = 0x0;
-
- if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN RTC_Init 2 */
-
- /* USER CODE END RTC_Init 2 */
-
+ sTime.Hours = 0x0;
+ sTime.Minutes = 0x0;
+ sTime.Seconds = 0x0;
+ sTime.SubSeconds = 0x0;
+ sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
+ sTime.StoreOperation = RTC_STOREOPERATION_RESET;
+ if(HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK) {
+ Error_Handler();
+ }
+ sDate.WeekDay = RTC_WEEKDAY_MONDAY;
+ sDate.Month = RTC_MONTH_JANUARY;
+ sDate.Date = 0x1;
+ sDate.Year = 0x0;
+
+ if(HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN RTC_Init 2 */
+
+ /* USER CODE END RTC_Init 2 */
}
-void HAL_RTC_MspInit(RTC_HandleTypeDef* rtcHandle)
-{
+void HAL_RTC_MspInit(RTC_HandleTypeDef* rtcHandle) {
+ if(rtcHandle->Instance == RTC) {
+ /* USER CODE BEGIN RTC_MspInit 0 */
- if(rtcHandle->Instance==RTC)
- {
- /* USER CODE BEGIN RTC_MspInit 0 */
+ /* USER CODE END RTC_MspInit 0 */
+ /* RTC clock enable */
+ __HAL_RCC_RTC_ENABLE();
+ __HAL_RCC_RTCAPB_CLK_ENABLE();
- /* USER CODE END RTC_MspInit 0 */
- /* RTC clock enable */
- __HAL_RCC_RTC_ENABLE();
- __HAL_RCC_RTCAPB_CLK_ENABLE();
+ /* RTC interrupt Init */
+ HAL_NVIC_SetPriority(TAMP_STAMP_LSECSS_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(TAMP_STAMP_LSECSS_IRQn);
+ /* USER CODE BEGIN RTC_MspInit 1 */
- /* RTC interrupt Init */
- HAL_NVIC_SetPriority(TAMP_STAMP_LSECSS_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(TAMP_STAMP_LSECSS_IRQn);
- /* USER CODE BEGIN RTC_MspInit 1 */
-
- /* USER CODE END RTC_MspInit 1 */
- }
+ /* USER CODE END RTC_MspInit 1 */
+ }
}
-void HAL_RTC_MspDeInit(RTC_HandleTypeDef* rtcHandle)
-{
-
- if(rtcHandle->Instance==RTC)
- {
- /* USER CODE BEGIN RTC_MspDeInit 0 */
+void HAL_RTC_MspDeInit(RTC_HandleTypeDef* rtcHandle) {
+ if(rtcHandle->Instance == RTC) {
+ /* USER CODE BEGIN RTC_MspDeInit 0 */
- /* USER CODE END RTC_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_RTC_DISABLE();
- __HAL_RCC_RTCAPB_CLK_DISABLE();
+ /* USER CODE END RTC_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_RTC_DISABLE();
+ __HAL_RCC_RTCAPB_CLK_DISABLE();
- /* RTC interrupt Deinit */
- HAL_NVIC_DisableIRQ(TAMP_STAMP_LSECSS_IRQn);
- /* USER CODE BEGIN RTC_MspDeInit 1 */
+ /* RTC interrupt Deinit */
+ HAL_NVIC_DisableIRQ(TAMP_STAMP_LSECSS_IRQn);
+ /* USER CODE BEGIN RTC_MspDeInit 1 */
- /* USER CODE END RTC_MspDeInit 1 */
- }
+ /* USER CODE END RTC_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f6/cube/Src/spi.c b/firmware/targets/f6/cube/Src/spi.c
index 09e07d21..329bc3bb 100644
--- a/firmware/targets/f6/cube/Src/spi.c
+++ b/firmware/targets/f6/cube/Src/spi.c
@@ -28,201 +28,183 @@ SPI_HandleTypeDef hspi1;
SPI_HandleTypeDef hspi2;
/* SPI1 init function */
-void MX_SPI1_Init(void)
-{
-
- /* USER CODE BEGIN SPI1_Init 0 */
-
- /* USER CODE END SPI1_Init 0 */
-
- /* USER CODE BEGIN SPI1_Init 1 */
-
- /* USER CODE END SPI1_Init 1 */
- hspi1.Instance = SPI1;
- hspi1.Init.Mode = SPI_MODE_MASTER;
- hspi1.Init.Direction = SPI_DIRECTION_2LINES;
- hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
- hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
- hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
- hspi1.Init.NSS = SPI_NSS_SOFT;
- hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
- hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
- hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
- hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
- hspi1.Init.CRCPolynomial = 7;
- hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
- hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
- if (HAL_SPI_Init(&hspi1) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN SPI1_Init 2 */
-
- /* USER CODE END SPI1_Init 2 */
-
+void MX_SPI1_Init(void) {
+ /* USER CODE BEGIN SPI1_Init 0 */
+
+ /* USER CODE END SPI1_Init 0 */
+
+ /* USER CODE BEGIN SPI1_Init 1 */
+
+ /* USER CODE END SPI1_Init 1 */
+ hspi1.Instance = SPI1;
+ hspi1.Init.Mode = SPI_MODE_MASTER;
+ hspi1.Init.Direction = SPI_DIRECTION_2LINES;
+ hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
+ hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
+ hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
+ hspi1.Init.NSS = SPI_NSS_SOFT;
+ hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
+ hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
+ hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
+ hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
+ hspi1.Init.CRCPolynomial = 7;
+ hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
+ hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
+ if(HAL_SPI_Init(&hspi1) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN SPI1_Init 2 */
+
+ /* USER CODE END SPI1_Init 2 */
}
/* SPI2 init function */
-void MX_SPI2_Init(void)
-{
-
- /* USER CODE BEGIN SPI2_Init 0 */
-
- /* USER CODE END SPI2_Init 0 */
-
- /* USER CODE BEGIN SPI2_Init 1 */
-
- /* USER CODE END SPI2_Init 1 */
- hspi2.Instance = SPI2;
- hspi2.Init.Mode = SPI_MODE_MASTER;
- hspi2.Init.Direction = SPI_DIRECTION_2LINES;
- hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
- hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
- hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
- hspi2.Init.NSS = SPI_NSS_SOFT;
- hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
- hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
- hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
- hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
- hspi2.Init.CRCPolynomial = 7;
- hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
- hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
- if (HAL_SPI_Init(&hspi2) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN SPI2_Init 2 */
-
- /* USER CODE END SPI2_Init 2 */
-
+void MX_SPI2_Init(void) {
+ /* USER CODE BEGIN SPI2_Init 0 */
+
+ /* USER CODE END SPI2_Init 0 */
+
+ /* USER CODE BEGIN SPI2_Init 1 */
+
+ /* USER CODE END SPI2_Init 1 */
+ hspi2.Instance = SPI2;
+ hspi2.Init.Mode = SPI_MODE_MASTER;
+ hspi2.Init.Direction = SPI_DIRECTION_2LINES;
+ hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
+ hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
+ hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
+ hspi2.Init.NSS = SPI_NSS_SOFT;
+ hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
+ hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
+ hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
+ hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
+ hspi2.Init.CRCPolynomial = 7;
+ hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
+ hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
+ if(HAL_SPI_Init(&hspi2) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN SPI2_Init 2 */
+
+ /* USER CODE END SPI2_Init 2 */
}
-void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
-{
+void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle) {
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ if(spiHandle->Instance == SPI1) {
+ /* USER CODE BEGIN SPI1_MspInit 0 */
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- if(spiHandle->Instance==SPI1)
- {
- /* USER CODE BEGIN SPI1_MspInit 0 */
+ /* USER CODE END SPI1_MspInit 0 */
+ /* SPI1 clock enable */
+ __HAL_RCC_SPI1_CLK_ENABLE();
- /* USER CODE END SPI1_MspInit 0 */
- /* SPI1 clock enable */
- __HAL_RCC_SPI1_CLK_ENABLE();
-
- __HAL_RCC_GPIOA_CLK_ENABLE();
- __HAL_RCC_GPIOB_CLK_ENABLE();
- /**SPI1 GPIO Configuration
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ /**SPI1 GPIO Configuration
PA5 ------> SPI1_SCK
PB4 ------> SPI1_MISO
PB5 ------> SPI1_MOSI
*/
- GPIO_InitStruct.Pin = SPI_R_SCK_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
- HAL_GPIO_Init(SPI_R_SCK_GPIO_Port, &GPIO_InitStruct);
-
- GPIO_InitStruct.Pin = SPI_R_MISO_Pin|SPI_R_MOSI_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-
- /* USER CODE BEGIN SPI1_MspInit 1 */
-
- /* USER CODE END SPI1_MspInit 1 */
- }
- else if(spiHandle->Instance==SPI2)
- {
- /* USER CODE BEGIN SPI2_MspInit 0 */
-
- /* USER CODE END SPI2_MspInit 0 */
- /* SPI2 clock enable */
- __HAL_RCC_SPI2_CLK_ENABLE();
-
- __HAL_RCC_GPIOC_CLK_ENABLE();
- __HAL_RCC_GPIOB_CLK_ENABLE();
- __HAL_RCC_GPIOD_CLK_ENABLE();
- /**SPI2 GPIO Configuration
+ GPIO_InitStruct.Pin = SPI_R_SCK_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
+ HAL_GPIO_Init(SPI_R_SCK_GPIO_Port, &GPIO_InitStruct);
+
+ GPIO_InitStruct.Pin = SPI_R_MISO_Pin | SPI_R_MOSI_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
+ /* USER CODE BEGIN SPI1_MspInit 1 */
+
+ /* USER CODE END SPI1_MspInit 1 */
+ } else if(spiHandle->Instance == SPI2) {
+ /* USER CODE BEGIN SPI2_MspInit 0 */
+
+ /* USER CODE END SPI2_MspInit 0 */
+ /* SPI2 clock enable */
+ __HAL_RCC_SPI2_CLK_ENABLE();
+
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ __HAL_RCC_GPIOD_CLK_ENABLE();
+ /**SPI2 GPIO Configuration
PC2 ------> SPI2_MISO
PB15 ------> SPI2_MOSI
PD1 ------> SPI2_SCK
*/
- GPIO_InitStruct.Pin = SPI_D_MISO_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
- HAL_GPIO_Init(SPI_D_MISO_GPIO_Port, &GPIO_InitStruct);
-
- GPIO_InitStruct.Pin = SPI_D_MOSI_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
- HAL_GPIO_Init(SPI_D_MOSI_GPIO_Port, &GPIO_InitStruct);
-
- GPIO_InitStruct.Pin = SPI_D_SCK_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
- HAL_GPIO_Init(SPI_D_SCK_GPIO_Port, &GPIO_InitStruct);
-
- /* USER CODE BEGIN SPI2_MspInit 1 */
-
- /* USER CODE END SPI2_MspInit 1 */
- }
+ GPIO_InitStruct.Pin = SPI_D_MISO_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
+ HAL_GPIO_Init(SPI_D_MISO_GPIO_Port, &GPIO_InitStruct);
+
+ GPIO_InitStruct.Pin = SPI_D_MOSI_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
+ HAL_GPIO_Init(SPI_D_MOSI_GPIO_Port, &GPIO_InitStruct);
+
+ GPIO_InitStruct.Pin = SPI_D_SCK_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
+ HAL_GPIO_Init(SPI_D_SCK_GPIO_Port, &GPIO_InitStruct);
+
+ /* USER CODE BEGIN SPI2_MspInit 1 */
+
+ /* USER CODE END SPI2_MspInit 1 */
+ }
}
-void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
-{
-
- if(spiHandle->Instance==SPI1)
- {
- /* USER CODE BEGIN SPI1_MspDeInit 0 */
+void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle) {
+ if(spiHandle->Instance == SPI1) {
+ /* USER CODE BEGIN SPI1_MspDeInit 0 */
- /* USER CODE END SPI1_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_SPI1_CLK_DISABLE();
+ /* USER CODE END SPI1_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_SPI1_CLK_DISABLE();
- /**SPI1 GPIO Configuration
+ /**SPI1 GPIO Configuration
PA5 ------> SPI1_SCK
PB4 ------> SPI1_MISO
PB5 ------> SPI1_MOSI
*/
- HAL_GPIO_DeInit(SPI_R_SCK_GPIO_Port, SPI_R_SCK_Pin);
+ HAL_GPIO_DeInit(SPI_R_SCK_GPIO_Port, SPI_R_SCK_Pin);
- HAL_GPIO_DeInit(GPIOB, SPI_R_MISO_Pin|SPI_R_MOSI_Pin);
+ HAL_GPIO_DeInit(GPIOB, SPI_R_MISO_Pin | SPI_R_MOSI_Pin);
- /* USER CODE BEGIN SPI1_MspDeInit 1 */
+ /* USER CODE BEGIN SPI1_MspDeInit 1 */
- /* USER CODE END SPI1_MspDeInit 1 */
- }
- else if(spiHandle->Instance==SPI2)
- {
- /* USER CODE BEGIN SPI2_MspDeInit 0 */
+ /* USER CODE END SPI1_MspDeInit 1 */
+ } else if(spiHandle->Instance == SPI2) {
+ /* USER CODE BEGIN SPI2_MspDeInit 0 */
- /* USER CODE END SPI2_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_SPI2_CLK_DISABLE();
+ /* USER CODE END SPI2_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_SPI2_CLK_DISABLE();
- /**SPI2 GPIO Configuration
+ /**SPI2 GPIO Configuration
PC2 ------> SPI2_MISO
PB15 ------> SPI2_MOSI
PD1 ------> SPI2_SCK
*/
- HAL_GPIO_DeInit(SPI_D_MISO_GPIO_Port, SPI_D_MISO_Pin);
+ HAL_GPIO_DeInit(SPI_D_MISO_GPIO_Port, SPI_D_MISO_Pin);
- HAL_GPIO_DeInit(SPI_D_MOSI_GPIO_Port, SPI_D_MOSI_Pin);
+ HAL_GPIO_DeInit(SPI_D_MOSI_GPIO_Port, SPI_D_MOSI_Pin);
- HAL_GPIO_DeInit(SPI_D_SCK_GPIO_Port, SPI_D_SCK_Pin);
+ HAL_GPIO_DeInit(SPI_D_SCK_GPIO_Port, SPI_D_SCK_Pin);
- /* USER CODE BEGIN SPI2_MspDeInit 1 */
+ /* USER CODE BEGIN SPI2_MspDeInit 1 */
- /* USER CODE END SPI2_MspDeInit 1 */
- }
+ /* USER CODE END SPI2_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f6/cube/Src/stm32wbxx_hal_msp.c b/firmware/targets/f6/cube/Src/stm32wbxx_hal_msp.c
index 0dca1166..90ef3c3f 100644
--- a/firmware/targets/f6/cube/Src/stm32wbxx_hal_msp.c
+++ b/firmware/targets/f6/cube/Src/stm32wbxx_hal_msp.c
@@ -61,29 +61,28 @@
/**
* Initializes the Global MSP.
*/
-void HAL_MspInit(void)
-{
- /* USER CODE BEGIN MspInit 0 */
+void HAL_MspInit(void) {
+ /* USER CODE BEGIN MspInit 0 */
- /* USER CODE END MspInit 0 */
+ /* USER CODE END MspInit 0 */
- __HAL_RCC_HSEM_CLK_ENABLE();
+ __HAL_RCC_HSEM_CLK_ENABLE();
- /* System interrupt init*/
- /* PendSV_IRQn interrupt configuration */
- HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0);
+ /* System interrupt init*/
+ /* PendSV_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0);
- /* Peripheral interrupt init */
- /* RCC_IRQn interrupt configuration */
- HAL_NVIC_SetPriority(RCC_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(RCC_IRQn);
- /* HSEM_IRQn interrupt configuration */
- HAL_NVIC_SetPriority(HSEM_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(HSEM_IRQn);
+ /* Peripheral interrupt init */
+ /* RCC_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(RCC_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(RCC_IRQn);
+ /* HSEM_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(HSEM_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(HSEM_IRQn);
- /* USER CODE BEGIN MspInit 1 */
+ /* USER CODE BEGIN MspInit 1 */
- /* USER CODE END MspInit 1 */
+ /* USER CODE END MspInit 1 */
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f6/cube/Src/stm32wbxx_it.c b/firmware/targets/f6/cube/Src/stm32wbxx_it.c
index 6a037871..57f420fb 100644
--- a/firmware/targets/f6/cube/Src/stm32wbxx_it.c
+++ b/firmware/targets/f6/cube/Src/stm32wbxx_it.c
@@ -74,102 +74,90 @@ extern TIM_HandleTypeDef htim2;
/**
* @brief This function handles Non maskable interrupt.
*/
-void NMI_Handler(void)
-{
- /* USER CODE BEGIN NonMaskableInt_IRQn 0 */
-
- /* USER CODE END NonMaskableInt_IRQn 0 */
- /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
- while (1)
- {
- }
- /* USER CODE END NonMaskableInt_IRQn 1 */
+void NMI_Handler(void) {
+ /* USER CODE BEGIN NonMaskableInt_IRQn 0 */
+
+ /* USER CODE END NonMaskableInt_IRQn 0 */
+ /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
+ while(1) {
+ }
+ /* USER CODE END NonMaskableInt_IRQn 1 */
}
/**
* @brief This function handles Hard fault interrupt.
*/
-void HardFault_Handler(void)
-{
- /* USER CODE BEGIN HardFault_IRQn 0 */
-
- /* USER CODE END HardFault_IRQn 0 */
- while (1)
- {
- /* USER CODE BEGIN W1_HardFault_IRQn 0 */
- /* USER CODE END W1_HardFault_IRQn 0 */
- }
+void HardFault_Handler(void) {
+ /* USER CODE BEGIN HardFault_IRQn 0 */
+
+ /* USER CODE END HardFault_IRQn 0 */
+ while(1) {
+ /* USER CODE BEGIN W1_HardFault_IRQn 0 */
+ /* USER CODE END W1_HardFault_IRQn 0 */
+ }
}
/**
* @brief This function handles Memory management fault.
*/
-void MemManage_Handler(void)
-{
- /* USER CODE BEGIN MemoryManagement_IRQn 0 */
-
- /* USER CODE END MemoryManagement_IRQn 0 */
- while (1)
- {
- /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */
- /* USER CODE END W1_MemoryManagement_IRQn 0 */
- }
+void MemManage_Handler(void) {
+ /* USER CODE BEGIN MemoryManagement_IRQn 0 */
+
+ /* USER CODE END MemoryManagement_IRQn 0 */
+ while(1) {
+ /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */
+ /* USER CODE END W1_MemoryManagement_IRQn 0 */
+ }
}
/**
* @brief This function handles Prefetch fault, memory access fault.
*/
-void BusFault_Handler(void)
-{
- /* USER CODE BEGIN BusFault_IRQn 0 */
-
- /* USER CODE END BusFault_IRQn 0 */
- while (1)
- {
- /* USER CODE BEGIN W1_BusFault_IRQn 0 */
- /* USER CODE END W1_BusFault_IRQn 0 */
- }
+void BusFault_Handler(void) {
+ /* USER CODE BEGIN BusFault_IRQn 0 */
+
+ /* USER CODE END BusFault_IRQn 0 */
+ while(1) {
+ /* USER CODE BEGIN W1_BusFault_IRQn 0 */
+ /* USER CODE END W1_BusFault_IRQn 0 */
+ }
}
/**
* @brief This function handles Undefined instruction or illegal state.
*/
-void UsageFault_Handler(void)
-{
- /* USER CODE BEGIN UsageFault_IRQn 0 */
-
- /* USER CODE END UsageFault_IRQn 0 */
- while (1)
- {
- /* USER CODE BEGIN W1_UsageFault_IRQn 0 */
- /* USER CODE END W1_UsageFault_IRQn 0 */
- }
+void UsageFault_Handler(void) {
+ /* USER CODE BEGIN UsageFault_IRQn 0 */
+
+ /* USER CODE END UsageFault_IRQn 0 */
+ while(1) {
+ /* USER CODE BEGIN W1_UsageFault_IRQn 0 */
+ /* USER CODE END W1_UsageFault_IRQn 0 */
+ }
}
/**
* @brief This function handles Debug monitor.
*/
-void DebugMon_Handler(void)
-{
- /* USER CODE BEGIN DebugMonitor_IRQn 0 */
+void DebugMon_Handler(void) {
+ /* USER CODE BEGIN DebugMonitor_IRQn 0 */
- /* USER CODE END DebugMonitor_IRQn 0 */
- /* USER CODE BEGIN DebugMonitor_IRQn 1 */
+ /* USER CODE END DebugMonitor_IRQn 0 */
+ /* USER CODE BEGIN DebugMonitor_IRQn 1 */
- /* USER CODE END DebugMonitor_IRQn 1 */
+ /* USER CODE END DebugMonitor_IRQn 1 */
}
/**
* @brief This function handles System tick timer.
*/
-void SysTick_Handler(void)
-{
- /* USER CODE BEGIN SysTick_IRQn 0 */
+void SysTick_Handler(void) {
+ /* USER CODE BEGIN SysTick_IRQn 0 */
- /* USER CODE END SysTick_IRQn 0 */
- /* USER CODE BEGIN SysTick_IRQn 1 */
+ /* USER CODE END SysTick_IRQn 0 */
+ /* USER CODE BEGIN SysTick_IRQn 1 */
- /* USER CODE END SysTick_IRQn 1 */
+ /* USER CODE END SysTick_IRQn 1 */
}
/******************************************************************************/
@@ -182,142 +170,132 @@ void SysTick_Handler(void)
/**
* @brief This function handles RTC tamper and time stamp, CSS on LSE interrupts through EXTI line 18.
*/
-void TAMP_STAMP_LSECSS_IRQHandler(void)
-{
- /* USER CODE BEGIN TAMP_STAMP_LSECSS_IRQn 0 */
+void TAMP_STAMP_LSECSS_IRQHandler(void) {
+ /* USER CODE BEGIN TAMP_STAMP_LSECSS_IRQn 0 */
- /* USER CODE END TAMP_STAMP_LSECSS_IRQn 0 */
- /* USER CODE BEGIN TAMP_STAMP_LSECSS_IRQn 1 */
+ /* USER CODE END TAMP_STAMP_LSECSS_IRQn 0 */
+ /* USER CODE BEGIN TAMP_STAMP_LSECSS_IRQn 1 */
- /* USER CODE END TAMP_STAMP_LSECSS_IRQn 1 */
+ /* USER CODE END TAMP_STAMP_LSECSS_IRQn 1 */
}
/**
* @brief This function handles RCC global interrupt.
*/
-void RCC_IRQHandler(void)
-{
- /* USER CODE BEGIN RCC_IRQn 0 */
+void RCC_IRQHandler(void) {
+ /* USER CODE BEGIN RCC_IRQn 0 */
- /* USER CODE END RCC_IRQn 0 */
- /* USER CODE BEGIN RCC_IRQn 1 */
+ /* USER CODE END RCC_IRQn 0 */
+ /* USER CODE BEGIN RCC_IRQn 1 */
- /* USER CODE END RCC_IRQn 1 */
+ /* USER CODE END RCC_IRQn 1 */
}
/**
* @brief This function handles EXTI line3 interrupt.
*/
-void EXTI3_IRQHandler(void)
-{
- /* USER CODE BEGIN EXTI3_IRQn 0 */
+void EXTI3_IRQHandler(void) {
+ /* USER CODE BEGIN EXTI3_IRQn 0 */
- /* USER CODE END EXTI3_IRQn 0 */
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
- /* USER CODE BEGIN EXTI3_IRQn 1 */
+ /* USER CODE END EXTI3_IRQn 0 */
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
+ /* USER CODE BEGIN EXTI3_IRQn 1 */
- /* USER CODE END EXTI3_IRQn 1 */
+ /* USER CODE END EXTI3_IRQn 1 */
}
/**
* @brief This function handles ADC1 global interrupt.
*/
-void ADC1_IRQHandler(void)
-{
- /* USER CODE BEGIN ADC1_IRQn 0 */
+void ADC1_IRQHandler(void) {
+ /* USER CODE BEGIN ADC1_IRQn 0 */
- /* USER CODE END ADC1_IRQn 0 */
- HAL_ADC_IRQHandler(&hadc1);
- /* USER CODE BEGIN ADC1_IRQn 1 */
+ /* USER CODE END ADC1_IRQn 0 */
+ HAL_ADC_IRQHandler(&hadc1);
+ /* USER CODE BEGIN ADC1_IRQn 1 */
- /* USER CODE END ADC1_IRQn 1 */
+ /* USER CODE END ADC1_IRQn 1 */
}
/**
* @brief This function handles USB low priority interrupt, USB wake-up interrupt through EXTI line 28.
*/
-void USB_LP_IRQHandler(void)
-{
- /* USER CODE BEGIN USB_LP_IRQn 0 */
+void USB_LP_IRQHandler(void) {
+ /* USER CODE BEGIN USB_LP_IRQn 0 */
- /* USER CODE END USB_LP_IRQn 0 */
- HAL_PCD_IRQHandler(&hpcd_USB_FS);
- /* USER CODE BEGIN USB_LP_IRQn 1 */
+ /* USER CODE END USB_LP_IRQn 0 */
+ HAL_PCD_IRQHandler(&hpcd_USB_FS);
+ /* USER CODE BEGIN USB_LP_IRQn 1 */
- /* USER CODE END USB_LP_IRQn 1 */
+ /* USER CODE END USB_LP_IRQn 1 */
}
/**
* @brief This function handles COMP1 and COMP2 interrupts through EXTI lines 20 and 21.
*/
-void COMP_IRQHandler(void)
-{
- /* USER CODE BEGIN COMP_IRQn 0 */
+void COMP_IRQHandler(void) {
+ /* USER CODE BEGIN COMP_IRQn 0 */
- /* USER CODE END COMP_IRQn 0 */
- HAL_COMP_IRQHandler(&hcomp1);
- /* USER CODE BEGIN COMP_IRQn 1 */
+ /* USER CODE END COMP_IRQn 0 */
+ HAL_COMP_IRQHandler(&hcomp1);
+ /* USER CODE BEGIN COMP_IRQn 1 */
- /* USER CODE END COMP_IRQn 1 */
+ /* USER CODE END COMP_IRQn 1 */
}
/**
* @brief This function handles TIM1 trigger and commutation interrupts and TIM17 global interrupt.
*/
-void TIM1_TRG_COM_TIM17_IRQHandler(void)
-{
- /* USER CODE BEGIN TIM1_TRG_COM_TIM17_IRQn 0 */
+void TIM1_TRG_COM_TIM17_IRQHandler(void) {
+ /* USER CODE BEGIN TIM1_TRG_COM_TIM17_IRQn 0 */
- /* USER CODE END TIM1_TRG_COM_TIM17_IRQn 0 */
- HAL_TIM_IRQHandler(&htim1);
- /* USER CODE BEGIN TIM1_TRG_COM_TIM17_IRQn 1 */
+ /* USER CODE END TIM1_TRG_COM_TIM17_IRQn 0 */
+ HAL_TIM_IRQHandler(&htim1);
+ /* USER CODE BEGIN TIM1_TRG_COM_TIM17_IRQn 1 */
- /* USER CODE END TIM1_TRG_COM_TIM17_IRQn 1 */
+ /* USER CODE END TIM1_TRG_COM_TIM17_IRQn 1 */
}
/**
* @brief This function handles TIM2 global interrupt.
*/
-void TIM2_IRQHandler(void)
-{
- /* USER CODE BEGIN TIM2_IRQn 0 */
+void TIM2_IRQHandler(void) {
+ /* USER CODE BEGIN TIM2_IRQn 0 */
- /* USER CODE END TIM2_IRQn 0 */
- HAL_TIM_IRQHandler(&htim2);
- /* USER CODE BEGIN TIM2_IRQn 1 */
+ /* USER CODE END TIM2_IRQn 0 */
+ HAL_TIM_IRQHandler(&htim2);
+ /* USER CODE BEGIN TIM2_IRQn 1 */
- /* USER CODE END TIM2_IRQn 1 */
+ /* USER CODE END TIM2_IRQn 1 */
}
/**
* @brief This function handles EXTI line[15:10] interrupts.
*/
-void EXTI15_10_IRQHandler(void)
-{
- /* USER CODE BEGIN EXTI15_10_IRQn 0 */
-
- /* USER CODE END EXTI15_10_IRQn 0 */
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_10);
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_11);
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12);
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
- /* USER CODE BEGIN EXTI15_10_IRQn 1 */
-
- /* USER CODE END EXTI15_10_IRQn 1 */
+void EXTI15_10_IRQHandler(void) {
+ /* USER CODE BEGIN EXTI15_10_IRQn 0 */
+
+ /* USER CODE END EXTI15_10_IRQn 0 */
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_10);
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_11);
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12);
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
+ /* USER CODE BEGIN EXTI15_10_IRQn 1 */
+
+ /* USER CODE END EXTI15_10_IRQn 1 */
}
/**
* @brief This function handles HSEM global interrupt.
*/
-void HSEM_IRQHandler(void)
-{
- /* USER CODE BEGIN HSEM_IRQn 0 */
+void HSEM_IRQHandler(void) {
+ /* USER CODE BEGIN HSEM_IRQn 0 */
- /* USER CODE END HSEM_IRQn 0 */
- HAL_HSEM_IRQHandler();
- /* USER CODE BEGIN HSEM_IRQn 1 */
+ /* USER CODE END HSEM_IRQn 0 */
+ HAL_HSEM_IRQHandler();
+ /* USER CODE BEGIN HSEM_IRQn 1 */
- /* USER CODE END HSEM_IRQn 1 */
+ /* USER CODE END HSEM_IRQn 1 */
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f6/cube/Src/system_stm32wbxx.c b/firmware/targets/f6/cube/Src/system_stm32wbxx.c
index d0ff7d2d..ff09f34c 100644
--- a/firmware/targets/f6/cube/Src/system_stm32wbxx.c
+++ b/firmware/targets/f6/cube/Src/system_stm32wbxx.c
@@ -84,24 +84,24 @@
#include "stm32wbxx.h"
-#if !defined (HSE_VALUE)
- #define HSE_VALUE (32000000UL) /*!< Value of the External oscillator in Hz */
+#if !defined(HSE_VALUE)
+#define HSE_VALUE (32000000UL) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
-#if !defined (MSI_VALUE)
- #define MSI_VALUE (4000000UL) /*!< Value of the Internal oscillator in Hz*/
+#if !defined(MSI_VALUE)
+#define MSI_VALUE (4000000UL) /*!< Value of the Internal oscillator in Hz*/
#endif /* MSI_VALUE */
-#if !defined (HSI_VALUE)
- #define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/
+#if !defined(HSI_VALUE)
+#define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/
#endif /* HSI_VALUE */
-#if !defined (LSI_VALUE)
- #define LSI_VALUE (32000UL) /*!< Value of LSI in Hz*/
-#endif /* LSI_VALUE */
+#if !defined(LSI_VALUE)
+#define LSI_VALUE (32000UL) /*!< Value of LSI in Hz*/
+#endif /* LSI_VALUE */
-#if !defined (LSE_VALUE)
- #define LSE_VALUE (32768UL) /*!< Value of LSE in Hz*/
+#if !defined(LSE_VALUE)
+#define LSE_VALUE (32768UL) /*!< Value of LSE in Hz*/
#endif /* LSE_VALUE */
/**
@@ -127,18 +127,22 @@
at address 0x00 which correspond to automatic remap of boot address selected */
/* #define USER_VECT_TAB_ADDRESS */
#if defined(USER_VECT_TAB_ADDRESS)
- /*!< Uncomment this line for user vector table remap in Sram else user remap
+/*!< Uncomment this line for user vector table remap in Sram else user remap
will be done in Flash. */
/* #define VECT_TAB_SRAM */
#if defined(VECT_TAB_SRAM)
-#define VECT_TAB_BASE_ADDRESS SRAM1_BASE /*!< Vector Table base address field.
+#define VECT_TAB_BASE_ADDRESS \
+ SRAM1_BASE /*!< Vector Table base address field.
This value must be a multiple of 0x200. */
-#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field.
+#define VECT_TAB_OFFSET \
+ 0x00000000U /*!< Vector Table base offset field.
This value must be a multiple of 0x200. */
#else
-#define VECT_TAB_BASE_ADDRESS FLASH_BASE /*!< Vector Table base address field.
+#define VECT_TAB_BASE_ADDRESS \
+ FLASH_BASE /*!< Vector Table base address field.
This value must be a multiple of 0x200. */
-#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field.
+#define VECT_TAB_OFFSET \
+ 0x00000000U /*!< Vector Table base offset field.
This value must be a multiple of 0x200. */
#endif
#endif
@@ -158,7 +162,7 @@
/** @addtogroup STM32WBxx_System_Private_Variables
* @{
*/
- /* The SystemCoreClock variable is updated in three ways:
+/* The SystemCoreClock variable is updated in three ways:
1) by calling CMSIS function SystemCoreClockUpdate()
2) by calling HAL API function HAL_RCC_GetHCLKFreq()
3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
@@ -166,20 +170,38 @@
is no need to call the 2 first functions listed above, since SystemCoreClock
variable is updated automatically.
*/
- uint32_t SystemCoreClock = 4000000UL ; /*CPU1: M4 on MSI clock after startup (4MHz)*/
-
- const uint32_t AHBPrescTable[16UL] = {1UL, 3UL, 5UL, 1UL, 1UL, 6UL, 10UL, 32UL, 2UL, 4UL, 8UL, 16UL, 64UL, 128UL, 256UL, 512UL};
-
- const uint32_t APBPrescTable[8UL] = {0UL, 0UL, 0UL, 0UL, 1UL, 2UL, 3UL, 4UL};
-
- const uint32_t MSIRangeTable[16UL] = {100000UL, 200000UL, 400000UL, 800000UL, 1000000UL, 2000000UL, \
- 4000000UL, 8000000UL, 16000000UL, 24000000UL, 32000000UL, 48000000UL, 0UL, 0UL, 0UL, 0UL}; /* 0UL values are incorrect cases */
-
-#if defined(STM32WB55xx) || defined(STM32WB5Mxx) || defined(STM32WB35xx) || defined (STM32WB15xx) || defined (STM32WB10xx)
- const uint32_t SmpsPrescalerTable[4UL][6UL]={{1UL,3UL,2UL,2UL,1UL,2UL}, \
- {2UL,6UL,4UL,3UL,2UL,4UL}, \
- {4UL,12UL,8UL,6UL,4UL,8UL}, \
- {4UL,12UL,8UL,6UL,4UL,8UL}};
+uint32_t SystemCoreClock = 4000000UL; /*CPU1: M4 on MSI clock after startup (4MHz)*/
+
+const uint32_t AHBPrescTable[16UL] =
+ {1UL, 3UL, 5UL, 1UL, 1UL, 6UL, 10UL, 32UL, 2UL, 4UL, 8UL, 16UL, 64UL, 128UL, 256UL, 512UL};
+
+const uint32_t APBPrescTable[8UL] = {0UL, 0UL, 0UL, 0UL, 1UL, 2UL, 3UL, 4UL};
+
+const uint32_t MSIRangeTable[16UL] = {
+ 100000UL,
+ 200000UL,
+ 400000UL,
+ 800000UL,
+ 1000000UL,
+ 2000000UL,
+ 4000000UL,
+ 8000000UL,
+ 16000000UL,
+ 24000000UL,
+ 32000000UL,
+ 48000000UL,
+ 0UL,
+ 0UL,
+ 0UL,
+ 0UL}; /* 0UL values are incorrect cases */
+
+#if defined(STM32WB55xx) || defined(STM32WB5Mxx) || defined(STM32WB35xx) || \
+ defined(STM32WB15xx) || defined(STM32WB10xx)
+const uint32_t SmpsPrescalerTable[4UL][6UL] = {
+ {1UL, 3UL, 2UL, 2UL, 1UL, 2UL},
+ {2UL, 6UL, 4UL, 3UL, 2UL, 4UL},
+ {4UL, 12UL, 8UL, 6UL, 4UL, 8UL},
+ {4UL, 12UL, 8UL, 6UL, 4UL, 8UL}};
#endif
/**
@@ -203,47 +225,47 @@
* @param None
* @retval None
*/
-void SystemInit(void)
-{
+void SystemInit(void) {
#if defined(USER_VECT_TAB_ADDRESS)
- /* Configure the Vector Table location add offset address ------------------*/
- SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET;
+ /* Configure the Vector Table location add offset address ------------------*/
+ SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET;
#endif
- /* FPU settings ------------------------------------------------------------*/
- #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
- SCB->CPACR |= ((3UL << (10UL*2UL))|(3UL << (11UL*2UL))); /* set CP10 and CP11 Full Access */
- #endif
-
- /* Reset the RCC clock configuration to the default reset state ------------*/
- /* Set MSION bit */
- RCC->CR |= RCC_CR_MSION;
-
- /* Reset CFGR register */
- RCC->CFGR = 0x00070000U;
-
- /* Reset PLLSAI1ON, PLLON, HSECSSON, HSEON, HSION, and MSIPLLON bits */
- RCC->CR &= (uint32_t)0xFAF6FEFBU;
-
- /*!< Reset LSI1 and LSI2 bits */
- RCC->CSR &= (uint32_t)0xFFFFFFFAU;
-
- /*!< Reset HSI48ON bit */
- RCC->CRRCR &= (uint32_t)0xFFFFFFFEU;
-
- /* Reset PLLCFGR register */
- RCC->PLLCFGR = 0x22041000U;
+/* FPU settings ------------------------------------------------------------*/
+#if(__FPU_PRESENT == 1) && (__FPU_USED == 1)
+ SCB->CPACR |=
+ ((3UL << (10UL * 2UL)) | (3UL << (11UL * 2UL))); /* set CP10 and CP11 Full Access */
+#endif
+
+ /* Reset the RCC clock configuration to the default reset state ------------*/
+ /* Set MSION bit */
+ RCC->CR |= RCC_CR_MSION;
+
+ /* Reset CFGR register */
+ RCC->CFGR = 0x00070000U;
+
+ /* Reset PLLSAI1ON, PLLON, HSECSSON, HSEON, HSION, and MSIPLLON bits */
+ RCC->CR &= (uint32_t)0xFAF6FEFBU;
+
+ /*!< Reset LSI1 and LSI2 bits */
+ RCC->CSR &= (uint32_t)0xFFFFFFFAU;
+
+ /*!< Reset HSI48ON bit */
+ RCC->CRRCR &= (uint32_t)0xFFFFFFFEU;
+
+ /* Reset PLLCFGR register */
+ RCC->PLLCFGR = 0x22041000U;
#if defined(STM32WB55xx) || defined(STM32WB5Mxx)
- /* Reset PLLSAI1CFGR register */
- RCC->PLLSAI1CFGR = 0x22041000U;
+ /* Reset PLLSAI1CFGR register */
+ RCC->PLLSAI1CFGR = 0x22041000U;
#endif
-
- /* Reset HSEBYP bit */
- RCC->CR &= 0xFFFBFFFFU;
- /* Disable all interrupts */
- RCC->CIER = 0x00000000;
+ /* Reset HSEBYP bit */
+ RCC->CR &= 0xFFFBFFFFU;
+
+ /* Disable all interrupts */
+ RCC->CIER = 0x00000000;
}
/**
@@ -288,71 +310,65 @@ void SystemInit(void)
* @param None
* @retval None
*/
-void SystemCoreClockUpdate(void)
-{
- uint32_t tmp, msirange, pllvco, pllr, pllsource , pllm;
+void SystemCoreClockUpdate(void) {
+ uint32_t tmp, msirange, pllvco, pllr, pllsource, pllm;
- /* Get MSI Range frequency--------------------------------------------------*/
+ /* Get MSI Range frequency--------------------------------------------------*/
- /*MSI frequency range in Hz*/
- msirange = MSIRangeTable[(RCC->CR & RCC_CR_MSIRANGE) >> RCC_CR_MSIRANGE_Pos];
+ /*MSI frequency range in Hz*/
+ msirange = MSIRangeTable[(RCC->CR & RCC_CR_MSIRANGE) >> RCC_CR_MSIRANGE_Pos];
- /* Get SYSCLK source -------------------------------------------------------*/
- switch (RCC->CFGR & RCC_CFGR_SWS)
- {
- case 0x00: /* MSI used as system clock source */
- SystemCoreClock = msirange;
- break;
+ /* Get SYSCLK source -------------------------------------------------------*/
+ switch(RCC->CFGR & RCC_CFGR_SWS) {
+ case 0x00: /* MSI used as system clock source */
+ SystemCoreClock = msirange;
+ break;
- case 0x04: /* HSI used as system clock source */
- /* HSI used as system clock source */
+ case 0x04: /* HSI used as system clock source */
+ /* HSI used as system clock source */
SystemCoreClock = HSI_VALUE;
- break;
+ break;
- case 0x08: /* HSE used as system clock source */
- SystemCoreClock = HSE_VALUE;
- break;
+ case 0x08: /* HSE used as system clock source */
+ SystemCoreClock = HSE_VALUE;
+ break;
case 0x0C: /* PLL used as system clock source */
- /* PLL_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLM) * PLLN
+ /* PLL_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLM) * PLLN
SYSCLK = PLL_VCO / PLLR
*/
- pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC);
- pllm = ((RCC->PLLCFGR & RCC_PLLCFGR_PLLM) >> RCC_PLLCFGR_PLLM_Pos) + 1UL ;
-
- if(pllsource == 0x02UL) /* HSI used as PLL clock source */
- {
- pllvco = (HSI_VALUE / pllm);
- }
- else if(pllsource == 0x03UL) /* HSE used as PLL clock source */
- {
- pllvco = (HSE_VALUE / pllm);
- }
- else /* MSI used as PLL clock source */
- {
- pllvco = (msirange / pllm);
- }
-
- pllvco = pllvco * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos);
- pllr = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> RCC_PLLCFGR_PLLR_Pos) + 1UL);
-
- SystemCoreClock = pllvco/pllr;
- break;
+ pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC);
+ pllm = ((RCC->PLLCFGR & RCC_PLLCFGR_PLLM) >> RCC_PLLCFGR_PLLM_Pos) + 1UL;
+
+ if(pllsource == 0x02UL) /* HSI used as PLL clock source */
+ {
+ pllvco = (HSI_VALUE / pllm);
+ } else if(pllsource == 0x03UL) /* HSE used as PLL clock source */
+ {
+ pllvco = (HSE_VALUE / pllm);
+ } else /* MSI used as PLL clock source */
+ {
+ pllvco = (msirange / pllm);
+ }
+
+ pllvco = pllvco * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos);
+ pllr = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> RCC_PLLCFGR_PLLR_Pos) + 1UL);
+
+ SystemCoreClock = pllvco / pllr;
+ break;
default:
- SystemCoreClock = msirange;
- break;
- }
-
- /* Compute HCLK clock frequency --------------------------------------------*/
- /* Get HCLK1 prescaler */
- tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos)];
- /* HCLK clock frequency */
- SystemCoreClock = SystemCoreClock / tmp;
-
+ SystemCoreClock = msirange;
+ break;
+ }
+
+ /* Compute HCLK clock frequency --------------------------------------------*/
+ /* Get HCLK1 prescaler */
+ tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos)];
+ /* HCLK clock frequency */
+ SystemCoreClock = SystemCoreClock / tmp;
}
-
/**
* @}
*/
diff --git a/firmware/targets/f6/cube/Src/tim.c b/firmware/targets/f6/cube/Src/tim.c
index ce78dea8..1182d420 100644
--- a/firmware/targets/f6/cube/Src/tim.c
+++ b/firmware/targets/f6/cube/Src/tim.c
@@ -29,362 +29,315 @@ TIM_HandleTypeDef htim2;
TIM_HandleTypeDef htim16;
/* TIM1 init function */
-void MX_TIM1_Init(void)
-{
-
- /* USER CODE BEGIN TIM1_Init 0 */
-
- /* USER CODE END TIM1_Init 0 */
-
- TIM_ClockConfigTypeDef sClockSourceConfig = {0};
- TIM_MasterConfigTypeDef sMasterConfig = {0};
- TIM_OC_InitTypeDef sConfigOC = {0};
- TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
-
- /* USER CODE BEGIN TIM1_Init 1 */
-
- /* USER CODE END TIM1_Init 1 */
- htim1.Instance = TIM1;
- htim1.Init.Prescaler = 0;
- htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim1.Init.Period = 65535;
- htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
- htim1.Init.RepetitionCounter = 0;
- htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
- if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
- {
- Error_Handler();
- }
- sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
- if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_TIM_OC_Init(&htim1) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
- {
- Error_Handler();
- }
- sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
- sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
- sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
- if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigOC.OCMode = TIM_OCMODE_TIMING;
- sConfigOC.Pulse = 0;
- sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
- sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
- sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
- sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
- sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
- if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigOC.OCMode = TIM_OCMODE_PWM1;
- if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
- {
- Error_Handler();
- }
- sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
- sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
- sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
- sBreakDeadTimeConfig.DeadTime = 0;
- sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
- sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
- sBreakDeadTimeConfig.BreakFilter = 0;
- sBreakDeadTimeConfig.BreakAFMode = TIM_BREAK_AFMODE_INPUT;
- sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
- sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
- sBreakDeadTimeConfig.Break2Filter = 0;
- sBreakDeadTimeConfig.Break2AFMode = TIM_BREAK_AFMODE_INPUT;
- sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
- if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN TIM1_Init 2 */
-
- /* USER CODE END TIM1_Init 2 */
- HAL_TIM_MspPostInit(&htim1);
-
+void MX_TIM1_Init(void) {
+ /* USER CODE BEGIN TIM1_Init 0 */
+
+ /* USER CODE END TIM1_Init 0 */
+
+ TIM_ClockConfigTypeDef sClockSourceConfig = {0};
+ TIM_MasterConfigTypeDef sMasterConfig = {0};
+ TIM_OC_InitTypeDef sConfigOC = {0};
+ TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
+
+ /* USER CODE BEGIN TIM1_Init 1 */
+
+ /* USER CODE END TIM1_Init 1 */
+ htim1.Instance = TIM1;
+ htim1.Init.Prescaler = 0;
+ htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
+ htim1.Init.Period = 65535;
+ htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+ htim1.Init.RepetitionCounter = 0;
+ htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
+ if(HAL_TIM_Base_Init(&htim1) != HAL_OK) {
+ Error_Handler();
+ }
+ sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
+ if(HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ if(HAL_TIM_OC_Init(&htim1) != HAL_OK) {
+ Error_Handler();
+ }
+ if(HAL_TIM_PWM_Init(&htim1) != HAL_OK) {
+ Error_Handler();
+ }
+ sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
+ sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
+ sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
+ if(HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ sConfigOC.OCMode = TIM_OCMODE_TIMING;
+ sConfigOC.Pulse = 0;
+ sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
+ sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
+ sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
+ sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
+ sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
+ if(HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) {
+ Error_Handler();
+ }
+ sConfigOC.OCMode = TIM_OCMODE_PWM1;
+ if(HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) {
+ Error_Handler();
+ }
+ sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
+ sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
+ sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
+ sBreakDeadTimeConfig.DeadTime = 0;
+ sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
+ sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
+ sBreakDeadTimeConfig.BreakFilter = 0;
+ sBreakDeadTimeConfig.BreakAFMode = TIM_BREAK_AFMODE_INPUT;
+ sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
+ sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
+ sBreakDeadTimeConfig.Break2Filter = 0;
+ sBreakDeadTimeConfig.Break2AFMode = TIM_BREAK_AFMODE_INPUT;
+ sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
+ if(HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN TIM1_Init 2 */
+
+ /* USER CODE END TIM1_Init 2 */
+ HAL_TIM_MspPostInit(&htim1);
}
/* TIM2 init function */
-void MX_TIM2_Init(void)
-{
-
- /* USER CODE BEGIN TIM2_Init 0 */
-
- /* USER CODE END TIM2_Init 0 */
-
- TIM_ClockConfigTypeDef sClockSourceConfig = {0};
- TIM_MasterConfigTypeDef sMasterConfig = {0};
- TIM_IC_InitTypeDef sConfigIC = {0};
-
- /* USER CODE BEGIN TIM2_Init 1 */
-
- /* USER CODE END TIM2_Init 1 */
- htim2.Instance = TIM2;
- htim2.Init.Prescaler = 64-1;
- htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim2.Init.Period = 4294967295;
- htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
- htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
- if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
- {
- Error_Handler();
- }
- sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
- if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_TIM_IC_Init(&htim2) != HAL_OK)
- {
- Error_Handler();
- }
- sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
- sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
- if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_FALLING;
- sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
- sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
- sConfigIC.ICFilter = 0;
- if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
- sConfigIC.ICSelection = TIM_ICSELECTION_INDIRECTTI;
- if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_2) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN TIM2_Init 2 */
-
- /* USER CODE END TIM2_Init 2 */
-
+void MX_TIM2_Init(void) {
+ /* USER CODE BEGIN TIM2_Init 0 */
+
+ /* USER CODE END TIM2_Init 0 */
+
+ TIM_ClockConfigTypeDef sClockSourceConfig = {0};
+ TIM_MasterConfigTypeDef sMasterConfig = {0};
+ TIM_IC_InitTypeDef sConfigIC = {0};
+
+ /* USER CODE BEGIN TIM2_Init 1 */
+
+ /* USER CODE END TIM2_Init 1 */
+ htim2.Instance = TIM2;
+ htim2.Init.Prescaler = 64 - 1;
+ htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
+ htim2.Init.Period = 4294967295;
+ htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+ htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
+ if(HAL_TIM_Base_Init(&htim2) != HAL_OK) {
+ Error_Handler();
+ }
+ sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
+ if(HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ if(HAL_TIM_IC_Init(&htim2) != HAL_OK) {
+ Error_Handler();
+ }
+ sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
+ sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
+ if(HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_FALLING;
+ sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
+ sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
+ sConfigIC.ICFilter = 0;
+ if(HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1) != HAL_OK) {
+ Error_Handler();
+ }
+ sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
+ sConfigIC.ICSelection = TIM_ICSELECTION_INDIRECTTI;
+ if(HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_2) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN TIM2_Init 2 */
+
+ /* USER CODE END TIM2_Init 2 */
}
/* TIM16 init function */
-void MX_TIM16_Init(void)
-{
-
- /* USER CODE BEGIN TIM16_Init 0 */
-
- /* USER CODE END TIM16_Init 0 */
-
- TIM_OC_InitTypeDef sConfigOC = {0};
- TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
-
- /* USER CODE BEGIN TIM16_Init 1 */
-
- /* USER CODE END TIM16_Init 1 */
- htim16.Instance = TIM16;
- htim16.Init.Prescaler = 500 - 1;
- htim16.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim16.Init.Period = 291;
- htim16.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
- htim16.Init.RepetitionCounter = 0;
- htim16.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
- if (HAL_TIM_Base_Init(&htim16) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_TIM_PWM_Init(&htim16) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigOC.OCMode = TIM_OCMODE_PWM1;
- sConfigOC.Pulse = 145;
- sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
- sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
- sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
- sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
- sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
- if (HAL_TIM_PWM_ConfigChannel(&htim16, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
- {
- Error_Handler();
- }
- sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
- sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
- sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
- sBreakDeadTimeConfig.DeadTime = 0;
- sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
- sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
- sBreakDeadTimeConfig.BreakFilter = 0;
- sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
- if (HAL_TIMEx_ConfigBreakDeadTime(&htim16, &sBreakDeadTimeConfig) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN TIM16_Init 2 */
-
- /* USER CODE END TIM16_Init 2 */
- HAL_TIM_MspPostInit(&htim16);
-
+void MX_TIM16_Init(void) {
+ /* USER CODE BEGIN TIM16_Init 0 */
+
+ /* USER CODE END TIM16_Init 0 */
+
+ TIM_OC_InitTypeDef sConfigOC = {0};
+ TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
+
+ /* USER CODE BEGIN TIM16_Init 1 */
+
+ /* USER CODE END TIM16_Init 1 */
+ htim16.Instance = TIM16;
+ htim16.Init.Prescaler = 500 - 1;
+ htim16.Init.CounterMode = TIM_COUNTERMODE_UP;
+ htim16.Init.Period = 291;
+ htim16.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+ htim16.Init.RepetitionCounter = 0;
+ htim16.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
+ if(HAL_TIM_Base_Init(&htim16) != HAL_OK) {
+ Error_Handler();
+ }
+ if(HAL_TIM_PWM_Init(&htim16) != HAL_OK) {
+ Error_Handler();
+ }
+ sConfigOC.OCMode = TIM_OCMODE_PWM1;
+ sConfigOC.Pulse = 145;
+ sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
+ sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
+ sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
+ sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
+ sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
+ if(HAL_TIM_PWM_ConfigChannel(&htim16, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) {
+ Error_Handler();
+ }
+ sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
+ sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
+ sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
+ sBreakDeadTimeConfig.DeadTime = 0;
+ sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
+ sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
+ sBreakDeadTimeConfig.BreakFilter = 0;
+ sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
+ if(HAL_TIMEx_ConfigBreakDeadTime(&htim16, &sBreakDeadTimeConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN TIM16_Init 2 */
+
+ /* USER CODE END TIM16_Init 2 */
+ HAL_TIM_MspPostInit(&htim16);
}
-void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
-{
-
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- if(tim_baseHandle->Instance==TIM1)
- {
- /* USER CODE BEGIN TIM1_MspInit 0 */
+void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) {
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ if(tim_baseHandle->Instance == TIM1) {
+ /* USER CODE BEGIN TIM1_MspInit 0 */
- /* USER CODE END TIM1_MspInit 0 */
- /* TIM1 clock enable */
- __HAL_RCC_TIM1_CLK_ENABLE();
+ /* USER CODE END TIM1_MspInit 0 */
+ /* TIM1 clock enable */
+ __HAL_RCC_TIM1_CLK_ENABLE();
- /* TIM1 interrupt Init */
- HAL_NVIC_SetPriority(TIM1_TRG_COM_TIM17_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(TIM1_TRG_COM_TIM17_IRQn);
- /* USER CODE BEGIN TIM1_MspInit 1 */
+ /* TIM1 interrupt Init */
+ HAL_NVIC_SetPriority(TIM1_TRG_COM_TIM17_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(TIM1_TRG_COM_TIM17_IRQn);
+ /* USER CODE BEGIN TIM1_MspInit 1 */
- /* USER CODE END TIM1_MspInit 1 */
- }
- else if(tim_baseHandle->Instance==TIM2)
- {
- /* USER CODE BEGIN TIM2_MspInit 0 */
+ /* USER CODE END TIM1_MspInit 1 */
+ } else if(tim_baseHandle->Instance == TIM2) {
+ /* USER CODE BEGIN TIM2_MspInit 0 */
- /* USER CODE END TIM2_MspInit 0 */
- /* TIM2 clock enable */
- __HAL_RCC_TIM2_CLK_ENABLE();
+ /* USER CODE END TIM2_MspInit 0 */
+ /* TIM2 clock enable */
+ __HAL_RCC_TIM2_CLK_ENABLE();
- __HAL_RCC_GPIOA_CLK_ENABLE();
- /**TIM2 GPIO Configuration
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ /**TIM2 GPIO Configuration
PA0 ------> TIM2_CH1
*/
- GPIO_InitStruct.Pin = IR_RX_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
- HAL_GPIO_Init(IR_RX_GPIO_Port, &GPIO_InitStruct);
-
- /* TIM2 interrupt Init */
- HAL_NVIC_SetPriority(TIM2_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(TIM2_IRQn);
- /* USER CODE BEGIN TIM2_MspInit 1 */
-
- /* USER CODE END TIM2_MspInit 1 */
- }
- else if(tim_baseHandle->Instance==TIM16)
- {
- /* USER CODE BEGIN TIM16_MspInit 0 */
-
- /* USER CODE END TIM16_MspInit 0 */
- /* TIM16 clock enable */
- __HAL_RCC_TIM16_CLK_ENABLE();
- /* USER CODE BEGIN TIM16_MspInit 1 */
-
- /* USER CODE END TIM16_MspInit 1 */
- }
+ GPIO_InitStruct.Pin = IR_RX_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
+ HAL_GPIO_Init(IR_RX_GPIO_Port, &GPIO_InitStruct);
+
+ /* TIM2 interrupt Init */
+ HAL_NVIC_SetPriority(TIM2_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(TIM2_IRQn);
+ /* USER CODE BEGIN TIM2_MspInit 1 */
+
+ /* USER CODE END TIM2_MspInit 1 */
+ } else if(tim_baseHandle->Instance == TIM16) {
+ /* USER CODE BEGIN TIM16_MspInit 0 */
+
+ /* USER CODE END TIM16_MspInit 0 */
+ /* TIM16 clock enable */
+ __HAL_RCC_TIM16_CLK_ENABLE();
+ /* USER CODE BEGIN TIM16_MspInit 1 */
+
+ /* USER CODE END TIM16_MspInit 1 */
+ }
}
-void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
-{
-
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- if(timHandle->Instance==TIM1)
- {
- /* USER CODE BEGIN TIM1_MspPostInit 0 */
-
- /* USER CODE END TIM1_MspPostInit 0 */
- __HAL_RCC_GPIOB_CLK_ENABLE();
- /**TIM1 GPIO Configuration
+void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) {
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ if(timHandle->Instance == TIM1) {
+ /* USER CODE BEGIN TIM1_MspPostInit 0 */
+
+ /* USER CODE END TIM1_MspPostInit 0 */
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ /**TIM1 GPIO Configuration
PB9 ------> TIM1_CH3N
PB13 ------> TIM1_CH1N
*/
- GPIO_InitStruct.Pin = IR_TX_Pin|RFID_OUT_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+ GPIO_InitStruct.Pin = IR_TX_Pin | RFID_OUT_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
- /* USER CODE BEGIN TIM1_MspPostInit 1 */
+ /* USER CODE BEGIN TIM1_MspPostInit 1 */
- /* USER CODE END TIM1_MspPostInit 1 */
- }
- else if(timHandle->Instance==TIM16)
- {
- /* USER CODE BEGIN TIM16_MspPostInit 0 */
+ /* USER CODE END TIM1_MspPostInit 1 */
+ } else if(timHandle->Instance == TIM16) {
+ /* USER CODE BEGIN TIM16_MspPostInit 0 */
- /* USER CODE END TIM16_MspPostInit 0 */
+ /* USER CODE END TIM16_MspPostInit 0 */
- __HAL_RCC_GPIOB_CLK_ENABLE();
- /**TIM16 GPIO Configuration
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ /**TIM16 GPIO Configuration
PB8 ------> TIM16_CH1
*/
- GPIO_InitStruct.Pin = SPEAKER_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF14_TIM16;
- HAL_GPIO_Init(SPEAKER_GPIO_Port, &GPIO_InitStruct);
+ GPIO_InitStruct.Pin = SPEAKER_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF14_TIM16;
+ HAL_GPIO_Init(SPEAKER_GPIO_Port, &GPIO_InitStruct);
- /* USER CODE BEGIN TIM16_MspPostInit 1 */
-
- /* USER CODE END TIM16_MspPostInit 1 */
- }
+ /* USER CODE BEGIN TIM16_MspPostInit 1 */
+ /* USER CODE END TIM16_MspPostInit 1 */
+ }
}
-void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
-{
-
- if(tim_baseHandle->Instance==TIM1)
- {
- /* USER CODE BEGIN TIM1_MspDeInit 0 */
+void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle) {
+ if(tim_baseHandle->Instance == TIM1) {
+ /* USER CODE BEGIN TIM1_MspDeInit 0 */
- /* USER CODE END TIM1_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_TIM1_CLK_DISABLE();
+ /* USER CODE END TIM1_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_TIM1_CLK_DISABLE();
- /* TIM1 interrupt Deinit */
- HAL_NVIC_DisableIRQ(TIM1_TRG_COM_TIM17_IRQn);
- /* USER CODE BEGIN TIM1_MspDeInit 1 */
+ /* TIM1 interrupt Deinit */
+ HAL_NVIC_DisableIRQ(TIM1_TRG_COM_TIM17_IRQn);
+ /* USER CODE BEGIN TIM1_MspDeInit 1 */
- /* USER CODE END TIM1_MspDeInit 1 */
- }
- else if(tim_baseHandle->Instance==TIM2)
- {
- /* USER CODE BEGIN TIM2_MspDeInit 0 */
+ /* USER CODE END TIM1_MspDeInit 1 */
+ } else if(tim_baseHandle->Instance == TIM2) {
+ /* USER CODE BEGIN TIM2_MspDeInit 0 */
- /* USER CODE END TIM2_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_TIM2_CLK_DISABLE();
+ /* USER CODE END TIM2_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_TIM2_CLK_DISABLE();
- /**TIM2 GPIO Configuration
+ /**TIM2 GPIO Configuration
PA0 ------> TIM2_CH1
*/
- HAL_GPIO_DeInit(IR_RX_GPIO_Port, IR_RX_Pin);
+ HAL_GPIO_DeInit(IR_RX_GPIO_Port, IR_RX_Pin);
- /* TIM2 interrupt Deinit */
- HAL_NVIC_DisableIRQ(TIM2_IRQn);
- /* USER CODE BEGIN TIM2_MspDeInit 1 */
+ /* TIM2 interrupt Deinit */
+ HAL_NVIC_DisableIRQ(TIM2_IRQn);
+ /* USER CODE BEGIN TIM2_MspDeInit 1 */
- /* USER CODE END TIM2_MspDeInit 1 */
- }
- else if(tim_baseHandle->Instance==TIM16)
- {
- /* USER CODE BEGIN TIM16_MspDeInit 0 */
+ /* USER CODE END TIM2_MspDeInit 1 */
+ } else if(tim_baseHandle->Instance == TIM16) {
+ /* USER CODE BEGIN TIM16_MspDeInit 0 */
- /* USER CODE END TIM16_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_TIM16_CLK_DISABLE();
- /* USER CODE BEGIN TIM16_MspDeInit 1 */
+ /* USER CODE END TIM16_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_TIM16_CLK_DISABLE();
+ /* USER CODE BEGIN TIM16_MspDeInit 1 */
- /* USER CODE END TIM16_MspDeInit 1 */
- }
+ /* USER CODE END TIM16_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f6/cube/Src/usart.c b/firmware/targets/f6/cube/Src/usart.c
index ce3113f8..c0b3ecee 100644
--- a/firmware/targets/f6/cube/Src/usart.c
+++ b/firmware/targets/f6/cube/Src/usart.c
@@ -26,66 +26,62 @@
/* USART1 init function */
-void MX_USART1_UART_Init(void)
-{
+void MX_USART1_UART_Init(void) {
+ /* USER CODE BEGIN USART1_Init 0 */
- /* USER CODE BEGIN USART1_Init 0 */
+ /* USER CODE END USART1_Init 0 */
- /* USER CODE END USART1_Init 0 */
+ LL_USART_InitTypeDef USART_InitStruct = {0};
- LL_USART_InitTypeDef USART_InitStruct = {0};
+ LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
- LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
+ /* Peripheral clock enable */
+ LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_USART1);
- /* Peripheral clock enable */
- LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_USART1);
-
- LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
- /**USART1 GPIO Configuration
+ LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
+ /**USART1 GPIO Configuration
PB6 ------> USART1_TX
PB7 ------> USART1_RX
*/
- GPIO_InitStruct.Pin = LL_GPIO_PIN_6|LL_GPIO_PIN_7;
- GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
- GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
- GPIO_InitStruct.Alternate = LL_GPIO_AF_7;
- LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-
- /* USER CODE BEGIN USART1_Init 1 */
-
- /* USER CODE END USART1_Init 1 */
- USART_InitStruct.PrescalerValue = LL_USART_PRESCALER_DIV1;
- USART_InitStruct.BaudRate = 115200;
- USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;
- USART_InitStruct.StopBits = LL_USART_STOPBITS_1;
- USART_InitStruct.Parity = LL_USART_PARITY_NONE;
- USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX;
- USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;
- USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;
- LL_USART_Init(USART1, &USART_InitStruct);
- LL_USART_SetTXFIFOThreshold(USART1, LL_USART_FIFOTHRESHOLD_1_8);
- LL_USART_SetRXFIFOThreshold(USART1, LL_USART_FIFOTHRESHOLD_1_8);
- LL_USART_DisableFIFO(USART1);
- LL_USART_EnableAutoBaudRate(USART1);
- LL_USART_SetAutoBaudRateMode(USART1, LL_USART_AUTOBAUD_DETECT_ON_STARTBIT);
- LL_USART_ConfigAsyncMode(USART1);
-
- /* USER CODE BEGIN WKUPType USART1 */
-
- /* USER CODE END WKUPType USART1 */
-
- LL_USART_Enable(USART1);
-
- /* Polling USART1 initialisation */
- while(!(LL_USART_IsActiveFlag_TEACK(USART1)))
- {
- }
- /* USER CODE BEGIN USART1_Init 2 */
-
- /* USER CODE END USART1_Init 2 */
-
+ GPIO_InitStruct.Pin = LL_GPIO_PIN_6 | LL_GPIO_PIN_7;
+ GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
+ GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
+ GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
+ GPIO_InitStruct.Alternate = LL_GPIO_AF_7;
+ LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
+ /* USER CODE BEGIN USART1_Init 1 */
+
+ /* USER CODE END USART1_Init 1 */
+ USART_InitStruct.PrescalerValue = LL_USART_PRESCALER_DIV1;
+ USART_InitStruct.BaudRate = 115200;
+ USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;
+ USART_InitStruct.StopBits = LL_USART_STOPBITS_1;
+ USART_InitStruct.Parity = LL_USART_PARITY_NONE;
+ USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX;
+ USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;
+ USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;
+ LL_USART_Init(USART1, &USART_InitStruct);
+ LL_USART_SetTXFIFOThreshold(USART1, LL_USART_FIFOTHRESHOLD_1_8);
+ LL_USART_SetRXFIFOThreshold(USART1, LL_USART_FIFOTHRESHOLD_1_8);
+ LL_USART_DisableFIFO(USART1);
+ LL_USART_EnableAutoBaudRate(USART1);
+ LL_USART_SetAutoBaudRateMode(USART1, LL_USART_AUTOBAUD_DETECT_ON_STARTBIT);
+ LL_USART_ConfigAsyncMode(USART1);
+
+ /* USER CODE BEGIN WKUPType USART1 */
+
+ /* USER CODE END WKUPType USART1 */
+
+ LL_USART_Enable(USART1);
+
+ /* Polling USART1 initialisation */
+ while(!(LL_USART_IsActiveFlag_TEACK(USART1))) {
+ }
+ /* USER CODE BEGIN USART1_Init 2 */
+
+ /* USER CODE END USART1_Init 2 */
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f6/cube/Src/usb_device.c b/firmware/targets/f6/cube/Src/usb_device.c
index 35b13d51..d6d02cd6 100644
--- a/firmware/targets/f6/cube/Src/usb_device.c
+++ b/firmware/targets/f6/cube/Src/usb_device.c
@@ -64,28 +64,27 @@ extern USBD_DescriptorsTypeDef CDC_Desc;
* Init USB device Library, add supported class and start the library
* @retval None
*/
-void MX_USB_Device_Init(void)
-{
- /* USER CODE BEGIN USB_Device_Init_PreTreatment */
-
- /* USER CODE END USB_Device_Init_PreTreatment */
-
- /* Init Device Library, add supported class and start the library. */
- if (USBD_Init(&hUsbDeviceFS, &CDC_Desc, DEVICE_FS) != USBD_OK) {
- Error_Handler();
- }
- if (USBD_RegisterClass(&hUsbDeviceFS, &USBD_CDC) != USBD_OK) {
- Error_Handler();
- }
- if (USBD_CDC_RegisterInterface(&hUsbDeviceFS, &USBD_Interface_fops_FS) != USBD_OK) {
- Error_Handler();
- }
- if (USBD_Start(&hUsbDeviceFS) != USBD_OK) {
- Error_Handler();
- }
- /* USER CODE BEGIN USB_Device_Init_PostTreatment */
-
- /* USER CODE END USB_Device_Init_PostTreatment */
+void MX_USB_Device_Init(void) {
+ /* USER CODE BEGIN USB_Device_Init_PreTreatment */
+
+ /* USER CODE END USB_Device_Init_PreTreatment */
+
+ /* Init Device Library, add supported class and start the library. */
+ if(USBD_Init(&hUsbDeviceFS, &CDC_Desc, DEVICE_FS) != USBD_OK) {
+ Error_Handler();
+ }
+ if(USBD_RegisterClass(&hUsbDeviceFS, &USBD_CDC) != USBD_OK) {
+ Error_Handler();
+ }
+ if(USBD_CDC_RegisterInterface(&hUsbDeviceFS, &USBD_Interface_fops_FS) != USBD_OK) {
+ Error_Handler();
+ }
+ if(USBD_Start(&hUsbDeviceFS) != USBD_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN USB_Device_Init_PostTreatment */
+
+ /* USER CODE END USB_Device_Init_PostTreatment */
}
/**
diff --git a/firmware/targets/f6/cube/Src/usbd_cdc_if.c b/firmware/targets/f6/cube/Src/usbd_cdc_if.c
index 5f1a4196..e0d92f27 100644
--- a/firmware/targets/f6/cube/Src/usbd_cdc_if.c
+++ b/firmware/targets/f6/cube/Src/usbd_cdc_if.c
@@ -125,8 +125,8 @@ extern USBD_HandleTypeDef hUsbDeviceFS;
static int8_t CDC_Init_FS(void);
static int8_t CDC_DeInit_FS(void);
static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length);
-static int8_t CDC_Receive_FS(uint8_t* pbuf, uint32_t *Len);
-static int8_t CDC_TransmitCplt_FS(uint8_t *pbuf, uint32_t *Len, uint8_t epnum);
+static int8_t CDC_Receive_FS(uint8_t* pbuf, uint32_t* Len);
+static int8_t CDC_TransmitCplt_FS(uint8_t* pbuf, uint32_t* Len, uint8_t epnum);
/* USER CODE BEGIN PRIVATE_FUNCTIONS_DECLARATION */
@@ -137,38 +137,30 @@ static int8_t CDC_TransmitCplt_FS(uint8_t *pbuf, uint32_t *Len, uint8_t epnum);
*/
USBD_CDC_ItfTypeDef USBD_Interface_fops_FS =
-{
- CDC_Init_FS,
- CDC_DeInit_FS,
- CDC_Control_FS,
- CDC_Receive_FS,
- CDC_TransmitCplt_FS
-};
+ {CDC_Init_FS, CDC_DeInit_FS, CDC_Control_FS, CDC_Receive_FS, CDC_TransmitCplt_FS};
/* Private functions ---------------------------------------------------------*/
/**
* @brief Initializes the CDC media low layer over the FS USB IP
* @retval USBD_OK if all operations are OK else USBD_FAIL
*/
-static int8_t CDC_Init_FS(void)
-{
- /* USER CODE BEGIN 3 */
- /* Set Application Buffers */
- USBD_CDC_SetTxBuffer(&hUsbDeviceFS, UserTxBufferFS, 0);
- USBD_CDC_SetRxBuffer(&hUsbDeviceFS, UserRxBufferFS);
- return (USBD_OK);
- /* USER CODE END 3 */
+static int8_t CDC_Init_FS(void) {
+ /* USER CODE BEGIN 3 */
+ /* Set Application Buffers */
+ USBD_CDC_SetTxBuffer(&hUsbDeviceFS, UserTxBufferFS, 0);
+ USBD_CDC_SetRxBuffer(&hUsbDeviceFS, UserRxBufferFS);
+ return (USBD_OK);
+ /* USER CODE END 3 */
}
/**
* @brief DeInitializes the CDC media low layer
* @retval USBD_OK if all operations are OK else USBD_FAIL
*/
-static int8_t CDC_DeInit_FS(void)
-{
- /* USER CODE BEGIN 4 */
- return (USBD_OK);
- /* USER CODE END 4 */
+static int8_t CDC_DeInit_FS(void) {
+ /* USER CODE BEGIN 4 */
+ return (USBD_OK);
+ /* USER CODE END 4 */
}
/**
@@ -178,70 +170,68 @@ static int8_t CDC_DeInit_FS(void)
* @param length: Number of data to be sent (in bytes)
* @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
*/
-static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length)
-{
- /* USER CODE BEGIN 5 */
- switch(cmd)
- {
+static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length) {
+ /* USER CODE BEGIN 5 */
+ switch(cmd) {
case CDC_SEND_ENCAPSULATED_COMMAND:
- break;
+ break;
case CDC_GET_ENCAPSULATED_RESPONSE:
- break;
+ break;
case CDC_SET_COMM_FEATURE:
- break;
+ break;
case CDC_GET_COMM_FEATURE:
- break;
+ break;
case CDC_CLEAR_COMM_FEATURE:
- break;
-
- /*******************************************************************************/
- /* Line Coding Structure */
- /*-----------------------------------------------------------------------------*/
- /* Offset | Field | Size | Value | Description */
- /* 0 | dwDTERate | 4 | Number |Data terminal rate, in bits per second*/
- /* 4 | bCharFormat | 1 | Number | Stop bits */
- /* 0 - 1 Stop bit */
- /* 1 - 1.5 Stop bits */
- /* 2 - 2 Stop bits */
- /* 5 | bParityType | 1 | Number | Parity */
- /* 0 - None */
- /* 1 - Odd */
- /* 2 - Even */
- /* 3 - Mark */
- /* 4 - Space */
- /* 6 | bDataBits | 1 | Number Data bits (5, 6, 7, 8 or 16). */
- /*******************************************************************************/
+ break;
+
+ /*******************************************************************************/
+ /* Line Coding Structure */
+ /*-----------------------------------------------------------------------------*/
+ /* Offset | Field | Size | Value | Description */
+ /* 0 | dwDTERate | 4 | Number |Data terminal rate, in bits per second*/
+ /* 4 | bCharFormat | 1 | Number | Stop bits */
+ /* 0 - 1 Stop bit */
+ /* 1 - 1.5 Stop bits */
+ /* 2 - 2 Stop bits */
+ /* 5 | bParityType | 1 | Number | Parity */
+ /* 0 - None */
+ /* 1 - Odd */
+ /* 2 - Even */
+ /* 3 - Mark */
+ /* 4 - Space */
+ /* 6 | bDataBits | 1 | Number Data bits (5, 6, 7, 8 or 16). */
+ /*******************************************************************************/
case CDC_SET_LINE_CODING:
- break;
+ break;
case CDC_GET_LINE_CODING:
- break;
+ break;
case CDC_SET_CONTROL_LINE_STATE:
- break;
+ break;
case CDC_SEND_BREAK:
- break;
+ break;
- default:
- break;
- }
+ default:
+ break;
+ }
- return (USBD_OK);
- /* USER CODE END 5 */
+ return (USBD_OK);
+ /* USER CODE END 5 */
}
/**
@@ -259,13 +249,12 @@ static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length)
* @param Len: Number of data received (in bytes)
* @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
*/
-static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
-{
- /* USER CODE BEGIN 6 */
- USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
- USBD_CDC_ReceivePacket(&hUsbDeviceFS);
- return (USBD_OK);
- /* USER CODE END 6 */
+static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t* Len) {
+ /* USER CODE BEGIN 6 */
+ USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
+ USBD_CDC_ReceivePacket(&hUsbDeviceFS);
+ return (USBD_OK);
+ /* USER CODE END 6 */
}
/**
@@ -279,18 +268,17 @@ static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
* @param Len: Number of data to be sent (in bytes)
* @retval USBD_OK if all operations are OK else USBD_FAIL or USBD_BUSY
*/
-uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
-{
- uint8_t result = USBD_OK;
- /* USER CODE BEGIN 7 */
- USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData;
- if (hcdc->TxState != 0){
- return USBD_BUSY;
- }
- USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf, Len);
- result = USBD_CDC_TransmitPacket(&hUsbDeviceFS);
- /* USER CODE END 7 */
- return result;
+uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len) {
+ uint8_t result = USBD_OK;
+ /* USER CODE BEGIN 7 */
+ USBD_CDC_HandleTypeDef* hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData;
+ if(hcdc->TxState != 0) {
+ return USBD_BUSY;
+ }
+ USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf, Len);
+ result = USBD_CDC_TransmitPacket(&hUsbDeviceFS);
+ /* USER CODE END 7 */
+ return result;
}
/**
@@ -305,15 +293,14 @@ uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
* @param Len: Number of data received (in bytes)
* @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
*/
-static int8_t CDC_TransmitCplt_FS(uint8_t *Buf, uint32_t *Len, uint8_t epnum)
-{
- uint8_t result = USBD_OK;
- /* USER CODE BEGIN 13 */
- UNUSED(Buf);
- UNUSED(Len);
- UNUSED(epnum);
- /* USER CODE END 13 */
- return result;
+static int8_t CDC_TransmitCplt_FS(uint8_t* Buf, uint32_t* Len, uint8_t epnum) {
+ uint8_t result = USBD_OK;
+ /* USER CODE BEGIN 13 */
+ UNUSED(Buf);
+ UNUSED(Len);
+ UNUSED(epnum);
+ /* USER CODE END 13 */
+ return result;
}
/* USER CODE BEGIN PRIVATE_FUNCTIONS_IMPLEMENTATION */
diff --git a/firmware/targets/f6/cube/Src/usbd_conf.c b/firmware/targets/f6/cube/Src/usbd_conf.c
index 6b4ebabb..667164eb 100644
--- a/firmware/targets/f6/cube/Src/usbd_conf.c
+++ b/firmware/targets/f6/cube/Src/usbd_conf.c
@@ -67,70 +67,68 @@ extern void SystemClock_Config(void);
*******************************************************************************/
/* MSP Init */
-#if (USE_HAL_PCD_REGISTER_CALLBACK == 1U)
+#if(USE_HAL_PCD_REGISTER_CALLBACK == 1U)
static void HAL_PCD_MspInit(PCD_HandleTypeDef* pcdHandle)
#else
void HAL_PCD_MspInit(PCD_HandleTypeDef* pcdHandle)
#endif /* USE_HAL_PCD_REGISTER_CALLBACK */
{
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- if(pcdHandle->Instance==USB)
- {
- /* USER CODE BEGIN USB_MspInit 0 */
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ if(pcdHandle->Instance == USB) {
+ /* USER CODE BEGIN USB_MspInit 0 */
- /* USER CODE END USB_MspInit 0 */
+ /* USER CODE END USB_MspInit 0 */
- __HAL_RCC_GPIOA_CLK_ENABLE();
- /**USB GPIO Configuration
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ /**USB GPIO Configuration
PA11 ------> USB_DM
PA12 ------> USB_DP
*/
- GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.Alternate = GPIO_AF10_USB;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
-
- /* Peripheral clock enable */
- __HAL_RCC_USB_CLK_ENABLE();
-
- /* Peripheral interrupt init */
- HAL_NVIC_SetPriority(USB_LP_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(USB_LP_IRQn);
- /* USER CODE BEGIN USB_MspInit 1 */
-
- /* USER CODE END USB_MspInit 1 */
- }
+ GPIO_InitStruct.Pin = GPIO_PIN_11 | GPIO_PIN_12;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ GPIO_InitStruct.Alternate = GPIO_AF10_USB;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+ /* Peripheral clock enable */
+ __HAL_RCC_USB_CLK_ENABLE();
+
+ /* Peripheral interrupt init */
+ HAL_NVIC_SetPriority(USB_LP_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(USB_LP_IRQn);
+ /* USER CODE BEGIN USB_MspInit 1 */
+
+ /* USER CODE END USB_MspInit 1 */
+ }
}
-#if (USE_HAL_PCD_REGISTER_CALLBACK == 1U)
+#if(USE_HAL_PCD_REGISTER_CALLBACK == 1U)
static void HAL_PCD_MspDeInit(PCD_HandleTypeDef* pcdHandle)
#else
void HAL_PCD_MspDeInit(PCD_HandleTypeDef* pcdHandle)
#endif /* USE_HAL_PCD_REGISTER_CALLBACK */
{
- if(pcdHandle->Instance==USB)
- {
- /* USER CODE BEGIN USB_MspDeInit 0 */
+ if(pcdHandle->Instance == USB) {
+ /* USER CODE BEGIN USB_MspDeInit 0 */
- /* USER CODE END USB_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_USB_CLK_DISABLE();
+ /* USER CODE END USB_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_USB_CLK_DISABLE();
- /**USB GPIO Configuration
+ /**USB GPIO Configuration
PA11 ------> USB_DM
PA12 ------> USB_DP
*/
- HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11|GPIO_PIN_12);
+ HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11 | GPIO_PIN_12);
- /* Peripheral interrupt Deinit*/
- HAL_NVIC_DisableIRQ(USB_LP_IRQn);
+ /* Peripheral interrupt Deinit*/
+ HAL_NVIC_DisableIRQ(USB_LP_IRQn);
- /* USER CODE BEGIN USB_MspDeInit 1 */
+ /* USER CODE BEGIN USB_MspDeInit 1 */
- /* USER CODE END USB_MspDeInit 1 */
- }
+ /* USER CODE END USB_MspDeInit 1 */
+ }
}
/**
@@ -138,19 +136,19 @@ void HAL_PCD_MspDeInit(PCD_HandleTypeDef* pcdHandle)
* @param hpcd: PCD handle
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCD_SetupStageCallback(PCD_HandleTypeDef* hpcd)
#else
-void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd)
+void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef* hpcd)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN HAL_PCD_SetupStageCallback_PreTreatment */
+ /* USER CODE BEGIN HAL_PCD_SetupStageCallback_PreTreatment */
- /* USER CODE END HAL_PCD_SetupStageCallback_PreTreatment */
- USBD_LL_SetupStage((USBD_HandleTypeDef*)hpcd->pData, (uint8_t *)hpcd->Setup);
- /* USER CODE BEGIN HAL_PCD_SetupStageCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_SetupStageCallback_PreTreatment */
+ USBD_LL_SetupStage((USBD_HandleTypeDef*)hpcd->pData, (uint8_t*)hpcd->Setup);
+ /* USER CODE BEGIN HAL_PCD_SetupStageCallback_PostTreatment */
- /* USER CODE END HAL_PCD_SetupStageCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_SetupStageCallback_PostTreatment */
}
/**
@@ -159,19 +157,19 @@ void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd)
* @param epnum: Endpoint number
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCD_DataOutStageCallback(PCD_HandleTypeDef* hpcd, uint8_t epnum)
#else
-void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
+void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef* hpcd, uint8_t epnum)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN HAL_PCD_DataOutStageCallback_PreTreatment */
+ /* USER CODE BEGIN HAL_PCD_DataOutStageCallback_PreTreatment */
- /* USER CODE END HAL_PCD_DataOutStageCallback_PreTreatment */
- USBD_LL_DataOutStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->OUT_ep[epnum].xfer_buff);
- /* USER CODE BEGIN HAL_PCD_DataOutStageCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_DataOutStageCallback_PreTreatment */
+ USBD_LL_DataOutStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->OUT_ep[epnum].xfer_buff);
+ /* USER CODE BEGIN HAL_PCD_DataOutStageCallback_PostTreatment */
- /* USER CODE END HAL_PCD_DataOutStageCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_DataOutStageCallback_PostTreatment */
}
/**
@@ -180,19 +178,19 @@ void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
* @param epnum: Endpoint number
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCD_DataInStageCallback(PCD_HandleTypeDef* hpcd, uint8_t epnum)
#else
-void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
+void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef* hpcd, uint8_t epnum)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN HAL_PCD_DataInStageCallback_PreTreatment */
+ /* USER CODE BEGIN HAL_PCD_DataInStageCallback_PreTreatment */
- /* USER CODE END HAL_PCD_DataInStageCallback_PreTreatment */
- USBD_LL_DataInStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->IN_ep[epnum].xfer_buff);
- /* USER CODE BEGIN HAL_PCD_DataInStageCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_DataInStageCallback_PreTreatment */
+ USBD_LL_DataInStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->IN_ep[epnum].xfer_buff);
+ /* USER CODE BEGIN HAL_PCD_DataInStageCallback_PostTreatment */
- /* USER CODE END HAL_PCD_DataInStageCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_DataInStageCallback_PostTreatment */
}
/**
@@ -200,19 +198,19 @@ void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
* @param hpcd: PCD handle
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCD_SOFCallback(PCD_HandleTypeDef *hpcd)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCD_SOFCallback(PCD_HandleTypeDef* hpcd)
#else
-void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd)
+void HAL_PCD_SOFCallback(PCD_HandleTypeDef* hpcd)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN HAL_PCD_SOFCallback_PreTreatment */
+ /* USER CODE BEGIN HAL_PCD_SOFCallback_PreTreatment */
- /* USER CODE END HAL_PCD_SOFCallback_PreTreatment */
- USBD_LL_SOF((USBD_HandleTypeDef*)hpcd->pData);
- /* USER CODE BEGIN HAL_PCD_SOFCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_SOFCallback_PreTreatment */
+ USBD_LL_SOF((USBD_HandleTypeDef*)hpcd->pData);
+ /* USER CODE BEGIN HAL_PCD_SOFCallback_PostTreatment */
- /* USER CODE END HAL_PCD_SOFCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_SOFCallback_PostTreatment */
}
/**
@@ -220,29 +218,28 @@ void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd)
* @param hpcd: PCD handle
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCD_ResetCallback(PCD_HandleTypeDef *hpcd)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCD_ResetCallback(PCD_HandleTypeDef* hpcd)
#else
-void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd)
+void HAL_PCD_ResetCallback(PCD_HandleTypeDef* hpcd)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN HAL_PCD_ResetCallback_PreTreatment */
+ /* USER CODE BEGIN HAL_PCD_ResetCallback_PreTreatment */
- /* USER CODE END HAL_PCD_ResetCallback_PreTreatment */
- USBD_SpeedTypeDef speed = USBD_SPEED_FULL;
+ /* USER CODE END HAL_PCD_ResetCallback_PreTreatment */
+ USBD_SpeedTypeDef speed = USBD_SPEED_FULL;
- if ( hpcd->Init.speed != PCD_SPEED_FULL)
- {
- Error_Handler();
- }
+ if(hpcd->Init.speed != PCD_SPEED_FULL) {
+ Error_Handler();
+ }
/* Set Speed. */
- USBD_LL_SetSpeed((USBD_HandleTypeDef*)hpcd->pData, speed);
+ USBD_LL_SetSpeed((USBD_HandleTypeDef*)hpcd->pData, speed);
- /* Reset Device. */
- USBD_LL_Reset((USBD_HandleTypeDef*)hpcd->pData);
- /* USER CODE BEGIN HAL_PCD_ResetCallback_PostTreatment */
+ /* Reset Device. */
+ USBD_LL_Reset((USBD_HandleTypeDef*)hpcd->pData);
+ /* USER CODE BEGIN HAL_PCD_ResetCallback_PostTreatment */
- /* USER CODE END HAL_PCD_ResetCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_ResetCallback_PostTreatment */
}
/**
@@ -251,28 +248,27 @@ void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd)
* @param hpcd: PCD handle
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCD_SuspendCallback(PCD_HandleTypeDef *hpcd)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCD_SuspendCallback(PCD_HandleTypeDef* hpcd)
#else
-void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd)
+void HAL_PCD_SuspendCallback(PCD_HandleTypeDef* hpcd)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN HAL_PCD_SuspendCallback_PreTreatment */
+ /* USER CODE BEGIN HAL_PCD_SuspendCallback_PreTreatment */
- /* USER CODE END HAL_PCD_SuspendCallback_PreTreatment */
- /* Inform USB library that core enters in suspend Mode. */
- USBD_LL_Suspend((USBD_HandleTypeDef*)hpcd->pData);
- /* Enter in STOP mode. */
- /* USER CODE BEGIN 2 */
- if (hpcd->Init.low_power_enable)
- {
- /* Set SLEEPDEEP bit and SleepOnExit of Cortex System Control Register. */
- SCB->SCR |= (uint32_t)((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
- }
- /* USER CODE END 2 */
- /* USER CODE BEGIN HAL_PCD_SuspendCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_SuspendCallback_PreTreatment */
+ /* Inform USB library that core enters in suspend Mode. */
+ USBD_LL_Suspend((USBD_HandleTypeDef*)hpcd->pData);
+ /* Enter in STOP mode. */
+ /* USER CODE BEGIN 2 */
+ if(hpcd->Init.low_power_enable) {
+ /* Set SLEEPDEEP bit and SleepOnExit of Cortex System Control Register. */
+ SCB->SCR |= (uint32_t)((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
+ }
+ /* USER CODE END 2 */
+ /* USER CODE BEGIN HAL_PCD_SuspendCallback_PostTreatment */
- /* USER CODE END HAL_PCD_SuspendCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_SuspendCallback_PostTreatment */
}
/**
@@ -281,29 +277,28 @@ void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd)
* @param hpcd: PCD handle
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCD_ResumeCallback(PCD_HandleTypeDef *hpcd)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCD_ResumeCallback(PCD_HandleTypeDef* hpcd)
#else
-void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd)
+void HAL_PCD_ResumeCallback(PCD_HandleTypeDef* hpcd)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN HAL_PCD_ResumeCallback_PreTreatment */
+ /* USER CODE BEGIN HAL_PCD_ResumeCallback_PreTreatment */
- /* USER CODE END HAL_PCD_ResumeCallback_PreTreatment */
+ /* USER CODE END HAL_PCD_ResumeCallback_PreTreatment */
- /* USER CODE BEGIN 3 */
- if (hpcd->Init.low_power_enable)
- {
- /* Reset SLEEPDEEP bit of Cortex System Control Register. */
- SCB->SCR &= (uint32_t)~((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
- SystemClockConfig_Resume();
- }
- /* USER CODE END 3 */
+ /* USER CODE BEGIN 3 */
+ if(hpcd->Init.low_power_enable) {
+ /* Reset SLEEPDEEP bit of Cortex System Control Register. */
+ SCB->SCR &= (uint32_t) ~((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
+ SystemClockConfig_Resume();
+ }
+ /* USER CODE END 3 */
- USBD_LL_Resume((USBD_HandleTypeDef*)hpcd->pData);
- /* USER CODE BEGIN HAL_PCD_ResumeCallback_PostTreatment */
+ USBD_LL_Resume((USBD_HandleTypeDef*)hpcd->pData);
+ /* USER CODE BEGIN HAL_PCD_ResumeCallback_PostTreatment */
- /* USER CODE END HAL_PCD_ResumeCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_ResumeCallback_PostTreatment */
}
/**
@@ -312,19 +307,19 @@ void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd)
* @param epnum: Endpoint number
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef* hpcd, uint8_t epnum)
#else
-void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
+void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef* hpcd, uint8_t epnum)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN HAL_PCD_ISOOUTIncompleteCallback_PreTreatment */
+ /* USER CODE BEGIN HAL_PCD_ISOOUTIncompleteCallback_PreTreatment */
- /* USER CODE END HAL_PCD_ISOOUTIncompleteCallback_PreTreatment */
- USBD_LL_IsoOUTIncomplete((USBD_HandleTypeDef*)hpcd->pData, epnum);
- /* USER CODE BEGIN HAL_PCD_ISOOUTIncompleteCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_ISOOUTIncompleteCallback_PreTreatment */
+ USBD_LL_IsoOUTIncomplete((USBD_HandleTypeDef*)hpcd->pData, epnum);
+ /* USER CODE BEGIN HAL_PCD_ISOOUTIncompleteCallback_PostTreatment */
- /* USER CODE END HAL_PCD_ISOOUTIncompleteCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_ISOOUTIncompleteCallback_PostTreatment */
}
/**
@@ -333,19 +328,19 @@ void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
* @param epnum: Endpoint number
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCD_ISOINIncompleteCallback(PCD_HandleTypeDef* hpcd, uint8_t epnum)
#else
-void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
+void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef* hpcd, uint8_t epnum)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN HAL_PCD_ISOINIncompleteCallback_PreTreatment */
+ /* USER CODE BEGIN HAL_PCD_ISOINIncompleteCallback_PreTreatment */
- /* USER CODE END HAL_PCD_ISOINIncompleteCallback_PreTreatment */
- USBD_LL_IsoINIncomplete((USBD_HandleTypeDef*)hpcd->pData, epnum);
- /* USER CODE BEGIN HAL_PCD_ISOINIncompleteCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_ISOINIncompleteCallback_PreTreatment */
+ USBD_LL_IsoINIncomplete((USBD_HandleTypeDef*)hpcd->pData, epnum);
+ /* USER CODE BEGIN HAL_PCD_ISOINIncompleteCallback_PostTreatment */
- /* USER CODE END HAL_PCD_ISOINIncompleteCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_ISOINIncompleteCallback_PostTreatment */
}
/**
@@ -353,19 +348,19 @@ void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
* @param hpcd: PCD handle
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCD_ConnectCallback(PCD_HandleTypeDef *hpcd)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCD_ConnectCallback(PCD_HandleTypeDef* hpcd)
#else
-void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd)
+void HAL_PCD_ConnectCallback(PCD_HandleTypeDef* hpcd)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN HAL_PCD_ConnectCallback_PreTreatment */
+ /* USER CODE BEGIN HAL_PCD_ConnectCallback_PreTreatment */
- /* USER CODE END HAL_PCD_ConnectCallback_PreTreatment */
- USBD_LL_DevConnected((USBD_HandleTypeDef*)hpcd->pData);
- /* USER CODE BEGIN HAL_PCD_ConnectCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_ConnectCallback_PreTreatment */
+ USBD_LL_DevConnected((USBD_HandleTypeDef*)hpcd->pData);
+ /* USER CODE BEGIN HAL_PCD_ConnectCallback_PostTreatment */
- /* USER CODE END HAL_PCD_ConnectCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_ConnectCallback_PostTreatment */
}
/**
@@ -373,24 +368,24 @@ void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd)
* @param hpcd: PCD handle
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCD_DisconnectCallback(PCD_HandleTypeDef* hpcd)
#else
-void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd)
+void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef* hpcd)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN HAL_PCD_DisconnectCallback_PreTreatment */
+ /* USER CODE BEGIN HAL_PCD_DisconnectCallback_PreTreatment */
- /* USER CODE END HAL_PCD_DisconnectCallback_PreTreatment */
- USBD_LL_DevDisconnected((USBD_HandleTypeDef*)hpcd->pData);
- /* USER CODE BEGIN HAL_PCD_DisconnectCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_DisconnectCallback_PreTreatment */
+ USBD_LL_DevDisconnected((USBD_HandleTypeDef*)hpcd->pData);
+ /* USER CODE BEGIN HAL_PCD_DisconnectCallback_PostTreatment */
- /* USER CODE END HAL_PCD_DisconnectCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_DisconnectCallback_PostTreatment */
}
- /* USER CODE BEGIN LowLevelInterface */
+/* USER CODE BEGIN LowLevelInterface */
- /* USER CODE END LowLevelInterface */
+/* USER CODE END LowLevelInterface */
/*******************************************************************************
LL Driver Interface (USB Device Library --> PCD)
@@ -401,66 +396,64 @@ void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd)
* @param pdev: Device handle
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev)
-{
- /* Init USB Ip. */
- hpcd_USB_FS.pData = pdev;
- /* Link the driver to the stack. */
- pdev->pData = &hpcd_USB_FS;
-/* Enable USB power on Pwrctrl CR2 register. */
- HAL_PWREx_EnableVddUSB();
-
- hpcd_USB_FS.Instance = USB;
- hpcd_USB_FS.Init.dev_endpoints = 8;
- hpcd_USB_FS.Init.speed = PCD_SPEED_FULL;
- hpcd_USB_FS.Init.phy_itface = PCD_PHY_EMBEDDED;
- hpcd_USB_FS.Init.Sof_enable = DISABLE;
- hpcd_USB_FS.Init.low_power_enable = DISABLE;
- hpcd_USB_FS.Init.lpm_enable = DISABLE;
- hpcd_USB_FS.Init.battery_charging_enable = DISABLE;
-
- #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
- /* register Msp Callbacks (before the Init) */
- HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_MSPINIT_CB_ID, PCD_MspInit);
- HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_MSPDEINIT_CB_ID, PCD_MspDeInit);
- #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
-
- if (HAL_PCD_Init(&hpcd_USB_FS) != HAL_OK)
- {
- Error_Handler( );
- }
-
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
- /* Register USB PCD CallBacks */
- HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_SOF_CB_ID, PCD_SOFCallback);
- HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_SETUPSTAGE_CB_ID, PCD_SetupStageCallback);
- HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_RESET_CB_ID, PCD_ResetCallback);
- HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_SUSPEND_CB_ID, PCD_SuspendCallback);
- HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_RESUME_CB_ID, PCD_ResumeCallback);
- HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_CONNECT_CB_ID, PCD_ConnectCallback);
- HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_DISCONNECT_CB_ID, PCD_DisconnectCallback);
- /* USER CODE BEGIN RegisterCallBackFirstPart */
-
- /* USER CODE END RegisterCallBackFirstPart */
- HAL_PCD_RegisterLpmCallback(&hpcd_USB_FS, PCDEx_LPM_Callback);
- HAL_PCD_RegisterDataOutStageCallback(&hpcd_USB_FS, PCD_DataOutStageCallback);
- HAL_PCD_RegisterDataInStageCallback(&hpcd_USB_FS, PCD_DataInStageCallback);
- HAL_PCD_RegisterIsoOutIncpltCallback(&hpcd_USB_FS, PCD_ISOOUTIncompleteCallback);
- HAL_PCD_RegisterIsoInIncpltCallback(&hpcd_USB_FS, PCD_ISOINIncompleteCallback);
- /* USER CODE BEGIN RegisterCallBackSecondPart */
-
- /* USER CODE END RegisterCallBackSecondPart */
+USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef* pdev) {
+ /* Init USB Ip. */
+ hpcd_USB_FS.pData = pdev;
+ /* Link the driver to the stack. */
+ pdev->pData = &hpcd_USB_FS;
+ /* Enable USB power on Pwrctrl CR2 register. */
+ HAL_PWREx_EnableVddUSB();
+
+ hpcd_USB_FS.Instance = USB;
+ hpcd_USB_FS.Init.dev_endpoints = 8;
+ hpcd_USB_FS.Init.speed = PCD_SPEED_FULL;
+ hpcd_USB_FS.Init.phy_itface = PCD_PHY_EMBEDDED;
+ hpcd_USB_FS.Init.Sof_enable = DISABLE;
+ hpcd_USB_FS.Init.low_power_enable = DISABLE;
+ hpcd_USB_FS.Init.lpm_enable = DISABLE;
+ hpcd_USB_FS.Init.battery_charging_enable = DISABLE;
+
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+ /* register Msp Callbacks (before the Init) */
+ HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_MSPINIT_CB_ID, PCD_MspInit);
+ HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_MSPDEINIT_CB_ID, PCD_MspDeInit);
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
- /* USER CODE BEGIN EndPoint_Configuration */
- HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x00 , PCD_SNG_BUF, 0x18);
- HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x80 , PCD_SNG_BUF, 0x58);
- /* USER CODE END EndPoint_Configuration */
- /* USER CODE BEGIN EndPoint_Configuration_CDC */
- HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x81 , PCD_SNG_BUF, 0xC0);
- HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x01 , PCD_SNG_BUF, 0x110);
- HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x82 , PCD_SNG_BUF, 0x100);
- /* USER CODE END EndPoint_Configuration_CDC */
- return USBD_OK;
+
+ if(HAL_PCD_Init(&hpcd_USB_FS) != HAL_OK) {
+ Error_Handler();
+ }
+
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+ /* Register USB PCD CallBacks */
+ HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_SOF_CB_ID, PCD_SOFCallback);
+ HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_SETUPSTAGE_CB_ID, PCD_SetupStageCallback);
+ HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_RESET_CB_ID, PCD_ResetCallback);
+ HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_SUSPEND_CB_ID, PCD_SuspendCallback);
+ HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_RESUME_CB_ID, PCD_ResumeCallback);
+ HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_CONNECT_CB_ID, PCD_ConnectCallback);
+ HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_DISCONNECT_CB_ID, PCD_DisconnectCallback);
+ /* USER CODE BEGIN RegisterCallBackFirstPart */
+
+ /* USER CODE END RegisterCallBackFirstPart */
+ HAL_PCD_RegisterLpmCallback(&hpcd_USB_FS, PCDEx_LPM_Callback);
+ HAL_PCD_RegisterDataOutStageCallback(&hpcd_USB_FS, PCD_DataOutStageCallback);
+ HAL_PCD_RegisterDataInStageCallback(&hpcd_USB_FS, PCD_DataInStageCallback);
+ HAL_PCD_RegisterIsoOutIncpltCallback(&hpcd_USB_FS, PCD_ISOOUTIncompleteCallback);
+ HAL_PCD_RegisterIsoInIncpltCallback(&hpcd_USB_FS, PCD_ISOINIncompleteCallback);
+ /* USER CODE BEGIN RegisterCallBackSecondPart */
+
+ /* USER CODE END RegisterCallBackSecondPart */
+#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
+ /* USER CODE BEGIN EndPoint_Configuration */
+ HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData, 0x00, PCD_SNG_BUF, 0x18);
+ HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData, 0x80, PCD_SNG_BUF, 0x58);
+ /* USER CODE END EndPoint_Configuration */
+ /* USER CODE BEGIN EndPoint_Configuration_CDC */
+ HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData, 0x81, PCD_SNG_BUF, 0xC0);
+ HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData, 0x01, PCD_SNG_BUF, 0x110);
+ HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData, 0x82, PCD_SNG_BUF, 0x100);
+ /* USER CODE END EndPoint_Configuration_CDC */
+ return USBD_OK;
}
/**
@@ -468,16 +461,15 @@ USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev)
* @param pdev: Device handle
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev)
-{
- HAL_StatusTypeDef hal_status = HAL_OK;
- USBD_StatusTypeDef usb_status = USBD_OK;
+USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef* pdev) {
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ USBD_StatusTypeDef usb_status = USBD_OK;
- hal_status = HAL_PCD_DeInit(pdev->pData);
+ hal_status = HAL_PCD_DeInit(pdev->pData);
- usb_status = USBD_Get_USB_Status(hal_status);
+ usb_status = USBD_Get_USB_Status(hal_status);
- return usb_status;
+ return usb_status;
}
/**
@@ -485,16 +477,15 @@ USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev)
* @param pdev: Device handle
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev)
-{
- HAL_StatusTypeDef hal_status = HAL_OK;
- USBD_StatusTypeDef usb_status = USBD_OK;
+USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef* pdev) {
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ USBD_StatusTypeDef usb_status = USBD_OK;
- hal_status = HAL_PCD_Start(pdev->pData);
+ hal_status = HAL_PCD_Start(pdev->pData);
- usb_status = USBD_Get_USB_Status(hal_status);
+ usb_status = USBD_Get_USB_Status(hal_status);
- return usb_status;
+ return usb_status;
}
/**
@@ -502,16 +493,15 @@ USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev)
* @param pdev: Device handle
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev)
-{
- HAL_StatusTypeDef hal_status = HAL_OK;
- USBD_StatusTypeDef usb_status = USBD_OK;
+USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef* pdev) {
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ USBD_StatusTypeDef usb_status = USBD_OK;
- hal_status = HAL_PCD_Stop(pdev->pData);
+ hal_status = HAL_PCD_Stop(pdev->pData);
- usb_status = USBD_Get_USB_Status(hal_status);
+ usb_status = USBD_Get_USB_Status(hal_status);
- return usb_status;
+ return usb_status;
}
/**
@@ -522,16 +512,16 @@ USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev)
* @param ep_mps: Endpoint max packet size
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t ep_type, uint16_t ep_mps)
-{
- HAL_StatusTypeDef hal_status = HAL_OK;
- USBD_StatusTypeDef usb_status = USBD_OK;
+USBD_StatusTypeDef
+ USBD_LL_OpenEP(USBD_HandleTypeDef* pdev, uint8_t ep_addr, uint8_t ep_type, uint16_t ep_mps) {
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ USBD_StatusTypeDef usb_status = USBD_OK;
- hal_status = HAL_PCD_EP_Open(pdev->pData, ep_addr, ep_mps, ep_type);
+ hal_status = HAL_PCD_EP_Open(pdev->pData, ep_addr, ep_mps, ep_type);
- usb_status = USBD_Get_USB_Status(hal_status);
+ usb_status = USBD_Get_USB_Status(hal_status);
- return usb_status;
+ return usb_status;
}
/**
@@ -540,16 +530,15 @@ USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uin
* @param ep_addr: Endpoint number
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
-{
- HAL_StatusTypeDef hal_status = HAL_OK;
- USBD_StatusTypeDef usb_status = USBD_OK;
+USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef* pdev, uint8_t ep_addr) {
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ USBD_StatusTypeDef usb_status = USBD_OK;
- hal_status = HAL_PCD_EP_Close(pdev->pData, ep_addr);
+ hal_status = HAL_PCD_EP_Close(pdev->pData, ep_addr);
- usb_status = USBD_Get_USB_Status(hal_status);
+ usb_status = USBD_Get_USB_Status(hal_status);
- return usb_status;
+ return usb_status;
}
/**
@@ -558,16 +547,15 @@ USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
* @param ep_addr: Endpoint number
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
-{
- HAL_StatusTypeDef hal_status = HAL_OK;
- USBD_StatusTypeDef usb_status = USBD_OK;
+USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef* pdev, uint8_t ep_addr) {
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ USBD_StatusTypeDef usb_status = USBD_OK;
- hal_status = HAL_PCD_EP_Flush(pdev->pData, ep_addr);
+ hal_status = HAL_PCD_EP_Flush(pdev->pData, ep_addr);
- usb_status = USBD_Get_USB_Status(hal_status);
+ usb_status = USBD_Get_USB_Status(hal_status);
- return usb_status;
+ return usb_status;
}
/**
@@ -576,16 +564,15 @@ USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
* @param ep_addr: Endpoint number
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
-{
- HAL_StatusTypeDef hal_status = HAL_OK;
- USBD_StatusTypeDef usb_status = USBD_OK;
+USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef* pdev, uint8_t ep_addr) {
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ USBD_StatusTypeDef usb_status = USBD_OK;
- hal_status = HAL_PCD_EP_SetStall(pdev->pData, ep_addr);
+ hal_status = HAL_PCD_EP_SetStall(pdev->pData, ep_addr);
- usb_status = USBD_Get_USB_Status(hal_status);
+ usb_status = USBD_Get_USB_Status(hal_status);
- return usb_status;
+ return usb_status;
}
/**
@@ -594,16 +581,15 @@ USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
* @param ep_addr: Endpoint number
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
-{
- HAL_StatusTypeDef hal_status = HAL_OK;
- USBD_StatusTypeDef usb_status = USBD_OK;
+USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef* pdev, uint8_t ep_addr) {
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ USBD_StatusTypeDef usb_status = USBD_OK;
- hal_status = HAL_PCD_EP_ClrStall(pdev->pData, ep_addr);
+ hal_status = HAL_PCD_EP_ClrStall(pdev->pData, ep_addr);
- usb_status = USBD_Get_USB_Status(hal_status);
+ usb_status = USBD_Get_USB_Status(hal_status);
- return usb_status;
+ return usb_status;
}
/**
@@ -612,18 +598,14 @@ USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_add
* @param ep_addr: Endpoint number
* @retval Stall (1: Yes, 0: No)
*/
-uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
-{
- PCD_HandleTypeDef *hpcd = (PCD_HandleTypeDef*) pdev->pData;
+uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef* pdev, uint8_t ep_addr) {
+ PCD_HandleTypeDef* hpcd = (PCD_HandleTypeDef*)pdev->pData;
- if((ep_addr & 0x80) == 0x80)
- {
- return hpcd->IN_ep[ep_addr & 0x7F].is_stall;
- }
- else
- {
- return hpcd->OUT_ep[ep_addr & 0x7F].is_stall;
- }
+ if((ep_addr & 0x80) == 0x80) {
+ return hpcd->IN_ep[ep_addr & 0x7F].is_stall;
+ } else {
+ return hpcd->OUT_ep[ep_addr & 0x7F].is_stall;
+ }
}
/**
@@ -632,16 +614,15 @@ uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
* @param dev_addr: Device address
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_addr)
-{
- HAL_StatusTypeDef hal_status = HAL_OK;
- USBD_StatusTypeDef usb_status = USBD_OK;
+USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef* pdev, uint8_t dev_addr) {
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ USBD_StatusTypeDef usb_status = USBD_OK;
- hal_status = HAL_PCD_SetAddress(pdev->pData, dev_addr);
+ hal_status = HAL_PCD_SetAddress(pdev->pData, dev_addr);
- usb_status = USBD_Get_USB_Status(hal_status);
+ usb_status = USBD_Get_USB_Status(hal_status);
- return usb_status;
+ return usb_status;
}
/**
@@ -652,16 +633,16 @@ USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_a
* @param size: Data size
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint32_t size)
-{
- HAL_StatusTypeDef hal_status = HAL_OK;
- USBD_StatusTypeDef usb_status = USBD_OK;
+USBD_StatusTypeDef
+ USBD_LL_Transmit(USBD_HandleTypeDef* pdev, uint8_t ep_addr, uint8_t* pbuf, uint32_t size) {
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ USBD_StatusTypeDef usb_status = USBD_OK;
- hal_status = HAL_PCD_EP_Transmit(pdev->pData, ep_addr, pbuf, size);
+ hal_status = HAL_PCD_EP_Transmit(pdev->pData, ep_addr, pbuf, size);
- usb_status = USBD_Get_USB_Status(hal_status);
+ usb_status = USBD_Get_USB_Status(hal_status);
- return usb_status;
+ return usb_status;
}
/**
@@ -672,16 +653,19 @@ USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, u
* @param size: Data size
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint32_t size)
-{
- HAL_StatusTypeDef hal_status = HAL_OK;
- USBD_StatusTypeDef usb_status = USBD_OK;
+USBD_StatusTypeDef USBD_LL_PrepareReceive(
+ USBD_HandleTypeDef* pdev,
+ uint8_t ep_addr,
+ uint8_t* pbuf,
+ uint32_t size) {
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ USBD_StatusTypeDef usb_status = USBD_OK;
- hal_status = HAL_PCD_EP_Receive(pdev->pData, ep_addr, pbuf, size);
+ hal_status = HAL_PCD_EP_Receive(pdev->pData, ep_addr, pbuf, size);
- usb_status = USBD_Get_USB_Status(hal_status);
+ usb_status = USBD_Get_USB_Status(hal_status);
- return usb_status;
+ return usb_status;
}
/**
@@ -690,9 +674,8 @@ USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_a
* @param ep_addr: Endpoint number
* @retval Received Data Size
*/
-uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
-{
- return HAL_PCD_EP_GetRxCount((PCD_HandleTypeDef*) pdev->pData, ep_addr);
+uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef* pdev, uint8_t ep_addr) {
+ return HAL_PCD_EP_GetRxCount((PCD_HandleTypeDef*)pdev->pData, ep_addr);
}
/**
@@ -701,38 +684,35 @@ uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
* @param msg: LPM message
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCDEx_LPM_Callback(PCD_HandleTypeDef *hpcd, PCD_LPM_MsgTypeDef msg)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCDEx_LPM_Callback(PCD_HandleTypeDef* hpcd, PCD_LPM_MsgTypeDef msg)
#else
-void HAL_PCDEx_LPM_Callback(PCD_HandleTypeDef *hpcd, PCD_LPM_MsgTypeDef msg)
+void HAL_PCDEx_LPM_Callback(PCD_HandleTypeDef* hpcd, PCD_LPM_MsgTypeDef msg)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN LPM_Callback */
- switch (msg)
- {
- case PCD_LPM_L0_ACTIVE:
- if (hpcd->Init.low_power_enable)
- {
- SystemClockConfig_Resume();
-
- /* Reset SLEEPDEEP bit of Cortex System Control Register. */
- SCB->SCR &= (uint32_t)~((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
+ /* USER CODE BEGIN LPM_Callback */
+ switch(msg) {
+ case PCD_LPM_L0_ACTIVE:
+ if(hpcd->Init.low_power_enable) {
+ SystemClockConfig_Resume();
+
+ /* Reset SLEEPDEEP bit of Cortex System Control Register. */
+ SCB->SCR &= (uint32_t) ~((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
+ }
+ USBD_LL_Resume(hpcd->pData);
+ break;
+
+ case PCD_LPM_L1_ACTIVE:
+ USBD_LL_Suspend(hpcd->pData);
+
+ /* Enter in STOP mode. */
+ if(hpcd->Init.low_power_enable) {
+ /* Set SLEEPDEEP bit and SleepOnExit of Cortex System Control Register. */
+ SCB->SCR |= (uint32_t)((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
+ }
+ break;
}
- USBD_LL_Resume(hpcd->pData);
- break;
-
- case PCD_LPM_L1_ACTIVE:
- USBD_LL_Suspend(hpcd->pData);
-
- /* Enter in STOP mode. */
- if (hpcd->Init.low_power_enable)
- {
- /* Set SLEEPDEEP bit and SleepOnExit of Cortex System Control Register. */
- SCB->SCR |= (uint32_t)((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
- }
- break;
- }
- /* USER CODE END LPM_Callback */
+ /* USER CODE END LPM_Callback */
}
/**
@@ -740,9 +720,8 @@ void HAL_PCDEx_LPM_Callback(PCD_HandleTypeDef *hpcd, PCD_LPM_MsgTypeDef msg)
* @param Delay: Delay in ms
* @retval None
*/
-void USBD_LL_Delay(uint32_t Delay)
-{
- HAL_Delay(Delay);
+void USBD_LL_Delay(uint32_t Delay) {
+ HAL_Delay(Delay);
}
/**
@@ -750,10 +729,9 @@ void USBD_LL_Delay(uint32_t Delay)
* @param size: Size of allocated memory
* @retval None
*/
-void *USBD_static_malloc(uint32_t size)
-{
- static uint32_t mem[(sizeof(USBD_CDC_HandleTypeDef)/4)+1];/* On 32-bit boundary */
- return mem;
+void* USBD_static_malloc(uint32_t size) {
+ static uint32_t mem[(sizeof(USBD_CDC_HandleTypeDef) / 4) + 1]; /* On 32-bit boundary */
+ return mem;
}
/**
@@ -761,9 +739,7 @@ void *USBD_static_malloc(uint32_t size)
* @param p: Pointer to allocated memory address
* @retval None
*/
-void USBD_static_free(void *p)
-{
-
+void USBD_static_free(void* p) {
}
/* USER CODE BEGIN 5 */
@@ -772,9 +748,8 @@ void USBD_static_free(void *p)
* enable HSI, PLL and select PLL as system clock source.
* @retval None
*/
-static void SystemClockConfig_Resume(void)
-{
- SystemClock_Config();
+static void SystemClockConfig_Resume(void) {
+ SystemClock_Config();
}
/* USER CODE END 5 */
@@ -783,28 +758,26 @@ static void SystemClockConfig_Resume(void)
* @param hal_status: HAL status
* @retval USB status
*/
-USBD_StatusTypeDef USBD_Get_USB_Status(HAL_StatusTypeDef hal_status)
-{
- USBD_StatusTypeDef usb_status = USBD_OK;
-
- switch (hal_status)
- {
- case HAL_OK :
- usb_status = USBD_OK;
- break;
- case HAL_ERROR :
- usb_status = USBD_FAIL;
- break;
- case HAL_BUSY :
- usb_status = USBD_BUSY;
- break;
- case HAL_TIMEOUT :
- usb_status = USBD_FAIL;
- break;
- default :
- usb_status = USBD_FAIL;
- break;
- }
- return usb_status;
+USBD_StatusTypeDef USBD_Get_USB_Status(HAL_StatusTypeDef hal_status) {
+ USBD_StatusTypeDef usb_status = USBD_OK;
+
+ switch(hal_status) {
+ case HAL_OK:
+ usb_status = USBD_OK;
+ break;
+ case HAL_ERROR:
+ usb_status = USBD_FAIL;
+ break;
+ case HAL_BUSY:
+ usb_status = USBD_BUSY;
+ break;
+ case HAL_TIMEOUT:
+ usb_status = USBD_FAIL;
+ break;
+ default:
+ usb_status = USBD_FAIL;
+ break;
+ }
+ return usb_status;
}
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/firmware/targets/f6/cube/Src/usbd_desc.c b/firmware/targets/f6/cube/Src/usbd_desc.c
index 7b11ae64..6e466cd3 100644
--- a/firmware/targets/f6/cube/Src/usbd_desc.c
+++ b/firmware/targets/f6/cube/Src/usbd_desc.c
@@ -63,13 +63,13 @@
* @{
*/
-#define USBD_VID 1155
-#define USBD_LANGID_STRING 1033
-#define USBD_MANUFACTURER_STRING "Flipper"
-#define USBD_PID 22336
-#define USBD_PRODUCT_STRING "Flipper Control Virtual ComPort"
-#define USBD_CONFIGURATION_STRING "CDC Config"
-#define USBD_INTERFACE_STRING "CDC Interface"
+#define USBD_VID 1155
+#define USBD_LANGID_STRING 1033
+#define USBD_MANUFACTURER_STRING "Flipper"
+#define USBD_PID 22336
+#define USBD_PRODUCT_STRING "Flipper Control Virtual ComPort"
+#define USBD_CONFIGURATION_STRING "CDC Config"
+#define USBD_INTERFACE_STRING "CDC Interface"
/* USER CODE BEGIN PRIVATE_DEFINES */
@@ -102,7 +102,7 @@
*/
static void Get_SerialNum(void);
-static void IntToUnicode(uint32_t value, uint8_t * pbuf, uint8_t len);
+static void IntToUnicode(uint32_t value, uint8_t* pbuf, uint8_t len);
/**
* @}
@@ -113,13 +113,13 @@ static void IntToUnicode(uint32_t value, uint8_t * pbuf, uint8_t len);
* @{
*/
-uint8_t * USBD_CDC_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
-uint8_t * USBD_CDC_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
-uint8_t * USBD_CDC_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
-uint8_t * USBD_CDC_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
-uint8_t * USBD_CDC_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
-uint8_t * USBD_CDC_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
-uint8_t * USBD_CDC_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
+uint8_t* USBD_CDC_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t* length);
+uint8_t* USBD_CDC_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length);
+uint8_t* USBD_CDC_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length);
+uint8_t* USBD_CDC_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length);
+uint8_t* USBD_CDC_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length);
+uint8_t* USBD_CDC_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length);
+uint8_t* USBD_CDC_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length);
/**
* @}
@@ -130,41 +130,38 @@ uint8_t * USBD_CDC_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *len
* @{
*/
-USBD_DescriptorsTypeDef CDC_Desc =
-{
- USBD_CDC_DeviceDescriptor,
- USBD_CDC_LangIDStrDescriptor,
- USBD_CDC_ManufacturerStrDescriptor,
- USBD_CDC_ProductStrDescriptor,
- USBD_CDC_SerialStrDescriptor,
- USBD_CDC_ConfigStrDescriptor,
- USBD_CDC_InterfaceStrDescriptor
-};
-
-#if defined ( __ICCARM__ ) /* IAR Compiler */
- #pragma data_alignment=4
+USBD_DescriptorsTypeDef CDC_Desc = {
+ USBD_CDC_DeviceDescriptor,
+ USBD_CDC_LangIDStrDescriptor,
+ USBD_CDC_ManufacturerStrDescriptor,
+ USBD_CDC_ProductStrDescriptor,
+ USBD_CDC_SerialStrDescriptor,
+ USBD_CDC_ConfigStrDescriptor,
+ USBD_CDC_InterfaceStrDescriptor};
+
+#if defined(__ICCARM__) /* IAR Compiler */
+#pragma data_alignment = 4
#endif /* defined ( __ICCARM__ ) */
/** USB standard device descriptor. */
-__ALIGN_BEGIN uint8_t USBD_CDC_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END =
-{
- 0x12, /*bLength */
- USB_DESC_TYPE_DEVICE, /*bDescriptorType*/
- 0x00, /*bcdUSB */
- 0x02,
- 0x02, /*bDeviceClass*/
- 0x02, /*bDeviceSubClass*/
- 0x00, /*bDeviceProtocol*/
- USB_MAX_EP0_SIZE, /*bMaxPacketSize*/
- LOBYTE(USBD_VID), /*idVendor*/
- HIBYTE(USBD_VID), /*idVendor*/
- LOBYTE(USBD_PID), /*idProduct*/
- HIBYTE(USBD_PID), /*idProduct*/
- 0x00, /*bcdDevice rel. 2.00*/
- 0x02,
- USBD_IDX_MFC_STR, /*Index of manufacturer string*/
- USBD_IDX_PRODUCT_STR, /*Index of product string*/
- USBD_IDX_SERIAL_STR, /*Index of serial number string*/
- USBD_MAX_NUM_CONFIGURATION /*bNumConfigurations*/
+__ALIGN_BEGIN uint8_t USBD_CDC_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END = {
+ 0x12, /*bLength */
+ USB_DESC_TYPE_DEVICE, /*bDescriptorType*/
+ 0x00, /*bcdUSB */
+ 0x02,
+ 0x02, /*bDeviceClass*/
+ 0x02, /*bDeviceSubClass*/
+ 0x00, /*bDeviceProtocol*/
+ USB_MAX_EP0_SIZE, /*bMaxPacketSize*/
+ LOBYTE(USBD_VID), /*idVendor*/
+ HIBYTE(USBD_VID), /*idVendor*/
+ LOBYTE(USBD_PID), /*idProduct*/
+ HIBYTE(USBD_PID), /*idProduct*/
+ 0x00, /*bcdDevice rel. 2.00*/
+ 0x02,
+ USBD_IDX_MFC_STR, /*Index of manufacturer string*/
+ USBD_IDX_PRODUCT_STR, /*Index of product string*/
+ USBD_IDX_SERIAL_STR, /*Index of serial number string*/
+ USBD_MAX_NUM_CONFIGURATION /*bNumConfigurations*/
};
/* USB_DeviceDescriptor */
@@ -178,31 +175,29 @@ __ALIGN_BEGIN uint8_t USBD_CDC_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END =
* @{
*/
-#if defined ( __ICCARM__ ) /* IAR Compiler */
- #pragma data_alignment=4
+#if defined(__ICCARM__) /* IAR Compiler */
+#pragma data_alignment = 4
#endif /* defined ( __ICCARM__ ) */
/** USB lang identifier descriptor. */
-__ALIGN_BEGIN uint8_t USBD_LangIDDesc[USB_LEN_LANGID_STR_DESC] __ALIGN_END =
-{
- USB_LEN_LANGID_STR_DESC,
- USB_DESC_TYPE_STRING,
- LOBYTE(USBD_LANGID_STRING),
- HIBYTE(USBD_LANGID_STRING)
-};
-
-#if defined ( __ICCARM__ ) /* IAR Compiler */
- #pragma data_alignment=4
+__ALIGN_BEGIN uint8_t USBD_LangIDDesc[USB_LEN_LANGID_STR_DESC] __ALIGN_END = {
+ USB_LEN_LANGID_STR_DESC,
+ USB_DESC_TYPE_STRING,
+ LOBYTE(USBD_LANGID_STRING),
+ HIBYTE(USBD_LANGID_STRING)};
+
+#if defined(__ICCARM__) /* IAR Compiler */
+#pragma data_alignment = 4
#endif /* defined ( __ICCARM__ ) */
/* Internal string descriptor. */
__ALIGN_BEGIN uint8_t USBD_StrDesc[USBD_MAX_STR_DESC_SIZ] __ALIGN_END;
-#if defined ( __ICCARM__ ) /*!< IAR Compiler */
- #pragma data_alignment=4
+#if defined(__ICCARM__) /*!< IAR Compiler */
+#pragma data_alignment = 4
#endif
__ALIGN_BEGIN uint8_t USBD_StringSerial[USB_SIZ_STRING_SERIAL] __ALIGN_END = {
- USB_SIZ_STRING_SERIAL,
- USB_DESC_TYPE_STRING,
+ USB_SIZ_STRING_SERIAL,
+ USB_DESC_TYPE_STRING,
};
/**
@@ -220,11 +215,10 @@ __ALIGN_BEGIN uint8_t USBD_StringSerial[USB_SIZ_STRING_SERIAL] __ALIGN_END = {
* @param length : Pointer to data length variable
* @retval Pointer to descriptor buffer
*/
-uint8_t * USBD_CDC_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
-{
- UNUSED(speed);
- *length = sizeof(USBD_CDC_DeviceDesc);
- return USBD_CDC_DeviceDesc;
+uint8_t* USBD_CDC_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t* length) {
+ UNUSED(speed);
+ *length = sizeof(USBD_CDC_DeviceDesc);
+ return USBD_CDC_DeviceDesc;
}
/**
@@ -233,11 +227,10 @@ uint8_t * USBD_CDC_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
* @param length : Pointer to data length variable
* @retval Pointer to descriptor buffer
*/
-uint8_t * USBD_CDC_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
-{
- UNUSED(speed);
- *length = sizeof(USBD_LangIDDesc);
- return USBD_LangIDDesc;
+uint8_t* USBD_CDC_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length) {
+ UNUSED(speed);
+ *length = sizeof(USBD_LangIDDesc);
+ return USBD_LangIDDesc;
}
/**
@@ -246,17 +239,13 @@ uint8_t * USBD_CDC_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length
* @param length : Pointer to data length variable
* @retval Pointer to descriptor buffer
*/
-uint8_t * USBD_CDC_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
-{
- if(speed == 0)
- {
- USBD_GetString((uint8_t *)USBD_PRODUCT_STRING, USBD_StrDesc, length);
- }
- else
- {
- USBD_GetString((uint8_t *)USBD_PRODUCT_STRING, USBD_StrDesc, length);
- }
- return USBD_StrDesc;
+uint8_t* USBD_CDC_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length) {
+ if(speed == 0) {
+ USBD_GetString((uint8_t*)USBD_PRODUCT_STRING, USBD_StrDesc, length);
+ } else {
+ USBD_GetString((uint8_t*)USBD_PRODUCT_STRING, USBD_StrDesc, length);
+ }
+ return USBD_StrDesc;
}
/**
@@ -265,11 +254,10 @@ uint8_t * USBD_CDC_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *lengt
* @param length : Pointer to data length variable
* @retval Pointer to descriptor buffer
*/
-uint8_t * USBD_CDC_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
-{
- UNUSED(speed);
- USBD_GetString((uint8_t *)USBD_MANUFACTURER_STRING, USBD_StrDesc, length);
- return USBD_StrDesc;
+uint8_t* USBD_CDC_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length) {
+ UNUSED(speed);
+ USBD_GetString((uint8_t*)USBD_MANUFACTURER_STRING, USBD_StrDesc, length);
+ return USBD_StrDesc;
}
/**
@@ -278,20 +266,19 @@ uint8_t * USBD_CDC_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *
* @param length : Pointer to data length variable
* @retval Pointer to descriptor buffer
*/
-uint8_t * USBD_CDC_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
-{
- UNUSED(speed);
- *length = USB_SIZ_STRING_SERIAL;
+uint8_t* USBD_CDC_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length) {
+ UNUSED(speed);
+ *length = USB_SIZ_STRING_SERIAL;
- /* Update the serial number string descriptor with the data from the unique
+ /* Update the serial number string descriptor with the data from the unique
* ID */
- Get_SerialNum();
+ Get_SerialNum();
- /* USER CODE BEGIN USBD_CDC_SerialStrDescriptor */
+ /* USER CODE BEGIN USBD_CDC_SerialStrDescriptor */
- /* USER CODE END USBD_CDC_SerialStrDescriptor */
+ /* USER CODE END USBD_CDC_SerialStrDescriptor */
- return (uint8_t *) USBD_StringSerial;
+ return (uint8_t*)USBD_StringSerial;
}
/**
@@ -300,17 +287,13 @@ uint8_t * USBD_CDC_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length
* @param length : Pointer to data length variable
* @retval Pointer to descriptor buffer
*/
-uint8_t * USBD_CDC_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
-{
- if(speed == USBD_SPEED_HIGH)
- {
- USBD_GetString((uint8_t *)USBD_CONFIGURATION_STRING, USBD_StrDesc, length);
- }
- else
- {
- USBD_GetString((uint8_t *)USBD_CONFIGURATION_STRING, USBD_StrDesc, length);
- }
- return USBD_StrDesc;
+uint8_t* USBD_CDC_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length) {
+ if(speed == USBD_SPEED_HIGH) {
+ USBD_GetString((uint8_t*)USBD_CONFIGURATION_STRING, USBD_StrDesc, length);
+ } else {
+ USBD_GetString((uint8_t*)USBD_CONFIGURATION_STRING, USBD_StrDesc, length);
+ }
+ return USBD_StrDesc;
}
/**
@@ -319,17 +302,13 @@ uint8_t * USBD_CDC_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length
* @param length : Pointer to data length variable
* @retval Pointer to descriptor buffer
*/
-uint8_t * USBD_CDC_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
-{
- if(speed == 0)
- {
- USBD_GetString((uint8_t *)USBD_INTERFACE_STRING, USBD_StrDesc, length);
- }
- else
- {
- USBD_GetString((uint8_t *)USBD_INTERFACE_STRING, USBD_StrDesc, length);
- }
- return USBD_StrDesc;
+uint8_t* USBD_CDC_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length) {
+ if(speed == 0) {
+ USBD_GetString((uint8_t*)USBD_INTERFACE_STRING, USBD_StrDesc, length);
+ } else {
+ USBD_GetString((uint8_t*)USBD_INTERFACE_STRING, USBD_StrDesc, length);
+ }
+ return USBD_StrDesc;
}
/**
@@ -337,21 +316,19 @@ uint8_t * USBD_CDC_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *len
* @param None
* @retval None
*/
-static void Get_SerialNum(void)
-{
- uint32_t deviceserial0, deviceserial1, deviceserial2;
+static void Get_SerialNum(void) {
+ uint32_t deviceserial0, deviceserial1, deviceserial2;
- deviceserial0 = *(uint32_t *) DEVICE_ID1;
- deviceserial1 = *(uint32_t *) DEVICE_ID2;
- deviceserial2 = *(uint32_t *) DEVICE_ID3;
+ deviceserial0 = *(uint32_t*)DEVICE_ID1;
+ deviceserial1 = *(uint32_t*)DEVICE_ID2;
+ deviceserial2 = *(uint32_t*)DEVICE_ID3;
- deviceserial0 += deviceserial2;
+ deviceserial0 += deviceserial2;
- if (deviceserial0 != 0)
- {
- IntToUnicode(deviceserial0, &USBD_StringSerial[2], 8);
- IntToUnicode(deviceserial1, &USBD_StringSerial[18], 4);
- }
+ if(deviceserial0 != 0) {
+ IntToUnicode(deviceserial0, &USBD_StringSerial[2], 8);
+ IntToUnicode(deviceserial1, &USBD_StringSerial[18], 4);
+ }
}
/**
@@ -361,25 +338,20 @@ static void Get_SerialNum(void)
* @param len: buffer length
* @retval None
*/
-static void IntToUnicode(uint32_t value, uint8_t * pbuf, uint8_t len)
-{
- uint8_t idx = 0;
-
- for (idx = 0; idx < len; idx++)
- {
- if (((value >> 28)) < 0xA)
- {
- pbuf[2 * idx] = (value >> 28) + '0';
- }
- else
- {
- pbuf[2 * idx] = (value >> 28) + 'A' - 10;
- }
+static void IntToUnicode(uint32_t value, uint8_t* pbuf, uint8_t len) {
+ uint8_t idx = 0;
+
+ for(idx = 0; idx < len; idx++) {
+ if(((value >> 28)) < 0xA) {
+ pbuf[2 * idx] = (value >> 28) + '0';
+ } else {
+ pbuf[2 * idx] = (value >> 28) + 'A' - 10;
+ }
- value = value << 4;
+ value = value << 4;
- pbuf[2 * idx + 1] = 0;
- }
+ pbuf[2 * idx + 1] = 0;
+ }
}
/**
* @}
diff --git a/firmware/targets/f6/fatfs/fatfs.c b/firmware/targets/f6/fatfs/fatfs.c
index d52b3d4e..1aa5fe44 100644
--- a/firmware/targets/f6/fatfs/fatfs.c
+++ b/firmware/targets/f6/fatfs/fatfs.c
@@ -18,23 +18,22 @@
#include "fatfs.h"
-uint8_t retUSER; /* Return value for USER */
-char USERPath[4]; /* USER logical drive path */
-FATFS USERFatFS; /* File system object for USER logical drive */
-FIL USERFile; /* File object for USER */
+uint8_t retUSER; /* Return value for USER */
+char USERPath[4]; /* USER logical drive path */
+FATFS USERFatFS; /* File system object for USER logical drive */
+FIL USERFile; /* File object for USER */
/* USER CODE BEGIN Variables */
-/* USER CODE END Variables */
+/* USER CODE END Variables */
-void MX_FATFS_Init(void)
-{
- /*## FatFS: Link the USER driver ###########################*/
- retUSER = FATFS_LinkDriver(&USER_Driver, USERPath);
+void MX_FATFS_Init(void) {
+ /*## FatFS: Link the USER driver ###########################*/
+ retUSER = FATFS_LinkDriver(&USER_Driver, USERPath);
- /* USER CODE BEGIN Init */
- /* additional user code for init */
- /* USER CODE END Init */
+ /* USER CODE BEGIN Init */
+ /* additional user code for init */
+ /* USER CODE END Init */
}
/**
@@ -42,15 +41,14 @@ void MX_FATFS_Init(void)
* @param None
* @retval Time in DWORD
*/
-DWORD get_fattime(void)
-{
- /* USER CODE BEGIN get_fattime */
- return 0;
- /* USER CODE END get_fattime */
+DWORD get_fattime(void) {
+ /* USER CODE BEGIN get_fattime */
+ return 0;
+ /* USER CODE END get_fattime */
}
/* USER CODE BEGIN Application */
-
+
/* USER CODE END Application */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/firmware/targets/f6/fatfs/ffconf.h b/firmware/targets/f6/fatfs/ffconf.h
index 354948d8..991e0e28 100644
--- a/firmware/targets/f6/fatfs/ffconf.h
+++ b/firmware/targets/f6/fatfs/ffconf.h
@@ -18,7 +18,7 @@
/* USER CODE END Header */
#ifndef _FFCONF
-#define _FFCONF 68300 /* Revision ID */
+#define _FFCONF 68300 /* Revision ID */
/*-----------------------------------------------------------------------------/
/ Additional user header to be used
@@ -31,13 +31,13 @@
/ Function Configurations
/-----------------------------------------------------------------------------*/
-#define _FS_READONLY 0 /* 0:Read/Write or 1:Read only */
+#define _FS_READONLY 0 /* 0:Read/Write or 1:Read only */
/* This option switches read-only configuration. (0:Read/Write or 1:Read-only)
/ Read-only configuration removes writing API functions, f_write(), f_sync(),
/ f_unlink(), f_mkdir(), f_chmod(), f_rename(), f_truncate(), f_getfree()
/ and optional writing functions as well. */
-#define _FS_MINIMIZE 0 /* 0 to 3 */
+#define _FS_MINIMIZE 0 /* 0 to 3 */
/* This option defines minimization level to remove some basic API functions.
/
/ 0: All basic functions are enabled.
@@ -46,7 +46,7 @@
/ 2: f_opendir(), f_readdir() and f_closedir() are removed in addition to 1.
/ 3: f_lseek() function is removed in addition to 2. */
-#define _USE_STRFUNC 0 /* 0:Disable or 1-2:Enable */
+#define _USE_STRFUNC 0 /* 0:Disable or 1-2:Enable */
/* This option switches string functions, f_gets(), f_putc(), f_puts() and
/ f_printf().
/
@@ -54,35 +54,35 @@
/ 1: Enable without LF-CRLF conversion.
/ 2: Enable with LF-CRLF conversion. */
-#define _USE_FIND 0
+#define _USE_FIND 0
/* This option switches filtered directory read functions, f_findfirst() and
/ f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */
-#define _USE_MKFS 1
+#define _USE_MKFS 1
/* This option switches f_mkfs() function. (0:Disable or 1:Enable) */
-#define _USE_FASTSEEK 1
+#define _USE_FASTSEEK 1
/* This option switches fast seek feature. (0:Disable or 1:Enable) */
-#define _USE_EXPAND 0
+#define _USE_EXPAND 0
/* This option switches f_expand function. (0:Disable or 1:Enable) */
-#define _USE_CHMOD 0
+#define _USE_CHMOD 0
/* This option switches attribute manipulation functions, f_chmod() and f_utime().
/ (0:Disable or 1:Enable) Also _FS_READONLY needs to be 0 to enable this option. */
-#define _USE_LABEL 1
+#define _USE_LABEL 1
/* This option switches volume label functions, f_getlabel() and f_setlabel().
/ (0:Disable or 1:Enable) */
-#define _USE_FORWARD 0
+#define _USE_FORWARD 0
/* This option switches f_forward() function. (0:Disable or 1:Enable) */
/*-----------------------------------------------------------------------------/
/ Locale and Namespace Configurations
/-----------------------------------------------------------------------------*/
-#define _CODE_PAGE 850
+#define _CODE_PAGE 850
/* This option specifies the OEM code page to be used on the target system.
/ Incorrect setting of the code page can cause a file open failure.
/
@@ -110,8 +110,8 @@
/ 950 - Traditional Chinese (DBCS)
*/
-#define _USE_LFN 2 /* 0 to 3 */
-#define _MAX_LFN 255 /* Maximum LFN length to handle (12 to 255) */
+#define _USE_LFN 2 /* 0 to 3 */
+#define _MAX_LFN 255 /* Maximum LFN length to handle (12 to 255) */
/* The _USE_LFN switches the support of long file name (LFN).
/
/ 0: Disable support of LFN. _MAX_LFN has no effect.
@@ -127,12 +127,12 @@
/ memory for the working buffer, memory management functions, ff_memalloc() and
/ ff_memfree(), must be added to the project. */
-#define _LFN_UNICODE 0 /* 0:ANSI/OEM or 1:Unicode */
+#define _LFN_UNICODE 0 /* 0:ANSI/OEM or 1:Unicode */
/* This option switches character encoding on the API. (0:ANSI/OEM or 1:UTF-16)
/ To use Unicode string for the path name, enable LFN and set _LFN_UNICODE = 1.
/ This option also affects behavior of string I/O functions. */
-#define _STRF_ENCODE 0
+#define _STRF_ENCODE 0
/* When _LFN_UNICODE == 1, this option selects the character encoding ON THE FILE to
/ be read/written via string I/O functions, f_gets(), f_putc(), f_puts and f_printf().
/
@@ -143,7 +143,7 @@
/
/ This option has no effect when _LFN_UNICODE == 0. */
-#define _FS_RPATH 0 /* 0 to 2 */
+#define _FS_RPATH 0 /* 0 to 2 */
/* This option configures support of relative path.
/
/ 0: Disable relative path and remove related functions.
@@ -155,28 +155,28 @@
/ Drive/Volume Configurations
/----------------------------------------------------------------------------*/
-#define _VOLUMES 1
+#define _VOLUMES 1
/* Number of volumes (logical drives) to be used. */
-/* USER CODE BEGIN Volumes */
-#define _STR_VOLUME_ID 0 /* 0:Use only 0-9 for drive ID, 1:Use strings for drive ID */
-#define _VOLUME_STRS "RAM","NAND","CF","SD1","SD2","USB1","USB2","USB3"
+/* USER CODE BEGIN Volumes */
+#define _STR_VOLUME_ID 0 /* 0:Use only 0-9 for drive ID, 1:Use strings for drive ID */
+#define _VOLUME_STRS "RAM", "NAND", "CF", "SD1", "SD2", "USB1", "USB2", "USB3"
/* _STR_VOLUME_ID switches string support of volume ID.
/ When _STR_VOLUME_ID is set to 1, also pre-defined strings can be used as drive
/ number in the path name. _VOLUME_STRS defines the drive ID strings for each
/ logical drives. Number of items must be equal to _VOLUMES. Valid characters for
/ the drive ID strings are: A-Z and 0-9. */
-/* USER CODE END Volumes */
+/* USER CODE END Volumes */
-#define _MULTI_PARTITION 0 /* 0:Single partition, 1:Multiple partition */
+#define _MULTI_PARTITION 0 /* 0:Single partition, 1:Multiple partition */
/* This option switches support of multi-partition on a physical drive.
/ By default (0), each logical drive number is bound to the same physical drive
/ number and only an FAT volume found on the physical drive will be mounted.
/ When multi-partition is enabled (1), each logical drive number can be bound to
/ arbitrary physical drive and partition listed in the VolToPart[]. Also f_fdisk()
/ funciton will be available. */
-#define _MIN_SS 512 /* 512, 1024, 2048 or 4096 */
-#define _MAX_SS 512 /* 512, 1024, 2048 or 4096 */
+#define _MIN_SS 512 /* 512, 1024, 2048 or 4096 */
+#define _MAX_SS 512 /* 512, 1024, 2048 or 4096 */
/* These options configure the range of sector size to be supported. (512, 1024,
/ 2048 or 4096) Always set both 512 for most systems, all type of memory cards and
/ harddisk. But a larger value may be required for on-board flash memory and some
@@ -184,12 +184,12 @@
/ to variable sector size and GET_SECTOR_SIZE command must be implemented to the
/ disk_ioctl() function. */
-#define _USE_TRIM 0
+#define _USE_TRIM 0
/* This option switches support of ATA-TRIM. (0:Disable or 1:Enable)
/ To enable Trim function, also CTRL_TRIM command should be implemented to the
/ disk_ioctl() function. */
-#define _FS_NOFSINFO 0 /* 0,1,2 or 3 */
+#define _FS_NOFSINFO 0 /* 0,1,2 or 3 */
/* If you need to know correct free space on the FAT32 volume, set bit 0 of this
/ option, and f_getfree() function at first time after volume mount will force
/ a full FAT scan. Bit 1 controls the use of last allocated cluster number.
@@ -204,21 +204,21 @@
/ System Configurations
/----------------------------------------------------------------------------*/
-#define _FS_TINY 0 /* 0:Normal or 1:Tiny */
+#define _FS_TINY 0 /* 0:Normal or 1:Tiny */
/* This option switches tiny buffer configuration. (0:Normal or 1:Tiny)
/ At the tiny configuration, size of file object (FIL) is reduced _MAX_SS bytes.
/ Instead of private sector buffer eliminated from the file object, common sector
/ buffer in the file system object (FATFS) is used for the file data transfer. */
-#define _FS_EXFAT 1
+#define _FS_EXFAT 1
/* This option switches support of exFAT file system. (0:Disable or 1:Enable)
/ When enable exFAT, also LFN needs to be enabled. (_USE_LFN >= 1)
/ Note that enabling exFAT discards C89 compatibility. */
-#define _FS_NORTC 1
-#define _NORTC_MON 7
-#define _NORTC_MDAY 20
-#define _NORTC_YEAR 2021
+#define _FS_NORTC 1
+#define _NORTC_MON 7
+#define _NORTC_MDAY 20
+#define _NORTC_YEAR 2021
/* The option _FS_NORTC switches timestamp functiton. If the system does not have
/ any RTC function or valid timestamp is not needed, set _FS_NORTC = 1 to disable
/ the timestamp function. All objects modified by FatFs will have a fixed timestamp
@@ -228,7 +228,7 @@
/ _NORTC_MDAY and _NORTC_YEAR have no effect.
/ These options have no effect at read-only configuration (_FS_READONLY = 1). */
-#define _FS_LOCK 0 /* 0:Disable or >=1:Enable */
+#define _FS_LOCK 0 /* 0:Disable or >=1:Enable */
/* The option _FS_LOCK switches file lock function to control duplicated file open
/ and illegal operation to open objects. This option must be 0 when _FS_READONLY
/ is 1.
@@ -239,9 +239,9 @@
/ can be opened simultaneously under file lock control. Note that the file
/ lock control is independent of re-entrancy. */
-#define _FS_REENTRANT 0 /* 0:Disable or 1:Enable */
-#define _FS_TIMEOUT 1000 /* Timeout period in unit of time ticks */
-#define _SYNC_t osMutexId_t
+#define _FS_REENTRANT 0 /* 0:Disable or 1:Enable */
+#define _FS_TIMEOUT 1000 /* Timeout period in unit of time ticks */
+#define _SYNC_t osMutexId_t
/* The option _FS_REENTRANT switches the re-entrancy (thread safe) of the FatFs
/ module itself. Note that regardless of this option, file access to different
/ volume is always re-entrant and volume control functions, f_mount(), f_mkfs()
@@ -262,8 +262,8 @@
/* define the ff_malloc ff_free macros as standard malloc free */
#if !defined(ff_malloc) && !defined(ff_free)
#include <stdlib.h>
-#define ff_malloc malloc
-#define ff_free free
+#define ff_malloc malloc
+#define ff_free free
#endif
#endif /* _FFCONF */
diff --git a/firmware/targets/f6/fatfs/spi_sd_hal.c b/firmware/targets/f6/fatfs/spi_sd_hal.c
index 7e41799f..fce041cb 100644
--- a/firmware/targets/f6/fatfs/spi_sd_hal.c
+++ b/firmware/targets/f6/fatfs/spi_sd_hal.c
@@ -1,5 +1,5 @@
#include "main.h"
-#include <furi-hal.h>
+#include <furi_hal.h>
#include <furi.h>
#define SD_DUMMY_BYTE 0xFF
@@ -19,7 +19,8 @@ uint8_t SD_IO_WriteByte(uint8_t Data);
* @retval None
*/
static void SPIx_WriteReadData(const uint8_t* DataIn, uint8_t* DataOut, uint16_t DataLength) {
- furi_check(furi_hal_spi_bus_trx(furi_hal_sd_spi_handle, (uint8_t*)DataIn, DataOut, DataLength, SpiTimeout));
+ furi_check(furi_hal_spi_bus_trx(
+ furi_hal_sd_spi_handle, (uint8_t*)DataIn, DataOut, DataLength, SpiTimeout));
}
/**
diff --git a/firmware/targets/f6/fatfs/stm32_adafruit_sd.c b/firmware/targets/f6/fatfs/stm32_adafruit_sd.c
index 1c571d63..b97b95c8 100644
--- a/firmware/targets/f6/fatfs/stm32_adafruit_sd.c
+++ b/firmware/targets/f6/fatfs/stm32_adafruit_sd.c
@@ -91,7 +91,7 @@
#include "stdlib.h"
#include "string.h"
#include "stdio.h"
-#include <furi-hal.h>
+#include <furi_hal.h>
/** @addtogroup BSP
* @{
@@ -278,10 +278,25 @@ static uint8_t SD_ReadData(void);
/* Private functions ---------------------------------------------------------*/
-void SD_SPI_Bus_To_Down_State(){
- hal_gpio_init_ex(furi_hal_sd_spi_handle->miso, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh, GpioAltFnUnused);
- hal_gpio_init_ex(furi_hal_sd_spi_handle->mosi, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh, GpioAltFnUnused);
- hal_gpio_init_ex(furi_hal_sd_spi_handle->sck, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh, GpioAltFnUnused);
+void SD_SPI_Bus_To_Down_State() {
+ hal_gpio_init_ex(
+ furi_hal_sd_spi_handle->miso,
+ GpioModeOutputPushPull,
+ GpioPullNo,
+ GpioSpeedVeryHigh,
+ GpioAltFnUnused);
+ hal_gpio_init_ex(
+ furi_hal_sd_spi_handle->mosi,
+ GpioModeOutputPushPull,
+ GpioPullNo,
+ GpioSpeedVeryHigh,
+ GpioAltFnUnused);
+ hal_gpio_init_ex(
+ furi_hal_sd_spi_handle->sck,
+ GpioModeOutputPushPull,
+ GpioPullNo,
+ GpioSpeedVeryHigh,
+ GpioAltFnUnused);
hal_gpio_write(furi_hal_sd_spi_handle->cs, false);
hal_gpio_write(furi_hal_sd_spi_handle->miso, false);
@@ -289,12 +304,27 @@ void SD_SPI_Bus_To_Down_State(){
hal_gpio_write(furi_hal_sd_spi_handle->sck, false);
}
-void SD_SPI_Bus_To_Normal_State(){
+void SD_SPI_Bus_To_Normal_State() {
hal_gpio_write(furi_hal_sd_spi_handle->cs, true);
- hal_gpio_init_ex(furi_hal_sd_spi_handle->miso, GpioModeAltFunctionPushPull, GpioPullUp, GpioSpeedVeryHigh, GpioAltFn5SPI2);
- hal_gpio_init_ex(furi_hal_sd_spi_handle->mosi, GpioModeAltFunctionPushPull, GpioPullUp, GpioSpeedVeryHigh, GpioAltFn5SPI2);
- hal_gpio_init_ex(furi_hal_sd_spi_handle->sck, GpioModeAltFunctionPushPull, GpioPullUp, GpioSpeedVeryHigh, GpioAltFn5SPI2);
+ hal_gpio_init_ex(
+ furi_hal_sd_spi_handle->miso,
+ GpioModeAltFunctionPushPull,
+ GpioPullUp,
+ GpioSpeedVeryHigh,
+ GpioAltFn5SPI2);
+ hal_gpio_init_ex(
+ furi_hal_sd_spi_handle->mosi,
+ GpioModeAltFunctionPushPull,
+ GpioPullUp,
+ GpioSpeedVeryHigh,
+ GpioAltFn5SPI2);
+ hal_gpio_init_ex(
+ furi_hal_sd_spi_handle->sck,
+ GpioModeAltFunctionPushPull,
+ GpioPullUp,
+ GpioSpeedVeryHigh,
+ GpioAltFn5SPI2);
}
/** @defgroup STM32_ADAFRUIT_SD_Private_Functions
@@ -388,7 +418,7 @@ uint8_t BSP_SD_GetCardInfo(SD_CardInfo* pCardInfo) {
* @retval SD status
*/
uint8_t
-BSP_SD_ReadBlocks(uint32_t* pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout) {
+ BSP_SD_ReadBlocks(uint32_t* pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout) {
uint32_t offset = 0;
uint32_t addr;
uint8_t retr = BSP_SD_ERROR;
@@ -465,8 +495,11 @@ error:
* @param Timeout: This parameter is used for compatibility with BSP implementation
* @retval SD status
*/
-uint8_t
-BSP_SD_WriteBlocks(uint32_t* pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout) {
+uint8_t BSP_SD_WriteBlocks(
+ uint32_t* pData,
+ uint32_t WriteAddr,
+ uint32_t NumOfBlocks,
+ uint32_t Timeout) {
uint32_t offset = 0;
uint32_t addr;
uint8_t retr = BSP_SD_ERROR;
@@ -513,7 +546,7 @@ BSP_SD_WriteBlocks(uint32_t* pData, uint32_t WriteAddr, uint32_t NumOfBlocks, ui
/* Set next write address */
offset += BlockSize;
addr = ((flag_SDHC == 1) ? (addr + 1) : (addr + BlockSize));
-
+
/* Put CRC bytes (not really needed by us, but required by SD) */
SD_IO_WriteByte(SD_DUMMY_BYTE);
SD_IO_WriteByte(SD_DUMMY_BYTE);
diff --git a/firmware/targets/f6/fatfs/stm32_adafruit_sd.h b/firmware/targets/f6/fatfs/stm32_adafruit_sd.h
index 38f9da49..74a0e0c2 100644
--- a/firmware/targets/f6/fatfs/stm32_adafruit_sd.h
+++ b/firmware/targets/f6/fatfs/stm32_adafruit_sd.h
@@ -34,15 +34,15 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
- */
+ */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32_ADAFRUIT_SD_H
#define __STM32_ADAFRUIT_SD_H
#ifdef __cplusplus
- extern "C" {
-#endif
+extern "C" {
+#endif
/* Includes ------------------------------------------------------------------*/
#include <stdint.h>
@@ -50,178 +50,169 @@
/** @addtogroup BSP
* @{
- */
-#define __IO volatile
-
+ */
+#define __IO volatile
+
/** @addtogroup STM32_ADAFRUIT
* @{
*/
-
+
/** @defgroup STM32_ADAFRUIT_SD
* @{
- */
+ */
/** @defgroup STM32_ADAFRUIT_SD_Exported_Types
* @{
*/
-
+
/**
* @brief SD status structure definition
- */
-enum {
- BSP_SD_OK = 0x00,
- MSD_OK = 0x00,
- BSP_SD_ERROR = 0x01,
- BSP_SD_TIMEOUT
-};
-
-typedef struct
-{
- uint8_t Reserved1:2; /* Reserved */
- uint16_t DeviceSize:12; /* Device Size */
- uint8_t MaxRdCurrentVDDMin:3; /* Max. read current @ VDD min */
- uint8_t MaxRdCurrentVDDMax:3; /* Max. read current @ VDD max */
- uint8_t MaxWrCurrentVDDMin:3; /* Max. write current @ VDD min */
- uint8_t MaxWrCurrentVDDMax:3; /* Max. write current @ VDD max */
- uint8_t DeviceSizeMul:3; /* Device size multiplier */
+ */
+enum { BSP_SD_OK = 0x00, MSD_OK = 0x00, BSP_SD_ERROR = 0x01, BSP_SD_TIMEOUT };
+
+typedef struct {
+ uint8_t Reserved1 : 2; /* Reserved */
+ uint16_t DeviceSize : 12; /* Device Size */
+ uint8_t MaxRdCurrentVDDMin : 3; /* Max. read current @ VDD min */
+ uint8_t MaxRdCurrentVDDMax : 3; /* Max. read current @ VDD max */
+ uint8_t MaxWrCurrentVDDMin : 3; /* Max. write current @ VDD min */
+ uint8_t MaxWrCurrentVDDMax : 3; /* Max. write current @ VDD max */
+ uint8_t DeviceSizeMul : 3; /* Device size multiplier */
} struct_v1;
-
-typedef struct
-{
- uint8_t Reserved1:6; /* Reserved */
- uint32_t DeviceSize:22; /* Device Size */
- uint8_t Reserved2:1; /* Reserved */
+typedef struct {
+ uint8_t Reserved1 : 6; /* Reserved */
+ uint32_t DeviceSize : 22; /* Device Size */
+ uint8_t Reserved2 : 1; /* Reserved */
} struct_v2;
/**
* @brief Card Specific Data: CSD Register
- */
-typedef struct
-{
- /* Header part */
- uint8_t CSDStruct:2; /* CSD structure */
- uint8_t Reserved1:6; /* Reserved */
- uint8_t TAAC:8; /* Data read access-time 1 */
- uint8_t NSAC:8; /* Data read access-time 2 in CLK cycles */
- uint8_t MaxBusClkFrec:8; /* Max. bus clock frequency */
- uint16_t CardComdClasses:12; /* Card command classes */
- uint8_t RdBlockLen:4; /* Max. read data block length */
- uint8_t PartBlockRead:1; /* Partial blocks for read allowed */
- uint8_t WrBlockMisalign:1; /* Write block misalignment */
- uint8_t RdBlockMisalign:1; /* Read block misalignment */
- uint8_t DSRImpl:1; /* DSR implemented */
-
- /* v1 or v2 struct */
- union csd_version {
- struct_v1 v1;
- struct_v2 v2;
- } version;
-
- uint8_t EraseSingleBlockEnable:1; /* Erase single block enable */
- uint8_t EraseSectorSize:7; /* Erase group size multiplier */
- uint8_t WrProtectGrSize:7; /* Write protect group size */
- uint8_t WrProtectGrEnable:1; /* Write protect group enable */
- uint8_t Reserved2:2; /* Reserved */
- uint8_t WrSpeedFact:3; /* Write speed factor */
- uint8_t MaxWrBlockLen:4; /* Max. write data block length */
- uint8_t WriteBlockPartial:1; /* Partial blocks for write allowed */
- uint8_t Reserved3:5; /* Reserved */
- uint8_t FileFormatGrouop:1; /* File format group */
- uint8_t CopyFlag:1; /* Copy flag (OTP) */
- uint8_t PermWrProtect:1; /* Permanent write protection */
- uint8_t TempWrProtect:1; /* Temporary write protection */
- uint8_t FileFormat:2; /* File Format */
- uint8_t Reserved4:2; /* Reserved */
- uint8_t crc:7; /* Reserved */
- uint8_t Reserved5:1; /* always 1*/
-
+ */
+typedef struct {
+ /* Header part */
+ uint8_t CSDStruct : 2; /* CSD structure */
+ uint8_t Reserved1 : 6; /* Reserved */
+ uint8_t TAAC : 8; /* Data read access-time 1 */
+ uint8_t NSAC : 8; /* Data read access-time 2 in CLK cycles */
+ uint8_t MaxBusClkFrec : 8; /* Max. bus clock frequency */
+ uint16_t CardComdClasses : 12; /* Card command classes */
+ uint8_t RdBlockLen : 4; /* Max. read data block length */
+ uint8_t PartBlockRead : 1; /* Partial blocks for read allowed */
+ uint8_t WrBlockMisalign : 1; /* Write block misalignment */
+ uint8_t RdBlockMisalign : 1; /* Read block misalignment */
+ uint8_t DSRImpl : 1; /* DSR implemented */
+
+ /* v1 or v2 struct */
+ union csd_version {
+ struct_v1 v1;
+ struct_v2 v2;
+ } version;
+
+ uint8_t EraseSingleBlockEnable : 1; /* Erase single block enable */
+ uint8_t EraseSectorSize : 7; /* Erase group size multiplier */
+ uint8_t WrProtectGrSize : 7; /* Write protect group size */
+ uint8_t WrProtectGrEnable : 1; /* Write protect group enable */
+ uint8_t Reserved2 : 2; /* Reserved */
+ uint8_t WrSpeedFact : 3; /* Write speed factor */
+ uint8_t MaxWrBlockLen : 4; /* Max. write data block length */
+ uint8_t WriteBlockPartial : 1; /* Partial blocks for write allowed */
+ uint8_t Reserved3 : 5; /* Reserved */
+ uint8_t FileFormatGrouop : 1; /* File format group */
+ uint8_t CopyFlag : 1; /* Copy flag (OTP) */
+ uint8_t PermWrProtect : 1; /* Permanent write protection */
+ uint8_t TempWrProtect : 1; /* Temporary write protection */
+ uint8_t FileFormat : 2; /* File Format */
+ uint8_t Reserved4 : 2; /* Reserved */
+ uint8_t crc : 7; /* Reserved */
+ uint8_t Reserved5 : 1; /* always 1*/
+
} SD_CSD;
/**
* @brief Card Identification Data: CID Register
*/
-typedef struct
-{
- __IO uint8_t ManufacturerID; /* ManufacturerID */
- __IO uint16_t OEM_AppliID; /* OEM/Application ID */
- __IO uint32_t ProdName1; /* Product Name part1 */
- __IO uint8_t ProdName2; /* Product Name part2*/
- __IO uint8_t ProdRev; /* Product Revision */
- __IO uint32_t ProdSN; /* Product Serial Number */
- __IO uint8_t Reserved1; /* Reserved1 */
- __IO uint16_t ManufactDate; /* Manufacturing Date */
- __IO uint8_t CID_CRC; /* CID CRC */
- __IO uint8_t Reserved2; /* always 1 */
+typedef struct {
+ __IO uint8_t ManufacturerID; /* ManufacturerID */
+ __IO uint16_t OEM_AppliID; /* OEM/Application ID */
+ __IO uint32_t ProdName1; /* Product Name part1 */
+ __IO uint8_t ProdName2; /* Product Name part2*/
+ __IO uint8_t ProdRev; /* Product Revision */
+ __IO uint32_t ProdSN; /* Product Serial Number */
+ __IO uint8_t Reserved1; /* Reserved1 */
+ __IO uint16_t ManufactDate; /* Manufacturing Date */
+ __IO uint8_t CID_CRC; /* CID CRC */
+ __IO uint8_t Reserved2; /* always 1 */
} SD_CID;
/**
* @brief SD Card information
*/
-typedef struct
-{
- SD_CSD Csd;
- SD_CID Cid;
- uint64_t CardCapacity; /*!< Card Capacity */
- uint32_t CardBlockSize; /*!< Card Block Size */
- uint32_t LogBlockNbr; /*!< Specifies the Card logical Capacity in blocks */
- uint32_t LogBlockSize; /*!< Specifies logical block size in bytes */
+typedef struct {
+ SD_CSD Csd;
+ SD_CID Cid;
+ uint64_t CardCapacity; /*!< Card Capacity */
+ uint32_t CardBlockSize; /*!< Card Block Size */
+ uint32_t LogBlockNbr; /*!< Specifies the Card logical Capacity in blocks */
+ uint32_t LogBlockSize; /*!< Specifies logical block size in bytes */
} SD_CardInfo;
/**
* @}
*/
-
+
/** @defgroup STM32_ADAFRUIT_SPI_SD_Exported_Constants
* @{
- */
-
+ */
+
/**
* @brief Block Size
*/
-#define SD_BLOCK_SIZE 0x200
+#define SD_BLOCK_SIZE 0x200
/**
* @brief SD detection on its memory slot
*/
-#define SD_PRESENT ((uint8_t)0x01)
-#define SD_NOT_PRESENT ((uint8_t)0x00)
+#define SD_PRESENT ((uint8_t)0x01)
+#define SD_NOT_PRESENT ((uint8_t)0x00)
-#define SD_DATATIMEOUT ((uint32_t)100000000)
+#define SD_DATATIMEOUT ((uint32_t)100000000)
/**
* @brief SD Card information structure
- */
+ */
#define BSP_SD_CardInfo SD_CardInfo
/**
* @}
*/
-
+
/** @defgroup STM32_ADAFRUIT_SD_Exported_Macro
* @{
- */
+ */
/**
* @}
- */
+ */
/** @defgroup STM32_ADAFRUIT_SD_Exported_Functions
* @{
- */
+ */
uint8_t BSP_SD_Init(bool reset_card);
-uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout);
-uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout);
+uint8_t
+ BSP_SD_ReadBlocks(uint32_t* pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout);
+uint8_t
+ BSP_SD_WriteBlocks(uint32_t* pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout);
uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr);
uint8_t BSP_SD_GetCardState(void);
-uint8_t BSP_SD_GetCardInfo(SD_CardInfo *pCardInfo);
-
+uint8_t BSP_SD_GetCardInfo(SD_CardInfo* pCardInfo);
+
/* Link functions for SD Card peripheral*/
-void SD_SPI_Slow_Init(void);
-void SD_SPI_Fast_Init(void);
-void SD_IO_Init(void);
-void SD_IO_CSState(uint8_t state);
-void SD_IO_WriteReadData(const uint8_t *DataIn, uint8_t *DataOut, uint16_t DataLength);
+void SD_SPI_Slow_Init(void);
+void SD_SPI_Fast_Init(void);
+void SD_IO_Init(void);
+void SD_IO_CSState(uint8_t state);
+void SD_IO_WriteReadData(const uint8_t* DataIn, uint8_t* DataOut, uint16_t DataLength);
uint8_t SD_IO_WriteByte(uint8_t Data);
/* Link function for HAL delay */
@@ -235,18 +226,18 @@ void HAL_Delay(__IO uint32_t Delay);
/**
* @}
- */
+ */
/**
* @}
- */
+ */
/**
* @}
- */
+ */
/**
* @}
- */
+ */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/firmware/targets/f6/fatfs/syscall.c b/firmware/targets/f6/fatfs/syscall.c
index 8d488dc7..7bed9315 100644
--- a/firmware/targets/f6/fatfs/syscall.c
+++ b/firmware/targets/f6/fatfs/syscall.c
@@ -19,11 +19,8 @@
******************************************************************************
**/
-
-
#include "fatfs/ff.h"
-
#if _FS_REENTRANT
/*------------------------------------------------------------------------*/
/* Create a Synchronization Object */
@@ -33,12 +30,10 @@
/ the f_mount() function fails with FR_INT_ERR.
*/
-int ff_cre_syncobj ( /* 1:Function succeeded, 0:Could not create the sync object */
- BYTE vol, /* Corresponding volume (logical drive number) */
- _SYNC_t *sobj /* Pointer to return the created sync object */
-)
-{
-
+int ff_cre_syncobj(/* 1:Function succeeded, 0:Could not create the sync object */
+ BYTE vol, /* Corresponding volume (logical drive number) */
+ _SYNC_t* sobj /* Pointer to return the created sync object */
+) {
int ret;
//osSemaphoreDef(SEM);
@@ -49,8 +44,6 @@ int ff_cre_syncobj ( /* 1:Function succeeded, 0:Could not create the sync object
return ret;
}
-
-
/*------------------------------------------------------------------------*/
/* Delete a Synchronization Object */
/*------------------------------------------------------------------------*/
@@ -59,16 +52,13 @@ int ff_cre_syncobj ( /* 1:Function succeeded, 0:Could not create the sync object
/ the f_mount() function fails with FR_INT_ERR.
*/
-int ff_del_syncobj ( /* 1:Function succeeded, 0:Could not delete due to any error */
- _SYNC_t sobj /* Sync object tied to the logical drive to be deleted */
-)
-{
+int ff_del_syncobj(/* 1:Function succeeded, 0:Could not delete due to any error */
+ _SYNC_t sobj /* Sync object tied to the logical drive to be deleted */
+) {
osMutexDelete(sobj);
return 1;
}
-
-
/*------------------------------------------------------------------------*/
/* Request Grant to Access the Volume */
/*------------------------------------------------------------------------*/
@@ -76,63 +66,51 @@ int ff_del_syncobj ( /* 1:Function succeeded, 0:Could not delete due to any erro
/ When a 0 is returned, the file function fails with FR_TIMEOUT.
*/
-int ff_req_grant ( /* 1:Got a grant to access the volume, 0:Could not get a grant */
- _SYNC_t sobj /* Sync object to wait */
-)
-{
- int ret = 0;
+int ff_req_grant(/* 1:Got a grant to access the volume, 0:Could not get a grant */
+ _SYNC_t sobj /* Sync object to wait */
+) {
+ int ret = 0;
- if(osMutexAcquire(sobj, _FS_TIMEOUT) == osOK) {
- ret = 1;
- }
+ if(osMutexAcquire(sobj, _FS_TIMEOUT) == osOK) {
+ ret = 1;
+ }
- return ret;
+ return ret;
}
-
-
/*------------------------------------------------------------------------*/
/* Release Grant to Access the Volume */
/*------------------------------------------------------------------------*/
/* This function is called on leaving file functions to unlock the volume.
*/
-void ff_rel_grant (
- _SYNC_t sobj /* Sync object to be signaled */
-)
-{
+void ff_rel_grant(_SYNC_t sobj /* Sync object to be signaled */
+) {
osMutexRelease(sobj);
}
#endif
-
-
-
-#if _USE_LFN == 3 /* LFN with a working buffer on the heap */
+#if _USE_LFN == 3 /* LFN with a working buffer on the heap */
/*------------------------------------------------------------------------*/
/* Allocate a memory block */
/*------------------------------------------------------------------------*/
/* If a NULL is returned, the file function fails with FR_NOT_ENOUGH_CORE.
*/
-void* ff_memalloc ( /* Returns pointer to the allocated memory block */
- UINT msize /* Number of bytes to allocate */
-)
-{
- return ff_malloc(msize); /* Allocate a new memory block with POSIX API */
+void* ff_memalloc(/* Returns pointer to the allocated memory block */
+ UINT msize /* Number of bytes to allocate */
+) {
+ return ff_malloc(msize); /* Allocate a new memory block with POSIX API */
}
-
/*------------------------------------------------------------------------*/
/* Free a memory block */
/*------------------------------------------------------------------------*/
-void ff_memfree (
- void* mblock /* Pointer to the memory block to free */
-)
-{
- ff_free(mblock); /* Discard the memory block with POSIX API */
+void ff_memfree(void* mblock /* Pointer to the memory block to free */
+) {
+ ff_free(mblock); /* Discard the memory block with POSIX API */
}
#endif
diff --git a/firmware/targets/f6/fatfs/user_diskio.c b/firmware/targets/f6/fatfs/user_diskio.c
index df16245a..94a7d4d3 100644
--- a/firmware/targets/f6/fatfs/user_diskio.c
+++ b/firmware/targets/f6/fatfs/user_diskio.c
@@ -35,7 +35,7 @@
/* Includes ------------------------------------------------------------------*/
#include "user_diskio.h"
-#include <furi-hal.h>
+#include <furi_hal.h>
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
diff --git a/firmware/targets/f6/furi-hal/furi-hal-usb-cdc.c b/firmware/targets/f6/furi-hal/furi-hal-usb-cdc.c
deleted file mode 100644
index 86218f83..00000000
--- a/firmware/targets/f6/furi-hal/furi-hal-usb-cdc.c
+++ /dev/null
@@ -1,631 +0,0 @@
-#include "furi-hal-version.h"
-#include "furi-hal-usb_i.h"
-#include "furi-hal-usb.h"
-#include "furi-hal-usb-cdc_i.h"
-#include <furi.h>
-
-#include "usb.h"
-#include "usb_cdc.h"
-
-#define CDC0_RXD_EP 0x01
-#define CDC0_TXD_EP 0x82
-#define CDC0_NTF_EP 0x83
-
-#define CDC1_RXD_EP 0x04
-#define CDC1_TXD_EP 0x85
-#define CDC1_NTF_EP 0x86
-
-#define CDC_NTF_SZ 0x08
-
-#define IF_NUM_MAX 2
-
-struct CdcIadDescriptor {
- struct usb_iad_descriptor comm_iad;
- struct usb_interface_descriptor comm;
- struct usb_cdc_header_desc cdc_hdr;
- struct usb_cdc_call_mgmt_desc cdc_mgmt;
- struct usb_cdc_acm_desc cdc_acm;
- struct usb_cdc_union_desc cdc_union;
- struct usb_endpoint_descriptor comm_ep;
- struct usb_interface_descriptor data;
- struct usb_endpoint_descriptor data_eprx;
- struct usb_endpoint_descriptor data_eptx;
-};
-
-struct CdcConfigDescriptorSingle {
- struct usb_config_descriptor config;
- struct CdcIadDescriptor iad_0;
-} __attribute__((packed));
-
-struct CdcConfigDescriptorDual {
- struct usb_config_descriptor config;
- struct CdcIadDescriptor iad_0;
- struct CdcIadDescriptor iad_1;
-} __attribute__((packed));
-
-static const struct usb_string_descriptor dev_manuf_desc = USB_STRING_DESC("Flipper Devices Inc.");
-
-/* Device descriptor */
-static const struct usb_device_descriptor cdc_device_desc = {
- .bLength = sizeof(struct usb_device_descriptor),
- .bDescriptorType = USB_DTYPE_DEVICE,
- .bcdUSB = VERSION_BCD(2,0,0),
- .bDeviceClass = USB_CLASS_IAD,
- .bDeviceSubClass = USB_SUBCLASS_IAD,
- .bDeviceProtocol = USB_PROTO_IAD,
- .bMaxPacketSize0 = USB_EP0_SIZE,
- .idVendor = 0x0483,
- .idProduct = 0x5740,
- .bcdDevice = VERSION_BCD(1,0,0),
- .iManufacturer = UsbDevManuf,
- .iProduct = UsbDevProduct,
- .iSerialNumber = UsbDevSerial,
- .bNumConfigurations = 1,
-};
-
-/* Device configuration descriptor - single mode*/
-static const struct CdcConfigDescriptorSingle cdc_cfg_desc_single = {
- .config = {
- .bLength = sizeof(struct usb_config_descriptor),
- .bDescriptorType = USB_DTYPE_CONFIGURATION,
- .wTotalLength = sizeof(struct CdcConfigDescriptorSingle),
- .bNumInterfaces = 2,
-
- .bConfigurationValue = 1,
- .iConfiguration = NO_DESCRIPTOR,
- .bmAttributes = USB_CFG_ATTR_RESERVED | USB_CFG_ATTR_SELFPOWERED,
- .bMaxPower = USB_CFG_POWER_MA(100),
- },
- .iad_0 = {
- .comm_iad = {
- .bLength = sizeof(struct usb_iad_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFASEASSOC,
- .bFirstInterface = 0,
- .bInterfaceCount = 2,
- .bFunctionClass = USB_CLASS_CDC,
- .bFunctionSubClass = USB_CDC_SUBCLASS_ACM,
- .bFunctionProtocol = USB_PROTO_NONE,
- .iFunction = NO_DESCRIPTOR,
- },
- .comm = {
- .bLength = sizeof(struct usb_interface_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFACE,
- .bInterfaceNumber = 0,
- .bAlternateSetting = 0,
- .bNumEndpoints = 1,
- .bInterfaceClass = USB_CLASS_CDC,
- .bInterfaceSubClass = USB_CDC_SUBCLASS_ACM,
- .bInterfaceProtocol = USB_PROTO_NONE,
- .iInterface = NO_DESCRIPTOR,
- },
- .cdc_hdr = {
- .bFunctionLength = sizeof(struct usb_cdc_header_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_HEADER,
- .bcdCDC = VERSION_BCD(1,1,0),
- },
- .cdc_mgmt = {
- .bFunctionLength = sizeof(struct usb_cdc_call_mgmt_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_CALL_MANAGEMENT,
- .bmCapabilities = 0,
- .bDataInterface = 1,
- },
- .cdc_acm = {
- .bFunctionLength = sizeof(struct usb_cdc_acm_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_ACM,
- .bmCapabilities = 0,
- },
- .cdc_union = {
- .bFunctionLength = sizeof(struct usb_cdc_union_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_UNION,
- .bMasterInterface0 = 0,
- .bSlaveInterface0 = 1,
- },
- .comm_ep = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = CDC0_NTF_EP,
- .bmAttributes = USB_EPTYPE_INTERRUPT,
- .wMaxPacketSize = CDC_NTF_SZ,
- .bInterval = 0xFF,
- },
- .data = {
- .bLength = sizeof(struct usb_interface_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFACE,
- .bInterfaceNumber = 1,
- .bAlternateSetting = 0,
- .bNumEndpoints = 2,
- .bInterfaceClass = USB_CLASS_CDC_DATA,
- .bInterfaceSubClass = USB_SUBCLASS_NONE,
- .bInterfaceProtocol = USB_PROTO_NONE,
- .iInterface = NO_DESCRIPTOR,
- },
- .data_eprx = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = CDC0_RXD_EP,
- .bmAttributes = USB_EPTYPE_BULK,
- .wMaxPacketSize = CDC_DATA_SZ,
- .bInterval = 0x01,
- },
- .data_eptx = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = CDC0_TXD_EP,
- .bmAttributes = USB_EPTYPE_BULK,
- .wMaxPacketSize = CDC_DATA_SZ,
- .bInterval = 0x01,
- },
- },
-};
-
-/* Device configuration descriptor - dual mode*/
-static const struct CdcConfigDescriptorDual cdc_cfg_desc_dual = {
- .config = {
- .bLength = sizeof(struct usb_config_descriptor),
- .bDescriptorType = USB_DTYPE_CONFIGURATION,
- .wTotalLength = sizeof(struct CdcConfigDescriptorDual),
- .bNumInterfaces = 4,
-
- .bConfigurationValue = 1,
- .iConfiguration = NO_DESCRIPTOR,
- .bmAttributes = USB_CFG_ATTR_RESERVED | USB_CFG_ATTR_SELFPOWERED,
- .bMaxPower = USB_CFG_POWER_MA(100),
- },
- .iad_0 = {
- .comm_iad = {
- .bLength = sizeof(struct usb_iad_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFASEASSOC,
- .bFirstInterface = 0,
- .bInterfaceCount = 2,
- .bFunctionClass = USB_CLASS_CDC,
- .bFunctionSubClass = USB_CDC_SUBCLASS_ACM,
- .bFunctionProtocol = USB_PROTO_NONE,
- .iFunction = NO_DESCRIPTOR,
- },
- .comm = {
- .bLength = sizeof(struct usb_interface_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFACE,
- .bInterfaceNumber = 0,
- .bAlternateSetting = 0,
- .bNumEndpoints = 1,
- .bInterfaceClass = USB_CLASS_CDC,
- .bInterfaceSubClass = USB_CDC_SUBCLASS_ACM,
- .bInterfaceProtocol = USB_PROTO_NONE,
- .iInterface = NO_DESCRIPTOR,
- },
- .cdc_hdr = {
- .bFunctionLength = sizeof(struct usb_cdc_header_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_HEADER,
- .bcdCDC = VERSION_BCD(1,1,0),
- },
- .cdc_mgmt = {
- .bFunctionLength = sizeof(struct usb_cdc_call_mgmt_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_CALL_MANAGEMENT,
- .bmCapabilities = 0,
- .bDataInterface = 1,
- },
- .cdc_acm = {
- .bFunctionLength = sizeof(struct usb_cdc_acm_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_ACM,
- .bmCapabilities = 0,
- },
- .cdc_union = {
- .bFunctionLength = sizeof(struct usb_cdc_union_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_UNION,
- .bMasterInterface0 = 0,
- .bSlaveInterface0 = 1,
- },
- .comm_ep = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = CDC0_NTF_EP,
- .bmAttributes = USB_EPTYPE_INTERRUPT,
- .wMaxPacketSize = CDC_NTF_SZ,
- .bInterval = 0xFF,
- },
- .data = {
- .bLength = sizeof(struct usb_interface_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFACE,
- .bInterfaceNumber = 1,
- .bAlternateSetting = 0,
- .bNumEndpoints = 2,
- .bInterfaceClass = USB_CLASS_CDC_DATA,
- .bInterfaceSubClass = USB_SUBCLASS_NONE,
- .bInterfaceProtocol = USB_PROTO_NONE,
- .iInterface = NO_DESCRIPTOR,
- },
- .data_eprx = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = CDC0_RXD_EP,
- .bmAttributes = USB_EPTYPE_BULK,
- .wMaxPacketSize = CDC_DATA_SZ,
- .bInterval = 0x01,
- },
- .data_eptx = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = CDC0_TXD_EP,
- .bmAttributes = USB_EPTYPE_BULK,
- .wMaxPacketSize = CDC_DATA_SZ,
- .bInterval = 0x01,
- },
- },
- .iad_1 = {
- .comm_iad = {
- .bLength = sizeof(struct usb_iad_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFASEASSOC,
- .bFirstInterface = 2,
- .bInterfaceCount = 2,
- .bFunctionClass = USB_CLASS_CDC,
- .bFunctionSubClass = USB_CDC_SUBCLASS_ACM,
- .bFunctionProtocol = USB_PROTO_NONE,
- .iFunction = NO_DESCRIPTOR,
- },
- .comm = {
- .bLength = sizeof(struct usb_interface_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFACE,
- .bInterfaceNumber = 2+0,
- .bAlternateSetting = 0,
- .bNumEndpoints = 1,
- .bInterfaceClass = USB_CLASS_CDC,
- .bInterfaceSubClass = USB_CDC_SUBCLASS_ACM,
- .bInterfaceProtocol = USB_PROTO_NONE,
- .iInterface = NO_DESCRIPTOR,
- },
- .cdc_hdr = {
- .bFunctionLength = sizeof(struct usb_cdc_header_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_HEADER,
- .bcdCDC = VERSION_BCD(1,1,0),
- },
- .cdc_mgmt = {
- .bFunctionLength = sizeof(struct usb_cdc_call_mgmt_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_CALL_MANAGEMENT,
- .bmCapabilities = 0,
- .bDataInterface = 2+1,
- },
- .cdc_acm = {
- .bFunctionLength = sizeof(struct usb_cdc_acm_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_ACM,
- .bmCapabilities = 0,
- },
- .cdc_union = {
- .bFunctionLength = sizeof(struct usb_cdc_union_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_UNION,
- .bMasterInterface0 = 2+0,
- .bSlaveInterface0 = 2+1,
- },
- .comm_ep = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = CDC1_NTF_EP,
- .bmAttributes = USB_EPTYPE_INTERRUPT,
- .wMaxPacketSize = CDC_NTF_SZ,
- .bInterval = 0xFF,
- },
- .data = {
- .bLength = sizeof(struct usb_interface_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFACE,
- .bInterfaceNumber = 2+1,
- .bAlternateSetting = 0,
- .bNumEndpoints = 2,
- .bInterfaceClass = USB_CLASS_CDC_DATA,
- .bInterfaceSubClass = USB_SUBCLASS_NONE,
- .bInterfaceProtocol = USB_PROTO_NONE,
- .iInterface = NO_DESCRIPTOR,
- },
- .data_eprx = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = CDC1_RXD_EP,
- .bmAttributes = USB_EPTYPE_BULK,
- .wMaxPacketSize = CDC_DATA_SZ,
- .bInterval = 0x01,
- },
- .data_eptx = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = CDC1_TXD_EP,
- .bmAttributes = USB_EPTYPE_BULK,
- .wMaxPacketSize = CDC_DATA_SZ,
- .bInterval = 0x01,
- },
- },
-};
-
-static struct usb_cdc_line_coding cdc_config[IF_NUM_MAX] = {};
-static uint8_t cdc_ctrl_line_state[IF_NUM_MAX];
-
-static void cdc_init(usbd_device* dev, UsbInterface* intf);
-static void cdc_deinit(usbd_device *dev);
-static void cdc_on_wakeup(usbd_device *dev);
-static void cdc_on_suspend(usbd_device *dev);
-
-static usbd_respond cdc_ep_config (usbd_device *dev, uint8_t cfg);
-static usbd_respond cdc_control (usbd_device *dev, usbd_ctlreq *req, usbd_rqc_callback *callback);
-static usbd_device* usb_dev;
-static UsbInterface* cdc_if_cur = NULL;
-static bool connected = false;
-static CdcCallbacks* callbacks[IF_NUM_MAX] = {NULL};
-static void* cb_ctx[IF_NUM_MAX];
-
-UsbInterface usb_cdc_single = {
- .init = cdc_init,
- .deinit = cdc_deinit,
- .wakeup = cdc_on_wakeup,
- .suspend = cdc_on_suspend,
-
- .dev_descr = (struct usb_device_descriptor*)&cdc_device_desc,
-
- .str_manuf_descr = (void*)&dev_manuf_desc,
- .str_prod_descr = NULL,
- .str_serial_descr = NULL,
-
- .cfg_descr = (void*)&cdc_cfg_desc_single,
-};
-
-UsbInterface usb_cdc_dual = {
- .init = cdc_init,
- .deinit = cdc_deinit,
- .wakeup = cdc_on_wakeup,
- .suspend = cdc_on_suspend,
-
- .dev_descr = (struct usb_device_descriptor*)&cdc_device_desc,
-
- .str_manuf_descr = (void*)&dev_manuf_desc,
- .str_prod_descr = NULL,
- .str_serial_descr = NULL,
-
- .cfg_descr = (void*)&cdc_cfg_desc_dual,
-};
-
-static void cdc_init(usbd_device* dev, UsbInterface* intf) {
- usb_dev = dev;
- cdc_if_cur = intf;
-
- char* name = (char*)furi_hal_version_get_device_name_ptr();
- uint8_t len = (name == NULL) ? (0) : (strlen(name));
- struct usb_string_descriptor* dev_prod_desc = furi_alloc(len * 2 + 2);
- dev_prod_desc->bLength = len * 2 + 2;
- dev_prod_desc->bDescriptorType = USB_DTYPE_STRING;
- for (uint8_t i = 0; i < len; i++)
- dev_prod_desc->wString[i] = name[i];
-
- name = (char*)furi_hal_version_get_name_ptr();
- len = (name == NULL) ? (0) : (strlen(name));
- struct usb_string_descriptor* dev_serial_desc = furi_alloc((len + 5) * 2 + 2);
- dev_serial_desc->bLength = (len + 5) * 2 + 2;
- dev_serial_desc->bDescriptorType = USB_DTYPE_STRING;
- memcpy(dev_serial_desc->wString, "f\0l\0i\0p\0_\0", 5*2);
- for (uint8_t i = 0; i < len; i++)
- dev_serial_desc->wString[i+5] = name[i];
-
- cdc_if_cur->str_prod_descr = dev_prod_desc;
- cdc_if_cur->str_serial_descr = dev_serial_desc;
-
- usbd_reg_config(dev, cdc_ep_config);
- usbd_reg_control(dev, cdc_control);
-
- usbd_connect(dev, true);
-}
-
-static void cdc_deinit(usbd_device *dev) {
- usbd_reg_config(dev, NULL);
- usbd_reg_control(dev, NULL);
-
- free(cdc_if_cur->str_prod_descr);
- free(cdc_if_cur->str_serial_descr);
-
- cdc_if_cur = NULL;
-}
-
-void furi_hal_cdc_set_callbacks(uint8_t if_num, CdcCallbacks* cb, void* context) {
- furi_assert(if_num < IF_NUM_MAX);
-
- if (callbacks[if_num] != NULL) {
- if (callbacks[if_num]->state_callback != NULL) {
- if (connected == true)
- callbacks[if_num]->state_callback(cb_ctx[if_num], 0);
- }
- }
-
- callbacks[if_num] = cb;
- cb_ctx[if_num] = context;
-
- if (callbacks[if_num] != NULL) {
- if (callbacks[if_num]->state_callback != NULL) {
- if (connected == true)
- callbacks[if_num]->state_callback(cb_ctx[if_num], 1);
- }
- }
-}
-
-struct usb_cdc_line_coding* furi_hal_cdc_get_port_settings(uint8_t if_num) {
- furi_assert(if_num < IF_NUM_MAX);
- return &cdc_config[if_num];
-}
-
-uint8_t furi_hal_cdc_get_ctrl_line_state(uint8_t if_num) {
- furi_assert(if_num < IF_NUM_MAX);
- return cdc_ctrl_line_state[if_num];
-}
-
-void furi_hal_cdc_send(uint8_t if_num, uint8_t* buf, uint16_t len) {
- if (if_num == 0)
- usbd_ep_write(usb_dev, CDC0_TXD_EP, buf, len);
- else
- usbd_ep_write(usb_dev, CDC1_TXD_EP, buf, len);
-}
-
-int32_t furi_hal_cdc_receive(uint8_t if_num, uint8_t* buf, uint16_t max_len) {
- int32_t len = 0;
- if (if_num == 0)
- len = usbd_ep_read(usb_dev, CDC0_RXD_EP, buf, max_len);
- else
- len = usbd_ep_read(usb_dev, CDC1_RXD_EP, buf, max_len);
- return ((len < 0) ? 0 : len);
-}
-
-static void cdc_on_wakeup(usbd_device *dev) {
- connected = true;
- for (uint8_t i = 0; i < IF_NUM_MAX; i++) {
- if (callbacks[i] != NULL) {
- if (callbacks[i]->state_callback != NULL)
- callbacks[i]->state_callback(cb_ctx[i], 1);
- }
- }
-}
-
-static void cdc_on_suspend(usbd_device *dev) {
- connected = false;
- for (uint8_t i = 0; i < IF_NUM_MAX; i++) {
- cdc_ctrl_line_state[i] = 0;
- if (callbacks[i] != NULL) {
- if (callbacks[i]->state_callback != NULL)
- callbacks[i]->state_callback(cb_ctx[i], 0);
- }
- }
-}
-
-static void cdc_rx_ep_callback (usbd_device *dev, uint8_t event, uint8_t ep) {
- uint8_t if_num = 0;
- if (ep == CDC0_RXD_EP)
- if_num = 0;
- else
- if_num = 1;
-
- if (callbacks[if_num] != NULL) {
- if (callbacks[if_num]->rx_ep_callback != NULL)
- callbacks[if_num]->rx_ep_callback(cb_ctx[if_num]);
- }
-}
-
-static void cdc_tx_ep_callback (usbd_device *dev, uint8_t event, uint8_t ep) {
- uint8_t if_num = 0;
- if (ep == CDC0_TXD_EP)
- if_num = 0;
- else
- if_num = 1;
-
- if (callbacks[if_num] != NULL) {
- if (callbacks[if_num]->tx_ep_callback != NULL)
- callbacks[if_num]->tx_ep_callback(cb_ctx[if_num]);
- }
-}
-
-static void cdc_txrx_ep_callback (usbd_device *dev, uint8_t event, uint8_t ep) {
- if (event == usbd_evt_eptx) {
- cdc_tx_ep_callback(dev, event, ep);
- } else {
- cdc_rx_ep_callback(dev, event, ep);
- }
-}
-
-/* Configure endpoints */
-static usbd_respond cdc_ep_config (usbd_device *dev, uint8_t cfg) {
- uint8_t if_cnt = ((struct usb_config_descriptor*)(cdc_if_cur->cfg_descr))->bNumInterfaces;
- switch (cfg) {
- case 0:
- /* deconfiguring device */
- if (if_cnt == 4) {
- usbd_ep_deconfig(dev, CDC1_NTF_EP);
- usbd_ep_deconfig(dev, CDC1_TXD_EP);
- usbd_ep_deconfig(dev, CDC1_RXD_EP);
- usbd_reg_endpoint(dev, CDC1_RXD_EP, 0);
- usbd_reg_endpoint(dev, CDC1_TXD_EP, 0);
- }
- usbd_ep_deconfig(dev, CDC0_NTF_EP);
- usbd_ep_deconfig(dev, CDC0_TXD_EP);
- usbd_ep_deconfig(dev, CDC0_RXD_EP);
- usbd_reg_endpoint(dev, CDC0_RXD_EP, 0);
- usbd_reg_endpoint(dev, CDC0_TXD_EP, 0);
- return usbd_ack;
- case 1:
- /* configuring device */
- if ((CDC0_TXD_EP & 0x7F) != (CDC0_RXD_EP & 0x7F)) {
- // 2x unidirectional endpoint mode with dualbuf
- usbd_ep_config(dev, CDC0_RXD_EP, USB_EPTYPE_BULK | USB_EPTYPE_DBLBUF, CDC_DATA_SZ);
- usbd_ep_config(dev, CDC0_TXD_EP, USB_EPTYPE_BULK | USB_EPTYPE_DBLBUF, CDC_DATA_SZ);
- usbd_ep_config(dev, CDC0_NTF_EP, USB_EPTYPE_INTERRUPT, CDC_NTF_SZ);
- usbd_reg_endpoint(dev, CDC0_RXD_EP, cdc_rx_ep_callback);
- usbd_reg_endpoint(dev, CDC0_TXD_EP, cdc_tx_ep_callback);
- } else {
- // 1x bidirectional endpoint mode
- usbd_ep_config(dev, CDC0_RXD_EP, USB_EPTYPE_BULK, CDC_DATA_SZ);
- usbd_ep_config(dev, CDC0_TXD_EP, USB_EPTYPE_BULK, CDC_DATA_SZ);
- usbd_ep_config(dev, CDC0_NTF_EP, USB_EPTYPE_INTERRUPT, CDC_NTF_SZ);
- usbd_reg_endpoint(dev, CDC0_RXD_EP, cdc_txrx_ep_callback);
- usbd_reg_endpoint(dev, CDC0_TXD_EP, cdc_txrx_ep_callback);
- }
- usbd_ep_write(dev, CDC0_TXD_EP, 0, 0);
-
- if (if_cnt == 4) {
- if ((CDC1_TXD_EP & 0x7F) != (CDC1_RXD_EP & 0x7F)) {
- usbd_ep_config(dev, CDC1_RXD_EP, USB_EPTYPE_BULK | USB_EPTYPE_DBLBUF, CDC_DATA_SZ);
- usbd_ep_config(dev, CDC1_TXD_EP, USB_EPTYPE_BULK | USB_EPTYPE_DBLBUF, CDC_DATA_SZ);
- usbd_ep_config(dev, CDC1_NTF_EP, USB_EPTYPE_INTERRUPT, CDC_NTF_SZ);
- usbd_reg_endpoint(dev, CDC1_RXD_EP, cdc_rx_ep_callback);
- usbd_reg_endpoint(dev, CDC1_TXD_EP, cdc_tx_ep_callback);
- } else {
- usbd_ep_config(dev, CDC1_RXD_EP, USB_EPTYPE_BULK, CDC_DATA_SZ);
- usbd_ep_config(dev, CDC1_TXD_EP, USB_EPTYPE_BULK, CDC_DATA_SZ);
- usbd_ep_config(dev, CDC1_NTF_EP, USB_EPTYPE_INTERRUPT, CDC_NTF_SZ);
- usbd_reg_endpoint(dev, CDC1_RXD_EP, cdc_txrx_ep_callback);
- usbd_reg_endpoint(dev, CDC1_TXD_EP, cdc_txrx_ep_callback);
- }
- usbd_ep_write(dev, CDC1_TXD_EP, 0, 0);
- }
- return usbd_ack;
- default:
- return usbd_fail;
- }
-}
-
-/* Control requests handler */
-static usbd_respond cdc_control(usbd_device* dev, usbd_ctlreq* req, usbd_rqc_callback* callback) {
- /* CDC control requests */
- uint8_t if_num = 0;
- if(((USB_REQ_RECIPIENT | USB_REQ_TYPE) & req->bmRequestType) == (USB_REQ_INTERFACE | USB_REQ_CLASS)
- && (req->wIndex == 0 || req->wIndex == 2)) {
- if (req->wIndex == 0)
- if_num = 0;
- else
- if_num = 1;
-
- switch(req->bRequest) {
- case USB_CDC_SET_CONTROL_LINE_STATE:
- if (callbacks[if_num] != NULL) {
- cdc_ctrl_line_state[if_num] = req->wValue;
- if (callbacks[if_num]->ctrl_line_callback != NULL)
- callbacks[if_num]->ctrl_line_callback(cb_ctx[if_num], cdc_ctrl_line_state[if_num]);
- }
- return usbd_ack;
- case USB_CDC_SET_LINE_CODING:
- memcpy(&cdc_config[if_num], req->data, sizeof(cdc_config[0]));
- if (callbacks[if_num] != NULL) {
- if (callbacks[if_num]->config_callback != NULL)
- callbacks[if_num]->config_callback(cb_ctx[if_num], &cdc_config[if_num]);
- }
- return usbd_ack;
- case USB_CDC_GET_LINE_CODING:
- dev->status.data_ptr = &cdc_config[if_num];
- dev->status.data_count = sizeof(cdc_config[0]);
- return usbd_ack;
- default:
- return usbd_fail;
- }
- }
- return usbd_fail;
-}
diff --git a/firmware/targets/f6/furi-hal/furi-hal-usb-hid.c b/firmware/targets/f6/furi-hal/furi-hal-usb-hid.c
deleted file mode 100644
index 71b03ace..00000000
--- a/firmware/targets/f6/furi-hal/furi-hal-usb-hid.c
+++ /dev/null
@@ -1,481 +0,0 @@
-#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"
-#include "usb_hid.h"
-#include "hid_usage_desktop.h"
-#include "hid_usage_button.h"
-#include "hid_usage_keyboard.h"
-#include "hid_usage_led.h"
-
-#define HID_EP_IN 0x81
-#define HID_EP_OUT 0x01
-#define HID_EP_SZ 0x10
-
-#define HID_KB_MAX_KEYS 6
-#define HID_CONSUMER_MAX_KEYS 2
-
-#define HID_PAGE_CONSUMER 0x0C
-#define HID_CONSUMER_CONTROL 0x01
-
-struct HidIadDescriptor {
- struct usb_iad_descriptor hid_iad;
- struct usb_interface_descriptor hid;
- struct usb_hid_descriptor hid_desc;
- struct usb_endpoint_descriptor hid_ep_in;
- struct usb_endpoint_descriptor hid_ep_out;
-};
-
-struct HidConfigDescriptor {
- struct usb_config_descriptor config;
- struct HidIadDescriptor iad_0;
-} __attribute__((packed));
-
-enum HidReportId {
- ReportIdKeyboard = 1,
- ReportIdMouse = 2,
- ReportIdConsumer = 3,
-};
-
-/* HID report: keyboard+mouse */
-static const uint8_t hid_report_desc[] = {
- HID_USAGE_PAGE(HID_PAGE_DESKTOP),
- HID_USAGE(HID_DESKTOP_KEYBOARD),
- HID_COLLECTION(HID_APPLICATION_COLLECTION),
- HID_REPORT_ID(ReportIdKeyboard),
- HID_USAGE_PAGE(HID_DESKTOP_KEYPAD),
- HID_USAGE_MINIMUM(HID_KEYBOARD_L_CTRL),
- HID_USAGE_MAXIMUM(HID_KEYBOARD_R_GUI),
- HID_LOGICAL_MINIMUM(0),
- HID_LOGICAL_MAXIMUM(1),
- HID_REPORT_SIZE(1),
- HID_REPORT_COUNT(8),
- HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
- HID_REPORT_COUNT(1),
- HID_REPORT_SIZE(8),
- HID_INPUT(HID_IOF_CONSTANT | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
- HID_USAGE_PAGE(HID_PAGE_LED),
- HID_REPORT_COUNT(8),
- HID_REPORT_SIZE(1),
- HID_USAGE_MINIMUM(1),
- HID_USAGE_MAXIMUM(8),
- HID_OUTPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
- HID_REPORT_COUNT(HID_KB_MAX_KEYS),
- HID_REPORT_SIZE(8),
- HID_LOGICAL_MINIMUM(0),
- HID_LOGICAL_MAXIMUM(101),
- HID_USAGE_PAGE(HID_DESKTOP_KEYPAD),
- HID_USAGE_MINIMUM(0),
- HID_USAGE_MAXIMUM(101),
- HID_INPUT(HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE),
- HID_END_COLLECTION,
- HID_USAGE_PAGE(HID_PAGE_DESKTOP),
- HID_USAGE(HID_DESKTOP_MOUSE),
- HID_COLLECTION(HID_APPLICATION_COLLECTION),
- HID_USAGE(HID_DESKTOP_POINTER),
- HID_COLLECTION(HID_PHYSICAL_COLLECTION),
- HID_REPORT_ID(ReportIdMouse),
- HID_USAGE_PAGE(HID_PAGE_BUTTON),
- HID_USAGE_MINIMUM(1),
- HID_USAGE_MAXIMUM(3),
- HID_LOGICAL_MINIMUM(0),
- HID_LOGICAL_MAXIMUM(1),
- HID_REPORT_COUNT(3),
- HID_REPORT_SIZE(1),
- HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
- HID_REPORT_SIZE(1),
- HID_REPORT_COUNT(5),
- HID_INPUT(HID_IOF_CONSTANT | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
- HID_USAGE_PAGE(HID_PAGE_DESKTOP),
- HID_USAGE(HID_DESKTOP_X),
- HID_USAGE(HID_DESKTOP_Y),
- HID_USAGE(HID_DESKTOP_WHEEL),
- HID_LOGICAL_MINIMUM(-127),
- HID_LOGICAL_MAXIMUM(127),
- HID_REPORT_SIZE(8),
- HID_REPORT_COUNT(3),
- HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE),
- HID_END_COLLECTION,
- HID_END_COLLECTION,
- HID_USAGE_PAGE(HID_PAGE_CONSUMER),
- HID_USAGE(HID_CONSUMER_CONTROL),
- HID_COLLECTION(HID_APPLICATION_COLLECTION),
- HID_REPORT_ID(ReportIdConsumer),
- HID_LOGICAL_MINIMUM(0),
- HID_RI_LOGICAL_MAXIMUM(16, 0x3FF),
- HID_USAGE_MINIMUM(0),
- HID_RI_USAGE_MAXIMUM(16, 0x3FF),
- HID_REPORT_COUNT(HID_CONSUMER_MAX_KEYS),
- HID_REPORT_SIZE(16),
- HID_INPUT(HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE),
- HID_END_COLLECTION,
-};
-
-static const struct usb_string_descriptor dev_manuf_desc = USB_STRING_DESC("Logitech");
-static const struct usb_string_descriptor dev_prod_desc = USB_STRING_DESC("USB Receiver");
-static const struct usb_string_descriptor dev_serial_desc = USB_STRING_DESC("1234567890");
-
-/* Device descriptor */
-static const struct usb_device_descriptor hid_device_desc = {
- .bLength = sizeof(struct usb_device_descriptor),
- .bDescriptorType = USB_DTYPE_DEVICE,
- .bcdUSB = VERSION_BCD(2,0,0),
- .bDeviceClass = USB_CLASS_IAD,
- .bDeviceSubClass = USB_SUBCLASS_IAD,
- .bDeviceProtocol = USB_PROTO_IAD,
- .bMaxPacketSize0 = USB_EP0_SIZE,
- .idVendor = 0x046d,
- .idProduct = 0xc529,
- .bcdDevice = VERSION_BCD(1,0,0),
- .iManufacturer = UsbDevManuf,
- .iProduct = UsbDevProduct,
- .iSerialNumber = UsbDevSerial,
- .bNumConfigurations = 1,
-};
-
-/* Device configuration descriptor */
-static const struct HidConfigDescriptor hid_cfg_desc = {
- .config = {
- .bLength = sizeof(struct usb_config_descriptor),
- .bDescriptorType = USB_DTYPE_CONFIGURATION,
- .wTotalLength = sizeof(struct HidConfigDescriptor),
- .bNumInterfaces = 1,
- .bConfigurationValue = 1,
- .iConfiguration = NO_DESCRIPTOR,
- .bmAttributes = USB_CFG_ATTR_RESERVED | USB_CFG_ATTR_SELFPOWERED,
- .bMaxPower = USB_CFG_POWER_MA(100),
- },
- .iad_0 = {
- .hid_iad = {
- .bLength = sizeof(struct usb_iad_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFASEASSOC,
- .bFirstInterface = 0,
- .bInterfaceCount = 1,
- .bFunctionClass = USB_CLASS_PER_INTERFACE,
- .bFunctionSubClass = USB_SUBCLASS_NONE,
- .bFunctionProtocol = USB_PROTO_NONE,
- .iFunction = NO_DESCRIPTOR,
- },
- .hid = {
- .bLength = sizeof(struct usb_interface_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFACE,
- .bInterfaceNumber = 0,
- .bAlternateSetting = 0,
- .bNumEndpoints = 2,
- .bInterfaceClass = USB_CLASS_HID,
- .bInterfaceSubClass = USB_HID_SUBCLASS_NONBOOT,
- .bInterfaceProtocol = USB_HID_PROTO_NONBOOT,
- .iInterface = NO_DESCRIPTOR,
- },
- .hid_desc = {
- .bLength = sizeof(struct usb_hid_descriptor),
- .bDescriptorType = USB_DTYPE_HID,
- .bcdHID = VERSION_BCD(1,0,0),
- .bCountryCode = USB_HID_COUNTRY_NONE,
- .bNumDescriptors = 1,
- .bDescriptorType0 = USB_DTYPE_HID_REPORT,
- .wDescriptorLength0 = sizeof(hid_report_desc),
- },
- .hid_ep_in = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = HID_EP_IN,
- .bmAttributes = USB_EPTYPE_INTERRUPT,
- .wMaxPacketSize = HID_EP_SZ,
- .bInterval = 10,
- },
- .hid_ep_out = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = HID_EP_OUT,
- .bmAttributes = USB_EPTYPE_INTERRUPT,
- .wMaxPacketSize = HID_EP_SZ,
- .bInterval = 10,
- },
- },
-};
-
-struct HidReportMouse {
- uint8_t report_id;
- uint8_t btn;
- int8_t x;
- int8_t y;
- int8_t wheel;
-} __attribute__((packed));
-
-struct HidReportKB {
- uint8_t report_id;
- uint8_t mods;
- uint8_t reserved;
- uint8_t btn[HID_KB_MAX_KEYS];
-} __attribute__((packed));
-
-struct HidReportConsumer {
- uint8_t report_id;
- uint16_t btn[HID_CONSUMER_MAX_KEYS];
-} __attribute__((packed));
-
-struct HidReportLED {
- uint8_t report_id;
- uint8_t led_state;
-} __attribute__((packed));
-
-static struct HidReport {
- struct HidReportKB keyboard;
- struct HidReportMouse mouse;
- struct HidReportConsumer consumer;
-} __attribute__((packed)) hid_report;
-
-static void hid_init(usbd_device* dev, UsbInterface* intf);
-static void hid_deinit(usbd_device *dev);
-static void hid_on_wakeup(usbd_device *dev);
-static void hid_on_suspend(usbd_device *dev);
-
-static bool hid_send_report(uint8_t report_id);
-static usbd_respond hid_ep_config (usbd_device *dev, uint8_t cfg);
-static usbd_respond hid_control (usbd_device *dev, usbd_ctlreq *req, usbd_rqc_callback *callback);
-static usbd_device* usb_dev;
-static osSemaphoreId_t hid_semaphore = NULL;
-static bool hid_connected = false;
-static HidStateCallback callback;
-static void* cb_ctx;
-static uint8_t led_state;
-
-bool furi_hal_hid_is_connected() {
- return hid_connected;
-}
-
-uint8_t furi_hal_hid_get_led_state() {
- return led_state;
-}
-
-void furi_hal_hid_set_state_callback(HidStateCallback cb, void* ctx) {
- if (callback != NULL) {
- if (hid_connected == true)
- callback(false, cb_ctx);
- }
-
- callback = cb;
- cb_ctx = ctx;
-
- if (callback != NULL) {
- if (hid_connected == true)
- callback(true, cb_ctx);
- }
-}
-
-bool furi_hal_hid_kb_press(uint16_t button) {
- for (uint8_t key_nb = 0; key_nb < HID_KB_MAX_KEYS; key_nb++) {
- if (hid_report.keyboard.btn[key_nb] == 0) {
- hid_report.keyboard.btn[key_nb] = button & 0xFF;
- break;
- }
- }
- hid_report.keyboard.mods |= (button >> 8);
- return hid_send_report(ReportIdKeyboard);
-}
-
-bool furi_hal_hid_kb_release(uint16_t button) {
- for (uint8_t key_nb = 0; key_nb < HID_KB_MAX_KEYS; key_nb++) {
- if (hid_report.keyboard.btn[key_nb] == (button & 0xFF)) {
- hid_report.keyboard.btn[key_nb] = 0;
- break;
- }
- }
- hid_report.keyboard.mods &= ~(button >> 8);
- return hid_send_report(ReportIdKeyboard);
-}
-
-bool furi_hal_hid_kb_release_all() {
- for (uint8_t key_nb = 0; key_nb < HID_KB_MAX_KEYS; key_nb++) {
- hid_report.keyboard.btn[key_nb] = 0;
- }
- hid_report.keyboard.mods = 0;
- return hid_send_report(ReportIdKeyboard);
-}
-
-bool furi_hal_hid_mouse_move(int8_t dx, int8_t dy) {
- hid_report.mouse.x = dx;
- hid_report.mouse.y = dy;
- bool state = hid_send_report(ReportIdMouse);
- hid_report.mouse.x = 0;
- hid_report.mouse.y = 0;
- return state;
-}
-
-bool furi_hal_hid_mouse_press(uint8_t button) {
- hid_report.mouse.btn |= button;
- return hid_send_report(ReportIdMouse);
-}
-
-bool furi_hal_hid_mouse_release(uint8_t button) {
- hid_report.mouse.btn &= ~button;
- return hid_send_report(ReportIdMouse);
-}
-
-bool furi_hal_hid_mouse_scroll(int8_t delta) {
- hid_report.mouse.wheel = delta;
- bool state = hid_send_report(ReportIdMouse);
- hid_report.mouse.wheel = 0;
- return state;
-}
-
-bool furi_hal_hid_consumer_key_press(uint16_t button) {
- for (uint8_t key_nb = 0; key_nb < HID_CONSUMER_MAX_KEYS; key_nb++) {
- if (hid_report.consumer.btn[key_nb] == 0) {
- hid_report.consumer.btn[key_nb] = button;
- break;
- }
- }
- return hid_send_report(ReportIdConsumer);
-}
-
-bool furi_hal_hid_consumer_key_release(uint16_t button) {
- for (uint8_t key_nb = 0; key_nb < HID_CONSUMER_MAX_KEYS; key_nb++) {
- if (hid_report.consumer.btn[key_nb] == button) {
- hid_report.consumer.btn[key_nb] = 0;
- break;
- }
- }
- return hid_send_report(ReportIdConsumer);
-}
-
-UsbInterface usb_hid = {
- .init = hid_init,
- .deinit = hid_deinit,
- .wakeup = hid_on_wakeup,
- .suspend = hid_on_suspend,
-
- .dev_descr = (struct usb_device_descriptor*)&hid_device_desc,
-
- .str_manuf_descr = (void*)&dev_manuf_desc,
- .str_prod_descr = (void*)&dev_prod_desc,
- .str_serial_descr = (void*)&dev_serial_desc,
-
- .cfg_descr = (void*)&hid_cfg_desc,
-};
-
-static void hid_init(usbd_device* dev, UsbInterface* intf) {
- if (hid_semaphore == NULL)
- hid_semaphore = osSemaphoreNew(1, 1, NULL);
- usb_dev = dev;
- hid_report.keyboard.report_id = ReportIdKeyboard;
- hid_report.mouse.report_id = ReportIdMouse;
- hid_report.consumer.report_id = ReportIdConsumer;
-
- usbd_reg_config(dev, hid_ep_config);
- usbd_reg_control(dev, hid_control);
-
- usbd_connect(dev, true);
-}
-
-static void hid_deinit(usbd_device *dev) {
- usbd_reg_config(dev, NULL);
- usbd_reg_control(dev, NULL);
-}
-
-static void hid_on_wakeup(usbd_device *dev) {
- if (hid_connected == false) {
- hid_connected = true;
- if (callback != NULL)
- callback(true, cb_ctx);
- }
-}
-
-static void hid_on_suspend(usbd_device *dev) {
- if (hid_connected == true) {
- hid_connected = false;
- osSemaphoreRelease(hid_semaphore);
- if (callback != NULL)
- callback(false, cb_ctx);
- }
-}
-
-static bool hid_send_report(uint8_t report_id)
-{
- if ((hid_semaphore == NULL) || (hid_connected == false))
- return false;
-
- furi_check(osSemaphoreAcquire(hid_semaphore, osWaitForever) == osOK);
- if (hid_connected == true) {
- if (report_id == ReportIdKeyboard)
- usbd_ep_write(usb_dev, HID_EP_IN, &hid_report.keyboard, sizeof(hid_report.keyboard));
- else if (report_id == ReportIdMouse)
- usbd_ep_write(usb_dev, HID_EP_IN, &hid_report.mouse, sizeof(hid_report.mouse));
- else if (report_id == ReportIdConsumer)
- usbd_ep_write(usb_dev, HID_EP_IN, &hid_report.consumer, sizeof(hid_report.consumer));
- return true;
- }
- return false;
-}
-
-static void hid_txrx_ep_callback(usbd_device *dev, uint8_t event, uint8_t ep) {
- if (event == usbd_evt_eptx) {
- osSemaphoreRelease(hid_semaphore);
- } else {
- struct HidReportLED leds;
- usbd_ep_read(usb_dev, ep, &leds, 2);
- led_state = leds.led_state;
- }
-}
-
-/* Configure endpoints */
-static usbd_respond hid_ep_config (usbd_device *dev, uint8_t cfg) {
- switch (cfg) {
- case 0:
- /* deconfiguring device */
- usbd_ep_deconfig(dev, HID_EP_OUT);
- usbd_ep_deconfig(dev, HID_EP_IN);
- usbd_reg_endpoint(dev, HID_EP_OUT, 0);
- usbd_reg_endpoint(dev, HID_EP_IN, 0);
- return usbd_ack;
- case 1:
- /* configuring device */
- usbd_ep_config(dev, HID_EP_IN, USB_EPTYPE_INTERRUPT, HID_EP_SZ);
- usbd_ep_config(dev, HID_EP_OUT, USB_EPTYPE_INTERRUPT, HID_EP_SZ);
- usbd_reg_endpoint(dev, HID_EP_IN, hid_txrx_ep_callback);
- usbd_reg_endpoint(dev, HID_EP_OUT, hid_txrx_ep_callback);
- usbd_ep_write(dev, HID_EP_IN, 0, 0);
- return usbd_ack;
- default:
- return usbd_fail;
- }
-}
-
-/* Control requests handler */
-static usbd_respond hid_control (usbd_device *dev, usbd_ctlreq *req, usbd_rqc_callback *callback) {
- /* HID control requests */
- if (((USB_REQ_RECIPIENT | USB_REQ_TYPE) & req->bmRequestType) == (USB_REQ_INTERFACE | USB_REQ_CLASS)
- && req->wIndex == 0 ) {
- switch (req->bRequest) {
- case USB_HID_SETIDLE:
- return usbd_ack;
- case USB_HID_GETREPORT:
- dev->status.data_ptr = &hid_report;
- dev->status.data_count = sizeof(hid_report);
- return usbd_ack;
- default:
- return usbd_fail;
- }
- }
- if (((USB_REQ_RECIPIENT | USB_REQ_TYPE) & req->bmRequestType) == (USB_REQ_INTERFACE | USB_REQ_STANDARD)
- && req->wIndex == 0
- && req->bRequest == USB_STD_GET_DESCRIPTOR) {
- switch (req->wValue >> 8) {
- case USB_DTYPE_HID:
- dev->status.data_ptr = (uint8_t*)&(hid_cfg_desc.iad_0.hid_desc);
- dev->status.data_count = sizeof(hid_cfg_desc.iad_0.hid_desc);
- return usbd_ack;
- case USB_DTYPE_HID_REPORT:
- dev->status.data_ptr = (uint8_t*)hid_report_desc;
- dev->status.data_count = sizeof(hid_report_desc);
- return usbd_ack;
- default:
- return usbd_fail;
- }
- }
- return usbd_fail;
-}
diff --git a/firmware/targets/f6/furi-hal/furi-hal-usb_i.h b/firmware/targets/f6/furi-hal/furi-hal-usb_i.h
deleted file mode 100644
index a3ef8e05..00000000
--- a/firmware/targets/f6/furi-hal/furi-hal-usb_i.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#pragma once
-
-#include "usb.h"
-
-#define USB_EP0_SIZE 8
-
-/* String descriptors */
-enum UsbDevDescStr{
- UsbDevLang = 0,
- UsbDevManuf = 1,
- UsbDevProduct = 2,
- UsbDevSerial = 3,
-};
diff --git a/firmware/targets/f7/furi-hal/furi-hal.c b/firmware/targets/f6/furi_hal/furi_hal.c
index 3f41684f..da529893 100644
--- a/firmware/targets/f7/furi-hal/furi-hal.c
+++ b/firmware/targets/f6/furi_hal/furi_hal.c
@@ -1,4 +1,4 @@
-#include <furi-hal.h>
+#include <furi_hal.h>
#include <comp.h>
#include <tim.h>
@@ -64,14 +64,11 @@ void furi_hal_init() {
// Partial null pointer dereference protection
LL_MPU_Disable();
LL_MPU_ConfigRegion(
- LL_MPU_REGION_NUMBER0, 0x00, 0x0,
- LL_MPU_REGION_SIZE_1MB
- | LL_MPU_REGION_PRIV_RO_URO
- | LL_MPU_ACCESS_BUFFERABLE
- | LL_MPU_ACCESS_CACHEABLE
- | LL_MPU_ACCESS_SHAREABLE
- | LL_MPU_TEX_LEVEL1
- | LL_MPU_INSTRUCTION_ACCESS_ENABLE
- );
+ LL_MPU_REGION_NUMBER0,
+ 0x00,
+ 0x0,
+ LL_MPU_REGION_SIZE_1MB | LL_MPU_REGION_PRIV_RO_URO | LL_MPU_ACCESS_BUFFERABLE |
+ LL_MPU_ACCESS_CACHEABLE | LL_MPU_ACCESS_SHAREABLE | LL_MPU_TEX_LEVEL1 |
+ LL_MPU_INSTRUCTION_ACCESS_ENABLE);
LL_MPU_Enable(LL_MPU_CTRL_PRIVILEGED_DEFAULT);
}
diff --git a/firmware/targets/f7/furi-hal/furi-hal-bootloader.c b/firmware/targets/f6/furi_hal/furi_hal_bootloader.c
index eca6f947..3b549955 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-bootloader.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_bootloader.c
@@ -1,5 +1,5 @@
-#include <furi-hal-bootloader.h>
-#include <furi-hal-rtc.h>
+#include <furi_hal_bootloader.h>
+#include <furi_hal_rtc.h>
#include <furi.h>
#define TAG "FuriHalBoot"
@@ -17,9 +17,9 @@ void furi_hal_bootloader_init() {
}
void furi_hal_bootloader_set_mode(FuriHalBootloaderMode mode) {
- if (mode == FuriHalBootloaderModeNormal) {
+ if(mode == FuriHalBootloaderModeNormal) {
furi_hal_rtc_set_register(FuriHalRtcRegisterBoot, BOOT_REQUEST_CLEAN);
- } else if (mode == FuriHalBootloaderModeDFU) {
+ } else if(mode == FuriHalBootloaderModeDFU) {
furi_hal_rtc_set_register(FuriHalRtcRegisterBoot, BOOT_REQUEST_DFU);
}
}
diff --git a/firmware/targets/f6/furi-hal/furi-hal-bt.c b/firmware/targets/f6/furi_hal/furi_hal_bt.c
index 1435a165..13c747b4 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-bt.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_bt.c
@@ -1,19 +1,20 @@
-#include <furi-hal-bt.h>
+#include <furi_hal_bt.h>
#include <ble.h>
#include <stm32wbxx.h>
#include <shci.h>
#include <cmsis_os2.h>
-#include <furi-hal-version.h>
-#include <furi-hal-bt-hid.h>
-#include <furi-hal-bt-serial.h>
+#include <furi_hal_version.h>
+#include <furi_hal_bt_hid.h>
+#include <furi_hal_bt_serial.h>
#include "battery_service.h"
#include <furi.h>
#define TAG "FuriHalBt"
-#define FURI_HAL_BT_DEFAULT_MAC_ADDR {0x6c, 0x7a, 0xd8, 0xac, 0x57, 0x72}
+#define FURI_HAL_BT_DEFAULT_MAC_ADDR \
+ { 0x6c, 0x7a, 0xd8, 0xac, 0x57, 0x72 }
osMutexId_t furi_hal_bt_core2_mtx = NULL;
static FuriHalBtStack furi_hal_bt_stack = FuriHalBtStackUnknown;
@@ -30,28 +31,32 @@ typedef struct {
} FuriHalBtProfileConfig;
FuriHalBtProfileConfig profile_config[FuriHalBtProfileNumber] = {
- [FuriHalBtProfileSerial] = {
- .start = furi_hal_bt_serial_start,
- .stop = furi_hal_bt_serial_stop,
- .config = {
- .adv_service_uuid = 0x3080,
- .appearance_char = 0x8600,
- .bonding_mode = true,
- .pairing_method = GapPairingPinCodeShow,
- .mac_address = FURI_HAL_BT_DEFAULT_MAC_ADDR,
+ [FuriHalBtProfileSerial] =
+ {
+ .start = furi_hal_bt_serial_start,
+ .stop = furi_hal_bt_serial_stop,
+ .config =
+ {
+ .adv_service_uuid = 0x3080,
+ .appearance_char = 0x8600,
+ .bonding_mode = true,
+ .pairing_method = GapPairingPinCodeShow,
+ .mac_address = FURI_HAL_BT_DEFAULT_MAC_ADDR,
+ },
},
- },
- [FuriHalBtProfileHidKeyboard] = {
- .start = furi_hal_bt_hid_start,
- .stop = furi_hal_bt_hid_stop,
- .config = {
- .adv_service_uuid = HUMAN_INTERFACE_DEVICE_SERVICE_UUID,
- .appearance_char = GAP_APPEARANCE_KEYBOARD,
- .bonding_mode = true,
- .pairing_method = GapPairingPinCodeVerifyYesNo,
- .mac_address = FURI_HAL_BT_DEFAULT_MAC_ADDR,
+ [FuriHalBtProfileHidKeyboard] =
+ {
+ .start = furi_hal_bt_hid_start,
+ .stop = furi_hal_bt_hid_stop,
+ .config =
+ {
+ .adv_service_uuid = HUMAN_INTERFACE_DEVICE_SERVICE_UUID,
+ .appearance_char = GAP_APPEARANCE_KEYBOARD,
+ .bonding_mode = true,
+ .pairing_method = GapPairingPinCodeVerifyYesNo,
+ .mac_address = FURI_HAL_BT_DEFAULT_MAC_ADDR,
+ },
},
- },
};
FuriHalBtProfileConfig* current_profile = NULL;
@@ -90,7 +95,7 @@ static bool furi_hal_bt_radio_stack_is_supported(WirelessFwInfo_t* info) {
info->VersionMinor >= FURI_HAL_BT_STACK_VERSION_MINOR) {
furi_hal_bt_stack = FuriHalBtStackLight;
supported = true;
- }
+ }
} else {
furi_hal_bt_stack = FuriHalBtStackUnknown;
}
@@ -122,7 +127,7 @@ bool furi_hal_bt_start_radio_stack() {
FURI_LOG_E(TAG, "Unsupported radio stack");
LL_C2_PWR_SetPowerMode(LL_PWR_MODE_SHUTDOWN);
ble_glue_thread_stop();
- break;
+ break;
}
// Starting radio stack
if(!ble_glue_start()) {
@@ -161,14 +166,12 @@ bool furi_hal_bt_start_app(FuriHalBtProfile profile, GapEventCallback event_cb,
memcpy(
profile_config[profile].config.mac_address,
furi_hal_version_get_ble_mac(),
- sizeof(profile_config[profile].config.mac_address)
- );
+ sizeof(profile_config[profile].config.mac_address));
// Set advertise name
strlcpy(
profile_config[profile].config.adv_name,
furi_hal_version_get_ble_local_device_name_ptr(),
- FURI_HAL_VERSION_DEVICE_NAME_LENGTH
- );
+ FURI_HAL_VERSION_DEVICE_NAME_LENGTH);
// Configure GAP
GapConfig* config = &profile_config[profile].config;
if(profile == FuriHalBtProfileSerial) {
@@ -253,7 +256,9 @@ void furi_hal_bt_get_key_storage_buff(uint8_t** key_buff_addr, uint16_t* key_buf
ble_app_get_key_storage_buff(key_buff_addr, key_buff_size);
}
-void furi_hal_bt_set_key_storage_change_callback(BleGlueKeyStorageChangedCallback callback, void* context) {
+void furi_hal_bt_set_key_storage_change_callback(
+ BleGlueKeyStorageChangedCallback callback,
+ void* context) {
furi_assert(callback);
ble_glue_set_key_storage_changed_callback(callback, context);
}
@@ -269,7 +274,7 @@ void furi_hal_bt_nvm_sram_sem_release() {
}
void furi_hal_bt_dump_state(string_t buffer) {
- if (furi_hal_bt_is_alive()) {
+ if(furi_hal_bt_is_alive()) {
uint8_t HCI_Version;
uint16_t HCI_Revision;
uint8_t LMP_PAL_Version;
@@ -277,13 +282,17 @@ void furi_hal_bt_dump_state(string_t buffer) {
uint16_t LMP_PAL_Subversion;
tBleStatus ret = hci_read_local_version_information(
- &HCI_Version, &HCI_Revision, &LMP_PAL_Version, &Manufacturer_Name, &LMP_PAL_Subversion
- );
+ &HCI_Version, &HCI_Revision, &LMP_PAL_Version, &Manufacturer_Name, &LMP_PAL_Subversion);
- string_cat_printf(buffer,
+ string_cat_printf(
+ buffer,
"Ret: %d, HCI_Version: %d, HCI_Revision: %d, LMP_PAL_Version: %d, Manufacturer_Name: %d, LMP_PAL_Subversion: %d",
- ret, HCI_Version, HCI_Revision, LMP_PAL_Version, Manufacturer_Name, LMP_PAL_Subversion
- );
+ ret,
+ HCI_Version,
+ HCI_Revision,
+ LMP_PAL_Version,
+ Manufacturer_Name,
+ LMP_PAL_Subversion);
} else {
string_cat_printf(buffer, "BLE not ready");
}
@@ -324,7 +333,7 @@ float furi_hal_bt_get_rssi() {
float val;
uint8_t rssi_raw[3];
- if (aci_hal_read_raw_rssi(rssi_raw) != BLE_STATUS_SUCCESS) {
+ if(aci_hal_read_raw_rssi(rssi_raw) != BLE_STATUS_SUCCESS) {
return 0.0f;
}
@@ -337,7 +346,7 @@ float furi_hal_bt_get_rssi() {
val = agc * 6.0f - 127.0f;
while(rssi > 30) {
val += 6.0;
- rssi >>=1;
+ rssi >>= 1;
}
val += (417 * rssi + 18080) >> 10;
}
diff --git a/firmware/targets/f7/furi-hal/furi-hal-bt-hid.c b/firmware/targets/f6/furi_hal/furi_hal_bt_hid.c
index 890c447c..6b7128d8 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-bt-hid.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_bt_hid.c
@@ -1,4 +1,4 @@
-#include "furi-hal-bt-hid.h"
+#include "furi_hal_bt_hid.h"
#include "dev_info_service.h"
#include "battery_service.h"
#include "hid_service.h"
@@ -26,50 +26,88 @@ typedef struct {
// TODO make composite HID device
static uint8_t furi_hal_bt_hid_report_map_data[] = {
- 0x05, 0x01, // Usage Page (Generic Desktop)
- 0x09, 0x06, // Usage (Keyboard)
- 0xA1, 0x01, // Collection (Application)
+ 0x05,
+ 0x01, // Usage Page (Generic Desktop)
+ 0x09,
+ 0x06, // Usage (Keyboard)
+ 0xA1,
+ 0x01, // Collection (Application)
// 0x85, 0x01, // Report ID (1)
- 0x05, 0x07, // Usage Page (Key Codes)
- 0x19, 0xe0, // Usage Minimum (224)
- 0x29, 0xe7, // Usage Maximum (231)
- 0x15, 0x00, // Logical Minimum (0)
- 0x25, 0x01, // Logical Maximum (1)
- 0x75, 0x01, // Report Size (1)
- 0x95, 0x08, // Report Count (8)
- 0x81, 0x02, // Input (Data, Variable, Absolute)
-
- 0x95, 0x01, // Report Count (1)
- 0x75, 0x08, // Report Size (8)
- 0x81, 0x01, // Input (Constant) reserved byte(1)
-
- 0x95, 0x05, // Report Count (5)
- 0x75, 0x01, // Report Size (1)
- 0x05, 0x08, // Usage Page (Page# for LEDs)
- 0x19, 0x01, // Usage Minimum (1)
- 0x29, 0x05, // Usage Maximum (5)
- 0x91, 0x02, // Output (Data, Variable, Absolute), Led report
- 0x95, 0x01, // Report Count (1)
- 0x75, 0x03, // Report Size (3)
- 0x91, 0x01, // Output (Data, Variable, Absolute), Led report padding
-
- 0x95, 0x06, // Report Count (6)
- 0x75, 0x08, // Report Size (8)
- 0x15, 0x00, // Logical Minimum (0)
- 0x25, 0x65, // Logical Maximum (101)
- 0x05, 0x07, // Usage Page (Key codes)
- 0x19, 0x00, // Usage Minimum (0)
- 0x29, 0x65, // Usage Maximum (101)
- 0x81, 0x00, // Input (Data, Array) Key array(6 bytes)
-
- 0x09, 0x05, // Usage (Vendor Defined)
- 0x15, 0x00, // Logical Minimum (0)
- 0x26, 0xFF, 0x00, // Logical Maximum (255)
- 0x75, 0x08, // Report Size (8 bit)
- 0x95, 0x02, // Report Count (2)
- 0xB1, 0x02, // Feature (Data, Variable, Absolute)
-
- 0xC0, // End Collection (Application)
+ 0x05,
+ 0x07, // Usage Page (Key Codes)
+ 0x19,
+ 0xe0, // Usage Minimum (224)
+ 0x29,
+ 0xe7, // Usage Maximum (231)
+ 0x15,
+ 0x00, // Logical Minimum (0)
+ 0x25,
+ 0x01, // Logical Maximum (1)
+ 0x75,
+ 0x01, // Report Size (1)
+ 0x95,
+ 0x08, // Report Count (8)
+ 0x81,
+ 0x02, // Input (Data, Variable, Absolute)
+
+ 0x95,
+ 0x01, // Report Count (1)
+ 0x75,
+ 0x08, // Report Size (8)
+ 0x81,
+ 0x01, // Input (Constant) reserved byte(1)
+
+ 0x95,
+ 0x05, // Report Count (5)
+ 0x75,
+ 0x01, // Report Size (1)
+ 0x05,
+ 0x08, // Usage Page (Page# for LEDs)
+ 0x19,
+ 0x01, // Usage Minimum (1)
+ 0x29,
+ 0x05, // Usage Maximum (5)
+ 0x91,
+ 0x02, // Output (Data, Variable, Absolute), Led report
+ 0x95,
+ 0x01, // Report Count (1)
+ 0x75,
+ 0x03, // Report Size (3)
+ 0x91,
+ 0x01, // Output (Data, Variable, Absolute), Led report padding
+
+ 0x95,
+ 0x06, // Report Count (6)
+ 0x75,
+ 0x08, // Report Size (8)
+ 0x15,
+ 0x00, // Logical Minimum (0)
+ 0x25,
+ 0x65, // Logical Maximum (101)
+ 0x05,
+ 0x07, // Usage Page (Key codes)
+ 0x19,
+ 0x00, // Usage Minimum (0)
+ 0x29,
+ 0x65, // Usage Maximum (101)
+ 0x81,
+ 0x00, // Input (Data, Array) Key array(6 bytes)
+
+ 0x09,
+ 0x05, // Usage (Vendor Defined)
+ 0x15,
+ 0x00, // Logical Minimum (0)
+ 0x26,
+ 0xFF,
+ 0x00, // Logical Maximum (255)
+ 0x75,
+ 0x08, // Report Size (8 bit)
+ 0x95,
+ 0x02, // Report Count (2)
+ 0xB1,
+ 0x02, // Feature (Data, Variable, Absolute)
+
+ 0xC0, // End Collection (Application)
// 0x05, 0x0C, // Usage Page (Consumer)
// 0x09, 0x01, // Usage (Consumer Control)
@@ -112,13 +150,15 @@ void furi_hal_bt_hid_start() {
kb_report = furi_alloc(sizeof(FuriHalBtHidKbReport));
media_report = furi_alloc(sizeof(FuriHalBtHidMediaReport));
// Configure Report Map characteristic
- hid_svc_update_report_map(furi_hal_bt_hid_report_map_data, sizeof(furi_hal_bt_hid_report_map_data));
+ hid_svc_update_report_map(
+ furi_hal_bt_hid_report_map_data, sizeof(furi_hal_bt_hid_report_map_data));
// Configure HID Information characteristic
uint8_t hid_info_val[4] = {
FURI_HAL_BT_INFO_BASE_USB_SPECIFICATION & 0x00ff,
(FURI_HAL_BT_INFO_BASE_USB_SPECIFICATION & 0xff00) >> 8,
FURI_HAL_BT_INFO_COUNTRY_CODE,
- FURI_HAL_BT_HID_INFO_FLAG_REMOTE_WAKE_MSK | FURI_HAL_BT_HID_INFO_FLAG_NORMALLY_CONNECTABLE_MSK,
+ FURI_HAL_BT_HID_INFO_FLAG_REMOTE_WAKE_MSK |
+ FURI_HAL_BT_HID_INFO_FLAG_NORMALLY_CONNECTABLE_MSK,
};
hid_svc_update_info(hid_info_val, sizeof(hid_info_val));
}
@@ -144,8 +184,8 @@ void furi_hal_bt_hid_stop() {
bool furi_hal_bt_hid_kb_press(uint16_t button) {
furi_assert(kb_report);
// kb_report->report_id = 0x01;
- for (uint8_t i = 0; i < FURI_HAL_BT_HID_KB_KEYS_MAX; i++) {
- if (kb_report->key[i] == 0) {
+ for(uint8_t i = 0; i < FURI_HAL_BT_HID_KB_KEYS_MAX; i++) {
+ if(kb_report->key[i] == 0) {
kb_report->key[i] = button & 0xFF;
break;
}
@@ -157,8 +197,8 @@ bool furi_hal_bt_hid_kb_press(uint16_t button) {
bool furi_hal_bt_hid_kb_release(uint16_t button) {
furi_assert(kb_report);
// kb_report->report_id = 0x01;
- for (uint8_t i = 0; i < FURI_HAL_BT_HID_KB_KEYS_MAX; i++) {
- if (kb_report->key[i] == (button & 0xFF)) {
+ for(uint8_t i = 0; i < FURI_HAL_BT_HID_KB_KEYS_MAX; i++) {
+ if(kb_report->key[i] == (button & 0xFF)) {
kb_report->key[i] = 0;
break;
}
diff --git a/firmware/targets/f6/furi-hal/furi-hal-bt-serial.c b/firmware/targets/f6/furi_hal/furi_hal_bt_serial.c
index d5ea869b..9bdad5bf 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-bt-serial.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_bt_serial.c
@@ -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"
@@ -20,7 +20,10 @@ void furi_hal_bt_serial_start() {
}
}
-void furi_hal_bt_serial_set_event_callback(uint16_t buff_size, FuriHalBtSerialCallback callback, void* context) {
+void furi_hal_bt_serial_set_event_callback(
+ uint16_t buff_size,
+ FuriHalBtSerialCallback callback,
+ void* context) {
serial_svc_set_callbacks(buff_size, callback, context);
}
diff --git a/firmware/targets/f7/furi-hal/furi-hal-clock.c b/firmware/targets/f6/furi_hal/furi_hal_clock.c
index ddbeaa0b..209a2181 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-clock.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_clock.c
@@ -1,4 +1,4 @@
-#include <furi-hal-clock.h>
+#include <furi_hal_clock.h>
#include <furi.h>
#include <stm32wbxx_ll_pwr.h>
@@ -13,13 +13,15 @@
void furi_hal_clock_init() {
/* Prepare Flash memory for 64mHz system clock */
LL_FLASH_SetLatency(LL_FLASH_LATENCY_3);
- while(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_3);
+ while(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_3)
+ ;
/* HSE and HSI configuration and activation */
LL_RCC_HSE_SetCapacitorTuning(0x26);
LL_RCC_HSE_Enable();
LL_RCC_HSI_Enable();
- while(!HS_CLOCK_IS_READY());
+ while(!HS_CLOCK_IS_READY())
+ ;
LL_RCC_HSE_EnableCSS();
/* LSE and LSI1 configuration and activation */
@@ -27,8 +29,10 @@ void furi_hal_clock_init() {
LL_RCC_LSE_SetDriveCapability(LL_RCC_LSEDRIVE_HIGH);
LL_RCC_LSE_Enable();
LL_RCC_LSI1_Enable();
- while(!LS_CLOCK_IS_READY());
- LL_EXTI_EnableIT_0_31(LL_EXTI_LINE_18); /* Why? Because that's why. See RM0434, Table 61. CPU1 vector table. */
+ while(!LS_CLOCK_IS_READY())
+ ;
+ LL_EXTI_EnableIT_0_31(
+ LL_EXTI_LINE_18); /* Why? Because that's why. See RM0434, Table 61. CPU1 vector table. */
LL_EXTI_EnableRisingTrig_0_31(LL_EXTI_LINE_18);
LL_RCC_EnableIT_LSECSS();
LL_RCC_LSE_EnableCSS();
@@ -37,14 +41,18 @@ void furi_hal_clock_init() {
LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 8, LL_RCC_PLLR_DIV_2);
LL_RCC_PLL_Enable();
LL_RCC_PLL_EnableDomain_SYS();
- while(LL_RCC_PLL_IsReady() != 1);
+ while(LL_RCC_PLL_IsReady() != 1)
+ ;
- LL_RCC_PLLSAI1_ConfigDomain_48M(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 6, LL_RCC_PLLSAI1Q_DIV_2);
- LL_RCC_PLLSAI1_ConfigDomain_ADC(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 6, LL_RCC_PLLSAI1R_DIV_2);
+ LL_RCC_PLLSAI1_ConfigDomain_48M(
+ LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 6, LL_RCC_PLLSAI1Q_DIV_2);
+ LL_RCC_PLLSAI1_ConfigDomain_ADC(
+ LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 6, LL_RCC_PLLSAI1R_DIV_2);
LL_RCC_PLLSAI1_Enable();
LL_RCC_PLLSAI1_EnableDomain_48M();
LL_RCC_PLLSAI1_EnableDomain_ADC();
- while(LL_RCC_PLLSAI1_IsReady() != 1);
+ while(LL_RCC_PLLSAI1_IsReady() != 1)
+ ;
/* Sysclk activation on the main PLL */
/* Set CPU1 prescaler*/
@@ -54,7 +62,8 @@ void furi_hal_clock_init() {
LL_C2_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_2);
LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);
- while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL);
+ while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL)
+ ;
/* Set AHB SHARED prescaler*/
LL_RCC_SetAHB4Prescaler(LL_RCC_SYSCLK_DIV_1);
@@ -67,13 +76,14 @@ void furi_hal_clock_init() {
/* Disable MSI */
LL_RCC_MSI_Disable();
- while(LL_RCC_MSI_IsReady() != 0);
+ while(LL_RCC_MSI_IsReady() != 0)
+ ;
/* Update CMSIS variable (which can be updated also through SystemCoreClockUpdate function) */
LL_SetSystemCoreClock(64000000);
/* Update the time base */
- if (HAL_InitTick (TICK_INT_PRIORITY) != HAL_OK) {
+ if(HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK) {
Error_Handler();
}
@@ -120,25 +130,30 @@ void furi_hal_clock_init() {
}
void furi_hal_clock_switch_to_hsi() {
- LL_RCC_HSI_Enable( );
+ LL_RCC_HSI_Enable();
- while(!LL_RCC_HSI_IsReady());
+ while(!LL_RCC_HSI_IsReady())
+ ;
LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_HSI);
LL_RCC_SetSMPSClockSource(LL_RCC_SMPS_CLKSOURCE_HSI);
- while (LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_HSI);
+ while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_HSI)
+ ;
}
void furi_hal_clock_switch_to_pll() {
LL_RCC_HSE_Enable();
LL_RCC_PLL_Enable();
- while(!LL_RCC_HSE_IsReady());
- while(!LL_RCC_PLL_IsReady());
+ while(!LL_RCC_HSE_IsReady())
+ ;
+ while(!LL_RCC_PLL_IsReady())
+ ;
LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);
LL_RCC_SetSMPSClockSource(LL_RCC_SMPS_CLKSOURCE_HSE);
- while (LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL);
+ while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL)
+ ;
}
diff --git a/firmware/targets/f6/furi-hal/furi-hal-clock.h b/firmware/targets/f6/furi_hal/furi_hal_clock.h
index 3ec59205..3ec59205 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-clock.h
+++ b/firmware/targets/f6/furi_hal/furi_hal_clock.h
diff --git a/firmware/targets/f7/furi-hal/furi-hal-compress.c b/firmware/targets/f6/furi_hal/furi_hal_compress.c
index 369ab3a0..d0efb143 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-compress.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_compress.c
@@ -1,4 +1,4 @@
-#include <furi-hal-compress.h>
+#include <furi_hal_compress.h>
#include <furi.h>
#include <lib/heatshrink/heatshrink_encoder.h>
@@ -6,7 +6,7 @@
#define TAG "FuriHalCompress"
-#define FURI_HAL_COMPRESS_ICON_ENCODED_BUFF_SIZE (2*512)
+#define FURI_HAL_COMPRESS_ICON_ENCODED_BUFF_SIZE (2 * 512)
#define FURI_HAL_COMPRESS_ICON_DECODED_BUFF_SIZE (1024)
#define FURI_HAL_COMPRESS_EXP_BUFF_SIZE (1 << FURI_HAL_COMPRESS_EXP_BUFF_SIZE_LOG)
@@ -19,14 +19,15 @@ typedef struct {
typedef struct {
heatshrink_decoder* decoder;
- uint8_t compress_buff[FURI_HAL_COMPRESS_EXP_BUFF_SIZE + FURI_HAL_COMPRESS_ICON_ENCODED_BUFF_SIZE];
+ uint8_t
+ compress_buff[FURI_HAL_COMPRESS_EXP_BUFF_SIZE + FURI_HAL_COMPRESS_ICON_ENCODED_BUFF_SIZE];
uint8_t decoded_buff[FURI_HAL_COMPRESS_ICON_DECODED_BUFF_SIZE];
} FuriHalCompressIcon;
struct FuriHalCompress {
heatshrink_encoder* encoder;
heatshrink_decoder* decoder;
- uint8_t *compress_buff;
+ uint8_t* compress_buff;
uint16_t compress_buff_size;
};
@@ -51,22 +52,26 @@ void furi_hal_compress_icon_init() {
FURI_LOG_I(TAG, "Init OK");
}
-void furi_hal_compress_icon_decode(const uint8_t* icon_data, uint8_t** decoded_buff) {
+void furi_hal_compress_icon_decode(const uint8_t* icon_data, uint8_t** decoded_buff) {
furi_assert(icon_data);
furi_assert(decoded_buff);
- FuriHalCompressHeader* header = (FuriHalCompressHeader*) icon_data;
+ FuriHalCompressHeader* header = (FuriHalCompressHeader*)icon_data;
if(header->is_compressed) {
size_t data_processed = 0;
- heatshrink_decoder_sink(icon_decoder->decoder, (uint8_t*)&icon_data[4], header->compressed_buff_size, &data_processed);
- while (1) {
+ heatshrink_decoder_sink(
+ icon_decoder->decoder,
+ (uint8_t*)&icon_data[4],
+ header->compressed_buff_size,
+ &data_processed);
+ while(1) {
HSD_poll_res res = heatshrink_decoder_poll(
icon_decoder->decoder,
icon_decoder->decoded_buff,
sizeof(icon_decoder->decoded_buff),
&data_processed);
furi_assert((res == HSDR_POLL_EMPTY) || (res == HSDR_POLL_MORE));
- if (res != HSDR_POLL_MORE) {
+ if(res != HSDR_POLL_MORE) {
break;
}
}
@@ -81,8 +86,15 @@ void furi_hal_compress_icon_decode(const uint8_t* icon_data, uint8_t** decoded_b
FuriHalCompress* furi_hal_compress_alloc(uint16_t compress_buff_size) {
FuriHalCompress* compress = furi_alloc(sizeof(FuriHalCompress));
compress->compress_buff = furi_alloc(compress_buff_size + FURI_HAL_COMPRESS_EXP_BUFF_SIZE);
- compress->encoder = heatshrink_encoder_alloc(compress->compress_buff, FURI_HAL_COMPRESS_EXP_BUFF_SIZE_LOG, FURI_HAL_COMPRESS_LOOKAHEAD_BUFF_SIZE_LOG);
- compress->decoder = heatshrink_decoder_alloc(compress->compress_buff, compress_buff_size, FURI_HAL_COMPRESS_EXP_BUFF_SIZE_LOG, FURI_HAL_COMPRESS_LOOKAHEAD_BUFF_SIZE_LOG);
+ compress->encoder = heatshrink_encoder_alloc(
+ compress->compress_buff,
+ FURI_HAL_COMPRESS_EXP_BUFF_SIZE_LOG,
+ FURI_HAL_COMPRESS_LOOKAHEAD_BUFF_SIZE_LOG);
+ compress->decoder = heatshrink_decoder_alloc(
+ compress->compress_buff,
+ compress_buff_size,
+ FURI_HAL_COMPRESS_EXP_BUFF_SIZE_LOG,
+ FURI_HAL_COMPRESS_LOOKAHEAD_BUFF_SIZE_LOG);
return compress;
}
@@ -96,7 +108,13 @@ void furi_hal_compress_free(FuriHalCompress* compress) {
free(compress);
}
-bool furi_hal_compress_encode(FuriHalCompress* compress, uint8_t* data_in, size_t data_in_size, uint8_t* data_out, size_t data_out_size, size_t* data_res_size) {
+bool furi_hal_compress_encode(
+ FuriHalCompress* compress,
+ uint8_t* data_in,
+ size_t data_in_size,
+ uint8_t* data_out,
+ size_t data_out_size,
+ size_t* data_res_size) {
furi_assert(compress);
furi_assert(data_in);
furi_assert(data_in_size);
@@ -112,14 +130,19 @@ bool furi_hal_compress_encode(FuriHalCompress* compress, uint8_t* data_in, size_
// Sink data to encoding buffer
while((sunk < data_in_size) && !encode_failed) {
- sink_res = heatshrink_encoder_sink(compress->encoder, &data_in[sunk], data_in_size - sunk, &sink_size);
+ sink_res = heatshrink_encoder_sink(
+ compress->encoder, &data_in[sunk], data_in_size - sunk, &sink_size);
if(sink_res != HSER_SINK_OK) {
encode_failed = true;
break;
}
sunk += sink_size;
do {
- poll_res = heatshrink_encoder_poll(compress->encoder, &data_out[res_buff_size], data_out_size - res_buff_size, &poll_size);
+ poll_res = heatshrink_encoder_poll(
+ compress->encoder,
+ &data_out[res_buff_size],
+ data_out_size - res_buff_size,
+ &poll_size);
if(poll_res < 0) {
encode_failed = true;
break;
@@ -134,7 +157,11 @@ bool furi_hal_compress_encode(FuriHalCompress* compress, uint8_t* data_in, size_
encode_failed = true;
} else {
do {
- poll_res = heatshrink_encoder_poll(compress->encoder, &data_out[res_buff_size], data_out_size - 4 - res_buff_size, &poll_size);
+ poll_res = heatshrink_encoder_poll(
+ compress->encoder,
+ &data_out[res_buff_size],
+ data_out_size - 4 - res_buff_size,
+ &poll_size);
if(poll_res < 0) {
encode_failed = true;
break;
@@ -147,10 +174,11 @@ bool furi_hal_compress_encode(FuriHalCompress* compress, uint8_t* data_in, size_
bool result = true;
// Write encoded data to output buffer if compression is efficient. Else - write header and original data
if(!encode_failed && (res_buff_size < data_in_size + 1)) {
- FuriHalCompressHeader header = {.is_compressed = 0x01, .reserved = 0x00, .compressed_buff_size = res_buff_size};
+ FuriHalCompressHeader header = {
+ .is_compressed = 0x01, .reserved = 0x00, .compressed_buff_size = res_buff_size};
memcpy(data_out, &header, sizeof(header));
*data_res_size = res_buff_size;
- } else if (data_out_size > data_in_size) {
+ } else if(data_out_size > data_in_size) {
data_out[0] = 0x00;
memcpy(&data_out[1], data_in, data_in_size);
*data_res_size = data_in_size + 1;
@@ -163,7 +191,13 @@ bool furi_hal_compress_encode(FuriHalCompress* compress, uint8_t* data_in, size_
return result;
}
-bool furi_hal_compress_decode(FuriHalCompress* compress, uint8_t* data_in, size_t data_in_size, uint8_t* data_out, size_t data_out_size, size_t* data_res_size) {
+bool furi_hal_compress_decode(
+ FuriHalCompress* compress,
+ uint8_t* data_in,
+ size_t data_in_size,
+ uint8_t* data_out,
+ size_t data_out_size,
+ size_t* data_res_size) {
furi_assert(compress);
furi_assert(data_in);
furi_assert(data_out);
@@ -178,20 +212,22 @@ bool furi_hal_compress_decode(FuriHalCompress* compress, uint8_t* data_in, size_
size_t res_buff_size = 0;
size_t poll_size = 0;
- FuriHalCompressHeader* header = (FuriHalCompressHeader*) data_in;
+ FuriHalCompressHeader* header = (FuriHalCompressHeader*)data_in;
if(header->is_compressed) {
// Sink data to decoding buffer
size_t compressed_size = header->compressed_buff_size;
size_t sunk = sizeof(FuriHalCompressHeader);
while(sunk < compressed_size && !decode_failed) {
- sink_res = heatshrink_decoder_sink(compress->decoder, &data_in[sunk], compressed_size - sunk, &sink_size);
+ sink_res = heatshrink_decoder_sink(
+ compress->decoder, &data_in[sunk], compressed_size - sunk, &sink_size);
if(sink_res < 0) {
decode_failed = true;
break;
}
sunk += sink_size;
do {
- poll_res = heatshrink_decoder_poll(compress->decoder, &data_out[res_buff_size], data_out_size, &poll_size);
+ poll_res = heatshrink_decoder_poll(
+ compress->decoder, &data_out[res_buff_size], data_out_size, &poll_size);
if(poll_res < 0) {
decode_failed = true;
break;
@@ -206,7 +242,8 @@ bool furi_hal_compress_decode(FuriHalCompress* compress, uint8_t* data_in, size_
decode_failed = true;
} else {
do {
- poll_res = heatshrink_decoder_poll(compress->decoder, &data_out[res_buff_size], data_out_size, &poll_size);
+ poll_res = heatshrink_decoder_poll(
+ compress->decoder, &data_out[res_buff_size], data_out_size, &poll_size);
res_buff_size += poll_size;
finish_res = heatshrink_decoder_finish(compress->decoder);
} while(finish_res != HSDR_FINISH_DONE);
@@ -222,6 +259,6 @@ bool furi_hal_compress_decode(FuriHalCompress* compress, uint8_t* data_in, size_
result = false;
}
furi_hal_compress_reset(compress);
-
+
return result;
}
diff --git a/firmware/targets/f7/furi-hal/furi-hal-console.c b/firmware/targets/f6/furi_hal/furi_hal_console.c
index c3943497..dd51716f 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-console.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_console.c
@@ -1,5 +1,5 @@
-#include <furi-hal-console.h>
-#include <furi-hal-uart.h>
+#include <furi_hal_console.h>
+#include <furi_hal_uart.h>
#include <stdbool.h>
#include <stm32wbxx_ll_gpio.h>
@@ -25,31 +25,32 @@ void furi_hal_console_init() {
void furi_hal_console_enable() {
furi_hal_uart_set_irq_cb(FuriHalUartIdUSART1, NULL, NULL);
- while (!LL_USART_IsActiveFlag_TC(USART1));
+ while(!LL_USART_IsActiveFlag_TC(USART1))
+ ;
furi_hal_uart_set_br(FuriHalUartIdUSART1, CONSOLE_BAUDRATE);
furi_hal_console_alive = true;
}
void furi_hal_console_disable() {
- while (!LL_USART_IsActiveFlag_TC(USART1));
+ while(!LL_USART_IsActiveFlag_TC(USART1))
+ ;
furi_hal_console_alive = false;
}
void furi_hal_console_tx(const uint8_t* buffer, size_t buffer_size) {
- if (!furi_hal_console_alive)
- return;
+ if(!furi_hal_console_alive) return;
FURI_CRITICAL_ENTER();
// Transmit data
furi_hal_uart_tx(FuriHalUartIdUSART1, (uint8_t*)buffer, buffer_size);
// Wait for TC flag to be raised for last char
- while (!LL_USART_IsActiveFlag_TC(USART1));
+ while(!LL_USART_IsActiveFlag_TC(USART1))
+ ;
FURI_CRITICAL_EXIT();
}
void furi_hal_console_tx_with_new_line(const uint8_t* buffer, size_t buffer_size) {
- if (!furi_hal_console_alive)
- return;
+ if(!furi_hal_console_alive) return;
FURI_CRITICAL_ENTER();
// Transmit data
@@ -57,7 +58,8 @@ void furi_hal_console_tx_with_new_line(const uint8_t* buffer, size_t buffer_size
// Transmit new line symbols
furi_hal_uart_tx(FuriHalUartIdUSART1, (uint8_t*)"\r\n", 2);
// Wait for TC flag to be raised for last char
- while (!LL_USART_IsActiveFlag_TC(USART1));
+ while(!LL_USART_IsActiveFlag_TC(USART1))
+ ;
FURI_CRITICAL_EXIT();
}
@@ -71,6 +73,6 @@ void furi_hal_console_printf(const char format[], ...) {
string_clear(string);
}
-void furi_hal_console_puts(const char *data) {
+void furi_hal_console_puts(const char* data) {
furi_hal_console_tx((const uint8_t*)data, strlen(data));
}
diff --git a/firmware/targets/f6/furi-hal/furi-hal-console.h b/firmware/targets/f6/furi_hal/furi_hal_console.h
index 637c17f6..637c17f6 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-console.h
+++ b/firmware/targets/f6/furi_hal/furi_hal_console.h
diff --git a/firmware/targets/f7/furi-hal/furi-hal-crypto.c b/firmware/targets/f6/furi_hal/furi_hal_crypto.c
index f5398421..72de7d87 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-crypto.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_crypto.c
@@ -1,6 +1,6 @@
-#include <furi-hal-crypto.h>
-#include <furi-hal-bt.h>
-#include <furi-hal-random.h>
+#include <furi_hal_crypto.h>
+#include <furi_hal_bt.h>
+#include <furi_hal_random.h>
#include <furi.h>
#include <shci.h>
@@ -58,12 +58,12 @@ static bool furi_hal_crypto_generate_unique_keys(uint8_t start_slot, uint8_t end
FuriHalCryptoKey key;
uint8_t key_data[32];
FURI_LOG_I(TAG, "Generating keys %u..%u", start_slot, end_slot);
- for (uint8_t slot = start_slot; slot <= end_slot; slot++) {
+ for(uint8_t slot = start_slot; slot <= end_slot; slot++) {
key.type = FuriHalCryptoKeyTypeSimple;
key.size = FuriHalCryptoKeySize256;
key.data = key_data;
furi_hal_random_fill_buf(key_data, 32);
- if (!furi_hal_crypto_store_add_key(&key, &slot)) {
+ if(!furi_hal_crypto_store_add_key(&key, &slot)) {
FURI_LOG_E(TAG, "Error writing key to slot %u", slot);
return false;
}
@@ -77,23 +77,22 @@ bool furi_hal_crypto_verify_key(uint8_t key_slot) {
uint8_t last_valid_slot = ENCLAVE_FACTORY_KEY_SLOTS;
uint8_t empty_iv[16];
furi_hal_crypto_verify_enclave(&keys_nb, &valid_keys_nb);
- if (key_slot <= ENCLAVE_FACTORY_KEY_SLOTS) { // It's a factory key
- if (key_slot > keys_nb)
- return false;
+ if(key_slot <= ENCLAVE_FACTORY_KEY_SLOTS) { // It's a factory key
+ if(key_slot > keys_nb) return false;
} else { // Unique key
- if (keys_nb < ENCLAVE_FACTORY_KEY_SLOTS) // Some factory keys are missing
+ if(keys_nb < ENCLAVE_FACTORY_KEY_SLOTS) // Some factory keys are missing
return false;
- for (uint8_t i = key_slot; i > ENCLAVE_FACTORY_KEY_SLOTS; i--) {
+ for(uint8_t i = key_slot; i > ENCLAVE_FACTORY_KEY_SLOTS; i--) {
if(furi_hal_crypto_store_load_key(i, empty_iv)) {
last_valid_slot = i;
furi_hal_crypto_store_unload_key(i);
break;
}
}
- if (last_valid_slot == key_slot)
+ if(last_valid_slot == key_slot)
return true;
else // Generate missing unique keys
- return furi_hal_crypto_generate_unique_keys(last_valid_slot+1, key_slot);
+ return furi_hal_crypto_generate_unique_keys(last_valid_slot + 1, key_slot);
}
return true;
}
@@ -107,15 +106,18 @@ bool furi_hal_crypto_verify_enclave(uint8_t* keys_nb, uint8_t* valid_keys_nb) {
for(size_t key_slot = 0; key_slot < ENCLAVE_FACTORY_KEY_SLOTS; key_slot++) {
if(furi_hal_crypto_store_load_key(key_slot + 1, enclave_signature_iv[key_slot])) {
keys++;
- if(furi_hal_crypto_encrypt(enclave_signature_input[key_slot], buffer, ENCLAVE_SIGNATURE_SIZE)) {
- keys_valid += memcmp(buffer, enclave_signature_expected[key_slot], ENCLAVE_SIGNATURE_SIZE) == 0;
+ if(furi_hal_crypto_encrypt(
+ enclave_signature_input[key_slot], buffer, ENCLAVE_SIGNATURE_SIZE)) {
+ keys_valid +=
+ memcmp(buffer, enclave_signature_expected[key_slot], ENCLAVE_SIGNATURE_SIZE) ==
+ 0;
}
furi_hal_crypto_store_unload_key(key_slot + 1);
}
}
*keys_nb = keys;
*valid_keys_nb = keys_valid;
- if (*valid_keys_nb == ENCLAVE_FACTORY_KEY_SLOTS)
+ if(*valid_keys_nb == ENCLAVE_FACTORY_KEY_SLOTS)
return true;
else
return false;
diff --git a/firmware/targets/f6/furi-hal/furi-hal-delay.c b/firmware/targets/f6/furi_hal/furi_hal_delay.c
index b5f3c334..60c9b1c4 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-delay.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_delay.c
@@ -1,4 +1,4 @@
-#include "furi-hal-delay.h"
+#include "furi_hal_delay.h"
#include <furi.h>
#include <cmsis_os2.h>
@@ -31,6 +31,6 @@ void delay(float milliseconds) {
furi_assert(result == osOK);
}
-uint32_t millis(void){
+uint32_t millis(void) {
return HAL_GetTick();
}
diff --git a/firmware/targets/f7/furi-hal/furi-hal-flash.c b/firmware/targets/f6/furi_hal/furi_hal_flash.c
index 8a1d2d06..9d09e9c5 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-flash.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_flash.c
@@ -1,5 +1,5 @@
-#include <furi-hal-flash.h>
-#include <furi-hal-bt.h>
+#include <furi_hal_flash.h>
+#include <furi_hal_bt.h>
#include <furi.h>
#include <ble.h>
#include <shci.h>
@@ -43,13 +43,13 @@ const void* furi_hal_flash_get_free_start_address() {
const void* furi_hal_flash_get_free_end_address() {
uint32_t sfr_reg_val = READ_REG(FLASH->SFR);
uint32_t sfsa = (READ_BIT(sfr_reg_val, FLASH_SFR_SFSA) >> FLASH_SFR_SFSA_Pos);
- return (const void *)((sfsa * FLASH_PAGE_SIZE) + FLASH_BASE);
+ return (const void*)((sfsa * FLASH_PAGE_SIZE) + FLASH_BASE);
}
size_t furi_hal_flash_get_free_page_start_address() {
size_t start = (size_t)furi_hal_flash_get_free_start_address();
size_t page_start = start - start % FURI_HAL_FLASH_PAGE_SIZE;
- if (page_start != start) {
+ if(page_start != start) {
page_start += FURI_HAL_FLASH_PAGE_SIZE;
}
return page_start;
@@ -58,7 +58,7 @@ size_t furi_hal_flash_get_free_page_start_address() {
size_t furi_hal_flash_get_free_page_count() {
size_t end = (size_t)furi_hal_flash_get_free_end_address();
size_t page_start = (size_t)furi_hal_flash_get_free_page_start_address();
- return (end-page_start) / FURI_HAL_FLASH_PAGE_SIZE;
+ return (end - page_start) / FURI_HAL_FLASH_PAGE_SIZE;
}
static void furi_hal_flash_unlock() {
@@ -86,8 +86,8 @@ static void furi_hal_flash_lock(void) {
}
static void furi_hal_flash_begin_with_core2(bool erase_flag) {
- // Take flash controller ownership
- while (HAL_HSEM_FastTake(CFG_HW_FLASH_SEMID) != HAL_OK) {
+ // Take flash controller ownership
+ while(HAL_HSEM_FastTake(CFG_HW_FLASH_SEMID) != HAL_OK) {
taskYIELD();
}
@@ -107,14 +107,14 @@ static void furi_hal_flash_begin_with_core2(bool erase_flag) {
taskENTER_CRITICAL();
// Actually we already have mutex for it, but specification is specification
- if (HAL_HSEM_IsSemTaken(CFG_HW_BLOCK_FLASH_REQ_BY_CPU1_SEMID)) {
+ if(HAL_HSEM_IsSemTaken(CFG_HW_BLOCK_FLASH_REQ_BY_CPU1_SEMID)) {
taskEXIT_CRITICAL();
continue;
}
// Take sempahopre and prevent core2 from anyting funky
if(!HAL_HSEM_IsSemTaken(CFG_HW_BLOCK_FLASH_REQ_BY_CPU2_SEMID)) {
- if (HAL_HSEM_FastTake(CFG_HW_BLOCK_FLASH_REQ_BY_CPU2_SEMID) != HAL_OK) {
+ if(HAL_HSEM_FastTake(CFG_HW_BLOCK_FLASH_REQ_BY_CPU2_SEMID) != HAL_OK) {
taskEXIT_CRITICAL();
continue;
}
@@ -131,7 +131,7 @@ static void furi_hal_flash_begin(bool erase_flag) {
// If Core2 is running use IPC locking
if(furi_hal_bt_is_alive()) {
furi_hal_flash_begin_with_core2(erase_flag);
- } else {
+ } else {
furi_hal_flash_unlock();
}
}
@@ -144,7 +144,7 @@ static void furi_hal_flash_end_with_core2(bool erase_flag) {
taskEXIT_CRITICAL();
// Doesn't make much sense, does it?
- while (__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY)) {
+ while(__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY)) {
taskYIELD();
}
@@ -162,7 +162,7 @@ static void furi_hal_flash_end(bool erase_flag) {
// If Core2 is running use IPC locking
if(furi_hal_bt_is_alive()) {
furi_hal_flash_end_with_core2(erase_flag);
- } else {
+ } else {
furi_hal_flash_lock();
}
@@ -172,7 +172,7 @@ static void furi_hal_flash_end(bool erase_flag) {
static void furi_hal_flush_cache(void) {
/* Flush instruction cache */
- if (READ_BIT(FLASH->ACR, FLASH_ACR_ICEN) == FLASH_ACR_ICEN) {
+ if(READ_BIT(FLASH->ACR, FLASH_ACR_ICEN) == FLASH_ACR_ICEN) {
/* Disable instruction cache */
__HAL_FLASH_INSTRUCTION_CACHE_DISABLE();
/* Reset instruction cache */
@@ -182,7 +182,7 @@ static void furi_hal_flush_cache(void) {
}
/* Flush data cache */
- if (READ_BIT(FLASH->ACR, FLASH_ACR_DCEN) == FLASH_ACR_DCEN) {
+ if(READ_BIT(FLASH->ACR, FLASH_ACR_DCEN) == FLASH_ACR_DCEN) {
/* Disable data cache */
__HAL_FLASH_DATA_CACHE_DISABLE();
/* Reset data cache */
@@ -198,13 +198,13 @@ HAL_StatusTypeDef furi_hal_flash_wait_last_operation(uint32_t timeout) {
// Wait for the FLASH operation to complete by polling on BUSY flag to be reset.
// Even if the FLASH operation fails, the BUSY flag will be reset and an error
- // flag will be set
+ // flag will be set
countdown = timeout;
- while (__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY)) {
+ while(__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY)) {
if(LL_SYSTICK_IsActiveCounterFlag()) {
countdown--;
}
- if (countdown == 0) {
+ if(countdown == 0) {
return HAL_TIMEOUT;
}
}
@@ -213,7 +213,7 @@ HAL_StatusTypeDef furi_hal_flash_wait_last_operation(uint32_t timeout) {
error = FLASH->SR;
/* Check FLASH End of Operation flag */
- if ((error & FLASH_FLAG_EOP) != 0U) {
+ if((error & FLASH_FLAG_EOP) != 0U) {
/* Clear FLASH End of Operation pending bit */
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP);
}
@@ -228,11 +228,11 @@ HAL_StatusTypeDef furi_hal_flash_wait_last_operation(uint32_t timeout) {
/* Wait for control register to be written */
countdown = timeout;
- while (__HAL_FLASH_GET_FLAG(FLASH_FLAG_CFGBSY)) {
+ while(__HAL_FLASH_GET_FLAG(FLASH_FLAG_CFGBSY)) {
if(LL_SYSTICK_IsActiveCounterFlag()) {
countdown--;
}
- if (countdown == 0) {
+ if(countdown == 0) {
return HAL_TIMEOUT;
}
}
@@ -250,7 +250,8 @@ bool furi_hal_flash_erase(uint8_t page) {
furi_check(furi_hal_flash_wait_last_operation(FLASH_TIMEOUT_VALUE) == HAL_OK);
/* Select page and start operation */
- MODIFY_REG(FLASH->CR, FLASH_CR_PNB, ((page << FLASH_CR_PNB_Pos) | FLASH_CR_PER | FLASH_CR_STRT));
+ MODIFY_REG(
+ FLASH->CR, FLASH_CR_PNB, ((page << FLASH_CR_PNB_Pos) | FLASH_CR_PER | FLASH_CR_STRT));
/* Wait for last operation to be completed */
furi_check(furi_hal_flash_wait_last_operation(FLASH_TIMEOUT_VALUE) == HAL_OK);
@@ -280,14 +281,14 @@ bool furi_hal_flash_write_dword(size_t address, uint64_t data) {
SET_BIT(FLASH->CR, FLASH_CR_PG);
/* Program first word */
- *(uint32_t *)address = (uint32_t)data;
+ *(uint32_t*)address = (uint32_t)data;
// Barrier to ensure programming is performed in 2 steps, in right order
- // (independently of compiler optimization behavior)
+ // (independently of compiler optimization behavior)
__ISB();
/* Program second word */
- *(uint32_t *)(address + 4U) = (uint32_t)(data >> 32U);
+ *(uint32_t*)(address + 4U) = (uint32_t)(data >> 32U);
/* Wait for last operation to be completed */
furi_check(furi_hal_flash_wait_last_operation(FLASH_TIMEOUT_VALUE) == HAL_OK);
diff --git a/firmware/targets/f6/furi-hal/furi-hal-flash.h b/firmware/targets/f6/furi_hal/furi_hal_flash.h
index 3d8031e6..37f714b8 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-flash.h
+++ b/firmware/targets/f6/furi_hal/furi_hal_flash.h
@@ -78,4 +78,3 @@ bool furi_hal_flash_erase(uint8_t page);
* @return true on success
*/
bool furi_hal_flash_write_dword(size_t address, uint64_t data);
-
diff --git a/firmware/targets/f6/furi-hal/furi-hal-gpio.c b/firmware/targets/f6/furi_hal/furi_hal_gpio.c
index 1de1657f..8c2aefe2 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-gpio.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_gpio.c
@@ -1,6 +1,6 @@
#include <furi.h>
-#include <furi-hal-gpio.h>
-#include <furi-hal-version.h>
+#include <furi_hal_gpio.h>
+#include <furi_hal_version.h>
#define GET_SYSCFG_EXTI_PORT(gpio) \
(((gpio) == (GPIOA)) ? LL_SYSCFG_EXTI_PORTA : \
diff --git a/firmware/targets/f6/furi-hal/furi-hal-gpio.h b/firmware/targets/f6/furi_hal/furi_hal_gpio.h
index a81afb39..a81afb39 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-gpio.h
+++ b/firmware/targets/f6/furi_hal/furi_hal_gpio.h
diff --git a/firmware/targets/f6/furi-hal/furi-hal-i2c.c b/firmware/targets/f6/furi_hal/furi_hal_i2c.c
index 826d98a5..a957e8b5 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-i2c.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_i2c.c
@@ -1,5 +1,5 @@
-#include <furi-hal-i2c.h>
-#include <furi-hal-version.h>
+#include <furi_hal_i2c.h>
+#include <furi_hal_version.h>
#include <stm32wbxx_ll_i2c.h>
#include <stm32wbxx_ll_gpio.h>
@@ -46,7 +46,6 @@ bool furi_hal_i2c_tx(
const uint8_t* data,
uint8_t size,
uint32_t timeout) {
-
furi_check(handle->bus->current_handle == handle);
furi_assert(timeout > 0);
@@ -98,7 +97,6 @@ bool furi_hal_i2c_rx(
uint8_t* data,
uint8_t size,
uint32_t timeout) {
-
furi_check(handle->bus->current_handle == handle);
furi_assert(timeout > 0);
@@ -152,7 +150,6 @@ bool furi_hal_i2c_trx(
uint8_t* rx_data,
uint8_t rx_size,
uint32_t timeout) {
-
if(furi_hal_i2c_tx(handle, address, tx_data, tx_size, timeout) &&
furi_hal_i2c_rx(handle, address, rx_data, rx_size, timeout)) {
return true;
diff --git a/firmware/targets/f7/furi-hal/furi-hal-i2c-config.c b/firmware/targets/f6/furi_hal/furi_hal_i2c_config.c
index 3211000c..29065f96 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-i2c-config.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_i2c_config.c
@@ -1,6 +1,6 @@
-#include "furi-hal-i2c-config.h"
-#include <furi-hal-resources.h>
-#include <furi-hal-version.h>
+#include "furi_hal_i2c_config.h"
+#include <furi_hal_resources.h>
+#include <furi_hal_version.h>
/** Timing register value is computed with the STM32CubeMX Tool,
* Standard Mode @100kHz with I2CCLK = 64 MHz,
@@ -17,7 +17,7 @@
osMutexId_t furi_hal_i2c_bus_power_mutex = NULL;
static void furi_hal_i2c_bus_power_event(FuriHalI2cBus* bus, FuriHalI2cBusEvent event) {
- if (event == FuriHalI2cBusEventInit) {
+ if(event == FuriHalI2cBusEventInit) {
furi_hal_i2c_bus_power_mutex = osMutexNew(NULL);
FURI_CRITICAL_ENTER();
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C1);
@@ -25,17 +25,17 @@ static void furi_hal_i2c_bus_power_event(FuriHalI2cBus* bus, FuriHalI2cBusEvent
LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_I2C1);
FURI_CRITICAL_EXIT();
bus->current_handle = NULL;
- } else if (event == FuriHalI2cBusEventDeinit) {
+ } else if(event == FuriHalI2cBusEventDeinit) {
osMutexDelete(furi_hal_i2c_bus_power_mutex);
- } else if (event == FuriHalI2cBusEventLock) {
+ } else if(event == FuriHalI2cBusEventLock) {
furi_check(osMutexAcquire(furi_hal_i2c_bus_power_mutex, osWaitForever) == osOK);
- } else if (event == FuriHalI2cBusEventUnlock) {
+ } else if(event == FuriHalI2cBusEventUnlock) {
furi_check(osMutexRelease(furi_hal_i2c_bus_power_mutex) == osOK);
- } else if (event == FuriHalI2cBusEventActivate) {
+ } else if(event == FuriHalI2cBusEventActivate) {
FURI_CRITICAL_ENTER();
LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_I2C1);
FURI_CRITICAL_EXIT();
- } else if (event == FuriHalI2cBusEventDeactivate) {
+ } else if(event == FuriHalI2cBusEventDeactivate) {
FURI_CRITICAL_ENTER();
LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_I2C1);
FURI_CRITICAL_EXIT();
@@ -43,20 +43,20 @@ static void furi_hal_i2c_bus_power_event(FuriHalI2cBus* bus, FuriHalI2cBusEvent
}
FuriHalI2cBus furi_hal_i2c_bus_power = {
- .i2c=I2C1,
- .callback=furi_hal_i2c_bus_power_event,
+ .i2c = I2C1,
+ .callback = furi_hal_i2c_bus_power_event,
};
osMutexId_t furi_hal_i2c_bus_external_mutex = NULL;
static void furi_hal_i2c_bus_external_event(FuriHalI2cBus* bus, FuriHalI2cBusEvent event) {
- if (event == FuriHalI2cBusEventActivate) {
+ if(event == FuriHalI2cBusEventActivate) {
FURI_CRITICAL_ENTER();
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C3);
LL_RCC_SetI2CClockSource(LL_RCC_I2C3_CLKSOURCE_PCLK1);
LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_I2C3);
FURI_CRITICAL_EXIT();
- } else if (event == FuriHalI2cBusEventDeactivate) {
+ } else if(event == FuriHalI2cBusEventDeactivate) {
FURI_CRITICAL_ENTER();
LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_I2C3);
FURI_CRITICAL_EXIT();
@@ -64,14 +64,26 @@ static void furi_hal_i2c_bus_external_event(FuriHalI2cBus* bus, FuriHalI2cBusEve
}
FuriHalI2cBus furi_hal_i2c_bus_external = {
- .i2c=I2C3,
- .callback=furi_hal_i2c_bus_external_event,
+ .i2c = I2C3,
+ .callback = furi_hal_i2c_bus_external_event,
};
-void furi_hal_i2c_bus_handle_power_event(FuriHalI2cBusHandle* handle, FuriHalI2cBusHandleEvent event) {
- if (event == FuriHalI2cBusHandleEventActivate) {
- hal_gpio_init_ex(&gpio_i2c_power_sda, GpioModeAltFunctionOpenDrain, GpioPullNo, GpioSpeedLow, GpioAltFn4I2C1);
- hal_gpio_init_ex(&gpio_i2c_power_scl, GpioModeAltFunctionOpenDrain, GpioPullNo, GpioSpeedLow, GpioAltFn4I2C1);
+void furi_hal_i2c_bus_handle_power_event(
+ FuriHalI2cBusHandle* handle,
+ FuriHalI2cBusHandleEvent event) {
+ if(event == FuriHalI2cBusHandleEventActivate) {
+ hal_gpio_init_ex(
+ &gpio_i2c_power_sda,
+ GpioModeAltFunctionOpenDrain,
+ GpioPullNo,
+ GpioSpeedLow,
+ GpioAltFn4I2C1);
+ hal_gpio_init_ex(
+ &gpio_i2c_power_scl,
+ GpioModeAltFunctionOpenDrain,
+ GpioPullNo,
+ GpioSpeedLow,
+ GpioAltFn4I2C1);
LL_I2C_InitTypeDef I2C_InitStruct = {0};
I2C_InitStruct.PeripheralMode = LL_I2C_MODE_I2C;
@@ -80,7 +92,7 @@ void furi_hal_i2c_bus_handle_power_event(FuriHalI2cBusHandle* handle, FuriHalI2c
I2C_InitStruct.OwnAddress1 = 0;
I2C_InitStruct.TypeAcknowledge = LL_I2C_ACK;
I2C_InitStruct.OwnAddrSize = LL_I2C_OWNADDRESS1_7BIT;
- if (furi_hal_version_get_hw_version() > 10) {
+ if(furi_hal_version_get_hw_version() > 10) {
I2C_InitStruct.Timing = FURI_HAL_I2C_CONFIG_POWER_I2C_TIMINGS_400;
} else {
I2C_InitStruct.Timing = FURI_HAL_I2C_CONFIG_POWER_I2C_TIMINGS_100;
@@ -92,12 +104,14 @@ void furi_hal_i2c_bus_handle_power_event(FuriHalI2cBusHandle* handle, FuriHalI2c
LL_I2C_DisableOwnAddress2(handle->bus->i2c);
LL_I2C_DisableGeneralCall(handle->bus->i2c);
LL_I2C_EnableClockStretching(handle->bus->i2c);
- } else if (event == FuriHalI2cBusHandleEventDeactivate) {
+ } else if(event == FuriHalI2cBusHandleEventDeactivate) {
LL_I2C_Disable(handle->bus->i2c);
hal_gpio_write(&gpio_i2c_power_sda, 1);
hal_gpio_write(&gpio_i2c_power_scl, 1);
- hal_gpio_init_ex(&gpio_i2c_power_sda, GpioModeAnalog, GpioPullNo, GpioSpeedLow, GpioAltFnUnused);
- hal_gpio_init_ex(&gpio_i2c_power_scl, GpioModeAnalog, GpioPullNo, GpioSpeedLow, GpioAltFnUnused);
+ hal_gpio_init_ex(
+ &gpio_i2c_power_sda, GpioModeAnalog, GpioPullNo, GpioSpeedLow, GpioAltFnUnused);
+ hal_gpio_init_ex(
+ &gpio_i2c_power_scl, GpioModeAnalog, GpioPullNo, GpioSpeedLow, GpioAltFnUnused);
}
}
@@ -106,10 +120,14 @@ FuriHalI2cBusHandle furi_hal_i2c_handle_power = {
.callback = furi_hal_i2c_bus_handle_power_event,
};
-void furi_hal_i2c_bus_handle_external_event(FuriHalI2cBusHandle* handle, FuriHalI2cBusHandleEvent event) {
- if (event == FuriHalI2cBusHandleEventActivate) {
- hal_gpio_init_ex(&gpio_ext_pc0, GpioModeAltFunctionOpenDrain, GpioPullNo, GpioSpeedLow, GpioAltFn4I2C3);
- hal_gpio_init_ex(&gpio_ext_pc1, GpioModeAltFunctionOpenDrain, GpioPullNo, GpioSpeedLow, GpioAltFn4I2C3);
+void furi_hal_i2c_bus_handle_external_event(
+ FuriHalI2cBusHandle* handle,
+ FuriHalI2cBusHandleEvent event) {
+ if(event == FuriHalI2cBusHandleEventActivate) {
+ hal_gpio_init_ex(
+ &gpio_ext_pc0, GpioModeAltFunctionOpenDrain, GpioPullNo, GpioSpeedLow, GpioAltFn4I2C3);
+ hal_gpio_init_ex(
+ &gpio_ext_pc1, GpioModeAltFunctionOpenDrain, GpioPullNo, GpioSpeedLow, GpioAltFn4I2C3);
LL_I2C_InitTypeDef I2C_InitStruct = {0};
I2C_InitStruct.PeripheralMode = LL_I2C_MODE_I2C;
@@ -126,7 +144,7 @@ void furi_hal_i2c_bus_handle_external_event(FuriHalI2cBusHandle* handle, FuriHal
LL_I2C_DisableOwnAddress2(handle->bus->i2c);
LL_I2C_DisableGeneralCall(handle->bus->i2c);
LL_I2C_EnableClockStretching(handle->bus->i2c);
- } else if (event == FuriHalI2cBusHandleEventDeactivate) {
+ } else if(event == FuriHalI2cBusHandleEventDeactivate) {
LL_I2C_Disable(handle->bus->i2c);
hal_gpio_write(&gpio_ext_pc0, 1);
hal_gpio_write(&gpio_ext_pc1, 1);
diff --git a/firmware/targets/f6/furi-hal/furi-hal-i2c-config.h b/firmware/targets/f6/furi_hal/furi_hal_i2c_config.h
index 2094dca3..03c0f1ca 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-i2c-config.h
+++ b/firmware/targets/f6/furi_hal/furi_hal_i2c_config.h
@@ -1,6 +1,6 @@
#pragma once
-#include <furi-hal-i2c-types.h>
+#include <furi_hal_i2c_types.h>
#ifdef __cplusplus
extern "C" {
diff --git a/firmware/targets/f7/furi-hal/furi-hal-i2c-types.h b/firmware/targets/f6/furi_hal/furi_hal_i2c_types.h
index 4f7aab91..0f2b735e 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-i2c-types.h
+++ b/firmware/targets/f6/furi_hal/furi_hal_i2c_types.h
@@ -36,7 +36,9 @@ typedef enum {
} FuriHalI2cBusHandleEvent;
/** FuriHal i2c handle event callback */
-typedef void (*FuriHalI2cBusHandleEventCallback)(FuriHalI2cBusHandle* handle, FuriHalI2cBusHandleEvent event);
+typedef void (*FuriHalI2cBusHandleEventCallback)(
+ FuriHalI2cBusHandle* handle,
+ FuriHalI2cBusHandleEvent event);
/** FuriHal i2c handle */
struct FuriHalI2cBusHandle {
diff --git a/firmware/targets/f6/furi-hal/furi-hal-ibutton.c b/firmware/targets/f6/furi_hal/furi_hal_ibutton.c
index 8a0af9f9..05cf25f1 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-ibutton.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_ibutton.c
@@ -1,5 +1,5 @@
-#include <furi-hal-ibutton.h>
-#include <furi-hal-resources.h>
+#include <furi_hal_ibutton.h>
+#include <furi_hal_resources.h>
void furi_hal_ibutton_start() {
furi_hal_ibutton_pin_high();
diff --git a/firmware/targets/f7/furi-hal/furi-hal-info.c b/firmware/targets/f6/furi_hal/furi_hal_info.c
index c1225ac9..a6d34477 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-info.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_info.c
@@ -1,5 +1,5 @@
-#include <furi-hal-info.h>
-#include <furi-hal.h>
+#include <furi_hal_info.h>
+#include <furi_hal.h>
#include <shci.h>
void furi_hal_info_get(FuriHalInfoValueCallback out, void* context) {
diff --git a/firmware/targets/f7/furi-hal/furi-hal-interrupt.c b/firmware/targets/f6/furi_hal/furi_hal_interrupt.c
index 8e24c488..417d72ef 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-interrupt.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_interrupt.c
@@ -1,4 +1,4 @@
-#include "furi-hal-interrupt.h"
+#include "furi_hal_interrupt.h"
#include <furi.h>
#include <main.h>
@@ -12,13 +12,15 @@ volatile FuriHalInterruptISR furi_hal_tim_tim1_isr = NULL;
#define FURI_HAL_INTERRUPT_DMA_COUNT 2
#define FURI_HAL_INTERRUPT_DMA_CHANNELS_COUNT 8
-volatile FuriHalInterruptISR furi_hal_dma_channel_isr[FURI_HAL_INTERRUPT_DMA_COUNT][FURI_HAL_INTERRUPT_DMA_CHANNELS_COUNT] = {0};
+volatile FuriHalInterruptISR furi_hal_dma_channel_isr[FURI_HAL_INTERRUPT_DMA_COUNT]
+ [FURI_HAL_INTERRUPT_DMA_CHANNELS_COUNT] = {0};
void furi_hal_interrupt_init() {
NVIC_SetPriority(RCC_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0, 0));
NVIC_EnableIRQ(RCC_IRQn);
- NVIC_SetPriority(TAMP_STAMP_LSECSS_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0, 0));
+ NVIC_SetPriority(
+ TAMP_STAMP_LSECSS_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0, 0));
NVIC_EnableIRQ(TAMP_STAMP_LSECSS_IRQn);
NVIC_SetPriority(DMA1_Channel1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 5, 0));
@@ -28,15 +30,15 @@ void furi_hal_interrupt_init() {
}
void furi_hal_interrupt_set_timer_isr(TIM_TypeDef* timer, FuriHalInterruptISR isr) {
- if (timer == TIM2) {
- if (isr) {
+ if(timer == TIM2) {
+ if(isr) {
furi_assert(furi_hal_tim_tim2_isr == NULL);
} else {
furi_assert(furi_hal_tim_tim2_isr != NULL);
}
furi_hal_tim_tim2_isr = isr;
- } else if (timer == TIM1) {
- if (isr) {
+ } else if(timer == TIM1) {
+ if(isr) {
furi_assert(furi_hal_tim_tim1_isr == NULL);
} else {
furi_assert(furi_hal_tim_tim1_isr != NULL);
@@ -47,13 +49,16 @@ void furi_hal_interrupt_set_timer_isr(TIM_TypeDef* timer, FuriHalInterruptISR is
}
}
-void furi_hal_interrupt_set_dma_channel_isr(DMA_TypeDef* dma, uint32_t channel, FuriHalInterruptISR isr) {
+void furi_hal_interrupt_set_dma_channel_isr(
+ DMA_TypeDef* dma,
+ uint32_t channel,
+ FuriHalInterruptISR isr) {
--channel; // Pascal
furi_check(dma);
furi_check(channel < FURI_HAL_INTERRUPT_DMA_CHANNELS_COUNT);
- if (dma == DMA1) {
+ if(dma == DMA1) {
furi_hal_dma_channel_isr[0][channel] = isr;
- } else if (dma == DMA2) {
+ } else if(dma == DMA2) {
furi_hal_dma_channel_isr[1][channel] = isr;
} else {
furi_crash(NULL);
@@ -76,7 +81,7 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim) {
/* Timer 2 */
void TIM2_IRQHandler(void) {
- if (furi_hal_tim_tim2_isr) {
+ if(furi_hal_tim_tim2_isr) {
furi_hal_tim_tim2_isr();
} else {
HAL_TIM_IRQHandler(&htim2);
@@ -85,7 +90,7 @@ void TIM2_IRQHandler(void) {
/* Timer 1 Update */
void TIM1_UP_TIM16_IRQHandler(void) {
- if (furi_hal_tim_tim1_isr) {
+ if(furi_hal_tim_tim1_isr) {
furi_hal_tim_tim1_isr();
} else {
HAL_TIM_IRQHandler(&htim1);
@@ -94,74 +99,74 @@ void TIM1_UP_TIM16_IRQHandler(void) {
/* DMA 1 */
void DMA1_Channel1_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[0][0]) furi_hal_dma_channel_isr[0][0]();
+ if(furi_hal_dma_channel_isr[0][0]) furi_hal_dma_channel_isr[0][0]();
}
void DMA1_Channel2_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[0][1]) furi_hal_dma_channel_isr[0][1]();
+ if(furi_hal_dma_channel_isr[0][1]) furi_hal_dma_channel_isr[0][1]();
}
void DMA1_Channel3_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[0][2]) furi_hal_dma_channel_isr[0][2]();
+ if(furi_hal_dma_channel_isr[0][2]) furi_hal_dma_channel_isr[0][2]();
}
void DMA1_Channel4_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[0][3]) furi_hal_dma_channel_isr[0][3]();
+ if(furi_hal_dma_channel_isr[0][3]) furi_hal_dma_channel_isr[0][3]();
}
void DMA1_Channel5_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[0][4]) furi_hal_dma_channel_isr[0][4]();
+ if(furi_hal_dma_channel_isr[0][4]) furi_hal_dma_channel_isr[0][4]();
}
void DMA1_Channel6_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[0][5]) furi_hal_dma_channel_isr[0][5]();
+ if(furi_hal_dma_channel_isr[0][5]) furi_hal_dma_channel_isr[0][5]();
}
void DMA1_Channel7_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[0][6]) furi_hal_dma_channel_isr[0][6]();
+ if(furi_hal_dma_channel_isr[0][6]) furi_hal_dma_channel_isr[0][6]();
}
void DMA1_Channel8_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[0][7]) furi_hal_dma_channel_isr[0][7]();
+ if(furi_hal_dma_channel_isr[0][7]) furi_hal_dma_channel_isr[0][7]();
}
/* DMA 2 */
void DMA2_Channel1_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[1][0]) furi_hal_dma_channel_isr[1][0]();
+ if(furi_hal_dma_channel_isr[1][0]) furi_hal_dma_channel_isr[1][0]();
}
void DMA2_Channel2_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[1][1]) furi_hal_dma_channel_isr[1][1]();
+ if(furi_hal_dma_channel_isr[1][1]) furi_hal_dma_channel_isr[1][1]();
}
void DMA2_Channel3_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[1][2]) furi_hal_dma_channel_isr[1][2]();
+ if(furi_hal_dma_channel_isr[1][2]) furi_hal_dma_channel_isr[1][2]();
}
void DMA2_Channel4_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[1][3]) furi_hal_dma_channel_isr[1][3]();
+ if(furi_hal_dma_channel_isr[1][3]) furi_hal_dma_channel_isr[1][3]();
}
void DMA2_Channel5_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[1][4]) furi_hal_dma_channel_isr[1][4]();
+ if(furi_hal_dma_channel_isr[1][4]) furi_hal_dma_channel_isr[1][4]();
}
void DMA2_Channel6_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[1][5]) furi_hal_dma_channel_isr[1][5]();
+ if(furi_hal_dma_channel_isr[1][5]) furi_hal_dma_channel_isr[1][5]();
}
void DMA2_Channel7_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[1][6]) furi_hal_dma_channel_isr[1][6]();
+ if(furi_hal_dma_channel_isr[1][6]) furi_hal_dma_channel_isr[1][6]();
}
void DMA2_Channel8_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[1][7]) furi_hal_dma_channel_isr[1][7]();
+ if(furi_hal_dma_channel_isr[1][7]) furi_hal_dma_channel_isr[1][7]();
}
void TAMP_STAMP_LSECSS_IRQHandler(void) {
- if (LL_RCC_IsActiveFlag_LSECSS()) {
+ if(LL_RCC_IsActiveFlag_LSECSS()) {
LL_RCC_ClearFlag_LSECSS();
- if (!LL_RCC_LSE_IsReady()) {
+ if(!LL_RCC_LSE_IsReady()) {
FURI_LOG_E(TAG, "LSE CSS fired: resetting system");
NVIC_SystemReset();
} else {
@@ -174,7 +179,7 @@ void RCC_IRQHandler(void) {
}
void NMI_Handler(void) {
- if (LL_RCC_IsActiveFlag_HSECSS()) {
+ if(LL_RCC_IsActiveFlag_HSECSS()) {
LL_RCC_ClearFlag_HSECSS();
FURI_LOG_E(TAG, "HSE CSS fired: resetting system");
NVIC_SystemReset();
diff --git a/firmware/targets/f6/furi-hal/furi-hal-interrupt.h b/firmware/targets/f6/furi_hal/furi_hal_interrupt.h
index 693924e6..b4cb6030 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-interrupt.h
+++ b/firmware/targets/f6/furi_hal/furi_hal_interrupt.h
@@ -18,7 +18,10 @@ void furi_hal_interrupt_init();
* @param channel - DMA channel
* @param isr - your interrupt service routine or use NULL to clear
*/
-void furi_hal_interrupt_set_dma_channel_isr(DMA_TypeDef* dma, uint32_t channel, FuriHalInterruptISR isr);
+void furi_hal_interrupt_set_dma_channel_isr(
+ DMA_TypeDef* dma,
+ uint32_t channel,
+ FuriHalInterruptISR isr);
/** Set Timer ISR
* By default ISR is serviced by ST HAL. Use this function to override it.
@@ -26,8 +29,7 @@ void furi_hal_interrupt_set_dma_channel_isr(DMA_TypeDef* dma, uint32_t channel,
* @param timer - timer instance
* @param isr - your interrupt service routine or use NULL to clear
*/
-void furi_hal_interrupt_set_timer_isr(TIM_TypeDef *timer, FuriHalInterruptISR isr);
-
+void furi_hal_interrupt_set_timer_isr(TIM_TypeDef* timer, FuriHalInterruptISR isr);
#ifdef __cplusplus
}
diff --git a/firmware/targets/f7/furi-hal/furi-hal-irda.c b/firmware/targets/f6/furi_hal/furi_hal_irda.c
index 4d3d389b..070e3c16 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-irda.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_irda.c
@@ -1,11 +1,11 @@
-#include "furi-hal-irda.h"
-#include "furi-hal-delay.h"
+#include "furi_hal_irda.h"
+#include "furi_hal_delay.h"
#include "furi/check.h"
#include "stm32wbxx_ll_dma.h"
#include "sys/_stdint.h"
#include <cmsis_os2.h>
-#include <furi-hal-interrupt.h>
-#include <furi-hal-resources.h>
+#include <furi_hal_interrupt.h>
+#include <furi_hal_resources.h>
#include <stdint.h>
#include <stm32wbxx_ll_tim.h>
@@ -15,7 +15,7 @@
#include <furi.h>
#include <math.h>
#include <main.h>
-#include <furi-hal-pwm.h>
+#include <furi_hal_pwm.h>
#define IRDA_TX_DEBUG 0
@@ -24,20 +24,21 @@
const GpioPin gpio_irda_tx_debug = {.port = GPIOA, .pin = GPIO_PIN_7};
#endif
-#define IRDA_TIM_TX_DMA_BUFFER_SIZE 200
-#define IRDA_POLARITY_SHIFT 1
+#define IRDA_TIM_TX_DMA_BUFFER_SIZE 200
+#define IRDA_POLARITY_SHIFT 1
-#define IRDA_TX_CCMR_HIGH (TIM_CCMR2_OC3PE | LL_TIM_OCMODE_PWM2) /* Mark time - enable PWM2 mode */
-#define IRDA_TX_CCMR_LOW (TIM_CCMR2_OC3PE | LL_TIM_OCMODE_FORCED_INACTIVE) /* Space time - force low */
+#define IRDA_TX_CCMR_HIGH (TIM_CCMR2_OC3PE | LL_TIM_OCMODE_PWM2) /* Mark time - enable PWM2 mode */
+#define IRDA_TX_CCMR_LOW \
+ (TIM_CCMR2_OC3PE | LL_TIM_OCMODE_FORCED_INACTIVE) /* Space time - force low */
-typedef struct{
+typedef struct {
FuriHalIrdaRxCaptureCallback capture_callback;
- void *capture_context;
+ void* capture_context;
FuriHalIrdaRxTimeoutCallback timeout_callback;
- void *timeout_context;
+ void* timeout_context;
} IrdaTimRx;
-typedef struct{
+typedef struct {
uint8_t* polarity;
uint16_t* data;
size_t size;
@@ -53,18 +54,19 @@ typedef struct {
void* signal_sent_context;
IrdaTxBuf buffer[2];
osSemaphoreId_t stop_semaphore;
- uint32_t tx_timing_rest_duration; /** if timing is too long (> 0xFFFF), send it in few iterations */
+ uint32_t
+ tx_timing_rest_duration; /** if timing is too long (> 0xFFFF), send it in few iterations */
bool tx_timing_rest_level;
FuriHalIrdaTxGetDataState tx_timing_rest_status;
} IrdaTimTx;
typedef enum {
- IrdaStateIdle, /** Furi Hal Irda is ready to start RX or TX */
- IrdaStateAsyncRx, /** Async RX started */
- IrdaStateAsyncTx, /** Async TX started, DMA and timer is on */
- IrdaStateAsyncTxStopReq, /** Async TX started, async stop request received */
+ IrdaStateIdle, /** Furi Hal Irda is ready to start RX or TX */
+ IrdaStateAsyncRx, /** Async RX started */
+ IrdaStateAsyncTx, /** Async TX started, DMA and timer is on */
+ IrdaStateAsyncTxStopReq, /** Async TX started, async stop request received */
IrdaStateAsyncTxStopInProgress, /** Async TX started, stop request is processed and we wait for last data to be sent */
- IrdaStateAsyncTxStopped, /** Async TX complete, cleanup needed */
+ IrdaStateAsyncTxStopped, /** Async TX complete, cleanup needed */
IrdaStateMAX,
} IrdaState;
@@ -95,8 +97,8 @@ static void furi_hal_irda_tim_rx_isr() {
* This can cause false timeout: when time is over, but we started
* receiving new signal few microseconds ago, because CNT register
* is reseted once per period, not per sample. */
- if (LL_GPIO_IsInputPinSet(gpio_irda_rx.port, gpio_irda_rx.pin) != 0) {
- if (irda_tim_rx.timeout_callback)
+ if(LL_GPIO_IsInputPinSet(gpio_irda_rx.port, gpio_irda_rx.pin) != 0) {
+ if(irda_tim_rx.timeout_callback)
irda_tim_rx.timeout_callback(irda_tim_rx.timeout_context);
}
}
@@ -109,7 +111,7 @@ static void furi_hal_irda_tim_rx_isr() {
if(READ_BIT(TIM2->CCMR1, TIM_CCMR1_CC1S)) {
/* Low pin level is a Mark state of IRDA signal. Invert level for further processing. */
uint32_t duration = LL_TIM_IC_GetCaptureCH1(TIM2) - previous_captured_ch2;
- if (irda_tim_rx.capture_callback)
+ if(irda_tim_rx.capture_callback)
irda_tim_rx.capture_callback(irda_tim_rx.capture_context, 1, duration);
} else {
furi_assert(0);
@@ -125,7 +127,7 @@ static void furi_hal_irda_tim_rx_isr() {
/* High pin level is a Space state of IRDA signal. Invert level for further processing. */
uint32_t duration = LL_TIM_IC_GetCaptureCH2(TIM2);
previous_captured_ch2 = duration;
- if (irda_tim_rx.capture_callback)
+ if(irda_tim_rx.capture_callback)
irda_tim_rx.capture_callback(irda_tim_rx.capture_context, 0, duration);
} else {
furi_assert(0);
@@ -141,7 +143,8 @@ void furi_hal_irda_async_rx_start(void) {
LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA);
FURI_CRITICAL_EXIT();
- hal_gpio_init_ex(&gpio_irda_rx, GpioModeAltFunctionPushPull, GpioPullNo, GpioSpeedLow, GpioAltFn1TIM2);
+ hal_gpio_init_ex(
+ &gpio_irda_rx, GpioModeAltFunctionPushPull, GpioPullNo, GpioSpeedLow, GpioAltFn1TIM2);
LL_TIM_InitTypeDef TIM_InitStruct = {0};
TIM_InitStruct.Prescaler = 64 - 1;
@@ -204,12 +207,16 @@ bool furi_hal_irda_is_busy(void) {
return furi_hal_irda_state != IrdaStateIdle;
}
-void furi_hal_irda_async_rx_set_capture_isr_callback(FuriHalIrdaRxCaptureCallback callback, void *ctx) {
+void furi_hal_irda_async_rx_set_capture_isr_callback(
+ FuriHalIrdaRxCaptureCallback callback,
+ void* ctx) {
irda_tim_rx.capture_callback = callback;
irda_tim_rx.capture_context = ctx;
}
-void furi_hal_irda_async_rx_set_timeout_isr_callback(FuriHalIrdaRxTimeoutCallback callback, void *ctx) {
+void furi_hal_irda_async_rx_set_timeout_isr_callback(
+ FuriHalIrdaRxTimeoutCallback callback,
+ void* ctx) {
irda_tim_rx.timeout_callback = callback;
irda_tim_rx.timeout_context = ctx;
}
@@ -233,9 +240,9 @@ static void furi_hal_irda_tx_dma_terminate(void) {
static uint8_t furi_hal_irda_get_current_dma_tx_buffer(void) {
uint8_t buf_num = 0;
uint32_t buffer_adr = LL_DMA_GetMemoryAddress(DMA1, LL_DMA_CHANNEL_2);
- if (buffer_adr == (uint32_t) irda_tim_tx.buffer[0].data) {
+ if(buffer_adr == (uint32_t)irda_tim_tx.buffer[0].data) {
buf_num = 0;
- } else if (buffer_adr == (uint32_t) irda_tim_tx.buffer[1].data) {
+ } else if(buffer_adr == (uint32_t)irda_tim_tx.buffer[1].data) {
buf_num = 1;
} else {
furi_assert(0);
@@ -244,16 +251,17 @@ static uint8_t furi_hal_irda_get_current_dma_tx_buffer(void) {
}
static void furi_hal_irda_tx_dma_polarity_isr() {
- if (LL_DMA_IsActiveFlag_TE1(DMA1)) {
+ if(LL_DMA_IsActiveFlag_TE1(DMA1)) {
LL_DMA_ClearFlag_TE1(DMA1);
furi_crash(NULL);
}
- if (LL_DMA_IsActiveFlag_TC1(DMA1) && LL_DMA_IsEnabledIT_TC(DMA1, LL_DMA_CHANNEL_1)) {
+ if(LL_DMA_IsActiveFlag_TC1(DMA1) && LL_DMA_IsEnabledIT_TC(DMA1, LL_DMA_CHANNEL_1)) {
LL_DMA_ClearFlag_TC1(DMA1);
- furi_check((furi_hal_irda_state == IrdaStateAsyncTx)
- || (furi_hal_irda_state == IrdaStateAsyncTxStopReq)
- || (furi_hal_irda_state == IrdaStateAsyncTxStopInProgress));
+ furi_check(
+ (furi_hal_irda_state == IrdaStateAsyncTx) ||
+ (furi_hal_irda_state == IrdaStateAsyncTxStopReq) ||
+ (furi_hal_irda_state == IrdaStateAsyncTxStopInProgress));
/* actually TC2 is processed and buffer is next buffer */
uint8_t next_buf_num = furi_hal_irda_get_current_dma_tx_buffer();
furi_hal_irda_tx_dma_set_polarity(next_buf_num, 0);
@@ -261,39 +269,43 @@ static void furi_hal_irda_tx_dma_polarity_isr() {
}
static void furi_hal_irda_tx_dma_isr() {
- if (LL_DMA_IsActiveFlag_TE2(DMA1)) {
+ if(LL_DMA_IsActiveFlag_TE2(DMA1)) {
LL_DMA_ClearFlag_TE2(DMA1);
furi_crash(NULL);
}
- if (LL_DMA_IsActiveFlag_HT2(DMA1) && LL_DMA_IsEnabledIT_HT(DMA1, LL_DMA_CHANNEL_2)) {
+ if(LL_DMA_IsActiveFlag_HT2(DMA1) && LL_DMA_IsEnabledIT_HT(DMA1, LL_DMA_CHANNEL_2)) {
LL_DMA_ClearFlag_HT2(DMA1);
uint8_t buf_num = furi_hal_irda_get_current_dma_tx_buffer();
uint8_t next_buf_num = !buf_num;
- if (irda_tim_tx.buffer[buf_num].last_packet_end) {
+ if(irda_tim_tx.buffer[buf_num].last_packet_end) {
LL_DMA_DisableIT_HT(DMA1, LL_DMA_CHANNEL_2);
- } else if (!irda_tim_tx.buffer[buf_num].packet_end || (furi_hal_irda_state == IrdaStateAsyncTx)) {
+ } else if(
+ !irda_tim_tx.buffer[buf_num].packet_end || (furi_hal_irda_state == IrdaStateAsyncTx)) {
furi_hal_irda_tx_fill_buffer(next_buf_num, 0);
- if (irda_tim_tx.buffer[next_buf_num].last_packet_end) {
+ if(irda_tim_tx.buffer[next_buf_num].last_packet_end) {
LL_DMA_DisableIT_HT(DMA1, LL_DMA_CHANNEL_2);
}
- } else if (furi_hal_irda_state == IrdaStateAsyncTxStopReq) {
+ } else if(furi_hal_irda_state == IrdaStateAsyncTxStopReq) {
/* fallthrough */
} else {
furi_crash(NULL);
}
}
- if (LL_DMA_IsActiveFlag_TC2(DMA1) && LL_DMA_IsEnabledIT_TC(DMA1, LL_DMA_CHANNEL_2)) {
+ if(LL_DMA_IsActiveFlag_TC2(DMA1) && LL_DMA_IsEnabledIT_TC(DMA1, LL_DMA_CHANNEL_2)) {
LL_DMA_ClearFlag_TC2(DMA1);
- furi_check((furi_hal_irda_state == IrdaStateAsyncTxStopInProgress)
- || (furi_hal_irda_state == IrdaStateAsyncTxStopReq)
- || (furi_hal_irda_state == IrdaStateAsyncTx));
+ furi_check(
+ (furi_hal_irda_state == IrdaStateAsyncTxStopInProgress) ||
+ (furi_hal_irda_state == IrdaStateAsyncTxStopReq) ||
+ (furi_hal_irda_state == IrdaStateAsyncTx));
uint8_t buf_num = furi_hal_irda_get_current_dma_tx_buffer();
uint8_t next_buf_num = !buf_num;
- if (furi_hal_irda_state == IrdaStateAsyncTxStopInProgress) {
+ if(furi_hal_irda_state == IrdaStateAsyncTxStopInProgress) {
furi_hal_irda_tx_dma_terminate();
- } else if (irda_tim_tx.buffer[buf_num].last_packet_end
- || (irda_tim_tx.buffer[buf_num].packet_end && (furi_hal_irda_state == IrdaStateAsyncTxStopReq))) {
+ } else if(
+ irda_tim_tx.buffer[buf_num].last_packet_end ||
+ (irda_tim_tx.buffer[buf_num].packet_end &&
+ (furi_hal_irda_state == IrdaStateAsyncTxStopReq))) {
furi_hal_irda_state = IrdaStateAsyncTxStopInProgress;
furi_hal_irda_tx_fill_buffer_last(next_buf_num);
furi_hal_irda_tx_dma_set_buffer(next_buf_num);
@@ -301,16 +313,16 @@ static void furi_hal_irda_tx_dma_isr() {
/* if it's not end of the packet - continue receiving */
furi_hal_irda_tx_dma_set_buffer(next_buf_num);
}
- if (irda_tim_tx.signal_sent_callback && irda_tim_tx.buffer[buf_num].packet_end && (furi_hal_irda_state != IrdaStateAsyncTxStopped)) {
+ if(irda_tim_tx.signal_sent_callback && irda_tim_tx.buffer[buf_num].packet_end &&
+ (furi_hal_irda_state != IrdaStateAsyncTxStopped)) {
irda_tim_tx.signal_sent_callback(irda_tim_tx.signal_sent_context);
}
}
}
-static void furi_hal_irda_configure_tim_pwm_tx(uint32_t freq, float duty_cycle)
-{
+static void furi_hal_irda_configure_tim_pwm_tx(uint32_t freq, float duty_cycle) {
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_TIM1);
-/* LL_DBGMCU_APB2_GRP1_FreezePeriph(LL_DBGMCU_APB2_GRP1_TIM1_STOP); */
+ /* LL_DBGMCU_APB2_GRP1_FreezePeriph(LL_DBGMCU_APB2_GRP1_TIM1_STOP); */
LL_TIM_DisableCounter(TIM1);
LL_TIM_SetRepetitionCounter(TIM1, 0);
@@ -318,9 +330,10 @@ static void furi_hal_irda_configure_tim_pwm_tx(uint32_t freq, float duty_cycle)
LL_TIM_SetPrescaler(TIM1, 0);
LL_TIM_SetCounterMode(TIM1, LL_TIM_COUNTERMODE_UP);
LL_TIM_EnableARRPreload(TIM1);
- LL_TIM_SetAutoReload(TIM1, __LL_TIM_CALC_ARR(SystemCoreClock, LL_TIM_GetPrescaler(TIM1), freq));
+ LL_TIM_SetAutoReload(
+ TIM1, __LL_TIM_CALC_ARR(SystemCoreClock, LL_TIM_GetPrescaler(TIM1), freq));
#if IRDA_TX_DEBUG == 1
- LL_TIM_OC_SetCompareCH1(TIM1, ( (LL_TIM_GetAutoReload(TIM1) + 1 ) * (1 - duty_cycle)));
+ LL_TIM_OC_SetCompareCH1(TIM1, ((LL_TIM_GetAutoReload(TIM1) + 1) * (1 - duty_cycle)));
LL_TIM_OC_EnablePreload(TIM1, LL_TIM_CHANNEL_CH1);
/* LL_TIM_OCMODE_PWM2 set by DMA */
LL_TIM_OC_SetMode(TIM1, LL_TIM_CHANNEL_CH1, LL_TIM_OCMODE_FORCED_INACTIVE);
@@ -329,7 +342,7 @@ static void furi_hal_irda_configure_tim_pwm_tx(uint32_t freq, float duty_cycle)
LL_TIM_CC_EnableChannel(TIM1, LL_TIM_CHANNEL_CH1N);
LL_TIM_DisableIT_CC1(TIM1);
#else
- LL_TIM_OC_SetCompareCH3(TIM1, ( (LL_TIM_GetAutoReload(TIM1) + 1 ) * (1 - duty_cycle)));
+ LL_TIM_OC_SetCompareCH3(TIM1, ((LL_TIM_GetAutoReload(TIM1) + 1) * (1 - duty_cycle)));
LL_TIM_OC_EnablePreload(TIM1, LL_TIM_CHANNEL_CH3);
/* LL_TIM_OCMODE_PWM2 set by DMA */
LL_TIM_OC_SetMode(TIM1, LL_TIM_CHANNEL_CH3, LL_TIM_OCMODE_FORCED_INACTIVE);
@@ -352,11 +365,11 @@ static void furi_hal_irda_configure_tim_cmgr2_dma_tx(void) {
LL_DMA_InitTypeDef dma_config = {0};
#if IRDA_TX_DEBUG == 1
- dma_config.PeriphOrM2MSrcAddress = (uint32_t)&(TIM1->CCMR1);
+ dma_config.PeriphOrM2MSrcAddress = (uint32_t) & (TIM1->CCMR1);
#else
- dma_config.PeriphOrM2MSrcAddress = (uint32_t)&(TIM1->CCMR2);
+ dma_config.PeriphOrM2MSrcAddress = (uint32_t) & (TIM1->CCMR2);
#endif
- dma_config.MemoryOrM2MDstAddress = (uint32_t) NULL;
+ dma_config.MemoryOrM2MDstAddress = (uint32_t)NULL;
dma_config.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH;
dma_config.Mode = LL_DMA_MODE_NORMAL;
dma_config.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT;
@@ -368,7 +381,8 @@ static void furi_hal_irda_configure_tim_cmgr2_dma_tx(void) {
dma_config.PeriphRequest = LL_DMAMUX_REQ_TIM1_UP;
dma_config.Priority = LL_DMA_PRIORITY_VERYHIGH;
LL_DMA_Init(DMA1, LL_DMA_CHANNEL_1, &dma_config);
- furi_hal_interrupt_set_dma_channel_isr(DMA1, LL_DMA_CHANNEL_1, furi_hal_irda_tx_dma_polarity_isr);
+ furi_hal_interrupt_set_dma_channel_isr(
+ DMA1, LL_DMA_CHANNEL_1, furi_hal_irda_tx_dma_polarity_isr);
LL_DMA_ClearFlag_TE1(DMA1);
LL_DMA_ClearFlag_TC1(DMA1);
LL_DMA_EnableIT_TE(DMA1, LL_DMA_CHANNEL_1);
@@ -382,8 +396,8 @@ static void furi_hal_irda_configure_tim_rcr_dma_tx(void) {
LL_C2_AHB1_GRP1_EnableClock(LL_C2_AHB1_GRP1_PERIPH_DMA1);
LL_DMA_InitTypeDef dma_config = {0};
- dma_config.PeriphOrM2MSrcAddress = (uint32_t)&(TIM1->RCR);
- dma_config.MemoryOrM2MDstAddress = (uint32_t) NULL;
+ dma_config.PeriphOrM2MSrcAddress = (uint32_t) & (TIM1->RCR);
+ dma_config.MemoryOrM2MDstAddress = (uint32_t)NULL;
dma_config.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH;
dma_config.Mode = LL_DMA_MODE_NORMAL;
dma_config.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT;
@@ -417,9 +431,9 @@ static void furi_hal_irda_tx_fill_buffer_last(uint8_t buf_num) {
furi_assert(buffer->polarity != NULL);
(void)buffer->polarity;
- irda_tim_tx.buffer[buf_num].data[0] = 0; // 1 pulse
+ irda_tim_tx.buffer[buf_num].data[0] = 0; // 1 pulse
irda_tim_tx.buffer[buf_num].polarity[0] = IRDA_TX_CCMR_LOW;
- irda_tim_tx.buffer[buf_num].data[1] = 0; // 1 pulse
+ irda_tim_tx.buffer[buf_num].data[1] = 0; // 1 pulse
irda_tim_tx.buffer[buf_num].polarity[1] = IRDA_TX_CCMR_LOW;
irda_tim_tx.buffer[buf_num].size = 2;
irda_tim_tx.buffer[buf_num].last_packet_end = true;
@@ -438,15 +452,16 @@ static void furi_hal_irda_tx_fill_buffer(uint8_t buf_num, uint8_t polarity_shift
FuriHalIrdaTxGetDataState status = FuriHalIrdaTxGetDataStateOk;
uint32_t duration = 0;
bool level = 0;
- size_t *size = &buffer->size;
+ size_t* size = &buffer->size;
size_t polarity_counter = 0;
- while (polarity_shift--) {
+ while(polarity_shift--) {
buffer->polarity[polarity_counter++] = IRDA_TX_CCMR_LOW;
}
- for (*size = 0; (*size < IRDA_TIM_TX_DMA_BUFFER_SIZE) && (status == FuriHalIrdaTxGetDataStateOk);) {
- if (irda_tim_tx.tx_timing_rest_duration > 0) {
- if (irda_tim_tx.tx_timing_rest_duration > 0xFFFF) {
+ for(*size = 0;
+ (*size < IRDA_TIM_TX_DMA_BUFFER_SIZE) && (status == FuriHalIrdaTxGetDataStateOk);) {
+ if(irda_tim_tx.tx_timing_rest_duration > 0) {
+ if(irda_tim_tx.tx_timing_rest_duration > 0xFFFF) {
buffer->data[*size] = 0xFFFF;
status = FuriHalIrdaTxGetDataStateOk;
} else {
@@ -454,7 +469,8 @@ static void furi_hal_irda_tx_fill_buffer(uint8_t buf_num, uint8_t polarity_shift
status = irda_tim_tx.tx_timing_rest_status;
}
irda_tim_tx.tx_timing_rest_duration -= buffer->data[*size];
- buffer->polarity[polarity_counter] = irda_tim_tx.tx_timing_rest_level ? IRDA_TX_CCMR_HIGH : IRDA_TX_CCMR_LOW;
+ buffer->polarity[polarity_counter] =
+ irda_tim_tx.tx_timing_rest_level ? IRDA_TX_CCMR_HIGH : IRDA_TX_CCMR_LOW;
++(*size);
++polarity_counter;
continue;
@@ -464,14 +480,14 @@ static void furi_hal_irda_tx_fill_buffer(uint8_t buf_num, uint8_t polarity_shift
uint32_t num_of_impulses = roundf(duration / irda_tim_tx.cycle_duration);
- if (num_of_impulses == 0) {
- if ((*size == 0) && (status == FuriHalIrdaTxGetDataStateDone)) {
+ if(num_of_impulses == 0) {
+ if((*size == 0) && (status == FuriHalIrdaTxGetDataStateDone)) {
/* if this is one sample in current buffer, but we
* have more to send - continue
*/
status = FuriHalIrdaTxGetDataStateOk;
}
- } else if ((num_of_impulses - 1) > 0xFFFF) {
+ } else if((num_of_impulses - 1) > 0xFFFF) {
irda_tim_tx.tx_timing_rest_duration = num_of_impulses - 1;
irda_tim_tx.tx_timing_rest_status = status;
irda_tim_tx.tx_timing_rest_level = level;
@@ -487,8 +503,8 @@ static void furi_hal_irda_tx_fill_buffer(uint8_t buf_num, uint8_t polarity_shift
buffer->last_packet_end = (status == FuriHalIrdaTxGetDataStateLastDone);
buffer->packet_end = buffer->last_packet_end || (status == FuriHalIrdaTxGetDataStateDone);
- if (*size == 0) {
- buffer->data[0] = 0; // 1 pulse
+ if(*size == 0) {
+ buffer->data[0] = 0; // 1 pulse
buffer->polarity[0] = IRDA_TX_CCMR_LOW;
buffer->size = 1;
}
@@ -502,12 +518,12 @@ static void furi_hal_irda_tx_dma_set_polarity(uint8_t buf_num, uint8_t polarity_
__disable_irq();
bool channel_enabled = LL_DMA_IsEnabledChannel(DMA1, LL_DMA_CHANNEL_1);
- if (channel_enabled) {
+ if(channel_enabled) {
LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1);
}
- LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_1, (uint32_t) buffer->polarity);
+ LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_1, (uint32_t)buffer->polarity);
LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, buffer->size + polarity_shift);
- if (channel_enabled) {
+ if(channel_enabled) {
LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);
}
__enable_irq();
@@ -522,19 +538,21 @@ static void furi_hal_irda_tx_dma_set_buffer(uint8_t buf_num) {
/* non-circular mode requires disabled channel before setup */
__disable_irq();
bool channel_enabled = LL_DMA_IsEnabledChannel(DMA1, LL_DMA_CHANNEL_2);
- if (channel_enabled) {
+ if(channel_enabled) {
LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_2);
}
LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_2, (uint32_t)buffer->data);
LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_2, buffer->size);
- if (channel_enabled) {
+ if(channel_enabled) {
LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2);
}
__enable_irq();
}
static void furi_hal_irda_async_tx_free_resources(void) {
- furi_assert((furi_hal_irda_state == IrdaStateIdle) || (furi_hal_irda_state == IrdaStateAsyncTxStopped));
+ furi_assert(
+ (furi_hal_irda_state == IrdaStateIdle) ||
+ (furi_hal_irda_state == IrdaStateAsyncTxStopped));
osStatus_t status;
hal_gpio_init(&gpio_irda_tx, GpioModeOutputOpenDrain, GpioPullDown, GpioSpeedLow);
@@ -558,7 +576,8 @@ static void furi_hal_irda_async_tx_free_resources(void) {
}
void furi_hal_irda_async_tx_start(uint32_t freq, float duty_cycle) {
- if ((duty_cycle > 1) || (duty_cycle <= 0) || (freq > IRDA_MAX_FREQUENCY) || (freq < IRDA_MIN_FREQUENCY) || (irda_tim_tx.data_callback == NULL)) {
+ if((duty_cycle > 1) || (duty_cycle <= 0) || (freq > IRDA_MAX_FREQUENCY) ||
+ (freq < IRDA_MIN_FREQUENCY) || (irda_tim_tx.data_callback == NULL)) {
furi_crash(NULL);
}
@@ -572,7 +591,8 @@ void furi_hal_irda_async_tx_start(uint32_t freq, float duty_cycle) {
irda_tim_tx.buffer[0].data = furi_alloc(alloc_size_data);
irda_tim_tx.buffer[1].data = furi_alloc(alloc_size_data);
- size_t alloc_size_polarity = (IRDA_TIM_TX_DMA_BUFFER_SIZE + IRDA_POLARITY_SHIFT) * sizeof(uint8_t);
+ size_t alloc_size_polarity =
+ (IRDA_TIM_TX_DMA_BUFFER_SIZE + IRDA_POLARITY_SHIFT) * sizeof(uint8_t);
irda_tim_tx.buffer[0].polarity = furi_alloc(alloc_size_polarity);
irda_tim_tx.buffer[1].polarity = furi_alloc(alloc_size_polarity);
@@ -594,13 +614,15 @@ void furi_hal_irda_async_tx_start(uint32_t freq, float duty_cycle) {
LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);
LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2);
delay_us(5);
- LL_TIM_GenerateEvent_UPDATE(TIM1); /* DMA -> TIMx_RCR */
+ LL_TIM_GenerateEvent_UPDATE(TIM1); /* DMA -> TIMx_RCR */
delay_us(5);
- LL_GPIO_ResetOutputPin(gpio_irda_tx.port, gpio_irda_tx.pin); /* when disable it prevents false pulse */
- hal_gpio_init_ex(&gpio_irda_tx, GpioModeAltFunctionPushPull, GpioPullUp, GpioSpeedHigh, GpioAltFn1TIM1);
+ LL_GPIO_ResetOutputPin(
+ gpio_irda_tx.port, gpio_irda_tx.pin); /* when disable it prevents false pulse */
+ hal_gpio_init_ex(
+ &gpio_irda_tx, GpioModeAltFunctionPushPull, GpioPullUp, GpioSpeedHigh, GpioAltFn1TIM1);
__disable_irq();
- LL_TIM_GenerateEvent_UPDATE(TIM1); /* TIMx_RCR -> Repetition counter */
+ LL_TIM_GenerateEvent_UPDATE(TIM1); /* TIMx_RCR -> Repetition counter */
LL_TIM_EnableCounter(TIM1);
__enable_irq();
}
@@ -621,21 +643,23 @@ void furi_hal_irda_async_tx_stop(void) {
furi_assert(furi_hal_irda_state < IrdaStateMAX);
__disable_irq();
- if (furi_hal_irda_state == IrdaStateAsyncTx)
- furi_hal_irda_state = IrdaStateAsyncTxStopReq;
+ if(furi_hal_irda_state == IrdaStateAsyncTx) furi_hal_irda_state = IrdaStateAsyncTxStopReq;
__enable_irq();
furi_hal_irda_async_tx_wait_termination();
}
-void furi_hal_irda_async_tx_set_data_isr_callback(FuriHalIrdaTxGetDataISRCallback callback, void* context) {
+void furi_hal_irda_async_tx_set_data_isr_callback(
+ FuriHalIrdaTxGetDataISRCallback callback,
+ void* context) {
furi_assert(furi_hal_irda_state == IrdaStateIdle);
irda_tim_tx.data_callback = callback;
irda_tim_tx.data_context = context;
}
-void furi_hal_irda_async_tx_set_signal_sent_isr_callback(FuriHalIrdaTxSignalSentISRCallback callback, void* context) {
+void furi_hal_irda_async_tx_set_signal_sent_isr_callback(
+ FuriHalIrdaTxSignalSentISRCallback callback,
+ void* context) {
irda_tim_tx.signal_sent_callback = callback;
irda_tim_tx.signal_sent_context = context;
}
-
diff --git a/firmware/targets/f6/furi-hal/furi-hal-light.c b/firmware/targets/f6/furi_hal/furi_hal_light.c
index 15a69f09..6aba7efb 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-light.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_light.c
@@ -1,4 +1,4 @@
-#include <furi-hal-light.h>
+#include <furi_hal_light.h>
#include <lp5562.h>
#define LED_CURRENT_RED 50
diff --git a/firmware/targets/f7/furi-hal/furi-hal-nfc.c b/firmware/targets/f6/furi_hal/furi_hal_nfc.c
index ee1138d8..be79aca1 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-nfc.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_nfc.c
@@ -1,4 +1,4 @@
-#include "furi-hal-nfc.h"
+#include "furi_hal_nfc.h"
#include <st25r3916.h>
#define TAG "FuriHalNfc"
@@ -37,7 +37,11 @@ void furi_hal_nfc_exit_sleep() {
rfalLowPowerModeStop();
}
-bool furi_hal_nfc_detect(rfalNfcDevice **dev_list, uint8_t* dev_cnt, uint32_t timeout, bool deactivate) {
+bool furi_hal_nfc_detect(
+ rfalNfcDevice** dev_list,
+ uint8_t* dev_cnt,
+ uint32_t timeout,
+ bool deactivate) {
furi_assert(dev_list);
furi_assert(dev_cnt);
@@ -88,7 +92,13 @@ bool furi_hal_nfc_detect(rfalNfcDevice **dev_list, uint8_t* dev_cnt, uint32_t ti
return true;
}
-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) {
+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) {
rfalNfcState state = rfalNfcGetState();
if(state == RFAL_NFC_STATE_NOTINIT) {
rfalNfcInitialize();
@@ -131,11 +141,17 @@ bool furi_hal_nfc_listen(uint8_t* uid, uint8_t uid_len, uint8_t* atqa, uint8_t s
}
bool furi_hal_nfc_get_first_frame(uint8_t** rx_buff, uint16_t** rx_len) {
- ReturnCode ret = rfalNfcDataExchangeStart(NULL, 0, rx_buff, rx_len, 0, RFAL_TXRX_FLAGS_DEFAULT);
+ ReturnCode ret =
+ rfalNfcDataExchangeStart(NULL, 0, rx_buff, rx_len, 0, RFAL_TXRX_FLAGS_DEFAULT);
return ret == ERR_NONE;
}
-ReturnCode furi_hal_nfc_data_exchange(uint8_t* tx_buff, uint16_t tx_len, uint8_t** rx_buff, uint16_t** rx_len, bool deactivate) {
+ReturnCode furi_hal_nfc_data_exchange(
+ uint8_t* tx_buff,
+ uint16_t tx_len,
+ uint8_t** rx_buff,
+ uint16_t** rx_len,
+ bool deactivate) {
furi_assert(rx_buff);
furi_assert(rx_len);
@@ -170,13 +186,19 @@ ReturnCode furi_hal_nfc_data_exchange(uint8_t* tx_buff, uint16_t tx_len, uint8_t
return ERR_NONE;
}
-ReturnCode furi_hal_nfc_raw_bitstream_exchange(uint8_t* tx_buff, uint16_t tx_bit_len, uint8_t** rx_buff, uint16_t** rx_bit_len, bool deactivate) {
+ReturnCode furi_hal_nfc_raw_bitstream_exchange(
+ uint8_t* tx_buff,
+ uint16_t tx_bit_len,
+ uint8_t** rx_buff,
+ uint16_t** rx_bit_len,
+ bool deactivate) {
furi_assert(rx_buff);
furi_assert(rx_bit_len);
ReturnCode ret;
rfalNfcState state = RFAL_NFC_STATE_ACTIVATED;
- ret = rfalNfcDataExchangeStart(tx_buff, tx_bit_len, rx_buff, rx_bit_len, 0, RFAL_TXRX_FLAGS_RAW);
+ ret =
+ rfalNfcDataExchangeStart(tx_buff, tx_bit_len, rx_buff, rx_bit_len, 0, RFAL_TXRX_FLAGS_RAW);
if(ret != ERR_NONE) {
return ret;
}
diff --git a/firmware/targets/f7/furi-hal/furi-hal-os.c b/firmware/targets/f6/furi_hal/furi_hal_os.c
index f166c5ec..6ef5a9f4 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-os.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_os.c
@@ -1,6 +1,6 @@
-#include <furi-hal-os.h>
-#include <furi-hal-os-timer.h>
-#include <furi-hal-power.h>
+#include <furi_hal_os.h>
+#include <furi_hal_os_timer.h>
+#include <furi_hal_power.h>
#include <stm32wbxx_ll_cortex.h>
#include <furi.h>
@@ -53,10 +53,10 @@ void LPTIM2_IRQHandler(void) {
// Autoreload
if(LL_LPTIM_IsActiveFlag_ARRM(FURI_HAL_OS_TIMER)) {
LL_LPTIM_ClearFLAG_ARRM(FURI_HAL_OS_TIMER);
- if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) {
- #ifdef FURI_HAL_OS_DEBUG
+ if(xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) {
+#ifdef FURI_HAL_OS_DEBUG
LL_GPIO_TogglePin(LED_TICK_PORT, LED_TICK_PIN);
- #endif
+#endif
xPortSysTickHandler();
}
}
@@ -91,7 +91,7 @@ static inline uint32_t furi_hal_os_sleep(TickType_t expected_idle_ticks) {
bool cmpm = LL_LPTIM_IsActiveFlag_CMPM(FURI_HAL_OS_TIMER);
bool arrm = LL_LPTIM_IsActiveFlag_ARRM(FURI_HAL_OS_TIMER);
- if (cmpm && arrm) after_tick += expected_idle_ticks;
+ if(cmpm && arrm) after_tick += expected_idle_ticks;
// Prepare tick timer for new round
furi_hal_os_timer_reset();
@@ -110,15 +110,15 @@ void vPortSuppressTicksAndSleep(TickType_t expected_idle_ticks) {
}
// Limit mount of ticks to maximum that timer can count
- if (expected_idle_ticks > FURI_HAL_OS_MAX_SLEEP) {
+ if(expected_idle_ticks > FURI_HAL_OS_MAX_SLEEP) {
expected_idle_ticks = FURI_HAL_OS_MAX_SLEEP;
}
- // Stop IRQ handling, no one should disturb us till we finish
+ // Stop IRQ handling, no one should disturb us till we finish
__disable_irq();
// Confirm OS that sleep is still possible
- if (eTaskConfirmSleepModeStatus() == eAbortSleep) {
+ if(eTaskConfirmSleepModeStatus() == eAbortSleep) {
__enable_irq();
return;
}
@@ -127,8 +127,8 @@ void vPortSuppressTicksAndSleep(TickType_t expected_idle_ticks) {
uint32_t completed_ticks = furi_hal_os_sleep(expected_idle_ticks);
// Notify system about time spent in sleep
- if (completed_ticks > 0) {
- if (completed_ticks > expected_idle_ticks) {
+ if(completed_ticks > 0) {
+ if(completed_ticks > expected_idle_ticks) {
vTaskStepTick(expected_idle_ticks);
} else {
vTaskStepTick(completed_ticks);
@@ -139,6 +139,6 @@ void vPortSuppressTicksAndSleep(TickType_t expected_idle_ticks) {
__enable_irq();
}
-void vApplicationStackOverflowHook(TaskHandle_t xTask, char * pcTaskName) {
+void vApplicationStackOverflowHook(TaskHandle_t xTask, char* pcTaskName) {
furi_crash("StackOverflow");
}
diff --git a/firmware/targets/f7/furi-hal/furi-hal-os.h b/firmware/targets/f6/furi_hal/furi_hal_os.h
index 72ae74fc..0b3d1580 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-os.h
+++ b/firmware/targets/f6/furi_hal/furi_hal_os.h
@@ -2,7 +2,6 @@
#include <stdint.h>
-
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/firmware/targets/f7/furi-hal/furi-hal-os-timer.h b/firmware/targets/f6/furi_hal/furi_hal_os_timer.h
index 8b7752e8..6b26d337 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-os-timer.h
+++ b/firmware/targets/f6/furi_hal/furi_hal_os_timer.h
@@ -5,17 +5,18 @@
#include <stdint.h>
// Timer used for system ticks
-#define FURI_HAL_OS_TIMER_MAX 0xFFFF
+#define FURI_HAL_OS_TIMER_MAX 0xFFFF
#define FURI_HAL_OS_TIMER_REG_LOAD_DLY 0x1
-#define FURI_HAL_OS_TIMER LPTIM2
-#define FURI_HAL_OS_TIMER_IRQ LPTIM2_IRQn
+#define FURI_HAL_OS_TIMER LPTIM2
+#define FURI_HAL_OS_TIMER_IRQ LPTIM2_IRQn
static inline void furi_hal_os_timer_init() {
// Configure clock source
LL_RCC_SetLPTIMClockSource(LL_RCC_LPTIM2_CLKSOURCE_LSE);
LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_LPTIM2);
// Set interrupt priority and enable them
- NVIC_SetPriority(FURI_HAL_OS_TIMER_IRQ, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 15, 0));
+ NVIC_SetPriority(
+ FURI_HAL_OS_TIMER_IRQ, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 15, 0));
NVIC_EnableIRQ(FURI_HAL_OS_TIMER_IRQ);
}
@@ -23,7 +24,8 @@ static inline void furi_hal_os_timer_continuous(uint32_t count) {
count--;
// Enable timer
LL_LPTIM_Enable(FURI_HAL_OS_TIMER);
- while(!LL_LPTIM_IsEnabled(FURI_HAL_OS_TIMER));
+ while(!LL_LPTIM_IsEnabled(FURI_HAL_OS_TIMER))
+ ;
// Enable rutoreload match interrupt
LL_LPTIM_EnableIT_ARRM(FURI_HAL_OS_TIMER);
@@ -37,14 +39,15 @@ static inline void furi_hal_os_timer_single(uint32_t count) {
count--;
// Enable timer
LL_LPTIM_Enable(FURI_HAL_OS_TIMER);
- while(!LL_LPTIM_IsEnabled(FURI_HAL_OS_TIMER));
+ while(!LL_LPTIM_IsEnabled(FURI_HAL_OS_TIMER))
+ ;
// Enable compare match interrupt
LL_LPTIM_EnableIT_CMPM(FURI_HAL_OS_TIMER);
// Set compare, autoreload and start counter
// Include some marging to workaround ARRM behaviour
- LL_LPTIM_SetCompare(FURI_HAL_OS_TIMER, count-3);
+ LL_LPTIM_SetCompare(FURI_HAL_OS_TIMER, count - 3);
LL_LPTIM_SetAutoReload(FURI_HAL_OS_TIMER, count);
LL_LPTIM_StartCounter(FURI_HAL_OS_TIMER, LL_LPTIM_OPERATING_MODE_ONESHOT);
}
diff --git a/firmware/targets/f7/furi-hal/furi-hal-power.c b/firmware/targets/f6/furi_hal/furi_hal_power.c
index ad333b5d..b2997b58 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-power.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_power.c
@@ -1,6 +1,6 @@
-#include <furi-hal-power.h>
-#include <furi-hal-clock.h>
-#include <furi-hal-bt.h>
+#include <furi_hal_power.h>
+#include <furi_hal_clock.h>
+#include <furi_hal_bt.h>
#include <stm32wbxx_ll_rcc.h>
#include <stm32wbxx_ll_pwr.h>
@@ -30,17 +30,18 @@ static volatile FuriHalPower furi_hal_power = {
};
const ParamCEDV cedv = {
- .cedv_conf.gauge_conf = {
- .CCT = 1,
- .CSYNC = 0,
- .EDV_CMP = 0,
- .SC = 1,
- .FIXED_EDV0 = 1,
- .FCC_LIM = 1,
- .FC_FOR_VDQ = 1,
- .IGNORE_SD = 1,
- .SME0 = 0,
- },
+ .cedv_conf.gauge_conf =
+ {
+ .CCT = 1,
+ .CSYNC = 0,
+ .EDV_CMP = 0,
+ .SC = 1,
+ .FIXED_EDV0 = 1,
+ .FCC_LIM = 1,
+ .FC_FOR_VDQ = 1,
+ .IGNORE_SD = 1,
+ .SME0 = 0,
+ },
.full_charge_cap = 2100,
.design_cap = 2100,
.EDV0 = 3300,
@@ -112,14 +113,15 @@ void furi_hal_power_light_sleep() {
}
void furi_hal_power_deep_sleep() {
- while( LL_HSEM_1StepLock(HSEM, CFG_HW_RCC_SEMID));
+ while(LL_HSEM_1StepLock(HSEM, CFG_HW_RCC_SEMID))
+ ;
- if (!LL_HSEM_1StepLock(HSEM, CFG_HW_ENTRY_STOP_MODE_SEMID)) {
+ if(!LL_HSEM_1StepLock(HSEM, CFG_HW_ENTRY_STOP_MODE_SEMID)) {
if(LL_PWR_IsActiveFlag_C2DS()) {
// Release ENTRY_STOP_MODE semaphore
LL_HSEM_ReleaseLock(HSEM, CFG_HW_ENTRY_STOP_MODE_SEMID, 0);
- // The switch on HSI before entering Stop Mode is required
+ // The switch on HSI before entering Stop Mode is required
furi_hal_clock_switch_to_hsi();
}
} else {
@@ -136,7 +138,7 @@ void furi_hal_power_deep_sleep() {
LL_PWR_SetPowerMode(LL_PWR_MODE_STOP1);
LL_LPM_EnableDeepSleep();
-#if defined ( __CC_ARM)
+#if defined(__CC_ARM)
// Force store operations
__force_stores();
#endif
@@ -146,7 +148,8 @@ void furi_hal_power_deep_sleep() {
/* Release ENTRY_STOP_MODE semaphore */
LL_HSEM_ReleaseLock(HSEM, CFG_HW_ENTRY_STOP_MODE_SEMID, 0);
- while(LL_HSEM_1StepLock(HSEM, CFG_HW_RCC_SEMID));
+ while(LL_HSEM_1StepLock(HSEM, CFG_HW_RCC_SEMID))
+ ;
if(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL) {
furi_hal_clock_switch_to_pll();
@@ -163,7 +166,6 @@ void furi_hal_power_sleep() {
}
}
-
uint8_t furi_hal_power_get_pct() {
furi_hal_i2c_acquire(&furi_hal_i2c_handle_power);
uint8_t ret = bq27220_get_state_of_charge(&furi_hal_i2c_handle_power);
@@ -232,9 +234,9 @@ float furi_hal_power_get_battery_voltage(FuriHalPowerIC ic) {
float ret = 0.0f;
furi_hal_i2c_acquire(&furi_hal_i2c_handle_power);
- if (ic == FuriHalPowerICCharger) {
+ if(ic == FuriHalPowerICCharger) {
ret = (float)bq25896_get_vbat_voltage(&furi_hal_i2c_handle_power) / 1000.0f;
- } else if (ic == FuriHalPowerICFuelGauge) {
+ } else if(ic == FuriHalPowerICFuelGauge) {
ret = (float)bq27220_get_voltage(&furi_hal_i2c_handle_power) / 1000.0f;
}
furi_hal_i2c_release(&furi_hal_i2c_handle_power);
@@ -246,11 +248,11 @@ float furi_hal_power_get_battery_current(FuriHalPowerIC ic) {
float ret = 0.0f;
furi_hal_i2c_acquire(&furi_hal_i2c_handle_power);
- if (ic == FuriHalPowerICCharger) {
+ if(ic == FuriHalPowerICCharger) {
ret = (float)bq25896_get_vbat_current(&furi_hal_i2c_handle_power) / 1000.0f;
- } else if (ic == FuriHalPowerICFuelGauge) {
+ } else if(ic == FuriHalPowerICFuelGauge) {
ret = (float)bq27220_get_current(&furi_hal_i2c_handle_power) / 1000.0f;
- }
+ }
furi_hal_i2c_release(&furi_hal_i2c_handle_power);
return ret;
@@ -259,10 +261,10 @@ float furi_hal_power_get_battery_current(FuriHalPowerIC ic) {
static float furi_hal_power_get_battery_temperature_internal(FuriHalPowerIC ic) {
float ret = 0.0f;
- if (ic == FuriHalPowerICCharger) {
+ if(ic == FuriHalPowerICCharger) {
// Linear approximation, +/- 5 C
- ret = (71.0f - (float)bq25896_get_ntc_mpct(&furi_hal_i2c_handle_power)/1000) / 0.6f;
- } else if (ic == FuriHalPowerICFuelGauge) {
+ ret = (71.0f - (float)bq25896_get_ntc_mpct(&furi_hal_i2c_handle_power) / 1000) / 0.6f;
+ } else if(ic == FuriHalPowerICFuelGauge) {
ret = ((float)bq27220_get_temperature(&furi_hal_i2c_handle_power) - 2731.0f) / 10.0f;
}
@@ -277,7 +279,7 @@ float furi_hal_power_get_battery_temperature(FuriHalPowerIC ic) {
return ret;
}
-float furi_hal_power_get_usb_voltage(){
+float furi_hal_power_get_usb_voltage() {
furi_hal_i2c_acquire(&furi_hal_i2c_handle_power);
float ret = (float)bq25896_get_vbus_voltage(&furi_hal_i2c_handle_power) / 1000.0f;
furi_hal_i2c_release(&furi_hal_i2c_handle_power);
@@ -290,57 +292,75 @@ void furi_hal_power_dump_state() {
furi_hal_i2c_acquire(&furi_hal_i2c_handle_power);
- if (bq27220_get_battery_status(&furi_hal_i2c_handle_power, &battery_status) == BQ27220_ERROR
- || bq27220_get_operation_status(&furi_hal_i2c_handle_power, &operation_status) == BQ27220_ERROR) {
+ if(bq27220_get_battery_status(&furi_hal_i2c_handle_power, &battery_status) == BQ27220_ERROR ||
+ bq27220_get_operation_status(&furi_hal_i2c_handle_power, &operation_status) ==
+ BQ27220_ERROR) {
printf("Failed to get bq27220 status. Communication error.\r\n");
} else {
printf(
- "bq27220: CALMD: %d, SEC0: %d, SEC1: %d, EDV2: %d, VDQ: %d, INITCOMP: %d, SMTH: %d, BTPINT: %d, CFGUPDATE: %d\r\n",
- operation_status.CALMD, operation_status.SEC0, operation_status.SEC1,
- operation_status.EDV2, operation_status.VDQ, operation_status.INITCOMP,
- operation_status.SMTH, operation_status.BTPINT, operation_status.CFGUPDATE
- );
+ "bq27220: CALMD: %d, SEC0: %d, SEC1: %d, EDV2: %d, VDQ: %d, INITCOMP: %d, SMTH: %d, BTPINT: %d, CFGUPDATE: %d\r\n",
+ operation_status.CALMD,
+ operation_status.SEC0,
+ operation_status.SEC1,
+ operation_status.EDV2,
+ operation_status.VDQ,
+ operation_status.INITCOMP,
+ operation_status.SMTH,
+ operation_status.BTPINT,
+ operation_status.CFGUPDATE);
// Battery status register, part 1
printf(
- "bq27220: CHGINH: %d, FC: %d, OTD: %d, OTC: %d, SLEEP: %d, OCVFAIL: %d, OCVCOMP: %d, FD: %d\r\n",
- battery_status.CHGINH, battery_status.FC, battery_status.OTD,
- battery_status.OTC, battery_status.SLEEP, battery_status.OCVFAIL,
- battery_status.OCVCOMP, battery_status.FD
- );
+ "bq27220: CHGINH: %d, FC: %d, OTD: %d, OTC: %d, SLEEP: %d, OCVFAIL: %d, OCVCOMP: %d, FD: %d\r\n",
+ battery_status.CHGINH,
+ battery_status.FC,
+ battery_status.OTD,
+ battery_status.OTC,
+ battery_status.SLEEP,
+ battery_status.OCVFAIL,
+ battery_status.OCVCOMP,
+ battery_status.FD);
// Battery status register, part 2
printf(
- "bq27220: DSG: %d, SYSDWN: %d, TDA: %d, BATTPRES: %d, AUTH_GD: %d, OCVGD: %d, TCA: %d, RSVD: %d\r\n",
- battery_status.DSG, battery_status.SYSDWN, battery_status.TDA,
- battery_status.BATTPRES, battery_status.AUTH_GD, battery_status.OCVGD,
- battery_status.TCA, battery_status.RSVD
- );
+ "bq27220: DSG: %d, SYSDWN: %d, TDA: %d, BATTPRES: %d, AUTH_GD: %d, OCVGD: %d, TCA: %d, RSVD: %d\r\n",
+ battery_status.DSG,
+ battery_status.SYSDWN,
+ battery_status.TDA,
+ battery_status.BATTPRES,
+ battery_status.AUTH_GD,
+ battery_status.OCVGD,
+ battery_status.TCA,
+ battery_status.RSVD);
// Voltage and current info
printf(
"bq27220: Full capacity: %dmAh, Design capacity: %dmAh, Remaining capacity: %dmAh, State of Charge: %d%%, State of health: %d%%\r\n",
- bq27220_get_full_charge_capacity(&furi_hal_i2c_handle_power), bq27220_get_design_capacity(&furi_hal_i2c_handle_power), bq27220_get_remaining_capacity(&furi_hal_i2c_handle_power),
- bq27220_get_state_of_charge(&furi_hal_i2c_handle_power), bq27220_get_state_of_health(&furi_hal_i2c_handle_power)
- );
+ bq27220_get_full_charge_capacity(&furi_hal_i2c_handle_power),
+ bq27220_get_design_capacity(&furi_hal_i2c_handle_power),
+ bq27220_get_remaining_capacity(&furi_hal_i2c_handle_power),
+ bq27220_get_state_of_charge(&furi_hal_i2c_handle_power),
+ bq27220_get_state_of_health(&furi_hal_i2c_handle_power));
printf(
"bq27220: Voltage: %dmV, Current: %dmA, Temperature: %dC\r\n",
- bq27220_get_voltage(&furi_hal_i2c_handle_power), bq27220_get_current(&furi_hal_i2c_handle_power), (int)furi_hal_power_get_battery_temperature_internal(FuriHalPowerICFuelGauge)
- );
+ bq27220_get_voltage(&furi_hal_i2c_handle_power),
+ bq27220_get_current(&furi_hal_i2c_handle_power),
+ (int)furi_hal_power_get_battery_temperature_internal(FuriHalPowerICFuelGauge));
}
printf(
"bq25896: VBUS: %d, VSYS: %d, VBAT: %d, Current: %d, NTC: %ldm%%\r\n",
- bq25896_get_vbus_voltage(&furi_hal_i2c_handle_power), bq25896_get_vsys_voltage(&furi_hal_i2c_handle_power),
- bq25896_get_vbat_voltage(&furi_hal_i2c_handle_power), bq25896_get_vbat_current(&furi_hal_i2c_handle_power),
- bq25896_get_ntc_mpct(&furi_hal_i2c_handle_power)
- );
+ bq25896_get_vbus_voltage(&furi_hal_i2c_handle_power),
+ bq25896_get_vsys_voltage(&furi_hal_i2c_handle_power),
+ bq25896_get_vbat_voltage(&furi_hal_i2c_handle_power),
+ bq25896_get_vbat_current(&furi_hal_i2c_handle_power),
+ bq25896_get_ntc_mpct(&furi_hal_i2c_handle_power));
furi_hal_i2c_release(&furi_hal_i2c_handle_power);
}
-void furi_hal_power_enable_external_3_3v(){
+void furi_hal_power_enable_external_3_3v() {
LL_GPIO_SetOutputPin(PERIPH_POWER_GPIO_Port, PERIPH_POWER_Pin);
}
-void furi_hal_power_disable_external_3_3v(){
+void furi_hal_power_disable_external_3_3v() {
LL_GPIO_ResetOutputPin(PERIPH_POWER_GPIO_Port, PERIPH_POWER_Pin);
}
@@ -350,7 +370,7 @@ void furi_hal_power_suppress_charge_enter() {
furi_hal_power.suppress_charge++;
xTaskResumeAll();
- if (disable_charging) {
+ if(disable_charging) {
furi_hal_i2c_acquire(&furi_hal_i2c_handle_power);
bq25896_disable_charging(&furi_hal_i2c_handle_power);
furi_hal_i2c_release(&furi_hal_i2c_handle_power);
@@ -363,7 +383,7 @@ void furi_hal_power_suppress_charge_exit() {
bool enable_charging = furi_hal_power.suppress_charge == 0;
xTaskResumeAll();
- if (enable_charging) {
+ if(enable_charging) {
furi_hal_i2c_acquire(&furi_hal_i2c_handle_power);
bq25896_enable_charging(&furi_hal_i2c_handle_power);
furi_hal_i2c_release(&furi_hal_i2c_handle_power);
diff --git a/firmware/targets/f7/furi-hal/furi-hal-pwm.c b/firmware/targets/f6/furi_hal/furi_hal_pwm.c
index 972d28ba..1be4738d 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-pwm.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_pwm.c
@@ -1,4 +1,4 @@
-#include "furi-hal-pwm.h"
+#include "furi_hal_pwm.h"
void hal_pwm_set(float value, float freq, TIM_HandleTypeDef* tim, uint32_t channel) {
tim->Init.CounterMode = TIM_COUNTERMODE_UP;
@@ -47,4 +47,3 @@ void hal_pwm_stop(TIM_HandleTypeDef* tim, uint32_t channel) {
void hal_pwmn_stop(TIM_HandleTypeDef* tim, uint32_t channel) {
HAL_TIMEx_PWMN_Stop(tim, channel);
}
-
diff --git a/firmware/targets/f6/furi-hal/furi-hal-pwm.h b/firmware/targets/f6/furi_hal/furi_hal_pwm.h
index 58b5701e..58b5701e 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-pwm.h
+++ b/firmware/targets/f6/furi_hal/furi_hal_pwm.h
diff --git a/firmware/targets/f7/furi-hal/furi-hal-random.c b/firmware/targets/f6/furi_hal/furi_hal_random.c
index a7bc3a31..5dfda2b2 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-random.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_random.c
@@ -1,6 +1,6 @@
-#include "furi-hal-random.h"
+#include "furi_hal_random.h"
#include <furi.h>
-#include <furi-hal.h>
+#include <furi_hal.h>
#include <stm32wbxx_ll_rng.h>
#include <stm32wbxx_ll_hsem.h>
@@ -8,13 +8,14 @@
#include <hw_conf.h>
uint32_t furi_hal_random_get() {
-
- while( LL_HSEM_1StepLock(HSEM, CFG_HW_RNG_SEMID));
+ while(LL_HSEM_1StepLock(HSEM, CFG_HW_RNG_SEMID))
+ ;
LL_RNG_Enable(RNG);
- while (!LL_RNG_IsActiveFlag_DRDY(RNG));
+ while(!LL_RNG_IsActiveFlag_DRDY(RNG))
+ ;
- if ((LL_RNG_IsActiveFlag_CECS(RNG)) || (LL_RNG_IsActiveFlag_SECS(RNG))) {
+ if((LL_RNG_IsActiveFlag_CECS(RNG)) || (LL_RNG_IsActiveFlag_SECS(RNG))) {
furi_crash("TRNG error");
}
@@ -27,20 +28,21 @@ uint32_t furi_hal_random_get() {
}
void furi_hal_random_fill_buf(uint8_t* buf, uint32_t len) {
-
- while( LL_HSEM_1StepLock(HSEM, CFG_HW_RNG_SEMID));
+ while(LL_HSEM_1StepLock(HSEM, CFG_HW_RNG_SEMID))
+ ;
LL_RNG_Enable(RNG);
- for (uint32_t i = 0; i < len; i+= 4) {
- while (!LL_RNG_IsActiveFlag_DRDY(RNG));
+ for(uint32_t i = 0; i < len; i += 4) {
+ while(!LL_RNG_IsActiveFlag_DRDY(RNG))
+ ;
- if ((LL_RNG_IsActiveFlag_CECS(RNG)) || (LL_RNG_IsActiveFlag_SECS(RNG))) {
+ if((LL_RNG_IsActiveFlag_CECS(RNG)) || (LL_RNG_IsActiveFlag_SECS(RNG))) {
furi_crash("TRNG error");
}
uint32_t random_val = LL_RNG_ReadRandData32(RNG);
- uint8_t len_cur = ((i+4) < len) ? (4) : (len-i);
+ uint8_t len_cur = ((i + 4) < len) ? (4) : (len - i);
memcpy(&buf[i], &random_val, len_cur);
}
diff --git a/firmware/targets/f6/furi-hal/furi-hal-resources.c b/firmware/targets/f6/furi_hal/furi_hal_resources.c
index 21f6f3fa..670fd555 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-resources.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_resources.c
@@ -1,17 +1,38 @@
-#include <furi-hal-resources.h>
+#include <furi_hal_resources.h>
#include "main.h"
#include <furi.h>
const InputPin input_pins[] = {
- {.port = BUTTON_UP_GPIO_Port, .pin = BUTTON_UP_Pin, .key = InputKeyUp, .inverted = true, .name="Up"},
- {.port = BUTTON_DOWN_GPIO_Port, .pin = BUTTON_DOWN_Pin, .key = InputKeyDown, .inverted = true, .name="Down"},
+ {.port = BUTTON_UP_GPIO_Port,
+ .pin = BUTTON_UP_Pin,
+ .key = InputKeyUp,
+ .inverted = true,
+ .name = "Up"},
+ {.port = BUTTON_DOWN_GPIO_Port,
+ .pin = BUTTON_DOWN_Pin,
+ .key = InputKeyDown,
+ .inverted = true,
+ .name = "Down"},
{.port = BUTTON_RIGHT_GPIO_Port,
.pin = BUTTON_RIGHT_Pin,
.key = InputKeyRight,
- .inverted = true, .name="Right"},
- {.port = BUTTON_LEFT_GPIO_Port, .pin = BUTTON_LEFT_Pin, .key = InputKeyLeft, .inverted = true, .name="Left"},
- {.port = BUTTON_OK_GPIO_Port, .pin = BUTTON_OK_Pin, .key = InputKeyOk, .inverted = false, .name="Ok"},
- {.port = BUTTON_BACK_GPIO_Port, .pin = BUTTON_BACK_Pin, .key = InputKeyBack, .inverted = true, .name="Back"},
+ .inverted = true,
+ .name = "Right"},
+ {.port = BUTTON_LEFT_GPIO_Port,
+ .pin = BUTTON_LEFT_Pin,
+ .key = InputKeyLeft,
+ .inverted = true,
+ .name = "Left"},
+ {.port = BUTTON_OK_GPIO_Port,
+ .pin = BUTTON_OK_Pin,
+ .key = InputKeyOk,
+ .inverted = false,
+ .name = "Ok"},
+ {.port = BUTTON_BACK_GPIO_Port,
+ .pin = BUTTON_BACK_Pin,
+ .key = InputKeyBack,
+ .inverted = true,
+ .name = "Back"},
};
const size_t input_pins_count = sizeof(input_pins) / sizeof(InputPin);
diff --git a/firmware/targets/f6/furi-hal/furi-hal-resources.h b/firmware/targets/f6/furi_hal/furi_hal_resources.h
index feec0451..f55cf44e 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-resources.h
+++ b/firmware/targets/f6/furi_hal/furi_hal_resources.h
@@ -83,7 +83,6 @@ extern const GpioPin gpio_usart_rx;
extern const GpioPin gpio_i2c_power_sda;
extern const GpioPin gpio_i2c_power_scl;
-
#ifdef __cplusplus
}
#endif
diff --git a/firmware/targets/f6/furi-hal/furi-hal-rfid.c b/firmware/targets/f6/furi_hal/furi_hal_rfid.c
index c14d48fd..22de94cb 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-rfid.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_rfid.c
@@ -1,6 +1,6 @@
-#include <furi-hal-rfid.h>
-#include <furi-hal-ibutton.h>
-#include <furi-hal-resources.h>
+#include <furi_hal_rfid.h>
+#include <furi_hal_ibutton.h>
+#include <furi_hal_resources.h>
#include <stm32wbxx_ll_tim.h>
diff --git a/firmware/targets/f7/furi-hal/furi-hal-rtc.c b/firmware/targets/f6/furi_hal/furi_hal_rtc.c
index a13913a1..4d45c748 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-rtc.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_rtc.c
@@ -1,4 +1,4 @@
-#include <furi-hal-rtc.h>
+#include <furi_hal_rtc.h>
#include <stm32wbxx_ll_rcc.h>
#include <stm32wbxx_ll_rtc.h>
@@ -7,8 +7,8 @@
#define TAG "FuriHalRtc"
typedef struct {
- uint8_t log_level:4;
- uint8_t log_reserved:4;
+ uint8_t log_level : 4;
+ uint8_t log_reserved : 4;
uint8_t flags;
uint16_t reserved;
} DeveloperReg;
@@ -86,31 +86,33 @@ void furi_hal_rtc_set_datetime(FuriHalRtcDateTime* datetime) {
/* Enter Initialization mode and wait for INIT flag to be set */
LL_RTC_EnableInitMode(RTC);
- while(!LL_RTC_IsActiveFlag_INIT(RTC)) {}
+ while(!LL_RTC_IsActiveFlag_INIT(RTC)) {
+ }
/* Set time */
- LL_RTC_TIME_Config(RTC,
+ LL_RTC_TIME_Config(
+ RTC,
LL_RTC_TIME_FORMAT_AM_OR_24,
__LL_RTC_CONVERT_BIN2BCD(datetime->hour),
__LL_RTC_CONVERT_BIN2BCD(datetime->minute),
- __LL_RTC_CONVERT_BIN2BCD(datetime->second)
- );
+ __LL_RTC_CONVERT_BIN2BCD(datetime->second));
/* Set date */
- LL_RTC_DATE_Config(RTC,
+ LL_RTC_DATE_Config(
+ RTC,
datetime->weekday,
__LL_RTC_CONVERT_BIN2BCD(datetime->day),
__LL_RTC_CONVERT_BIN2BCD(datetime->month),
- __LL_RTC_CONVERT_BIN2BCD(datetime->year - 2000)
- );
+ __LL_RTC_CONVERT_BIN2BCD(datetime->year - 2000));
/* Exit Initialization mode */
LL_RTC_DisableInitMode(RTC);
/* If RTC_CR_BYPSHAD bit = 0, wait for synchro else this check is not needed */
- if (!LL_RTC_IsShadowRegBypassEnabled(RTC)) {
+ if(!LL_RTC_IsShadowRegBypassEnabled(RTC)) {
LL_RTC_ClearFlag_RS(RTC);
- while(!LL_RTC_IsActiveFlag_RS(RTC)) {};
+ while(!LL_RTC_IsActiveFlag_RS(RTC)) {
+ };
}
/* Enable write protection */
@@ -123,9 +125,9 @@ void furi_hal_rtc_get_datetime(FuriHalRtcDateTime* datetime) {
uint32_t time = LL_RTC_TIME_Get(RTC); // 0x00HHMMSS
uint32_t date = LL_RTC_DATE_Get(RTC); // 0xWWDDMMYY
- datetime->second = __LL_RTC_CONVERT_BCD2BIN((time>>0) & 0xFF);
- datetime->minute = __LL_RTC_CONVERT_BCD2BIN((time>>8) & 0xFF);
- datetime->hour = __LL_RTC_CONVERT_BCD2BIN((time>>16) & 0xFF);
+ datetime->second = __LL_RTC_CONVERT_BCD2BIN((time >> 0) & 0xFF);
+ datetime->minute = __LL_RTC_CONVERT_BCD2BIN((time >> 8) & 0xFF);
+ datetime->hour = __LL_RTC_CONVERT_BCD2BIN((time >> 16) & 0xFF);
datetime->year = __LL_RTC_CONVERT_BCD2BIN((date >> 0) & 0xFF) + 2000;
datetime->month = __LL_RTC_CONVERT_BCD2BIN((date >> 8) & 0xFF);
datetime->day = __LL_RTC_CONVERT_BCD2BIN((date >> 16) & 0xFF);
diff --git a/firmware/targets/f6/furi-hal/furi-hal-sd.c b/firmware/targets/f6/furi_hal/furi_hal_sd.c
index 82549e16..c62b4aa5 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-sd.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_sd.c
@@ -1,4 +1,4 @@
-#include "furi-hal-sd.h"
+#include "furi_hal_sd.h"
#include <stm32wbxx_ll_gpio.h>
#include <furi.h>
diff --git a/firmware/targets/f7/furi-hal/furi-hal-spi.c b/firmware/targets/f6/furi_hal/furi_hal_spi.c
index a0ce7166..8af2879f 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-spi.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_spi.c
@@ -1,5 +1,5 @@
-#include "furi-hal-spi.h"
-#include "furi-hal-resources.h"
+#include "furi_hal_spi.h"
+#include "furi_hal_resources.h"
#include <stdbool.h>
#include <string.h>
@@ -70,14 +70,20 @@ void furi_hal_spi_release(FuriHalSpiBusHandle* handle) {
}
static void furi_hal_spi_bus_end_txrx(FuriHalSpiBusHandle* handle, uint32_t timeout) {
- while(LL_SPI_GetTxFIFOLevel(handle->bus->spi) != LL_SPI_TX_FIFO_EMPTY);
- while(LL_SPI_IsActiveFlag_BSY(handle->bus->spi));
+ while(LL_SPI_GetTxFIFOLevel(handle->bus->spi) != LL_SPI_TX_FIFO_EMPTY)
+ ;
+ while(LL_SPI_IsActiveFlag_BSY(handle->bus->spi))
+ ;
while(LL_SPI_GetRxFIFOLevel(handle->bus->spi) != LL_SPI_RX_FIFO_EMPTY) {
LL_SPI_ReceiveData8(handle->bus->spi);
}
}
-bool furi_hal_spi_bus_rx(FuriHalSpiBusHandle* handle, uint8_t* buffer, size_t size, uint32_t timeout) {
+bool furi_hal_spi_bus_rx(
+ FuriHalSpiBusHandle* handle,
+ uint8_t* buffer,
+ size_t size,
+ uint32_t timeout) {
furi_assert(handle);
furi_assert(handle->bus->current_handle == handle);
furi_assert(buffer);
@@ -86,7 +92,11 @@ bool furi_hal_spi_bus_rx(FuriHalSpiBusHandle* handle, uint8_t* buffer, size_t si
return furi_hal_spi_bus_trx(handle, buffer, buffer, size, timeout);
}
-bool furi_hal_spi_bus_tx(FuriHalSpiBusHandle* handle, uint8_t* buffer, size_t size, uint32_t timeout) {
+bool furi_hal_spi_bus_tx(
+ FuriHalSpiBusHandle* handle,
+ uint8_t* buffer,
+ size_t size,
+ uint32_t timeout) {
furi_assert(handle);
furi_assert(handle->bus->current_handle == handle);
furi_assert(buffer);
@@ -94,7 +104,7 @@ bool furi_hal_spi_bus_tx(FuriHalSpiBusHandle* handle, uint8_t* buffer, size_t si
bool ret = true;
while(size > 0) {
- if (LL_SPI_IsActiveFlag_TXE(handle->bus->spi)) {
+ if(LL_SPI_IsActiveFlag_TXE(handle->bus->spi)) {
LL_SPI_TransmitData8(handle->bus->spi, *buffer);
buffer++;
size--;
@@ -107,7 +117,12 @@ bool furi_hal_spi_bus_tx(FuriHalSpiBusHandle* handle, uint8_t* buffer, size_t si
return ret;
}
-bool furi_hal_spi_bus_trx(FuriHalSpiBusHandle* handle, uint8_t* tx_buffer, uint8_t* rx_buffer, size_t size, uint32_t timeout) {
+bool furi_hal_spi_bus_trx(
+ FuriHalSpiBusHandle* handle,
+ uint8_t* tx_buffer,
+ uint8_t* rx_buffer,
+ size_t size,
+ uint32_t timeout) {
furi_assert(handle);
furi_assert(handle->bus->current_handle == handle);
furi_assert(tx_buffer);
@@ -125,7 +140,7 @@ bool furi_hal_spi_bus_trx(FuriHalSpiBusHandle* handle, uint8_t* tx_buffer, uint8
tx_size--;
tx_allowed = false;
}
-
+
if(LL_SPI_IsActiveFlag_RXNE(handle->bus->spi)) {
*rx_buffer = LL_SPI_ReceiveData8(handle->bus->spi);
rx_buffer++;
diff --git a/firmware/targets/f7/furi-hal/furi-hal-spi-config.c b/firmware/targets/f6/furi_hal/furi_hal_spi_config.c
index e84f0368..eb7491cd 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-spi-config.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_spi_config.c
@@ -1,5 +1,5 @@
-#include <furi-hal-spi-config.h>
-#include <furi-hal-resources.h>
+#include <furi_hal_spi_config.h>
+#include <furi_hal_resources.h>
/* SPI Presets */
@@ -73,24 +73,24 @@ const LL_SPI_InitTypeDef furi_hal_spi_preset_1edge_low_2m = {
osMutexId_t furi_hal_spi_bus_r_mutex = NULL;
static void furi_hal_spi_bus_r_event_callback(FuriHalSpiBus* bus, FuriHalSpiBusEvent event) {
- if (event == FuriHalSpiBusEventInit) {
+ if(event == FuriHalSpiBusEventInit) {
furi_hal_spi_bus_r_mutex = osMutexNew(NULL);
FURI_CRITICAL_ENTER();
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SPI1);
LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_SPI1);
FURI_CRITICAL_EXIT();
bus->current_handle = NULL;
- } else if (event == FuriHalSpiBusEventDeinit) {
+ } else if(event == FuriHalSpiBusEventDeinit) {
furi_check(osMutexDelete(furi_hal_spi_bus_r_mutex));
- } else if (event == FuriHalSpiBusEventLock) {
+ } else if(event == FuriHalSpiBusEventLock) {
furi_check(osMutexAcquire(furi_hal_spi_bus_r_mutex, osWaitForever) == osOK);
- } else if (event == FuriHalSpiBusEventUnlock) {
+ } else if(event == FuriHalSpiBusEventUnlock) {
furi_check(osMutexRelease(furi_hal_spi_bus_r_mutex) == osOK);
- } else if (event == FuriHalSpiBusEventActivate) {
+ } else if(event == FuriHalSpiBusEventActivate) {
FURI_CRITICAL_ENTER();
LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_SPI1);
FURI_CRITICAL_EXIT();
- } else if (event == FuriHalSpiBusEventDeactivate) {
+ } else if(event == FuriHalSpiBusEventDeactivate) {
FURI_CRITICAL_ENTER();
LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_SPI1);
FURI_CRITICAL_EXIT();
@@ -98,31 +98,31 @@ static void furi_hal_spi_bus_r_event_callback(FuriHalSpiBus* bus, FuriHalSpiBusE
}
FuriHalSpiBus furi_hal_spi_bus_r = {
- .spi=SPI1,
+ .spi = SPI1,
.callback = furi_hal_spi_bus_r_event_callback,
};
osMutexId_t furi_hal_spi_bus_d_mutex = NULL;
static void furi_hal_spi_bus_d_event_callback(FuriHalSpiBus* bus, FuriHalSpiBusEvent event) {
- if (event == FuriHalSpiBusEventInit) {
+ if(event == FuriHalSpiBusEventInit) {
furi_hal_spi_bus_d_mutex = osMutexNew(NULL);
FURI_CRITICAL_ENTER();
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_SPI2);
LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_SPI2);
FURI_CRITICAL_EXIT();
bus->current_handle = NULL;
- } else if (event == FuriHalSpiBusEventDeinit) {
+ } else if(event == FuriHalSpiBusEventDeinit) {
furi_check(osMutexDelete(furi_hal_spi_bus_d_mutex));
- } else if (event == FuriHalSpiBusEventLock) {
+ } else if(event == FuriHalSpiBusEventLock) {
furi_check(osMutexAcquire(furi_hal_spi_bus_d_mutex, osWaitForever) == osOK);
- } else if (event == FuriHalSpiBusEventUnlock) {
+ } else if(event == FuriHalSpiBusEventUnlock) {
furi_check(osMutexRelease(furi_hal_spi_bus_d_mutex) == osOK);
- } else if (event == FuriHalSpiBusEventActivate) {
+ } else if(event == FuriHalSpiBusEventActivate) {
FURI_CRITICAL_ENTER();
LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_SPI2);
FURI_CRITICAL_EXIT();
- } else if (event == FuriHalSpiBusEventDeactivate) {
+ } else if(event == FuriHalSpiBusEventDeactivate) {
FURI_CRITICAL_ENTER();
LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_SPI2);
FURI_CRITICAL_EXIT();
@@ -130,30 +130,48 @@ static void furi_hal_spi_bus_d_event_callback(FuriHalSpiBus* bus, FuriHalSpiBusE
}
FuriHalSpiBus furi_hal_spi_bus_d = {
- .spi=SPI2,
+ .spi = SPI2,
.callback = furi_hal_spi_bus_d_event_callback,
};
/* SPI Bus Handles */
-inline static void furi_hal_spi_bus_r_handle_event_callback(FuriHalSpiBusHandle* handle, FuriHalSpiBusHandleEvent event, const LL_SPI_InitTypeDef* preset) {
- if (event == FuriHalSpiBusHandleEventInit) {
+inline static void furi_hal_spi_bus_r_handle_event_callback(
+ FuriHalSpiBusHandle* handle,
+ FuriHalSpiBusHandleEvent event,
+ const LL_SPI_InitTypeDef* preset) {
+ if(event == FuriHalSpiBusHandleEventInit) {
hal_gpio_write(handle->cs, true);
hal_gpio_init(handle->cs, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh);
- } else if (event == FuriHalSpiBusHandleEventDeinit) {
+ } else if(event == FuriHalSpiBusHandleEventDeinit) {
hal_gpio_write(handle->cs, true);
hal_gpio_init(handle->cs, GpioModeAnalog, GpioPullNo, GpioSpeedLow);
- } else if (event == FuriHalSpiBusHandleEventActivate) {
+ } else if(event == FuriHalSpiBusHandleEventActivate) {
LL_SPI_Init(handle->bus->spi, (LL_SPI_InitTypeDef*)preset);
LL_SPI_SetRxFIFOThreshold(handle->bus->spi, LL_SPI_RX_FIFO_TH_QUARTER);
LL_SPI_Enable(handle->bus->spi);
- hal_gpio_init_ex(handle->miso, GpioModeAltFunctionPushPull, GpioPullNo, GpioSpeedVeryHigh, GpioAltFn5SPI1);
- hal_gpio_init_ex(handle->mosi, GpioModeAltFunctionPushPull, GpioPullNo, GpioSpeedVeryHigh, GpioAltFn5SPI1);
- hal_gpio_init_ex(handle->sck, GpioModeAltFunctionPushPull, GpioPullNo, GpioSpeedVeryHigh, GpioAltFn5SPI1);
+ hal_gpio_init_ex(
+ handle->miso,
+ GpioModeAltFunctionPushPull,
+ GpioPullNo,
+ GpioSpeedVeryHigh,
+ GpioAltFn5SPI1);
+ hal_gpio_init_ex(
+ handle->mosi,
+ GpioModeAltFunctionPushPull,
+ GpioPullNo,
+ GpioSpeedVeryHigh,
+ GpioAltFn5SPI1);
+ hal_gpio_init_ex(
+ handle->sck,
+ GpioModeAltFunctionPushPull,
+ GpioPullNo,
+ GpioSpeedVeryHigh,
+ GpioAltFn5SPI1);
hal_gpio_write(handle->cs, false);
- } else if (event == FuriHalSpiBusHandleEventDeactivate) {
+ } else if(event == FuriHalSpiBusHandleEventDeactivate) {
hal_gpio_write(handle->cs, true);
hal_gpio_init(handle->miso, GpioModeAnalog, GpioPullNo, GpioSpeedLow);
@@ -164,103 +182,133 @@ inline static void furi_hal_spi_bus_r_handle_event_callback(FuriHalSpiBusHandle*
}
}
-static void furi_hal_spi_bus_handle_subghz_event_callback(FuriHalSpiBusHandle* handle, FuriHalSpiBusHandleEvent event) {
+static void furi_hal_spi_bus_handle_subghz_event_callback(
+ FuriHalSpiBusHandle* handle,
+ FuriHalSpiBusHandleEvent event) {
furi_hal_spi_bus_r_handle_event_callback(handle, event, &furi_hal_spi_preset_1edge_low_8m);
}
FuriHalSpiBusHandle furi_hal_spi_bus_handle_subghz = {
- .bus=&furi_hal_spi_bus_r,
- .callback=furi_hal_spi_bus_handle_subghz_event_callback,
- .miso=&gpio_spi_r_miso,
- .mosi=&gpio_spi_r_mosi,
- .sck=&gpio_spi_r_sck,
- .cs=&gpio_subghz_cs,
+ .bus = &furi_hal_spi_bus_r,
+ .callback = furi_hal_spi_bus_handle_subghz_event_callback,
+ .miso = &gpio_spi_r_miso,
+ .mosi = &gpio_spi_r_mosi,
+ .sck = &gpio_spi_r_sck,
+ .cs = &gpio_subghz_cs,
};
-static void furi_hal_spi_bus_handle_nfc_event_callback(FuriHalSpiBusHandle* handle, FuriHalSpiBusHandleEvent event) {
+static void furi_hal_spi_bus_handle_nfc_event_callback(
+ FuriHalSpiBusHandle* handle,
+ FuriHalSpiBusHandleEvent event) {
furi_hal_spi_bus_r_handle_event_callback(handle, event, &furi_hal_spi_preset_2edge_low_8m);
}
FuriHalSpiBusHandle furi_hal_spi_bus_handle_nfc = {
- .bus=&furi_hal_spi_bus_r,
- .callback=furi_hal_spi_bus_handle_nfc_event_callback,
- .miso=&gpio_spi_r_miso,
- .mosi=&gpio_spi_r_mosi,
- .sck=&gpio_spi_r_sck,
- .cs=&gpio_nfc_cs,
+ .bus = &furi_hal_spi_bus_r,
+ .callback = furi_hal_spi_bus_handle_nfc_event_callback,
+ .miso = &gpio_spi_r_miso,
+ .mosi = &gpio_spi_r_mosi,
+ .sck = &gpio_spi_r_sck,
+ .cs = &gpio_nfc_cs,
};
-static void furi_hal_spi_bus_handle_external_event_callback(FuriHalSpiBusHandle* handle, FuriHalSpiBusHandleEvent event) {
+static void furi_hal_spi_bus_handle_external_event_callback(
+ FuriHalSpiBusHandle* handle,
+ FuriHalSpiBusHandleEvent event) {
furi_hal_spi_bus_r_handle_event_callback(handle, event, &furi_hal_spi_preset_1edge_low_2m);
}
FuriHalSpiBusHandle furi_hal_spi_bus_handle_external = {
- .bus=&furi_hal_spi_bus_r,
- .callback=furi_hal_spi_bus_handle_external_event_callback,
- .miso=&gpio_ext_pa6,
- .mosi=&gpio_ext_pa7,
- .sck=&gpio_ext_pb3,
- .cs=&gpio_ext_pa4,
+ .bus = &furi_hal_spi_bus_r,
+ .callback = furi_hal_spi_bus_handle_external_event_callback,
+ .miso = &gpio_ext_pa6,
+ .mosi = &gpio_ext_pa7,
+ .sck = &gpio_ext_pb3,
+ .cs = &gpio_ext_pa4,
};
-inline static void furi_hal_spi_bus_d_handle_event_callback(FuriHalSpiBusHandle* handle, FuriHalSpiBusHandleEvent event, const LL_SPI_InitTypeDef* preset) {
- if (event == FuriHalSpiBusHandleEventInit) {
+inline static void furi_hal_spi_bus_d_handle_event_callback(
+ FuriHalSpiBusHandle* handle,
+ FuriHalSpiBusHandleEvent event,
+ const LL_SPI_InitTypeDef* preset) {
+ if(event == FuriHalSpiBusHandleEventInit) {
hal_gpio_write(handle->cs, true);
hal_gpio_init(handle->cs, GpioModeOutputPushPull, GpioPullUp, GpioSpeedVeryHigh);
- hal_gpio_init_ex(handle->miso, GpioModeAltFunctionPushPull, GpioPullNo, GpioSpeedVeryHigh, GpioAltFn5SPI2);
- hal_gpio_init_ex(handle->mosi, GpioModeAltFunctionPushPull, GpioPullNo, GpioSpeedVeryHigh, GpioAltFn5SPI2);
- hal_gpio_init_ex(handle->sck, GpioModeAltFunctionPushPull, GpioPullNo, GpioSpeedVeryHigh, GpioAltFn5SPI2);
-
- } else if (event == FuriHalSpiBusHandleEventDeinit) {
+ hal_gpio_init_ex(
+ handle->miso,
+ GpioModeAltFunctionPushPull,
+ GpioPullNo,
+ GpioSpeedVeryHigh,
+ GpioAltFn5SPI2);
+ hal_gpio_init_ex(
+ handle->mosi,
+ GpioModeAltFunctionPushPull,
+ GpioPullNo,
+ GpioSpeedVeryHigh,
+ GpioAltFn5SPI2);
+ hal_gpio_init_ex(
+ handle->sck,
+ GpioModeAltFunctionPushPull,
+ GpioPullNo,
+ GpioSpeedVeryHigh,
+ GpioAltFn5SPI2);
+
+ } else if(event == FuriHalSpiBusHandleEventDeinit) {
hal_gpio_write(handle->cs, true);
hal_gpio_init(handle->cs, GpioModeAnalog, GpioPullUp, GpioSpeedLow);
- } else if (event == FuriHalSpiBusHandleEventActivate) {
+ } else if(event == FuriHalSpiBusHandleEventActivate) {
LL_SPI_Init(handle->bus->spi, (LL_SPI_InitTypeDef*)preset);
LL_SPI_SetRxFIFOThreshold(handle->bus->spi, LL_SPI_RX_FIFO_TH_QUARTER);
LL_SPI_Enable(handle->bus->spi);
hal_gpio_write(handle->cs, false);
- } else if (event == FuriHalSpiBusHandleEventDeactivate) {
+ } else if(event == FuriHalSpiBusHandleEventDeactivate) {
hal_gpio_write(handle->cs, true);
LL_SPI_Disable(handle->bus->spi);
}
}
-static void furi_hal_spi_bus_handle_display_event_callback(FuriHalSpiBusHandle* handle, FuriHalSpiBusHandleEvent event) {
+static void furi_hal_spi_bus_handle_display_event_callback(
+ FuriHalSpiBusHandle* handle,
+ FuriHalSpiBusHandleEvent event) {
furi_hal_spi_bus_d_handle_event_callback(handle, event, &furi_hal_spi_preset_1edge_low_4m);
}
FuriHalSpiBusHandle furi_hal_spi_bus_handle_display = {
- .bus=&furi_hal_spi_bus_d,
- .callback=furi_hal_spi_bus_handle_display_event_callback,
- .miso=&gpio_spi_d_miso,
- .mosi=&gpio_spi_d_mosi,
- .sck=&gpio_spi_d_sck,
- .cs=&gpio_display_cs,
+ .bus = &furi_hal_spi_bus_d,
+ .callback = furi_hal_spi_bus_handle_display_event_callback,
+ .miso = &gpio_spi_d_miso,
+ .mosi = &gpio_spi_d_mosi,
+ .sck = &gpio_spi_d_sck,
+ .cs = &gpio_display_cs,
};
-static void furi_hal_spi_bus_handle_sd_fast_event_callback(FuriHalSpiBusHandle* handle, FuriHalSpiBusHandleEvent event) {
+static void furi_hal_spi_bus_handle_sd_fast_event_callback(
+ FuriHalSpiBusHandle* handle,
+ FuriHalSpiBusHandleEvent event) {
furi_hal_spi_bus_d_handle_event_callback(handle, event, &furi_hal_spi_preset_1edge_low_16m);
}
FuriHalSpiBusHandle furi_hal_spi_bus_handle_sd_fast = {
- .bus=&furi_hal_spi_bus_d,
- .callback=furi_hal_spi_bus_handle_sd_fast_event_callback,
- .miso=&gpio_spi_d_miso,
- .mosi=&gpio_spi_d_mosi,
- .sck=&gpio_spi_d_sck,
- .cs=&gpio_sdcard_cs,
+ .bus = &furi_hal_spi_bus_d,
+ .callback = furi_hal_spi_bus_handle_sd_fast_event_callback,
+ .miso = &gpio_spi_d_miso,
+ .mosi = &gpio_spi_d_mosi,
+ .sck = &gpio_spi_d_sck,
+ .cs = &gpio_sdcard_cs,
};
-static void furi_hal_spi_bus_handle_sd_slow_event_callback(FuriHalSpiBusHandle* handle, FuriHalSpiBusHandleEvent event) {
+static void furi_hal_spi_bus_handle_sd_slow_event_callback(
+ FuriHalSpiBusHandle* handle,
+ FuriHalSpiBusHandleEvent event) {
furi_hal_spi_bus_d_handle_event_callback(handle, event, &furi_hal_spi_preset_1edge_low_2m);
}
FuriHalSpiBusHandle furi_hal_spi_bus_handle_sd_slow = {
- .bus=&furi_hal_spi_bus_d,
- .callback=furi_hal_spi_bus_handle_sd_slow_event_callback,
- .miso=&gpio_spi_d_miso,
- .mosi=&gpio_spi_d_mosi,
- .sck=&gpio_spi_d_sck,
- .cs=&gpio_sdcard_cs,
+ .bus = &furi_hal_spi_bus_d,
+ .callback = furi_hal_spi_bus_handle_sd_slow_event_callback,
+ .miso = &gpio_spi_d_miso,
+ .mosi = &gpio_spi_d_mosi,
+ .sck = &gpio_spi_d_sck,
+ .cs = &gpio_sdcard_cs,
};
diff --git a/firmware/targets/f7/furi-hal/furi-hal-spi-config.h b/firmware/targets/f6/furi_hal/furi_hal_spi_config.h
index d483e625..3e4296a0 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-spi-config.h
+++ b/firmware/targets/f6/furi_hal/furi_hal_spi_config.h
@@ -1,6 +1,6 @@
#pragma once
-#include <furi-hal-spi-types.h>
+#include <furi_hal_spi_types.h>
#ifdef __cplusplus
extern "C" {
diff --git a/firmware/targets/f6/furi-hal/furi-hal-spi-types.h b/firmware/targets/f6/furi_hal/furi_hal_spi_types.h
index c7520f4a..1fb1c02b 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-spi-types.h
+++ b/firmware/targets/f6/furi_hal/furi_hal_spi_types.h
@@ -3,7 +3,7 @@
#include <stdint.h>
#include <stddef.h>
-#include <furi-hal-gpio.h>
+#include <furi_hal_gpio.h>
#include <stm32wbxx_ll_spi.h>
#include <stm32wbxx_ll_rcc.h>
@@ -45,7 +45,9 @@ typedef enum {
} FuriHalSpiBusHandleEvent;
/** FuriHal spi handle event callback */
-typedef void (*FuriHalSpiBusHandleEventCallback)(FuriHalSpiBusHandle* handle, FuriHalSpiBusHandleEvent event);
+typedef void (*FuriHalSpiBusHandleEventCallback)(
+ FuriHalSpiBusHandle* handle,
+ FuriHalSpiBusHandleEvent event);
/** FuriHal spi handle */
struct FuriHalSpiBusHandle {
diff --git a/firmware/targets/f7/furi-hal/furi-hal-subghz.c b/firmware/targets/f6/furi_hal/furi_hal_subghz.c
index ff5346c9..e2de0038 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-subghz.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_subghz.c
@@ -1,11 +1,11 @@
-#include "furi-hal-subghz.h"
-#include "furi-hal-version.h"
-#include "furi-hal-rtc.h"
-
-#include <furi-hal-gpio.h>
-#include <furi-hal-spi.h>
-#include <furi-hal-interrupt.h>
-#include <furi-hal-resources.h>
+#include "furi_hal_subghz.h"
+#include "furi_hal_version.h"
+#include "furi_hal_rtc.h"
+
+#include <furi_hal_gpio.h>
+#include <furi_hal_spi.h>
+#include <furi_hal_interrupt.h>
+#include <furi_hal_resources.h>
#include <furi.h>
#include <cc1101.h>
diff --git a/firmware/targets/f7/furi-hal/furi-hal-task.c b/firmware/targets/f6/furi_hal/furi_hal_task.c
index 433070d2..577586aa 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-task.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_task.c
@@ -1,4 +1,4 @@
-#include "furi-hal-task.h"
+#include "furi_hal_task.h"
//-----------------------------cmsis_os2.c-------------------------------
// helpers to get isr context
diff --git a/firmware/targets/f6/furi-hal/furi-hal-task.h b/firmware/targets/f6/furi_hal/furi_hal_task.h
index 8b157233..8b157233 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-task.h
+++ b/firmware/targets/f6/furi_hal/furi_hal_task.h
diff --git a/firmware/targets/f7/furi-hal/furi-hal-uart.c b/firmware/targets/f6/furi_hal/furi_hal_uart.c
index 92942a91..1ebba5d3 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-uart.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_uart.c
@@ -1,8 +1,8 @@
-#include <furi-hal-uart.h>
+#include <furi_hal_uart.h>
#include <stdbool.h>
#include <stm32wbxx_ll_lpuart.h>
#include <stm32wbxx_ll_usart.h>
-#include <furi-hal-resources.h>
+#include <furi_hal_resources.h>
#include <furi.h>
diff --git a/firmware/targets/f7/furi-hal/furi-hal-uart.h b/firmware/targets/f6/furi_hal/furi_hal_uart.h
index 53a45f1e..9224a0b2 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-uart.h
+++ b/firmware/targets/f6/furi_hal/furi_hal_uart.h
@@ -1,5 +1,5 @@
/**
- * @file furi-hal-uart.h
+ * @file furi_hal_uart.h
* @version 1.0
* @date 2021-11-19
*
diff --git a/firmware/targets/f6/furi-hal/furi-hal-usb.c b/firmware/targets/f6/furi_hal/furi_hal_usb.c
index 513c718c..59b37bbf 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-usb.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_usb.c
@@ -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.h>
#include "usb.h"
@@ -17,11 +17,11 @@ static const struct usb_string_descriptor dev_lang_desc = USB_ARRAY_DESC(USB_LAN
static uint32_t ubuf[0x20];
usbd_device udev;
-static usbd_respond usb_descriptor_get (usbd_ctlreq *req, void **address, uint16_t *length);
-static void susp_evt(usbd_device *dev, uint8_t event, uint8_t ep);
-static void wkup_evt(usbd_device *dev, uint8_t event, uint8_t ep);
+static usbd_respond usb_descriptor_get(usbd_ctlreq* req, void** address, uint16_t* length);
+static void susp_evt(usbd_device* dev, uint8_t event, uint8_t ep);
+static void wkup_evt(usbd_device* dev, uint8_t event, uint8_t ep);
-struct UsbCfg{
+struct UsbCfg {
osTimerId_t reconnect_tmr;
bool enabled;
bool connected;
@@ -31,10 +31,9 @@ static void furi_hal_usb_tmr_cb(void* context);
/* Low-level init */
void furi_hal_usb_init(void) {
-
LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
LL_PWR_EnableVddUSB();
-
+
GPIO_InitStruct.Pin = LL_GPIO_PIN_11 | LL_GPIO_PIN_12;
GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
@@ -59,18 +58,17 @@ void furi_hal_usb_init(void) {
}
void furi_hal_usb_set_config(UsbInterface* new_if) {
- if (new_if != usb_if_cur) {
- if (usb_config.enabled) {
+ if(new_if != usb_if_cur) {
+ if(usb_config.enabled) {
usb_if_next = new_if;
- if (usb_config.reconnect_tmr == NULL)
- usb_config.reconnect_tmr = osTimerNew(furi_hal_usb_tmr_cb, osTimerOnce, NULL, NULL);
+ if(usb_config.reconnect_tmr == NULL)
+ usb_config.reconnect_tmr =
+ osTimerNew(furi_hal_usb_tmr_cb, osTimerOnce, NULL, NULL);
furi_hal_usb_disable();
osTimerStart(usb_config.reconnect_tmr, USB_RECONNECT_DELAY);
- }
- else {
- if (usb_if_cur != NULL)
- usb_if_cur->deinit(&udev);
- if (new_if != NULL) {
+ } else {
+ if(usb_if_cur != NULL) usb_if_cur->deinit(&udev);
+ if(new_if != NULL) {
new_if->init(&udev, new_if);
FURI_LOG_I(TAG, "USB mode change");
usb_config.enabled = true;
@@ -85,7 +83,7 @@ UsbInterface* furi_hal_usb_get_config() {
}
void furi_hal_usb_disable() {
- if (usb_config.enabled) {
+ if(usb_config.enabled) {
susp_evt(&udev, 0, 0);
usbd_connect(&udev, false);
usb_config.enabled = false;
@@ -94,7 +92,7 @@ void furi_hal_usb_disable() {
}
void furi_hal_usb_enable() {
- if ((!usb_config.enabled) && (usb_if_cur != NULL)) {
+ if((!usb_config.enabled) && (usb_if_cur != NULL)) {
usbd_connect(&udev, true);
usb_config.enabled = true;
FURI_LOG_I(TAG, "USB Enable");
@@ -106,15 +104,14 @@ static void furi_hal_usb_tmr_cb(void* context) {
}
/* Get device / configuration descriptors */
-static usbd_respond usb_descriptor_get(usbd_ctlreq *req, void **address, uint16_t *length) {
+static usbd_respond usb_descriptor_get(usbd_ctlreq* req, void** address, uint16_t* length) {
const uint8_t dtype = req->wValue >> 8;
const uint8_t dnumber = req->wValue & 0xFF;
const void* desc;
uint16_t len = 0;
- if (usb_if_cur == NULL)
- return usbd_fail;
+ if(usb_if_cur == NULL) return usbd_fail;
- switch (dtype) {
+ switch(dtype) {
case USB_DTYPE_DEVICE:
desc = usb_if_cur->dev_descr;
break;
@@ -123,24 +120,23 @@ static usbd_respond usb_descriptor_get(usbd_ctlreq *req, void **address, uint16_
len = ((struct usb_string_descriptor*)(usb_if_cur->cfg_descr))->wString[0];
break;
case USB_DTYPE_STRING:
- if (dnumber == UsbDevLang) {
+ if(dnumber == UsbDevLang) {
desc = &dev_lang_desc;
- } else if (dnumber == UsbDevManuf) {
+ } else if(dnumber == UsbDevManuf) {
desc = usb_if_cur->str_manuf_descr;
- } else if (dnumber == UsbDevProduct) {
+ } else if(dnumber == UsbDevProduct) {
desc = usb_if_cur->str_prod_descr;
- } else if (dnumber == UsbDevSerial) {
+ } else if(dnumber == UsbDevSerial) {
desc = usb_if_cur->str_serial_descr;
- } else
+ } else
return usbd_fail;
break;
default:
return usbd_fail;
}
- if (desc == NULL)
- return usbd_fail;
+ if(desc == NULL) return usbd_fail;
- if (len == 0) {
+ if(len == 0) {
len = ((struct usb_header_descriptor*)desc)->bLength;
}
*address = (void*)desc;
@@ -148,16 +144,16 @@ static usbd_respond usb_descriptor_get(usbd_ctlreq *req, void **address, uint16_
return usbd_ack;
}
-static void susp_evt(usbd_device *dev, uint8_t event, uint8_t ep) {
- if ((usb_if_cur != NULL) && (usb_config.connected == true)) {
+static void susp_evt(usbd_device* dev, uint8_t event, uint8_t ep) {
+ if((usb_if_cur != NULL) && (usb_config.connected == true)) {
usb_config.connected = false;
usb_if_cur->suspend(&udev);
}
}
-static void wkup_evt(usbd_device *dev, uint8_t event, uint8_t ep) {
- if ((usb_if_cur != NULL) && (usb_config.connected == false)) {
+static void wkup_evt(usbd_device* dev, uint8_t event, uint8_t ep) {
+ if((usb_if_cur != NULL) && (usb_config.connected == false)) {
usb_config.connected = true;
usb_if_cur->wakeup(&udev);
- }
+ }
}
diff --git a/firmware/targets/f6/furi_hal/furi_hal_usb_cdc.c b/firmware/targets/f6/furi_hal/furi_hal_usb_cdc.c
new file mode 100644
index 00000000..26fd40c3
--- /dev/null
+++ b/firmware/targets/f6/furi_hal/furi_hal_usb_cdc.c
@@ -0,0 +1,664 @@
+#include "furi_hal_version.h"
+#include "furi_hal_usb_i.h"
+#include "furi_hal_usb.h"
+#include "furi_hal_usb_cdc_i.h"
+#include <furi.h>
+
+#include "usb.h"
+#include "usb_cdc.h"
+
+#define CDC0_RXD_EP 0x01
+#define CDC0_TXD_EP 0x82
+#define CDC0_NTF_EP 0x83
+
+#define CDC1_RXD_EP 0x04
+#define CDC1_TXD_EP 0x85
+#define CDC1_NTF_EP 0x86
+
+#define CDC_NTF_SZ 0x08
+
+#define IF_NUM_MAX 2
+
+struct CdcIadDescriptor {
+ struct usb_iad_descriptor comm_iad;
+ struct usb_interface_descriptor comm;
+ struct usb_cdc_header_desc cdc_hdr;
+ struct usb_cdc_call_mgmt_desc cdc_mgmt;
+ struct usb_cdc_acm_desc cdc_acm;
+ struct usb_cdc_union_desc cdc_union;
+ struct usb_endpoint_descriptor comm_ep;
+ struct usb_interface_descriptor data;
+ struct usb_endpoint_descriptor data_eprx;
+ struct usb_endpoint_descriptor data_eptx;
+};
+
+struct CdcConfigDescriptorSingle {
+ struct usb_config_descriptor config;
+ struct CdcIadDescriptor iad_0;
+} __attribute__((packed));
+
+struct CdcConfigDescriptorDual {
+ struct usb_config_descriptor config;
+ struct CdcIadDescriptor iad_0;
+ struct CdcIadDescriptor iad_1;
+} __attribute__((packed));
+
+static const struct usb_string_descriptor dev_manuf_desc = USB_STRING_DESC("Flipper Devices Inc.");
+
+/* Device descriptor */
+static const struct usb_device_descriptor cdc_device_desc = {
+ .bLength = sizeof(struct usb_device_descriptor),
+ .bDescriptorType = USB_DTYPE_DEVICE,
+ .bcdUSB = VERSION_BCD(2, 0, 0),
+ .bDeviceClass = USB_CLASS_IAD,
+ .bDeviceSubClass = USB_SUBCLASS_IAD,
+ .bDeviceProtocol = USB_PROTO_IAD,
+ .bMaxPacketSize0 = USB_EP0_SIZE,
+ .idVendor = 0x0483,
+ .idProduct = 0x5740,
+ .bcdDevice = VERSION_BCD(1, 0, 0),
+ .iManufacturer = UsbDevManuf,
+ .iProduct = UsbDevProduct,
+ .iSerialNumber = UsbDevSerial,
+ .bNumConfigurations = 1,
+};
+
+/* Device configuration descriptor - single mode*/
+static const struct CdcConfigDescriptorSingle cdc_cfg_desc_single = {
+ .config =
+ {
+ .bLength = sizeof(struct usb_config_descriptor),
+ .bDescriptorType = USB_DTYPE_CONFIGURATION,
+ .wTotalLength = sizeof(struct CdcConfigDescriptorSingle),
+ .bNumInterfaces = 2,
+
+ .bConfigurationValue = 1,
+ .iConfiguration = NO_DESCRIPTOR,
+ .bmAttributes = USB_CFG_ATTR_RESERVED | USB_CFG_ATTR_SELFPOWERED,
+ .bMaxPower = USB_CFG_POWER_MA(100),
+ },
+ .iad_0 =
+ {
+ .comm_iad =
+ {
+ .bLength = sizeof(struct usb_iad_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFASEASSOC,
+ .bFirstInterface = 0,
+ .bInterfaceCount = 2,
+ .bFunctionClass = USB_CLASS_CDC,
+ .bFunctionSubClass = USB_CDC_SUBCLASS_ACM,
+ .bFunctionProtocol = USB_PROTO_NONE,
+ .iFunction = NO_DESCRIPTOR,
+ },
+ .comm =
+ {
+ .bLength = sizeof(struct usb_interface_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFACE,
+ .bInterfaceNumber = 0,
+ .bAlternateSetting = 0,
+ .bNumEndpoints = 1,
+ .bInterfaceClass = USB_CLASS_CDC,
+ .bInterfaceSubClass = USB_CDC_SUBCLASS_ACM,
+ .bInterfaceProtocol = USB_PROTO_NONE,
+ .iInterface = NO_DESCRIPTOR,
+ },
+ .cdc_hdr =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_header_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_HEADER,
+ .bcdCDC = VERSION_BCD(1, 1, 0),
+ },
+ .cdc_mgmt =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_call_mgmt_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_CALL_MANAGEMENT,
+ .bmCapabilities = 0,
+ .bDataInterface = 1,
+ },
+ .cdc_acm =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_acm_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_ACM,
+ .bmCapabilities = 0,
+ },
+ .cdc_union =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_union_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_UNION,
+ .bMasterInterface0 = 0,
+ .bSlaveInterface0 = 1,
+ },
+ .comm_ep =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = CDC0_NTF_EP,
+ .bmAttributes = USB_EPTYPE_INTERRUPT,
+ .wMaxPacketSize = CDC_NTF_SZ,
+ .bInterval = 0xFF,
+ },
+ .data =
+ {
+ .bLength = sizeof(struct usb_interface_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFACE,
+ .bInterfaceNumber = 1,
+ .bAlternateSetting = 0,
+ .bNumEndpoints = 2,
+ .bInterfaceClass = USB_CLASS_CDC_DATA,
+ .bInterfaceSubClass = USB_SUBCLASS_NONE,
+ .bInterfaceProtocol = USB_PROTO_NONE,
+ .iInterface = NO_DESCRIPTOR,
+ },
+ .data_eprx =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = CDC0_RXD_EP,
+ .bmAttributes = USB_EPTYPE_BULK,
+ .wMaxPacketSize = CDC_DATA_SZ,
+ .bInterval = 0x01,
+ },
+ .data_eptx =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = CDC0_TXD_EP,
+ .bmAttributes = USB_EPTYPE_BULK,
+ .wMaxPacketSize = CDC_DATA_SZ,
+ .bInterval = 0x01,
+ },
+ },
+};
+
+/* Device configuration descriptor - dual mode*/
+static const struct CdcConfigDescriptorDual
+ cdc_cfg_desc_dual =
+ {
+ .config =
+ {
+ .bLength = sizeof(struct usb_config_descriptor),
+ .bDescriptorType = USB_DTYPE_CONFIGURATION,
+ .wTotalLength = sizeof(struct CdcConfigDescriptorDual),
+ .bNumInterfaces = 4,
+
+ .bConfigurationValue = 1,
+ .iConfiguration = NO_DESCRIPTOR,
+ .bmAttributes = USB_CFG_ATTR_RESERVED | USB_CFG_ATTR_SELFPOWERED,
+ .bMaxPower = USB_CFG_POWER_MA(100),
+ },
+ .iad_0 =
+ {
+ .comm_iad =
+ {
+ .bLength = sizeof(struct usb_iad_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFASEASSOC,
+ .bFirstInterface = 0,
+ .bInterfaceCount = 2,
+ .bFunctionClass = USB_CLASS_CDC,
+ .bFunctionSubClass = USB_CDC_SUBCLASS_ACM,
+ .bFunctionProtocol = USB_PROTO_NONE,
+ .iFunction = NO_DESCRIPTOR,
+ },
+ .comm =
+ {
+ .bLength = sizeof(struct usb_interface_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFACE,
+ .bInterfaceNumber = 0,
+ .bAlternateSetting = 0,
+ .bNumEndpoints = 1,
+ .bInterfaceClass = USB_CLASS_CDC,
+ .bInterfaceSubClass = USB_CDC_SUBCLASS_ACM,
+ .bInterfaceProtocol = USB_PROTO_NONE,
+ .iInterface = NO_DESCRIPTOR,
+ },
+ .cdc_hdr =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_header_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_HEADER,
+ .bcdCDC = VERSION_BCD(1, 1, 0),
+ },
+ .cdc_mgmt =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_call_mgmt_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_CALL_MANAGEMENT,
+ .bmCapabilities = 0,
+ .bDataInterface = 1,
+ },
+ .cdc_acm =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_acm_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_ACM,
+ .bmCapabilities = 0,
+ },
+ .cdc_union =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_union_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_UNION,
+ .bMasterInterface0 = 0,
+ .bSlaveInterface0 = 1,
+ },
+ .comm_ep =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = CDC0_NTF_EP,
+ .bmAttributes = USB_EPTYPE_INTERRUPT,
+ .wMaxPacketSize = CDC_NTF_SZ,
+ .bInterval = 0xFF,
+ },
+ .data =
+ {
+ .bLength = sizeof(struct usb_interface_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFACE,
+ .bInterfaceNumber = 1,
+ .bAlternateSetting = 0,
+ .bNumEndpoints = 2,
+ .bInterfaceClass = USB_CLASS_CDC_DATA,
+ .bInterfaceSubClass = USB_SUBCLASS_NONE,
+ .bInterfaceProtocol = USB_PROTO_NONE,
+ .iInterface = NO_DESCRIPTOR,
+ },
+ .data_eprx =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = CDC0_RXD_EP,
+ .bmAttributes = USB_EPTYPE_BULK,
+ .wMaxPacketSize = CDC_DATA_SZ,
+ .bInterval = 0x01,
+ },
+ .data_eptx =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = CDC0_TXD_EP,
+ .bmAttributes = USB_EPTYPE_BULK,
+ .wMaxPacketSize = CDC_DATA_SZ,
+ .bInterval = 0x01,
+ },
+ },
+ .iad_1 =
+ {
+ .comm_iad =
+ {
+ .bLength = sizeof(struct usb_iad_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFASEASSOC,
+ .bFirstInterface = 2,
+ .bInterfaceCount = 2,
+ .bFunctionClass = USB_CLASS_CDC,
+ .bFunctionSubClass = USB_CDC_SUBCLASS_ACM,
+ .bFunctionProtocol = USB_PROTO_NONE,
+ .iFunction = NO_DESCRIPTOR,
+ },
+ .comm =
+ {
+ .bLength = sizeof(struct usb_interface_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFACE,
+ .bInterfaceNumber = 2 + 0,
+ .bAlternateSetting = 0,
+ .bNumEndpoints = 1,
+ .bInterfaceClass = USB_CLASS_CDC,
+ .bInterfaceSubClass = USB_CDC_SUBCLASS_ACM,
+ .bInterfaceProtocol = USB_PROTO_NONE,
+ .iInterface = NO_DESCRIPTOR,
+ },
+ .cdc_hdr =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_header_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_HEADER,
+ .bcdCDC = VERSION_BCD(1, 1, 0),
+ },
+ .cdc_mgmt =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_call_mgmt_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_CALL_MANAGEMENT,
+ .bmCapabilities = 0,
+ .bDataInterface = 2 + 1,
+ },
+ .cdc_acm =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_acm_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_ACM,
+ .bmCapabilities = 0,
+ },
+ .cdc_union =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_union_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_UNION,
+ .bMasterInterface0 = 2 + 0,
+ .bSlaveInterface0 = 2 + 1,
+ },
+ .comm_ep =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = CDC1_NTF_EP,
+ .bmAttributes = USB_EPTYPE_INTERRUPT,
+ .wMaxPacketSize = CDC_NTF_SZ,
+ .bInterval = 0xFF,
+ },
+ .data =
+ {
+ .bLength = sizeof(struct usb_interface_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFACE,
+ .bInterfaceNumber = 2 + 1,
+ .bAlternateSetting = 0,
+ .bNumEndpoints = 2,
+ .bInterfaceClass = USB_CLASS_CDC_DATA,
+ .bInterfaceSubClass = USB_SUBCLASS_NONE,
+ .bInterfaceProtocol = USB_PROTO_NONE,
+ .iInterface = NO_DESCRIPTOR,
+ },
+ .data_eprx =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = CDC1_RXD_EP,
+ .bmAttributes = USB_EPTYPE_BULK,
+ .wMaxPacketSize = CDC_DATA_SZ,
+ .bInterval = 0x01,
+ },
+ .data_eptx =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = CDC1_TXD_EP,
+ .bmAttributes = USB_EPTYPE_BULK,
+ .wMaxPacketSize = CDC_DATA_SZ,
+ .bInterval = 0x01,
+ },
+ },
+};
+
+static struct usb_cdc_line_coding cdc_config[IF_NUM_MAX] = {};
+static uint8_t cdc_ctrl_line_state[IF_NUM_MAX];
+
+static void cdc_init(usbd_device* dev, UsbInterface* intf);
+static void cdc_deinit(usbd_device* dev);
+static void cdc_on_wakeup(usbd_device* dev);
+static void cdc_on_suspend(usbd_device* dev);
+
+static usbd_respond cdc_ep_config(usbd_device* dev, uint8_t cfg);
+static usbd_respond cdc_control(usbd_device* dev, usbd_ctlreq* req, usbd_rqc_callback* callback);
+static usbd_device* usb_dev;
+static UsbInterface* cdc_if_cur = NULL;
+static bool connected = false;
+static CdcCallbacks* callbacks[IF_NUM_MAX] = {NULL};
+static void* cb_ctx[IF_NUM_MAX];
+
+UsbInterface usb_cdc_single = {
+ .init = cdc_init,
+ .deinit = cdc_deinit,
+ .wakeup = cdc_on_wakeup,
+ .suspend = cdc_on_suspend,
+
+ .dev_descr = (struct usb_device_descriptor*)&cdc_device_desc,
+
+ .str_manuf_descr = (void*)&dev_manuf_desc,
+ .str_prod_descr = NULL,
+ .str_serial_descr = NULL,
+
+ .cfg_descr = (void*)&cdc_cfg_desc_single,
+};
+
+UsbInterface usb_cdc_dual = {
+ .init = cdc_init,
+ .deinit = cdc_deinit,
+ .wakeup = cdc_on_wakeup,
+ .suspend = cdc_on_suspend,
+
+ .dev_descr = (struct usb_device_descriptor*)&cdc_device_desc,
+
+ .str_manuf_descr = (void*)&dev_manuf_desc,
+ .str_prod_descr = NULL,
+ .str_serial_descr = NULL,
+
+ .cfg_descr = (void*)&cdc_cfg_desc_dual,
+};
+
+static void cdc_init(usbd_device* dev, UsbInterface* intf) {
+ usb_dev = dev;
+ cdc_if_cur = intf;
+
+ char* name = (char*)furi_hal_version_get_device_name_ptr();
+ uint8_t len = (name == NULL) ? (0) : (strlen(name));
+ struct usb_string_descriptor* dev_prod_desc = furi_alloc(len * 2 + 2);
+ dev_prod_desc->bLength = len * 2 + 2;
+ dev_prod_desc->bDescriptorType = USB_DTYPE_STRING;
+ for(uint8_t i = 0; i < len; i++) dev_prod_desc->wString[i] = name[i];
+
+ name = (char*)furi_hal_version_get_name_ptr();
+ len = (name == NULL) ? (0) : (strlen(name));
+ struct usb_string_descriptor* dev_serial_desc = furi_alloc((len + 5) * 2 + 2);
+ dev_serial_desc->bLength = (len + 5) * 2 + 2;
+ dev_serial_desc->bDescriptorType = USB_DTYPE_STRING;
+ memcpy(dev_serial_desc->wString, "f\0l\0i\0p\0_\0", 5 * 2);
+ for(uint8_t i = 0; i < len; i++) dev_serial_desc->wString[i + 5] = name[i];
+
+ cdc_if_cur->str_prod_descr = dev_prod_desc;
+ cdc_if_cur->str_serial_descr = dev_serial_desc;
+
+ usbd_reg_config(dev, cdc_ep_config);
+ usbd_reg_control(dev, cdc_control);
+
+ usbd_connect(dev, true);
+}
+
+static void cdc_deinit(usbd_device* dev) {
+ usbd_reg_config(dev, NULL);
+ usbd_reg_control(dev, NULL);
+
+ free(cdc_if_cur->str_prod_descr);
+ free(cdc_if_cur->str_serial_descr);
+
+ cdc_if_cur = NULL;
+}
+
+void furi_hal_cdc_set_callbacks(uint8_t if_num, CdcCallbacks* cb, void* context) {
+ furi_assert(if_num < IF_NUM_MAX);
+
+ if(callbacks[if_num] != NULL) {
+ if(callbacks[if_num]->state_callback != NULL) {
+ if(connected == true) callbacks[if_num]->state_callback(cb_ctx[if_num], 0);
+ }
+ }
+
+ callbacks[if_num] = cb;
+ cb_ctx[if_num] = context;
+
+ if(callbacks[if_num] != NULL) {
+ if(callbacks[if_num]->state_callback != NULL) {
+ if(connected == true) callbacks[if_num]->state_callback(cb_ctx[if_num], 1);
+ }
+ }
+}
+
+struct usb_cdc_line_coding* furi_hal_cdc_get_port_settings(uint8_t if_num) {
+ furi_assert(if_num < IF_NUM_MAX);
+ return &cdc_config[if_num];
+}
+
+uint8_t furi_hal_cdc_get_ctrl_line_state(uint8_t if_num) {
+ furi_assert(if_num < IF_NUM_MAX);
+ return cdc_ctrl_line_state[if_num];
+}
+
+void furi_hal_cdc_send(uint8_t if_num, uint8_t* buf, uint16_t len) {
+ if(if_num == 0)
+ usbd_ep_write(usb_dev, CDC0_TXD_EP, buf, len);
+ else
+ usbd_ep_write(usb_dev, CDC1_TXD_EP, buf, len);
+}
+
+int32_t furi_hal_cdc_receive(uint8_t if_num, uint8_t* buf, uint16_t max_len) {
+ int32_t len = 0;
+ if(if_num == 0)
+ len = usbd_ep_read(usb_dev, CDC0_RXD_EP, buf, max_len);
+ else
+ len = usbd_ep_read(usb_dev, CDC1_RXD_EP, buf, max_len);
+ return ((len < 0) ? 0 : len);
+}
+
+static void cdc_on_wakeup(usbd_device* dev) {
+ connected = true;
+ for(uint8_t i = 0; i < IF_NUM_MAX; i++) {
+ if(callbacks[i] != NULL) {
+ if(callbacks[i]->state_callback != NULL) callbacks[i]->state_callback(cb_ctx[i], 1);
+ }
+ }
+}
+
+static void cdc_on_suspend(usbd_device* dev) {
+ connected = false;
+ for(uint8_t i = 0; i < IF_NUM_MAX; i++) {
+ cdc_ctrl_line_state[i] = 0;
+ if(callbacks[i] != NULL) {
+ if(callbacks[i]->state_callback != NULL) callbacks[i]->state_callback(cb_ctx[i], 0);
+ }
+ }
+}
+
+static void cdc_rx_ep_callback(usbd_device* dev, uint8_t event, uint8_t ep) {
+ uint8_t if_num = 0;
+ if(ep == CDC0_RXD_EP)
+ if_num = 0;
+ else
+ if_num = 1;
+
+ if(callbacks[if_num] != NULL) {
+ if(callbacks[if_num]->rx_ep_callback != NULL)
+ callbacks[if_num]->rx_ep_callback(cb_ctx[if_num]);
+ }
+}
+
+static void cdc_tx_ep_callback(usbd_device* dev, uint8_t event, uint8_t ep) {
+ uint8_t if_num = 0;
+ if(ep == CDC0_TXD_EP)
+ if_num = 0;
+ else
+ if_num = 1;
+
+ if(callbacks[if_num] != NULL) {
+ if(callbacks[if_num]->tx_ep_callback != NULL)
+ callbacks[if_num]->tx_ep_callback(cb_ctx[if_num]);
+ }
+}
+
+static void cdc_txrx_ep_callback(usbd_device* dev, uint8_t event, uint8_t ep) {
+ if(event == usbd_evt_eptx) {
+ cdc_tx_ep_callback(dev, event, ep);
+ } else {
+ cdc_rx_ep_callback(dev, event, ep);
+ }
+}
+
+/* Configure endpoints */
+static usbd_respond cdc_ep_config(usbd_device* dev, uint8_t cfg) {
+ uint8_t if_cnt = ((struct usb_config_descriptor*)(cdc_if_cur->cfg_descr))->bNumInterfaces;
+ switch(cfg) {
+ case 0:
+ /* deconfiguring device */
+ if(if_cnt == 4) {
+ usbd_ep_deconfig(dev, CDC1_NTF_EP);
+ usbd_ep_deconfig(dev, CDC1_TXD_EP);
+ usbd_ep_deconfig(dev, CDC1_RXD_EP);
+ usbd_reg_endpoint(dev, CDC1_RXD_EP, 0);
+ usbd_reg_endpoint(dev, CDC1_TXD_EP, 0);
+ }
+ usbd_ep_deconfig(dev, CDC0_NTF_EP);
+ usbd_ep_deconfig(dev, CDC0_TXD_EP);
+ usbd_ep_deconfig(dev, CDC0_RXD_EP);
+ usbd_reg_endpoint(dev, CDC0_RXD_EP, 0);
+ usbd_reg_endpoint(dev, CDC0_TXD_EP, 0);
+ return usbd_ack;
+ case 1:
+ /* configuring device */
+ if((CDC0_TXD_EP & 0x7F) != (CDC0_RXD_EP & 0x7F)) {
+ // 2x unidirectional endpoint mode with dualbuf
+ usbd_ep_config(dev, CDC0_RXD_EP, USB_EPTYPE_BULK | USB_EPTYPE_DBLBUF, CDC_DATA_SZ);
+ usbd_ep_config(dev, CDC0_TXD_EP, USB_EPTYPE_BULK | USB_EPTYPE_DBLBUF, CDC_DATA_SZ);
+ usbd_ep_config(dev, CDC0_NTF_EP, USB_EPTYPE_INTERRUPT, CDC_NTF_SZ);
+ usbd_reg_endpoint(dev, CDC0_RXD_EP, cdc_rx_ep_callback);
+ usbd_reg_endpoint(dev, CDC0_TXD_EP, cdc_tx_ep_callback);
+ } else {
+ // 1x bidirectional endpoint mode
+ usbd_ep_config(dev, CDC0_RXD_EP, USB_EPTYPE_BULK, CDC_DATA_SZ);
+ usbd_ep_config(dev, CDC0_TXD_EP, USB_EPTYPE_BULK, CDC_DATA_SZ);
+ usbd_ep_config(dev, CDC0_NTF_EP, USB_EPTYPE_INTERRUPT, CDC_NTF_SZ);
+ usbd_reg_endpoint(dev, CDC0_RXD_EP, cdc_txrx_ep_callback);
+ usbd_reg_endpoint(dev, CDC0_TXD_EP, cdc_txrx_ep_callback);
+ }
+ usbd_ep_write(dev, CDC0_TXD_EP, 0, 0);
+
+ if(if_cnt == 4) {
+ if((CDC1_TXD_EP & 0x7F) != (CDC1_RXD_EP & 0x7F)) {
+ usbd_ep_config(dev, CDC1_RXD_EP, USB_EPTYPE_BULK | USB_EPTYPE_DBLBUF, CDC_DATA_SZ);
+ usbd_ep_config(dev, CDC1_TXD_EP, USB_EPTYPE_BULK | USB_EPTYPE_DBLBUF, CDC_DATA_SZ);
+ usbd_ep_config(dev, CDC1_NTF_EP, USB_EPTYPE_INTERRUPT, CDC_NTF_SZ);
+ usbd_reg_endpoint(dev, CDC1_RXD_EP, cdc_rx_ep_callback);
+ usbd_reg_endpoint(dev, CDC1_TXD_EP, cdc_tx_ep_callback);
+ } else {
+ usbd_ep_config(dev, CDC1_RXD_EP, USB_EPTYPE_BULK, CDC_DATA_SZ);
+ usbd_ep_config(dev, CDC1_TXD_EP, USB_EPTYPE_BULK, CDC_DATA_SZ);
+ usbd_ep_config(dev, CDC1_NTF_EP, USB_EPTYPE_INTERRUPT, CDC_NTF_SZ);
+ usbd_reg_endpoint(dev, CDC1_RXD_EP, cdc_txrx_ep_callback);
+ usbd_reg_endpoint(dev, CDC1_TXD_EP, cdc_txrx_ep_callback);
+ }
+ usbd_ep_write(dev, CDC1_TXD_EP, 0, 0);
+ }
+ return usbd_ack;
+ default:
+ return usbd_fail;
+ }
+}
+
+/* Control requests handler */
+static usbd_respond cdc_control(usbd_device* dev, usbd_ctlreq* req, usbd_rqc_callback* callback) {
+ /* CDC control requests */
+ uint8_t if_num = 0;
+ if(((USB_REQ_RECIPIENT | USB_REQ_TYPE) & req->bmRequestType) ==
+ (USB_REQ_INTERFACE | USB_REQ_CLASS) &&
+ (req->wIndex == 0 || req->wIndex == 2)) {
+ if(req->wIndex == 0)
+ if_num = 0;
+ else
+ if_num = 1;
+
+ switch(req->bRequest) {
+ case USB_CDC_SET_CONTROL_LINE_STATE:
+ if(callbacks[if_num] != NULL) {
+ cdc_ctrl_line_state[if_num] = req->wValue;
+ if(callbacks[if_num]->ctrl_line_callback != NULL)
+ callbacks[if_num]->ctrl_line_callback(
+ cb_ctx[if_num], cdc_ctrl_line_state[if_num]);
+ }
+ return usbd_ack;
+ case USB_CDC_SET_LINE_CODING:
+ memcpy(&cdc_config[if_num], req->data, sizeof(cdc_config[0]));
+ if(callbacks[if_num] != NULL) {
+ if(callbacks[if_num]->config_callback != NULL)
+ callbacks[if_num]->config_callback(cb_ctx[if_num], &cdc_config[if_num]);
+ }
+ return usbd_ack;
+ case USB_CDC_GET_LINE_CODING:
+ dev->status.data_ptr = &cdc_config[if_num];
+ dev->status.data_count = sizeof(cdc_config[0]);
+ return usbd_ack;
+ default:
+ return usbd_fail;
+ }
+ }
+ return usbd_fail;
+}
diff --git a/firmware/targets/f6/furi-hal/furi-hal-usb-cdc_i.h b/firmware/targets/f6/furi_hal/furi_hal_usb_cdc_i.h
index 9af1e76a..4ba150eb 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-usb-cdc_i.h
+++ b/firmware/targets/f6/furi_hal/furi_hal_usb_cdc_i.h
@@ -1,7 +1,7 @@
#pragma once
#include <stdint.h>
-#include "usb_cdc.h"
+#include "usb_cdc.h"
#define CDC_DATA_SZ 64
diff --git a/firmware/targets/f6/furi_hal/furi_hal_usb_hid.c b/firmware/targets/f6/furi_hal/furi_hal_usb_hid.c
new file mode 100644
index 00000000..098acc73
--- /dev/null
+++ b/firmware/targets/f6/furi_hal/furi_hal_usb_hid.c
@@ -0,0 +1,482 @@
+#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"
+#include "usb_hid.h"
+#include "hid_usage_desktop.h"
+#include "hid_usage_button.h"
+#include "hid_usage_keyboard.h"
+#include "hid_usage_led.h"
+
+#define HID_EP_IN 0x81
+#define HID_EP_OUT 0x01
+#define HID_EP_SZ 0x10
+
+#define HID_KB_MAX_KEYS 6
+#define HID_CONSUMER_MAX_KEYS 2
+
+#define HID_PAGE_CONSUMER 0x0C
+#define HID_CONSUMER_CONTROL 0x01
+
+struct HidIadDescriptor {
+ struct usb_iad_descriptor hid_iad;
+ struct usb_interface_descriptor hid;
+ struct usb_hid_descriptor hid_desc;
+ struct usb_endpoint_descriptor hid_ep_in;
+ struct usb_endpoint_descriptor hid_ep_out;
+};
+
+struct HidConfigDescriptor {
+ struct usb_config_descriptor config;
+ struct HidIadDescriptor iad_0;
+} __attribute__((packed));
+
+enum HidReportId {
+ ReportIdKeyboard = 1,
+ ReportIdMouse = 2,
+ ReportIdConsumer = 3,
+};
+
+/* HID report: keyboard+mouse */
+static const uint8_t hid_report_desc[] = {
+ HID_USAGE_PAGE(HID_PAGE_DESKTOP),
+ HID_USAGE(HID_DESKTOP_KEYBOARD),
+ HID_COLLECTION(HID_APPLICATION_COLLECTION),
+ HID_REPORT_ID(ReportIdKeyboard),
+ HID_USAGE_PAGE(HID_DESKTOP_KEYPAD),
+ HID_USAGE_MINIMUM(HID_KEYBOARD_L_CTRL),
+ HID_USAGE_MAXIMUM(HID_KEYBOARD_R_GUI),
+ HID_LOGICAL_MINIMUM(0),
+ HID_LOGICAL_MAXIMUM(1),
+ HID_REPORT_SIZE(1),
+ HID_REPORT_COUNT(8),
+ HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
+ HID_REPORT_COUNT(1),
+ HID_REPORT_SIZE(8),
+ HID_INPUT(HID_IOF_CONSTANT | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
+ HID_USAGE_PAGE(HID_PAGE_LED),
+ HID_REPORT_COUNT(8),
+ HID_REPORT_SIZE(1),
+ HID_USAGE_MINIMUM(1),
+ HID_USAGE_MAXIMUM(8),
+ HID_OUTPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
+ HID_REPORT_COUNT(HID_KB_MAX_KEYS),
+ HID_REPORT_SIZE(8),
+ HID_LOGICAL_MINIMUM(0),
+ HID_LOGICAL_MAXIMUM(101),
+ HID_USAGE_PAGE(HID_DESKTOP_KEYPAD),
+ HID_USAGE_MINIMUM(0),
+ HID_USAGE_MAXIMUM(101),
+ HID_INPUT(HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE),
+ HID_END_COLLECTION,
+ HID_USAGE_PAGE(HID_PAGE_DESKTOP),
+ HID_USAGE(HID_DESKTOP_MOUSE),
+ HID_COLLECTION(HID_APPLICATION_COLLECTION),
+ HID_USAGE(HID_DESKTOP_POINTER),
+ HID_COLLECTION(HID_PHYSICAL_COLLECTION),
+ HID_REPORT_ID(ReportIdMouse),
+ HID_USAGE_PAGE(HID_PAGE_BUTTON),
+ HID_USAGE_MINIMUM(1),
+ HID_USAGE_MAXIMUM(3),
+ HID_LOGICAL_MINIMUM(0),
+ HID_LOGICAL_MAXIMUM(1),
+ HID_REPORT_COUNT(3),
+ HID_REPORT_SIZE(1),
+ HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
+ HID_REPORT_SIZE(1),
+ HID_REPORT_COUNT(5),
+ HID_INPUT(HID_IOF_CONSTANT | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
+ HID_USAGE_PAGE(HID_PAGE_DESKTOP),
+ HID_USAGE(HID_DESKTOP_X),
+ HID_USAGE(HID_DESKTOP_Y),
+ HID_USAGE(HID_DESKTOP_WHEEL),
+ HID_LOGICAL_MINIMUM(-127),
+ HID_LOGICAL_MAXIMUM(127),
+ HID_REPORT_SIZE(8),
+ HID_REPORT_COUNT(3),
+ HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE),
+ HID_END_COLLECTION,
+ HID_END_COLLECTION,
+ HID_USAGE_PAGE(HID_PAGE_CONSUMER),
+ HID_USAGE(HID_CONSUMER_CONTROL),
+ HID_COLLECTION(HID_APPLICATION_COLLECTION),
+ HID_REPORT_ID(ReportIdConsumer),
+ HID_LOGICAL_MINIMUM(0),
+ HID_RI_LOGICAL_MAXIMUM(16, 0x3FF),
+ HID_USAGE_MINIMUM(0),
+ HID_RI_USAGE_MAXIMUM(16, 0x3FF),
+ HID_REPORT_COUNT(HID_CONSUMER_MAX_KEYS),
+ HID_REPORT_SIZE(16),
+ HID_INPUT(HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE),
+ HID_END_COLLECTION,
+};
+
+static const struct usb_string_descriptor dev_manuf_desc = USB_STRING_DESC("Logitech");
+static const struct usb_string_descriptor dev_prod_desc = USB_STRING_DESC("USB Receiver");
+static const struct usb_string_descriptor dev_serial_desc = USB_STRING_DESC("1234567890");
+
+/* Device descriptor */
+static const struct usb_device_descriptor hid_device_desc = {
+ .bLength = sizeof(struct usb_device_descriptor),
+ .bDescriptorType = USB_DTYPE_DEVICE,
+ .bcdUSB = VERSION_BCD(2, 0, 0),
+ .bDeviceClass = USB_CLASS_IAD,
+ .bDeviceSubClass = USB_SUBCLASS_IAD,
+ .bDeviceProtocol = USB_PROTO_IAD,
+ .bMaxPacketSize0 = USB_EP0_SIZE,
+ .idVendor = 0x046d,
+ .idProduct = 0xc529,
+ .bcdDevice = VERSION_BCD(1, 0, 0),
+ .iManufacturer = UsbDevManuf,
+ .iProduct = UsbDevProduct,
+ .iSerialNumber = UsbDevSerial,
+ .bNumConfigurations = 1,
+};
+
+/* Device configuration descriptor */
+static const struct HidConfigDescriptor hid_cfg_desc = {
+ .config =
+ {
+ .bLength = sizeof(struct usb_config_descriptor),
+ .bDescriptorType = USB_DTYPE_CONFIGURATION,
+ .wTotalLength = sizeof(struct HidConfigDescriptor),
+ .bNumInterfaces = 1,
+ .bConfigurationValue = 1,
+ .iConfiguration = NO_DESCRIPTOR,
+ .bmAttributes = USB_CFG_ATTR_RESERVED | USB_CFG_ATTR_SELFPOWERED,
+ .bMaxPower = USB_CFG_POWER_MA(100),
+ },
+ .iad_0 =
+ {
+ .hid_iad =
+ {
+ .bLength = sizeof(struct usb_iad_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFASEASSOC,
+ .bFirstInterface = 0,
+ .bInterfaceCount = 1,
+ .bFunctionClass = USB_CLASS_PER_INTERFACE,
+ .bFunctionSubClass = USB_SUBCLASS_NONE,
+ .bFunctionProtocol = USB_PROTO_NONE,
+ .iFunction = NO_DESCRIPTOR,
+ },
+ .hid =
+ {
+ .bLength = sizeof(struct usb_interface_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFACE,
+ .bInterfaceNumber = 0,
+ .bAlternateSetting = 0,
+ .bNumEndpoints = 2,
+ .bInterfaceClass = USB_CLASS_HID,
+ .bInterfaceSubClass = USB_HID_SUBCLASS_NONBOOT,
+ .bInterfaceProtocol = USB_HID_PROTO_NONBOOT,
+ .iInterface = NO_DESCRIPTOR,
+ },
+ .hid_desc =
+ {
+ .bLength = sizeof(struct usb_hid_descriptor),
+ .bDescriptorType = USB_DTYPE_HID,
+ .bcdHID = VERSION_BCD(1, 0, 0),
+ .bCountryCode = USB_HID_COUNTRY_NONE,
+ .bNumDescriptors = 1,
+ .bDescriptorType0 = USB_DTYPE_HID_REPORT,
+ .wDescriptorLength0 = sizeof(hid_report_desc),
+ },
+ .hid_ep_in =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = HID_EP_IN,
+ .bmAttributes = USB_EPTYPE_INTERRUPT,
+ .wMaxPacketSize = HID_EP_SZ,
+ .bInterval = 10,
+ },
+ .hid_ep_out =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = HID_EP_OUT,
+ .bmAttributes = USB_EPTYPE_INTERRUPT,
+ .wMaxPacketSize = HID_EP_SZ,
+ .bInterval = 10,
+ },
+ },
+};
+
+struct HidReportMouse {
+ uint8_t report_id;
+ uint8_t btn;
+ int8_t x;
+ int8_t y;
+ int8_t wheel;
+} __attribute__((packed));
+
+struct HidReportKB {
+ uint8_t report_id;
+ uint8_t mods;
+ uint8_t reserved;
+ uint8_t btn[HID_KB_MAX_KEYS];
+} __attribute__((packed));
+
+struct HidReportConsumer {
+ uint8_t report_id;
+ uint16_t btn[HID_CONSUMER_MAX_KEYS];
+} __attribute__((packed));
+
+struct HidReportLED {
+ uint8_t report_id;
+ uint8_t led_state;
+} __attribute__((packed));
+
+static struct HidReport {
+ struct HidReportKB keyboard;
+ struct HidReportMouse mouse;
+ struct HidReportConsumer consumer;
+} __attribute__((packed)) hid_report;
+
+static void hid_init(usbd_device* dev, UsbInterface* intf);
+static void hid_deinit(usbd_device* dev);
+static void hid_on_wakeup(usbd_device* dev);
+static void hid_on_suspend(usbd_device* dev);
+
+static bool hid_send_report(uint8_t report_id);
+static usbd_respond hid_ep_config(usbd_device* dev, uint8_t cfg);
+static usbd_respond hid_control(usbd_device* dev, usbd_ctlreq* req, usbd_rqc_callback* callback);
+static usbd_device* usb_dev;
+static osSemaphoreId_t hid_semaphore = NULL;
+static bool hid_connected = false;
+static HidStateCallback callback;
+static void* cb_ctx;
+static uint8_t led_state;
+
+bool furi_hal_hid_is_connected() {
+ return hid_connected;
+}
+
+uint8_t furi_hal_hid_get_led_state() {
+ return led_state;
+}
+
+void furi_hal_hid_set_state_callback(HidStateCallback cb, void* ctx) {
+ if(callback != NULL) {
+ if(hid_connected == true) callback(false, cb_ctx);
+ }
+
+ callback = cb;
+ cb_ctx = ctx;
+
+ if(callback != NULL) {
+ if(hid_connected == true) callback(true, cb_ctx);
+ }
+}
+
+bool furi_hal_hid_kb_press(uint16_t button) {
+ for(uint8_t key_nb = 0; key_nb < HID_KB_MAX_KEYS; key_nb++) {
+ if(hid_report.keyboard.btn[key_nb] == 0) {
+ hid_report.keyboard.btn[key_nb] = button & 0xFF;
+ break;
+ }
+ }
+ hid_report.keyboard.mods |= (button >> 8);
+ return hid_send_report(ReportIdKeyboard);
+}
+
+bool furi_hal_hid_kb_release(uint16_t button) {
+ for(uint8_t key_nb = 0; key_nb < HID_KB_MAX_KEYS; key_nb++) {
+ if(hid_report.keyboard.btn[key_nb] == (button & 0xFF)) {
+ hid_report.keyboard.btn[key_nb] = 0;
+ break;
+ }
+ }
+ hid_report.keyboard.mods &= ~(button >> 8);
+ return hid_send_report(ReportIdKeyboard);
+}
+
+bool furi_hal_hid_kb_release_all() {
+ for(uint8_t key_nb = 0; key_nb < HID_KB_MAX_KEYS; key_nb++) {
+ hid_report.keyboard.btn[key_nb] = 0;
+ }
+ hid_report.keyboard.mods = 0;
+ return hid_send_report(ReportIdKeyboard);
+}
+
+bool furi_hal_hid_mouse_move(int8_t dx, int8_t dy) {
+ hid_report.mouse.x = dx;
+ hid_report.mouse.y = dy;
+ bool state = hid_send_report(ReportIdMouse);
+ hid_report.mouse.x = 0;
+ hid_report.mouse.y = 0;
+ return state;
+}
+
+bool furi_hal_hid_mouse_press(uint8_t button) {
+ hid_report.mouse.btn |= button;
+ return hid_send_report(ReportIdMouse);
+}
+
+bool furi_hal_hid_mouse_release(uint8_t button) {
+ hid_report.mouse.btn &= ~button;
+ return hid_send_report(ReportIdMouse);
+}
+
+bool furi_hal_hid_mouse_scroll(int8_t delta) {
+ hid_report.mouse.wheel = delta;
+ bool state = hid_send_report(ReportIdMouse);
+ hid_report.mouse.wheel = 0;
+ return state;
+}
+
+bool furi_hal_hid_consumer_key_press(uint16_t button) {
+ for(uint8_t key_nb = 0; key_nb < HID_CONSUMER_MAX_KEYS; key_nb++) {
+ if(hid_report.consumer.btn[key_nb] == 0) {
+ hid_report.consumer.btn[key_nb] = button;
+ break;
+ }
+ }
+ return hid_send_report(ReportIdConsumer);
+}
+
+bool furi_hal_hid_consumer_key_release(uint16_t button) {
+ for(uint8_t key_nb = 0; key_nb < HID_CONSUMER_MAX_KEYS; key_nb++) {
+ if(hid_report.consumer.btn[key_nb] == button) {
+ hid_report.consumer.btn[key_nb] = 0;
+ break;
+ }
+ }
+ return hid_send_report(ReportIdConsumer);
+}
+
+UsbInterface usb_hid = {
+ .init = hid_init,
+ .deinit = hid_deinit,
+ .wakeup = hid_on_wakeup,
+ .suspend = hid_on_suspend,
+
+ .dev_descr = (struct usb_device_descriptor*)&hid_device_desc,
+
+ .str_manuf_descr = (void*)&dev_manuf_desc,
+ .str_prod_descr = (void*)&dev_prod_desc,
+ .str_serial_descr = (void*)&dev_serial_desc,
+
+ .cfg_descr = (void*)&hid_cfg_desc,
+};
+
+static void hid_init(usbd_device* dev, UsbInterface* intf) {
+ if(hid_semaphore == NULL) hid_semaphore = osSemaphoreNew(1, 1, NULL);
+ usb_dev = dev;
+ hid_report.keyboard.report_id = ReportIdKeyboard;
+ hid_report.mouse.report_id = ReportIdMouse;
+ hid_report.consumer.report_id = ReportIdConsumer;
+
+ usbd_reg_config(dev, hid_ep_config);
+ usbd_reg_control(dev, hid_control);
+
+ usbd_connect(dev, true);
+}
+
+static void hid_deinit(usbd_device* dev) {
+ usbd_reg_config(dev, NULL);
+ usbd_reg_control(dev, NULL);
+}
+
+static void hid_on_wakeup(usbd_device* dev) {
+ if(hid_connected == false) {
+ hid_connected = true;
+ if(callback != NULL) callback(true, cb_ctx);
+ }
+}
+
+static void hid_on_suspend(usbd_device* dev) {
+ if(hid_connected == true) {
+ hid_connected = false;
+ osSemaphoreRelease(hid_semaphore);
+ if(callback != NULL) callback(false, cb_ctx);
+ }
+}
+
+static bool hid_send_report(uint8_t report_id) {
+ if((hid_semaphore == NULL) || (hid_connected == false)) return false;
+
+ furi_check(osSemaphoreAcquire(hid_semaphore, osWaitForever) == osOK);
+ if(hid_connected == true) {
+ if(report_id == ReportIdKeyboard)
+ usbd_ep_write(usb_dev, HID_EP_IN, &hid_report.keyboard, sizeof(hid_report.keyboard));
+ else if(report_id == ReportIdMouse)
+ usbd_ep_write(usb_dev, HID_EP_IN, &hid_report.mouse, sizeof(hid_report.mouse));
+ else if(report_id == ReportIdConsumer)
+ usbd_ep_write(usb_dev, HID_EP_IN, &hid_report.consumer, sizeof(hid_report.consumer));
+ return true;
+ }
+ return false;
+}
+
+static void hid_txrx_ep_callback(usbd_device* dev, uint8_t event, uint8_t ep) {
+ if(event == usbd_evt_eptx) {
+ osSemaphoreRelease(hid_semaphore);
+ } else {
+ struct HidReportLED leds;
+ usbd_ep_read(usb_dev, ep, &leds, 2);
+ led_state = leds.led_state;
+ }
+}
+
+/* Configure endpoints */
+static usbd_respond hid_ep_config(usbd_device* dev, uint8_t cfg) {
+ switch(cfg) {
+ case 0:
+ /* deconfiguring device */
+ usbd_ep_deconfig(dev, HID_EP_OUT);
+ usbd_ep_deconfig(dev, HID_EP_IN);
+ usbd_reg_endpoint(dev, HID_EP_OUT, 0);
+ usbd_reg_endpoint(dev, HID_EP_IN, 0);
+ return usbd_ack;
+ case 1:
+ /* configuring device */
+ usbd_ep_config(dev, HID_EP_IN, USB_EPTYPE_INTERRUPT, HID_EP_SZ);
+ usbd_ep_config(dev, HID_EP_OUT, USB_EPTYPE_INTERRUPT, HID_EP_SZ);
+ usbd_reg_endpoint(dev, HID_EP_IN, hid_txrx_ep_callback);
+ usbd_reg_endpoint(dev, HID_EP_OUT, hid_txrx_ep_callback);
+ usbd_ep_write(dev, HID_EP_IN, 0, 0);
+ return usbd_ack;
+ default:
+ return usbd_fail;
+ }
+}
+
+/* Control requests handler */
+static usbd_respond hid_control(usbd_device* dev, usbd_ctlreq* req, usbd_rqc_callback* callback) {
+ /* HID control requests */
+ if(((USB_REQ_RECIPIENT | USB_REQ_TYPE) & req->bmRequestType) ==
+ (USB_REQ_INTERFACE | USB_REQ_CLASS) &&
+ req->wIndex == 0) {
+ switch(req->bRequest) {
+ case USB_HID_SETIDLE:
+ return usbd_ack;
+ case USB_HID_GETREPORT:
+ dev->status.data_ptr = &hid_report;
+ dev->status.data_count = sizeof(hid_report);
+ return usbd_ack;
+ default:
+ return usbd_fail;
+ }
+ }
+ if(((USB_REQ_RECIPIENT | USB_REQ_TYPE) & req->bmRequestType) ==
+ (USB_REQ_INTERFACE | USB_REQ_STANDARD) &&
+ req->wIndex == 0 && req->bRequest == USB_STD_GET_DESCRIPTOR) {
+ switch(req->wValue >> 8) {
+ case USB_DTYPE_HID:
+ dev->status.data_ptr = (uint8_t*)&(hid_cfg_desc.iad_0.hid_desc);
+ dev->status.data_count = sizeof(hid_cfg_desc.iad_0.hid_desc);
+ return usbd_ack;
+ case USB_DTYPE_HID_REPORT:
+ dev->status.data_ptr = (uint8_t*)hid_report_desc;
+ dev->status.data_count = sizeof(hid_report_desc);
+ return usbd_ack;
+ default:
+ return usbd_fail;
+ }
+ }
+ return usbd_fail;
+}
diff --git a/firmware/targets/f6/furi_hal/furi_hal_usb_i.h b/firmware/targets/f6/furi_hal/furi_hal_usb_i.h
new file mode 100644
index 00000000..be7ce168
--- /dev/null
+++ b/firmware/targets/f6/furi_hal/furi_hal_usb_i.h
@@ -0,0 +1,13 @@
+#pragma once
+
+#include "usb.h"
+
+#define USB_EP0_SIZE 8
+
+/* String descriptors */
+enum UsbDevDescStr {
+ UsbDevLang = 0,
+ UsbDevManuf = 1,
+ UsbDevProduct = 2,
+ UsbDevSerial = 3,
+};
diff --git a/firmware/targets/f6/furi-hal/furi-hal-usb-u2f.c b/firmware/targets/f6/furi_hal/furi_hal_usb_u2f.c
index 5c0eaf9b..a3bb145e 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-usb-u2f.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_usb_u2f.c
@@ -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"
@@ -71,65 +71,71 @@ static const struct usb_device_descriptor hid_u2f_device_desc = {
/* Device configuration descriptor */
static const struct HidConfigDescriptor hid_u2f_cfg_desc = {
- .config = {
- .bLength = sizeof(struct usb_config_descriptor),
- .bDescriptorType = USB_DTYPE_CONFIGURATION,
- .wTotalLength = sizeof(struct HidConfigDescriptor),
- .bNumInterfaces = 1,
- .bConfigurationValue = 1,
- .iConfiguration = NO_DESCRIPTOR,
- .bmAttributes = USB_CFG_ATTR_RESERVED | USB_CFG_ATTR_SELFPOWERED,
- .bMaxPower = USB_CFG_POWER_MA(100),
- },
- .iad_0 = {
- .hid_iad =
+ .config =
{
- .bLength = sizeof(struct usb_iad_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFASEASSOC,
- .bFirstInterface = 0,
- .bInterfaceCount = 1,
- .bFunctionClass = USB_CLASS_PER_INTERFACE,
- .bFunctionSubClass = USB_SUBCLASS_NONE,
- .bFunctionProtocol = USB_PROTO_NONE,
- .iFunction = NO_DESCRIPTOR,
+ .bLength = sizeof(struct usb_config_descriptor),
+ .bDescriptorType = USB_DTYPE_CONFIGURATION,
+ .wTotalLength = sizeof(struct HidConfigDescriptor),
+ .bNumInterfaces = 1,
+ .bConfigurationValue = 1,
+ .iConfiguration = NO_DESCRIPTOR,
+ .bmAttributes = USB_CFG_ATTR_RESERVED | USB_CFG_ATTR_SELFPOWERED,
+ .bMaxPower = USB_CFG_POWER_MA(100),
},
- .hid = {
- .bLength = sizeof(struct usb_interface_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFACE,
- .bInterfaceNumber = 0,
- .bAlternateSetting = 0,
- .bNumEndpoints = 2,
- .bInterfaceClass = USB_CLASS_HID,
- .bInterfaceSubClass = USB_HID_SUBCLASS_NONBOOT,
- .bInterfaceProtocol = USB_HID_PROTO_NONBOOT,
- .iInterface = NO_DESCRIPTOR,
- },
- .hid_desc = {
- .bLength = sizeof(struct usb_hid_descriptor),
- .bDescriptorType = USB_DTYPE_HID,
- .bcdHID = VERSION_BCD(1, 0, 0),
- .bCountryCode = USB_HID_COUNTRY_NONE,
- .bNumDescriptors = 1,
- .bDescriptorType0 = USB_DTYPE_HID_REPORT,
- .wDescriptorLength0 = sizeof(hid_u2f_report_desc),
- },
- .hid_ep_in = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = HID_EP_IN,
- .bmAttributes = USB_EPTYPE_INTERRUPT,
- .wMaxPacketSize = HID_U2F_PACKET_LEN,
- .bInterval = 5,
- },
- .hid_ep_out = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = HID_EP_OUT,
- .bmAttributes = USB_EPTYPE_INTERRUPT,
- .wMaxPacketSize = HID_U2F_PACKET_LEN,
- .bInterval = 5,
+ .iad_0 =
+ {
+ .hid_iad =
+ {
+ .bLength = sizeof(struct usb_iad_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFASEASSOC,
+ .bFirstInterface = 0,
+ .bInterfaceCount = 1,
+ .bFunctionClass = USB_CLASS_PER_INTERFACE,
+ .bFunctionSubClass = USB_SUBCLASS_NONE,
+ .bFunctionProtocol = USB_PROTO_NONE,
+ .iFunction = NO_DESCRIPTOR,
+ },
+ .hid =
+ {
+ .bLength = sizeof(struct usb_interface_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFACE,
+ .bInterfaceNumber = 0,
+ .bAlternateSetting = 0,
+ .bNumEndpoints = 2,
+ .bInterfaceClass = USB_CLASS_HID,
+ .bInterfaceSubClass = USB_HID_SUBCLASS_NONBOOT,
+ .bInterfaceProtocol = USB_HID_PROTO_NONBOOT,
+ .iInterface = NO_DESCRIPTOR,
+ },
+ .hid_desc =
+ {
+ .bLength = sizeof(struct usb_hid_descriptor),
+ .bDescriptorType = USB_DTYPE_HID,
+ .bcdHID = VERSION_BCD(1, 0, 0),
+ .bCountryCode = USB_HID_COUNTRY_NONE,
+ .bNumDescriptors = 1,
+ .bDescriptorType0 = USB_DTYPE_HID_REPORT,
+ .wDescriptorLength0 = sizeof(hid_u2f_report_desc),
+ },
+ .hid_ep_in =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = HID_EP_IN,
+ .bmAttributes = USB_EPTYPE_INTERRUPT,
+ .wMaxPacketSize = HID_U2F_PACKET_LEN,
+ .bInterval = 5,
+ },
+ .hid_ep_out =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = HID_EP_OUT,
+ .bmAttributes = USB_EPTYPE_INTERRUPT,
+ .wMaxPacketSize = HID_U2F_PACKET_LEN,
+ .bInterval = 5,
+ },
},
- },
};
static void hid_u2f_init(usbd_device* dev, UsbInterface* intf);
@@ -153,17 +159,15 @@ bool furi_hal_hid_u2f_is_connected() {
}
void furi_hal_hid_u2f_set_callback(HidU2fCallback cb, void* ctx) {
- if (callback != NULL) {
- if (hid_u2f_connected == true)
- callback(HidU2fDisconnected, cb_ctx);
+ if(callback != NULL) {
+ if(hid_u2f_connected == true) callback(HidU2fDisconnected, cb_ctx);
}
callback = cb;
cb_ctx = ctx;
- if (callback != NULL) {
- if (hid_u2f_connected == true)
- callback(HidU2fConnected, cb_ctx);
+ if(callback != NULL) {
+ if(hid_u2f_connected == true) callback(HidU2fConnected, cb_ctx);
}
}
@@ -199,24 +203,21 @@ static void hid_u2f_deinit(usbd_device* dev) {
static void hid_u2f_on_wakeup(usbd_device* dev) {
hid_u2f_connected = true;
- if (callback != NULL)
- callback(HidU2fConnected, cb_ctx);
+ if(callback != NULL) callback(HidU2fConnected, cb_ctx);
}
static void hid_u2f_on_suspend(usbd_device* dev) {
if(hid_u2f_connected == true) {
hid_u2f_connected = false;
osSemaphoreRelease(hid_u2f_semaphore);
- if (callback != NULL)
- callback(HidU2fDisconnected, cb_ctx);
+ if(callback != NULL) callback(HidU2fDisconnected, cb_ctx);
}
}
void furi_hal_hid_u2f_send_response(uint8_t* data, uint8_t len) {
- if ((hid_u2f_semaphore == NULL) || (hid_u2f_connected == false))
- return;
+ if((hid_u2f_semaphore == NULL) || (hid_u2f_connected == false)) return;
furi_check(osSemaphoreAcquire(hid_u2f_semaphore, osWaitForever) == osOK);
- if (hid_u2f_connected == true) {
+ if(hid_u2f_connected == true) {
usbd_ep_write(usb_dev, HID_EP_OUT, data, len);
}
}
@@ -226,17 +227,16 @@ uint32_t furi_hal_hid_u2f_get_request(uint8_t* data) {
return ((len < 0) ? 0 : len);
}
-static void hid_u2f_rx_ep_callback (usbd_device *dev, uint8_t event, uint8_t ep) {
- if (callback != NULL)
- callback(HidU2fRequest, cb_ctx);
+static void hid_u2f_rx_ep_callback(usbd_device* dev, uint8_t event, uint8_t ep) {
+ if(callback != NULL) callback(HidU2fRequest, cb_ctx);
}
-static void hid_u2f_tx_ep_callback (usbd_device *dev, uint8_t event, uint8_t ep) {
+static void hid_u2f_tx_ep_callback(usbd_device* dev, uint8_t event, uint8_t ep) {
osSemaphoreRelease(hid_u2f_semaphore);
}
-static void hid_u2f_txrx_ep_callback (usbd_device *dev, uint8_t event, uint8_t ep) {
- if (event == usbd_evt_eptx) {
+static void hid_u2f_txrx_ep_callback(usbd_device* dev, uint8_t event, uint8_t ep) {
+ if(event == usbd_evt_eptx) {
hid_u2f_tx_ep_callback(dev, event, ep);
} else {
hid_u2f_rx_ep_callback(dev, event, ep);
@@ -267,9 +267,10 @@ static usbd_respond hid_u2f_ep_config(usbd_device* dev, uint8_t cfg) {
}
/* Control requests handler */
-static usbd_respond hid_u2f_control(usbd_device* dev, usbd_ctlreq* req, usbd_rqc_callback* callback) {
+static usbd_respond
+ hid_u2f_control(usbd_device* dev, usbd_ctlreq* req, usbd_rqc_callback* callback) {
/* HID control requests */
- if (((USB_REQ_RECIPIENT | USB_REQ_TYPE) & req->bmRequestType) ==
+ if(((USB_REQ_RECIPIENT | USB_REQ_TYPE) & req->bmRequestType) ==
(USB_REQ_INTERFACE | USB_REQ_CLASS) &&
req->wIndex == 0) {
switch(req->bRequest) {
@@ -279,7 +280,7 @@ static usbd_respond hid_u2f_control(usbd_device* dev, usbd_ctlreq* req, usbd_rqc
return usbd_fail;
}
}
- if (((USB_REQ_RECIPIENT | USB_REQ_TYPE) & req->bmRequestType) ==
+ if(((USB_REQ_RECIPIENT | USB_REQ_TYPE) & req->bmRequestType) ==
(USB_REQ_INTERFACE | USB_REQ_STANDARD) &&
req->wIndex == 0 && req->bRequest == USB_STD_GET_DESCRIPTOR) {
switch(req->wValue >> 8) {
diff --git a/firmware/targets/f6/furi-hal/furi-hal-vcp.c b/firmware/targets/f6/furi_hal/furi_hal_vcp.c
index 05033817..fd4fb2ff 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-vcp.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_vcp.c
@@ -1,5 +1,5 @@
-#include <furi-hal-usb-cdc_i.h>
-#include <furi-hal-console.h>
+#include <furi_hal_usb_cdc_i.h>
+#include <furi_hal_console.h>
#include <furi.h>
#include <stream_buffer.h>
@@ -12,18 +12,20 @@
#define VCP_IF_NUM 0
typedef enum {
- VcpEvtReserved = (1 << 0), // Reserved for StreamBuffer internal event
- VcpEvtEnable = (1 << 1),
- VcpEvtDisable = (1 << 2),
- VcpEvtConnect = (1 << 3),
- VcpEvtDisconnect = (1 << 4),
- VcpEvtStreamRx = (1 << 5),
- VcpEvtRx = (1 << 6),
- VcpEvtStreamTx = (1 << 7),
- VcpEvtTx = (1 << 8),
+ VcpEvtReserved = (1 << 0), // Reserved for StreamBuffer internal event
+ VcpEvtEnable = (1 << 1),
+ VcpEvtDisable = (1 << 2),
+ VcpEvtConnect = (1 << 3),
+ VcpEvtDisconnect = (1 << 4),
+ VcpEvtStreamRx = (1 << 5),
+ VcpEvtRx = (1 << 6),
+ VcpEvtStreamTx = (1 << 7),
+ VcpEvtTx = (1 << 8),
} WorkerEvtFlags;
-#define VCP_THREAD_FLAG_ALL (VcpEvtEnable | VcpEvtDisable | VcpEvtConnect | VcpEvtDisconnect | VcpEvtRx | VcpEvtTx | VcpEvtStreamRx | VcpEvtStreamTx)
+#define VCP_THREAD_FLAG_ALL \
+ (VcpEvtEnable | VcpEvtDisable | VcpEvtConnect | VcpEvtDisconnect | VcpEvtRx | VcpEvtTx | \
+ VcpEvtStreamRx | VcpEvtStreamTx)
typedef struct {
FuriThread* thread;
@@ -78,20 +80,20 @@ static int32_t vcp_worker(void* context) {
furi_hal_cdc_set_callbacks(VCP_IF_NUM, &cdc_cb, NULL);
- while (1) {
+ while(1) {
uint32_t flags = osThreadFlagsWait(VCP_THREAD_FLAG_ALL, osFlagsWaitAny, osWaitForever);
furi_assert((flags & osFlagsError) == 0);
// VCP enabled
- if((flags & VcpEvtEnable) && !enabled){
+ if((flags & VcpEvtEnable) && !enabled) {
#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "Enable");
-#endif
+#endif
flags |= VcpEvtTx;
furi_hal_cdc_set_callbacks(VCP_IF_NUM, &cdc_cb, NULL);
enabled = true;
furi_hal_cdc_receive(VCP_IF_NUM, vcp->data_buffer, USB_CDC_PKT_LEN); // flush Rx buffer
- if (furi_hal_cdc_get_ctrl_line_state(VCP_IF_NUM) & (1 << 0)) {
+ if(furi_hal_cdc_get_ctrl_line_state(VCP_IF_NUM) & (1 << 0)) {
vcp->connected = true;
xStreamBufferSend(vcp->rx_stream, &ascii_soh, 1, osWaitForever);
}
@@ -99,9 +101,9 @@ static int32_t vcp_worker(void* context) {
// VCP disabled
if((flags & VcpEvtDisable) && enabled) {
-#ifdef FURI_HAL_USB_VCP_DEBUG
+#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "Disable");
-#endif
+#endif
enabled = false;
vcp->connected = false;
xStreamBufferReceive(vcp->tx_stream, vcp->data_buffer, USB_CDC_PKT_LEN, 0);
@@ -110,10 +112,10 @@ static int32_t vcp_worker(void* context) {
// VCP session opened
if((flags & VcpEvtConnect) && enabled) {
-#ifdef FURI_HAL_USB_VCP_DEBUG
+#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "Connect");
-#endif
- if (vcp->connected == false) {
+#endif
+ if(vcp->connected == false) {
vcp->connected = true;
xStreamBufferSend(vcp->rx_stream, &ascii_soh, 1, osWaitForever);
}
@@ -121,10 +123,10 @@ static int32_t vcp_worker(void* context) {
// VCP session closed
if((flags & VcpEvtDisconnect) && enabled) {
-#ifdef FURI_HAL_USB_VCP_DEBUG
+#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "Disconnect");
-#endif
- if (vcp->connected == true) {
+#endif
+ if(vcp->connected == true) {
vcp->connected = false;
xStreamBufferReceive(vcp->tx_stream, vcp->data_buffer, USB_CDC_PKT_LEN, 0);
xStreamBufferSend(vcp->rx_stream, &ascii_eot, 1, osWaitForever);
@@ -136,7 +138,7 @@ static int32_t vcp_worker(void* context) {
#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "StreamRx");
#endif
- if (xStreamBufferSpacesAvailable(vcp->rx_stream) >= USB_CDC_PKT_LEN) {
+ if(xStreamBufferSpacesAvailable(vcp->rx_stream) >= USB_CDC_PKT_LEN) {
flags |= VcpEvtRx;
missed_rx--;
}
@@ -144,39 +146,42 @@ static int32_t vcp_worker(void* context) {
// New data received
if((flags & VcpEvtRx)) {
- if (xStreamBufferSpacesAvailable(vcp->rx_stream) >= USB_CDC_PKT_LEN) {
+ if(xStreamBufferSpacesAvailable(vcp->rx_stream) >= USB_CDC_PKT_LEN) {
int32_t len = furi_hal_cdc_receive(VCP_IF_NUM, vcp->data_buffer, USB_CDC_PKT_LEN);
-#ifdef FURI_HAL_USB_VCP_DEBUG
+#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "Rx %d", len);
-#endif
- if (len > 0) {
- furi_check(xStreamBufferSend(vcp->rx_stream, vcp->data_buffer, len, osWaitForever) == len);
+#endif
+ if(len > 0) {
+ furi_check(
+ xStreamBufferSend(vcp->rx_stream, vcp->data_buffer, len, osWaitForever) ==
+ len);
}
} else {
-#ifdef FURI_HAL_USB_VCP_DEBUG
+#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "Rx missed");
-#endif
+#endif
missed_rx++;
}
}
// New data in Tx buffer
if((flags & VcpEvtStreamTx) && enabled) {
-#ifdef FURI_HAL_USB_VCP_DEBUG
+#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "StreamTx");
-#endif
- if (tx_idle) {
+#endif
+ if(tx_idle) {
flags |= VcpEvtTx;
}
}
// CDC write transfer done
if((flags & VcpEvtTx) && enabled) {
- size_t len = xStreamBufferReceive(vcp->tx_stream, vcp->data_buffer, USB_CDC_PKT_LEN, 0);
-#ifdef FURI_HAL_USB_VCP_DEBUG
+ size_t len =
+ xStreamBufferReceive(vcp->tx_stream, vcp->data_buffer, USB_CDC_PKT_LEN, 0);
+#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "Tx %d", len);
-#endif
- if (len > 0) { // Some data left in Tx buffer. Sending it now
+#endif
+ if(len > 0) { // Some data left in Tx buffer. Sending it now
tx_idle = false;
furi_hal_cdc_send(VCP_IF_NUM, vcp->data_buffer, len);
} else { // There is nothing to send. Set flag to start next transfer instantly
@@ -201,21 +206,19 @@ size_t furi_hal_vcp_rx_with_timeout(uint8_t* buffer, size_t size, uint32_t timeo
#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "rx %u start", size);
-#endif
+#endif
size_t rx_cnt = 0;
- while (size > 0) {
+ while(size > 0) {
size_t batch_size = size;
- if (batch_size > VCP_RX_BUF_SIZE)
- batch_size = VCP_RX_BUF_SIZE;
+ if(batch_size > VCP_RX_BUF_SIZE) batch_size = VCP_RX_BUF_SIZE;
size_t len = xStreamBufferReceive(vcp->rx_stream, buffer, batch_size, timeout);
-#ifdef FURI_HAL_USB_VCP_DEBUG
+#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "%u ", batch_size);
-#endif
- if (len == 0)
- break;
+#endif
+ if(len == 0) break;
osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtStreamRx);
size -= len;
buffer += len;
@@ -224,7 +227,7 @@ size_t furi_hal_vcp_rx_with_timeout(uint8_t* buffer, size_t size, uint32_t timeo
#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "rx %u end", size);
-#endif
+#endif
return rx_cnt;
}
@@ -239,18 +242,17 @@ void furi_hal_vcp_tx(const uint8_t* buffer, size_t size) {
#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "tx %u start", size);
-#endif
+#endif
- while (size > 0 && vcp->connected) {
+ while(size > 0 && vcp->connected) {
size_t batch_size = size;
- if (batch_size > USB_CDC_PKT_LEN)
- batch_size = USB_CDC_PKT_LEN;
+ if(batch_size > USB_CDC_PKT_LEN) batch_size = USB_CDC_PKT_LEN;
xStreamBufferSend(vcp->tx_stream, buffer, batch_size, osWaitForever);
osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtStreamTx);
#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "%u ", batch_size);
-#endif
+#endif
size -= batch_size;
buffer += batch_size;
@@ -258,11 +260,11 @@ void furi_hal_vcp_tx(const uint8_t* buffer, size_t size) {
#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "tx %u end", size);
-#endif
+#endif
}
static void vcp_state_callback(void* context, uint8_t state) {
- if (state == 0) {
+ if(state == 0) {
osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtDisconnect);
}
}
@@ -271,7 +273,7 @@ static void vcp_on_cdc_control_line(void* context, uint8_t state) {
// bit 0: DTR state, bit 1: RTS state
bool dtr = state & (1 << 0);
- if (dtr == true) {
+ if(dtr == true) {
osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtConnect);
} else {
osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtDisconnect);
diff --git a/firmware/targets/f6/furi-hal/furi-hal-version.c b/firmware/targets/f6/furi_hal/furi_hal_version.c
index 218a6be4..58621707 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-version.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_version.c
@@ -1,5 +1,5 @@
-#include <furi-hal-version.h>
-#include <furi-hal-rtc.h>
+#include <furi_hal_version.h>
+#include <furi_hal_rtc.h>
#include <furi.h>
#include <stm32wbxx.h>
@@ -13,7 +13,6 @@
#define FURI_HAL_VERSION_OTP_HEADER_MAGIC 0xBABE
#define FURI_HAL_VERSION_OTP_ADDRESS OTP_AREA_BASE
-
/** OTP V0 Structure: prototypes and early EVT */
typedef struct {
uint8_t board_version;
@@ -85,7 +84,7 @@ typedef struct {
uint8_t board_display; /** Board display */
char name[FURI_HAL_VERSION_ARRAY_NAME_LENGTH]; /** \0 terminated name */
- char device_name[FURI_HAL_VERSION_DEVICE_NAME_LENGTH]; /** device name for special needs */
+ char device_name[FURI_HAL_VERSION_DEVICE_NAME_LENGTH]; /** device name for special needs */
uint8_t ble_mac[6];
} FuriHalVersion;
@@ -100,10 +99,7 @@ static void furi_hal_version_set_name(const char* name) {
"xFlipper %s",
furi_hal_version.name);
} else {
- snprintf(
- furi_hal_version.device_name,
- FURI_HAL_VERSION_DEVICE_NAME_LENGTH,
- "xFlipper");
+ snprintf(furi_hal_version.device_name, FURI_HAL_VERSION_DEVICE_NAME_LENGTH, "xFlipper");
}
furi_hal_version.device_name[0] = AD_TYPE_COMPLETE_LOCAL_NAME;
@@ -113,11 +109,11 @@ static void furi_hal_version_set_name(const char* name) {
uint32_t company_id = LL_FLASH_GetSTCompanyID();
uint32_t device_id = LL_FLASH_GetDeviceID();
furi_hal_version.ble_mac[0] = (uint8_t)(udn & 0x000000FF);
- furi_hal_version.ble_mac[1] = (uint8_t)( (udn & 0x0000FF00) >> 8 );
- furi_hal_version.ble_mac[2] = (uint8_t)( (udn & 0x00FF0000) >> 16 );
+ furi_hal_version.ble_mac[1] = (uint8_t)((udn & 0x0000FF00) >> 8);
+ furi_hal_version.ble_mac[2] = (uint8_t)((udn & 0x00FF0000) >> 16);
furi_hal_version.ble_mac[3] = (uint8_t)device_id;
furi_hal_version.ble_mac[4] = (uint8_t)(company_id & 0x000000FF);
- furi_hal_version.ble_mac[5] = (uint8_t)( (company_id & 0x0000FF00) >> 8 );
+ furi_hal_version.ble_mac[5] = (uint8_t)((company_id & 0x0000FF00) >> 8);
}
static void furi_hal_version_load_otp_default() {
@@ -164,7 +160,7 @@ static void furi_hal_version_load_otp_v2() {
furi_hal_version.board_display = otp->board_display;
// 3rd and 4th blocks, programmed on FATP stage
- if (otp->board_color != 0xFF) {
+ if(otp->board_color != 0xFF) {
furi_hal_version.board_color = otp->board_color;
furi_hal_version.board_region = otp->board_region;
furi_hal_version_set_name(otp->name);
@@ -177,22 +173,23 @@ static void furi_hal_version_load_otp_v2() {
void furi_hal_version_init() {
switch(furi_hal_version_get_otp_version()) {
- case FuriHalVersionOtpVersionUnknown:
- furi_hal_version_load_otp_default();
+ case FuriHalVersionOtpVersionUnknown:
+ furi_hal_version_load_otp_default();
break;
- case FuriHalVersionOtpVersionEmpty:
- furi_hal_version_load_otp_default();
+ case FuriHalVersionOtpVersionEmpty:
+ furi_hal_version_load_otp_default();
break;
- case FuriHalVersionOtpVersion0:
- furi_hal_version_load_otp_v0();
+ case FuriHalVersionOtpVersion0:
+ furi_hal_version_load_otp_v0();
break;
- case FuriHalVersionOtpVersion1:
- furi_hal_version_load_otp_v1();
+ case FuriHalVersionOtpVersion1:
+ furi_hal_version_load_otp_v1();
break;
- case FuriHalVersionOtpVersion2:
- furi_hal_version_load_otp_v2();
+ case FuriHalVersionOtpVersion2:
+ furi_hal_version_load_otp_v2();
break;
- default: furi_crash(NULL);
+ default:
+ furi_crash(NULL);
}
furi_hal_rtc_set_register(FuriHalRtcRegisterSystemVersion, (uint32_t)version_get());
@@ -209,18 +206,19 @@ const char* furi_hal_version_get_model_name() {
}
const FuriHalVersionOtpVersion furi_hal_version_get_otp_version() {
- if (*(uint64_t*)FURI_HAL_VERSION_OTP_ADDRESS == 0xFFFFFFFF) {
+ if(*(uint64_t*)FURI_HAL_VERSION_OTP_ADDRESS == 0xFFFFFFFF) {
return FuriHalVersionOtpVersionEmpty;
} else {
- if (((FuriHalVersionOTPv1*)FURI_HAL_VERSION_OTP_ADDRESS)->header_magic == FURI_HAL_VERSION_OTP_HEADER_MAGIC) {
+ if(((FuriHalVersionOTPv1*)FURI_HAL_VERSION_OTP_ADDRESS)->header_magic ==
+ FURI_HAL_VERSION_OTP_HEADER_MAGIC) {
// Version 1+
uint8_t version = ((FuriHalVersionOTPv1*)FURI_HAL_VERSION_OTP_ADDRESS)->header_version;
- if (version >= FuriHalVersionOtpVersion1 && version <= FuriHalVersionOtpVersion2) {
+ if(version >= FuriHalVersionOtpVersion1 && version <= FuriHalVersionOtpVersion2) {
return version;
} else {
return FuriHalVersionOtpVersionUnknown;
}
- } else if (((FuriHalVersionOTPv0*)FURI_HAL_VERSION_OTP_ADDRESS)->board_version <= 10) {
+ } else if(((FuriHalVersionOTPv0*)FURI_HAL_VERSION_OTP_ADDRESS)->board_version <= 10) {
// Version 0
return FuriHalVersionOtpVersion0;
} else {
@@ -292,9 +290,9 @@ const struct Version* furi_hal_version_get_bootloader_version(void) {
}
size_t furi_hal_version_uid_size() {
- return 64/8;
+ return 64 / 8;
}
const uint8_t* furi_hal_version_uid() {
- return (const uint8_t *)UID64_BASE;
+ return (const uint8_t*)UID64_BASE;
}
diff --git a/firmware/targets/f7/furi-hal/furi-hal-vibro.c b/firmware/targets/f6/furi_hal/furi_hal_vibro.c
index 7de8ad84..d9e9ec58 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-vibro.c
+++ b/firmware/targets/f6/furi_hal/furi_hal_vibro.c
@@ -1,5 +1,5 @@
-#include <furi-hal-vibro.h>
-#include <furi-hal-gpio.h>
+#include <furi_hal_vibro.h>
+#include <furi_hal_gpio.h>
#define TAG "FuriHalVibro"
@@ -7,7 +7,6 @@ void furi_hal_vibro_init() {
hal_gpio_init(&vibro_gpio, GpioModeOutputPushPull, GpioPullNo, GpioSpeedLow);
hal_gpio_write(&vibro_gpio, false);
FURI_LOG_I(TAG, "Init OK");
-
}
void furi_hal_vibro_on(bool value) {
diff --git a/firmware/targets/f6/target.mk b/firmware/targets/f6/target.mk
index e60e375e..029c8f40 100644
--- a/firmware/targets/f6/target.mk
+++ b/firmware/targets/f6/target.mk
@@ -92,7 +92,7 @@ C_SOURCES += \
# BLE glue
CFLAGS += \
- -I$(TARGET_DIR)/ble-glue \
+ -I$(TARGET_DIR)/ble_glue \
-I$(CUBE_DIR)/Middlewares/ST/STM32_WPAN \
-I$(CUBE_DIR)/Middlewares/ST/STM32_WPAN/ble \
-I$(CUBE_DIR)/Middlewares/ST/STM32_WPAN/ble/core \
@@ -102,7 +102,7 @@ CFLAGS += \
-I$(CUBE_DIR)/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl \
-I$(CUBE_DIR)/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci
C_SOURCES += \
- $(wildcard $(TARGET_DIR)/ble-glue/*.c) \
+ $(wildcard $(TARGET_DIR)/ble_glue/*.c) \
$(CUBE_DIR)/Middlewares/ST/STM32_WPAN/utilities/otp.c \
$(CUBE_DIR)/Middlewares/ST/STM32_WPAN/utilities/stm_list.c \
$(CUBE_DIR)/Middlewares/ST/STM32_WPAN/utilities/dbg_trace.c \
@@ -144,7 +144,7 @@ ifeq ($(INVERT_RFID_IN), 1)
CFLAGS += -DINVERT_RFID_IN
endif
-FURI_HAL_DIR = $(TARGET_DIR)/furi-hal
+FURI_HAL_DIR = $(TARGET_DIR)/furi_hal
CFLAGS += -I$(FURI_HAL_DIR)
C_SOURCES += $(wildcard $(FURI_HAL_DIR)/*.c)
diff --git a/firmware/targets/f7/Inc/FreeRTOSConfig.h b/firmware/targets/f7/Inc/FreeRTOSConfig.h
index 6235a2d4..1128f084 100644
--- a/firmware/targets/f7/Inc/FreeRTOSConfig.h
+++ b/firmware/targets/f7/Inc/FreeRTOSConfig.h
@@ -9,80 +9,80 @@ extern uint32_t SystemCoreClock;
#define CMSIS_device_header "stm32wbxx.h"
#endif /* CMSIS_device_header */
-#define configENABLE_FPU 1
-#define configENABLE_MPU 0
-
-#define configUSE_PREEMPTION 1
-#define configSUPPORT_STATIC_ALLOCATION 0
-#define configSUPPORT_DYNAMIC_ALLOCATION 1
-#define configUSE_IDLE_HOOK 0
-#define configUSE_TICK_HOOK 0
-#define configCPU_CLOCK_HZ ( SystemCoreClock )
-#define configTICK_RATE_HZ ((TickType_t)1024)
-#define configMAX_PRIORITIES ( 56 )
-#define configMINIMAL_STACK_SIZE ((uint16_t)128)
+#define configENABLE_FPU 1
+#define configENABLE_MPU 0
+
+#define configUSE_PREEMPTION 1
+#define configSUPPORT_STATIC_ALLOCATION 0
+#define configSUPPORT_DYNAMIC_ALLOCATION 1
+#define configUSE_IDLE_HOOK 0
+#define configUSE_TICK_HOOK 0
+#define configCPU_CLOCK_HZ (SystemCoreClock)
+#define configTICK_RATE_HZ ((TickType_t)1024)
+#define configMAX_PRIORITIES (56)
+#define configMINIMAL_STACK_SIZE ((uint16_t)128)
/* Heap size determined automatically by linker */
// #define configTOTAL_HEAP_SIZE ((size_t)0)
-#define configMAX_TASK_NAME_LEN ( 16 )
-#define configGENERATE_RUN_TIME_STATS 0
-#define configUSE_TRACE_FACILITY 1
-#define configUSE_16_BIT_TICKS 0
-#define configUSE_MUTEXES 1
-#define configQUEUE_REGISTRY_SIZE 8
-#define configCHECK_FOR_STACK_OVERFLOW 1
-#define configUSE_RECURSIVE_MUTEXES 1
-#define configUSE_COUNTING_SEMAPHORES 1
-#define configENABLE_BACKWARD_COMPATIBILITY 0
-#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
-#define configUSE_TICKLESS_IDLE 2
-#define configRECORD_STACK_HIGH_ADDRESS 1
-#define configUSE_NEWLIB_REENTRANT 0
+#define configMAX_TASK_NAME_LEN (16)
+#define configGENERATE_RUN_TIME_STATS 0
+#define configUSE_TRACE_FACILITY 1
+#define configUSE_16_BIT_TICKS 0
+#define configUSE_MUTEXES 1
+#define configQUEUE_REGISTRY_SIZE 8
+#define configCHECK_FOR_STACK_OVERFLOW 1
+#define configUSE_RECURSIVE_MUTEXES 1
+#define configUSE_COUNTING_SEMAPHORES 1
+#define configENABLE_BACKWARD_COMPATIBILITY 0
+#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
+#define configUSE_TICKLESS_IDLE 2
+#define configRECORD_STACK_HIGH_ADDRESS 1
+#define configUSE_NEWLIB_REENTRANT 0
/* Defaults to size_t for backward compatibility, but can be changed
if lengths will always be less than the number of bytes in a size_t. */
-#define configMESSAGE_BUFFER_LENGTH_TYPE size_t
-#define configNUM_THREAD_LOCAL_STORAGE_POINTERS 1
-#define configEXPECTED_IDLE_TIME_BEFORE_SLEEP 4
+#define configMESSAGE_BUFFER_LENGTH_TYPE size_t
+#define configNUM_THREAD_LOCAL_STORAGE_POINTERS 1
+#define configEXPECTED_IDLE_TIME_BEFORE_SLEEP 4
/* Co-routine definitions. */
-#define configUSE_CO_ROUTINES 0
+#define configUSE_CO_ROUTINES 0
/* Software timer definitions. */
-#define configUSE_TIMERS 1
-#define configTIMER_TASK_PRIORITY ( 2 )
-#define configTIMER_QUEUE_LENGTH 32
-#define configTIMER_TASK_STACK_DEPTH 256
-#define configTIMER_SERVICE_TASK_NAME "TimersSrv"
+#define configUSE_TIMERS 1
+#define configTIMER_TASK_PRIORITY (2)
+#define configTIMER_QUEUE_LENGTH 32
+#define configTIMER_TASK_STACK_DEPTH 256
+#define configTIMER_SERVICE_TASK_NAME "TimersSrv"
-#define configIDLE_TASK_NAME "(-_-)"
+#define configIDLE_TASK_NAME "(-_-)"
/* Set the following definitions to 1 to include the API function, or zero
to exclude the API function. */
-#define INCLUDE_eTaskGetState 1
-#define INCLUDE_uxTaskGetStackHighWaterMark 1
-#define INCLUDE_uxTaskPriorityGet 1
-#define INCLUDE_vTaskCleanUpResources 0
-#define INCLUDE_vTaskDelay 1
-#define INCLUDE_vTaskDelayUntil 1
-#define INCLUDE_vTaskDelete 1
-#define INCLUDE_vTaskPrioritySet 1
-#define INCLUDE_vTaskSuspend 1
-#define INCLUDE_xQueueGetMutexHolder 1
-#define INCLUDE_xTaskGetCurrentTaskHandle 1
-#define INCLUDE_xTaskGetSchedulerState 1
-#define INCLUDE_xTimerPendFunctionCall 1
+#define INCLUDE_eTaskGetState 1
+#define INCLUDE_uxTaskGetStackHighWaterMark 1
+#define INCLUDE_uxTaskPriorityGet 1
+#define INCLUDE_vTaskCleanUpResources 0
+#define INCLUDE_vTaskDelay 1
+#define INCLUDE_vTaskDelayUntil 1
+#define INCLUDE_vTaskDelete 1
+#define INCLUDE_vTaskPrioritySet 1
+#define INCLUDE_vTaskSuspend 1
+#define INCLUDE_xQueueGetMutexHolder 1
+#define INCLUDE_xTaskGetCurrentTaskHandle 1
+#define INCLUDE_xTaskGetSchedulerState 1
+#define INCLUDE_xTimerPendFunctionCall 1
/* CMSIS-RTOS V2 flags */
-#define configUSE_OS2_THREAD_SUSPEND_RESUME 1
-#define configUSE_OS2_THREAD_ENUMERATE 1
-#define configUSE_OS2_EVENTFLAGS_FROM_ISR 1
-#define configUSE_OS2_THREAD_FLAGS 1
-#define configUSE_OS2_TIMER 1
-#define configUSE_OS2_MUTEX 1
+#define configUSE_OS2_THREAD_SUSPEND_RESUME 1
+#define configUSE_OS2_THREAD_ENUMERATE 1
+#define configUSE_OS2_EVENTFLAGS_FROM_ISR 1
+#define configUSE_OS2_THREAD_FLAGS 1
+#define configUSE_OS2_TIMER 1
+#define configUSE_OS2_MUTEX 1
/* CMSIS-RTOS */
-#define configTASK_NOTIFICATION_ARRAY_ENTRIES 2
+#define configTASK_NOTIFICATION_ARRAY_ENTRIES 2
#define CMSIS_TASK_NOTIFY_INDEX 1
/*
@@ -93,15 +93,15 @@ to exclude the API function. */
/* Cortex-M specific definitions. */
#ifdef __NVIC_PRIO_BITS
- /* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */
- #define configPRIO_BITS __NVIC_PRIO_BITS
+/* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */
+#define configPRIO_BITS __NVIC_PRIO_BITS
#else
- #define configPRIO_BITS 4
+#define configPRIO_BITS 4
#endif
/* The lowest interrupt priority that can be used in a call to a "set priority"
function. */
-#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15
+#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15
/* The highest interrupt priority that can be used by any interrupt service
routine that makes calls to interrupt safe FreeRTOS API functions. DO NOT CALL
@@ -111,21 +111,27 @@ PRIORITY THAN THIS! (higher priorities are lower numeric values. */
/* Interrupt priorities used by the kernel port layer itself. These are generic
to all Cortex-M ports, and do not rely on any particular library functions. */
-#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
+#define configKERNEL_INTERRUPT_PRIORITY \
+ (configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
-#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
+#define configMAX_SYSCALL_INTERRUPT_PRIORITY \
+ (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))
/* Normal assert() semantics without relying on the provision of an assert.h
header file. */
#include <furi/check.h>
-#define configASSERT( x ) if ((x) == 0) { furi_crash("FreeRTOS Assert"); }
+#define configASSERT(x) \
+ if((x) == 0) { \
+ furi_crash("FreeRTOS Assert"); \
+ }
/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
standard names. */
-#define vPortSVCHandler SVC_Handler
+#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION 1
-#define configOVERRIDE_DEFAULT_TICK_CONFIGURATION 1 /* required only for Keil but does not hurt otherwise */
+#define configOVERRIDE_DEFAULT_TICK_CONFIGURATION \
+ 1 /* required only for Keil but does not hurt otherwise */
diff --git a/firmware/targets/f7/Inc/stm32.h b/firmware/targets/f7/Inc/stm32.h
index 45344fe3..83dda96e 100644
--- a/firmware/targets/f7/Inc/stm32.h
+++ b/firmware/targets/f7/Inc/stm32.h
@@ -2,51 +2,50 @@
#define _STM32_H_
/* modify bitfield */
-#define _BMD(reg, msk, val) (reg) = (((reg) & ~(msk)) | (val))
+#define _BMD(reg, msk, val) (reg) = (((reg) & ~(msk)) | (val))
/* set bitfield */
-#define _BST(reg, bits) (reg) = ((reg) | (bits))
+#define _BST(reg, bits) (reg) = ((reg) | (bits))
/* clear bitfield */
-#define _BCL(reg, bits) (reg) = ((reg) & ~(bits))
+#define _BCL(reg, bits) (reg) = ((reg) & ~(bits))
/* wait until bitfield set */
-#define _WBS(reg, bits) while(((reg) & (bits)) == 0)
+#define _WBS(reg, bits) while(((reg) & (bits)) == 0)
/* wait until bitfield clear */
-#define _WBC(reg, bits) while(((reg) & (bits)) != 0)
+#define _WBC(reg, bits) while(((reg) & (bits)) != 0)
/* wait for bitfield value */
-#define _WVL(reg, msk, val) while(((reg) & (msk)) != (val))
+#define _WVL(reg, msk, val) while(((reg) & (msk)) != (val))
/* bit value */
-#define _BV(bit) (0x01 << (bit))
+#define _BV(bit) (0x01 << (bit))
#if defined(STM32F0)
- #include "STM32F0xx/Include/stm32f0xx.h"
+#include "STM32F0xx/Include/stm32f0xx.h"
#elif defined(STM32F1)
- #include "STM32F1xx/Include/stm32f1xx.h"
+#include "STM32F1xx/Include/stm32f1xx.h"
#elif defined(STM32F2)
- #include "STM32F2xx/Include/stm32f2xx.h"
+#include "STM32F2xx/Include/stm32f2xx.h"
#elif defined(STM32F3)
- #include "STM32F3xx/Include/stm32f3xx.h"
+#include "STM32F3xx/Include/stm32f3xx.h"
#elif defined(STM32F4)
- #include "STM32F4xx/Include/stm32f4xx.h"
+#include "STM32F4xx/Include/stm32f4xx.h"
#elif defined(STM32F7)
- #include "STM32F7xx/Include/stm32f7xx.h"
+#include "STM32F7xx/Include/stm32f7xx.h"
#elif defined(STM32H7)
- #include "STM32H7xx/Include/stm32h7xx.h"
+#include "STM32H7xx/Include/stm32h7xx.h"
#elif defined(STM32L0)
- #include "STM32L0xx/Include/stm32l0xx.h"
+#include "STM32L0xx/Include/stm32l0xx.h"
#elif defined(STM32L1)
- #include "STM32L1xx/Include/stm32l1xx.h"
+#include "STM32L1xx/Include/stm32l1xx.h"
#elif defined(STM32L4)
- #include "STM32L4xx/Include/stm32l4xx.h"
+#include "STM32L4xx/Include/stm32l4xx.h"
#elif defined(STM32L5)
- #include "STM32L5xx/Include/stm32l5xx.h"
+#include "STM32L5xx/Include/stm32l5xx.h"
#elif defined(STM32G0)
- #include "STM32G0xx/Include/stm32g0xx.h"
+#include "STM32G0xx/Include/stm32g0xx.h"
#elif defined(STM32G4)
- #include "STM32G4xx/Include/stm32g4xx.h"
+#include "STM32G4xx/Include/stm32g4xx.h"
#elif defined(STM32WB)
- #include "STM32WBxx/Include/stm32wbxx.h"
+#include "STM32WBxx/Include/stm32wbxx.h"
#else
- #error "STM32 family not defined"
+#error "STM32 family not defined"
#endif
-
#endif // _STM32_H_
diff --git a/firmware/targets/f7/Inc/stm32_assert.h b/firmware/targets/f7/Inc/stm32_assert.h
index 9f6261ff..b70ee402 100644
--- a/firmware/targets/f7/Inc/stm32_assert.h
+++ b/firmware/targets/f7/Inc/stm32_assert.h
@@ -21,14 +21,14 @@
#define __STM32_ASSERT_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
-#ifdef USE_FULL_ASSERT
- #define assert_param(expr) ((expr) ? (void)0U : assert_failed())
- void assert_failed();
+#ifdef USE_FULL_ASSERT
+#define assert_param(expr) ((expr) ? (void)0U : assert_failed())
+void assert_failed();
#else
- #define assert_param(expr) ((void)0U)
+#define assert_param(expr) ((void)0U)
#endif /* USE_FULL_ASSERT */
#ifdef __cplusplus
diff --git a/firmware/targets/f7/Inc/stm32wbxx_hal_conf.h b/firmware/targets/f7/Inc/stm32wbxx_hal_conf.h
index dc6a7ae4..06f5c167 100644
--- a/firmware/targets/f7/Inc/stm32wbxx_hal_conf.h
+++ b/firmware/targets/f7/Inc/stm32wbxx_hal_conf.h
@@ -22,7 +22,7 @@
#define __STM32WBxx_HAL_CONF_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Exported types ------------------------------------------------------------*/
@@ -66,26 +66,26 @@
#define HAL_PWR_MODULE_ENABLED
#define HAL_RCC_MODULE_ENABLED
-#define USE_HAL_ADC_REGISTER_CALLBACKS 0u
-#define USE_HAL_COMP_REGISTER_CALLBACKS 0u
-#define USE_HAL_CRYP_REGISTER_CALLBACKS 0u
-#define USE_HAL_I2C_REGISTER_CALLBACKS 0u
-#define USE_HAL_IRDA_REGISTER_CALLBACKS 0u
-#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0u
-#define USE_HAL_PCD_REGISTER_CALLBACKS 0u
-#define USE_HAL_PKA_REGISTER_CALLBACKS 0u
-#define USE_HAL_QSPI_REGISTER_CALLBACKS 0u
-#define USE_HAL_RNG_REGISTER_CALLBACKS 0u
-#define USE_HAL_RTC_REGISTER_CALLBACKS 0u
-#define USE_HAL_SAI_REGISTER_CALLBACKS 0u
+#define USE_HAL_ADC_REGISTER_CALLBACKS 0u
+#define USE_HAL_COMP_REGISTER_CALLBACKS 0u
+#define USE_HAL_CRYP_REGISTER_CALLBACKS 0u
+#define USE_HAL_I2C_REGISTER_CALLBACKS 0u
+#define USE_HAL_IRDA_REGISTER_CALLBACKS 0u
+#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0u
+#define USE_HAL_PCD_REGISTER_CALLBACKS 0u
+#define USE_HAL_PKA_REGISTER_CALLBACKS 0u
+#define USE_HAL_QSPI_REGISTER_CALLBACKS 0u
+#define USE_HAL_RNG_REGISTER_CALLBACKS 0u
+#define USE_HAL_RTC_REGISTER_CALLBACKS 0u
+#define USE_HAL_SAI_REGISTER_CALLBACKS 0u
#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0u
-#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0u
-#define USE_HAL_SPI_REGISTER_CALLBACKS 0u
-#define USE_HAL_TIM_REGISTER_CALLBACKS 0u
-#define USE_HAL_TSC_REGISTER_CALLBACKS 0u
-#define USE_HAL_UART_REGISTER_CALLBACKS 0u
-#define USE_HAL_USART_REGISTER_CALLBACKS 0u
-#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u
+#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0u
+#define USE_HAL_SPI_REGISTER_CALLBACKS 0u
+#define USE_HAL_TIM_REGISTER_CALLBACKS 0u
+#define USE_HAL_TSC_REGISTER_CALLBACKS 0u
+#define USE_HAL_UART_REGISTER_CALLBACKS 0u
+#define USE_HAL_USART_REGISTER_CALLBACKS 0u
+#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u
/* ########################## Oscillator Values adaptation ####################*/
/**
@@ -93,20 +93,20 @@
* This value is used by the RCC HAL module to compute the system frequency
* (when HSE is used as system clock source, directly or through the PLL).
*/
-#if !defined (HSE_VALUE)
-#define HSE_VALUE 32000000U /*!< Value of the External oscillator in Hz */
+#if !defined(HSE_VALUE)
+#define HSE_VALUE 32000000U /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
-#if !defined (HSE_STARTUP_TIMEOUT)
- #define HSE_STARTUP_TIMEOUT ((uint32_t)100) /*!< Time out for HSE start up, in ms */
+#if !defined(HSE_STARTUP_TIMEOUT)
+#define HSE_STARTUP_TIMEOUT ((uint32_t)100) /*!< Time out for HSE start up, in ms */
#endif /* HSE_STARTUP_TIMEOUT */
/**
* @brief Internal Multiple Speed oscillator (MSI) default value.
* This value is the default MSI range value after Reset.
*/
-#if !defined (MSI_VALUE)
- #define MSI_VALUE ((uint32_t)4000000) /*!< Value of the Internal oscillator in Hz*/
+#if !defined(MSI_VALUE)
+#define MSI_VALUE ((uint32_t)4000000) /*!< Value of the Internal oscillator in Hz*/
#endif /* MSI_VALUE */
/**
@@ -114,24 +114,24 @@
* This value is used by the RCC HAL module to compute the system frequency
* (when HSI is used as system clock source, directly or through the PLL).
*/
-#if !defined (HSI_VALUE)
-#define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/
+#if !defined(HSI_VALUE)
+#define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/
#endif /* HSI_VALUE */
/**
* @brief Internal Low Speed oscillator (LSI1) value.
*/
-#if !defined (LSI1_VALUE)
- #define LSI1_VALUE ((uint32_t)32000) /*!< LSI1 Typical Value in Hz*/
-#endif /* LSI1_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
+#if !defined(LSI1_VALUE)
+#define LSI1_VALUE ((uint32_t)32000) /*!< LSI1 Typical Value in Hz*/
+#endif /* LSI1_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
The real value may vary depending on the variations
in voltage and temperature.*/
/**
* @brief Internal Low Speed oscillator (LSI2) value.
*/
-#if !defined (LSI2_VALUE)
- #define LSI2_VALUE ((uint32_t)32000) /*!< LSI2 Typical Value in Hz*/
-#endif /* LSI2_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
+#if !defined(LSI2_VALUE)
+#define LSI2_VALUE ((uint32_t)32000) /*!< LSI2 Typical Value in Hz*/
+#endif /* LSI2_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
The real value may vary depending on the variations
in voltage and temperature.*/
@@ -139,20 +139,20 @@
* @brief External Low Speed oscillator (LSE) value.
* This value is used by the UART, RTC HAL module to compute the system frequency
*/
-#if !defined (LSE_VALUE)
-#define LSE_VALUE 32768U /*!< Value of the External oscillator in Hz*/
+#if !defined(LSE_VALUE)
+#define LSE_VALUE 32768U /*!< Value of the External oscillator in Hz*/
#endif /* LSE_VALUE */
/**
* @brief Internal Multiple Speed oscillator (HSI48) default value.
* This value is the default HSI48 range value after Reset.
*/
-#if !defined (HSI48_VALUE)
- #define HSI48_VALUE ((uint32_t)48000000) /*!< Value of the Internal oscillator in Hz*/
+#if !defined(HSI48_VALUE)
+#define HSI48_VALUE ((uint32_t)48000000) /*!< Value of the Internal oscillator in Hz*/
#endif /* HSI48_VALUE */
-#if !defined (LSE_STARTUP_TIMEOUT)
-#define LSE_STARTUP_TIMEOUT 1000U /*!< Time out for LSE start up, in ms */
+#if !defined(LSE_STARTUP_TIMEOUT)
+#define LSE_STARTUP_TIMEOUT 1000U /*!< Time out for LSE start up, in ms */
#endif /* HSE_STARTUP_TIMEOUT */
/**
@@ -160,8 +160,9 @@
* This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source
* frequency.
*/
-#if !defined (EXTERNAL_SAI1_CLOCK_VALUE)
- #define EXTERNAL_SAI1_CLOCK_VALUE ((uint32_t)2097000) /*!< Value of the SAI1 External clock source in Hz*/
+#if !defined(EXTERNAL_SAI1_CLOCK_VALUE)
+#define EXTERNAL_SAI1_CLOCK_VALUE \
+ ((uint32_t)2097000) /*!< Value of the SAI1 External clock source in Hz*/
#endif /* EXTERNAL_SAI1_CLOCK_VALUE */
/* Tip: To avoid modifying this file each time you need to use different HSE,
@@ -172,19 +173,19 @@
* @brief This is the HAL system configuration section
*/
-#define VDD_VALUE 3300U /*!< Value of VDD in mv */
-#define TICK_INT_PRIORITY 0U /*!< tick interrupt priority */
-#define USE_RTOS 0U
-#define PREFETCH_ENABLE 1U
-#define INSTRUCTION_CACHE_ENABLE 1U
-#define DATA_CACHE_ENABLE 1U
+#define VDD_VALUE 3300U /*!< Value of VDD in mv */
+#define TICK_INT_PRIORITY 0U /*!< tick interrupt priority */
+#define USE_RTOS 0U
+#define PREFETCH_ENABLE 1U
+#define INSTRUCTION_CACHE_ENABLE 1U
+#define DATA_CACHE_ENABLE 1U
/* ########################## Assert Selection ############################## */
/**
* @brief Uncomment the line below to expanse the "assert_param" macro in the
* HAL drivers code
*/
-#define USE_FULL_ASSERT 1U
+#define USE_FULL_ASSERT 1U
/* ################## SPI peripheral configuration ########################## */
@@ -193,146 +194,146 @@
* Deactivated: CRC code cleaned from driver
*/
-#define USE_SPI_CRC 0U
+#define USE_SPI_CRC 0U
/* Includes ------------------------------------------------------------------*/
/**
* @brief Include module's header file
*/
#ifdef HAL_DMA_MODULE_ENABLED
- #include "stm32wbxx_hal_dma.h"
+#include "stm32wbxx_hal_dma.h"
#endif /* HAL_DMA_MODULE_ENABLED */
#ifdef HAL_ADC_MODULE_ENABLED
- #include "stm32wbxx_hal_adc.h"
+#include "stm32wbxx_hal_adc.h"
#endif /* HAL_ADC_MODULE_ENABLED */
#ifdef HAL_COMP_MODULE_ENABLED
- #include "stm32wbxx_hal_comp.h"
+#include "stm32wbxx_hal_comp.h"
#endif /* HAL_COMP_MODULE_ENABLED */
#ifdef HAL_CORTEX_MODULE_ENABLED
- #include "stm32wbxx_hal_cortex.h"
+#include "stm32wbxx_hal_cortex.h"
#endif /* HAL_CORTEX_MODULE_ENABLED */
#ifdef HAL_CRC_MODULE_ENABLED
- #include "stm32wbxx_hal_crc.h"
+#include "stm32wbxx_hal_crc.h"
#endif /* HAL_CRC_MODULE_ENABLED */
#ifdef HAL_CRYP_MODULE_ENABLED
- #include "stm32wbxx_hal_cryp.h"
+#include "stm32wbxx_hal_cryp.h"
#endif /* HAL_CRYP_MODULE_ENABLED */
#ifdef HAL_EXTI_MODULE_ENABLED
- #include "stm32wbxx_hal_exti.h"
+#include "stm32wbxx_hal_exti.h"
#endif /* HAL_EXTI_MODULE_ENABLED */
#ifdef HAL_FLASH_MODULE_ENABLED
- #include "stm32wbxx_hal_flash.h"
+#include "stm32wbxx_hal_flash.h"
#endif /* HAL_FLASH_MODULE_ENABLED */
#ifdef HAL_GPIO_MODULE_ENABLED
- #include "stm32wbxx_hal_gpio.h"
+#include "stm32wbxx_hal_gpio.h"
#endif /* HAL_GPIO_MODULE_ENABLED */
#ifdef HAL_HSEM_MODULE_ENABLED
- #include "stm32wbxx_hal_hsem.h"
+#include "stm32wbxx_hal_hsem.h"
#endif /* HAL_HSEM_MODULE_ENABLED */
#ifdef HAL_I2C_MODULE_ENABLED
- #include "stm32wbxx_hal_i2c.h"
+#include "stm32wbxx_hal_i2c.h"
#endif /* HAL_I2C_MODULE_ENABLED */
#ifdef HAL_IPCC_MODULE_ENABLED
- #include "stm32wbxx_hal_ipcc.h"
+#include "stm32wbxx_hal_ipcc.h"
#endif /* HAL_IPCC_MODULE_ENABLED */
#ifdef HAL_IRDA_MODULE_ENABLED
- #include "stm32wbxx_hal_irda.h"
+#include "stm32wbxx_hal_irda.h"
#endif /* HAL_IRDA_MODULE_ENABLED */
#ifdef HAL_IWDG_MODULE_ENABLED
- #include "stm32wbxx_hal_iwdg.h"
+#include "stm32wbxx_hal_iwdg.h"
#endif /* HAL_IWDG_MODULE_ENABLED */
#ifdef HAL_LCD_MODULE_ENABLED
- #include "stm32wbxx_hal_lcd.h"
+#include "stm32wbxx_hal_lcd.h"
#endif /* HAL_LCD_MODULE_ENABLED */
#ifdef HAL_LPTIM_MODULE_ENABLED
- #include "stm32wbxx_hal_lptim.h"
+#include "stm32wbxx_hal_lptim.h"
#endif /* HAL_LPTIM_MODULE_ENABLED */
#ifdef HAL_PCD_MODULE_ENABLED
- #include "stm32wbxx_hal_pcd.h"
+#include "stm32wbxx_hal_pcd.h"
#endif /* HAL_PCD_MODULE_ENABLED */
#ifdef HAL_PKA_MODULE_ENABLED
- #include "stm32wbxx_hal_pka.h"
+#include "stm32wbxx_hal_pka.h"
#endif /* HAL_PKA_MODULE_ENABLED */
#ifdef HAL_PWR_MODULE_ENABLED
- #include "stm32wbxx_hal_pwr.h"
+#include "stm32wbxx_hal_pwr.h"
#endif /* HAL_PWR_MODULE_ENABLED */
#ifdef HAL_QSPI_MODULE_ENABLED
- #include "stm32wbxx_hal_qspi.h"
+#include "stm32wbxx_hal_qspi.h"
#endif /* HAL_QSPI_MODULE_ENABLED */
#ifdef HAL_RCC_MODULE_ENABLED
- #include "stm32wbxx_hal_rcc.h"
+#include "stm32wbxx_hal_rcc.h"
#endif /* HAL_RCC_MODULE_ENABLED */
#ifdef HAL_RNG_MODULE_ENABLED
- #include "stm32wbxx_hal_rng.h"
+#include "stm32wbxx_hal_rng.h"
#endif /* HAL_RNG_MODULE_ENABLED */
#ifdef HAL_RTC_MODULE_ENABLED
- #include "stm32wbxx_hal_rtc.h"
+#include "stm32wbxx_hal_rtc.h"
#endif /* HAL_RTC_MODULE_ENABLED */
#ifdef HAL_SAI_MODULE_ENABLED
- #include "stm32wbxx_hal_sai.h"
+#include "stm32wbxx_hal_sai.h"
#endif /* HAL_SAI_MODULE_ENABLED */
#ifdef HAL_SMARTCARD_MODULE_ENABLED
- #include "stm32wbxx_hal_smartcard.h"
+#include "stm32wbxx_hal_smartcard.h"
#endif /* HAL_SMARTCARD_MODULE_ENABLED */
#ifdef HAL_SMBUS_MODULE_ENABLED
- #include "stm32wbxx_hal_smbus.h"
+#include "stm32wbxx_hal_smbus.h"
#endif /* HAL_SMBUS_MODULE_ENABLED */
#ifdef HAL_SPI_MODULE_ENABLED
- #include "stm32wbxx_hal_spi.h"
+#include "stm32wbxx_hal_spi.h"
#endif /* HAL_SPI_MODULE_ENABLED */
#ifdef HAL_TIM_MODULE_ENABLED
- #include "stm32wbxx_hal_tim.h"
+#include "stm32wbxx_hal_tim.h"
#endif /* HAL_TIM_MODULE_ENABLED */
#ifdef HAL_TSC_MODULE_ENABLED
- #include "stm32wbxx_hal_tsc.h"
+#include "stm32wbxx_hal_tsc.h"
#endif /* HAL_TSC_MODULE_ENABLED */
#ifdef HAL_UART_MODULE_ENABLED
- #include "stm32wbxx_hal_uart.h"
+#include "stm32wbxx_hal_uart.h"
#endif /* HAL_UART_MODULE_ENABLED */
#ifdef HAL_USART_MODULE_ENABLED
- #include "stm32wbxx_hal_usart.h"
+#include "stm32wbxx_hal_usart.h"
#endif /* HAL_USART_MODULE_ENABLED */
#ifdef HAL_WWDG_MODULE_ENABLED
- #include "stm32wbxx_hal_wwdg.h"
+#include "stm32wbxx_hal_wwdg.h"
#endif /* HAL_WWDG_MODULE_ENABLED */
/* Exported macro ------------------------------------------------------------*/
-#ifdef USE_FULL_ASSERT
- #define assert_param(expr) ((expr) ? (void)0U : assert_failed())
- void assert_failed();
+#ifdef USE_FULL_ASSERT
+#define assert_param(expr) ((expr) ? (void)0U : assert_failed())
+void assert_failed();
#else
- #define assert_param(expr) ((void)0U)
+#define assert_param(expr) ((void)0U)
#endif /* USE_FULL_ASSERT */
#ifdef __cplusplus
diff --git a/firmware/targets/f7/Inc/stm32wbxx_it.h b/firmware/targets/f7/Inc/stm32wbxx_it.h
index b7ed315d..d66e6e08 100644
--- a/firmware/targets/f7/Inc/stm32wbxx_it.h
+++ b/firmware/targets/f7/Inc/stm32wbxx_it.h
@@ -23,7 +23,7 @@
#define __STM32WBxx_IT_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Private includes ----------------------------------------------------------*/
diff --git a/firmware/targets/f7/Inc/tim.h b/firmware/targets/f7/Inc/tim.h
index 3a750349..e0f65f10 100644
--- a/firmware/targets/f7/Inc/tim.h
+++ b/firmware/targets/f7/Inc/tim.h
@@ -43,7 +43,7 @@ void MX_TIM1_Init(void);
void MX_TIM2_Init(void);
void MX_TIM16_Init(void);
-void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
+void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim);
/* USER CODE BEGIN Prototypes */
diff --git a/firmware/targets/f7/Src/comp.c b/firmware/targets/f7/Src/comp.c
index 75d49b7e..97631fab 100644
--- a/firmware/targets/f7/Src/comp.c
+++ b/firmware/targets/f7/Src/comp.c
@@ -27,73 +27,63 @@
COMP_HandleTypeDef hcomp1;
/* COMP1 init function */
-void MX_COMP1_Init(void)
-{
-
- hcomp1.Instance = COMP1;
- hcomp1.Init.InputMinus = COMP_INPUT_MINUS_1_4VREFINT;
- hcomp1.Init.InputPlus = COMP_INPUT_PLUS_IO1;
- hcomp1.Init.OutputPol = COMP_OUTPUTPOL_NONINVERTED;
- hcomp1.Init.Hysteresis = COMP_HYSTERESIS_HIGH;
- hcomp1.Init.BlankingSrce = COMP_BLANKINGSRC_NONE;
- hcomp1.Init.Mode = COMP_POWERMODE_MEDIUMSPEED;
- hcomp1.Init.WindowMode = COMP_WINDOWMODE_DISABLE;
- hcomp1.Init.TriggerMode = COMP_TRIGGERMODE_IT_RISING_FALLING;
- if (HAL_COMP_Init(&hcomp1) != HAL_OK)
- {
- Error_Handler();
- }
-
+void MX_COMP1_Init(void) {
+ hcomp1.Instance = COMP1;
+ hcomp1.Init.InputMinus = COMP_INPUT_MINUS_1_4VREFINT;
+ hcomp1.Init.InputPlus = COMP_INPUT_PLUS_IO1;
+ hcomp1.Init.OutputPol = COMP_OUTPUTPOL_NONINVERTED;
+ hcomp1.Init.Hysteresis = COMP_HYSTERESIS_HIGH;
+ hcomp1.Init.BlankingSrce = COMP_BLANKINGSRC_NONE;
+ hcomp1.Init.Mode = COMP_POWERMODE_MEDIUMSPEED;
+ hcomp1.Init.WindowMode = COMP_WINDOWMODE_DISABLE;
+ hcomp1.Init.TriggerMode = COMP_TRIGGERMODE_IT_RISING_FALLING;
+ if(HAL_COMP_Init(&hcomp1) != HAL_OK) {
+ Error_Handler();
+ }
}
-void HAL_COMP_MspInit(COMP_HandleTypeDef* compHandle)
-{
-
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- if(compHandle->Instance==COMP1)
- {
- /* USER CODE BEGIN COMP1_MspInit 0 */
+void HAL_COMP_MspInit(COMP_HandleTypeDef* compHandle) {
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ if(compHandle->Instance == COMP1) {
+ /* USER CODE BEGIN COMP1_MspInit 0 */
- /* USER CODE END COMP1_MspInit 0 */
+ /* USER CODE END COMP1_MspInit 0 */
- __HAL_RCC_GPIOC_CLK_ENABLE();
- /**COMP1 GPIO Configuration
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ /**COMP1 GPIO Configuration
PC5 ------> COMP1_INP
*/
- GPIO_InitStruct.Pin = RFID_RF_IN_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(RFID_RF_IN_GPIO_Port, &GPIO_InitStruct);
-
- /* COMP1 interrupt Init */
- HAL_NVIC_SetPriority(COMP_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(COMP_IRQn);
- /* USER CODE BEGIN COMP1_MspInit 1 */
-
- /* USER CODE END COMP1_MspInit 1 */
- }
+ GPIO_InitStruct.Pin = RFID_RF_IN_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ HAL_GPIO_Init(RFID_RF_IN_GPIO_Port, &GPIO_InitStruct);
+
+ /* COMP1 interrupt Init */
+ HAL_NVIC_SetPriority(COMP_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(COMP_IRQn);
+ /* USER CODE BEGIN COMP1_MspInit 1 */
+
+ /* USER CODE END COMP1_MspInit 1 */
+ }
}
-void HAL_COMP_MspDeInit(COMP_HandleTypeDef* compHandle)
-{
-
- if(compHandle->Instance==COMP1)
- {
- /* USER CODE BEGIN COMP1_MspDeInit 0 */
+void HAL_COMP_MspDeInit(COMP_HandleTypeDef* compHandle) {
+ if(compHandle->Instance == COMP1) {
+ /* USER CODE BEGIN COMP1_MspDeInit 0 */
- /* USER CODE END COMP1_MspDeInit 0 */
+ /* USER CODE END COMP1_MspDeInit 0 */
- /**COMP1 GPIO Configuration
+ /**COMP1 GPIO Configuration
PC5 ------> COMP1_INP
*/
- HAL_GPIO_DeInit(RFID_RF_IN_GPIO_Port, RFID_RF_IN_Pin);
+ HAL_GPIO_DeInit(RFID_RF_IN_GPIO_Port, RFID_RF_IN_Pin);
- /* COMP1 interrupt Deinit */
- HAL_NVIC_DisableIRQ(COMP_IRQn);
- /* USER CODE BEGIN COMP1_MspDeInit 1 */
+ /* COMP1 interrupt Deinit */
+ HAL_NVIC_DisableIRQ(COMP_IRQn);
+ /* USER CODE BEGIN COMP1_MspDeInit 1 */
- /* USER CODE END COMP1_MspDeInit 1 */
- }
+ /* USER CODE END COMP1_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f7/Src/main.c b/firmware/targets/f7/Src/main.c
index 44c5013e..b1ab4dcd 100644
--- a/firmware/targets/f7/Src/main.c
+++ b/firmware/targets/f7/Src/main.c
@@ -1,7 +1,7 @@
#include "main.h"
#include <furi.h>
-#include <furi-hal.h>
+#include <furi_hal.h>
#include <flipper.h>
#define TAG "Main"
@@ -26,14 +26,15 @@ int main(void) {
// Start kernel
osKernelStart();
- while (1) {}
+ while(1) {
+ }
}
void Error_Handler(void) {
furi_crash("ErrorHandler");
}
-#ifdef USE_FULL_ASSERT
+#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
@@ -41,7 +42,7 @@ void Error_Handler(void) {
* @param line: assert_param error line source number
* @retval None
*/
-void assert_failed(uint8_t *file, uint32_t line) {
+void assert_failed(uint8_t* file, uint32_t line) {
furi_crash("HAL assert failed");
}
#endif /* USE_FULL_ASSERT */
diff --git a/firmware/targets/f7/Src/stm32wbxx_hal_msp.c b/firmware/targets/f7/Src/stm32wbxx_hal_msp.c
index 534e6afd..9fa9d660 100644
--- a/firmware/targets/f7/Src/stm32wbxx_hal_msp.c
+++ b/firmware/targets/f7/Src/stm32wbxx_hal_msp.c
@@ -61,29 +61,28 @@
/**
* Initializes the Global MSP.
*/
-void HAL_MspInit(void)
-{
- /* USER CODE BEGIN MspInit 0 */
+void HAL_MspInit(void) {
+ /* USER CODE BEGIN MspInit 0 */
- /* USER CODE END MspInit 0 */
+ /* USER CODE END MspInit 0 */
- __HAL_RCC_HSEM_CLK_ENABLE();
+ __HAL_RCC_HSEM_CLK_ENABLE();
- /* System interrupt init*/
- /* PendSV_IRQn interrupt configuration */
- HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0);
+ /* System interrupt init*/
+ /* PendSV_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0);
- /* Peripheral interrupt init */
- /* RCC_IRQn interrupt configuration */
- HAL_NVIC_SetPriority(RCC_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(RCC_IRQn);
- /* HSEM_IRQn interrupt configuration */
- HAL_NVIC_SetPriority(HSEM_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(HSEM_IRQn);
+ /* Peripheral interrupt init */
+ /* RCC_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(RCC_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(RCC_IRQn);
+ /* HSEM_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(HSEM_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(HSEM_IRQn);
- /* USER CODE BEGIN MspInit 1 */
+ /* USER CODE BEGIN MspInit 1 */
- /* USER CODE END MspInit 1 */
+ /* USER CODE END MspInit 1 */
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f7/Src/stm32wbxx_it.c b/firmware/targets/f7/Src/stm32wbxx_it.c
index d4f71267..d8d763af 100644
--- a/firmware/targets/f7/Src/stm32wbxx_it.c
+++ b/firmware/targets/f7/Src/stm32wbxx_it.c
@@ -39,10 +39,10 @@ void HSEM_IRQHandler(void) {
HAL_HSEM_IRQHandler();
}
-void IPCC_C1_TX_IRQHandler(void){
+void IPCC_C1_TX_IRQHandler(void) {
HW_IPCC_Tx_Handler();
}
-void IPCC_C1_RX_IRQHandler(void){
+void IPCC_C1_RX_IRQHandler(void) {
HW_IPCC_Rx_Handler();
}
diff --git a/firmware/targets/f7/Src/system_stm32wbxx.c b/firmware/targets/f7/Src/system_stm32wbxx.c
index 38db6ece..5b42c579 100644
--- a/firmware/targets/f7/Src/system_stm32wbxx.c
+++ b/firmware/targets/f7/Src/system_stm32wbxx.c
@@ -85,24 +85,24 @@
#include "stm32wbxx.h"
-#if !defined (HSE_VALUE)
- #define HSE_VALUE (32000000UL) /*!< Value of the External oscillator in Hz */
+#if !defined(HSE_VALUE)
+#define HSE_VALUE (32000000UL) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
-#if !defined (MSI_VALUE)
- #define MSI_VALUE (4000000UL) /*!< Value of the Internal oscillator in Hz*/
+#if !defined(MSI_VALUE)
+#define MSI_VALUE (4000000UL) /*!< Value of the Internal oscillator in Hz*/
#endif /* MSI_VALUE */
-#if !defined (HSI_VALUE)
- #define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/
+#if !defined(HSI_VALUE)
+#define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/
#endif /* HSI_VALUE */
-#if !defined (LSI_VALUE)
- #define LSI_VALUE (32000UL) /*!< Value of LSI in Hz*/
-#endif /* LSI_VALUE */
+#if !defined(LSI_VALUE)
+#define LSI_VALUE (32000UL) /*!< Value of LSI in Hz*/
+#endif /* LSI_VALUE */
-#if !defined (LSE_VALUE)
- #define LSE_VALUE (32768UL) /*!< Value of LSE in Hz*/
+#if !defined(LSE_VALUE)
+#define LSE_VALUE (32768UL) /*!< Value of LSE in Hz*/
#endif /* LSE_VALUE */
/**
@@ -124,10 +124,12 @@
/*!< Uncomment the following line if you need to relocate your vector Table in
Internal SRAM. */
/* #define VECT_TAB_SRAM */
-#define VECT_TAB_OFFSET OS_OFFSET /*!< Vector Table base offset field.
+#define VECT_TAB_OFFSET \
+ OS_OFFSET /*!< Vector Table base offset field.
This value must be a multiple of 0x200. */
-#define VECT_TAB_BASE_ADDRESS SRAM1_BASE /*!< Vector Table base offset field.
+#define VECT_TAB_BASE_ADDRESS \
+ SRAM1_BASE /*!< Vector Table base offset field.
This value must be a multiple of 0x200. */
/**
* @}
@@ -144,7 +146,7 @@
/** @addtogroup STM32WBxx_System_Private_Variables
* @{
*/
- /* The SystemCoreClock variable is updated in three ways:
+/* The SystemCoreClock variable is updated in three ways:
1) by calling CMSIS function SystemCoreClockUpdate()
2) by calling HAL API function HAL_RCC_GetHCLKFreq()
3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
@@ -152,20 +154,37 @@
is no need to call the 2 first functions listed above, since SystemCoreClock
variable is updated automatically.
*/
- uint32_t SystemCoreClock = 4000000UL ; /*CPU1: M4 on MSI clock after startup (4MHz)*/
-
- const uint32_t AHBPrescTable[16UL] = {1UL, 3UL, 5UL, 1UL, 1UL, 6UL, 10UL, 32UL, 2UL, 4UL, 8UL, 16UL, 64UL, 128UL, 256UL, 512UL};
-
- const uint32_t APBPrescTable[8UL] = {0UL, 0UL, 0UL, 0UL, 1UL, 2UL, 3UL, 4UL};
-
- const uint32_t MSIRangeTable[16UL] = {100000UL, 200000UL, 400000UL, 800000UL, 1000000UL, 2000000UL, \
- 4000000UL, 8000000UL, 16000000UL, 24000000UL, 32000000UL, 48000000UL, 0UL, 0UL, 0UL, 0UL}; /* 0UL values are incorrect cases */
+uint32_t SystemCoreClock = 4000000UL; /*CPU1: M4 on MSI clock after startup (4MHz)*/
+
+const uint32_t AHBPrescTable[16UL] =
+ {1UL, 3UL, 5UL, 1UL, 1UL, 6UL, 10UL, 32UL, 2UL, 4UL, 8UL, 16UL, 64UL, 128UL, 256UL, 512UL};
+
+const uint32_t APBPrescTable[8UL] = {0UL, 0UL, 0UL, 0UL, 1UL, 2UL, 3UL, 4UL};
+
+const uint32_t MSIRangeTable[16UL] = {
+ 100000UL,
+ 200000UL,
+ 400000UL,
+ 800000UL,
+ 1000000UL,
+ 2000000UL,
+ 4000000UL,
+ 8000000UL,
+ 16000000UL,
+ 24000000UL,
+ 32000000UL,
+ 48000000UL,
+ 0UL,
+ 0UL,
+ 0UL,
+ 0UL}; /* 0UL values are incorrect cases */
#if defined(STM32WB55xx) || defined(STM32WB5Mxx) || defined(STM32WB35xx)
- const uint32_t SmpsPrescalerTable[4UL][6UL]={{1UL,3UL,2UL,2UL,1UL,2UL}, \
- {2UL,6UL,4UL,3UL,2UL,4UL}, \
- {4UL,12UL,8UL,6UL,4UL,8UL}, \
- {4UL,12UL,8UL,6UL,4UL,8UL}};
+const uint32_t SmpsPrescalerTable[4UL][6UL] = {
+ {1UL, 3UL, 2UL, 2UL, 1UL, 2UL},
+ {2UL, 6UL, 4UL, 3UL, 2UL, 4UL},
+ {4UL, 12UL, 8UL, 6UL, 4UL, 8UL},
+ {4UL, 12UL, 8UL, 6UL, 4UL, 8UL}};
#endif
/**
@@ -189,50 +208,51 @@
* @param None
* @retval None
*/
-void SystemInit(void)
-{
- /* Configure the Vector Table location add offset address ------------------*/
-#if defined(VECT_TAB_SRAM) && defined(VECT_TAB_BASE_ADDRESS)
- /* program in SRAMx */
- SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAMx for CPU1 */
-#else /* program in FLASH */
- SCB->VTOR = VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
+void SystemInit(void) {
+ /* Configure the Vector Table location add offset address ------------------*/
+#if defined(VECT_TAB_SRAM) && defined(VECT_TAB_BASE_ADDRESS)
+ /* program in SRAMx */
+ SCB->VTOR = VECT_TAB_BASE_ADDRESS |
+ VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAMx for CPU1 */
+#else /* program in FLASH */
+ SCB->VTOR = VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
#endif
- /* FPU settings ------------------------------------------------------------*/
- #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
- SCB->CPACR |= ((3UL << (10UL*2UL))|(3UL << (11UL*2UL))); /* set CP10 and CP11 Full Access */
- #endif
-
- /* Reset the RCC clock configuration to the default reset state ------------*/
- /* Set MSION bit */
- RCC->CR |= RCC_CR_MSION;
-
- /* Reset CFGR register */
- RCC->CFGR = 0x00070000U;
-
- /* Reset PLLSAI1ON, PLLON, HSECSSON, HSEON, HSION, and MSIPLLON bits */
- RCC->CR &= (uint32_t)0xFAF6FEFBU;
-
- /*!< Reset LSI1 and LSI2 bits */
- RCC->CSR &= (uint32_t)0xFFFFFFFAU;
-
- /*!< Reset HSI48ON bit */
- RCC->CRRCR &= (uint32_t)0xFFFFFFFEU;
-
- /* Reset PLLCFGR register */
- RCC->PLLCFGR = 0x22041000U;
+/* FPU settings ------------------------------------------------------------*/
+#if(__FPU_PRESENT == 1) && (__FPU_USED == 1)
+ SCB->CPACR |=
+ ((3UL << (10UL * 2UL)) | (3UL << (11UL * 2UL))); /* set CP10 and CP11 Full Access */
+#endif
+
+ /* Reset the RCC clock configuration to the default reset state ------------*/
+ /* Set MSION bit */
+ RCC->CR |= RCC_CR_MSION;
+
+ /* Reset CFGR register */
+ RCC->CFGR = 0x00070000U;
+
+ /* Reset PLLSAI1ON, PLLON, HSECSSON, HSEON, HSION, and MSIPLLON bits */
+ RCC->CR &= (uint32_t)0xFAF6FEFBU;
+
+ /*!< Reset LSI1 and LSI2 bits */
+ RCC->CSR &= (uint32_t)0xFFFFFFFAU;
+
+ /*!< Reset HSI48ON bit */
+ RCC->CRRCR &= (uint32_t)0xFFFFFFFEU;
+
+ /* Reset PLLCFGR register */
+ RCC->PLLCFGR = 0x22041000U;
#if defined(STM32WB55xx) || defined(STM32WB5Mxx)
- /* Reset PLLSAI1CFGR register */
- RCC->PLLSAI1CFGR = 0x22041000U;
+ /* Reset PLLSAI1CFGR register */
+ RCC->PLLSAI1CFGR = 0x22041000U;
#endif
-
- /* Reset HSEBYP bit */
- RCC->CR &= 0xFFFBFFFFU;
- /* Disable all interrupts */
- RCC->CIER = 0x00000000;
+ /* Reset HSEBYP bit */
+ RCC->CR &= 0xFFFBFFFFU;
+
+ /* Disable all interrupts */
+ RCC->CIER = 0x00000000;
}
/**
@@ -277,71 +297,65 @@ void SystemInit(void)
* @param None
* @retval None
*/
-void SystemCoreClockUpdate(void)
-{
- uint32_t tmp, msirange, pllvco, pllr, pllsource , pllm;
+void SystemCoreClockUpdate(void) {
+ uint32_t tmp, msirange, pllvco, pllr, pllsource, pllm;
- /* Get MSI Range frequency--------------------------------------------------*/
+ /* Get MSI Range frequency--------------------------------------------------*/
- /*MSI frequency range in Hz*/
- msirange = MSIRangeTable[(RCC->CR & RCC_CR_MSIRANGE) >> RCC_CR_MSIRANGE_Pos];
+ /*MSI frequency range in Hz*/
+ msirange = MSIRangeTable[(RCC->CR & RCC_CR_MSIRANGE) >> RCC_CR_MSIRANGE_Pos];
- /* Get SYSCLK source -------------------------------------------------------*/
- switch (RCC->CFGR & RCC_CFGR_SWS)
- {
- case 0x00: /* MSI used as system clock source */
- SystemCoreClock = msirange;
- break;
+ /* Get SYSCLK source -------------------------------------------------------*/
+ switch(RCC->CFGR & RCC_CFGR_SWS) {
+ case 0x00: /* MSI used as system clock source */
+ SystemCoreClock = msirange;
+ break;
- case 0x04: /* HSI used as system clock source */
- /* HSI used as system clock source */
+ case 0x04: /* HSI used as system clock source */
+ /* HSI used as system clock source */
SystemCoreClock = HSI_VALUE;
- break;
+ break;
- case 0x08: /* HSE used as system clock source */
- SystemCoreClock = HSE_VALUE;
- break;
+ case 0x08: /* HSE used as system clock source */
+ SystemCoreClock = HSE_VALUE;
+ break;
case 0x0C: /* PLL used as system clock source */
- /* PLL_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLM) * PLLN
+ /* PLL_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLM) * PLLN
SYSCLK = PLL_VCO / PLLR
*/
- pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC);
- pllm = ((RCC->PLLCFGR & RCC_PLLCFGR_PLLM) >> RCC_PLLCFGR_PLLM_Pos) + 1UL ;
-
- if(pllsource == 0x02UL) /* HSI used as PLL clock source */
- {
- pllvco = (HSI_VALUE / pllm);
- }
- else if(pllsource == 0x03UL) /* HSE used as PLL clock source */
- {
- pllvco = (HSE_VALUE / pllm);
- }
- else /* MSI used as PLL clock source */
- {
- pllvco = (msirange / pllm);
- }
-
- pllvco = pllvco * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos);
- pllr = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> RCC_PLLCFGR_PLLR_Pos) + 1UL);
-
- SystemCoreClock = pllvco/pllr;
- break;
+ pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC);
+ pllm = ((RCC->PLLCFGR & RCC_PLLCFGR_PLLM) >> RCC_PLLCFGR_PLLM_Pos) + 1UL;
+
+ if(pllsource == 0x02UL) /* HSI used as PLL clock source */
+ {
+ pllvco = (HSI_VALUE / pllm);
+ } else if(pllsource == 0x03UL) /* HSE used as PLL clock source */
+ {
+ pllvco = (HSE_VALUE / pllm);
+ } else /* MSI used as PLL clock source */
+ {
+ pllvco = (msirange / pllm);
+ }
+
+ pllvco = pllvco * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos);
+ pllr = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> RCC_PLLCFGR_PLLR_Pos) + 1UL);
+
+ SystemCoreClock = pllvco / pllr;
+ break;
default:
- SystemCoreClock = msirange;
- break;
- }
-
- /* Compute HCLK clock frequency --------------------------------------------*/
- /* Get HCLK1 prescaler */
- tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos)];
- /* HCLK clock frequency */
- SystemCoreClock = SystemCoreClock / tmp;
-
+ SystemCoreClock = msirange;
+ break;
+ }
+
+ /* Compute HCLK clock frequency --------------------------------------------*/
+ /* Get HCLK1 prescaler */
+ tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos)];
+ /* HCLK clock frequency */
+ SystemCoreClock = SystemCoreClock / tmp;
}
-
/**
* @}
*/
diff --git a/firmware/targets/f7/Src/tim.c b/firmware/targets/f7/Src/tim.c
index 12ff713a..ba27d1cc 100644
--- a/firmware/targets/f7/Src/tim.c
+++ b/firmware/targets/f7/Src/tim.c
@@ -29,329 +29,285 @@ TIM_HandleTypeDef htim2;
TIM_HandleTypeDef htim16;
/* TIM1 init function */
-void MX_TIM1_Init(void)
-{
- TIM_ClockConfigTypeDef sClockSourceConfig = {0};
- TIM_MasterConfigTypeDef sMasterConfig = {0};
- TIM_OC_InitTypeDef sConfigOC = {0};
- TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
-
- htim1.Instance = TIM1;
- htim1.Init.Prescaler = 0;
- htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim1.Init.Period = 65535;
- htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
- htim1.Init.RepetitionCounter = 0;
- htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
- if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
- {
- Error_Handler();
- }
- sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
- if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_TIM_OC_Init(&htim1) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
- {
- Error_Handler();
- }
- sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
- sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
- sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
- if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigOC.OCMode = TIM_OCMODE_TIMING;
- sConfigOC.Pulse = 0;
- sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
- sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
- sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
- sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
- sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
- if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigOC.OCMode = TIM_OCMODE_PWM1;
- if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
- {
- Error_Handler();
- }
- sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
- sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
- sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
- sBreakDeadTimeConfig.DeadTime = 0;
- sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
- sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
- sBreakDeadTimeConfig.BreakFilter = 0;
- sBreakDeadTimeConfig.BreakAFMode = TIM_BREAK_AFMODE_INPUT;
- sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
- sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
- sBreakDeadTimeConfig.Break2Filter = 0;
- sBreakDeadTimeConfig.Break2AFMode = TIM_BREAK_AFMODE_INPUT;
- sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
- if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
- {
- Error_Handler();
- }
- HAL_TIM_MspPostInit(&htim1);
-
+void MX_TIM1_Init(void) {
+ TIM_ClockConfigTypeDef sClockSourceConfig = {0};
+ TIM_MasterConfigTypeDef sMasterConfig = {0};
+ TIM_OC_InitTypeDef sConfigOC = {0};
+ TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
+
+ htim1.Instance = TIM1;
+ htim1.Init.Prescaler = 0;
+ htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
+ htim1.Init.Period = 65535;
+ htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+ htim1.Init.RepetitionCounter = 0;
+ htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
+ if(HAL_TIM_Base_Init(&htim1) != HAL_OK) {
+ Error_Handler();
+ }
+ sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
+ if(HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ if(HAL_TIM_OC_Init(&htim1) != HAL_OK) {
+ Error_Handler();
+ }
+ if(HAL_TIM_PWM_Init(&htim1) != HAL_OK) {
+ Error_Handler();
+ }
+ sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
+ sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
+ sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
+ if(HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ sConfigOC.OCMode = TIM_OCMODE_TIMING;
+ sConfigOC.Pulse = 0;
+ sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
+ sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
+ sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
+ sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
+ sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
+ if(HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) {
+ Error_Handler();
+ }
+ sConfigOC.OCMode = TIM_OCMODE_PWM1;
+ if(HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) {
+ Error_Handler();
+ }
+ sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
+ sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
+ sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
+ sBreakDeadTimeConfig.DeadTime = 0;
+ sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
+ sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
+ sBreakDeadTimeConfig.BreakFilter = 0;
+ sBreakDeadTimeConfig.BreakAFMode = TIM_BREAK_AFMODE_INPUT;
+ sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
+ sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
+ sBreakDeadTimeConfig.Break2Filter = 0;
+ sBreakDeadTimeConfig.Break2AFMode = TIM_BREAK_AFMODE_INPUT;
+ sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
+ if(HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ HAL_TIM_MspPostInit(&htim1);
}
/* TIM2 init function */
-void MX_TIM2_Init(void)
-{
- TIM_ClockConfigTypeDef sClockSourceConfig = {0};
- TIM_MasterConfigTypeDef sMasterConfig = {0};
- TIM_IC_InitTypeDef sConfigIC = {0};
-
- htim2.Instance = TIM2;
- htim2.Init.Prescaler = 64-1;
- htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim2.Init.Period = 4294967295;
- htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
- htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
- if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
- {
- Error_Handler();
- }
- sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
- if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_TIM_IC_Init(&htim2) != HAL_OK)
- {
- Error_Handler();
- }
- sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
- sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
- if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_FALLING;
- sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
- sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
- sConfigIC.ICFilter = 0;
- if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
- sConfigIC.ICSelection = TIM_ICSELECTION_INDIRECTTI;
- if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_2) != HAL_OK)
- {
- Error_Handler();
- }
-
+void MX_TIM2_Init(void) {
+ TIM_ClockConfigTypeDef sClockSourceConfig = {0};
+ TIM_MasterConfigTypeDef sMasterConfig = {0};
+ TIM_IC_InitTypeDef sConfigIC = {0};
+
+ htim2.Instance = TIM2;
+ htim2.Init.Prescaler = 64 - 1;
+ htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
+ htim2.Init.Period = 4294967295;
+ htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+ htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
+ if(HAL_TIM_Base_Init(&htim2) != HAL_OK) {
+ Error_Handler();
+ }
+ sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
+ if(HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ if(HAL_TIM_IC_Init(&htim2) != HAL_OK) {
+ Error_Handler();
+ }
+ sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
+ sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
+ if(HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_FALLING;
+ sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
+ sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
+ sConfigIC.ICFilter = 0;
+ if(HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1) != HAL_OK) {
+ Error_Handler();
+ }
+ sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
+ sConfigIC.ICSelection = TIM_ICSELECTION_INDIRECTTI;
+ if(HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_2) != HAL_OK) {
+ Error_Handler();
+ }
}
/* TIM16 init function */
-void MX_TIM16_Init(void)
-{
- TIM_OC_InitTypeDef sConfigOC = {0};
- TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
-
- htim16.Instance = TIM16;
- htim16.Init.Prescaler = 500 - 1;
- htim16.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim16.Init.Period = 291;
- htim16.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
- htim16.Init.RepetitionCounter = 0;
- htim16.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
- if (HAL_TIM_Base_Init(&htim16) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_TIM_PWM_Init(&htim16) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigOC.OCMode = TIM_OCMODE_PWM1;
- sConfigOC.Pulse = 145;
- sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
- sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
- sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
- sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
- sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
- if (HAL_TIM_PWM_ConfigChannel(&htim16, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
- {
- Error_Handler();
- }
- sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
- sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
- sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
- sBreakDeadTimeConfig.DeadTime = 0;
- sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
- sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
- sBreakDeadTimeConfig.BreakFilter = 0;
- sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
- if (HAL_TIMEx_ConfigBreakDeadTime(&htim16, &sBreakDeadTimeConfig) != HAL_OK)
- {
- Error_Handler();
- }
- HAL_TIM_MspPostInit(&htim16);
-
+void MX_TIM16_Init(void) {
+ TIM_OC_InitTypeDef sConfigOC = {0};
+ TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
+
+ htim16.Instance = TIM16;
+ htim16.Init.Prescaler = 500 - 1;
+ htim16.Init.CounterMode = TIM_COUNTERMODE_UP;
+ htim16.Init.Period = 291;
+ htim16.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+ htim16.Init.RepetitionCounter = 0;
+ htim16.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
+ if(HAL_TIM_Base_Init(&htim16) != HAL_OK) {
+ Error_Handler();
+ }
+ if(HAL_TIM_PWM_Init(&htim16) != HAL_OK) {
+ Error_Handler();
+ }
+ sConfigOC.OCMode = TIM_OCMODE_PWM1;
+ sConfigOC.Pulse = 145;
+ sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
+ sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
+ sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
+ sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
+ sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
+ if(HAL_TIM_PWM_ConfigChannel(&htim16, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) {
+ Error_Handler();
+ }
+ sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
+ sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
+ sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
+ sBreakDeadTimeConfig.DeadTime = 0;
+ sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
+ sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
+ sBreakDeadTimeConfig.BreakFilter = 0;
+ sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
+ if(HAL_TIMEx_ConfigBreakDeadTime(&htim16, &sBreakDeadTimeConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ HAL_TIM_MspPostInit(&htim16);
}
-void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
-{
-
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- if(tim_baseHandle->Instance==TIM1)
- {
- /* USER CODE BEGIN TIM1_MspInit 0 */
+void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) {
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ if(tim_baseHandle->Instance == TIM1) {
+ /* USER CODE BEGIN TIM1_MspInit 0 */
- /* USER CODE END TIM1_MspInit 0 */
- /* TIM1 clock enable */
- __HAL_RCC_TIM1_CLK_ENABLE();
+ /* USER CODE END TIM1_MspInit 0 */
+ /* TIM1 clock enable */
+ __HAL_RCC_TIM1_CLK_ENABLE();
- /* TIM1 interrupt Init */
- HAL_NVIC_SetPriority(TIM1_TRG_COM_TIM17_IRQn, 0, 0);
- HAL_NVIC_EnableIRQ(TIM1_TRG_COM_TIM17_IRQn);
- /* USER CODE BEGIN TIM1_MspInit 1 */
+ /* TIM1 interrupt Init */
+ HAL_NVIC_SetPriority(TIM1_TRG_COM_TIM17_IRQn, 0, 0);
+ HAL_NVIC_EnableIRQ(TIM1_TRG_COM_TIM17_IRQn);
+ /* USER CODE BEGIN TIM1_MspInit 1 */
- /* USER CODE END TIM1_MspInit 1 */
- }
- else if(tim_baseHandle->Instance==TIM2)
- {
- /* USER CODE BEGIN TIM2_MspInit 0 */
+ /* USER CODE END TIM1_MspInit 1 */
+ } else if(tim_baseHandle->Instance == TIM2) {
+ /* USER CODE BEGIN TIM2_MspInit 0 */
- /* USER CODE END TIM2_MspInit 0 */
- /* TIM2 clock enable */
- __HAL_RCC_TIM2_CLK_ENABLE();
+ /* USER CODE END TIM2_MspInit 0 */
+ /* TIM2 clock enable */
+ __HAL_RCC_TIM2_CLK_ENABLE();
- __HAL_RCC_GPIOA_CLK_ENABLE();
- /**TIM2 GPIO Configuration
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ /**TIM2 GPIO Configuration
PA0 ------> TIM2_CH1
*/
- GPIO_InitStruct.Pin = IR_RX_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
- HAL_GPIO_Init(IR_RX_GPIO_Port, &GPIO_InitStruct);
-
- /* TIM2 interrupt Init */
- HAL_NVIC_SetPriority(TIM2_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(TIM2_IRQn);
- /* USER CODE BEGIN TIM2_MspInit 1 */
-
- /* USER CODE END TIM2_MspInit 1 */
- }
- else if(tim_baseHandle->Instance==TIM16)
- {
- /* USER CODE BEGIN TIM16_MspInit 0 */
-
- /* USER CODE END TIM16_MspInit 0 */
- /* TIM16 clock enable */
- __HAL_RCC_TIM16_CLK_ENABLE();
- /* USER CODE BEGIN TIM16_MspInit 1 */
-
- /* USER CODE END TIM16_MspInit 1 */
- }
+ GPIO_InitStruct.Pin = IR_RX_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
+ HAL_GPIO_Init(IR_RX_GPIO_Port, &GPIO_InitStruct);
+
+ /* TIM2 interrupt Init */
+ HAL_NVIC_SetPriority(TIM2_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(TIM2_IRQn);
+ /* USER CODE BEGIN TIM2_MspInit 1 */
+
+ /* USER CODE END TIM2_MspInit 1 */
+ } else if(tim_baseHandle->Instance == TIM16) {
+ /* USER CODE BEGIN TIM16_MspInit 0 */
+
+ /* USER CODE END TIM16_MspInit 0 */
+ /* TIM16 clock enable */
+ __HAL_RCC_TIM16_CLK_ENABLE();
+ /* USER CODE BEGIN TIM16_MspInit 1 */
+
+ /* USER CODE END TIM16_MspInit 1 */
+ }
}
-void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
-{
-
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- if(timHandle->Instance==TIM1)
- {
- /* USER CODE BEGIN TIM1_MspPostInit 0 */
-
- /* USER CODE END TIM1_MspPostInit 0 */
- __HAL_RCC_GPIOB_CLK_ENABLE();
- /**TIM1 GPIO Configuration
+void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) {
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ if(timHandle->Instance == TIM1) {
+ /* USER CODE BEGIN TIM1_MspPostInit 0 */
+
+ /* USER CODE END TIM1_MspPostInit 0 */
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ /**TIM1 GPIO Configuration
PB9 ------> TIM1_CH3N
PB13 ------> TIM1_CH1N
*/
- GPIO_InitStruct.Pin = IR_TX_Pin|RFID_OUT_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+ GPIO_InitStruct.Pin = IR_TX_Pin | RFID_OUT_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
- /* USER CODE BEGIN TIM1_MspPostInit 1 */
+ /* USER CODE BEGIN TIM1_MspPostInit 1 */
- /* USER CODE END TIM1_MspPostInit 1 */
- }
- else if(timHandle->Instance==TIM16)
- {
- /* USER CODE BEGIN TIM16_MspPostInit 0 */
+ /* USER CODE END TIM1_MspPostInit 1 */
+ } else if(timHandle->Instance == TIM16) {
+ /* USER CODE BEGIN TIM16_MspPostInit 0 */
- /* USER CODE END TIM16_MspPostInit 0 */
+ /* USER CODE END TIM16_MspPostInit 0 */
- __HAL_RCC_GPIOB_CLK_ENABLE();
- /**TIM16 GPIO Configuration
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ /**TIM16 GPIO Configuration
PB8 ------> TIM16_CH1
*/
- GPIO_InitStruct.Pin = SPEAKER_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF14_TIM16;
- HAL_GPIO_Init(SPEAKER_GPIO_Port, &GPIO_InitStruct);
+ GPIO_InitStruct.Pin = SPEAKER_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF14_TIM16;
+ HAL_GPIO_Init(SPEAKER_GPIO_Port, &GPIO_InitStruct);
- /* USER CODE BEGIN TIM16_MspPostInit 1 */
-
- /* USER CODE END TIM16_MspPostInit 1 */
- }
+ /* USER CODE BEGIN TIM16_MspPostInit 1 */
+ /* USER CODE END TIM16_MspPostInit 1 */
+ }
}
-void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
-{
-
- if(tim_baseHandle->Instance==TIM1)
- {
- /* USER CODE BEGIN TIM1_MspDeInit 0 */
+void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle) {
+ if(tim_baseHandle->Instance == TIM1) {
+ /* USER CODE BEGIN TIM1_MspDeInit 0 */
- /* USER CODE END TIM1_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_TIM1_CLK_DISABLE();
+ /* USER CODE END TIM1_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_TIM1_CLK_DISABLE();
- /* TIM1 interrupt Deinit */
- HAL_NVIC_DisableIRQ(TIM1_TRG_COM_TIM17_IRQn);
- /* USER CODE BEGIN TIM1_MspDeInit 1 */
+ /* TIM1 interrupt Deinit */
+ HAL_NVIC_DisableIRQ(TIM1_TRG_COM_TIM17_IRQn);
+ /* USER CODE BEGIN TIM1_MspDeInit 1 */
- /* USER CODE END TIM1_MspDeInit 1 */
- }
- else if(tim_baseHandle->Instance==TIM2)
- {
- /* USER CODE BEGIN TIM2_MspDeInit 0 */
+ /* USER CODE END TIM1_MspDeInit 1 */
+ } else if(tim_baseHandle->Instance == TIM2) {
+ /* USER CODE BEGIN TIM2_MspDeInit 0 */
- /* USER CODE END TIM2_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_TIM2_CLK_DISABLE();
+ /* USER CODE END TIM2_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_TIM2_CLK_DISABLE();
- /**TIM2 GPIO Configuration
+ /**TIM2 GPIO Configuration
PA0 ------> TIM2_CH1
*/
- HAL_GPIO_DeInit(IR_RX_GPIO_Port, IR_RX_Pin);
+ HAL_GPIO_DeInit(IR_RX_GPIO_Port, IR_RX_Pin);
- /* TIM2 interrupt Deinit */
- HAL_NVIC_DisableIRQ(TIM2_IRQn);
- /* USER CODE BEGIN TIM2_MspDeInit 1 */
+ /* TIM2 interrupt Deinit */
+ HAL_NVIC_DisableIRQ(TIM2_IRQn);
+ /* USER CODE BEGIN TIM2_MspDeInit 1 */
- /* USER CODE END TIM2_MspDeInit 1 */
- }
- else if(tim_baseHandle->Instance==TIM16)
- {
- /* USER CODE BEGIN TIM16_MspDeInit 0 */
+ /* USER CODE END TIM2_MspDeInit 1 */
+ } else if(tim_baseHandle->Instance == TIM16) {
+ /* USER CODE BEGIN TIM16_MspDeInit 0 */
- /* USER CODE END TIM16_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_TIM16_CLK_DISABLE();
- /* USER CODE BEGIN TIM16_MspDeInit 1 */
+ /* USER CODE END TIM16_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_TIM16_CLK_DISABLE();
+ /* USER CODE BEGIN TIM16_MspDeInit 1 */
- /* USER CODE END TIM16_MspDeInit 1 */
- }
+ /* USER CODE END TIM16_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f7/ble-glue/app_debug.c b/firmware/targets/f7/ble-glue/app_debug.c
deleted file mode 100644
index b2793073..00000000
--- a/firmware/targets/f7/ble-glue/app_debug.c
+++ /dev/null
@@ -1,375 +0,0 @@
-/* USER CODE BEGIN Header */
-/**
- ******************************************************************************
- * File Name : app_debug.c
- * Description : Debug capabilities source file for STM32WPAN Middleware
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
- * All rights reserved.</center></h2>
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-/* USER CODE END Header */
-
-/* Includes ------------------------------------------------------------------*/
-/* USER CODE BEGIN Includes */
-#include "utilities_common.h"
-
-#include "app_common.h"
-#include "app_debug.h"
-#include "shci.h"
-#include "tl.h"
-#include "dbg_trace.h"
-#include <furi-hal.h>
-/* USER CODE END Includes */
-
-/* Private typedef -----------------------------------------------------------*/
-/* USER CODE BEGIN PTD */
-typedef PACKED_STRUCT
-{
- GPIO_TypeDef* port;
- uint16_t pin;
- uint8_t enable;
- uint8_t reserved;
-} APPD_GpioConfig_t;
-/* USER CODE END PTD */
-
-/* Private defines -----------------------------------------------------------*/
-/* USER CODE BEGIN PD */
-#define GPIO_NBR_OF_RF_SIGNALS 9
-#define GPIO_CFG_NBR_OF_FEATURES 34
-#define NBR_OF_TRACES_CONFIG_PARAMETERS 4
-#define NBR_OF_GENERAL_CONFIG_PARAMETERS 4
-
-/**
- * THIS SHALL BE SET TO A VALUE DIFFERENT FROM 0 ONLY ON REQUEST FROM ST SUPPORT
- */
-#define BLE_DTB_CFG 7
-#define SYS_DBG_CFG1 (SHCI_C2_DEBUG_OPTIONS_IPCORE_LP | SHCI_C2_DEBUG_OPTIONS_CPU2_STOP_EN)
-/* USER CODE END PD */
-
-/* Private variables ---------------------------------------------------------*/
-/* USER CODE BEGIN PV */
-PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static SHCI_C2_DEBUG_TracesConfig_t APPD_TracesConfig={0, 0, 0, 0};
-PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static SHCI_C2_DEBUG_GeneralConfig_t APPD_GeneralConfig={BLE_DTB_CFG, SYS_DBG_CFG1, {0, 0}};
-
-/**
- * THE DEBUG ON GPIO FOR CPU2 IS INTENDED TO BE USED ONLY ON REQUEST FROM ST SUPPORT
- * It provides timing information on the CPU2 activity.
- * All configuration of (port, pin) is supported for each features and can be selected by the user
- * depending on the availability
- */
-static const APPD_GpioConfig_t aGpioConfigList[GPIO_CFG_NBR_OF_FEATURES] =
-{
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* BLE_ISR - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_7, 1, 0}, /* BLE_STACK_TICK - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* BLE_CMD_PROCESS - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* BLE_ACL_DATA_PROCESS - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* SYS_CMD_PROCESS - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* RNG_PROCESS - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* NVM_PROCESS - Set on Entry / Reset on Exit */
- { GPIOB, LL_GPIO_PIN_3, 1, 0}, /* IPCC_GENERAL - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_BLE_CMD_RX - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_BLE_EVT_TX - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_BLE_ACL_DATA_RX - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_SYS_CMD_RX - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_SYS_EVT_TX - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_CLI_CMD_RX - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_OT_CMD_RX - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_OT_ACK_TX - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_CLI_ACK_TX - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_MEM_MANAGER_RX - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_TRACES_TX - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_6, 1, 0}, /* HARD_FAULT - Set on Entry / Reset on Exit */
-/* From v1.1.1 */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IP_CORE_LP_STATUS - Set on Entry / Reset on Exit */
-/* From v1.2.0 */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* END_OF_CONNECTION_EVENT - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* TIMER_SERVER_CALLBACK - Toggle on Entry */
- { GPIOA, LL_GPIO_PIN_4, 1, 0}, /* PES_ACTIVITY - Set on Entry / Reset on Exit */
- { GPIOB, LL_GPIO_PIN_2, 1, 0}, /* MB_BLE_SEND_EVT - Set on Entry / Reset on Exit */
-/* From v1.3.0 */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* BLE_NO_DELAY - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* BLE_STACK_STORE_NVM_CB - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* NVMA_WRITE_ONGOING - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* NVMA_WRITE_COMPLETE - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* NVMA_CLEANUP - Set on Entry / Reset on Exit */
-/* From v1.4.0 */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* NVMA_START - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* FLASH_EOP - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* FLASH_WRITE - Set on Entry / Reset on Exit */
- { GPIOA, LL_GPIO_PIN_0, 0, 0}, /* FLASH_ERASE - Set on Entry / Reset on Exit */
-};
-
-/**
- * THE DEBUG ON GPIO FOR CPU2 IS INTENDED TO BE USED ONLY ON REQUEST FROM ST SUPPORT
- * This table is relevant only for BLE
- * It provides timing information on BLE RF activity.
- * New signals may be allocated at any location when requested by ST
- * The GPIO allocated to each signal depend on the BLE_DTB_CFG value and cannot be changed
- */
-#if( BLE_DTB_CFG == 7)
-static const APPD_GpioConfig_t aRfConfigList[GPIO_NBR_OF_RF_SIGNALS] =
-{
- { GPIOB, LL_GPIO_PIN_2, 0, 0}, /* DTB10 - Tx/Rx SPI */
- { GPIOB, LL_GPIO_PIN_7, 0, 0}, /* DTB11 - Tx/Tx SPI Clk */
- { GPIOA, LL_GPIO_PIN_8, 0, 0}, /* DTB12 - Tx/Rx Ready & SPI Select */
- { GPIOA, LL_GPIO_PIN_9, 0, 0}, /* DTB13 - Tx/Rx Start */
- { GPIOA, LL_GPIO_PIN_10, 0, 0}, /* DTB14 - FSM0 */
- { GPIOA, LL_GPIO_PIN_11, 0, 0}, /* DTB15 - FSM1 */
- { GPIOB, LL_GPIO_PIN_8, 0, 0}, /* DTB16 - FSM2 */
- { GPIOB, LL_GPIO_PIN_11, 0, 0}, /* DTB17 - FSM3 */
- { GPIOB, LL_GPIO_PIN_10, 0, 0}, /* DTB18 - FSM4 */
-};
-#endif
-/* USER CODE END PV */
-
-/* Global variables ----------------------------------------------------------*/
-/* USER CODE BEGIN GV */
-/* USER CODE END GV */
-
-/* Private function prototypes -----------------------------------------------*/
-/* USER CODE BEGIN PFP */
-static void APPD_SetCPU2GpioConfig( void );
-static void APPD_BleDtbCfg( void );
-/* USER CODE END PFP */
-
-/* Functions Definition ------------------------------------------------------*/
-void APPD_Init( void )
-{
-/* USER CODE BEGIN APPD_Init */
-#if (CFG_DEBUGGER_SUPPORTED == 1)
- /**
- * Keep debugger enabled while in any low power mode
- */
- HAL_DBGMCU_EnableDBGSleepMode();
- HAL_DBGMCU_EnableDBGStopMode();
-
- /***************** ENABLE DEBUGGER *************************************/
- LL_EXTI_EnableIT_32_63(LL_EXTI_LINE_48);
-
-#else
- GPIO_InitTypeDef gpio_config = {0};
-
- gpio_config.Pull = GPIO_NOPULL;
- gpio_config.Mode = GPIO_MODE_ANALOG;
-
- gpio_config.Pin = GPIO_PIN_15 | GPIO_PIN_14 | GPIO_PIN_13;
- __HAL_RCC_GPIOA_CLK_ENABLE();
- HAL_GPIO_Init(GPIOA, &gpio_config);
- __HAL_RCC_GPIOA_CLK_DISABLE();
-
- gpio_config.Pin = GPIO_PIN_4 | GPIO_PIN_3;
- __HAL_RCC_GPIOB_CLK_ENABLE();
- HAL_GPIO_Init(GPIOB, &gpio_config);
- __HAL_RCC_GPIOB_CLK_DISABLE();
-
- HAL_DBGMCU_DisableDBGSleepMode();
- HAL_DBGMCU_DisableDBGStopMode();
- HAL_DBGMCU_DisableDBGStandbyMode();
-
-#endif /* (CFG_DEBUGGER_SUPPORTED == 1) */
-
-#if(CFG_DEBUG_TRACE != 0)
- DbgTraceInit();
-#endif
-
- APPD_SetCPU2GpioConfig( );
- APPD_BleDtbCfg( );
-
-/* USER CODE END APPD_Init */
- return;
-}
-
-void APPD_EnableCPU2( void )
-{
-/* USER CODE BEGIN APPD_EnableCPU2 */
- SHCI_C2_DEBUG_Init_Cmd_Packet_t DebugCmdPacket =
- {
- {{0,0,0}}, /**< Does not need to be initialized */
- {(uint8_t *)aGpioConfigList,
- (uint8_t *)&APPD_TracesConfig,
- (uint8_t *)&APPD_GeneralConfig,
- GPIO_CFG_NBR_OF_FEATURES,
- NBR_OF_TRACES_CONFIG_PARAMETERS,
- NBR_OF_GENERAL_CONFIG_PARAMETERS}
- };
-
- /**< Traces channel initialization */
- TL_TRACES_Init( );
-
- /** GPIO DEBUG Initialization */
- SHCI_C2_DEBUG_Init( &DebugCmdPacket );
-
- // GPIO_InitTypeDef GPIO_InitStruct;
- // GPIO_InitStruct.Pull = GPIO_NOPULL;
- // GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- // GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- // GPIO_InitStruct.Pin = LL_GPIO_PIN_3;
- // HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
- // SHCI_C2_ExtpaConfig((uint32_t)GPIOC, LL_GPIO_PIN_3, EXT_PA_ENABLED_LOW, EXT_PA_ENABLED);
-
-/* USER CODE END APPD_EnableCPU2 */
- return;
-}
-
-/*************************************************************
- *
- * LOCAL FUNCTIONS
- *
- *************************************************************/
-static void APPD_SetCPU2GpioConfig( void )
-{
-/* USER CODE BEGIN APPD_SetCPU2GpioConfig */
- GPIO_InitTypeDef gpio_config = {0};
- uint8_t local_loop;
- uint16_t gpioa_pin_list;
- uint16_t gpiob_pin_list;
- uint16_t gpioc_pin_list;
-
- gpioa_pin_list = 0;
- gpiob_pin_list = 0;
- gpioc_pin_list = 0;
-
- for(local_loop = 0 ; local_loop < GPIO_CFG_NBR_OF_FEATURES; local_loop++)
- {
- if( aGpioConfigList[local_loop].enable != 0)
- {
- switch((uint32_t)aGpioConfigList[local_loop].port)
- {
- case (uint32_t)GPIOA:
- gpioa_pin_list |= aGpioConfigList[local_loop].pin;
- break;
-
- case (uint32_t)GPIOB:
- gpiob_pin_list |= aGpioConfigList[local_loop].pin;
- break;
-
- case (uint32_t)GPIOC:
- gpioc_pin_list |= aGpioConfigList[local_loop].pin;
- break;
-
- default:
- break;
- }
- }
- }
-
- gpio_config.Pull = GPIO_NOPULL;
- gpio_config.Mode = GPIO_MODE_OUTPUT_PP;
- gpio_config.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
-
- if(gpioa_pin_list != 0)
- {
- gpio_config.Pin = gpioa_pin_list;
- __HAL_RCC_GPIOA_CLK_ENABLE();
- __HAL_RCC_C2GPIOA_CLK_ENABLE();
- HAL_GPIO_Init(GPIOA, &gpio_config);
- HAL_GPIO_WritePin(GPIOA, gpioa_pin_list, GPIO_PIN_RESET);
- }
-
- if(gpiob_pin_list != 0)
- {
- gpio_config.Pin = gpiob_pin_list;
- __HAL_RCC_GPIOB_CLK_ENABLE();
- __HAL_RCC_C2GPIOB_CLK_ENABLE();
- HAL_GPIO_Init(GPIOB, &gpio_config);
- HAL_GPIO_WritePin(GPIOB, gpiob_pin_list, GPIO_PIN_RESET);
- }
-
- if(gpioc_pin_list != 0)
- {
- gpio_config.Pin = gpioc_pin_list;
- __HAL_RCC_GPIOC_CLK_ENABLE();
- __HAL_RCC_C2GPIOC_CLK_ENABLE();
- HAL_GPIO_Init(GPIOC, &gpio_config);
- HAL_GPIO_WritePin(GPIOC, gpioc_pin_list, GPIO_PIN_RESET);
- }
-
-/* USER CODE END APPD_SetCPU2GpioConfig */
- return;
-}
-
-static void APPD_BleDtbCfg( void )
-{
-/* USER CODE BEGIN APPD_BleDtbCfg */
-#if (BLE_DTB_CFG != 0)
- GPIO_InitTypeDef gpio_config = {0};
- uint8_t local_loop;
- uint16_t gpioa_pin_list;
- uint16_t gpiob_pin_list;
-
- gpioa_pin_list = 0;
- gpiob_pin_list = 0;
-
- for(local_loop = 0 ; local_loop < GPIO_NBR_OF_RF_SIGNALS; local_loop++)
- {
- if( aRfConfigList[local_loop].enable != 0)
- {
- switch((uint32_t)aRfConfigList[local_loop].port)
- {
- case (uint32_t)GPIOA:
- gpioa_pin_list |= aRfConfigList[local_loop].pin;
- break;
-
- case (uint32_t)GPIOB:
- gpiob_pin_list |= aRfConfigList[local_loop].pin;
- break;
-
- default:
- break;
- }
- }
- }
-
- gpio_config.Pull = GPIO_NOPULL;
- gpio_config.Mode = GPIO_MODE_AF_PP;
- gpio_config.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- gpio_config.Alternate = GPIO_AF6_RF_DTB7;
-
- if(gpioa_pin_list != 0)
- {
- gpio_config.Pin = gpioa_pin_list;
- __HAL_RCC_GPIOA_CLK_ENABLE();
- __HAL_RCC_C2GPIOA_CLK_ENABLE();
- HAL_GPIO_Init(GPIOA, &gpio_config);
- }
-
- if(gpiob_pin_list != 0)
- {
- gpio_config.Pin = gpiob_pin_list;
- __HAL_RCC_GPIOB_CLK_ENABLE();
- __HAL_RCC_C2GPIOB_CLK_ENABLE();
- HAL_GPIO_Init(GPIOB, &gpio_config);
- }
-#endif
-
-/* USER CODE END APPD_BleDtbCfg */
- return;
-}
-
-/*************************************************************
- *
- * WRAP FUNCTIONS
- *
-*************************************************************/
-#if(CFG_DEBUG_TRACE != 0)
-void DbgOutputInit( void )
-{
-}
-
-void DbgOutputTraces( uint8_t *p_data, uint16_t size, void (*cb)(void) )
-{
- furi_hal_console_tx(p_data, size);
- cb();
-}
-#endif
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ \ No newline at end of file
diff --git a/firmware/targets/f7/ble-glue/ble_dbg_conf.h b/firmware/targets/f7/ble-glue/ble_dbg_conf.h
deleted file mode 100644
index 7bb35216..00000000
--- a/firmware/targets/f7/ble-glue/ble_dbg_conf.h
+++ /dev/null
@@ -1,199 +0,0 @@
-/**
- ******************************************************************************
- * File Name : App/ble_dbg_conf.h
- * Description : Debug configuration file for BLE Middleware.
- *
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
- * All rights reserved.</center></h2>
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __BLE_DBG_CONF_H
-#define __BLE_DBG_CONF_H
-
-/**
- * Enable or Disable traces from BLE
- */
-
-#define BLE_DBG_APP_EN 1
-#define BLE_DBG_DIS_EN 1
-#define BLE_DBG_HRS_EN 1
-#define BLE_DBG_SVCCTL_EN 1
-#define BLE_DBG_BLS_EN 1
-#define BLE_DBG_HTS_EN 1
-#define BLE_DBG_P2P_STM_EN 1
-
-/**
- * Macro definition
- */
-#if ( BLE_DBG_APP_EN != 0 )
-#define BLE_DBG_APP_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_APP_MSG PRINT_NO_MESG
-#endif
-
-#if ( BLE_DBG_DIS_EN != 0 )
-#define BLE_DBG_DIS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_DIS_MSG PRINT_NO_MESG
-#endif
-
-#if ( BLE_DBG_HRS_EN != 0 )
-#define BLE_DBG_HRS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_HRS_MSG PRINT_NO_MESG
-#endif
-
-#if ( BLE_DBG_P2P_STM_EN != 0 )
-#define BLE_DBG_P2P_STM_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_P2P_STM_MSG PRINT_NO_MESG
-#endif
-
-#if ( BLE_DBG_TEMPLATE_STM_EN != 0 )
-#define BLE_DBG_TEMPLATE_STM_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_TEMPLATE_STM_MSG PRINT_NO_MESG
-#endif
-
-#if ( BLE_DBG_EDS_STM_EN != 0 )
-#define BLE_DBG_EDS_STM_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_EDS_STM_MSG PRINT_NO_MESG
-#endif
-
-#if ( BLE_DBG_LBS_STM_EN != 0 )
-#define BLE_DBG_LBS_STM_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_LBS_STM_MSG PRINT_NO_MESG
-#endif
-
-#if ( BLE_DBG_SVCCTL_EN != 0 )
-#define BLE_DBG_SVCCTL_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_SVCCTL_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_CTS_EN != 0)
-#define BLE_DBG_CTS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_CTS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_HIDS_EN != 0)
-#define BLE_DBG_HIDS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_HIDS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_PASS_EN != 0)
-#define BLE_DBG_PASS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_PASS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_BLS_EN != 0)
-#define BLE_DBG_BLS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_BLS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_HTS_EN != 0)
-#define BLE_DBG_HTS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_HTS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_ANS_EN != 0)
-#define BLE_DBG_ANS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_ANS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_ESS_EN != 0)
-#define BLE_DBG_ESS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_ESS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_GLS_EN != 0)
-#define BLE_DBG_GLS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_GLS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_BAS_EN != 0)
-#define BLE_DBG_BAS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_BAS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_RTUS_EN != 0)
-#define BLE_DBG_RTUS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_RTUS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_HPS_EN != 0)
-#define BLE_DBG_HPS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_HPS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_TPS_EN != 0)
-#define BLE_DBG_TPS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_TPS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_LLS_EN != 0)
-#define BLE_DBG_LLS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_LLS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_IAS_EN != 0)
-#define BLE_DBG_IAS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_IAS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_WSS_EN != 0)
-#define BLE_DBG_WSS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_WSS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_LNS_EN != 0)
-#define BLE_DBG_LNS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_LNS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_SCPS_EN != 0)
-#define BLE_DBG_SCPS_MSG PRINT_MESG_DBG
-#else
-#define BLE_DBG_SCPS_MSG PRINT_NO_MESG
-#endif
-
-#if (BLE_DBG_DTS_EN != 0)
-#define BLE_DBG_DTS_MSG PRINT_MESG_DBG
-#define BLE_DBG_DTS_BUF PRINT_LOG_BUFF_DBG
-#else
-#define BLE_DBG_DTS_MSG PRINT_NO_MESG
-#define BLE_DBG_DTS_BUF PRINT_NO_MESG
-#endif
-
-#endif /*__BLE_DBG_CONF_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/firmware/targets/f7/ble-glue/dev_info_service.c b/firmware/targets/f7/ble-glue/dev_info_service.c
deleted file mode 100644
index e47fdf66..00000000
--- a/firmware/targets/f7/ble-glue/dev_info_service.c
+++ /dev/null
@@ -1,160 +0,0 @@
-#include "dev_info_service.h"
-#include "app_common.h"
-#include "ble.h"
-
-#include <furi.h>
-
-#define TAG "BtDevInfoSvc"
-
-typedef struct {
- uint16_t service_handle;
- uint16_t man_name_char_handle;
- uint16_t serial_num_char_handle;
- uint16_t firmware_rev_char_handle;
- uint16_t software_rev_char_handle;
-} DevInfoSvc;
-
-static DevInfoSvc* dev_info_svc = NULL;
-
-static const char dev_info_man_name[] = "Flipper Devices Inc.";
-static const char dev_info_serial_num[] = "1.0";
-static const char dev_info_firmware_rev_num[] = TOSTRING(TARGET);
-static const char dev_info_software_rev_num[] = GIT_COMMIT " " GIT_BRANCH " " GIT_BRANCH_NUM " " BUILD_DATE;
-
-void dev_info_svc_start() {
- dev_info_svc = furi_alloc(sizeof(DevInfoSvc));
- tBleStatus status;
-
- // Add Device Information Service
- uint16_t uuid = DEVICE_INFORMATION_SERVICE_UUID;
- status = aci_gatt_add_service(UUID_TYPE_16, (Service_UUID_t*)&uuid, PRIMARY_SERVICE, 9, &dev_info_svc->service_handle);
- if(status) {
- FURI_LOG_E(TAG, "Failed to add Device Information Service: %d", status);
- }
-
- // Add characteristics
- uuid = MANUFACTURER_NAME_UUID;
- status = aci_gatt_add_char(dev_info_svc->service_handle,
- UUID_TYPE_16,
- (Char_UUID_t*)&uuid,
- strlen(dev_info_man_name),
- CHAR_PROP_READ,
- ATTR_PERMISSION_AUTHEN_READ,
- GATT_DONT_NOTIFY_EVENTS,
- 10,
- CHAR_VALUE_LEN_CONSTANT,
- &dev_info_svc->man_name_char_handle);
- if(status) {
- FURI_LOG_E(TAG, "Failed to add manufacturer name char: %d", status);
- }
- uuid = SERIAL_NUMBER_UUID;
- status = aci_gatt_add_char(dev_info_svc->service_handle,
- UUID_TYPE_16,
- (Char_UUID_t*)&uuid,
- strlen(dev_info_serial_num),
- CHAR_PROP_READ,
- ATTR_PERMISSION_AUTHEN_READ,
- GATT_DONT_NOTIFY_EVENTS,
- 10,
- CHAR_VALUE_LEN_CONSTANT,
- &dev_info_svc->serial_num_char_handle);
- if(status) {
- FURI_LOG_E(TAG, "Failed to add serial number char: %d", status);
- }
- uuid = FIRMWARE_REVISION_UUID;
- status = aci_gatt_add_char(dev_info_svc->service_handle,
- UUID_TYPE_16,
- (Char_UUID_t*)&uuid,
- strlen(dev_info_firmware_rev_num),
- CHAR_PROP_READ,
- ATTR_PERMISSION_AUTHEN_READ,
- GATT_DONT_NOTIFY_EVENTS,
- 10,
- CHAR_VALUE_LEN_CONSTANT,
- &dev_info_svc->firmware_rev_char_handle);
- if(status) {
- FURI_LOG_E(TAG, "Failed to add firmware revision char: %d", status);
- }
- uuid = SOFTWARE_REVISION_UUID;
- status = aci_gatt_add_char(dev_info_svc->service_handle,
- UUID_TYPE_16,
- (Char_UUID_t*)&uuid,
- strlen(dev_info_software_rev_num),
- CHAR_PROP_READ,
- ATTR_PERMISSION_AUTHEN_READ,
- GATT_DONT_NOTIFY_EVENTS,
- 10,
- CHAR_VALUE_LEN_CONSTANT,
- &dev_info_svc->software_rev_char_handle);
- if(status) {
- FURI_LOG_E(TAG, "Failed to add software revision char: %d", status);
- }
-
- // Update characteristics
- status = aci_gatt_update_char_value(dev_info_svc->service_handle,
- dev_info_svc->man_name_char_handle,
- 0,
- strlen(dev_info_man_name),
- (uint8_t*)dev_info_man_name);
- if(status) {
- FURI_LOG_E(TAG, "Failed to update manufacturer name char: %d", status);
- }
- status = aci_gatt_update_char_value(dev_info_svc->service_handle,
- dev_info_svc->serial_num_char_handle,
- 0,
- strlen(dev_info_serial_num),
- (uint8_t*)dev_info_serial_num);
- if(status) {
- FURI_LOG_E(TAG, "Failed to update serial number char: %d", status);
- }
- status = aci_gatt_update_char_value(dev_info_svc->service_handle,
- dev_info_svc->firmware_rev_char_handle,
- 0,
- strlen(dev_info_firmware_rev_num),
- (uint8_t*)dev_info_firmware_rev_num);
- if(status) {
- FURI_LOG_E(TAG, "Failed to update firmware revision char: %d", status);
- }
- status = aci_gatt_update_char_value(dev_info_svc->service_handle,
- dev_info_svc->software_rev_char_handle,
- 0,
- strlen(dev_info_software_rev_num),
- (uint8_t*)dev_info_software_rev_num);
- if(status) {
- FURI_LOG_E(TAG, "Failed to update software revision char: %d", status);
- }
-}
-
-void dev_info_svc_stop() {
- tBleStatus status;
- if(dev_info_svc) {
- // Delete service characteristics
- status = aci_gatt_del_char(dev_info_svc->service_handle, dev_info_svc->man_name_char_handle);
- if(status) {
- FURI_LOG_E(TAG, "Failed to delete manufacturer name char: %d", status);
- }
- status = aci_gatt_del_char(dev_info_svc->service_handle, dev_info_svc->serial_num_char_handle);
- if(status) {
- FURI_LOG_E(TAG, "Failed to delete serial number char: %d", status);
- }
- status = aci_gatt_del_char(dev_info_svc->service_handle, dev_info_svc->firmware_rev_char_handle);
- if(status) {
- FURI_LOG_E(TAG, "Failed to delete firmware revision char: %d", status);
- }
- status = aci_gatt_del_char(dev_info_svc->service_handle, dev_info_svc->software_rev_char_handle);
- if(status) {
- FURI_LOG_E(TAG, "Failed to delete software revision char: %d", status);
- }
- // Delete service
- status = aci_gatt_del_service(dev_info_svc->service_handle);
- if(status) {
- FURI_LOG_E(TAG, "Failed to delete device info service: %d", status);
- }
- free(dev_info_svc);
- dev_info_svc = NULL;
- }
-}
-
-bool dev_info_svc_is_started() {
- return dev_info_svc != NULL;
-}
diff --git a/firmware/targets/f7/ble-glue/dev_info_service.h b/firmware/targets/f7/ble-glue/dev_info_service.h
deleted file mode 100644
index f5531fc7..00000000
--- a/firmware/targets/f7/ble-glue/dev_info_service.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#pragma once
-
-#include <stdint.h>
-#include <stdbool.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define DEV_INFO_MANUFACTURER_NAME "Flipper Devices Inc."
-#define DEV_INFO_SERIAL_NUMBER "1.0"
-#define DEV_INFO_FIRMWARE_REVISION_NUMBER TARGET
-#define DEV_INFO_SOFTWARE_REVISION_NUMBER GIT_COMMIT " " GIT_BRANCH " " GIT_BRANCH_NUM " " BUILD_DATE
-
-void dev_info_svc_start();
-
-void dev_info_svc_stop();
-
-bool dev_info_svc_is_started();
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/firmware/targets/f7/ble-glue/hw_ipcc.c b/firmware/targets/f7/ble-glue/hw_ipcc.c
deleted file mode 100644
index 17b5a4d8..00000000
--- a/firmware/targets/f7/ble-glue/hw_ipcc.c
+++ /dev/null
@@ -1,675 +0,0 @@
-/**
- ******************************************************************************
- * File Name : Target/hw_ipcc.c
- * Description : Hardware IPCC source file for STM32WPAN Middleware.
- *
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
- * All rights reserved.</center></h2>
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "app_common.h"
-#include "mbox_def.h"
-
-/* Global variables ---------------------------------------------------------*/
-/* Private defines -----------------------------------------------------------*/
-#define HW_IPCC_TX_PENDING( channel ) ( !(LL_C1_IPCC_IsActiveFlag_CHx( IPCC, channel )) ) && (((~(IPCC->C1MR)) & (channel << 16U)))
-#define HW_IPCC_RX_PENDING( channel ) (LL_C2_IPCC_IsActiveFlag_CHx( IPCC, channel )) && (((~(IPCC->C1MR)) & (channel << 0U)))
-
-/* Private macros ------------------------------------------------------------*/
-/* Private typedef -----------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-static void (*FreeBufCb)( void );
-
-/* Private function prototypes -----------------------------------------------*/
-static void HW_IPCC_BLE_EvtHandler( void );
-static void HW_IPCC_BLE_AclDataEvtHandler( void );
-static void HW_IPCC_MM_FreeBufHandler( void );
-static void HW_IPCC_SYS_CmdEvtHandler( void );
-static void HW_IPCC_SYS_EvtHandler( void );
-static void HW_IPCC_TRACES_EvtHandler( void );
-
-#ifdef THREAD_WB
-static void HW_IPCC_OT_CmdEvtHandler( void );
-static void HW_IPCC_THREAD_NotEvtHandler( void );
-static void HW_IPCC_THREAD_CliNotEvtHandler( void );
-#endif
-
-#ifdef LLD_TESTS_WB
-static void HW_IPCC_LLDTESTS_ReceiveCliRspHandler( void );
-static void HW_IPCC_LLDTESTS_ReceiveM0CmdHandler( void );
-#endif
-#ifdef LLD_BLE_WB
-/*static void HW_IPCC_LLD_BLE_ReceiveCliRspHandler( void );*/
-static void HW_IPCC_LLD_BLE_ReceiveRspHandler( void );
-static void HW_IPCC_LLD_BLE_ReceiveM0CmdHandler( void );
-#endif
-
-#ifdef MAC_802_15_4_WB
-static void HW_IPCC_MAC_802_15_4_CmdEvtHandler( void );
-static void HW_IPCC_MAC_802_15_4_NotEvtHandler( void );
-#endif
-
-#ifdef ZIGBEE_WB
-static void HW_IPCC_ZIGBEE_CmdEvtHandler( void );
-static void HW_IPCC_ZIGBEE_StackNotifEvtHandler( void );
-static void HW_IPCC_ZIGBEE_StackM0RequestHandler( void );
-#endif
-
-/* Public function definition -----------------------------------------------*/
-
-/******************************************************************************
- * INTERRUPT HANDLER
- ******************************************************************************/
-void HW_IPCC_Rx_Handler( void )
-{
- if (HW_IPCC_RX_PENDING( HW_IPCC_SYSTEM_EVENT_CHANNEL ))
- {
- HW_IPCC_SYS_EvtHandler();
- }
-#ifdef MAC_802_15_4_WB
- else if (HW_IPCC_RX_PENDING( HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL ))
- {
- HW_IPCC_MAC_802_15_4_NotEvtHandler();
- }
-#endif /* MAC_802_15_4_WB */
-#ifdef THREAD_WB
- else if (HW_IPCC_RX_PENDING( HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL ))
- {
- HW_IPCC_THREAD_NotEvtHandler();
- }
- else if (HW_IPCC_RX_PENDING( HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL ))
- {
- HW_IPCC_THREAD_CliNotEvtHandler();
- }
-#endif /* THREAD_WB */
-#ifdef LLD_TESTS_WB
- else if (HW_IPCC_RX_PENDING( HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL ))
- {
- HW_IPCC_LLDTESTS_ReceiveCliRspHandler();
- }
- else if (HW_IPCC_RX_PENDING( HW_IPCC_LLDTESTS_M0_CMD_CHANNEL ))
- {
- HW_IPCC_LLDTESTS_ReceiveM0CmdHandler();
- }
-#endif /* LLD_TESTS_WB */
-#ifdef LLD_BLE_WB
- else if (HW_IPCC_RX_PENDING( HW_IPCC_LLD_BLE_RSP_CHANNEL ))
- {
- HW_IPCC_LLD_BLE_ReceiveRspHandler();
- }
- else if (HW_IPCC_RX_PENDING( HW_IPCC_LLD_BLE_M0_CMD_CHANNEL ))
- {
- HW_IPCC_LLD_BLE_ReceiveM0CmdHandler();
- }
-#endif /* LLD_TESTS_WB */
-#ifdef ZIGBEE_WB
- else if (HW_IPCC_RX_PENDING( HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL ))
- {
- HW_IPCC_ZIGBEE_StackNotifEvtHandler();
- }
- else if (HW_IPCC_RX_PENDING( HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL ))
- {
- HW_IPCC_ZIGBEE_StackM0RequestHandler();
- }
-#endif /* ZIGBEE_WB */
- else if (HW_IPCC_RX_PENDING( HW_IPCC_BLE_EVENT_CHANNEL ))
- {
- HW_IPCC_BLE_EvtHandler();
- }
- else if (HW_IPCC_RX_PENDING( HW_IPCC_TRACES_CHANNEL ))
- {
- HW_IPCC_TRACES_EvtHandler();
- }
-
- return;
-}
-
-void HW_IPCC_Tx_Handler( void )
-{
- if (HW_IPCC_TX_PENDING( HW_IPCC_SYSTEM_CMD_RSP_CHANNEL ))
- {
- HW_IPCC_SYS_CmdEvtHandler();
- }
-#ifdef MAC_802_15_4_WB
- else if (HW_IPCC_TX_PENDING( HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL ))
- {
- HW_IPCC_MAC_802_15_4_CmdEvtHandler();
- }
-#endif /* MAC_802_15_4_WB */
-#ifdef THREAD_WB
- else if (HW_IPCC_TX_PENDING( HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL ))
- {
- HW_IPCC_OT_CmdEvtHandler();
- }
-#endif /* THREAD_WB */
-#ifdef LLD_TESTS_WB
-// No TX handler for LLD tests
-#endif /* LLD_TESTS_WB */
-#ifdef ZIGBEE_WB
- if (HW_IPCC_TX_PENDING( HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL ))
- {
- HW_IPCC_ZIGBEE_CmdEvtHandler();
- }
-#endif /* ZIGBEE_WB */
- else if (HW_IPCC_TX_PENDING( HW_IPCC_SYSTEM_CMD_RSP_CHANNEL ))
- {
- HW_IPCC_SYS_CmdEvtHandler();
- }
- else if (HW_IPCC_TX_PENDING( HW_IPCC_MM_RELEASE_BUFFER_CHANNEL ))
- {
- HW_IPCC_MM_FreeBufHandler();
- }
- else if (HW_IPCC_TX_PENDING( HW_IPCC_HCI_ACL_DATA_CHANNEL ))
- {
- HW_IPCC_BLE_AclDataEvtHandler();
- }
-
- return;
-}
-/******************************************************************************
- * GENERAL
- ******************************************************************************/
-void HW_IPCC_Enable( void )
-{
- /**
- * Such as IPCC IP available to the CPU2, it is required to keep the IPCC clock running
- when FUS is running on CPU2 and CPU1 enters deep sleep mode
- */
- LL_C2_AHB3_GRP1_EnableClock(LL_C2_AHB3_GRP1_PERIPH_IPCC);
-
- /**
- * When the device is out of standby, it is required to use the EXTI mechanism to wakeup CPU2
- */
- LL_C2_EXTI_EnableEvent_32_63( LL_EXTI_LINE_41 );
- LL_EXTI_EnableRisingTrig_32_63( LL_EXTI_LINE_41 );
-
- /**
- * In case the SBSFU is implemented, it may have already set the C2BOOT bit to startup the CPU2.
- * In that case, to keep the mechanism transparent to the user application, it shall call the system command
- * SHCI_C2_Reinit( ) before jumping to the application.
- * When the CPU2 receives that command, it waits for its event input to be set to restart the CPU2 firmware.
- * This is required because once C2BOOT has been set once, a clear/set on C2BOOT has no effect.
- * When SHCI_C2_Reinit( ) is not called, generating an event to the CPU2 does not have any effect
- * So, by default, the application shall both set the event flag and set the C2BOOT bit.
- */
- __SEV( ); /* Set the internal event flag and send an event to the CPU2 */
- __WFE( ); /* Clear the internal event flag */
- LL_PWR_EnableBootC2( );
-
- return;
-}
-
-void HW_IPCC_Init( void )
-{
- LL_AHB3_GRP1_EnableClock( LL_AHB3_GRP1_PERIPH_IPCC );
-
- LL_C1_IPCC_EnableIT_RXO( IPCC );
- LL_C1_IPCC_EnableIT_TXF( IPCC );
-
- HAL_NVIC_SetPriority(IPCC_C1_RX_IRQn, 6, 0);
- HAL_NVIC_EnableIRQ(IPCC_C1_RX_IRQn);
- HAL_NVIC_SetPriority(IPCC_C1_TX_IRQn, 6, 0);
- HAL_NVIC_EnableIRQ(IPCC_C1_TX_IRQn);
-
- return;
-}
-
-/******************************************************************************
- * BLE
- ******************************************************************************/
-void HW_IPCC_BLE_Init( void )
-{
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_BLE_EVENT_CHANNEL );
-
- return;
-}
-
-void HW_IPCC_BLE_SendCmd( void )
-{
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_BLE_CMD_CHANNEL );
-
- return;
-}
-
-static void HW_IPCC_BLE_EvtHandler( void )
-{
- HW_IPCC_BLE_RxEvtNot();
-
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_BLE_EVENT_CHANNEL );
-
- return;
-}
-
-void HW_IPCC_BLE_SendAclData( void )
-{
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL );
- LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL );
-
- return;
-}
-
-static void HW_IPCC_BLE_AclDataEvtHandler( void )
-{
- LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL );
-
- HW_IPCC_BLE_AclDataAckNot();
-
- return;
-}
-
-__weak void HW_IPCC_BLE_AclDataAckNot( void ){};
-__weak void HW_IPCC_BLE_RxEvtNot( void ){};
-
-/******************************************************************************
- * SYSTEM
- ******************************************************************************/
-void HW_IPCC_SYS_Init( void )
-{
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_SYSTEM_EVENT_CHANNEL );
-
- return;
-}
-
-void HW_IPCC_SYS_SendCmd( void )
-{
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
- LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
-
- return;
-}
-
-static void HW_IPCC_SYS_CmdEvtHandler( void )
-{
- LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
-
- HW_IPCC_SYS_CmdEvtNot();
-
- return;
-}
-
-static void HW_IPCC_SYS_EvtHandler( void )
-{
- HW_IPCC_SYS_EvtNot();
-
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_SYSTEM_EVENT_CHANNEL );
-
- return;
-}
-
-__weak void HW_IPCC_SYS_CmdEvtNot( void ){};
-__weak void HW_IPCC_SYS_EvtNot( void ){};
-
-/******************************************************************************
- * MAC 802.15.4
- ******************************************************************************/
-#ifdef MAC_802_15_4_WB
-void HW_IPCC_MAC_802_15_4_Init( void )
-{
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL );
-
- return;
-}
-
-void HW_IPCC_MAC_802_15_4_SendCmd( void )
-{
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL );
- LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL );
-
- return;
-}
-
-void HW_IPCC_MAC_802_15_4_SendAck( void )
-{
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL );
-
- return;
-}
-
-static void HW_IPCC_MAC_802_15_4_CmdEvtHandler( void )
-{
- LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL );
-
- HW_IPCC_MAC_802_15_4_CmdEvtNot();
-
- return;
-}
-
-static void HW_IPCC_MAC_802_15_4_NotEvtHandler( void )
-{
- LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL );
-
- HW_IPCC_MAC_802_15_4_EvtNot();
-
- return;
-}
-__weak void HW_IPCC_MAC_802_15_4_CmdEvtNot( void ){};
-__weak void HW_IPCC_MAC_802_15_4_EvtNot( void ){};
-#endif
-
-/******************************************************************************
- * THREAD
- ******************************************************************************/
-#ifdef THREAD_WB
-void HW_IPCC_THREAD_Init( void )
-{
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
-
- return;
-}
-
-void HW_IPCC_OT_SendCmd( void )
-{
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
- LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
-
- return;
-}
-
-void HW_IPCC_CLI_SendCmd( void )
-{
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_THREAD_CLI_CMD_CHANNEL );
-
- return;
-}
-
-void HW_IPCC_THREAD_SendAck( void )
-{
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
-
- return;
-}
-
-void HW_IPCC_THREAD_CliSendAck( void )
-{
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
-
- return;
-}
-
-static void HW_IPCC_OT_CmdEvtHandler( void )
-{
- LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL );
-
- HW_IPCC_OT_CmdEvtNot();
-
- return;
-}
-
-static void HW_IPCC_THREAD_NotEvtHandler( void )
-{
- LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL );
-
- HW_IPCC_THREAD_EvtNot();
-
- return;
-}
-
-static void HW_IPCC_THREAD_CliNotEvtHandler( void )
-{
- LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL );
-
- HW_IPCC_THREAD_CliEvtNot();
-
- return;
-}
-
-__weak void HW_IPCC_OT_CmdEvtNot( void ){};
-__weak void HW_IPCC_CLI_CmdEvtNot( void ){};
-__weak void HW_IPCC_THREAD_EvtNot( void ){};
-
-#endif /* THREAD_WB */
-
-/******************************************************************************
- * LLD TESTS
- ******************************************************************************/
-#ifdef LLD_TESTS_WB
-void HW_IPCC_LLDTESTS_Init( void )
-{
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL );
- return;
-}
-
-void HW_IPCC_LLDTESTS_SendCliCmd( void )
-{
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_LLDTESTS_CLI_CMD_CHANNEL );
- return;
-}
-
-static void HW_IPCC_LLDTESTS_ReceiveCliRspHandler( void )
-{
- LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL );
- HW_IPCC_LLDTESTS_ReceiveCliRsp();
- return;
-}
-
-void HW_IPCC_LLDTESTS_SendCliRspAck( void )
-{
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL );
- return;
-}
-
-static void HW_IPCC_LLDTESTS_ReceiveM0CmdHandler( void )
-{
- LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL );
- HW_IPCC_LLDTESTS_ReceiveM0Cmd();
- return;
-}
-
-void HW_IPCC_LLDTESTS_SendM0CmdAck( void )
-{
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL );
- return;
-}
-__weak void HW_IPCC_LLDTESTS_ReceiveCliRsp( void ){};
-__weak void HW_IPCC_LLDTESTS_ReceiveM0Cmd( void ){};
-#endif /* LLD_TESTS_WB */
-
-/******************************************************************************
- * LLD BLE
- ******************************************************************************/
-#ifdef LLD_BLE_WB
-void HW_IPCC_LLD_BLE_Init( void )
-{
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL );
- return;
-}
-
-void HW_IPCC_LLD_BLE_SendCliCmd( void )
-{
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_LLD_BLE_CLI_CMD_CHANNEL );
- return;
-}
-
-/*static void HW_IPCC_LLD_BLE_ReceiveCliRspHandler( void )
-{
- LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_CLI_RSP_CHANNEL );
- HW_IPCC_LLD_BLE_ReceiveCliRsp();
- return;
-}*/
-
-void HW_IPCC_LLD_BLE_SendCliRspAck( void )
-{
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_LLD_BLE_CLI_RSP_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_CLI_RSP_CHANNEL );
- return;
-}
-
-static void HW_IPCC_LLD_BLE_ReceiveM0CmdHandler( void )
-{
- //LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL );
- HW_IPCC_LLD_BLE_ReceiveM0Cmd();
- return;
-}
-
-void HW_IPCC_LLD_BLE_SendM0CmdAck( void )
-{
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL );
- //LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL );
- return;
-}
-__weak void HW_IPCC_LLD_BLE_ReceiveCliRsp( void ){};
-__weak void HW_IPCC_LLD_BLE_ReceiveM0Cmd( void ){};
-
-/* Transparent Mode */
-void HW_IPCC_LLD_BLE_SendCmd( void )
-{
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_LLD_BLE_CMD_CHANNEL );
- return;
-}
-
-static void HW_IPCC_LLD_BLE_ReceiveRspHandler( void )
-{
- LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL );
- HW_IPCC_LLD_BLE_ReceiveRsp();
- return;
-}
-
-void HW_IPCC_LLD_BLE_SendRspAck( void )
-{
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL );
- return;
-}
-
-#endif /* LLD_BLE_WB */
-
-/******************************************************************************
- * ZIGBEE
- ******************************************************************************/
-#ifdef ZIGBEE_WB
-void HW_IPCC_ZIGBEE_Init( void )
-{
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL );
-
- return;
-}
-
-void HW_IPCC_ZIGBEE_SendM4RequestToM0( void )
-{
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL );
- LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL );
-
- return;
-}
-
-void HW_IPCC_ZIGBEE_SendM4AckToM0Notify( void )
-{
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL );
-
- return;
-}
-
-static void HW_IPCC_ZIGBEE_CmdEvtHandler( void )
-{
- LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL );
-
- HW_IPCC_ZIGBEE_RecvAppliAckFromM0();
-
- return;
-}
-
-static void HW_IPCC_ZIGBEE_StackNotifEvtHandler( void )
-{
- LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL );
-
- HW_IPCC_ZIGBEE_RecvM0NotifyToM4();
-
- return;
-}
-
-static void HW_IPCC_ZIGBEE_StackM0RequestHandler( void )
-{
- LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL );
-
- HW_IPCC_ZIGBEE_RecvM0RequestToM4();
-
- return;
-}
-
-void HW_IPCC_ZIGBEE_SendM4AckToM0Request( void )
-{
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL );
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL );
-
- return;
-}
-
-__weak void HW_IPCC_ZIGBEE_RecvAppliAckFromM0( void ){};
-__weak void HW_IPCC_ZIGBEE_RecvM0NotifyToM4( void ){};
-__weak void HW_IPCC_ZIGBEE_RecvM0RequestToM4( void ){};
-#endif /* ZIGBEE_WB */
-
-/******************************************************************************
- * MEMORY MANAGER
- ******************************************************************************/
-void HW_IPCC_MM_SendFreeBuf( void (*cb)( void ) )
-{
- if ( LL_C1_IPCC_IsActiveFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL ) )
- {
- FreeBufCb = cb;
- LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
- }
- else
- {
- cb();
-
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
- }
-
- return;
-}
-
-static void HW_IPCC_MM_FreeBufHandler( void )
-{
- LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
-
- FreeBufCb();
-
- LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
-
- return;
-}
-
-/******************************************************************************
- * TRACES
- ******************************************************************************/
-void HW_IPCC_TRACES_Init( void )
-{
- LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_TRACES_CHANNEL );
-
- return;
-}
-
-static void HW_IPCC_TRACES_EvtHandler( void )
-{
- HW_IPCC_TRACES_EvtNot();
-
- LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_TRACES_CHANNEL );
-
- return;
-}
-
-__weak void HW_IPCC_TRACES_EvtNot( void ){};
-
-/******************* (C) COPYRIGHT 2019 STMicroelectronics *****END OF FILE****/
diff --git a/firmware/targets/f7/ble-glue/app_common.h b/firmware/targets/f7/ble_glue/app_common.h
index d21860f6..a94a96c7 100644
--- a/firmware/targets/f7/ble-glue/app_common.h
+++ b/firmware/targets/f7/ble_glue/app_common.h
@@ -23,7 +23,7 @@
#define APP_COMMON_H
#ifdef __cplusplus
-extern "C"{
+extern "C" {
#endif
#include <stdint.h>
@@ -36,8 +36,4 @@ extern "C"{
#include "app_conf.h"
-#define DIVC( x, y ) (((x)+(y)-1)/(y))
-
-#define DIVR( x, y ) (((x)+((y)/2))/(y))
-
-#endif \ No newline at end of file
+#endif
diff --git a/firmware/targets/f7/ble-glue/app_conf.h b/firmware/targets/f7/ble_glue/app_conf.h
index ec8fc604..96a0c25b 100644
--- a/firmware/targets/f7/ble-glue/app_conf.h
+++ b/firmware/targets/f7/ble_glue/app_conf.h
@@ -5,94 +5,102 @@
#include "hw_if.h"
#include "ble_bufsize.h"
-#define CFG_TX_POWER (0x19) /* +0dBm */
+#define CFG_TX_POWER (0x19) /* +0dBm */
/**
* Define Advertising parameters
*/
-#define CFG_ADV_BD_ADDRESS (0x7257acd87a6c)
-#define CFG_FAST_CONN_ADV_INTERVAL_MIN (0x80) /**< 80ms */
-#define CFG_FAST_CONN_ADV_INTERVAL_MAX (0xa0) /**< 100ms */
-#define CFG_LP_CONN_ADV_INTERVAL_MIN (0x640) /**< 1s */
-#define CFG_LP_CONN_ADV_INTERVAL_MAX (0xfa0) /**< 2.5s */
+#define CFG_ADV_BD_ADDRESS (0x7257acd87a6c)
+#define CFG_FAST_CONN_ADV_INTERVAL_MIN (0x80) /**< 80ms */
+#define CFG_FAST_CONN_ADV_INTERVAL_MAX (0xa0) /**< 100ms */
+#define CFG_LP_CONN_ADV_INTERVAL_MIN (0x640) /**< 1s */
+#define CFG_LP_CONN_ADV_INTERVAL_MAX (0xfa0) /**< 2.5s */
/**
* Define IO Authentication
*/
-#define CFG_BONDING_MODE (1)
-#define CFG_FIXED_PIN (111111)
-#define CFG_USED_FIXED_PIN (1)
-#define CFG_ENCRYPTION_KEY_SIZE_MAX (16)
-#define CFG_ENCRYPTION_KEY_SIZE_MIN (8)
+#define CFG_BONDING_MODE (1)
+#define CFG_FIXED_PIN (111111)
+#define CFG_USED_FIXED_PIN (1)
+#define CFG_ENCRYPTION_KEY_SIZE_MAX (16)
+#define CFG_ENCRYPTION_KEY_SIZE_MIN (8)
/**
* Define IO capabilities
*/
-#define CFG_IO_CAPABILITY_DISPLAY_ONLY (0x00)
-#define CFG_IO_CAPABILITY_DISPLAY_YES_NO (0x01)
-#define CFG_IO_CAPABILITY_KEYBOARD_ONLY (0x02)
+#define CFG_IO_CAPABILITY_DISPLAY_ONLY (0x00)
+#define CFG_IO_CAPABILITY_DISPLAY_YES_NO (0x01)
+#define CFG_IO_CAPABILITY_KEYBOARD_ONLY (0x02)
#define CFG_IO_CAPABILITY_NO_INPUT_NO_OUTPUT (0x03)
-#define CFG_IO_CAPABILITY_KEYBOARD_DISPLAY (0x04)
+#define CFG_IO_CAPABILITY_KEYBOARD_DISPLAY (0x04)
-#define CFG_IO_CAPABILITY CFG_IO_CAPABILITY_DISPLAY_YES_NO
+#define CFG_IO_CAPABILITY CFG_IO_CAPABILITY_DISPLAY_YES_NO
/**
* Define MITM modes
*/
-#define CFG_MITM_PROTECTION_NOT_REQUIRED (0x00)
-#define CFG_MITM_PROTECTION_REQUIRED (0x01)
+#define CFG_MITM_PROTECTION_NOT_REQUIRED (0x00)
+#define CFG_MITM_PROTECTION_REQUIRED (0x01)
-#define CFG_MITM_PROTECTION CFG_MITM_PROTECTION_REQUIRED
+#define CFG_MITM_PROTECTION CFG_MITM_PROTECTION_REQUIRED
/**
* Define Secure Connections Support
*/
-#define CFG_SECURE_NOT_SUPPORTED (0x00)
-#define CFG_SECURE_OPTIONAL (0x01)
-#define CFG_SECURE_MANDATORY (0x02)
+#define CFG_SECURE_NOT_SUPPORTED (0x00)
+#define CFG_SECURE_OPTIONAL (0x01)
+#define CFG_SECURE_MANDATORY (0x02)
-#define CFG_SC_SUPPORT CFG_SECURE_OPTIONAL
+#define CFG_SC_SUPPORT CFG_SECURE_OPTIONAL
/**
* Define Keypress Notification Support
*/
-#define CFG_KEYPRESS_NOT_SUPPORTED (0x00)
-#define CFG_KEYPRESS_SUPPORTED (0x01)
+#define CFG_KEYPRESS_NOT_SUPPORTED (0x00)
+#define CFG_KEYPRESS_SUPPORTED (0x01)
-#define CFG_KEYPRESS_NOTIFICATION_SUPPORT CFG_KEYPRESS_NOT_SUPPORTED
+#define CFG_KEYPRESS_NOTIFICATION_SUPPORT CFG_KEYPRESS_NOT_SUPPORTED
/**
* Numeric Comparison Answers
*/
#define YES (0x01)
-#define NO (0x00)
+#define NO (0x00)
/**
* Device name configuration for Generic Access Service
*/
-#define CFG_GAP_DEVICE_NAME "TEMPLATE"
-#define CFG_GAP_DEVICE_NAME_LENGTH (8)
+#define CFG_GAP_DEVICE_NAME "TEMPLATE"
+#define CFG_GAP_DEVICE_NAME_LENGTH (8)
/**
* Define PHY
*/
-#define ALL_PHYS_PREFERENCE 0x00
-#define RX_2M_PREFERRED 0x02
-#define TX_2M_PREFERRED 0x02
-#define TX_1M 0x01
-#define TX_2M 0x02
-#define RX_1M 0x01
-#define RX_2M 0x02
+#define ALL_PHYS_PREFERENCE 0x00
+#define RX_2M_PREFERRED 0x02
+#define TX_2M_PREFERRED 0x02
+#define TX_1M 0x01
+#define TX_2M 0x02
+#define RX_1M 0x01
+#define RX_2M 0x02
/**
* Identity root key used to derive LTK and CSRK
*/
-#define CFG_BLE_IRK {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0}
+#define CFG_BLE_IRK \
+ { \
+ 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, \
+ 0xf0 \
+ }
/**
* Encryption root key used to derive LTK and CSRK
*/
-#define CFG_BLE_ERK {0xfe,0xdc,0xba,0x09,0x87,0x65,0x43,0x21,0xfe,0xdc,0xba,0x09,0x87,0x65,0x43,0x21}
+#define CFG_BLE_ERK \
+ { \
+ 0xfe, 0xdc, 0xba, 0x09, 0x87, 0x65, 0x43, 0x21, 0xfe, 0xdc, 0xba, 0x09, 0x87, 0x65, 0x43, \
+ 0x21 \
+ }
/* USER CODE BEGIN Generic_Parameters */
/**
@@ -100,7 +108,7 @@
* SMPS not used when Set to 0
* SMPS used when Set to 1
*/
-#define CFG_USE_SMPS 1
+#define CFG_USE_SMPS 1
/* USER CODE END Generic_Parameters */
/**< specific parameters */
@@ -110,7 +118,7 @@
* AD Element - Group B Feature
*/
/* LSB - Second Byte */
-#define CFG_FEATURE_OTA_REBOOT (0x20)
+#define CFG_FEATURE_OTA_REBOOT (0x20)
/******************************************************************************
* BLE Stack
@@ -119,13 +127,13 @@
* Maximum number of simultaneous connections that the device will support.
* Valid values are from 1 to 8
*/
-#define CFG_BLE_NUM_LINK 2
+#define CFG_BLE_NUM_LINK 2
/**
* Maximum number of Services that can be stored in the GATT database.
* Note that the GAP and GATT services are automatically added so this parameter should be 2 plus the number of user services
*/
-#define CFG_BLE_NUM_GATT_SERVICES 8
+#define CFG_BLE_NUM_GATT_SERVICES 8
/**
* Maximum number of Attributes
@@ -139,7 +147,7 @@
/**
* Maximum supported ATT_MTU size
*/
-#define CFG_BLE_MAX_ATT_MTU (256+128+16+8+4+2)
+#define CFG_BLE_MAX_ATT_MTU (256 + 128 + 16 + 8 + 4 + 2)
/**
* Size of the storage area for Attribute values
@@ -151,27 +159,28 @@
* - 2, if extended properties is used
* The total amount of memory needed is the sum of the above quantities for each attribute.
*/
-#define CFG_BLE_ATT_VALUE_ARRAY_SIZE (1344)
+#define CFG_BLE_ATT_VALUE_ARRAY_SIZE (1344)
/**
* Prepare Write List size in terms of number of packet
*/
-#define CFG_BLE_PREPARE_WRITE_LIST_SIZE BLE_PREP_WRITE_X_ATT(CFG_BLE_MAX_ATT_MTU)
+#define CFG_BLE_PREPARE_WRITE_LIST_SIZE BLE_PREP_WRITE_X_ATT(CFG_BLE_MAX_ATT_MTU)
/**
* Number of allocated memory blocks
*/
-#define CFG_BLE_MBLOCK_COUNT (BLE_MBLOCKS_CALC(CFG_BLE_PREPARE_WRITE_LIST_SIZE, CFG_BLE_MAX_ATT_MTU, CFG_BLE_NUM_LINK))
+#define CFG_BLE_MBLOCK_COUNT \
+ (BLE_MBLOCKS_CALC(CFG_BLE_PREPARE_WRITE_LIST_SIZE, CFG_BLE_MAX_ATT_MTU, CFG_BLE_NUM_LINK))
/**
* Enable or disable the Extended Packet length feature. Valid values are 0 or 1.
*/
-#define CFG_BLE_DATA_LENGTH_EXTENSION 1
+#define CFG_BLE_DATA_LENGTH_EXTENSION 1
/**
* Sleep clock accuracy in Slave mode (ppm value)
*/
-#define CFG_BLE_SLAVE_SCA 500
+#define CFG_BLE_SLAVE_SCA 500
/**
* Sleep clock accuracy in Master mode
@@ -184,31 +193,31 @@
* 6 : 21 ppm to 30 ppm
* 7 : 0 ppm to 20 ppm
*/
-#define CFG_BLE_MASTER_SCA 0
+#define CFG_BLE_MASTER_SCA 0
/**
* Source for the low speed clock for RF wake-up
* 1 : external high speed crystal HSE/32/32
* 0 : external low speed crystal ( no calibration )
*/
-#define CFG_BLE_LSE_SOURCE 0
+#define CFG_BLE_LSE_SOURCE 0
/**
* Start up time of the high speed (16 or 32 MHz) crystal oscillator in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_HSE_STARTUP_TIME 0x148
+#define CFG_BLE_HSE_STARTUP_TIME 0x148
/**
* Maximum duration of the connection event when the device is in Slave mode in units of 625/256 us (~2.44 us)
*/
-#define CFG_BLE_MAX_CONN_EVENT_LENGTH ( 0xFFFFFFFF )
+#define CFG_BLE_MAX_CONN_EVENT_LENGTH (0xFFFFFFFF)
/**
* Viterbi Mode
* 1 : enabled
* 0 : disabled
*/
-#define CFG_BLE_VITERBI_MODE 1
+#define CFG_BLE_VITERBI_MODE 1
/**
* BLE stack Options flags to be configured with:
@@ -239,7 +248,10 @@
* 0: LE Power Class 2-3
* other bits: reserved (shall be set to 0)
*/
-#define CFG_BLE_OPTIONS (SHCI_C2_BLE_INIT_OPTIONS_LL_HOST | SHCI_C2_BLE_INIT_OPTIONS_WITH_SVC_CHANGE_DESC | SHCI_C2_BLE_INIT_OPTIONS_DEVICE_NAME_RW | SHCI_C2_BLE_INIT_OPTIONS_NO_EXT_ADV | SHCI_C2_BLE_INIT_OPTIONS_NO_CS_ALGO2 | SHCI_C2_BLE_INIT_OPTIONS_POWER_CLASS_2_3)
+#define CFG_BLE_OPTIONS \
+ (SHCI_C2_BLE_INIT_OPTIONS_LL_HOST | SHCI_C2_BLE_INIT_OPTIONS_WITH_SVC_CHANGE_DESC | \
+ SHCI_C2_BLE_INIT_OPTIONS_DEVICE_NAME_RW | SHCI_C2_BLE_INIT_OPTIONS_NO_EXT_ADV | \
+ SHCI_C2_BLE_INIT_OPTIONS_NO_CS_ALGO2 | SHCI_C2_BLE_INIT_OPTIONS_POWER_CLASS_2_3)
/**
* Queue length of BLE Event
@@ -263,9 +275,10 @@
* With the current wireless firmware implementation, this parameter shall be kept to 255
*
*/
-#define CFG_TLBLE_MOST_EVENT_PAYLOAD_SIZE 255 /**< Set to 255 with the memory manager and the mailbox */
+#define CFG_TLBLE_MOST_EVENT_PAYLOAD_SIZE \
+ 255 /**< Set to 255 with the memory manager and the mailbox */
-#define TL_BLE_EVENT_FRAME_SIZE ( TL_EVT_HDR_SIZE + CFG_TLBLE_MOST_EVENT_PAYLOAD_SIZE )
+#define TL_BLE_EVENT_FRAME_SIZE (TL_EVT_HDR_SIZE + CFG_TLBLE_MOST_EVENT_PAYLOAD_SIZE)
/******************************************************************************
* UART interfaces
******************************************************************************/
@@ -273,8 +286,8 @@
/**
* Select UART interfaces
*/
-#define CFG_DEBUG_TRACE_UART hw_uart1
-#define CFG_CONSOLE_MENU 0
+#define CFG_DEBUG_TRACE_UART hw_uart1
+#define CFG_CONSOLE_MENU 0
/******************************************************************************
* Low Power
@@ -283,7 +296,7 @@
* When set to 1, the low power mode is enable
* When set to 0, the device stays in RUN mode
*/
-#define CFG_LPM_SUPPORTED 1
+#define CFG_LPM_SUPPORTED 1
/******************************************************************************
* Timer Server
@@ -310,62 +323,61 @@
*/
#define CFG_RTCCLK_DIVIDER_CONF 0
-#if (CFG_RTCCLK_DIVIDER_CONF == 0)
+#if(CFG_RTCCLK_DIVIDER_CONF == 0)
/**
* Custom configuration
* It does not support 1Hz calendar
* It divides the RTC CLK by 16
*/
-#define CFG_RTCCLK_DIV (16)
+#define CFG_RTCCLK_DIV (16)
#define CFG_RTC_WUCKSEL_DIVIDER (0)
#define CFG_RTC_ASYNCH_PRESCALER (CFG_RTCCLK_DIV - 1)
#define CFG_RTC_SYNCH_PRESCALER (0x7FFF)
#else
-#if (CFG_RTCCLK_DIVIDER_CONF == 2)
+#if(CFG_RTCCLK_DIVIDER_CONF == 2)
/**
* It divides the RTC CLK by 2
*/
#define CFG_RTC_WUCKSEL_DIVIDER (3)
#endif
-#if (CFG_RTCCLK_DIVIDER_CONF == 4)
+#if(CFG_RTCCLK_DIVIDER_CONF == 4)
/**
* It divides the RTC CLK by 4
*/
#define CFG_RTC_WUCKSEL_DIVIDER (2)
#endif
-#if (CFG_RTCCLK_DIVIDER_CONF == 8)
+#if(CFG_RTCCLK_DIVIDER_CONF == 8)
/**
* It divides the RTC CLK by 8
*/
#define CFG_RTC_WUCKSEL_DIVIDER (1)
#endif
-#if (CFG_RTCCLK_DIVIDER_CONF == 16)
+#if(CFG_RTCCLK_DIVIDER_CONF == 16)
/**
* It divides the RTC CLK by 16
*/
#define CFG_RTC_WUCKSEL_DIVIDER (0)
#endif
-#define CFG_RTCCLK_DIV CFG_RTCCLK_DIVIDER_CONF
-#define CFG_RTC_ASYNCH_PRESCALER (CFG_RTCCLK_DIV - 1)
-#define CFG_RTC_SYNCH_PRESCALER (DIVR( LSE_VALUE, (CFG_RTC_ASYNCH_PRESCALER+1) ) - 1 )
+#define CFG_RTCCLK_DIV CFG_RTCCLK_DIVIDER_CONF
+#define CFG_RTC_ASYNCH_PRESCALER (CFG_RTCCLK_DIV - 1)
+#define CFG_RTC_SYNCH_PRESCALER (DIVR(LSE_VALUE, (CFG_RTC_ASYNCH_PRESCALER + 1)) - 1)
#endif
/** tick timer value in us */
-#define CFG_TS_TICK_VAL DIVR( (CFG_RTCCLK_DIV * 1000000), LSE_VALUE )
+#define CFG_TS_TICK_VAL DIVR((CFG_RTCCLK_DIV * 1000000), LSE_VALUE)
-typedef enum
-{
- CFG_TIM_PROC_ID_ISR,
- /* USER CODE BEGIN CFG_TimProcID_t */
+typedef enum {
+ CFG_TIM_PROC_ID_ISR,
+ /* USER CODE BEGIN CFG_TimProcID_t */
- /* USER CODE END CFG_TimProcID_t */
+ /* USER CODE END CFG_TimProcID_t */
} CFG_TimProcID_t;
/******************************************************************************
@@ -378,39 +390,39 @@ typedef enum
* This shall be set to 0 in a final product
*
*/
-#define CFG_HW_RESET_BY_FW 0
+#define CFG_HW_RESET_BY_FW 0
/**
* keep debugger enabled while in any low power mode when set to 1
* should be set to 0 in production
*/
-#define CFG_DEBUGGER_SUPPORTED 0
+#define CFG_DEBUGGER_SUPPORTED 0
/**
* When set to 1, the traces are enabled in the BLE services
*/
-#define CFG_DEBUG_BLE_TRACE 0
+#define CFG_DEBUG_BLE_TRACE 0
/**
* Enable or Disable traces in application
*/
-#define CFG_DEBUG_APP_TRACE 0
+#define CFG_DEBUG_APP_TRACE 0
-#if (CFG_DEBUG_APP_TRACE != 0)
-#define APP_DBG_MSG PRINT_MESG_DBG
+#if(CFG_DEBUG_APP_TRACE != 0)
+#define APP_DBG_MSG PRINT_MESG_DBG
#else
-#define APP_DBG_MSG PRINT_NO_MESG
+#define APP_DBG_MSG PRINT_NO_MESG
#endif
-#if ( (CFG_DEBUG_BLE_TRACE != 0) || (CFG_DEBUG_APP_TRACE != 0) )
-#define CFG_DEBUG_TRACE 1
+#if((CFG_DEBUG_BLE_TRACE != 0) || (CFG_DEBUG_APP_TRACE != 0))
+#define CFG_DEBUG_TRACE 1
#endif
-#if (CFG_DEBUG_TRACE != 0)
+#if(CFG_DEBUG_TRACE != 0)
#undef CFG_LPM_SUPPORTED
#undef CFG_DEBUGGER_SUPPORTED
-#define CFG_LPM_SUPPORTED 0
-#define CFG_DEBUGGER_SUPPORTED 1
+#define CFG_LPM_SUPPORTED 0
+#define CFG_DEBUGGER_SUPPORTED 1
#endif
/**
@@ -420,21 +432,21 @@ typedef enum
* When both are set to 0, no trace are output
* When both are set to 1, CFG_DEBUG_TRACE_FULL is selected
*/
-#define CFG_DEBUG_TRACE_LIGHT 0
-#define CFG_DEBUG_TRACE_FULL 0
+#define CFG_DEBUG_TRACE_LIGHT 0
+#define CFG_DEBUG_TRACE_FULL 0
-#if (( CFG_DEBUG_TRACE != 0 ) && ( CFG_DEBUG_TRACE_LIGHT == 0 ) && (CFG_DEBUG_TRACE_FULL == 0))
+#if((CFG_DEBUG_TRACE != 0) && (CFG_DEBUG_TRACE_LIGHT == 0) && (CFG_DEBUG_TRACE_FULL == 0))
#undef CFG_DEBUG_TRACE_FULL
#undef CFG_DEBUG_TRACE_LIGHT
-#define CFG_DEBUG_TRACE_FULL 0
-#define CFG_DEBUG_TRACE_LIGHT 1
+#define CFG_DEBUG_TRACE_FULL 0
+#define CFG_DEBUG_TRACE_LIGHT 1
#endif
-#if ( CFG_DEBUG_TRACE == 0 )
+#if(CFG_DEBUG_TRACE == 0)
#undef CFG_DEBUG_TRACE_FULL
#undef CFG_DEBUG_TRACE_LIGHT
-#define CFG_DEBUG_TRACE_FULL 0
-#define CFG_DEBUG_TRACE_LIGHT 0
+#define CFG_DEBUG_TRACE_FULL 0
+#define CFG_DEBUG_TRACE_LIGHT 0
#endif
/**
@@ -449,5 +461,5 @@ typedef enum
#define DBG_TRACE_MSG_QUEUE_SIZE 4096
#define MAX_DBG_TRACE_MSG_SIZE 1024
-#define CFG_OTP_BASE_ADDRESS OTP_AREA_BASE
-#define CFG_OTP_END_ADRESS OTP_AREA_END_ADDR
+#define CFG_OTP_BASE_ADDRESS OTP_AREA_BASE
+#define CFG_OTP_END_ADRESS OTP_AREA_END_ADDR
diff --git a/firmware/targets/f7/ble_glue/app_debug.c b/firmware/targets/f7/ble_glue/app_debug.c
new file mode 100644
index 00000000..07824920
--- /dev/null
+++ b/firmware/targets/f7/ble_glue/app_debug.c
@@ -0,0 +1,357 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * File Name : app_debug.c
+ * Description : Debug capabilities source file for STM32WPAN Middleware
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+
+/* Includes ------------------------------------------------------------------*/
+/* USER CODE BEGIN Includes */
+#include "utilities_common.h"
+
+#include "app_common.h"
+#include "app_debug.h"
+#include "shci.h"
+#include "tl.h"
+#include "dbg_trace.h"
+#include <furi_hal.h>
+/* USER CODE END Includes */
+
+/* Private typedef -----------------------------------------------------------*/
+/* USER CODE BEGIN PTD */
+typedef PACKED_STRUCT {
+ GPIO_TypeDef* port;
+ uint16_t pin;
+ uint8_t enable;
+ uint8_t reserved;
+}
+APPD_GpioConfig_t;
+/* USER CODE END PTD */
+
+/* Private defines -----------------------------------------------------------*/
+/* USER CODE BEGIN PD */
+#define GPIO_NBR_OF_RF_SIGNALS 9
+#define GPIO_CFG_NBR_OF_FEATURES 34
+#define NBR_OF_TRACES_CONFIG_PARAMETERS 4
+#define NBR_OF_GENERAL_CONFIG_PARAMETERS 4
+
+/**
+ * THIS SHALL BE SET TO A VALUE DIFFERENT FROM 0 ONLY ON REQUEST FROM ST SUPPORT
+ */
+#define BLE_DTB_CFG 7
+#define SYS_DBG_CFG1 (SHCI_C2_DEBUG_OPTIONS_IPCORE_LP | SHCI_C2_DEBUG_OPTIONS_CPU2_STOP_EN)
+/* USER CODE END PD */
+
+/* Private variables ---------------------------------------------------------*/
+/* USER CODE BEGIN PV */
+PLACE_IN_SECTION("MB_MEM2")
+ALIGN(4) static SHCI_C2_DEBUG_TracesConfig_t APPD_TracesConfig = {0, 0, 0, 0};
+PLACE_IN_SECTION("MB_MEM2")
+ALIGN(4)
+static SHCI_C2_DEBUG_GeneralConfig_t APPD_GeneralConfig = {BLE_DTB_CFG, SYS_DBG_CFG1, {0, 0}};
+
+/**
+ * THE DEBUG ON GPIO FOR CPU2 IS INTENDED TO BE USED ONLY ON REQUEST FROM ST SUPPORT
+ * It provides timing information on the CPU2 activity.
+ * All configuration of (port, pin) is supported for each features and can be selected by the user
+ * depending on the availability
+ */
+static const APPD_GpioConfig_t aGpioConfigList[GPIO_CFG_NBR_OF_FEATURES] = {
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* BLE_ISR - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_7, 1, 0}, /* BLE_STACK_TICK - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* BLE_CMD_PROCESS - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* BLE_ACL_DATA_PROCESS - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* SYS_CMD_PROCESS - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* RNG_PROCESS - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* NVM_PROCESS - Set on Entry / Reset on Exit */
+ {GPIOB, LL_GPIO_PIN_3, 1, 0}, /* IPCC_GENERAL - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_BLE_CMD_RX - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_BLE_EVT_TX - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_BLE_ACL_DATA_RX - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_SYS_CMD_RX - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_SYS_EVT_TX - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_CLI_CMD_RX - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_OT_CMD_RX - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_OT_ACK_TX - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_CLI_ACK_TX - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_MEM_MANAGER_RX - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IPCC_TRACES_TX - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_6, 1, 0}, /* HARD_FAULT - Set on Entry / Reset on Exit */
+ /* From v1.1.1 */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* IP_CORE_LP_STATUS - Set on Entry / Reset on Exit */
+ /* From v1.2.0 */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* END_OF_CONNECTION_EVENT - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* TIMER_SERVER_CALLBACK - Toggle on Entry */
+ {GPIOA, LL_GPIO_PIN_4, 1, 0}, /* PES_ACTIVITY - Set on Entry / Reset on Exit */
+ {GPIOB, LL_GPIO_PIN_2, 1, 0}, /* MB_BLE_SEND_EVT - Set on Entry / Reset on Exit */
+ /* From v1.3.0 */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* BLE_NO_DELAY - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* BLE_STACK_STORE_NVM_CB - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* NVMA_WRITE_ONGOING - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* NVMA_WRITE_COMPLETE - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* NVMA_CLEANUP - Set on Entry / Reset on Exit */
+ /* From v1.4.0 */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* NVMA_START - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* FLASH_EOP - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* FLASH_WRITE - Set on Entry / Reset on Exit */
+ {GPIOA, LL_GPIO_PIN_0, 0, 0}, /* FLASH_ERASE - Set on Entry / Reset on Exit */
+};
+
+/**
+ * THE DEBUG ON GPIO FOR CPU2 IS INTENDED TO BE USED ONLY ON REQUEST FROM ST SUPPORT
+ * This table is relevant only for BLE
+ * It provides timing information on BLE RF activity.
+ * New signals may be allocated at any location when requested by ST
+ * The GPIO allocated to each signal depend on the BLE_DTB_CFG value and cannot be changed
+ */
+#if(BLE_DTB_CFG == 7)
+static const APPD_GpioConfig_t aRfConfigList[GPIO_NBR_OF_RF_SIGNALS] = {
+ {GPIOB, LL_GPIO_PIN_2, 0, 0}, /* DTB10 - Tx/Rx SPI */
+ {GPIOB, LL_GPIO_PIN_7, 0, 0}, /* DTB11 - Tx/Tx SPI Clk */
+ {GPIOA, LL_GPIO_PIN_8, 0, 0}, /* DTB12 - Tx/Rx Ready & SPI Select */
+ {GPIOA, LL_GPIO_PIN_9, 0, 0}, /* DTB13 - Tx/Rx Start */
+ {GPIOA, LL_GPIO_PIN_10, 0, 0}, /* DTB14 - FSM0 */
+ {GPIOA, LL_GPIO_PIN_11, 0, 0}, /* DTB15 - FSM1 */
+ {GPIOB, LL_GPIO_PIN_8, 0, 0}, /* DTB16 - FSM2 */
+ {GPIOB, LL_GPIO_PIN_11, 0, 0}, /* DTB17 - FSM3 */
+ {GPIOB, LL_GPIO_PIN_10, 0, 0}, /* DTB18 - FSM4 */
+};
+#endif
+/* USER CODE END PV */
+
+/* Global variables ----------------------------------------------------------*/
+/* USER CODE BEGIN GV */
+/* USER CODE END GV */
+
+/* Private function prototypes -----------------------------------------------*/
+/* USER CODE BEGIN PFP */
+static void APPD_SetCPU2GpioConfig(void);
+static void APPD_BleDtbCfg(void);
+/* USER CODE END PFP */
+
+/* Functions Definition ------------------------------------------------------*/
+void APPD_Init(void) {
+/* USER CODE BEGIN APPD_Init */
+#if(CFG_DEBUGGER_SUPPORTED == 1)
+ /**
+ * Keep debugger enabled while in any low power mode
+ */
+ HAL_DBGMCU_EnableDBGSleepMode();
+ HAL_DBGMCU_EnableDBGStopMode();
+
+ /***************** ENABLE DEBUGGER *************************************/
+ LL_EXTI_EnableIT_32_63(LL_EXTI_LINE_48);
+
+#else
+ GPIO_InitTypeDef gpio_config = {0};
+
+ gpio_config.Pull = GPIO_NOPULL;
+ gpio_config.Mode = GPIO_MODE_ANALOG;
+
+ gpio_config.Pin = GPIO_PIN_15 | GPIO_PIN_14 | GPIO_PIN_13;
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ HAL_GPIO_Init(GPIOA, &gpio_config);
+ __HAL_RCC_GPIOA_CLK_DISABLE();
+
+ gpio_config.Pin = GPIO_PIN_4 | GPIO_PIN_3;
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ HAL_GPIO_Init(GPIOB, &gpio_config);
+ __HAL_RCC_GPIOB_CLK_DISABLE();
+
+ HAL_DBGMCU_DisableDBGSleepMode();
+ HAL_DBGMCU_DisableDBGStopMode();
+ HAL_DBGMCU_DisableDBGStandbyMode();
+
+#endif /* (CFG_DEBUGGER_SUPPORTED == 1) */
+
+#if(CFG_DEBUG_TRACE != 0)
+ DbgTraceInit();
+#endif
+
+ APPD_SetCPU2GpioConfig();
+ APPD_BleDtbCfg();
+
+ /* USER CODE END APPD_Init */
+ return;
+}
+
+void APPD_EnableCPU2(void) {
+ /* USER CODE BEGIN APPD_EnableCPU2 */
+ SHCI_C2_DEBUG_Init_Cmd_Packet_t DebugCmdPacket = {
+ {{0, 0, 0}}, /**< Does not need to be initialized */
+ {(uint8_t*)aGpioConfigList,
+ (uint8_t*)&APPD_TracesConfig,
+ (uint8_t*)&APPD_GeneralConfig,
+ GPIO_CFG_NBR_OF_FEATURES,
+ NBR_OF_TRACES_CONFIG_PARAMETERS,
+ NBR_OF_GENERAL_CONFIG_PARAMETERS}};
+
+ /**< Traces channel initialization */
+ TL_TRACES_Init();
+
+ /** GPIO DEBUG Initialization */
+ SHCI_C2_DEBUG_Init(&DebugCmdPacket);
+
+ // GPIO_InitTypeDef GPIO_InitStruct;
+ // GPIO_InitStruct.Pull = GPIO_NOPULL;
+ // GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ // GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ // GPIO_InitStruct.Pin = LL_GPIO_PIN_3;
+ // HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+ // SHCI_C2_ExtpaConfig((uint32_t)GPIOC, LL_GPIO_PIN_3, EXT_PA_ENABLED_LOW, EXT_PA_ENABLED);
+
+ /* USER CODE END APPD_EnableCPU2 */
+ return;
+}
+
+/*************************************************************
+ *
+ * LOCAL FUNCTIONS
+ *
+ *************************************************************/
+static void APPD_SetCPU2GpioConfig(void) {
+ /* USER CODE BEGIN APPD_SetCPU2GpioConfig */
+ GPIO_InitTypeDef gpio_config = {0};
+ uint8_t local_loop;
+ uint16_t gpioa_pin_list;
+ uint16_t gpiob_pin_list;
+ uint16_t gpioc_pin_list;
+
+ gpioa_pin_list = 0;
+ gpiob_pin_list = 0;
+ gpioc_pin_list = 0;
+
+ for(local_loop = 0; local_loop < GPIO_CFG_NBR_OF_FEATURES; local_loop++) {
+ if(aGpioConfigList[local_loop].enable != 0) {
+ switch((uint32_t)aGpioConfigList[local_loop].port) {
+ case(uint32_t)GPIOA:
+ gpioa_pin_list |= aGpioConfigList[local_loop].pin;
+ break;
+
+ case(uint32_t)GPIOB:
+ gpiob_pin_list |= aGpioConfigList[local_loop].pin;
+ break;
+
+ case(uint32_t)GPIOC:
+ gpioc_pin_list |= aGpioConfigList[local_loop].pin;
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+
+ gpio_config.Pull = GPIO_NOPULL;
+ gpio_config.Mode = GPIO_MODE_OUTPUT_PP;
+ gpio_config.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+
+ if(gpioa_pin_list != 0) {
+ gpio_config.Pin = gpioa_pin_list;
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ __HAL_RCC_C2GPIOA_CLK_ENABLE();
+ HAL_GPIO_Init(GPIOA, &gpio_config);
+ HAL_GPIO_WritePin(GPIOA, gpioa_pin_list, GPIO_PIN_RESET);
+ }
+
+ if(gpiob_pin_list != 0) {
+ gpio_config.Pin = gpiob_pin_list;
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ __HAL_RCC_C2GPIOB_CLK_ENABLE();
+ HAL_GPIO_Init(GPIOB, &gpio_config);
+ HAL_GPIO_WritePin(GPIOB, gpiob_pin_list, GPIO_PIN_RESET);
+ }
+
+ if(gpioc_pin_list != 0) {
+ gpio_config.Pin = gpioc_pin_list;
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ __HAL_RCC_C2GPIOC_CLK_ENABLE();
+ HAL_GPIO_Init(GPIOC, &gpio_config);
+ HAL_GPIO_WritePin(GPIOC, gpioc_pin_list, GPIO_PIN_RESET);
+ }
+
+ /* USER CODE END APPD_SetCPU2GpioConfig */
+ return;
+}
+
+static void APPD_BleDtbCfg(void) {
+/* USER CODE BEGIN APPD_BleDtbCfg */
+#if(BLE_DTB_CFG != 0)
+ GPIO_InitTypeDef gpio_config = {0};
+ uint8_t local_loop;
+ uint16_t gpioa_pin_list;
+ uint16_t gpiob_pin_list;
+
+ gpioa_pin_list = 0;
+ gpiob_pin_list = 0;
+
+ for(local_loop = 0; local_loop < GPIO_NBR_OF_RF_SIGNALS; local_loop++) {
+ if(aRfConfigList[local_loop].enable != 0) {
+ switch((uint32_t)aRfConfigList[local_loop].port) {
+ case(uint32_t)GPIOA:
+ gpioa_pin_list |= aRfConfigList[local_loop].pin;
+ break;
+
+ case(uint32_t)GPIOB:
+ gpiob_pin_list |= aRfConfigList[local_loop].pin;
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+
+ gpio_config.Pull = GPIO_NOPULL;
+ gpio_config.Mode = GPIO_MODE_AF_PP;
+ gpio_config.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ gpio_config.Alternate = GPIO_AF6_RF_DTB7;
+
+ if(gpioa_pin_list != 0) {
+ gpio_config.Pin = gpioa_pin_list;
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ __HAL_RCC_C2GPIOA_CLK_ENABLE();
+ HAL_GPIO_Init(GPIOA, &gpio_config);
+ }
+
+ if(gpiob_pin_list != 0) {
+ gpio_config.Pin = gpiob_pin_list;
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ __HAL_RCC_C2GPIOB_CLK_ENABLE();
+ HAL_GPIO_Init(GPIOB, &gpio_config);
+ }
+#endif
+
+ /* USER CODE END APPD_BleDtbCfg */
+ return;
+}
+
+/*************************************************************
+ *
+ * WRAP FUNCTIONS
+ *
+*************************************************************/
+#if(CFG_DEBUG_TRACE != 0)
+void DbgOutputInit(void) {
+}
+
+void DbgOutputTraces(uint8_t* p_data, uint16_t size, void (*cb)(void)) {
+ furi_hal_console_tx(p_data, size);
+ cb();
+}
+#endif
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ \ No newline at end of file
diff --git a/firmware/targets/f6/ble-glue/app_debug.h b/firmware/targets/f7/ble_glue/app_debug.h
index 2cb31e53..e1bd65fc 100644
--- a/firmware/targets/f6/ble-glue/app_debug.h
+++ b/firmware/targets/f7/ble_glue/app_debug.h
@@ -26,8 +26,8 @@
extern "C" {
#endif
- void APPD_Init( void );
- void APPD_EnableCPU2( void );
+void APPD_Init(void);
+void APPD_EnableCPU2(void);
#ifdef __cplusplus
}
diff --git a/firmware/targets/f7/ble-glue/battery_service.c b/firmware/targets/f7/ble_glue/battery_service.c
index 08dec734..fcf640c8 100644
--- a/firmware/targets/f7/ble-glue/battery_service.c
+++ b/firmware/targets/f7/ble_glue/battery_service.c
@@ -21,21 +21,23 @@ void battery_svc_start() {
tBleStatus status;
// Add Battery service
- status = aci_gatt_add_service(UUID_TYPE_16, (Service_UUID_t*)&service_uuid, PRIMARY_SERVICE, 4, &battery_svc->svc_handle);
+ status = aci_gatt_add_service(
+ UUID_TYPE_16, (Service_UUID_t*)&service_uuid, PRIMARY_SERVICE, 4, &battery_svc->svc_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add Battery service: %d", status);
}
// Add Battery level characteristic
- status = aci_gatt_add_char(battery_svc->svc_handle,
- UUID_TYPE_16,
- (Char_UUID_t *) &char_battery_level_uuid,
- 1,
- CHAR_PROP_READ | CHAR_PROP_NOTIFY,
- ATTR_PERMISSION_AUTHEN_READ,
- GATT_DONT_NOTIFY_EVENTS,
- 10,
- CHAR_VALUE_LEN_CONSTANT,
- &battery_svc->char_level_handle);
+ status = aci_gatt_add_char(
+ battery_svc->svc_handle,
+ UUID_TYPE_16,
+ (Char_UUID_t*)&char_battery_level_uuid,
+ 1,
+ CHAR_PROP_READ | CHAR_PROP_NOTIFY,
+ ATTR_PERMISSION_AUTHEN_READ,
+ GATT_DONT_NOTIFY_EVENTS,
+ 10,
+ CHAR_VALUE_LEN_CONSTANT,
+ &battery_svc->char_level_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add Battery level characteristic: %d", status);
}
@@ -70,11 +72,8 @@ bool battery_svc_update_level(uint8_t battery_charge) {
}
// Update battery level characteristic
FURI_LOG_I(TAG, "Updating battery level characteristic");
- tBleStatus result = aci_gatt_update_char_value(battery_svc->svc_handle,
- battery_svc->char_level_handle,
- 0,
- 1,
- &battery_charge);
+ tBleStatus result = aci_gatt_update_char_value(
+ battery_svc->svc_handle, battery_svc->char_level_handle, 0, 1, &battery_charge);
if(result) {
FURI_LOG_E(TAG, "Failed updating RX characteristic: %d", result);
}
diff --git a/firmware/targets/f7/ble-glue/battery_service.h b/firmware/targets/f7/ble_glue/battery_service.h
index 2d35e252..2d35e252 100644
--- a/firmware/targets/f7/ble-glue/battery_service.h
+++ b/firmware/targets/f7/ble_glue/battery_service.h
diff --git a/firmware/targets/f7/ble-glue/ble_app.c b/firmware/targets/f7/ble_glue/ble_app.c
index ebb94892..c3359e58 100644
--- a/firmware/targets/f7/ble-glue/ble_app.c
+++ b/firmware/targets/f7/ble_glue/ble_app.c
@@ -5,7 +5,7 @@
#include "shci.h"
#include "gap.h"
-#include <furi-hal.h>
+#include <furi_hal.h>
#define TAG "Bt"
@@ -16,7 +16,9 @@
PLACE_IN_SECTION("MB_MEM1") ALIGN(4) static TL_CmdPacket_t ble_app_cmd_buffer;
PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static uint32_t ble_app_nvm[BLE_NVM_SRAM_SIZE];
-_Static_assert(sizeof(SHCI_C2_Ble_Init_Cmd_Packet_t) == 49, "Ble stack config structure size mismatch");
+_Static_assert(
+ sizeof(SHCI_C2_Ble_Init_Cmd_Packet_t) == 49,
+ "Ble stack config structure size mismatch");
typedef struct {
osMutexId_t hci_mtx;
@@ -56,7 +58,7 @@ bool ble_app_init() {
// Configure NVM store for pairing data
SHCI_C2_CONFIG_Cmd_Param_t config_param = {
.PayloadCmdSize = SHCI_C2_CONFIG_PAYLOAD_CMD_SIZE,
- .Config1 =SHCI_C2_CONFIG_CONFIG1_BIT0_BLE_NVM_DATA_TO_SRAM,
+ .Config1 = SHCI_C2_CONFIG_CONFIG1_BIT0_BLE_NVM_DATA_TO_SRAM,
.BleNvmRamAddress = (uint32_t)ble_app_nvm,
.EvtMask1 = SHCI_C2_CONFIG_EVTMASK1_BIT1_BLE_NVM_RAM_UPDATE_ENABLE,
};
@@ -67,7 +69,7 @@ bool ble_app_init() {
// Start ble stack on 2nd core
SHCI_C2_Ble_Init_Cmd_Packet_t ble_init_cmd_packet = {
- .Header = {{0,0,0}}, // Header unused
+ .Header = {{0, 0, 0}}, // Header unused
.Param = {
.pBleBufferAddress = 0, // pBleBufferAddress not used
.BleBufferSize = 0, // BleBufferSize not used
@@ -91,8 +93,7 @@ bool ble_app_init() {
.min_tx_power = 0,
.max_tx_power = 0,
.rx_model_config = 1,
- }
- };
+ }};
status = SHCI_C2_BLE_Init(&ble_init_cmd_packet);
if(status) {
FURI_LOG_E(TAG, "Failed to start ble stack: %d", status);
@@ -122,10 +123,11 @@ void ble_app_thread_stop() {
}
}
-static int32_t ble_app_hci_thread(void *arg) {
+static int32_t ble_app_hci_thread(void* arg) {
uint32_t flags = 0;
while(1) {
- flags = osEventFlagsWait(ble_app->event_flags, BLE_APP_FLAG_ALL, osFlagsWaitAny, osWaitForever);
+ flags = osEventFlagsWait(
+ ble_app->event_flags, BLE_APP_FLAG_ALL, osFlagsWaitAny, osWaitForever);
if(flags & BLE_APP_FLAG_KILL_THREAD) {
break;
}
@@ -146,7 +148,7 @@ void hci_notify_asynch_evt(void* pdata) {
void hci_cmd_resp_release(uint32_t flag) {
if(ble_app) {
- osSemaphoreRelease(ble_app->hci_sem);
+ osSemaphoreRelease(ble_app->hci_sem);
}
}
@@ -156,13 +158,13 @@ void hci_cmd_resp_wait(uint32_t timeout) {
}
}
-static void ble_app_hci_event_handler( void * pPayload ) {
+static void ble_app_hci_event_handler(void* pPayload) {
SVCCTL_UserEvtFlowStatus_t svctl_return_status;
- tHCI_UserEvtRxParam *pParam = (tHCI_UserEvtRxParam *)pPayload;
+ tHCI_UserEvtRxParam* pParam = (tHCI_UserEvtRxParam*)pPayload;
if(ble_app) {
- svctl_return_status = SVCCTL_UserEvtRx((void *)&(pParam->pckt->evtserial));
- if (svctl_return_status != SVCCTL_UserEvtFlowDisable) {
+ svctl_return_status = SVCCTL_UserEvtRx((void*)&(pParam->pckt->evtserial));
+ if(svctl_return_status != SVCCTL_UserEvtFlowDisable) {
pParam->status = HCI_TL_UserEventFlow_Enable;
} else {
pParam->status = HCI_TL_UserEventFlow_Disable;
@@ -170,14 +172,14 @@ static void ble_app_hci_event_handler( void * pPayload ) {
}
}
-static void ble_app_hci_status_not_handler( HCI_TL_CmdStatus_t status ) {
+static void ble_app_hci_status_not_handler(HCI_TL_CmdStatus_t status) {
if(status == HCI_TL_CmdBusy) {
- osMutexAcquire(ble_app->hci_mtx, osWaitForever );
+ osMutexAcquire(ble_app->hci_mtx, osWaitForever);
} else if(status == HCI_TL_CmdAvailable) {
osMutexRelease(ble_app->hci_mtx);
}
}
-void SVCCTL_ResumeUserEventFlow( void ) {
+void SVCCTL_ResumeUserEventFlow(void) {
hci_resume_flow();
}
diff --git a/firmware/targets/f7/ble-glue/ble_app.h b/firmware/targets/f7/ble_glue/ble_app.h
index 062154e9..495005ec 100644
--- a/firmware/targets/f7/ble-glue/ble_app.h
+++ b/firmware/targets/f7/ble_glue/ble_app.h
@@ -1,4 +1,4 @@
-#pragma once
+#pragma once
#ifdef __cplusplus
extern "C" {
diff --git a/firmware/targets/f6/ble-glue/ble_conf.h b/firmware/targets/f7/ble_glue/ble_conf.h
index 0acd8860..97650670 100644
--- a/firmware/targets/f6/ble-glue/ble_conf.h
+++ b/firmware/targets/f7/ble_glue/ble_conf.h
@@ -30,17 +30,17 @@
*
******************************************************************************/
- /**
+/**
* This setting shall be set to '1' if the device needs to support the Peripheral Role
* In the MS configuration, both BLE_CFG_PERIPHERAL and BLE_CFG_CENTRAL shall be set to '1'
*/
-#define BLE_CFG_PERIPHERAL 1
+#define BLE_CFG_PERIPHERAL 1
/**
* This setting shall be set to '1' if the device needs to support the Central Role
* In the MS configuration, both BLE_CFG_PERIPHERAL and BLE_CFG_CENTRAL shall be set to '1'
*/
-#define BLE_CFG_CENTRAL 0
+#define BLE_CFG_CENTRAL 0
/**
* There is one handler per service enabled
@@ -49,21 +49,21 @@
* This shall take into account all registered handlers
* (from either the provided services or the custom services)
*/
-#define BLE_CFG_SVC_MAX_NBR_CB 7
+#define BLE_CFG_SVC_MAX_NBR_CB 7
-#define BLE_CFG_CLT_MAX_NBR_CB 0
+#define BLE_CFG_CLT_MAX_NBR_CB 0
/******************************************************************************
* GAP Service - Apprearance
******************************************************************************/
-#define BLE_CFG_UNKNOWN_APPEARANCE (0)
-#define BLE_CFG_GAP_APPEARANCE (0x0086)
+#define BLE_CFG_UNKNOWN_APPEARANCE (0)
+#define BLE_CFG_GAP_APPEARANCE (0x0086)
/******************************************************************************
* Over The Air Feature (OTA) - STM Proprietary
******************************************************************************/
-#define BLE_CFG_OTA_REBOOT_CHAR 0/**< REBOOT OTA MODE CHARACTERISTIC */
+#define BLE_CFG_OTA_REBOOT_CHAR 0 /**< REBOOT OTA MODE CHARACTERISTIC */
#endif /*BLE_CONF_H */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/firmware/targets/f7/ble_glue/ble_dbg_conf.h b/firmware/targets/f7/ble_glue/ble_dbg_conf.h
new file mode 100644
index 00000000..8305f810
--- /dev/null
+++ b/firmware/targets/f7/ble_glue/ble_dbg_conf.h
@@ -0,0 +1,199 @@
+/**
+ ******************************************************************************
+ * File Name : App/ble_dbg_conf.h
+ * Description : Debug configuration file for BLE Middleware.
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __BLE_DBG_CONF_H
+#define __BLE_DBG_CONF_H
+
+/**
+ * Enable or Disable traces from BLE
+ */
+
+#define BLE_DBG_APP_EN 1
+#define BLE_DBG_DIS_EN 1
+#define BLE_DBG_HRS_EN 1
+#define BLE_DBG_SVCCTL_EN 1
+#define BLE_DBG_BLS_EN 1
+#define BLE_DBG_HTS_EN 1
+#define BLE_DBG_P2P_STM_EN 1
+
+/**
+ * Macro definition
+ */
+#if(BLE_DBG_APP_EN != 0)
+#define BLE_DBG_APP_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_APP_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_DIS_EN != 0)
+#define BLE_DBG_DIS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_DIS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_HRS_EN != 0)
+#define BLE_DBG_HRS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_HRS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_P2P_STM_EN != 0)
+#define BLE_DBG_P2P_STM_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_P2P_STM_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_TEMPLATE_STM_EN != 0)
+#define BLE_DBG_TEMPLATE_STM_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_TEMPLATE_STM_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_EDS_STM_EN != 0)
+#define BLE_DBG_EDS_STM_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_EDS_STM_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_LBS_STM_EN != 0)
+#define BLE_DBG_LBS_STM_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_LBS_STM_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_SVCCTL_EN != 0)
+#define BLE_DBG_SVCCTL_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_SVCCTL_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_CTS_EN != 0)
+#define BLE_DBG_CTS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_CTS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_HIDS_EN != 0)
+#define BLE_DBG_HIDS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_HIDS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_PASS_EN != 0)
+#define BLE_DBG_PASS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_PASS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_BLS_EN != 0)
+#define BLE_DBG_BLS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_BLS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_HTS_EN != 0)
+#define BLE_DBG_HTS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_HTS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_ANS_EN != 0)
+#define BLE_DBG_ANS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_ANS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_ESS_EN != 0)
+#define BLE_DBG_ESS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_ESS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_GLS_EN != 0)
+#define BLE_DBG_GLS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_GLS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_BAS_EN != 0)
+#define BLE_DBG_BAS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_BAS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_RTUS_EN != 0)
+#define BLE_DBG_RTUS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_RTUS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_HPS_EN != 0)
+#define BLE_DBG_HPS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_HPS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_TPS_EN != 0)
+#define BLE_DBG_TPS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_TPS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_LLS_EN != 0)
+#define BLE_DBG_LLS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_LLS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_IAS_EN != 0)
+#define BLE_DBG_IAS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_IAS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_WSS_EN != 0)
+#define BLE_DBG_WSS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_WSS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_LNS_EN != 0)
+#define BLE_DBG_LNS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_LNS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_SCPS_EN != 0)
+#define BLE_DBG_SCPS_MSG PRINT_MESG_DBG
+#else
+#define BLE_DBG_SCPS_MSG PRINT_NO_MESG
+#endif
+
+#if(BLE_DBG_DTS_EN != 0)
+#define BLE_DBG_DTS_MSG PRINT_MESG_DBG
+#define BLE_DBG_DTS_BUF PRINT_LOG_BUFF_DBG
+#else
+#define BLE_DBG_DTS_MSG PRINT_NO_MESG
+#define BLE_DBG_DTS_BUF PRINT_NO_MESG
+#endif
+
+#endif /*__BLE_DBG_CONF_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/firmware/targets/f6/ble-glue/ble_glue.c b/firmware/targets/f7/ble_glue/ble_glue.c
index 25162331..2fe3b3b4 100644
--- a/firmware/targets/f6/ble-glue/ble_glue.c
+++ b/firmware/targets/f7/ble_glue/ble_glue.c
@@ -7,7 +7,7 @@
#include "shci.h"
#include "shci_tl.h"
#include "app_debug.h"
-#include <furi-hal.h>
+#include <furi_hal.h>
#define TAG "Core2"
@@ -15,12 +15,18 @@
#define BLE_GLUE_FLAG_KILL_THREAD (1UL << 1)
#define BLE_GLUE_FLAG_ALL (BLE_GLUE_FLAG_SHCI_EVENT | BLE_GLUE_FLAG_KILL_THREAD)
-#define POOL_SIZE (CFG_TLBLE_EVT_QUEUE_LENGTH*4U*DIVC(( sizeof(TL_PacketHeader_t) + TL_BLE_EVENT_FRAME_SIZE ), 4U))
+#define POOL_SIZE \
+ (CFG_TLBLE_EVT_QUEUE_LENGTH * 4U * \
+ DIVC((sizeof(TL_PacketHeader_t) + TL_BLE_EVENT_FRAME_SIZE), 4U))
PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static uint8_t ble_glue_event_pool[POOL_SIZE];
PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static TL_CmdPacket_t ble_glue_system_cmd_buff;
-PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static uint8_t ble_glue_system_spare_event_buff[sizeof(TL_PacketHeader_t) + TL_EVT_HDR_SIZE + 255U];
-PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static uint8_t ble_glue_ble_spare_event_buff[sizeof(TL_PacketHeader_t) + TL_EVT_HDR_SIZE + 255];
+PLACE_IN_SECTION("MB_MEM2")
+ALIGN(4)
+static uint8_t ble_glue_system_spare_event_buff[sizeof(TL_PacketHeader_t) + TL_EVT_HDR_SIZE + 255U];
+PLACE_IN_SECTION("MB_MEM2")
+ALIGN(4)
+static uint8_t ble_glue_ble_spare_event_buff[sizeof(TL_PacketHeader_t) + TL_EVT_HDR_SIZE + 255];
typedef enum {
// Stage 1: core2 startup and FUS
@@ -44,11 +50,13 @@ typedef struct {
static BleGlue* ble_glue = NULL;
-static int32_t ble_glue_shci_thread(void *argument);
+static int32_t ble_glue_shci_thread(void* argument);
static void ble_glue_sys_status_not_callback(SHCI_TL_CmdStatus_t status);
static void ble_glue_sys_user_event_callback(void* pPayload);
-void ble_glue_set_key_storage_changed_callback(BleGlueKeyStorageChangedCallback callback, void* context) {
+void ble_glue_set_key_storage_changed_callback(
+ BleGlueKeyStorageChangedCallback callback,
+ void* context) {
furi_assert(ble_glue);
furi_assert(callback);
ble_glue->callback = callback;
@@ -89,14 +97,14 @@ void ble_glue_init() {
// System channel initialization
SHci_Tl_Init_Conf.p_cmdbuffer = (uint8_t*)&ble_glue_system_cmd_buff;
SHci_Tl_Init_Conf.StatusNotCallBack = ble_glue_sys_status_not_callback;
- shci_init(ble_glue_sys_user_event_callback, (void*) &SHci_Tl_Init_Conf);
+ shci_init(ble_glue_sys_user_event_callback, (void*)&SHci_Tl_Init_Conf);
/**< Memory Manager channel initialization */
tl_mm_config.p_BleSpareEvtBuffer = ble_glue_ble_spare_event_buff;
tl_mm_config.p_SystemSpareEvtBuffer = ble_glue_system_spare_event_buff;
tl_mm_config.p_AsynchEvtPool = ble_glue_event_pool;
tl_mm_config.AsynchEvtPoolSize = POOL_SIZE;
- TL_MM_Init( &tl_mm_config );
+ TL_MM_Init(&tl_mm_config);
TL_Enable();
/*
@@ -109,8 +117,8 @@ void ble_glue_init() {
bool ble_glue_wait_for_fus_start(WirelessFwInfo_t* info) {
bool ret = false;
size_t countdown = 1000;
- while (countdown > 0) {
- if (ble_glue->status == BleGlueStatusFusStarted) {
+ while(countdown > 0) {
+ if(ble_glue->status == BleGlueStatusFusStarted) {
ret = true;
break;
}
@@ -130,7 +138,7 @@ bool ble_glue_wait_for_fus_start(WirelessFwInfo_t* info) {
bool ble_glue_start() {
furi_assert(ble_glue);
- if (ble_glue->status != BleGlueStatusFusStarted) {
+ if(ble_glue->status != BleGlueStatusFusStarted) {
return false;
}
@@ -172,16 +180,16 @@ bool ble_glue_is_radio_stack_ready() {
}
static void ble_glue_sys_status_not_callback(SHCI_TL_CmdStatus_t status) {
- switch (status) {
+ switch(status) {
case SHCI_TL_CmdBusy:
- osMutexAcquire( ble_glue->shci_mtx, osWaitForever );
+ osMutexAcquire(ble_glue->shci_mtx, osWaitForever);
break;
case SHCI_TL_CmdAvailable:
- osMutexRelease( ble_glue->shci_mtx );
+ osMutexRelease(ble_glue->shci_mtx);
break;
default:
break;
- }
+ }
}
/*
@@ -193,13 +201,14 @@ static void ble_glue_sys_status_not_callback(SHCI_TL_CmdStatus_t status) {
* ( eg ((tSHCI_UserEvtRxParam*)pPayload)->status shall be set to SHCI_TL_UserEventFlow_Disable )
* When the status is not filled, the buffer is released by default
*/
-static void ble_glue_sys_user_event_callback( void * pPayload ) {
+static void ble_glue_sys_user_event_callback(void* pPayload) {
UNUSED(pPayload);
/* Traces channel initialization */
// APPD_EnableCPU2( );
- TL_AsynchEvt_t *p_sys_event = (TL_AsynchEvt_t*)(((tSHCI_UserEvtRxParam*)pPayload)->pckt->evtserial.evt.payload);
-
+ TL_AsynchEvt_t* p_sys_event =
+ (TL_AsynchEvt_t*)(((tSHCI_UserEvtRxParam*)pPayload)->pckt->evtserial.evt.payload);
+
if(p_sys_event->subevtcode == SHCI_SUB_EVT_CODE_READY) {
FURI_LOG_I(TAG, "Fus started");
ble_glue->status = BleGlueStatusFusStarted;
@@ -208,9 +217,13 @@ static void ble_glue_sys_user_event_callback( void * pPayload ) {
FURI_LOG_E(TAG, "Error during initialization");
furi_hal_power_insomnia_exit();
} else if(p_sys_event->subevtcode == SHCI_SUB_EVT_BLE_NVM_RAM_UPDATE) {
- SHCI_C2_BleNvmRamUpdate_Evt_t* p_sys_ble_nvm_ram_update_event = (SHCI_C2_BleNvmRamUpdate_Evt_t*)p_sys_event->payload;
+ SHCI_C2_BleNvmRamUpdate_Evt_t* p_sys_ble_nvm_ram_update_event =
+ (SHCI_C2_BleNvmRamUpdate_Evt_t*)p_sys_event->payload;
if(ble_glue->callback) {
- ble_glue->callback((uint8_t*)p_sys_ble_nvm_ram_update_event->StartAddress, p_sys_ble_nvm_ram_update_event->Size, ble_glue->context);
+ ble_glue->callback(
+ (uint8_t*)p_sys_ble_nvm_ram_update_event->StartAddress,
+ p_sys_ble_nvm_ram_update_event->Size,
+ ble_glue->context);
}
}
}
@@ -243,7 +256,8 @@ void ble_glue_thread_stop() {
static int32_t ble_glue_shci_thread(void* context) {
uint32_t flags = 0;
while(true) {
- flags = osEventFlagsWait(ble_glue->event_flags, BLE_GLUE_FLAG_ALL, osFlagsWaitAny, osWaitForever);
+ flags = osEventFlagsWait(
+ ble_glue->event_flags, BLE_GLUE_FLAG_ALL, osFlagsWaitAny, osWaitForever);
if(flags & BLE_GLUE_FLAG_SHCI_EVENT) {
shci_user_evt_proc();
}
diff --git a/firmware/targets/f7/ble-glue/ble_glue.h b/firmware/targets/f7/ble_glue/ble_glue.h
index 598ab072..6c8cdce6 100644
--- a/firmware/targets/f7/ble-glue/ble_glue.h
+++ b/firmware/targets/f7/ble_glue/ble_glue.h
@@ -8,8 +8,8 @@
extern "C" {
#endif
-typedef void(*BleGlueKeyStorageChangedCallback)(uint8_t* change_addr_start, uint16_t size, void* context);
-
+typedef void (
+ *BleGlueKeyStorageChangedCallback)(uint8_t* change_addr_start, uint16_t size, void* context);
/** Initialize start core2 and initialize transport */
void ble_glue_init();
@@ -39,7 +39,9 @@ bool ble_glue_is_radio_stack_ready();
* @param[in] callback The callback to call on NVM change
* @param context The context for callback
*/
-void ble_glue_set_key_storage_changed_callback(BleGlueKeyStorageChangedCallback callback, void* context);
+void ble_glue_set_key_storage_changed_callback(
+ BleGlueKeyStorageChangedCallback callback,
+ void* context);
void ble_glue_thread_stop();
diff --git a/firmware/targets/f7/ble_glue/dev_info_service.c b/firmware/targets/f7/ble_glue/dev_info_service.c
new file mode 100644
index 00000000..1c9b94eb
--- /dev/null
+++ b/firmware/targets/f7/ble_glue/dev_info_service.c
@@ -0,0 +1,174 @@
+#include "dev_info_service.h"
+#include "app_common.h"
+#include "ble.h"
+
+#include <furi.h>
+
+#define TAG "BtDevInfoSvc"
+
+typedef struct {
+ uint16_t service_handle;
+ uint16_t man_name_char_handle;
+ uint16_t serial_num_char_handle;
+ uint16_t firmware_rev_char_handle;
+ uint16_t software_rev_char_handle;
+} DevInfoSvc;
+
+static DevInfoSvc* dev_info_svc = NULL;
+
+static const char dev_info_man_name[] = "Flipper Devices Inc.";
+static const char dev_info_serial_num[] = "1.0";
+static const char dev_info_firmware_rev_num[] = TOSTRING(TARGET);
+static const char dev_info_software_rev_num[] = GIT_COMMIT " " GIT_BRANCH " " GIT_BRANCH_NUM
+ " " BUILD_DATE;
+
+void dev_info_svc_start() {
+ dev_info_svc = furi_alloc(sizeof(DevInfoSvc));
+ tBleStatus status;
+
+ // Add Device Information Service
+ uint16_t uuid = DEVICE_INFORMATION_SERVICE_UUID;
+ status = aci_gatt_add_service(
+ UUID_TYPE_16, (Service_UUID_t*)&uuid, PRIMARY_SERVICE, 9, &dev_info_svc->service_handle);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to add Device Information Service: %d", status);
+ }
+
+ // Add characteristics
+ uuid = MANUFACTURER_NAME_UUID;
+ status = aci_gatt_add_char(
+ dev_info_svc->service_handle,
+ UUID_TYPE_16,
+ (Char_UUID_t*)&uuid,
+ strlen(dev_info_man_name),
+ CHAR_PROP_READ,
+ ATTR_PERMISSION_AUTHEN_READ,
+ GATT_DONT_NOTIFY_EVENTS,
+ 10,
+ CHAR_VALUE_LEN_CONSTANT,
+ &dev_info_svc->man_name_char_handle);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to add manufacturer name char: %d", status);
+ }
+ uuid = SERIAL_NUMBER_UUID;
+ status = aci_gatt_add_char(
+ dev_info_svc->service_handle,
+ UUID_TYPE_16,
+ (Char_UUID_t*)&uuid,
+ strlen(dev_info_serial_num),
+ CHAR_PROP_READ,
+ ATTR_PERMISSION_AUTHEN_READ,
+ GATT_DONT_NOTIFY_EVENTS,
+ 10,
+ CHAR_VALUE_LEN_CONSTANT,
+ &dev_info_svc->serial_num_char_handle);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to add serial number char: %d", status);
+ }
+ uuid = FIRMWARE_REVISION_UUID;
+ status = aci_gatt_add_char(
+ dev_info_svc->service_handle,
+ UUID_TYPE_16,
+ (Char_UUID_t*)&uuid,
+ strlen(dev_info_firmware_rev_num),
+ CHAR_PROP_READ,
+ ATTR_PERMISSION_AUTHEN_READ,
+ GATT_DONT_NOTIFY_EVENTS,
+ 10,
+ CHAR_VALUE_LEN_CONSTANT,
+ &dev_info_svc->firmware_rev_char_handle);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to add firmware revision char: %d", status);
+ }
+ uuid = SOFTWARE_REVISION_UUID;
+ status = aci_gatt_add_char(
+ dev_info_svc->service_handle,
+ UUID_TYPE_16,
+ (Char_UUID_t*)&uuid,
+ strlen(dev_info_software_rev_num),
+ CHAR_PROP_READ,
+ ATTR_PERMISSION_AUTHEN_READ,
+ GATT_DONT_NOTIFY_EVENTS,
+ 10,
+ CHAR_VALUE_LEN_CONSTANT,
+ &dev_info_svc->software_rev_char_handle);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to add software revision char: %d", status);
+ }
+
+ // Update characteristics
+ status = aci_gatt_update_char_value(
+ dev_info_svc->service_handle,
+ dev_info_svc->man_name_char_handle,
+ 0,
+ strlen(dev_info_man_name),
+ (uint8_t*)dev_info_man_name);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to update manufacturer name char: %d", status);
+ }
+ status = aci_gatt_update_char_value(
+ dev_info_svc->service_handle,
+ dev_info_svc->serial_num_char_handle,
+ 0,
+ strlen(dev_info_serial_num),
+ (uint8_t*)dev_info_serial_num);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to update serial number char: %d", status);
+ }
+ status = aci_gatt_update_char_value(
+ dev_info_svc->service_handle,
+ dev_info_svc->firmware_rev_char_handle,
+ 0,
+ strlen(dev_info_firmware_rev_num),
+ (uint8_t*)dev_info_firmware_rev_num);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to update firmware revision char: %d", status);
+ }
+ status = aci_gatt_update_char_value(
+ dev_info_svc->service_handle,
+ dev_info_svc->software_rev_char_handle,
+ 0,
+ strlen(dev_info_software_rev_num),
+ (uint8_t*)dev_info_software_rev_num);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to update software revision char: %d", status);
+ }
+}
+
+void dev_info_svc_stop() {
+ tBleStatus status;
+ if(dev_info_svc) {
+ // Delete service characteristics
+ status =
+ aci_gatt_del_char(dev_info_svc->service_handle, dev_info_svc->man_name_char_handle);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to delete manufacturer name char: %d", status);
+ }
+ status =
+ aci_gatt_del_char(dev_info_svc->service_handle, dev_info_svc->serial_num_char_handle);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to delete serial number char: %d", status);
+ }
+ status = aci_gatt_del_char(
+ dev_info_svc->service_handle, dev_info_svc->firmware_rev_char_handle);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to delete firmware revision char: %d", status);
+ }
+ status = aci_gatt_del_char(
+ dev_info_svc->service_handle, dev_info_svc->software_rev_char_handle);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to delete software revision char: %d", status);
+ }
+ // Delete service
+ status = aci_gatt_del_service(dev_info_svc->service_handle);
+ if(status) {
+ FURI_LOG_E(TAG, "Failed to delete device info service: %d", status);
+ }
+ free(dev_info_svc);
+ dev_info_svc = NULL;
+ }
+}
+
+bool dev_info_svc_is_started() {
+ return dev_info_svc != NULL;
+}
diff --git a/firmware/targets/f7/ble_glue/dev_info_service.h b/firmware/targets/f7/ble_glue/dev_info_service.h
new file mode 100644
index 00000000..2faac8a6
--- /dev/null
+++ b/firmware/targets/f7/ble_glue/dev_info_service.h
@@ -0,0 +1,24 @@
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DEV_INFO_MANUFACTURER_NAME "Flipper Devices Inc."
+#define DEV_INFO_SERIAL_NUMBER "1.0"
+#define DEV_INFO_FIRMWARE_REVISION_NUMBER TARGET
+#define DEV_INFO_SOFTWARE_REVISION_NUMBER \
+ GIT_COMMIT " " GIT_BRANCH " " GIT_BRANCH_NUM " " BUILD_DATE
+
+void dev_info_svc_start();
+
+void dev_info_svc_stop();
+
+bool dev_info_svc_is_started();
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/firmware/targets/f7/ble-glue/gap.c b/firmware/targets/f7/ble_glue/gap.c
index 5c454422..dfcd174e 100644
--- a/firmware/targets/f7/ble-glue/gap.c
+++ b/firmware/targets/f7/ble_glue/gap.c
@@ -2,7 +2,7 @@
#include "ble.h"
-#include <furi-hal.h>
+#include <furi_hal.h>
#include <furi.h>
#define TAG "BtGap"
@@ -46,9 +46,11 @@ typedef struct {
} GapScan;
// Identity root key
-static const uint8_t gap_irk[16] = {0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0};
+static const uint8_t gap_irk[16] =
+ {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0};
// Encryption root key
-static const uint8_t gap_erk[16] = {0xfe,0xdc,0xba,0x09,0x87,0x65,0x43,0x21,0xfe,0xdc,0xba,0x09,0x87,0x65,0x43,0x21};
+static const uint8_t gap_erk[16] =
+ {0xfe, 0xdc, 0xba, 0x09, 0x87, 0x65, 0x43, 0x21, 0xfe, 0xdc, 0xba, 0x09, 0x87, 0x65, 0x43, 0x21};
static Gap* gap = NULL;
static GapScan* gap_scan = NULL;
@@ -56,8 +58,7 @@ static GapScan* gap_scan = NULL;
static void gap_advertise_start(GapState new_state);
static int32_t gap_app(void* context);
-SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification( void *pckt )
-{
+SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification(void* pckt) {
hci_event_pckt* event_pckt;
evt_le_meta_event* meta_evt;
evt_blue_aci* blue_evt;
@@ -71,168 +72,173 @@ SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification( void *pckt )
if(gap) {
osMutexAcquire(gap->state_mutex, osWaitForever);
}
- switch (event_pckt->evt) {
- case EVT_DISCONN_COMPLETE:
- {
- hci_disconnection_complete_event_rp0 *disconnection_complete_event = (hci_disconnection_complete_event_rp0 *) event_pckt->data;
- if (disconnection_complete_event->Connection_Handle == gap->service.connection_handle) {
- gap->service.connection_handle = 0;
- gap->state = GapStateIdle;
- FURI_LOG_I(TAG, "Disconnect from client. Reason: %02X", disconnection_complete_event->Reason);
+ switch(event_pckt->evt) {
+ case EVT_DISCONN_COMPLETE: {
+ hci_disconnection_complete_event_rp0* disconnection_complete_event =
+ (hci_disconnection_complete_event_rp0*)event_pckt->data;
+ if(disconnection_complete_event->Connection_Handle == gap->service.connection_handle) {
+ gap->service.connection_handle = 0;
+ gap->state = GapStateIdle;
+ FURI_LOG_I(
+ TAG, "Disconnect from client. Reason: %02X", disconnection_complete_event->Reason);
+ }
+ if(gap->enable_adv) {
+ // Restart advertising
+ gap_advertise_start(GapStateAdvFast);
+ furi_hal_power_insomnia_exit();
+ }
+ GapEvent event = {.type = GapEventTypeDisconnected};
+ gap->on_event_cb(event, gap->context);
+ } break;
+
+ case EVT_LE_META_EVENT:
+ meta_evt = (evt_le_meta_event*)event_pckt->data;
+ switch(meta_evt->subevent) {
+ case EVT_LE_CONN_UPDATE_COMPLETE:
+ FURI_LOG_D(TAG, "Connection update event");
+ break;
+
+ case EVT_LE_PHY_UPDATE_COMPLETE:
+ evt_le_phy_update_complete = (hci_le_phy_update_complete_event_rp0*)meta_evt->data;
+ if(evt_le_phy_update_complete->Status) {
+ FURI_LOG_E(
+ TAG, "Update PHY failed, status %d", evt_le_phy_update_complete->Status);
+ } else {
+ FURI_LOG_I(TAG, "Update PHY succeed");
}
- if(gap->enable_adv) {
- // Restart advertising
- gap_advertise_start(GapStateAdvFast);
- furi_hal_power_insomnia_exit();
+ ret = hci_le_read_phy(gap->service.connection_handle, &tx_phy, &rx_phy);
+ if(ret) {
+ FURI_LOG_E(TAG, "Read PHY failed, status: %d", ret);
+ } else {
+ FURI_LOG_I(TAG, "PHY Params TX = %d, RX = %d ", tx_phy, rx_phy);
}
- GapEvent event = {.type = GapEventTypeDisconnected};
- gap->on_event_cb(event, gap->context);
- }
- break;
+ break;
- case EVT_LE_META_EVENT:
- meta_evt = (evt_le_meta_event*) event_pckt->data;
- switch (meta_evt->subevent) {
- case EVT_LE_CONN_UPDATE_COMPLETE:
- FURI_LOG_D(TAG, "Connection update event");
- break;
-
- case EVT_LE_PHY_UPDATE_COMPLETE:
- evt_le_phy_update_complete = (hci_le_phy_update_complete_event_rp0*)meta_evt->data;
- if(evt_le_phy_update_complete->Status) {
- FURI_LOG_E(TAG, "Update PHY failed, status %d", evt_le_phy_update_complete->Status);
- } else {
- FURI_LOG_I(TAG, "Update PHY succeed");
- }
- ret = hci_le_read_phy(gap->service.connection_handle,&tx_phy,&rx_phy);
- if(ret) {
- FURI_LOG_E(TAG, "Read PHY failed, status: %d", ret);
- } else {
- FURI_LOG_I(TAG, "PHY Params TX = %d, RX = %d ", tx_phy, rx_phy);
- }
- break;
-
- case EVT_LE_CONN_COMPLETE:
- furi_hal_power_insomnia_enter();
- hci_le_connection_complete_event_rp0* connection_complete_event = (hci_le_connection_complete_event_rp0 *) meta_evt->data;
- FURI_LOG_I(TAG, "Connection complete for connection handle 0x%x", connection_complete_event->Connection_Handle);
-
- // Stop advertising as connection completed
- osTimerStop(gap->advertise_timer);
-
- // Update connection status and handle
- gap->state = GapStateConnected;
- gap->service.connection_handle = connection_complete_event->Connection_Handle;
-
- // Start pairing by sending security request
- aci_gap_slave_security_req(connection_complete_event->Connection_Handle);
- break;
-
- case EVT_LE_ADVERTISING_REPORT: {
- if(gap_scan) {
- GapAddress address;
- hci_le_advertising_report_event_rp0* evt = (hci_le_advertising_report_event_rp0*) meta_evt->data;
- for(uint8_t i = 0; i < evt->Num_Reports; i++) {
- Advertising_Report_t* rep = &evt->Advertising_Report[i];
- address.type = rep->Address_Type;
- // Original MAC addres is in inverted order
- for(uint8_t j = 0; j < sizeof(address.mac); j++) {
- address.mac[j] = rep->Address[sizeof(address.mac) - j - 1];
- }
- gap_scan->callback(address, gap_scan->context);
- }
+ case EVT_LE_CONN_COMPLETE:
+ furi_hal_power_insomnia_enter();
+ hci_le_connection_complete_event_rp0* connection_complete_event =
+ (hci_le_connection_complete_event_rp0*)meta_evt->data;
+ FURI_LOG_I(
+ TAG,
+ "Connection complete for connection handle 0x%x",
+ connection_complete_event->Connection_Handle);
+
+ // Stop advertising as connection completed
+ osTimerStop(gap->advertise_timer);
+
+ // Update connection status and handle
+ gap->state = GapStateConnected;
+ gap->service.connection_handle = connection_complete_event->Connection_Handle;
+
+ // Start pairing by sending security request
+ aci_gap_slave_security_req(connection_complete_event->Connection_Handle);
+ break;
+
+ case EVT_LE_ADVERTISING_REPORT: {
+ if(gap_scan) {
+ GapAddress address;
+ hci_le_advertising_report_event_rp0* evt =
+ (hci_le_advertising_report_event_rp0*)meta_evt->data;
+ for(uint8_t i = 0; i < evt->Num_Reports; i++) {
+ Advertising_Report_t* rep = &evt->Advertising_Report[i];
+ address.type = rep->Address_Type;
+ // Original MAC addres is in inverted order
+ for(uint8_t j = 0; j < sizeof(address.mac); j++) {
+ address.mac[j] = rep->Address[sizeof(address.mac) - j - 1];
}
+ gap_scan->callback(address, gap_scan->context);
}
- break;
-
- default:
- break;
}
+ } break;
+
+ default:
+ break;
+ }
break;
- case EVT_VENDOR:
- blue_evt = (evt_blue_aci*) event_pckt->data;
- switch (blue_evt->ecode) {
- aci_gap_pairing_complete_event_rp0 *pairing_complete;
-
- case EVT_BLUE_GAP_LIMITED_DISCOVERABLE:
- FURI_LOG_I(TAG, "Limited discoverable event");
- break;
-
- case EVT_BLUE_GAP_PASS_KEY_REQUEST:
- {
- // Generate random PIN code
- uint32_t pin = rand() % 999999;
- aci_gap_pass_key_resp(gap->service.connection_handle, pin);
- FURI_LOG_I(TAG, "Pass key request event. Pin: %06d", pin);
- GapEvent event = {.type = GapEventTypePinCodeShow, .data.pin_code = pin};
- gap->on_event_cb(event, gap->context);
- }
- break;
-
- case EVT_BLUE_ATT_EXCHANGE_MTU_RESP:
- {
- aci_att_exchange_mtu_resp_event_rp0 *pr = (void*)blue_evt->data;
- FURI_LOG_I(TAG, "Rx MTU size: %d", pr->Server_RX_MTU);
- // Set maximum packet size given header size is 3 bytes
- GapEvent event = {.type = GapEventTypeUpdateMTU, .data.max_packet_size = pr->Server_RX_MTU - 3};
- gap->on_event_cb(event, gap->context);
- }
- break;
-
- case EVT_BLUE_GAP_AUTHORIZATION_REQUEST:
- FURI_LOG_I(TAG, "Authorization request event");
- break;
-
- case EVT_BLUE_GAP_SLAVE_SECURITY_INITIATED:
- FURI_LOG_I(TAG, "Slave security initiated");
- break;
-
- case EVT_BLUE_GAP_BOND_LOST:
- FURI_LOG_I(TAG, "Bond lost event. Start rebonding");
- aci_gap_allow_rebond(gap->service.connection_handle);
- break;
-
- case EVT_BLUE_GAP_DEVICE_FOUND:
- FURI_LOG_I(TAG, "Device found event");
- break;
-
- case EVT_BLUE_GAP_ADDR_NOT_RESOLVED:
- FURI_LOG_I(TAG, "Address not resolved event");
- break;
-
- case EVT_BLUE_GAP_KEYPRESS_NOTIFICATION:
- FURI_LOG_I(TAG, "Key press notification event");
- break;
-
- case EVT_BLUE_GAP_NUMERIC_COMPARISON_VALUE:
- {
- uint32_t pin = ((aci_gap_numeric_comparison_value_event_rp0 *)(blue_evt->data))->Numeric_Value;
- FURI_LOG_I(TAG, "Verify numeric comparison: %06d", pin);
- GapEvent event = {.type = GapEventTypePinCodeVerify, .data.pin_code = pin};
- bool result = gap->on_event_cb(event, gap->context);
- aci_gap_numeric_comparison_value_confirm_yesno(gap->service.connection_handle, result);
- break;
- }
+ case EVT_VENDOR:
+ blue_evt = (evt_blue_aci*)event_pckt->data;
+ switch(blue_evt->ecode) {
+ aci_gap_pairing_complete_event_rp0* pairing_complete;
- case EVT_BLUE_GAP_PAIRING_CMPLT:
- pairing_complete = (aci_gap_pairing_complete_event_rp0*)blue_evt->data;
- if (pairing_complete->Status) {
- FURI_LOG_E(TAG, "Pairing failed with status: %d. Terminating connection", pairing_complete->Status);
- aci_gap_terminate(gap->service.connection_handle, 5);
- } else {
- FURI_LOG_I(TAG, "Pairing complete");
- GapEvent event = {.type = GapEventTypeConnected};
- gap->on_event_cb(event, gap->context);
- }
- break;
+ case EVT_BLUE_GAP_LIMITED_DISCOVERABLE:
+ FURI_LOG_I(TAG, "Limited discoverable event");
+ break;
+
+ case EVT_BLUE_GAP_PASS_KEY_REQUEST: {
+ // Generate random PIN code
+ uint32_t pin = rand() % 999999;
+ aci_gap_pass_key_resp(gap->service.connection_handle, pin);
+ FURI_LOG_I(TAG, "Pass key request event. Pin: %06d", pin);
+ GapEvent event = {.type = GapEventTypePinCodeShow, .data.pin_code = pin};
+ gap->on_event_cb(event, gap->context);
+ } break;
+
+ case EVT_BLUE_ATT_EXCHANGE_MTU_RESP: {
+ aci_att_exchange_mtu_resp_event_rp0* pr = (void*)blue_evt->data;
+ FURI_LOG_I(TAG, "Rx MTU size: %d", pr->Server_RX_MTU);
+ // Set maximum packet size given header size is 3 bytes
+ GapEvent event = {
+ .type = GapEventTypeUpdateMTU, .data.max_packet_size = pr->Server_RX_MTU - 3};
+ gap->on_event_cb(event, gap->context);
+ } break;
+
+ case EVT_BLUE_GAP_AUTHORIZATION_REQUEST:
+ FURI_LOG_I(TAG, "Authorization request event");
+ break;
+
+ case EVT_BLUE_GAP_SLAVE_SECURITY_INITIATED:
+ FURI_LOG_I(TAG, "Slave security initiated");
+ break;
+
+ case EVT_BLUE_GAP_BOND_LOST:
+ FURI_LOG_I(TAG, "Bond lost event. Start rebonding");
+ aci_gap_allow_rebond(gap->service.connection_handle);
+ break;
- case EVT_BLUE_GAP_PROCEDURE_COMPLETE:
- FURI_LOG_I(TAG, "Procedure complete event");
- break;
+ case EVT_BLUE_GAP_DEVICE_FOUND:
+ FURI_LOG_I(TAG, "Device found event");
+ break;
+
+ case EVT_BLUE_GAP_ADDR_NOT_RESOLVED:
+ FURI_LOG_I(TAG, "Address not resolved event");
+ break;
+
+ case EVT_BLUE_GAP_KEYPRESS_NOTIFICATION:
+ FURI_LOG_I(TAG, "Key press notification event");
+ break;
+
+ case EVT_BLUE_GAP_NUMERIC_COMPARISON_VALUE: {
+ uint32_t pin =
+ ((aci_gap_numeric_comparison_value_event_rp0*)(blue_evt->data))->Numeric_Value;
+ FURI_LOG_I(TAG, "Verify numeric comparison: %06d", pin);
+ GapEvent event = {.type = GapEventTypePinCodeVerify, .data.pin_code = pin};
+ bool result = gap->on_event_cb(event, gap->context);
+ aci_gap_numeric_comparison_value_confirm_yesno(gap->service.connection_handle, result);
+ break;
+ }
+
+ case EVT_BLUE_GAP_PAIRING_CMPLT:
+ pairing_complete = (aci_gap_pairing_complete_event_rp0*)blue_evt->data;
+ if(pairing_complete->Status) {
+ FURI_LOG_E(
+ TAG,
+ "Pairing failed with status: %d. Terminating connection",
+ pairing_complete->Status);
+ aci_gap_terminate(gap->service.connection_handle, 5);
+ } else {
+ FURI_LOG_I(TAG, "Pairing complete");
+ GapEvent event = {.type = GapEventTypeConnected};
+ gap->on_event_cb(event, gap->context);
}
- default:
- break;
+ break;
+
+ case EVT_BLUE_GAP_PROCEDURE_COMPLETE:
+ FURI_LOG_I(TAG, "Procedure complete event");
+ break;
+ }
+ default:
+ break;
}
if(gap) {
osMutexRelease(gap->state_mutex);
@@ -243,7 +249,7 @@ SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification( void *pckt )
static void set_advertisment_service_uid(uint8_t* uid, uint8_t uid_len) {
if(uid_len == 2) {
gap->service.adv_svc_uuid[0] = AD_TYPE_16_BIT_SERV_UUID;
- } else if (uid_len == 4) {
+ } else if(uid_len == 4) {
gap->service.adv_svc_uuid[0] = AD_TYPE_32_BIT_SERV_UUID;
} else if(uid_len == 16) {
gap->service.adv_svc_uuid[0] = AD_TYPE_128_BIT_SERV_UUID_CMPLT_LIST;
@@ -259,7 +265,8 @@ static void gap_init_svc(Gap* gap) {
// HCI Reset to synchronise BLE Stack
hci_reset();
// Configure mac address
- aci_hal_write_config_data(CONFIG_DATA_PUBADDR_OFFSET, CONFIG_DATA_PUBADDR_LEN, gap->config->mac_address);
+ aci_hal_write_config_data(
+ CONFIG_DATA_PUBADDR_OFFSET, CONFIG_DATA_PUBADDR_LEN, gap->config->mac_address);
/* Static random Address
* The two upper bits shall be set to 1
@@ -268,28 +275,45 @@ static void gap_init_svc(Gap* gap) {
*/
srd_bd_addr[1] = 0x0000ED6E;
srd_bd_addr[0] = LL_FLASH_GetUDN();
- aci_hal_write_config_data( CONFIG_DATA_RANDOM_ADDRESS_OFFSET, CONFIG_DATA_RANDOM_ADDRESS_LEN, (uint8_t*)srd_bd_addr );
+ aci_hal_write_config_data(
+ CONFIG_DATA_RANDOM_ADDRESS_OFFSET, CONFIG_DATA_RANDOM_ADDRESS_LEN, (uint8_t*)srd_bd_addr);
// Set Identity root key used to derive LTK and CSRK
- aci_hal_write_config_data( CONFIG_DATA_IR_OFFSET, CONFIG_DATA_IR_LEN, (uint8_t*)gap_irk );
+ aci_hal_write_config_data(CONFIG_DATA_IR_OFFSET, CONFIG_DATA_IR_LEN, (uint8_t*)gap_irk);
// Set Encryption root key used to derive LTK and CSRK
- aci_hal_write_config_data( CONFIG_DATA_ER_OFFSET, CONFIG_DATA_ER_LEN, (uint8_t*)gap_erk );
+ aci_hal_write_config_data(CONFIG_DATA_ER_OFFSET, CONFIG_DATA_ER_LEN, (uint8_t*)gap_erk);
// Set TX Power to 0 dBm
aci_hal_set_tx_power_level(1, 0x19);
// Initialize GATT interface
aci_gatt_init();
// Initialize GAP interface
// Skip fist symbol AD_TYPE_COMPLETE_LOCAL_NAME
- char *name = gap->service.adv_name + 1;
- aci_gap_init(GAP_PERIPHERAL_ROLE, 0, strlen(name),
- &gap->service.gap_svc_handle, &gap->service.dev_name_char_handle, &gap->service.appearance_char_handle);
+ char* name = gap->service.adv_name + 1;
+ aci_gap_init(
+ GAP_PERIPHERAL_ROLE,
+ 0,
+ strlen(name),
+ &gap->service.gap_svc_handle,
+ &gap->service.dev_name_char_handle,
+ &gap->service.appearance_char_handle);
// Set GAP characteristics
- status = aci_gatt_update_char_value(gap->service.gap_svc_handle, gap->service.dev_name_char_handle, 0, strlen(name), (uint8_t *) name);
- if (status) {
+ status = aci_gatt_update_char_value(
+ gap->service.gap_svc_handle,
+ gap->service.dev_name_char_handle,
+ 0,
+ strlen(name),
+ (uint8_t*)name);
+ if(status) {
FURI_LOG_E(TAG, "Failed updating name characteristic: %d", status);
}
- uint8_t gap_appearence_char_uuid[2] = {gap->config->appearance_char & 0xff, gap->config->appearance_char >> 8};
- status = aci_gatt_update_char_value(gap->service.gap_svc_handle, gap->service.appearance_char_handle, 0, 2, gap_appearence_char_uuid);
+ uint8_t gap_appearence_char_uuid[2] = {
+ gap->config->appearance_char & 0xff, gap->config->appearance_char >> 8};
+ status = aci_gatt_update_char_value(
+ gap->service.gap_svc_handle,
+ gap->service.appearance_char_handle,
+ 0,
+ 2,
+ gap_appearence_char_uuid);
if(status) {
FURI_LOG_E(TAG, "Failed updating appearence characteristic: %d", status);
}
@@ -299,7 +323,7 @@ static void gap_init_svc(Gap* gap) {
bool keypress_supported = false;
if(gap->config->pairing_method == GapPairingPinCodeShow) {
aci_gap_set_io_capability(IO_CAP_DISPLAY_ONLY);
- } else if(gap->config->pairing_method == GapPairingPinCodeVerifyYesNo){
+ } else if(gap->config->pairing_method == GapPairingPinCodeVerifyYesNo) {
aci_gap_set_io_capability(IO_CAP_DISPLAY_YES_NO);
keypress_supported = true;
}
@@ -318,13 +342,12 @@ static void gap_init_svc(Gap* gap) {
aci_gap_configure_whitelist();
}
-static void gap_advertise_start(GapState new_state)
-{
+static void gap_advertise_start(GapState new_state) {
tBleStatus status;
uint16_t min_interval;
uint16_t max_interval;
- if (new_state == GapStateAdvFast) {
+ if(new_state == GapStateAdvFast) {
min_interval = 0x80; // 80 ms
max_interval = 0xa0; // 100 ms
} else {
@@ -334,17 +357,27 @@ static void gap_advertise_start(GapState new_state)
// Stop advertising timer
osTimerStop(gap->advertise_timer);
- if ((new_state == GapStateAdvLowPower) && ((gap->state == GapStateAdvFast) || (gap->state == GapStateAdvLowPower))) {
+ if((new_state == GapStateAdvLowPower) &&
+ ((gap->state == GapStateAdvFast) || (gap->state == GapStateAdvLowPower))) {
// Stop advertising
status = aci_gap_set_non_discoverable();
- if (status) {
+ if(status) {
FURI_LOG_E(TAG, "Stop Advertising Failed, result: %d", status);
}
}
// Configure advertising
- status = aci_gap_set_discoverable(ADV_IND, min_interval, max_interval, PUBLIC_ADDR, 0,
- strlen(gap->service.adv_name), (uint8_t*)gap->service.adv_name,
- gap->service.adv_svc_uuid_len, gap->service.adv_svc_uuid, 0, 0);
+ status = aci_gap_set_discoverable(
+ ADV_IND,
+ min_interval,
+ max_interval,
+ PUBLIC_ADDR,
+ 0,
+ strlen(gap->service.adv_name),
+ (uint8_t*)gap->service.adv_name,
+ gap->service.adv_svc_uuid_len,
+ gap->service.adv_svc_uuid,
+ 0,
+ 0);
if(status) {
FURI_LOG_E(TAG, "Set discoverable err: %d", status);
}
@@ -398,7 +431,7 @@ static void gap_advetise_timer_callback(void* context) {
}
bool gap_init(GapConfig* config, GapEventCallback on_event_cb, void* context) {
- if (!ble_glue_is_radio_stack_ready()) {
+ if(!ble_glue_is_radio_stack_ready()) {
return false;
}
@@ -446,7 +479,7 @@ GapState gap_get_state() {
if(gap) {
osMutexAcquire(gap->state_mutex, osWaitForever);
state = gap->state;
- osMutexRelease(gap->state_mutex );
+ osMutexRelease(gap->state_mutex);
} else {
state = GapStateUninitialized;
}
@@ -490,7 +523,7 @@ void gap_thread_stop() {
}
}
-static int32_t gap_app(void *context) {
+static int32_t gap_app(void* context) {
GapCommand command;
while(1) {
osStatus_t status = osMessageQueueGet(gap->command_queue, &command, NULL, osWaitForever);
diff --git a/firmware/targets/f7/ble-glue/gap.h b/firmware/targets/f7/ble_glue/gap.h
index 2ea3cdd2..635a4c3c 100644
--- a/firmware/targets/f7/ble-glue/gap.h
+++ b/firmware/targets/f7/ble_glue/gap.h
@@ -3,7 +3,7 @@
#include <stdint.h>
#include <stdbool.h>
-#include <furi-hal-version.h>
+#include <furi_hal_version.h>
#define GAP_MAC_ADDR_SIZE (6)
@@ -31,14 +31,14 @@ typedef struct {
GapEventData data;
} GapEvent;
-typedef bool(*GapEventCallback) (GapEvent event, void* context);
+typedef bool (*GapEventCallback)(GapEvent event, void* context);
typedef struct {
uint8_t type;
uint8_t mac[6];
} GapAddress;
-typedef void(*GapScanCallback) (GapAddress address, void* context);
+typedef void (*GapScanCallback)(GapAddress address, void* context);
typedef enum {
GapStateUninitialized,
diff --git a/firmware/targets/f6/ble-glue/hid_service.c b/firmware/targets/f7/ble_glue/hid_service.c
index dc9a7fa5..ec8854e6 100644
--- a/firmware/targets/f6/ble-glue/hid_service.c
+++ b/firmware/targets/f7/ble_glue/hid_service.c
@@ -19,9 +19,9 @@ typedef struct {
static HIDSvc* hid_svc = NULL;
-static SVCCTL_EvtAckStatus_t hid_svc_event_handler(void *event) {
+static SVCCTL_EvtAckStatus_t hid_svc_event_handler(void* event) {
SVCCTL_EvtAckStatus_t ret = SVCCTL_EvtNotAck;
- hci_event_pckt* event_pckt = (hci_event_pckt *)(((hci_uart_pckt*)event)->data);
+ hci_event_pckt* event_pckt = (hci_event_pckt*)(((hci_uart_pckt*)event)->data);
evt_blecore_aci* blecore_evt = (evt_blecore_aci*)event_pckt->data;
// aci_gatt_attribute_modified_event_rp0* attribute_modified;
if(event_pckt->evt == HCI_VENDOR_SPECIFIC_DEBUG_EVT_CODE) {
@@ -47,130 +47,131 @@ void hid_svc_start() {
SVCCTL_RegisterSvcHandler(hid_svc_event_handler);
// Add service
svc_uuid.Service_UUID_16 = HUMAN_INTERFACE_DEVICE_SERVICE_UUID;
- status = aci_gatt_add_service(UUID_TYPE_16,
- &svc_uuid,
- PRIMARY_SERVICE,
- 30,
- &hid_svc->svc_handle);
+ status =
+ aci_gatt_add_service(UUID_TYPE_16, &svc_uuid, PRIMARY_SERVICE, 30, &hid_svc->svc_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add HID service: %d", status);
}
// Add Protocol mode characterstics
char_uuid.Char_UUID_16 = PROTOCOL_MODE_CHAR_UUID;
- status = aci_gatt_add_char(hid_svc->svc_handle,
- UUID_TYPE_16,
- &char_uuid,
- 1,
- CHAR_PROP_READ | CHAR_PROP_WRITE_WITHOUT_RESP,
- ATTR_PERMISSION_NONE,
- GATT_NOTIFY_ATTRIBUTE_WRITE,
- 10,
- CHAR_VALUE_LEN_CONSTANT,
- &hid_svc->protocol_mode_char_handle);
+ status = aci_gatt_add_char(
+ hid_svc->svc_handle,
+ UUID_TYPE_16,
+ &char_uuid,
+ 1,
+ CHAR_PROP_READ | CHAR_PROP_WRITE_WITHOUT_RESP,
+ ATTR_PERMISSION_NONE,
+ GATT_NOTIFY_ATTRIBUTE_WRITE,
+ 10,
+ CHAR_VALUE_LEN_CONSTANT,
+ &hid_svc->protocol_mode_char_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add protocol mode characteristic: %d", status);
}
// Update Protocol mode characteristic
uint8_t protocol_mode = 1;
- status = aci_gatt_update_char_value(hid_svc->svc_handle,
- hid_svc->protocol_mode_char_handle,
- 0,
- 1,
- &protocol_mode);
+ status = aci_gatt_update_char_value(
+ hid_svc->svc_handle, hid_svc->protocol_mode_char_handle, 0, 1, &protocol_mode);
if(status) {
FURI_LOG_E(TAG, "Failed to update protocol mode characteristic: %d", status);
}
// Add Report characterstics
char_uuid.Char_UUID_16 = REPORT_CHAR_UUID;
- status = aci_gatt_add_char(hid_svc->svc_handle,
- UUID_TYPE_16,
- &char_uuid,
- HID_SVC_REPORT_MAX_LEN,
- CHAR_PROP_READ | CHAR_PROP_NOTIFY,
- ATTR_PERMISSION_NONE,
- GATT_DONT_NOTIFY_EVENTS,
- 10,
- CHAR_VALUE_LEN_VARIABLE,
- &hid_svc->report_char_handle);
+ status = aci_gatt_add_char(
+ hid_svc->svc_handle,
+ UUID_TYPE_16,
+ &char_uuid,
+ HID_SVC_REPORT_MAX_LEN,
+ CHAR_PROP_READ | CHAR_PROP_NOTIFY,
+ ATTR_PERMISSION_NONE,
+ GATT_DONT_NOTIFY_EVENTS,
+ 10,
+ CHAR_VALUE_LEN_VARIABLE,
+ &hid_svc->report_char_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add report characteristic: %d", status);
}
// Add Report descriptor
uint8_t desc_val[] = {0x00, 0x01};
desc_uuid.Char_UUID_16 = REPORT_REFERENCE_DESCRIPTOR_UUID;
- status = aci_gatt_add_char_desc(hid_svc->svc_handle,
- hid_svc->report_char_handle,
- UUID_TYPE_16,
- &desc_uuid,
- HID_SVC_REPORT_REF_LEN,
- HID_SVC_REPORT_REF_LEN,
- desc_val,
- ATTR_PERMISSION_NONE,
- ATTR_ACCESS_READ_ONLY,
- GATT_DONT_NOTIFY_EVENTS,
- MIN_ENCRY_KEY_SIZE,
- CHAR_VALUE_LEN_CONSTANT,
- &hid_svc->report_ref_desc_handle);
+ status = aci_gatt_add_char_desc(
+ hid_svc->svc_handle,
+ hid_svc->report_char_handle,
+ UUID_TYPE_16,
+ &desc_uuid,
+ HID_SVC_REPORT_REF_LEN,
+ HID_SVC_REPORT_REF_LEN,
+ desc_val,
+ ATTR_PERMISSION_NONE,
+ ATTR_ACCESS_READ_ONLY,
+ GATT_DONT_NOTIFY_EVENTS,
+ MIN_ENCRY_KEY_SIZE,
+ CHAR_VALUE_LEN_CONSTANT,
+ &hid_svc->report_ref_desc_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add report reference descriptor: %d", status);
}
// Add Report Map characteristic
char_uuid.Char_UUID_16 = REPORT_MAP_CHAR_UUID;
- status = aci_gatt_add_char(hid_svc->svc_handle,
- UUID_TYPE_16,
- &char_uuid,
- HID_SVC_REPORT_MAP_MAX_LEN,
- CHAR_PROP_READ,
- ATTR_PERMISSION_NONE,
- GATT_DONT_NOTIFY_EVENTS,
- 10,
- CHAR_VALUE_LEN_VARIABLE,
- &hid_svc->report_map_char_handle);
+ status = aci_gatt_add_char(
+ hid_svc->svc_handle,
+ UUID_TYPE_16,
+ &char_uuid,
+ HID_SVC_REPORT_MAP_MAX_LEN,
+ CHAR_PROP_READ,
+ ATTR_PERMISSION_NONE,
+ GATT_DONT_NOTIFY_EVENTS,
+ 10,
+ CHAR_VALUE_LEN_VARIABLE,
+ &hid_svc->report_map_char_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add report map characteristic: %d", status);
}
// Add Boot Keyboard characteristic
char_uuid.Char_UUID_16 = BOOT_KEYBOARD_INPUT_REPORT_CHAR_UUID;
- status = aci_gatt_add_char(hid_svc->svc_handle,
- UUID_TYPE_16,
- &char_uuid,
- HID_SVC_BOOT_KEYBOARD_INPUT_REPORT_MAX_LEN,
- CHAR_PROP_READ | CHAR_PROP_NOTIFY,
- ATTR_PERMISSION_NONE,
- GATT_NOTIFY_WRITE_REQ_AND_WAIT_FOR_APPL_RESP,
- 10,
- CHAR_VALUE_LEN_VARIABLE,
- &hid_svc->keyboard_boot_char_handle);
+ status = aci_gatt_add_char(
+ hid_svc->svc_handle,
+ UUID_TYPE_16,
+ &char_uuid,
+ HID_SVC_BOOT_KEYBOARD_INPUT_REPORT_MAX_LEN,
+ CHAR_PROP_READ | CHAR_PROP_NOTIFY,
+ ATTR_PERMISSION_NONE,
+ GATT_NOTIFY_WRITE_REQ_AND_WAIT_FOR_APPL_RESP,
+ 10,
+ CHAR_VALUE_LEN_VARIABLE,
+ &hid_svc->keyboard_boot_char_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add report map characteristic: %d", status);
}
// Add Information characteristic
char_uuid.Char_UUID_16 = HID_INFORMATION_CHAR_UUID;
- status = aci_gatt_add_char(hid_svc->svc_handle,
- UUID_TYPE_16,
- &char_uuid,
- HID_SVC_INFO_LEN,
- CHAR_PROP_READ,
- ATTR_PERMISSION_NONE,
- GATT_DONT_NOTIFY_EVENTS,
- 10,
- CHAR_VALUE_LEN_CONSTANT,
- &hid_svc->info_char_handle);
+ status = aci_gatt_add_char(
+ hid_svc->svc_handle,
+ UUID_TYPE_16,
+ &char_uuid,
+ HID_SVC_INFO_LEN,
+ CHAR_PROP_READ,
+ ATTR_PERMISSION_NONE,
+ GATT_DONT_NOTIFY_EVENTS,
+ 10,
+ CHAR_VALUE_LEN_CONSTANT,
+ &hid_svc->info_char_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add information characteristic: %d", status);
}
// Add Control Point characteristic
char_uuid.Char_UUID_16 = HID_CONTROL_POINT_CHAR_UUID;
- status = aci_gatt_add_char(hid_svc->svc_handle,
- UUID_TYPE_16,
- &char_uuid,
- HID_SVC_CONTROL_POINT_LEN,
- CHAR_PROP_WRITE_WITHOUT_RESP,
- ATTR_PERMISSION_NONE,
- GATT_NOTIFY_ATTRIBUTE_WRITE,
- 10,
- CHAR_VALUE_LEN_CONSTANT,
- &hid_svc->ctrl_point_char_handle);
+ status = aci_gatt_add_char(
+ hid_svc->svc_handle,
+ UUID_TYPE_16,
+ &char_uuid,
+ HID_SVC_CONTROL_POINT_LEN,
+ CHAR_PROP_WRITE_WITHOUT_RESP,
+ ATTR_PERMISSION_NONE,
+ GATT_NOTIFY_ATTRIBUTE_WRITE,
+ 10,
+ CHAR_VALUE_LEN_CONSTANT,
+ &hid_svc->ctrl_point_char_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add control point characteristic: %d", status);
}
@@ -180,11 +181,8 @@ bool hid_svc_update_report_map(uint8_t* data, uint16_t len) {
furi_assert(data);
furi_assert(hid_svc);
- tBleStatus status = aci_gatt_update_char_value(hid_svc->svc_handle,
- hid_svc->report_map_char_handle,
- 0,
- len,
- data);
+ tBleStatus status = aci_gatt_update_char_value(
+ hid_svc->svc_handle, hid_svc->report_map_char_handle, 0, len, data);
if(status) {
FURI_LOG_E(TAG, "Failed updating report map characteristic");
return false;
@@ -196,11 +194,8 @@ bool hid_svc_update_input_report(uint8_t* data, uint16_t len) {
furi_assert(data);
furi_assert(hid_svc);
- tBleStatus status = aci_gatt_update_char_value(hid_svc->svc_handle,
- hid_svc->report_char_handle,
- 0,
- len,
- data);
+ tBleStatus status =
+ aci_gatt_update_char_value(hid_svc->svc_handle, hid_svc->report_char_handle, 0, len, data);
if(status) {
FURI_LOG_E(TAG, "Failed updating report characteristic");
return false;
@@ -212,11 +207,8 @@ bool hid_svc_update_info(uint8_t* data, uint16_t len) {
furi_assert(data);
furi_assert(hid_svc);
- tBleStatus status = aci_gatt_update_char_value(hid_svc->svc_handle,
- hid_svc->info_char_handle,
- 0,
- len,
- data);
+ tBleStatus status =
+ aci_gatt_update_char_value(hid_svc->svc_handle, hid_svc->info_char_handle, 0, len, data);
if(status) {
FURI_LOG_E(TAG, "Failed updating info characteristic");
return false;
diff --git a/firmware/targets/f7/ble-glue/hid_service.h b/firmware/targets/f7/ble_glue/hid_service.h
index ed1394be..ed1394be 100644
--- a/firmware/targets/f7/ble-glue/hid_service.h
+++ b/firmware/targets/f7/ble_glue/hid_service.h
diff --git a/firmware/targets/f6/ble-glue/hw_conf.h b/firmware/targets/f7/ble_glue/hw_conf.h
index 9545238b..bf18a7d0 100644
--- a/firmware/targets/f6/ble-glue/hw_conf.h
+++ b/firmware/targets/f7/ble_glue/hw_conf.h
@@ -33,7 +33,7 @@
* Index of the semaphore used the prevent conflicts after standby sleep.
* Each CPUs takes this semaphore at standby wakeup until conclicting elements are restored.
*/
-#define CFG_HW_PWR_STANDBY_SEMID 10
+#define CFG_HW_PWR_STANDBY_SEMID 10
/**
* The CPU2 may be configured to store the Thread persistent data either in internal NVM storage on CPU2 or in
* SRAM2 buffer provided by the user application. This can be configured with the system command SHCI_C2_Config()
@@ -45,7 +45,7 @@
* CFG_HW_THREAD_NVM_SRAM_SEMID semaphore makes sure CPU2 does not update the persistent data in SRAM2 at the same time CPU1 is reading them.
* There is no timing constraint on how long this semaphore can be kept.
*/
-#define CFG_HW_THREAD_NVM_SRAM_SEMID 9
+#define CFG_HW_THREAD_NVM_SRAM_SEMID 9
/**
* The CPU2 may be configured to store the BLE persistent data either in internal NVM storage on CPU2 or in
@@ -58,7 +58,7 @@
* CFG_HW_BLE_NVM_SRAM_SEMID semaphore makes sure CPU2 does not update the persistent data in SRAM2 at the same time CPU1 is reading them.
* There is no timing constraint on how long this semaphore can be kept.
*/
-#define CFG_HW_BLE_NVM_SRAM_SEMID 8
+#define CFG_HW_BLE_NVM_SRAM_SEMID 8
/**
* Index of the semaphore used by CPU2 to prevent the CPU1 to either write or erase data in flash
@@ -71,7 +71,7 @@
* By default, CPU2 is using the PES bit to protect its timing. The CPU1 may request the CPU2 to use the semaphore
* instead of the PES bit by sending the system command SHCI_C2_SetFlashActivityControl()
*/
-#define CFG_HW_BLOCK_FLASH_REQ_BY_CPU2_SEMID 7
+#define CFG_HW_BLOCK_FLASH_REQ_BY_CPU2_SEMID 7
/**
* Index of the semaphore used by CPU1 to prevent the CPU2 to either write or erase data in flash
@@ -79,7 +79,7 @@
* write or erase in flash (as this will stall both CPUs)
* The PES bit shall not be used as this may stall the CPU2 in some cases.
*/
-#define CFG_HW_BLOCK_FLASH_REQ_BY_CPU1_SEMID 6
+#define CFG_HW_BLOCK_FLASH_REQ_BY_CPU1_SEMID 6
/**
* Index of the semaphore used to manage the CLK48 clock configuration
@@ -88,22 +88,22 @@
* When using the RNG, it is good enough to use CFG_HW_RNG_SEMID to control CLK48.
* More details in AN5289
*/
-#define CFG_HW_CLK48_CONFIG_SEMID 5
+#define CFG_HW_CLK48_CONFIG_SEMID 5
/* Index of the semaphore used to manage the entry Stop Mode procedure */
-#define CFG_HW_ENTRY_STOP_MODE_SEMID 4
+#define CFG_HW_ENTRY_STOP_MODE_SEMID 4
/* Index of the semaphore used to access the RCC */
-#define CFG_HW_RCC_SEMID 3
+#define CFG_HW_RCC_SEMID 3
/* Index of the semaphore used to access the FLASH */
-#define CFG_HW_FLASH_SEMID 2
+#define CFG_HW_FLASH_SEMID 2
/* Index of the semaphore used to access the PKA */
-#define CFG_HW_PKA_SEMID 1
+#define CFG_HW_PKA_SEMID 1
/* Index of the semaphore used to access the RNG */
-#define CFG_HW_RNG_SEMID 0
+#define CFG_HW_RNG_SEMID 0
/******************************************************************************
* HW TIMER SERVER
@@ -112,14 +112,15 @@
* The user may define the maximum number of virtual timers supported.
* It shall not exceed 255
*/
-#define CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER 6
+#define CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER 6
/**
* The user may define the priority in the NVIC of the RTC_WKUP interrupt handler that is used to manage the
* wakeup timer.
* This setting is the preemptpriority part of the NVIC.
*/
-#define CFG_HW_TS_NVIC_RTC_WAKEUP_IT_PREEMPTPRIO (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY + 1) /* FreeRTOS requirement */
+#define CFG_HW_TS_NVIC_RTC_WAKEUP_IT_PREEMPTPRIO \
+ (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY + 1) /* FreeRTOS requirement */
/**
* The user may define the priority in the NVIC of the RTC_WKUP interrupt handler that is used to manage the
@@ -127,7 +128,7 @@
* This setting is the subpriority part of the NVIC. It does not exist on all processors. When it is not supported
* on the CPU, the setting is ignored
*/
-#define CFG_HW_TS_NVIC_RTC_WAKEUP_IT_SUBPRIO 0
+#define CFG_HW_TS_NVIC_RTC_WAKEUP_IT_SUBPRIO 0
/**
* Define a critical section in the Timer server
@@ -143,7 +144,7 @@
* re-implement TIMER_ENTER_CRITICAL_SECTION and TIMER_EXIT_CRITICAL_SECTION and shall make sure that no TimerServer
* API are called when the TIMER critical section is entered
*/
-#define CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION 1
+#define CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION 1
/**
* This value shall reflect the maximum delay there could be in the application between the time the RTC interrupt
@@ -156,74 +157,74 @@
* recommended to select a value large enough to make sure it is not too short to ensure reliability of the system
* as this will have marginal impact on low power mode
*/
-#define CFG_HW_TS_RTC_HANDLER_MAX_DELAY ( 10 * (LSI_VALUE/1000) )
+#define CFG_HW_TS_RTC_HANDLER_MAX_DELAY (10 * (LSI_VALUE / 1000))
- /**
+/**
* Interrupt ID in the NVIC of the RTC Wakeup interrupt handler
* It shall be type of IRQn_Type
*/
-#define CFG_HW_TS_RTC_WAKEUP_HANDLER_ID RTC_WKUP_IRQn
+#define CFG_HW_TS_RTC_WAKEUP_HANDLER_ID RTC_WKUP_IRQn
/******************************************************************************
* HW UART
*****************************************************************************/
-#define CFG_HW_LPUART1_ENABLED 0
-#define CFG_HW_LPUART1_DMA_TX_SUPPORTED 0
+#define CFG_HW_LPUART1_ENABLED 0
+#define CFG_HW_LPUART1_DMA_TX_SUPPORTED 0
-#define CFG_HW_USART1_ENABLED 1
-#define CFG_HW_USART1_DMA_TX_SUPPORTED 1
+#define CFG_HW_USART1_ENABLED 1
+#define CFG_HW_USART1_DMA_TX_SUPPORTED 1
/**
* UART1
*/
-#define CFG_HW_USART1_PREEMPTPRIORITY 0x0F
-#define CFG_HW_USART1_SUBPRIORITY 0
+#define CFG_HW_USART1_PREEMPTPRIORITY 0x0F
+#define CFG_HW_USART1_SUBPRIORITY 0
/** < The application shall check the selected source clock is enable */
-#define CFG_HW_USART1_SOURCE_CLOCK RCC_USART1CLKSOURCE_SYSCLK
-
-#define CFG_HW_USART1_BAUDRATE 115200
-#define CFG_HW_USART1_WORDLENGTH UART_WORDLENGTH_8B
-#define CFG_HW_USART1_STOPBITS UART_STOPBITS_1
-#define CFG_HW_USART1_PARITY UART_PARITY_NONE
-#define CFG_HW_USART1_HWFLOWCTL UART_HWCONTROL_NONE
-#define CFG_HW_USART1_MODE UART_MODE_TX_RX
-#define CFG_HW_USART1_ADVFEATUREINIT UART_ADVFEATURE_NO_INIT
-#define CFG_HW_USART1_OVERSAMPLING UART_OVERSAMPLING_8
-
-#define CFG_HW_USART1_TX_PORT_CLK_ENABLE __HAL_RCC_GPIOB_CLK_ENABLE
-#define CFG_HW_USART1_TX_PORT GPIOB
-#define CFG_HW_USART1_TX_PIN GPIO_PIN_6
-#define CFG_HW_USART1_TX_MODE GPIO_MODE_AF_PP
-#define CFG_HW_USART1_TX_PULL GPIO_NOPULL
-#define CFG_HW_USART1_TX_SPEED GPIO_SPEED_FREQ_VERY_HIGH
-#define CFG_HW_USART1_TX_ALTERNATE GPIO_AF7_USART1
-
-#define CFG_HW_USART1_RX_PORT_CLK_ENABLE __HAL_RCC_GPIOB_CLK_ENABLE
-#define CFG_HW_USART1_RX_PORT GPIOB
-#define CFG_HW_USART1_RX_PIN GPIO_PIN_7
-#define CFG_HW_USART1_RX_MODE GPIO_MODE_AF_PP
-#define CFG_HW_USART1_RX_PULL GPIO_NOPULL
-#define CFG_HW_USART1_RX_SPEED GPIO_SPEED_FREQ_VERY_HIGH
-#define CFG_HW_USART1_RX_ALTERNATE GPIO_AF7_USART1
-
-#define CFG_HW_USART1_CTS_PORT_CLK_ENABLE __HAL_RCC_GPIOA_CLK_ENABLE
-#define CFG_HW_USART1_CTS_PORT GPIOA
-#define CFG_HW_USART1_CTS_PIN GPIO_PIN_11
-#define CFG_HW_USART1_CTS_MODE GPIO_MODE_AF_PP
-#define CFG_HW_USART1_CTS_PULL GPIO_PULLDOWN
-#define CFG_HW_USART1_CTS_SPEED GPIO_SPEED_FREQ_VERY_HIGH
-#define CFG_HW_USART1_CTS_ALTERNATE GPIO_AF7_USART1
-
-#define CFG_HW_USART1_DMA_TX_PREEMPTPRIORITY 0x0F
-#define CFG_HW_USART1_DMA_TX_SUBPRIORITY 0
-
-#define CFG_HW_USART1_DMAMUX_CLK_ENABLE __HAL_RCC_DMAMUX1_CLK_ENABLE
-#define CFG_HW_USART1_DMA_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE
-#define CFG_HW_USART1_TX_DMA_REQ DMA_REQUEST_USART1_TX
-#define CFG_HW_USART1_TX_DMA_CHANNEL DMA2_Channel4
-#define CFG_HW_USART1_TX_DMA_IRQn DMA2_Channel4_IRQn
-#define CFG_HW_USART1_DMA_TX_IRQHandler DMA2_Channel4_IRQHandler
+#define CFG_HW_USART1_SOURCE_CLOCK RCC_USART1CLKSOURCE_SYSCLK
+
+#define CFG_HW_USART1_BAUDRATE 115200
+#define CFG_HW_USART1_WORDLENGTH UART_WORDLENGTH_8B
+#define CFG_HW_USART1_STOPBITS UART_STOPBITS_1
+#define CFG_HW_USART1_PARITY UART_PARITY_NONE
+#define CFG_HW_USART1_HWFLOWCTL UART_HWCONTROL_NONE
+#define CFG_HW_USART1_MODE UART_MODE_TX_RX
+#define CFG_HW_USART1_ADVFEATUREINIT UART_ADVFEATURE_NO_INIT
+#define CFG_HW_USART1_OVERSAMPLING UART_OVERSAMPLING_8
+
+#define CFG_HW_USART1_TX_PORT_CLK_ENABLE __HAL_RCC_GPIOB_CLK_ENABLE
+#define CFG_HW_USART1_TX_PORT GPIOB
+#define CFG_HW_USART1_TX_PIN GPIO_PIN_6
+#define CFG_HW_USART1_TX_MODE GPIO_MODE_AF_PP
+#define CFG_HW_USART1_TX_PULL GPIO_NOPULL
+#define CFG_HW_USART1_TX_SPEED GPIO_SPEED_FREQ_VERY_HIGH
+#define CFG_HW_USART1_TX_ALTERNATE GPIO_AF7_USART1
+
+#define CFG_HW_USART1_RX_PORT_CLK_ENABLE __HAL_RCC_GPIOB_CLK_ENABLE
+#define CFG_HW_USART1_RX_PORT GPIOB
+#define CFG_HW_USART1_RX_PIN GPIO_PIN_7
+#define CFG_HW_USART1_RX_MODE GPIO_MODE_AF_PP
+#define CFG_HW_USART1_RX_PULL GPIO_NOPULL
+#define CFG_HW_USART1_RX_SPEED GPIO_SPEED_FREQ_VERY_HIGH
+#define CFG_HW_USART1_RX_ALTERNATE GPIO_AF7_USART1
+
+#define CFG_HW_USART1_CTS_PORT_CLK_ENABLE __HAL_RCC_GPIOA_CLK_ENABLE
+#define CFG_HW_USART1_CTS_PORT GPIOA
+#define CFG_HW_USART1_CTS_PIN GPIO_PIN_11
+#define CFG_HW_USART1_CTS_MODE GPIO_MODE_AF_PP
+#define CFG_HW_USART1_CTS_PULL GPIO_PULLDOWN
+#define CFG_HW_USART1_CTS_SPEED GPIO_SPEED_FREQ_VERY_HIGH
+#define CFG_HW_USART1_CTS_ALTERNATE GPIO_AF7_USART1
+
+#define CFG_HW_USART1_DMA_TX_PREEMPTPRIORITY 0x0F
+#define CFG_HW_USART1_DMA_TX_SUBPRIORITY 0
+
+#define CFG_HW_USART1_DMAMUX_CLK_ENABLE __HAL_RCC_DMAMUX1_CLK_ENABLE
+#define CFG_HW_USART1_DMA_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE
+#define CFG_HW_USART1_TX_DMA_REQ DMA_REQUEST_USART1_TX
+#define CFG_HW_USART1_TX_DMA_CHANNEL DMA2_Channel4
+#define CFG_HW_USART1_TX_DMA_IRQn DMA2_Channel4_IRQn
+#define CFG_HW_USART1_DMA_TX_IRQHandler DMA2_Channel4_IRQHandler
#endif /*HW_CONF_H */
diff --git a/firmware/targets/f7/ble-glue/hw_if.h b/firmware/targets/f7/ble_glue/hw_if.h
index f9dc0a6d..a0ac23df 100644
--- a/firmware/targets/f7/ble-glue/hw_if.h
+++ b/firmware/targets/f7/ble_glue/hw_if.h
@@ -27,7 +27,7 @@
extern "C" {
#endif
- /* Includes ------------------------------------------------------------------*/
+/* Includes ------------------------------------------------------------------*/
#include "stm32wbxx.h"
#include "stm32wbxx_ll_exti.h"
#include "stm32wbxx_ll_system.h"
@@ -41,13 +41,13 @@ extern "C" {
#include "stm32wbxx_ll_gpio.h"
#include "stm32wbxx_ll_rtc.h"
-#ifdef USE_STM32WBXX_USB_DONGLE
+#ifdef USE_STM32WBXX_USB_DONGLE
#include "stm32wbxx_usb_dongle.h"
#endif
-#ifdef USE_STM32WBXX_NUCLEO
+#ifdef USE_STM32WBXX_NUCLEO
#include "stm32wbxx_nucleo.h"
#endif
-#ifdef USE_X_NUCLEO_EPD
+#ifdef USE_X_NUCLEO_EPD
#include "x_nucleo_epd.h"
#endif
@@ -56,31 +56,42 @@ extern "C" {
/* USER CODE END Includes */
- /******************************************************************************
+/******************************************************************************
* HW UART
******************************************************************************/
- typedef enum
- {
+typedef enum {
hw_uart1,
hw_uart2,
hw_lpuart1,
- } hw_uart_id_t;
+} hw_uart_id_t;
- typedef enum
- {
+typedef enum {
hw_uart_ok,
hw_uart_error,
hw_uart_busy,
hw_uart_to,
- } hw_status_t;
+} hw_status_t;
- void HW_UART_Init(hw_uart_id_t hw_uart_id);
- void HW_UART_Receive_IT(hw_uart_id_t hw_uart_id, uint8_t *pData, uint16_t Size, void (*Callback)(void));
- void HW_UART_Transmit_IT(hw_uart_id_t hw_uart_id, uint8_t *pData, uint16_t Size, void (*Callback)(void));
- hw_status_t HW_UART_Transmit(hw_uart_id_t hw_uart_id, uint8_t *p_data, uint16_t size, uint32_t timeout);
- hw_status_t HW_UART_Transmit_DMA(hw_uart_id_t hw_uart_id, uint8_t *p_data, uint16_t size, void (*Callback)(void));
- void HW_UART_Interrupt_Handler(hw_uart_id_t hw_uart_id);
- void HW_UART_DMA_Interrupt_Handler(hw_uart_id_t hw_uart_id);
+void HW_UART_Init(hw_uart_id_t hw_uart_id);
+void HW_UART_Receive_IT(
+ hw_uart_id_t hw_uart_id,
+ uint8_t* pData,
+ uint16_t Size,
+ void (*Callback)(void));
+void HW_UART_Transmit_IT(
+ hw_uart_id_t hw_uart_id,
+ uint8_t* pData,
+ uint16_t Size,
+ void (*Callback)(void));
+hw_status_t
+ HW_UART_Transmit(hw_uart_id_t hw_uart_id, uint8_t* p_data, uint16_t size, uint32_t timeout);
+hw_status_t HW_UART_Transmit_DMA(
+ hw_uart_id_t hw_uart_id,
+ uint8_t* p_data,
+ uint16_t size,
+ void (*Callback)(void));
+void HW_UART_Interrupt_Handler(hw_uart_id_t hw_uart_id);
+void HW_UART_DMA_Interrupt_Handler(hw_uart_id_t hw_uart_id);
#ifdef __cplusplus
}
diff --git a/firmware/targets/f7/ble_glue/hw_ipcc.c b/firmware/targets/f7/ble_glue/hw_ipcc.c
new file mode 100644
index 00000000..ab404327
--- /dev/null
+++ b/firmware/targets/f7/ble_glue/hw_ipcc.c
@@ -0,0 +1,597 @@
+/**
+ ******************************************************************************
+ * File Name : Target/hw_ipcc.c
+ * Description : Hardware IPCC source file for STM32WPAN Middleware.
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "app_common.h"
+#include "mbox_def.h"
+
+/* Global variables ---------------------------------------------------------*/
+/* Private defines -----------------------------------------------------------*/
+#define HW_IPCC_TX_PENDING(channel) \
+ (!(LL_C1_IPCC_IsActiveFlag_CHx(IPCC, channel))) && (((~(IPCC->C1MR)) & (channel << 16U)))
+#define HW_IPCC_RX_PENDING(channel) \
+ (LL_C2_IPCC_IsActiveFlag_CHx(IPCC, channel)) && (((~(IPCC->C1MR)) & (channel << 0U)))
+
+/* Private macros ------------------------------------------------------------*/
+/* Private typedef -----------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+static void (*FreeBufCb)(void);
+
+/* Private function prototypes -----------------------------------------------*/
+static void HW_IPCC_BLE_EvtHandler(void);
+static void HW_IPCC_BLE_AclDataEvtHandler(void);
+static void HW_IPCC_MM_FreeBufHandler(void);
+static void HW_IPCC_SYS_CmdEvtHandler(void);
+static void HW_IPCC_SYS_EvtHandler(void);
+static void HW_IPCC_TRACES_EvtHandler(void);
+
+#ifdef THREAD_WB
+static void HW_IPCC_OT_CmdEvtHandler(void);
+static void HW_IPCC_THREAD_NotEvtHandler(void);
+static void HW_IPCC_THREAD_CliNotEvtHandler(void);
+#endif
+
+#ifdef LLD_TESTS_WB
+static void HW_IPCC_LLDTESTS_ReceiveCliRspHandler(void);
+static void HW_IPCC_LLDTESTS_ReceiveM0CmdHandler(void);
+#endif
+#ifdef LLD_BLE_WB
+/*static void HW_IPCC_LLD_BLE_ReceiveCliRspHandler( void );*/
+static void HW_IPCC_LLD_BLE_ReceiveRspHandler(void);
+static void HW_IPCC_LLD_BLE_ReceiveM0CmdHandler(void);
+#endif
+
+#ifdef MAC_802_15_4_WB
+static void HW_IPCC_MAC_802_15_4_CmdEvtHandler(void);
+static void HW_IPCC_MAC_802_15_4_NotEvtHandler(void);
+#endif
+
+#ifdef ZIGBEE_WB
+static void HW_IPCC_ZIGBEE_CmdEvtHandler(void);
+static void HW_IPCC_ZIGBEE_StackNotifEvtHandler(void);
+static void HW_IPCC_ZIGBEE_StackM0RequestHandler(void);
+#endif
+
+/* Public function definition -----------------------------------------------*/
+
+/******************************************************************************
+ * INTERRUPT HANDLER
+ ******************************************************************************/
+void HW_IPCC_Rx_Handler(void) {
+ if(HW_IPCC_RX_PENDING(HW_IPCC_SYSTEM_EVENT_CHANNEL)) {
+ HW_IPCC_SYS_EvtHandler();
+ }
+#ifdef MAC_802_15_4_WB
+ else if(HW_IPCC_RX_PENDING(HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL)) {
+ HW_IPCC_MAC_802_15_4_NotEvtHandler();
+ }
+#endif /* MAC_802_15_4_WB */
+#ifdef THREAD_WB
+ else if(HW_IPCC_RX_PENDING(HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL)) {
+ HW_IPCC_THREAD_NotEvtHandler();
+ } else if(HW_IPCC_RX_PENDING(HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL)) {
+ HW_IPCC_THREAD_CliNotEvtHandler();
+ }
+#endif /* THREAD_WB */
+#ifdef LLD_TESTS_WB
+ else if(HW_IPCC_RX_PENDING(HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL)) {
+ HW_IPCC_LLDTESTS_ReceiveCliRspHandler();
+ } else if(HW_IPCC_RX_PENDING(HW_IPCC_LLDTESTS_M0_CMD_CHANNEL)) {
+ HW_IPCC_LLDTESTS_ReceiveM0CmdHandler();
+ }
+#endif /* LLD_TESTS_WB */
+#ifdef LLD_BLE_WB
+ else if(HW_IPCC_RX_PENDING(HW_IPCC_LLD_BLE_RSP_CHANNEL)) {
+ HW_IPCC_LLD_BLE_ReceiveRspHandler();
+ } else if(HW_IPCC_RX_PENDING(HW_IPCC_LLD_BLE_M0_CMD_CHANNEL)) {
+ HW_IPCC_LLD_BLE_ReceiveM0CmdHandler();
+ }
+#endif /* LLD_TESTS_WB */
+#ifdef ZIGBEE_WB
+ else if(HW_IPCC_RX_PENDING(HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL)) {
+ HW_IPCC_ZIGBEE_StackNotifEvtHandler();
+ } else if(HW_IPCC_RX_PENDING(HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL)) {
+ HW_IPCC_ZIGBEE_StackM0RequestHandler();
+ }
+#endif /* ZIGBEE_WB */
+ else if(HW_IPCC_RX_PENDING(HW_IPCC_BLE_EVENT_CHANNEL)) {
+ HW_IPCC_BLE_EvtHandler();
+ } else if(HW_IPCC_RX_PENDING(HW_IPCC_TRACES_CHANNEL)) {
+ HW_IPCC_TRACES_EvtHandler();
+ }
+
+ return;
+}
+
+void HW_IPCC_Tx_Handler(void) {
+ if(HW_IPCC_TX_PENDING(HW_IPCC_SYSTEM_CMD_RSP_CHANNEL)) {
+ HW_IPCC_SYS_CmdEvtHandler();
+ }
+#ifdef MAC_802_15_4_WB
+ else if(HW_IPCC_TX_PENDING(HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL)) {
+ HW_IPCC_MAC_802_15_4_CmdEvtHandler();
+ }
+#endif /* MAC_802_15_4_WB */
+#ifdef THREAD_WB
+ else if(HW_IPCC_TX_PENDING(HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL)) {
+ HW_IPCC_OT_CmdEvtHandler();
+ }
+#endif /* THREAD_WB */
+#ifdef LLD_TESTS_WB
+// No TX handler for LLD tests
+#endif /* LLD_TESTS_WB */
+#ifdef ZIGBEE_WB
+ if(HW_IPCC_TX_PENDING(HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL)) {
+ HW_IPCC_ZIGBEE_CmdEvtHandler();
+ }
+#endif /* ZIGBEE_WB */
+ else if(HW_IPCC_TX_PENDING(HW_IPCC_SYSTEM_CMD_RSP_CHANNEL)) {
+ HW_IPCC_SYS_CmdEvtHandler();
+ } else if(HW_IPCC_TX_PENDING(HW_IPCC_MM_RELEASE_BUFFER_CHANNEL)) {
+ HW_IPCC_MM_FreeBufHandler();
+ } else if(HW_IPCC_TX_PENDING(HW_IPCC_HCI_ACL_DATA_CHANNEL)) {
+ HW_IPCC_BLE_AclDataEvtHandler();
+ }
+
+ return;
+}
+/******************************************************************************
+ * GENERAL
+ ******************************************************************************/
+void HW_IPCC_Enable(void) {
+ /**
+ * Such as IPCC IP available to the CPU2, it is required to keep the IPCC clock running
+ when FUS is running on CPU2 and CPU1 enters deep sleep mode
+ */
+ LL_C2_AHB3_GRP1_EnableClock(LL_C2_AHB3_GRP1_PERIPH_IPCC);
+
+ /**
+ * When the device is out of standby, it is required to use the EXTI mechanism to wakeup CPU2
+ */
+ LL_C2_EXTI_EnableEvent_32_63(LL_EXTI_LINE_41);
+ LL_EXTI_EnableRisingTrig_32_63(LL_EXTI_LINE_41);
+
+ /**
+ * In case the SBSFU is implemented, it may have already set the C2BOOT bit to startup the CPU2.
+ * In that case, to keep the mechanism transparent to the user application, it shall call the system command
+ * SHCI_C2_Reinit( ) before jumping to the application.
+ * When the CPU2 receives that command, it waits for its event input to be set to restart the CPU2 firmware.
+ * This is required because once C2BOOT has been set once, a clear/set on C2BOOT has no effect.
+ * When SHCI_C2_Reinit( ) is not called, generating an event to the CPU2 does not have any effect
+ * So, by default, the application shall both set the event flag and set the C2BOOT bit.
+ */
+ __SEV(); /* Set the internal event flag and send an event to the CPU2 */
+ __WFE(); /* Clear the internal event flag */
+ LL_PWR_EnableBootC2();
+
+ return;
+}
+
+void HW_IPCC_Init(void) {
+ LL_AHB3_GRP1_EnableClock(LL_AHB3_GRP1_PERIPH_IPCC);
+
+ LL_C1_IPCC_EnableIT_RXO(IPCC);
+ LL_C1_IPCC_EnableIT_TXF(IPCC);
+
+ HAL_NVIC_SetPriority(IPCC_C1_RX_IRQn, 6, 0);
+ HAL_NVIC_EnableIRQ(IPCC_C1_RX_IRQn);
+ HAL_NVIC_SetPriority(IPCC_C1_TX_IRQn, 6, 0);
+ HAL_NVIC_EnableIRQ(IPCC_C1_TX_IRQn);
+
+ return;
+}
+
+/******************************************************************************
+ * BLE
+ ******************************************************************************/
+void HW_IPCC_BLE_Init(void) {
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_BLE_EVENT_CHANNEL);
+
+ return;
+}
+
+void HW_IPCC_BLE_SendCmd(void) {
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_BLE_CMD_CHANNEL);
+
+ return;
+}
+
+static void HW_IPCC_BLE_EvtHandler(void) {
+ HW_IPCC_BLE_RxEvtNot();
+
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_BLE_EVENT_CHANNEL);
+
+ return;
+}
+
+void HW_IPCC_BLE_SendAclData(void) {
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL);
+ LL_C1_IPCC_EnableTransmitChannel(IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL);
+
+ return;
+}
+
+static void HW_IPCC_BLE_AclDataEvtHandler(void) {
+ LL_C1_IPCC_DisableTransmitChannel(IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL);
+
+ HW_IPCC_BLE_AclDataAckNot();
+
+ return;
+}
+
+__weak void HW_IPCC_BLE_AclDataAckNot(void){};
+__weak void HW_IPCC_BLE_RxEvtNot(void){};
+
+/******************************************************************************
+ * SYSTEM
+ ******************************************************************************/
+void HW_IPCC_SYS_Init(void) {
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_SYSTEM_EVENT_CHANNEL);
+
+ return;
+}
+
+void HW_IPCC_SYS_SendCmd(void) {
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL);
+ LL_C1_IPCC_EnableTransmitChannel(IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL);
+
+ return;
+}
+
+static void HW_IPCC_SYS_CmdEvtHandler(void) {
+ LL_C1_IPCC_DisableTransmitChannel(IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL);
+
+ HW_IPCC_SYS_CmdEvtNot();
+
+ return;
+}
+
+static void HW_IPCC_SYS_EvtHandler(void) {
+ HW_IPCC_SYS_EvtNot();
+
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_SYSTEM_EVENT_CHANNEL);
+
+ return;
+}
+
+__weak void HW_IPCC_SYS_CmdEvtNot(void){};
+__weak void HW_IPCC_SYS_EvtNot(void){};
+
+/******************************************************************************
+ * MAC 802.15.4
+ ******************************************************************************/
+#ifdef MAC_802_15_4_WB
+void HW_IPCC_MAC_802_15_4_Init(void) {
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL);
+
+ return;
+}
+
+void HW_IPCC_MAC_802_15_4_SendCmd(void) {
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL);
+ LL_C1_IPCC_EnableTransmitChannel(IPCC, HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL);
+
+ return;
+}
+
+void HW_IPCC_MAC_802_15_4_SendAck(void) {
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL);
+
+ return;
+}
+
+static void HW_IPCC_MAC_802_15_4_CmdEvtHandler(void) {
+ LL_C1_IPCC_DisableTransmitChannel(IPCC, HW_IPCC_MAC_802_15_4_CMD_RSP_CHANNEL);
+
+ HW_IPCC_MAC_802_15_4_CmdEvtNot();
+
+ return;
+}
+
+static void HW_IPCC_MAC_802_15_4_NotEvtHandler(void) {
+ LL_C1_IPCC_DisableReceiveChannel(IPCC, HW_IPCC_MAC_802_15_4_NOTIFICATION_ACK_CHANNEL);
+
+ HW_IPCC_MAC_802_15_4_EvtNot();
+
+ return;
+}
+__weak void HW_IPCC_MAC_802_15_4_CmdEvtNot(void){};
+__weak void HW_IPCC_MAC_802_15_4_EvtNot(void){};
+#endif
+
+/******************************************************************************
+ * THREAD
+ ******************************************************************************/
+#ifdef THREAD_WB
+void HW_IPCC_THREAD_Init(void) {
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL);
+
+ return;
+}
+
+void HW_IPCC_OT_SendCmd(void) {
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL);
+ LL_C1_IPCC_EnableTransmitChannel(IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL);
+
+ return;
+}
+
+void HW_IPCC_CLI_SendCmd(void) {
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_THREAD_CLI_CMD_CHANNEL);
+
+ return;
+}
+
+void HW_IPCC_THREAD_SendAck(void) {
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL);
+
+ return;
+}
+
+void HW_IPCC_THREAD_CliSendAck(void) {
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL);
+
+ return;
+}
+
+static void HW_IPCC_OT_CmdEvtHandler(void) {
+ LL_C1_IPCC_DisableTransmitChannel(IPCC, HW_IPCC_THREAD_OT_CMD_RSP_CHANNEL);
+
+ HW_IPCC_OT_CmdEvtNot();
+
+ return;
+}
+
+static void HW_IPCC_THREAD_NotEvtHandler(void) {
+ LL_C1_IPCC_DisableReceiveChannel(IPCC, HW_IPCC_THREAD_NOTIFICATION_ACK_CHANNEL);
+
+ HW_IPCC_THREAD_EvtNot();
+
+ return;
+}
+
+static void HW_IPCC_THREAD_CliNotEvtHandler(void) {
+ LL_C1_IPCC_DisableReceiveChannel(IPCC, HW_IPCC_THREAD_CLI_NOTIFICATION_ACK_CHANNEL);
+
+ HW_IPCC_THREAD_CliEvtNot();
+
+ return;
+}
+
+__weak void HW_IPCC_OT_CmdEvtNot(void){};
+__weak void HW_IPCC_CLI_CmdEvtNot(void){};
+__weak void HW_IPCC_THREAD_EvtNot(void){};
+
+#endif /* THREAD_WB */
+
+/******************************************************************************
+ * LLD TESTS
+ ******************************************************************************/
+#ifdef LLD_TESTS_WB
+void HW_IPCC_LLDTESTS_Init(void) {
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL);
+ return;
+}
+
+void HW_IPCC_LLDTESTS_SendCliCmd(void) {
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_LLDTESTS_CLI_CMD_CHANNEL);
+ return;
+}
+
+static void HW_IPCC_LLDTESTS_ReceiveCliRspHandler(void) {
+ LL_C1_IPCC_DisableReceiveChannel(IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL);
+ HW_IPCC_LLDTESTS_ReceiveCliRsp();
+ return;
+}
+
+void HW_IPCC_LLDTESTS_SendCliRspAck(void) {
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_LLDTESTS_CLI_RSP_CHANNEL);
+ return;
+}
+
+static void HW_IPCC_LLDTESTS_ReceiveM0CmdHandler(void) {
+ LL_C1_IPCC_DisableReceiveChannel(IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL);
+ HW_IPCC_LLDTESTS_ReceiveM0Cmd();
+ return;
+}
+
+void HW_IPCC_LLDTESTS_SendM0CmdAck(void) {
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_LLDTESTS_M0_CMD_CHANNEL);
+ return;
+}
+__weak void HW_IPCC_LLDTESTS_ReceiveCliRsp(void){};
+__weak void HW_IPCC_LLDTESTS_ReceiveM0Cmd(void){};
+#endif /* LLD_TESTS_WB */
+
+/******************************************************************************
+ * LLD BLE
+ ******************************************************************************/
+#ifdef LLD_BLE_WB
+void HW_IPCC_LLD_BLE_Init(void) {
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL);
+ return;
+}
+
+void HW_IPCC_LLD_BLE_SendCliCmd(void) {
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_LLD_BLE_CLI_CMD_CHANNEL);
+ return;
+}
+
+/*static void HW_IPCC_LLD_BLE_ReceiveCliRspHandler( void )
+{
+ LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_CLI_RSP_CHANNEL );
+ HW_IPCC_LLD_BLE_ReceiveCliRsp();
+ return;
+}*/
+
+void HW_IPCC_LLD_BLE_SendCliRspAck(void) {
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_LLD_BLE_CLI_RSP_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_LLD_BLE_CLI_RSP_CHANNEL);
+ return;
+}
+
+static void HW_IPCC_LLD_BLE_ReceiveM0CmdHandler(void) {
+ //LL_C1_IPCC_DisableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL );
+ HW_IPCC_LLD_BLE_ReceiveM0Cmd();
+ return;
+}
+
+void HW_IPCC_LLD_BLE_SendM0CmdAck(void) {
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL);
+ //LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_LLD_BLE_M0_CMD_CHANNEL );
+ return;
+}
+__weak void HW_IPCC_LLD_BLE_ReceiveCliRsp(void){};
+__weak void HW_IPCC_LLD_BLE_ReceiveM0Cmd(void){};
+
+/* Transparent Mode */
+void HW_IPCC_LLD_BLE_SendCmd(void) {
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_LLD_BLE_CMD_CHANNEL);
+ return;
+}
+
+static void HW_IPCC_LLD_BLE_ReceiveRspHandler(void) {
+ LL_C1_IPCC_DisableReceiveChannel(IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL);
+ HW_IPCC_LLD_BLE_ReceiveRsp();
+ return;
+}
+
+void HW_IPCC_LLD_BLE_SendRspAck(void) {
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_LLD_BLE_RSP_CHANNEL);
+ return;
+}
+
+#endif /* LLD_BLE_WB */
+
+/******************************************************************************
+ * ZIGBEE
+ ******************************************************************************/
+#ifdef ZIGBEE_WB
+void HW_IPCC_ZIGBEE_Init(void) {
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL);
+
+ return;
+}
+
+void HW_IPCC_ZIGBEE_SendM4RequestToM0(void) {
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL);
+ LL_C1_IPCC_EnableTransmitChannel(IPCC, HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL);
+
+ return;
+}
+
+void HW_IPCC_ZIGBEE_SendM4AckToM0Notify(void) {
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL);
+
+ return;
+}
+
+static void HW_IPCC_ZIGBEE_CmdEvtHandler(void) {
+ LL_C1_IPCC_DisableTransmitChannel(IPCC, HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL);
+
+ HW_IPCC_ZIGBEE_RecvAppliAckFromM0();
+
+ return;
+}
+
+static void HW_IPCC_ZIGBEE_StackNotifEvtHandler(void) {
+ LL_C1_IPCC_DisableReceiveChannel(IPCC, HW_IPCC_ZIGBEE_APPLI_NOTIF_ACK_CHANNEL);
+
+ HW_IPCC_ZIGBEE_RecvM0NotifyToM4();
+
+ return;
+}
+
+static void HW_IPCC_ZIGBEE_StackM0RequestHandler(void) {
+ LL_C1_IPCC_DisableReceiveChannel(IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL);
+
+ HW_IPCC_ZIGBEE_RecvM0RequestToM4();
+
+ return;
+}
+
+void HW_IPCC_ZIGBEE_SendM4AckToM0Request(void) {
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL);
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL);
+
+ return;
+}
+
+__weak void HW_IPCC_ZIGBEE_RecvAppliAckFromM0(void){};
+__weak void HW_IPCC_ZIGBEE_RecvM0NotifyToM4(void){};
+__weak void HW_IPCC_ZIGBEE_RecvM0RequestToM4(void){};
+#endif /* ZIGBEE_WB */
+
+/******************************************************************************
+ * MEMORY MANAGER
+ ******************************************************************************/
+void HW_IPCC_MM_SendFreeBuf(void (*cb)(void)) {
+ if(LL_C1_IPCC_IsActiveFlag_CHx(IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL)) {
+ FreeBufCb = cb;
+ LL_C1_IPCC_EnableTransmitChannel(IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL);
+ } else {
+ cb();
+
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL);
+ }
+
+ return;
+}
+
+static void HW_IPCC_MM_FreeBufHandler(void) {
+ LL_C1_IPCC_DisableTransmitChannel(IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL);
+
+ FreeBufCb();
+
+ LL_C1_IPCC_SetFlag_CHx(IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL);
+
+ return;
+}
+
+/******************************************************************************
+ * TRACES
+ ******************************************************************************/
+void HW_IPCC_TRACES_Init(void) {
+ LL_C1_IPCC_EnableReceiveChannel(IPCC, HW_IPCC_TRACES_CHANNEL);
+
+ return;
+}
+
+static void HW_IPCC_TRACES_EvtHandler(void) {
+ HW_IPCC_TRACES_EvtNot();
+
+ LL_C1_IPCC_ClearFlag_CHx(IPCC, HW_IPCC_TRACES_CHANNEL);
+
+ return;
+}
+
+__weak void HW_IPCC_TRACES_EvtNot(void){};
+
+/******************* (C) COPYRIGHT 2019 STMicroelectronics *****END OF FILE****/
diff --git a/firmware/targets/f7/ble-glue/serial_service.c b/firmware/targets/f7/ble_glue/serial_service.c
index ae887ceb..4acba7f0 100644
--- a/firmware/targets/f7/ble-glue/serial_service.c
+++ b/firmware/targets/f7/ble_glue/serial_service.c
@@ -20,14 +20,18 @@ typedef struct {
static SerialSvc* serial_svc = NULL;
-static const uint8_t service_uuid[] = {0x00, 0x00, 0xfe, 0x60, 0xcc, 0x7a, 0x48, 0x2a, 0x98, 0x4a, 0x7f, 0x2e, 0xd5, 0xb3, 0xe5, 0x8f};
-static const uint8_t char_tx_uuid[] = {0x00, 0x00, 0xfe, 0x61, 0x8e, 0x22, 0x45, 0x41, 0x9d, 0x4c, 0x21, 0xed, 0xae, 0x82, 0xed, 0x19};
-static const uint8_t char_rx_uuid[] = {0x00, 0x00, 0xfe, 0x62, 0x8e, 0x22, 0x45, 0x41, 0x9d, 0x4c, 0x21, 0xed, 0xae, 0x82, 0xed, 0x19};
-static const uint8_t flow_ctrl_uuid[] = {0x00, 0x00, 0xfe, 0x63, 0x8e, 0x22, 0x45, 0x41, 0x9d, 0x4c, 0x21, 0xed, 0xae, 0x82, 0xed, 0x19};
-
-static SVCCTL_EvtAckStatus_t serial_svc_event_handler(void *event) {
+static const uint8_t service_uuid[] =
+ {0x00, 0x00, 0xfe, 0x60, 0xcc, 0x7a, 0x48, 0x2a, 0x98, 0x4a, 0x7f, 0x2e, 0xd5, 0xb3, 0xe5, 0x8f};
+static const uint8_t char_tx_uuid[] =
+ {0x00, 0x00, 0xfe, 0x61, 0x8e, 0x22, 0x45, 0x41, 0x9d, 0x4c, 0x21, 0xed, 0xae, 0x82, 0xed, 0x19};
+static const uint8_t char_rx_uuid[] =
+ {0x00, 0x00, 0xfe, 0x62, 0x8e, 0x22, 0x45, 0x41, 0x9d, 0x4c, 0x21, 0xed, 0xae, 0x82, 0xed, 0x19};
+static const uint8_t flow_ctrl_uuid[] =
+ {0x00, 0x00, 0xfe, 0x63, 0x8e, 0x22, 0x45, 0x41, 0x9d, 0x4c, 0x21, 0xed, 0xae, 0x82, 0xed, 0x19};
+
+static SVCCTL_EvtAckStatus_t serial_svc_event_handler(void* event) {
SVCCTL_EvtAckStatus_t ret = SVCCTL_EvtNotAck;
- hci_event_pckt* event_pckt = (hci_event_pckt *)(((hci_uart_pckt*)event)->data);
+ hci_event_pckt* event_pckt = (hci_event_pckt*)(((hci_uart_pckt*)event)->data);
evt_blecore_aci* blecore_evt = (evt_blecore_aci*)event_pckt->data;
aci_gatt_attribute_modified_event_rp0* attribute_modified;
if(event_pckt->evt == HCI_VENDOR_SPECIFIC_DEBUG_EVT_CODE) {
@@ -43,19 +47,20 @@ static SVCCTL_EvtAckStatus_t serial_svc_event_handler(void *event) {
furi_check(osMutexAcquire(serial_svc->buff_size_mtx, osWaitForever) == osOK);
if(attribute_modified->Attr_Data_Length > serial_svc->bytes_ready_to_receive) {
FURI_LOG_W(
- TAG, "Received %d, while was ready to receive %d bytes. Can lead to buffer overflow!",
- attribute_modified->Attr_Data_Length, serial_svc->bytes_ready_to_receive);
+ TAG,
+ "Received %d, while was ready to receive %d bytes. Can lead to buffer overflow!",
+ attribute_modified->Attr_Data_Length,
+ serial_svc->bytes_ready_to_receive);
}
- serial_svc->bytes_ready_to_receive -= MIN(serial_svc->bytes_ready_to_receive, attribute_modified->Attr_Data_Length);
+ serial_svc->bytes_ready_to_receive -= MIN(
+ serial_svc->bytes_ready_to_receive, attribute_modified->Attr_Data_Length);
SerialServiceEvent event = {
.event = SerialServiceEventTypeDataReceived,
.data = {
.buffer = attribute_modified->Attr_Data,
.size = attribute_modified->Attr_Data_Length,
- }
- };
- uint32_t buff_free_size =
- serial_svc->callback(event, serial_svc->context);
+ }};
+ uint32_t buff_free_size = serial_svc->callback(event, serial_svc->context);
FURI_LOG_D(TAG, "Available buff size: %d", buff_free_size);
furi_check(osMutexRelease(serial_svc->buff_size_mtx) == osOK);
}
@@ -82,45 +87,55 @@ void serial_svc_start() {
SVCCTL_RegisterSvcHandler(serial_svc_event_handler);
// Add service
- status = aci_gatt_add_service(UUID_TYPE_128, (Service_UUID_t *)service_uuid, PRIMARY_SERVICE, 10, &serial_svc->svc_handle);
+ status = aci_gatt_add_service(
+ UUID_TYPE_128, (Service_UUID_t*)service_uuid, PRIMARY_SERVICE, 10, &serial_svc->svc_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add Serial service: %d", status);
}
// Add RX characteristics
- status = aci_gatt_add_char(serial_svc->svc_handle, UUID_TYPE_128, (const Char_UUID_t*)char_rx_uuid,
- SERIAL_SVC_DATA_LEN_MAX,
- CHAR_PROP_WRITE_WITHOUT_RESP | CHAR_PROP_WRITE | CHAR_PROP_READ,
- ATTR_PERMISSION_AUTHEN_READ | ATTR_PERMISSION_AUTHEN_WRITE,
- GATT_NOTIFY_ATTRIBUTE_WRITE,
- 10,
- CHAR_VALUE_LEN_VARIABLE,
- &serial_svc->rx_char_handle);
+ status = aci_gatt_add_char(
+ serial_svc->svc_handle,
+ UUID_TYPE_128,
+ (const Char_UUID_t*)char_rx_uuid,
+ SERIAL_SVC_DATA_LEN_MAX,
+ CHAR_PROP_WRITE_WITHOUT_RESP | CHAR_PROP_WRITE | CHAR_PROP_READ,
+ ATTR_PERMISSION_AUTHEN_READ | ATTR_PERMISSION_AUTHEN_WRITE,
+ GATT_NOTIFY_ATTRIBUTE_WRITE,
+ 10,
+ CHAR_VALUE_LEN_VARIABLE,
+ &serial_svc->rx_char_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add RX characteristic: %d", status);
}
// Add TX characteristic
- status = aci_gatt_add_char(serial_svc->svc_handle, UUID_TYPE_128, (const Char_UUID_t*)char_tx_uuid,
- SERIAL_SVC_DATA_LEN_MAX,
- CHAR_PROP_READ | CHAR_PROP_INDICATE,
- ATTR_PERMISSION_AUTHEN_READ,
- GATT_DONT_NOTIFY_EVENTS,
- 10,
- CHAR_VALUE_LEN_VARIABLE,
- &serial_svc->tx_char_handle);
+ status = aci_gatt_add_char(
+ serial_svc->svc_handle,
+ UUID_TYPE_128,
+ (const Char_UUID_t*)char_tx_uuid,
+ SERIAL_SVC_DATA_LEN_MAX,
+ CHAR_PROP_READ | CHAR_PROP_INDICATE,
+ ATTR_PERMISSION_AUTHEN_READ,
+ GATT_DONT_NOTIFY_EVENTS,
+ 10,
+ CHAR_VALUE_LEN_VARIABLE,
+ &serial_svc->tx_char_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add TX characteristic: %d", status);
}
// Add Flow Control characteristic
- status = aci_gatt_add_char(serial_svc->svc_handle, UUID_TYPE_128, (const Char_UUID_t*)flow_ctrl_uuid,
- sizeof(uint32_t),
- CHAR_PROP_READ | CHAR_PROP_NOTIFY,
- ATTR_PERMISSION_AUTHEN_READ,
- GATT_DONT_NOTIFY_EVENTS,
- 10,
- CHAR_VALUE_LEN_CONSTANT,
- &serial_svc->flow_ctrl_char_handle);
+ status = aci_gatt_add_char(
+ serial_svc->svc_handle,
+ UUID_TYPE_128,
+ (const Char_UUID_t*)flow_ctrl_uuid,
+ sizeof(uint32_t),
+ CHAR_PROP_READ | CHAR_PROP_NOTIFY,
+ ATTR_PERMISSION_AUTHEN_READ,
+ GATT_DONT_NOTIFY_EVENTS,
+ 10,
+ CHAR_VALUE_LEN_CONSTANT,
+ &serial_svc->flow_ctrl_char_handle);
if(status) {
FURI_LOG_E(TAG, "Failed to add Flow Control characteristic: %d", status);
}
@@ -128,14 +143,22 @@ void serial_svc_start() {
serial_svc->buff_size_mtx = osMutexNew(NULL);
}
-void serial_svc_set_callbacks(uint16_t buff_size, SerialServiceEventCallback callback, void* context) {
+void serial_svc_set_callbacks(
+ uint16_t buff_size,
+ SerialServiceEventCallback callback,
+ void* context) {
furi_assert(serial_svc);
serial_svc->callback = callback;
serial_svc->context = context;
serial_svc->buff_size = buff_size;
serial_svc->bytes_ready_to_receive = buff_size;
uint32_t buff_size_reversed = REVERSE_BYTES_U32(serial_svc->buff_size);
- aci_gatt_update_char_value(serial_svc->svc_handle, serial_svc->flow_ctrl_char_handle, 0, sizeof(uint32_t), (uint8_t*)&buff_size_reversed);
+ aci_gatt_update_char_value(
+ serial_svc->svc_handle,
+ serial_svc->flow_ctrl_char_handle,
+ 0,
+ sizeof(uint32_t),
+ (uint8_t*)&buff_size_reversed);
}
void serial_svc_notify_buffer_is_empty() {
@@ -147,7 +170,12 @@ void serial_svc_notify_buffer_is_empty() {
FURI_LOG_D(TAG, "Buffer is empty. Notifying client");
serial_svc->bytes_ready_to_receive = serial_svc->buff_size;
uint32_t buff_size_reversed = REVERSE_BYTES_U32(serial_svc->buff_size);
- aci_gatt_update_char_value(serial_svc->svc_handle, serial_svc->flow_ctrl_char_handle, 0, sizeof(uint32_t), (uint8_t*)&buff_size_reversed);
+ aci_gatt_update_char_value(
+ serial_svc->svc_handle,
+ serial_svc->flow_ctrl_char_handle,
+ 0,
+ sizeof(uint32_t),
+ (uint8_t*)&buff_size_reversed);
}
furi_check(osMutexRelease(serial_svc->buff_size_mtx) == osOK);
}
@@ -194,15 +222,15 @@ bool serial_svc_update_tx(uint8_t* data, uint16_t data_len) {
uint16_t value_offset = data_len - remained;
remained -= value_len;
- tBleStatus result = aci_gatt_update_char_value_ext(
- 0,
- serial_svc->svc_handle,
- serial_svc->tx_char_handle,
- remained ? 0x00 : 0x02,
- data_len,
- value_offset,
- value_len,
- data + value_offset);
+ tBleStatus result = aci_gatt_update_char_value_ext(
+ 0,
+ serial_svc->svc_handle,
+ serial_svc->tx_char_handle,
+ remained ? 0x00 : 0x02,
+ data_len,
+ value_offset,
+ value_len,
+ data + value_offset);
if(result) {
FURI_LOG_E(TAG, "Failed updating TX characteristic: %d", result);
diff --git a/firmware/targets/f6/ble-glue/serial_service.h b/firmware/targets/f7/ble_glue/serial_service.h
index 6e19f86d..a1e5bc1c 100644
--- a/firmware/targets/f6/ble-glue/serial_service.h
+++ b/firmware/targets/f7/ble_glue/serial_service.h
@@ -25,11 +25,14 @@ typedef struct {
SerialServiceData data;
} SerialServiceEvent;
-typedef uint16_t(*SerialServiceEventCallback)(SerialServiceEvent event, void* context);
+typedef uint16_t (*SerialServiceEventCallback)(SerialServiceEvent event, void* context);
void serial_svc_start();
-void serial_svc_set_callbacks(uint16_t buff_size, SerialServiceEventCallback callback, void* context);
+void serial_svc_set_callbacks(
+ uint16_t buff_size,
+ SerialServiceEventCallback callback,
+ void* context);
void serial_svc_notify_buffer_is_empty();
diff --git a/firmware/targets/f7/ble-glue/tl_dbg_conf.h b/firmware/targets/f7/ble_glue/tl_dbg_conf.h
index 842cba0e..1f09b7e4 100644
--- a/firmware/targets/f7/ble-glue/tl_dbg_conf.h
+++ b/firmware/targets/f7/ble_glue/tl_dbg_conf.h
@@ -30,54 +30,57 @@ extern "C" {
/* USER CODE BEGIN Tl_Conf */
/* Includes ------------------------------------------------------------------*/
-#include "app_conf.h" /* required as some configuration used in dbg_trace.h are set there */
+#include "app_conf.h" /* required as some configuration used in dbg_trace.h are set there */
#include "dbg_trace.h"
#include "hw_if.h"
-#include <furi-hal.h>
+#include <furi_hal.h>
/**
* Enable or Disable traces
* The raw data output is the hci binary packet format as specified by the BT specification *
*/
-#define TL_SHCI_CMD_DBG_EN 1 /* Reports System commands sent to CPU2 and the command response */
-#define TL_SHCI_CMD_DBG_RAW_EN 0 /* Reports raw data System commands sent to CPU2 and the command response */
-#define TL_SHCI_EVT_DBG_EN 1 /* Reports System Asynchronous Events received from CPU2 */
-#define TL_SHCI_EVT_DBG_RAW_EN 0 /* Reports raw data System Asynchronous Events received from CPU2 */
+#define TL_SHCI_CMD_DBG_EN 1 /* Reports System commands sent to CPU2 and the command response */
+#define TL_SHCI_CMD_DBG_RAW_EN \
+ 0 /* Reports raw data System commands sent to CPU2 and the command response */
+#define TL_SHCI_EVT_DBG_EN 1 /* Reports System Asynchronous Events received from CPU2 */
+#define TL_SHCI_EVT_DBG_RAW_EN \
+ 0 /* Reports raw data System Asynchronous Events received from CPU2 */
-#define TL_HCI_CMD_DBG_EN 1 /* Reports BLE command sent to CPU2 and the command response */
-#define TL_HCI_CMD_DBG_RAW_EN 0 /* Reports raw data BLE command sent to CPU2 and the command response */
-#define TL_HCI_EVT_DBG_EN 1 /* Reports BLE Asynchronous Events received from CPU2 */
-#define TL_HCI_EVT_DBG_RAW_EN 0 /* Reports raw data BLE Asynchronous Events received from CPU2 */
+#define TL_HCI_CMD_DBG_EN 1 /* Reports BLE command sent to CPU2 and the command response */
+#define TL_HCI_CMD_DBG_RAW_EN \
+ 0 /* Reports raw data BLE command sent to CPU2 and the command response */
+#define TL_HCI_EVT_DBG_EN 1 /* Reports BLE Asynchronous Events received from CPU2 */
+#define TL_HCI_EVT_DBG_RAW_EN 0 /* Reports raw data BLE Asynchronous Events received from CPU2 */
-#define TL_MM_DBG_EN 1 /* Reports the informations of the buffer released to CPU2 */
+#define TL_MM_DBG_EN 1 /* Reports the informations of the buffer released to CPU2 */
/**
* System Transport Layer
*/
-#if (TL_SHCI_CMD_DBG_EN != 0)
-#define TL_SHCI_CMD_DBG_MSG PRINT_MESG_DBG
-#define TL_SHCI_CMD_DBG_BUF PRINT_LOG_BUFF_DBG
+#if(TL_SHCI_CMD_DBG_EN != 0)
+#define TL_SHCI_CMD_DBG_MSG PRINT_MESG_DBG
+#define TL_SHCI_CMD_DBG_BUF PRINT_LOG_BUFF_DBG
#else
#define TL_SHCI_CMD_DBG_MSG(...)
#define TL_SHCI_CMD_DBG_BUF(...)
#endif
-#if (TL_SHCI_CMD_DBG_RAW_EN != 0)
-#define TL_SHCI_CMD_DBG_RAW(_PDATA_, _SIZE_) furi_hal_console_tx_with_new_line(_PDATA_, _SIZE_)
+#if(TL_SHCI_CMD_DBG_RAW_EN != 0)
+#define TL_SHCI_CMD_DBG_RAW(_PDATA_, _SIZE_) furi_hal_console_tx_with_new_line(_PDATA_, _SIZE_)
#else
#define TL_SHCI_CMD_DBG_RAW(...)
#endif
-#if (TL_SHCI_EVT_DBG_EN != 0)
-#define TL_SHCI_EVT_DBG_MSG PRINT_MESG_DBG
-#define TL_SHCI_EVT_DBG_BUF PRINT_LOG_BUFF_DBG
+#if(TL_SHCI_EVT_DBG_EN != 0)
+#define TL_SHCI_EVT_DBG_MSG PRINT_MESG_DBG
+#define TL_SHCI_EVT_DBG_BUF PRINT_LOG_BUFF_DBG
#else
#define TL_SHCI_EVT_DBG_MSG(...)
#define TL_SHCI_EVT_DBG_BUF(...)
#endif
-#if (TL_SHCI_EVT_DBG_RAW_EN != 0)
-#define TL_SHCI_EVT_DBG_RAW(_PDATA_, _SIZE_) furi_hal_console_tx_with_new_line(_PDATA_, _SIZE_)
+#if(TL_SHCI_EVT_DBG_RAW_EN != 0)
+#define TL_SHCI_EVT_DBG_RAW(_PDATA_, _SIZE_) furi_hal_console_tx_with_new_line(_PDATA_, _SIZE_)
#else
#define TL_SHCI_EVT_DBG_RAW(...)
#endif
@@ -85,30 +88,30 @@ extern "C" {
/**
* BLE Transport Layer
*/
-#if (TL_HCI_CMD_DBG_EN != 0)
-#define TL_HCI_CMD_DBG_MSG PRINT_MESG_DBG
-#define TL_HCI_CMD_DBG_BUF PRINT_LOG_BUFF_DBG
+#if(TL_HCI_CMD_DBG_EN != 0)
+#define TL_HCI_CMD_DBG_MSG PRINT_MESG_DBG
+#define TL_HCI_CMD_DBG_BUF PRINT_LOG_BUFF_DBG
#else
#define TL_HCI_CMD_DBG_MSG(...)
#define TL_HCI_CMD_DBG_BUF(...)
#endif
-#if (TL_HCI_CMD_DBG_RAW_EN != 0)
-#define TL_HCI_CMD_DBG_RAW(_PDATA_, _SIZE_) furi_hal_console_tx_with_new_line(_PDATA_, _SIZE_)
+#if(TL_HCI_CMD_DBG_RAW_EN != 0)
+#define TL_HCI_CMD_DBG_RAW(_PDATA_, _SIZE_) furi_hal_console_tx_with_new_line(_PDATA_, _SIZE_)
#else
#define TL_HCI_CMD_DBG_RAW(...)
#endif
-#if (TL_HCI_EVT_DBG_EN != 0)
-#define TL_HCI_EVT_DBG_MSG PRINT_MESG_DBG
-#define TL_HCI_EVT_DBG_BUF PRINT_LOG_BUFF_DBG
+#if(TL_HCI_EVT_DBG_EN != 0)
+#define TL_HCI_EVT_DBG_MSG PRINT_MESG_DBG
+#define TL_HCI_EVT_DBG_BUF PRINT_LOG_BUFF_DBG
#else
#define TL_HCI_EVT_DBG_MSG(...)
#define TL_HCI_EVT_DBG_BUF(...)
#endif
-#if (TL_HCI_EVT_DBG_RAW_EN != 0)
-#define TL_HCI_EVT_DBG_RAW(_PDATA_, _SIZE_) furi_hal_console_tx_with_new_line(_PDATA_, _SIZE_)
+#if(TL_HCI_EVT_DBG_RAW_EN != 0)
+#define TL_HCI_EVT_DBG_RAW(_PDATA_, _SIZE_) furi_hal_console_tx_with_new_line(_PDATA_, _SIZE_)
#else
#define TL_HCI_EVT_DBG_RAW(...)
#endif
@@ -116,8 +119,8 @@ extern "C" {
/**
* Memory Manager - Released buffer tracing
*/
-#if (TL_MM_DBG_EN != 0)
-#define TL_MM_DBG_MSG PRINT_MESG_DBG
+#if(TL_MM_DBG_EN != 0)
+#define TL_MM_DBG_MSG PRINT_MESG_DBG
#else
#define TL_MM_DBG_MSG(...)
#endif
diff --git a/firmware/targets/f6/ble-glue/utilities_conf.h b/firmware/targets/f7/ble_glue/utilities_conf.h
index 92a5d07a..9143d4c0 100644
--- a/firmware/targets/f6/ble-glue/utilities_conf.h
+++ b/firmware/targets/f7/ble_glue/utilities_conf.h
@@ -33,31 +33,32 @@ extern "C" {
/******************************************************************************
* common
******************************************************************************/
-#define UTILS_ENTER_CRITICAL_SECTION( ) uint32_t primask_bit = __get_PRIMASK( );\
- __disable_irq( )
+#define UTILS_ENTER_CRITICAL_SECTION() \
+ uint32_t primask_bit = __get_PRIMASK(); \
+ __disable_irq()
-#define UTILS_EXIT_CRITICAL_SECTION( ) __set_PRIMASK( primask_bit )
+#define UTILS_EXIT_CRITICAL_SECTION() __set_PRIMASK(primask_bit)
-#define UTILS_MEMSET8( dest, value, size ) memset( dest, value, size);
+#define UTILS_MEMSET8(dest, value, size) memset(dest, value, size);
/******************************************************************************
* tiny low power manager
* (any macro that does not need to be modified can be removed)
******************************************************************************/
-#define UTIL_LPM_INIT_CRITICAL_SECTION( )
-#define UTIL_LPM_ENTER_CRITICAL_SECTION( ) UTILS_ENTER_CRITICAL_SECTION( )
-#define UTIL_LPM_EXIT_CRITICAL_SECTION( ) UTILS_EXIT_CRITICAL_SECTION( )
+#define UTIL_LPM_INIT_CRITICAL_SECTION()
+#define UTIL_LPM_ENTER_CRITICAL_SECTION() UTILS_ENTER_CRITICAL_SECTION()
+#define UTIL_LPM_EXIT_CRITICAL_SECTION() UTILS_EXIT_CRITICAL_SECTION()
/******************************************************************************
* sequencer
* (any macro that does not need to be modified can be removed)
******************************************************************************/
-#define UTIL_SEQ_INIT_CRITICAL_SECTION( )
-#define UTIL_SEQ_ENTER_CRITICAL_SECTION( ) UTILS_ENTER_CRITICAL_SECTION( )
-#define UTIL_SEQ_EXIT_CRITICAL_SECTION( ) UTILS_EXIT_CRITICAL_SECTION( )
-#define UTIL_SEQ_CONF_TASK_NBR (32)
-#define UTIL_SEQ_CONF_PRIO_NBR (2)
-#define UTIL_SEQ_MEMSET8( dest, value, size ) UTILS_MEMSET8( dest, value, size )
+#define UTIL_SEQ_INIT_CRITICAL_SECTION()
+#define UTIL_SEQ_ENTER_CRITICAL_SECTION() UTILS_ENTER_CRITICAL_SECTION()
+#define UTIL_SEQ_EXIT_CRITICAL_SECTION() UTILS_EXIT_CRITICAL_SECTION()
+#define UTIL_SEQ_CONF_TASK_NBR (32)
+#define UTIL_SEQ_CONF_PRIO_NBR (2)
+#define UTIL_SEQ_MEMSET8(dest, value, size) UTILS_MEMSET8(dest, value, size)
#ifdef __cplusplus
}
diff --git a/firmware/targets/f7/cube/Inc/FreeRTOSConfig.h b/firmware/targets/f7/cube/Inc/FreeRTOSConfig.h
index 8f955a03..47883e66 100644
--- a/firmware/targets/f7/cube/Inc/FreeRTOSConfig.h
+++ b/firmware/targets/f7/cube/Inc/FreeRTOSConfig.h
@@ -49,83 +49,83 @@
/* Ensure definitions are only used by the compiler, and not by the assembler. */
#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)
- #include <stdint.h>
- extern uint32_t SystemCoreClock;
- void xPortSysTickHandler(void);
+#include <stdint.h>
+extern uint32_t SystemCoreClock;
+void xPortSysTickHandler(void);
/* USER CODE BEGIN 0 */
- extern void configureTimerForRunTimeStats(void);
- extern unsigned long getRunTimeCounterValue(void);
+extern void configureTimerForRunTimeStats(void);
+extern unsigned long getRunTimeCounterValue(void);
/* USER CODE END 0 */
#endif
#ifndef CMSIS_device_header
#define CMSIS_device_header "stm32wbxx.h"
#endif /* CMSIS_device_header */
-#define configENABLE_FPU 1
-#define configENABLE_MPU 0
-
-#define configUSE_PREEMPTION 1
-#define configSUPPORT_STATIC_ALLOCATION 1
-#define configSUPPORT_DYNAMIC_ALLOCATION 1
-#define configUSE_IDLE_HOOK 1
-#define configUSE_TICK_HOOK 0
-#define configCPU_CLOCK_HZ ( SystemCoreClock )
-#define configTICK_RATE_HZ ((TickType_t)1000)
-#define configMAX_PRIORITIES ( 56 )
-#define configMINIMAL_STACK_SIZE ((uint16_t)128)
-#define configTOTAL_HEAP_SIZE ((size_t)40960)
-#define configMAX_TASK_NAME_LEN ( 16 )
-#define configGENERATE_RUN_TIME_STATS 1
-#define configUSE_TRACE_FACILITY 1
-#define configUSE_16_BIT_TICKS 0
-#define configUSE_MUTEXES 1
-#define configQUEUE_REGISTRY_SIZE 8
-#define configCHECK_FOR_STACK_OVERFLOW 1
-#define configUSE_RECURSIVE_MUTEXES 1
-#define configUSE_COUNTING_SEMAPHORES 1
-#define configENABLE_BACKWARD_COMPATIBILITY 0
-#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
-#define configUSE_TICKLESS_IDLE 2
-#define configRECORD_STACK_HIGH_ADDRESS 1
+#define configENABLE_FPU 1
+#define configENABLE_MPU 0
+
+#define configUSE_PREEMPTION 1
+#define configSUPPORT_STATIC_ALLOCATION 1
+#define configSUPPORT_DYNAMIC_ALLOCATION 1
+#define configUSE_IDLE_HOOK 1
+#define configUSE_TICK_HOOK 0
+#define configCPU_CLOCK_HZ (SystemCoreClock)
+#define configTICK_RATE_HZ ((TickType_t)1000)
+#define configMAX_PRIORITIES (56)
+#define configMINIMAL_STACK_SIZE ((uint16_t)128)
+#define configTOTAL_HEAP_SIZE ((size_t)40960)
+#define configMAX_TASK_NAME_LEN (16)
+#define configGENERATE_RUN_TIME_STATS 1
+#define configUSE_TRACE_FACILITY 1
+#define configUSE_16_BIT_TICKS 0
+#define configUSE_MUTEXES 1
+#define configQUEUE_REGISTRY_SIZE 8
+#define configCHECK_FOR_STACK_OVERFLOW 1
+#define configUSE_RECURSIVE_MUTEXES 1
+#define configUSE_COUNTING_SEMAPHORES 1
+#define configENABLE_BACKWARD_COMPATIBILITY 0
+#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
+#define configUSE_TICKLESS_IDLE 2
+#define configRECORD_STACK_HIGH_ADDRESS 1
/* USER CODE BEGIN MESSAGE_BUFFER_LENGTH_TYPE */
/* Defaults to size_t for backward compatibility, but can be changed
if lengths will always be less than the number of bytes in a size_t. */
-#define configMESSAGE_BUFFER_LENGTH_TYPE size_t
+#define configMESSAGE_BUFFER_LENGTH_TYPE size_t
/* USER CODE END MESSAGE_BUFFER_LENGTH_TYPE */
/* Co-routine definitions. */
-#define configUSE_CO_ROUTINES 0
-#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
+#define configUSE_CO_ROUTINES 0
+#define configMAX_CO_ROUTINE_PRIORITIES (2)
/* Software timer definitions. */
-#define configUSE_TIMERS 1
-#define configTIMER_TASK_PRIORITY ( 2 )
-#define configTIMER_QUEUE_LENGTH 10
-#define configTIMER_TASK_STACK_DEPTH 256
+#define configUSE_TIMERS 1
+#define configTIMER_TASK_PRIORITY (2)
+#define configTIMER_QUEUE_LENGTH 10
+#define configTIMER_TASK_STACK_DEPTH 256
/* CMSIS-RTOS V2 flags */
-#define configUSE_OS2_THREAD_SUSPEND_RESUME 1
-#define configUSE_OS2_THREAD_ENUMERATE 1
-#define configUSE_OS2_EVENTFLAGS_FROM_ISR 1
-#define configUSE_OS2_THREAD_FLAGS 1
-#define configUSE_OS2_TIMER 1
-#define configUSE_OS2_MUTEX 1
+#define configUSE_OS2_THREAD_SUSPEND_RESUME 1
+#define configUSE_OS2_THREAD_ENUMERATE 1
+#define configUSE_OS2_EVENTFLAGS_FROM_ISR 1
+#define configUSE_OS2_THREAD_FLAGS 1
+#define configUSE_OS2_TIMER 1
+#define configUSE_OS2_MUTEX 1
/* Set the following definitions to 1 to include the API function, or zero
to exclude the API function. */
-#define INCLUDE_vTaskPrioritySet 1
-#define INCLUDE_uxTaskPriorityGet 1
-#define INCLUDE_vTaskDelete 1
-#define INCLUDE_vTaskCleanUpResources 1
-#define INCLUDE_vTaskSuspend 1
-#define INCLUDE_vTaskDelayUntil 1
-#define INCLUDE_vTaskDelay 1
-#define INCLUDE_xTaskGetSchedulerState 1
-#define INCLUDE_xTimerPendFunctionCall 1
-#define INCLUDE_xQueueGetMutexHolder 1
-#define INCLUDE_uxTaskGetStackHighWaterMark 1
-#define INCLUDE_xTaskGetCurrentTaskHandle 1
-#define INCLUDE_eTaskGetState 1
+#define INCLUDE_vTaskPrioritySet 1
+#define INCLUDE_uxTaskPriorityGet 1
+#define INCLUDE_vTaskDelete 1
+#define INCLUDE_vTaskCleanUpResources 1
+#define INCLUDE_vTaskSuspend 1
+#define INCLUDE_vTaskDelayUntil 1
+#define INCLUDE_vTaskDelay 1
+#define INCLUDE_xTaskGetSchedulerState 1
+#define INCLUDE_xTimerPendFunctionCall 1
+#define INCLUDE_xQueueGetMutexHolder 1
+#define INCLUDE_uxTaskGetStackHighWaterMark 1
+#define INCLUDE_xTaskGetCurrentTaskHandle 1
+#define INCLUDE_eTaskGetState 1
/*
* The CMSIS-RTOS V2 FreeRTOS wrapper is dependent on the heap implementation used
@@ -135,15 +135,15 @@ to exclude the API function. */
/* Cortex-M specific definitions. */
#ifdef __NVIC_PRIO_BITS
- /* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */
- #define configPRIO_BITS __NVIC_PRIO_BITS
+/* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */
+#define configPRIO_BITS __NVIC_PRIO_BITS
#else
- #define configPRIO_BITS 4
+#define configPRIO_BITS 4
#endif
/* The lowest interrupt priority that can be used in a call to a "set priority"
function. */
-#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15
+#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15
/* The highest interrupt priority that can be used by any interrupt service
routine that makes calls to interrupt safe FreeRTOS API functions. DO NOT CALL
@@ -153,20 +153,27 @@ PRIORITY THAN THIS! (higher priorities are lower numeric values. */
/* Interrupt priorities used by the kernel port layer itself. These are generic
to all Cortex-M ports, and do not rely on any particular library functions. */
-#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
+#define configKERNEL_INTERRUPT_PRIORITY \
+ (configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
-#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
+#define configMAX_SYSCALL_INTERRUPT_PRIORITY \
+ (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))
/* Normal assert() semantics without relying on the provision of an assert.h
header file. */
/* USER CODE BEGIN 1 */
-#define configASSERT( x ) if ((x) == 0) {taskDISABLE_INTERRUPTS(); for( ;; );}
+#define configASSERT(x) \
+ if((x) == 0) { \
+ taskDISABLE_INTERRUPTS(); \
+ for(;;) \
+ ; \
+ }
/* USER CODE END 1 */
/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
standard names. */
-#define vPortSVCHandler SVC_Handler
+#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
/* IMPORTANT: After 10.3.1 update, Systick_Handler comes from NVIC (if SYS timebase = systick), otherwise from cmsis_os2.c */
diff --git a/firmware/targets/f7/cube/Inc/stm32_assert.h b/firmware/targets/f7/cube/Inc/stm32_assert.h
index f086878e..b9dad5de 100644
--- a/firmware/targets/f7/cube/Inc/stm32_assert.h
+++ b/firmware/targets/f7/cube/Inc/stm32_assert.h
@@ -21,14 +21,14 @@
#define __STM32_ASSERT_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Includes ------------------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
-#ifdef USE_FULL_ASSERT
+#ifdef USE_FULL_ASSERT
/**
* @brief The assert_param macro is used for function's parameters check.
* @param expr: If expr is false, it calls assert_failed function
@@ -37,11 +37,11 @@
* If expr is true, it returns no value.
* @retval None
*/
- #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
+#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t*)__FILE__, __LINE__))
/* Exported functions ------------------------------------------------------- */
- void assert_failed(uint8_t* file, uint32_t line);
+void assert_failed(uint8_t* file, uint32_t line);
#else
- #define assert_param(expr) ((void)0U)
+#define assert_param(expr) ((void)0U)
#endif /* USE_FULL_ASSERT */
#ifdef __cplusplus
diff --git a/firmware/targets/f7/cube/Inc/stm32wbxx_hal_conf.h b/firmware/targets/f7/cube/Inc/stm32wbxx_hal_conf.h
index 6b1d2553..e151d81b 100644
--- a/firmware/targets/f7/cube/Inc/stm32wbxx_hal_conf.h
+++ b/firmware/targets/f7/cube/Inc/stm32wbxx_hal_conf.h
@@ -22,7 +22,7 @@
#define __STM32WBxx_HAL_CONF_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Exported types ------------------------------------------------------------*/
@@ -66,26 +66,26 @@
#define HAL_PWR_MODULE_ENABLED
#define HAL_RCC_MODULE_ENABLED
-#define USE_HAL_ADC_REGISTER_CALLBACKS 0u
-#define USE_HAL_COMP_REGISTER_CALLBACKS 0u
-#define USE_HAL_CRYP_REGISTER_CALLBACKS 0u
-#define USE_HAL_I2C_REGISTER_CALLBACKS 0u
-#define USE_HAL_IRDA_REGISTER_CALLBACKS 0u
-#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0u
-#define USE_HAL_PCD_REGISTER_CALLBACKS 0u
-#define USE_HAL_PKA_REGISTER_CALLBACKS 0u
-#define USE_HAL_QSPI_REGISTER_CALLBACKS 0u
-#define USE_HAL_RNG_REGISTER_CALLBACKS 0u
-#define USE_HAL_RTC_REGISTER_CALLBACKS 0u
-#define USE_HAL_SAI_REGISTER_CALLBACKS 0u
+#define USE_HAL_ADC_REGISTER_CALLBACKS 0u
+#define USE_HAL_COMP_REGISTER_CALLBACKS 0u
+#define USE_HAL_CRYP_REGISTER_CALLBACKS 0u
+#define USE_HAL_I2C_REGISTER_CALLBACKS 0u
+#define USE_HAL_IRDA_REGISTER_CALLBACKS 0u
+#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0u
+#define USE_HAL_PCD_REGISTER_CALLBACKS 0u
+#define USE_HAL_PKA_REGISTER_CALLBACKS 0u
+#define USE_HAL_QSPI_REGISTER_CALLBACKS 0u
+#define USE_HAL_RNG_REGISTER_CALLBACKS 0u
+#define USE_HAL_RTC_REGISTER_CALLBACKS 0u
+#define USE_HAL_SAI_REGISTER_CALLBACKS 0u
#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0u
-#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0u
-#define USE_HAL_SPI_REGISTER_CALLBACKS 0u
-#define USE_HAL_TIM_REGISTER_CALLBACKS 0u
-#define USE_HAL_TSC_REGISTER_CALLBACKS 0u
-#define USE_HAL_UART_REGISTER_CALLBACKS 0u
-#define USE_HAL_USART_REGISTER_CALLBACKS 0u
-#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u
+#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0u
+#define USE_HAL_SPI_REGISTER_CALLBACKS 0u
+#define USE_HAL_TIM_REGISTER_CALLBACKS 0u
+#define USE_HAL_TSC_REGISTER_CALLBACKS 0u
+#define USE_HAL_UART_REGISTER_CALLBACKS 0u
+#define USE_HAL_USART_REGISTER_CALLBACKS 0u
+#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u
/* ########################## Oscillator Values adaptation ####################*/
/**
@@ -93,20 +93,20 @@
* This value is used by the RCC HAL module to compute the system frequency
* (when HSE is used as system clock source, directly or through the PLL).
*/
-#if !defined (HSE_VALUE)
-#define HSE_VALUE 32000000U /*!< Value of the External oscillator in Hz */
+#if !defined(HSE_VALUE)
+#define HSE_VALUE 32000000U /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
-#if !defined (HSE_STARTUP_TIMEOUT)
- #define HSE_STARTUP_TIMEOUT ((uint32_t)100) /*!< Time out for HSE start up, in ms */
+#if !defined(HSE_STARTUP_TIMEOUT)
+#define HSE_STARTUP_TIMEOUT ((uint32_t)100) /*!< Time out for HSE start up, in ms */
#endif /* HSE_STARTUP_TIMEOUT */
/**
* @brief Internal Multiple Speed oscillator (MSI) default value.
* This value is the default MSI range value after Reset.
*/
-#if !defined (MSI_VALUE)
- #define MSI_VALUE ((uint32_t)4000000) /*!< Value of the Internal oscillator in Hz*/
+#if !defined(MSI_VALUE)
+#define MSI_VALUE ((uint32_t)4000000) /*!< Value of the Internal oscillator in Hz*/
#endif /* MSI_VALUE */
/**
@@ -114,24 +114,24 @@
* This value is used by the RCC HAL module to compute the system frequency
* (when HSI is used as system clock source, directly or through the PLL).
*/
-#if !defined (HSI_VALUE)
-#define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/
+#if !defined(HSI_VALUE)
+#define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/
#endif /* HSI_VALUE */
/**
* @brief Internal Low Speed oscillator (LSI1) value.
*/
-#if !defined (LSI1_VALUE)
- #define LSI1_VALUE ((uint32_t)32000) /*!< LSI1 Typical Value in Hz*/
-#endif /* LSI1_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
+#if !defined(LSI1_VALUE)
+#define LSI1_VALUE ((uint32_t)32000) /*!< LSI1 Typical Value in Hz*/
+#endif /* LSI1_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
The real value may vary depending on the variations
in voltage and temperature.*/
/**
* @brief Internal Low Speed oscillator (LSI2) value.
*/
-#if !defined (LSI2_VALUE)
- #define LSI2_VALUE ((uint32_t)32000) /*!< LSI2 Typical Value in Hz*/
-#endif /* LSI2_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
+#if !defined(LSI2_VALUE)
+#define LSI2_VALUE ((uint32_t)32000) /*!< LSI2 Typical Value in Hz*/
+#endif /* LSI2_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz
The real value may vary depending on the variations
in voltage and temperature.*/
@@ -139,20 +139,20 @@
* @brief External Low Speed oscillator (LSE) value.
* This value is used by the UART, RTC HAL module to compute the system frequency
*/
-#if !defined (LSE_VALUE)
-#define LSE_VALUE 32768U /*!< Value of the External oscillator in Hz*/
+#if !defined(LSE_VALUE)
+#define LSE_VALUE 32768U /*!< Value of the External oscillator in Hz*/
#endif /* LSE_VALUE */
/**
* @brief Internal Multiple Speed oscillator (HSI48) default value.
* This value is the default HSI48 range value after Reset.
*/
-#if !defined (HSI48_VALUE)
- #define HSI48_VALUE ((uint32_t)48000000) /*!< Value of the Internal oscillator in Hz*/
+#if !defined(HSI48_VALUE)
+#define HSI48_VALUE ((uint32_t)48000000) /*!< Value of the Internal oscillator in Hz*/
#endif /* HSI48_VALUE */
-#if !defined (LSE_STARTUP_TIMEOUT)
-#define LSE_STARTUP_TIMEOUT 1000U /*!< Time out for LSE start up, in ms */
+#if !defined(LSE_STARTUP_TIMEOUT)
+#define LSE_STARTUP_TIMEOUT 1000U /*!< Time out for LSE start up, in ms */
#endif /* HSE_STARTUP_TIMEOUT */
/**
@@ -160,8 +160,9 @@
* This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source
* frequency.
*/
-#if !defined (EXTERNAL_SAI1_CLOCK_VALUE)
- #define EXTERNAL_SAI1_CLOCK_VALUE ((uint32_t)2097000) /*!< Value of the SAI1 External clock source in Hz*/
+#if !defined(EXTERNAL_SAI1_CLOCK_VALUE)
+#define EXTERNAL_SAI1_CLOCK_VALUE \
+ ((uint32_t)2097000) /*!< Value of the SAI1 External clock source in Hz*/
#endif /* EXTERNAL_SAI1_CLOCK_VALUE */
/* Tip: To avoid modifying this file each time you need to use different HSE,
@@ -172,12 +173,12 @@
* @brief This is the HAL system configuration section
*/
-#define VDD_VALUE 3300U /*!< Value of VDD in mv */
-#define TICK_INT_PRIORITY 15U /*!< tick interrupt priority */
-#define USE_RTOS 0U
-#define PREFETCH_ENABLE 1U
-#define INSTRUCTION_CACHE_ENABLE 1U
-#define DATA_CACHE_ENABLE 1U
+#define VDD_VALUE 3300U /*!< Value of VDD in mv */
+#define TICK_INT_PRIORITY 15U /*!< tick interrupt priority */
+#define USE_RTOS 0U
+#define PREFETCH_ENABLE 1U
+#define INSTRUCTION_CACHE_ENABLE 1U
+#define DATA_CACHE_ENABLE 1U
/* ########################## Assert Selection ############################## */
/**
@@ -193,142 +194,142 @@
* Deactivated: CRC code cleaned from driver
*/
-#define USE_SPI_CRC 0U
+#define USE_SPI_CRC 0U
/* Includes ------------------------------------------------------------------*/
/**
* @brief Include module's header file
*/
#ifdef HAL_DMA_MODULE_ENABLED
- #include "stm32wbxx_hal_dma.h"
+#include "stm32wbxx_hal_dma.h"
#endif /* HAL_DMA_MODULE_ENABLED */
#ifdef HAL_ADC_MODULE_ENABLED
- #include "stm32wbxx_hal_adc.h"
+#include "stm32wbxx_hal_adc.h"
#endif /* HAL_ADC_MODULE_ENABLED */
#ifdef HAL_COMP_MODULE_ENABLED
- #include "stm32wbxx_hal_comp.h"
+#include "stm32wbxx_hal_comp.h"
#endif /* HAL_COMP_MODULE_ENABLED */
#ifdef HAL_CORTEX_MODULE_ENABLED
- #include "stm32wbxx_hal_cortex.h"
+#include "stm32wbxx_hal_cortex.h"
#endif /* HAL_CORTEX_MODULE_ENABLED */
#ifdef HAL_CRC_MODULE_ENABLED
- #include "stm32wbxx_hal_crc.h"
+#include "stm32wbxx_hal_crc.h"
#endif /* HAL_CRC_MODULE_ENABLED */
#ifdef HAL_CRYP_MODULE_ENABLED
- #include "stm32wbxx_hal_cryp.h"
+#include "stm32wbxx_hal_cryp.h"
#endif /* HAL_CRYP_MODULE_ENABLED */
#ifdef HAL_EXTI_MODULE_ENABLED
- #include "stm32wbxx_hal_exti.h"
+#include "stm32wbxx_hal_exti.h"
#endif /* HAL_EXTI_MODULE_ENABLED */
#ifdef HAL_FLASH_MODULE_ENABLED
- #include "stm32wbxx_hal_flash.h"
+#include "stm32wbxx_hal_flash.h"
#endif /* HAL_FLASH_MODULE_ENABLED */
#ifdef HAL_GPIO_MODULE_ENABLED
- #include "stm32wbxx_hal_gpio.h"
+#include "stm32wbxx_hal_gpio.h"
#endif /* HAL_GPIO_MODULE_ENABLED */
#ifdef HAL_HSEM_MODULE_ENABLED
- #include "stm32wbxx_hal_hsem.h"
+#include "stm32wbxx_hal_hsem.h"
#endif /* HAL_HSEM_MODULE_ENABLED */
#ifdef HAL_I2C_MODULE_ENABLED
- #include "stm32wbxx_hal_i2c.h"
+#include "stm32wbxx_hal_i2c.h"
#endif /* HAL_I2C_MODULE_ENABLED */
#ifdef HAL_IPCC_MODULE_ENABLED
- #include "stm32wbxx_hal_ipcc.h"
+#include "stm32wbxx_hal_ipcc.h"
#endif /* HAL_IPCC_MODULE_ENABLED */
#ifdef HAL_IRDA_MODULE_ENABLED
- #include "stm32wbxx_hal_irda.h"
+#include "stm32wbxx_hal_irda.h"
#endif /* HAL_IRDA_MODULE_ENABLED */
#ifdef HAL_IWDG_MODULE_ENABLED
- #include "stm32wbxx_hal_iwdg.h"
+#include "stm32wbxx_hal_iwdg.h"
#endif /* HAL_IWDG_MODULE_ENABLED */
#ifdef HAL_LCD_MODULE_ENABLED
- #include "stm32wbxx_hal_lcd.h"
+#include "stm32wbxx_hal_lcd.h"
#endif /* HAL_LCD_MODULE_ENABLED */
#ifdef HAL_LPTIM_MODULE_ENABLED
- #include "stm32wbxx_hal_lptim.h"
+#include "stm32wbxx_hal_lptim.h"
#endif /* HAL_LPTIM_MODULE_ENABLED */
#ifdef HAL_PCD_MODULE_ENABLED
- #include "stm32wbxx_hal_pcd.h"
+#include "stm32wbxx_hal_pcd.h"
#endif /* HAL_PCD_MODULE_ENABLED */
#ifdef HAL_PKA_MODULE_ENABLED
- #include "stm32wbxx_hal_pka.h"
+#include "stm32wbxx_hal_pka.h"
#endif /* HAL_PKA_MODULE_ENABLED */
#ifdef HAL_PWR_MODULE_ENABLED
- #include "stm32wbxx_hal_pwr.h"
+#include "stm32wbxx_hal_pwr.h"
#endif /* HAL_PWR_MODULE_ENABLED */
#ifdef HAL_QSPI_MODULE_ENABLED
- #include "stm32wbxx_hal_qspi.h"
+#include "stm32wbxx_hal_qspi.h"
#endif /* HAL_QSPI_MODULE_ENABLED */
#ifdef HAL_RCC_MODULE_ENABLED
- #include "stm32wbxx_hal_rcc.h"
+#include "stm32wbxx_hal_rcc.h"
#endif /* HAL_RCC_MODULE_ENABLED */
#ifdef HAL_RNG_MODULE_ENABLED
- #include "stm32wbxx_hal_rng.h"
+#include "stm32wbxx_hal_rng.h"
#endif /* HAL_RNG_MODULE_ENABLED */
#ifdef HAL_RTC_MODULE_ENABLED
- #include "stm32wbxx_hal_rtc.h"
+#include "stm32wbxx_hal_rtc.h"
#endif /* HAL_RTC_MODULE_ENABLED */
#ifdef HAL_SAI_MODULE_ENABLED
- #include "stm32wbxx_hal_sai.h"
+#include "stm32wbxx_hal_sai.h"
#endif /* HAL_SAI_MODULE_ENABLED */
#ifdef HAL_SMARTCARD_MODULE_ENABLED
- #include "stm32wbxx_hal_smartcard.h"
+#include "stm32wbxx_hal_smartcard.h"
#endif /* HAL_SMARTCARD_MODULE_ENABLED */
#ifdef HAL_SMBUS_MODULE_ENABLED
- #include "stm32wbxx_hal_smbus.h"
+#include "stm32wbxx_hal_smbus.h"
#endif /* HAL_SMBUS_MODULE_ENABLED */
#ifdef HAL_SPI_MODULE_ENABLED
- #include "stm32wbxx_hal_spi.h"
+#include "stm32wbxx_hal_spi.h"
#endif /* HAL_SPI_MODULE_ENABLED */
#ifdef HAL_TIM_MODULE_ENABLED
- #include "stm32wbxx_hal_tim.h"
+#include "stm32wbxx_hal_tim.h"
#endif /* HAL_TIM_MODULE_ENABLED */
#ifdef HAL_TSC_MODULE_ENABLED
- #include "stm32wbxx_hal_tsc.h"
+#include "stm32wbxx_hal_tsc.h"
#endif /* HAL_TSC_MODULE_ENABLED */
#ifdef HAL_UART_MODULE_ENABLED
- #include "stm32wbxx_hal_uart.h"
+#include "stm32wbxx_hal_uart.h"
#endif /* HAL_UART_MODULE_ENABLED */
#ifdef HAL_USART_MODULE_ENABLED
- #include "stm32wbxx_hal_usart.h"
+#include "stm32wbxx_hal_usart.h"
#endif /* HAL_USART_MODULE_ENABLED */
#ifdef HAL_WWDG_MODULE_ENABLED
- #include "stm32wbxx_hal_wwdg.h"
+#include "stm32wbxx_hal_wwdg.h"
#endif /* HAL_WWDG_MODULE_ENABLED */
/* Exported macro ------------------------------------------------------------*/
-#ifdef USE_FULL_ASSERT
+#ifdef USE_FULL_ASSERT
/**
* @brief The assert_param macro is used for function's parameters check.
* @param expr If expr is false, it calls assert_failed function
@@ -337,11 +338,11 @@
* If expr is true, it returns no value.
* @retval None
*/
- #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
+#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t*)__FILE__, __LINE__))
/* Exported functions ------------------------------------------------------- */
- void assert_failed(uint8_t* file, uint32_t line);
+void assert_failed(uint8_t* file, uint32_t line);
#else
- #define assert_param(expr) ((void)0U)
+#define assert_param(expr) ((void)0U)
#endif /* USE_FULL_ASSERT */
#ifdef __cplusplus
diff --git a/firmware/targets/f7/cube/Inc/stm32wbxx_it.h b/firmware/targets/f7/cube/Inc/stm32wbxx_it.h
index df0f1f99..095a83ec 100644
--- a/firmware/targets/f7/cube/Inc/stm32wbxx_it.h
+++ b/firmware/targets/f7/cube/Inc/stm32wbxx_it.h
@@ -23,7 +23,7 @@
#define __STM32WBxx_IT_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Private includes ----------------------------------------------------------*/
diff --git a/firmware/targets/f7/cube/Inc/tim.h b/firmware/targets/f7/cube/Inc/tim.h
index 3a750349..e0f65f10 100644
--- a/firmware/targets/f7/cube/Inc/tim.h
+++ b/firmware/targets/f7/cube/Inc/tim.h
@@ -43,7 +43,7 @@ void MX_TIM1_Init(void);
void MX_TIM2_Init(void);
void MX_TIM16_Init(void);
-void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
+void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim);
/* USER CODE BEGIN Prototypes */
diff --git a/firmware/targets/f7/cube/Inc/usb_device.h b/firmware/targets/f7/cube/Inc/usb_device.h
index 4ec69d3b..b9a4bf43 100644
--- a/firmware/targets/f7/cube/Inc/usb_device.h
+++ b/firmware/targets/f7/cube/Inc/usb_device.h
@@ -24,7 +24,7 @@
#define __USB_DEVICE__H__
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
diff --git a/firmware/targets/f7/cube/Inc/usbd_cdc_if.h b/firmware/targets/f7/cube/Inc/usbd_cdc_if.h
index be388ddf..7ddbe67a 100644
--- a/firmware/targets/f7/cube/Inc/usbd_cdc_if.h
+++ b/firmware/targets/f7/cube/Inc/usbd_cdc_if.h
@@ -24,7 +24,7 @@
#define __USBD_CDC_IF_H__
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
@@ -49,8 +49,8 @@
* @{
*/
/* Define size for the receive and transmit buffer over CDC */
-#define APP_RX_DATA_SIZE 512
-#define APP_TX_DATA_SIZE 512
+#define APP_RX_DATA_SIZE 512
+#define APP_TX_DATA_SIZE 512
/* USER CODE BEGIN EXPORTED_DEFINES */
/* USER CODE END EXPORTED_DEFINES */
diff --git a/firmware/targets/f7/cube/Inc/usbd_conf.h b/firmware/targets/f7/cube/Inc/usbd_conf.h
index 21f4b5a6..98306d6a 100644
--- a/firmware/targets/f7/cube/Inc/usbd_conf.h
+++ b/firmware/targets/f7/cube/Inc/usbd_conf.h
@@ -24,7 +24,7 @@
#define __USBD_CONF__H__
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
@@ -66,21 +66,21 @@
*/
/*---------- -----------*/
-#define USBD_MAX_NUM_INTERFACES 1U
+#define USBD_MAX_NUM_INTERFACES 1U
/*---------- -----------*/
-#define USBD_MAX_NUM_CONFIGURATION 1U
+#define USBD_MAX_NUM_CONFIGURATION 1U
/*---------- -----------*/
-#define USBD_MAX_STR_DESC_SIZ 512U
+#define USBD_MAX_STR_DESC_SIZ 512U
/*---------- -----------*/
-#define USBD_DEBUG_LEVEL 0U
+#define USBD_DEBUG_LEVEL 0U
/*---------- -----------*/
-#define USBD_LPM_ENABLED 1U
+#define USBD_LPM_ENABLED 1U
/*---------- -----------*/
-#define USBD_SELF_POWERED 1U
+#define USBD_SELF_POWERED 1U
/****************************************/
/* #define for FS and HS identification */
-#define DEVICE_FS 0
+#define DEVICE_FS 0
/**
* @}
@@ -94,41 +94,44 @@
/* Memory management macros */
/** Alias for memory allocation. */
-#define USBD_malloc (void *)USBD_static_malloc
+#define USBD_malloc (void*)USBD_static_malloc
/** Alias for memory release. */
-#define USBD_free USBD_static_free
+#define USBD_free USBD_static_free
/** Alias for memory set. */
-#define USBD_memset memset
+#define USBD_memset memset
/** Alias for memory copy. */
-#define USBD_memcpy memcpy
+#define USBD_memcpy memcpy
/** Alias for delay. */
-#define USBD_Delay HAL_Delay
+#define USBD_Delay HAL_Delay
/* DEBUG macros */
-#if (USBD_DEBUG_LEVEL > 0)
-#define USBD_UsrLog(...) printf(__VA_ARGS__);\
- printf("\n");
+#if(USBD_DEBUG_LEVEL > 0)
+#define USBD_UsrLog(...) \
+ printf(__VA_ARGS__); \
+ printf("\n");
#else
#define USBD_UsrLog(...)
#endif
-#if (USBD_DEBUG_LEVEL > 1)
+#if(USBD_DEBUG_LEVEL > 1)
-#define USBD_ErrLog(...) printf("ERROR: ") ;\
- printf(__VA_ARGS__);\
- printf("\n");
+#define USBD_ErrLog(...) \
+ printf("ERROR: "); \
+ printf(__VA_ARGS__); \
+ printf("\n");
#else
#define USBD_ErrLog(...)
#endif
-#if (USBD_DEBUG_LEVEL > 2)
-#define USBD_DbgLog(...) printf("DEBUG : ") ;\
- printf(__VA_ARGS__);\
- printf("\n");
+#if(USBD_DEBUG_LEVEL > 2)
+#define USBD_DbgLog(...) \
+ printf("DEBUG : "); \
+ printf(__VA_ARGS__); \
+ printf("\n");
#else
#define USBD_DbgLog(...)
#endif
@@ -152,8 +155,8 @@
*/
/* Exported functions -------------------------------------------------------*/
-void *USBD_static_malloc(uint32_t size);
-void USBD_static_free(void *p);
+void* USBD_static_malloc(uint32_t size);
+void USBD_static_free(void* p);
/**
* @}
diff --git a/firmware/targets/f7/cube/Inc/usbd_desc.h b/firmware/targets/f7/cube/Inc/usbd_desc.h
index 7e7b58b5..67a70dc6 100644
--- a/firmware/targets/f7/cube/Inc/usbd_desc.h
+++ b/firmware/targets/f7/cube/Inc/usbd_desc.h
@@ -24,7 +24,7 @@
#define __USBD_DESC__C__
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
@@ -47,11 +47,11 @@
* @brief Constants.
* @{
*/
-#define DEVICE_ID1 (UID_BASE)
-#define DEVICE_ID2 (UID_BASE + 0x4)
-#define DEVICE_ID3 (UID_BASE + 0x8)
+#define DEVICE_ID1 (UID_BASE)
+#define DEVICE_ID2 (UID_BASE + 0x4)
+#define DEVICE_ID3 (UID_BASE + 0x8)
-#define USB_SIZ_STRING_SERIAL 0x1A
+#define USB_SIZ_STRING_SERIAL 0x1A
/* USER CODE BEGIN EXPORTED_CONSTANTS */
@@ -105,7 +105,7 @@
* @{
*/
-extern USBD_DescriptorsTypeDef CDC_Desc;
+extern USBD_DescriptorsTypeDef CDC_Desc;
/* USER CODE BEGIN EXPORTED_VARIABLES */
diff --git a/firmware/targets/f7/cube/Src/adc.c b/firmware/targets/f7/cube/Src/adc.c
index aa49bab4..d0c3d98e 100644
--- a/firmware/targets/f7/cube/Src/adc.c
+++ b/firmware/targets/f7/cube/Src/adc.c
@@ -27,109 +27,98 @@
ADC_HandleTypeDef hadc1;
/* ADC1 init function */
-void MX_ADC1_Init(void)
-{
+void MX_ADC1_Init(void) {
+ /* USER CODE BEGIN ADC1_Init 0 */
- /* USER CODE BEGIN ADC1_Init 0 */
+ /* USER CODE END ADC1_Init 0 */
- /* USER CODE END ADC1_Init 0 */
+ ADC_ChannelConfTypeDef sConfig = {0};
- ADC_ChannelConfTypeDef sConfig = {0};
+ /* USER CODE BEGIN ADC1_Init 1 */
- /* USER CODE BEGIN ADC1_Init 1 */
-
- /* USER CODE END ADC1_Init 1 */
- /** Common config
+ /* USER CODE END ADC1_Init 1 */
+ /** Common config
*/
- hadc1.Instance = ADC1;
- hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
- hadc1.Init.Resolution = ADC_RESOLUTION_12B;
- hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
- hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
- hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
- hadc1.Init.LowPowerAutoWait = DISABLE;
- hadc1.Init.ContinuousConvMode = DISABLE;
- hadc1.Init.NbrOfConversion = 1;
- hadc1.Init.DiscontinuousConvMode = DISABLE;
- hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
- hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
- hadc1.Init.DMAContinuousRequests = DISABLE;
- hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
- hadc1.Init.OversamplingMode = DISABLE;
- if (HAL_ADC_Init(&hadc1) != HAL_OK)
- {
- Error_Handler();
- }
- /** Configure Regular Channel
+ hadc1.Instance = ADC1;
+ hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
+ hadc1.Init.Resolution = ADC_RESOLUTION_12B;
+ hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
+ hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
+ hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
+ hadc1.Init.LowPowerAutoWait = DISABLE;
+ hadc1.Init.ContinuousConvMode = DISABLE;
+ hadc1.Init.NbrOfConversion = 1;
+ hadc1.Init.DiscontinuousConvMode = DISABLE;
+ hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
+ hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
+ hadc1.Init.DMAContinuousRequests = DISABLE;
+ hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
+ hadc1.Init.OversamplingMode = DISABLE;
+ if(HAL_ADC_Init(&hadc1) != HAL_OK) {
+ Error_Handler();
+ }
+ /** Configure Regular Channel
*/
- sConfig.Channel = ADC_CHANNEL_14;
- sConfig.Rank = ADC_REGULAR_RANK_1;
- sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
- sConfig.SingleDiff = ADC_SINGLE_ENDED;
- sConfig.OffsetNumber = ADC_OFFSET_NONE;
- sConfig.Offset = 0;
- if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN ADC1_Init 2 */
-
- /* USER CODE END ADC1_Init 2 */
-
+ sConfig.Channel = ADC_CHANNEL_14;
+ sConfig.Rank = ADC_REGULAR_RANK_1;
+ sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
+ sConfig.SingleDiff = ADC_SINGLE_ENDED;
+ sConfig.OffsetNumber = ADC_OFFSET_NONE;
+ sConfig.Offset = 0;
+ if(HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN ADC1_Init 2 */
+
+ /* USER CODE END ADC1_Init 2 */
}
-void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
-{
+void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle) {
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ if(adcHandle->Instance == ADC1) {
+ /* USER CODE BEGIN ADC1_MspInit 0 */
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- if(adcHandle->Instance==ADC1)
- {
- /* USER CODE BEGIN ADC1_MspInit 0 */
+ /* USER CODE END ADC1_MspInit 0 */
+ /* ADC1 clock enable */
+ __HAL_RCC_ADC_CLK_ENABLE();
- /* USER CODE END ADC1_MspInit 0 */
- /* ADC1 clock enable */
- __HAL_RCC_ADC_CLK_ENABLE();
-
- __HAL_RCC_GPIOC_CLK_ENABLE();
- /**ADC1 GPIO Configuration
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ /**ADC1 GPIO Configuration
PC5 ------> ADC1_IN14
*/
- GPIO_InitStruct.Pin = RFID_RF_IN_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(RFID_RF_IN_GPIO_Port, &GPIO_InitStruct);
-
- /* ADC1 interrupt Init */
- HAL_NVIC_SetPriority(ADC1_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(ADC1_IRQn);
- /* USER CODE BEGIN ADC1_MspInit 1 */
-
- /* USER CODE END ADC1_MspInit 1 */
- }
+ GPIO_InitStruct.Pin = RFID_RF_IN_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ HAL_GPIO_Init(RFID_RF_IN_GPIO_Port, &GPIO_InitStruct);
+
+ /* ADC1 interrupt Init */
+ HAL_NVIC_SetPriority(ADC1_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(ADC1_IRQn);
+ /* USER CODE BEGIN ADC1_MspInit 1 */
+
+ /* USER CODE END ADC1_MspInit 1 */
+ }
}
-void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle)
-{
-
- if(adcHandle->Instance==ADC1)
- {
- /* USER CODE BEGIN ADC1_MspDeInit 0 */
+void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle) {
+ if(adcHandle->Instance == ADC1) {
+ /* USER CODE BEGIN ADC1_MspDeInit 0 */
- /* USER CODE END ADC1_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_ADC_CLK_DISABLE();
+ /* USER CODE END ADC1_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_ADC_CLK_DISABLE();
- /**ADC1 GPIO Configuration
+ /**ADC1 GPIO Configuration
PC5 ------> ADC1_IN14
*/
- HAL_GPIO_DeInit(RFID_RF_IN_GPIO_Port, RFID_RF_IN_Pin);
+ HAL_GPIO_DeInit(RFID_RF_IN_GPIO_Port, RFID_RF_IN_Pin);
- /* ADC1 interrupt Deinit */
- HAL_NVIC_DisableIRQ(ADC1_IRQn);
- /* USER CODE BEGIN ADC1_MspDeInit 1 */
+ /* ADC1 interrupt Deinit */
+ HAL_NVIC_DisableIRQ(ADC1_IRQn);
+ /* USER CODE BEGIN ADC1_MspDeInit 1 */
- /* USER CODE END ADC1_MspDeInit 1 */
- }
+ /* USER CODE END ADC1_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f7/cube/Src/aes.c b/firmware/targets/f7/cube/Src/aes.c
index 5d5cc06a..ace83341 100644
--- a/firmware/targets/f7/cube/Src/aes.c
+++ b/firmware/targets/f7/cube/Src/aes.c
@@ -25,119 +25,101 @@
/* USER CODE END 0 */
CRYP_HandleTypeDef hcryp1;
-__ALIGN_BEGIN static const uint32_t pKeyAES1[4] __ALIGN_END = {
- 0x00000000,0x00000000,0x00000000,0x00000000};
+__ALIGN_BEGIN static const uint32_t pKeyAES1[4] __ALIGN_END =
+ {0x00000000, 0x00000000, 0x00000000, 0x00000000};
CRYP_HandleTypeDef hcryp2;
-__ALIGN_BEGIN static const uint32_t pKeyAES2[4] __ALIGN_END = {
- 0x00000000,0x00000000,0x00000000,0x00000000};
+__ALIGN_BEGIN static const uint32_t pKeyAES2[4] __ALIGN_END =
+ {0x00000000, 0x00000000, 0x00000000, 0x00000000};
/* AES1 init function */
-void MX_AES1_Init(void)
-{
-
- /* USER CODE BEGIN AES1_Init 0 */
-
- /* USER CODE END AES1_Init 0 */
-
- /* USER CODE BEGIN AES1_Init 1 */
-
- /* USER CODE END AES1_Init 1 */
- hcryp1.Instance = AES1;
- hcryp1.Init.DataType = CRYP_DATATYPE_32B;
- hcryp1.Init.KeySize = CRYP_KEYSIZE_128B;
- hcryp1.Init.pKey = (uint32_t *)pKeyAES1;
- hcryp1.Init.Algorithm = CRYP_AES_ECB;
- hcryp1.Init.DataWidthUnit = CRYP_DATAWIDTHUNIT_WORD;
- hcryp1.Init.KeyIVConfigSkip = CRYP_KEYIVCONFIG_ALWAYS;
- if (HAL_CRYP_Init(&hcryp1) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN AES1_Init 2 */
-
- /* USER CODE END AES1_Init 2 */
-
+void MX_AES1_Init(void) {
+ /* USER CODE BEGIN AES1_Init 0 */
+
+ /* USER CODE END AES1_Init 0 */
+
+ /* USER CODE BEGIN AES1_Init 1 */
+
+ /* USER CODE END AES1_Init 1 */
+ hcryp1.Instance = AES1;
+ hcryp1.Init.DataType = CRYP_DATATYPE_32B;
+ hcryp1.Init.KeySize = CRYP_KEYSIZE_128B;
+ hcryp1.Init.pKey = (uint32_t*)pKeyAES1;
+ hcryp1.Init.Algorithm = CRYP_AES_ECB;
+ hcryp1.Init.DataWidthUnit = CRYP_DATAWIDTHUNIT_WORD;
+ hcryp1.Init.KeyIVConfigSkip = CRYP_KEYIVCONFIG_ALWAYS;
+ if(HAL_CRYP_Init(&hcryp1) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN AES1_Init 2 */
+
+ /* USER CODE END AES1_Init 2 */
}
/* AES2 init function */
-void MX_AES2_Init(void)
-{
-
- /* USER CODE BEGIN AES2_Init 0 */
-
- /* USER CODE END AES2_Init 0 */
-
- /* USER CODE BEGIN AES2_Init 1 */
-
- /* USER CODE END AES2_Init 1 */
- hcryp2.Instance = AES2;
- hcryp2.Init.DataType = CRYP_DATATYPE_32B;
- hcryp2.Init.KeySize = CRYP_KEYSIZE_128B;
- hcryp2.Init.pKey = (uint32_t *)pKeyAES2;
- hcryp2.Init.Algorithm = CRYP_AES_ECB;
- hcryp2.Init.DataWidthUnit = CRYP_DATAWIDTHUNIT_WORD;
- hcryp2.Init.KeyIVConfigSkip = CRYP_KEYIVCONFIG_ALWAYS;
- if (HAL_CRYP_Init(&hcryp2) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN AES2_Init 2 */
-
- /* USER CODE END AES2_Init 2 */
-
+void MX_AES2_Init(void) {
+ /* USER CODE BEGIN AES2_Init 0 */
+
+ /* USER CODE END AES2_Init 0 */
+
+ /* USER CODE BEGIN AES2_Init 1 */
+
+ /* USER CODE END AES2_Init 1 */
+ hcryp2.Instance = AES2;
+ hcryp2.Init.DataType = CRYP_DATATYPE_32B;
+ hcryp2.Init.KeySize = CRYP_KEYSIZE_128B;
+ hcryp2.Init.pKey = (uint32_t*)pKeyAES2;
+ hcryp2.Init.Algorithm = CRYP_AES_ECB;
+ hcryp2.Init.DataWidthUnit = CRYP_DATAWIDTHUNIT_WORD;
+ hcryp2.Init.KeyIVConfigSkip = CRYP_KEYIVCONFIG_ALWAYS;
+ if(HAL_CRYP_Init(&hcryp2) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN AES2_Init 2 */
+
+ /* USER CODE END AES2_Init 2 */
}
-void HAL_CRYP_MspInit(CRYP_HandleTypeDef* crypHandle)
-{
-
- if(crypHandle->Instance==AES1)
- {
- /* USER CODE BEGIN AES1_MspInit 0 */
+void HAL_CRYP_MspInit(CRYP_HandleTypeDef* crypHandle) {
+ if(crypHandle->Instance == AES1) {
+ /* USER CODE BEGIN AES1_MspInit 0 */
- /* USER CODE END AES1_MspInit 0 */
- /* AES1 clock enable */
- __HAL_RCC_AES1_CLK_ENABLE();
- /* USER CODE BEGIN AES1_MspInit 1 */
+ /* USER CODE END AES1_MspInit 0 */
+ /* AES1 clock enable */
+ __HAL_RCC_AES1_CLK_ENABLE();
+ /* USER CODE BEGIN AES1_MspInit 1 */
- /* USER CODE END AES1_MspInit 1 */
- }
- else if(crypHandle->Instance==AES2)
- {
- /* USER CODE BEGIN AES2_MspInit 0 */
+ /* USER CODE END AES1_MspInit 1 */
+ } else if(crypHandle->Instance == AES2) {
+ /* USER CODE BEGIN AES2_MspInit 0 */
- /* USER CODE END AES2_MspInit 0 */
- /* AES2 clock enable */
- __HAL_RCC_AES2_CLK_ENABLE();
- /* USER CODE BEGIN AES2_MspInit 1 */
+ /* USER CODE END AES2_MspInit 0 */
+ /* AES2 clock enable */
+ __HAL_RCC_AES2_CLK_ENABLE();
+ /* USER CODE BEGIN AES2_MspInit 1 */
- /* USER CODE END AES2_MspInit 1 */
- }
+ /* USER CODE END AES2_MspInit 1 */
+ }
}
-void HAL_CRYP_MspDeInit(CRYP_HandleTypeDef* crypHandle)
-{
-
- if(crypHandle->Instance==AES1)
- {
- /* USER CODE BEGIN AES1_MspDeInit 0 */
+void HAL_CRYP_MspDeInit(CRYP_HandleTypeDef* crypHandle) {
+ if(crypHandle->Instance == AES1) {
+ /* USER CODE BEGIN AES1_MspDeInit 0 */
- /* USER CODE END AES1_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_AES1_CLK_DISABLE();
- /* USER CODE BEGIN AES1_MspDeInit 1 */
+ /* USER CODE END AES1_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_AES1_CLK_DISABLE();
+ /* USER CODE BEGIN AES1_MspDeInit 1 */
- /* USER CODE END AES1_MspDeInit 1 */
- }
- else if(crypHandle->Instance==AES2)
- {
- /* USER CODE BEGIN AES2_MspDeInit 0 */
+ /* USER CODE END AES1_MspDeInit 1 */
+ } else if(crypHandle->Instance == AES2) {
+ /* USER CODE BEGIN AES2_MspDeInit 0 */
- /* USER CODE END AES2_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_AES2_CLK_DISABLE();
- /* USER CODE BEGIN AES2_MspDeInit 1 */
+ /* USER CODE END AES2_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_AES2_CLK_DISABLE();
+ /* USER CODE BEGIN AES2_MspDeInit 1 */
- /* USER CODE END AES2_MspDeInit 1 */
- }
+ /* USER CODE END AES2_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f7/cube/Src/app_freertos.c b/firmware/targets/f7/cube/Src/app_freertos.c
index c4af8e87..fcb18ce6 100644
--- a/firmware/targets/f7/cube/Src/app_freertos.c
+++ b/firmware/targets/f7/cube/Src/app_freertos.c
@@ -51,17 +51,16 @@
/* Definitions for app_main */
osThreadId_t app_mainHandle;
const osThreadAttr_t app_main_attributes = {
- .name = "app_main",
- .priority = (osPriority_t) osPriorityNormal,
- .stack_size = 1024 * 4
-};
+ .name = "app_main",
+ .priority = (osPriority_t)osPriorityNormal,
+ .stack_size = 1024 * 4};
/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes */
/* USER CODE END FunctionPrototypes */
-void app(void *argument);
+void app(void* argument);
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
@@ -69,25 +68,21 @@ void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
void configureTimerForRunTimeStats(void);
unsigned long getRunTimeCounterValue(void);
void vApplicationIdleHook(void);
-void vApplicationStackOverflowHook(TaskHandle_t xTask, signed char *pcTaskName);
+void vApplicationStackOverflowHook(TaskHandle_t xTask, signed char* pcTaskName);
/* USER CODE BEGIN 1 */
/* Functions needed when configGENERATE_RUN_TIME_STATS is on */
-__weak void configureTimerForRunTimeStats(void)
-{
-
+__weak void configureTimerForRunTimeStats(void) {
}
-__weak unsigned long getRunTimeCounterValue(void)
-{
-return 0;
+__weak unsigned long getRunTimeCounterValue(void) {
+ return 0;
}
/* USER CODE END 1 */
/* USER CODE BEGIN 2 */
-void vApplicationIdleHook( void )
-{
- /* vApplicationIdleHook() will only be called if configUSE_IDLE_HOOK is set
+void vApplicationIdleHook(void) {
+ /* vApplicationIdleHook() will only be called if configUSE_IDLE_HOOK is set
to 1 in FreeRTOSConfig.h. It will be called on each iteration of the idle
task. It is essential that code added to this hook function never attempts
to block in any way (for example, call xQueueReceive() with a block time
@@ -100,20 +95,18 @@ void vApplicationIdleHook( void )
/* USER CODE END 2 */
/* USER CODE BEGIN 4 */
-void vApplicationStackOverflowHook(TaskHandle_t xTask, signed char *pcTaskName)
-{
- /* Run time stack overflow checking is performed if
+void vApplicationStackOverflowHook(TaskHandle_t xTask, signed char* pcTaskName) {
+ /* Run time stack overflow checking is performed if
configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook function is
called if a stack overflow is detected. */
}
/* USER CODE END 4 */
/* USER CODE BEGIN VPORT_SUPPORT_TICKS_AND_SLEEP */
-__weak void vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime )
-{
- // Generated when configUSE_TICKLESS_IDLE == 2.
- // Function called in tasks.c (in portTASK_FUNCTION).
- // TO BE COMPLETED or TO BE REPLACED by a user one, overriding that weak one.
+__weak void vPortSuppressTicksAndSleep(TickType_t xExpectedIdleTime) {
+ // Generated when configUSE_TICKLESS_IDLE == 2.
+ // Function called in tasks.c (in portTASK_FUNCTION).
+ // TO BE COMPLETED or TO BE REPLACED by a user one, overriding that weak one.
}
/* USER CODE END VPORT_SUPPORT_TICKS_AND_SLEEP */
@@ -123,38 +116,37 @@ __weak void vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime )
* @retval None
*/
void MX_FREERTOS_Init(void) {
- /* USER CODE BEGIN Init */
-
- /* USER CODE END Init */
+ /* USER CODE BEGIN Init */
- /* USER CODE BEGIN RTOS_MUTEX */
- /* add mutexes, ... */
- /* USER CODE END RTOS_MUTEX */
+ /* USER CODE END Init */
- /* USER CODE BEGIN RTOS_SEMAPHORES */
- /* add semaphores, ... */
- /* USER CODE END RTOS_SEMAPHORES */
+ /* USER CODE BEGIN RTOS_MUTEX */
+ /* add mutexes, ... */
+ /* USER CODE END RTOS_MUTEX */
- /* USER CODE BEGIN RTOS_TIMERS */
- /* start timers, add new ones, ... */
- /* USER CODE END RTOS_TIMERS */
+ /* USER CODE BEGIN RTOS_SEMAPHORES */
+ /* add semaphores, ... */
+ /* USER CODE END RTOS_SEMAPHORES */
- /* USER CODE BEGIN RTOS_QUEUES */
- /* add queues, ... */
- /* USER CODE END RTOS_QUEUES */
+ /* USER CODE BEGIN RTOS_TIMERS */
+ /* start timers, add new ones, ... */
+ /* USER CODE END RTOS_TIMERS */
- /* Create the thread(s) */
- /* creation of app_main */
- app_mainHandle = osThreadNew(app, NULL, &app_main_attributes);
+ /* USER CODE BEGIN RTOS_QUEUES */
+ /* add queues, ... */
+ /* USER CODE END RTOS_QUEUES */
- /* USER CODE BEGIN RTOS_THREADS */
- /* add threads, ... */
- /* USER CODE END RTOS_THREADS */
+ /* Create the thread(s) */
+ /* creation of app_main */
+ app_mainHandle = osThreadNew(app, NULL, &app_main_attributes);
- /* USER CODE BEGIN RTOS_EVENTS */
- /* add events, ... */
- /* USER CODE END RTOS_EVENTS */
+ /* USER CODE BEGIN RTOS_THREADS */
+ /* add threads, ... */
+ /* USER CODE END RTOS_THREADS */
+ /* USER CODE BEGIN RTOS_EVENTS */
+ /* add events, ... */
+ /* USER CODE END RTOS_EVENTS */
}
/* USER CODE BEGIN Header_app */
@@ -164,15 +156,13 @@ void MX_FREERTOS_Init(void) {
* @retval None
*/
/* USER CODE END Header_app */
-__weak void app(void *argument)
-{
- /* USER CODE BEGIN app */
- /* Infinite loop */
- for(;;)
- {
- osDelay(1);
- }
- /* USER CODE END app */
+__weak void app(void* argument) {
+ /* USER CODE BEGIN app */
+ /* Infinite loop */
+ for(;;) {
+ osDelay(1);
+ }
+ /* USER CODE END app */
}
/* Private application code --------------------------------------------------*/
diff --git a/firmware/targets/f7/cube/Src/comp.c b/firmware/targets/f7/cube/Src/comp.c
index 11ae0757..95e697e3 100644
--- a/firmware/targets/f7/cube/Src/comp.c
+++ b/firmware/targets/f7/cube/Src/comp.c
@@ -27,83 +27,73 @@
COMP_HandleTypeDef hcomp1;
/* COMP1 init function */
-void MX_COMP1_Init(void)
-{
-
- /* USER CODE BEGIN COMP1_Init 0 */
-
- /* USER CODE END COMP1_Init 0 */
-
- /* USER CODE BEGIN COMP1_Init 1 */
-
- /* USER CODE END COMP1_Init 1 */
- hcomp1.Instance = COMP1;
- hcomp1.Init.InputMinus = COMP_INPUT_MINUS_1_4VREFINT;
- hcomp1.Init.InputPlus = COMP_INPUT_PLUS_IO1;
- hcomp1.Init.OutputPol = COMP_OUTPUTPOL_NONINVERTED;
- hcomp1.Init.Hysteresis = COMP_HYSTERESIS_HIGH;
- hcomp1.Init.BlankingSrce = COMP_BLANKINGSRC_NONE;
- hcomp1.Init.Mode = COMP_POWERMODE_MEDIUMSPEED;
- hcomp1.Init.WindowMode = COMP_WINDOWMODE_DISABLE;
- hcomp1.Init.TriggerMode = COMP_TRIGGERMODE_IT_RISING_FALLING;
- if (HAL_COMP_Init(&hcomp1) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN COMP1_Init 2 */
-
- /* USER CODE END COMP1_Init 2 */
-
+void MX_COMP1_Init(void) {
+ /* USER CODE BEGIN COMP1_Init 0 */
+
+ /* USER CODE END COMP1_Init 0 */
+
+ /* USER CODE BEGIN COMP1_Init 1 */
+
+ /* USER CODE END COMP1_Init 1 */
+ hcomp1.Instance = COMP1;
+ hcomp1.Init.InputMinus = COMP_INPUT_MINUS_1_4VREFINT;
+ hcomp1.Init.InputPlus = COMP_INPUT_PLUS_IO1;
+ hcomp1.Init.OutputPol = COMP_OUTPUTPOL_NONINVERTED;
+ hcomp1.Init.Hysteresis = COMP_HYSTERESIS_HIGH;
+ hcomp1.Init.BlankingSrce = COMP_BLANKINGSRC_NONE;
+ hcomp1.Init.Mode = COMP_POWERMODE_MEDIUMSPEED;
+ hcomp1.Init.WindowMode = COMP_WINDOWMODE_DISABLE;
+ hcomp1.Init.TriggerMode = COMP_TRIGGERMODE_IT_RISING_FALLING;
+ if(HAL_COMP_Init(&hcomp1) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN COMP1_Init 2 */
+
+ /* USER CODE END COMP1_Init 2 */
}
-void HAL_COMP_MspInit(COMP_HandleTypeDef* compHandle)
-{
+void HAL_COMP_MspInit(COMP_HandleTypeDef* compHandle) {
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ if(compHandle->Instance == COMP1) {
+ /* USER CODE BEGIN COMP1_MspInit 0 */
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- if(compHandle->Instance==COMP1)
- {
- /* USER CODE BEGIN COMP1_MspInit 0 */
+ /* USER CODE END COMP1_MspInit 0 */
- /* USER CODE END COMP1_MspInit 0 */
-
- __HAL_RCC_GPIOC_CLK_ENABLE();
- /**COMP1 GPIO Configuration
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ /**COMP1 GPIO Configuration
PC5 ------> COMP1_INP
*/
- GPIO_InitStruct.Pin = RFID_RF_IN_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(RFID_RF_IN_GPIO_Port, &GPIO_InitStruct);
-
- /* COMP1 interrupt Init */
- HAL_NVIC_SetPriority(COMP_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(COMP_IRQn);
- /* USER CODE BEGIN COMP1_MspInit 1 */
-
- /* USER CODE END COMP1_MspInit 1 */
- }
+ GPIO_InitStruct.Pin = RFID_RF_IN_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ HAL_GPIO_Init(RFID_RF_IN_GPIO_Port, &GPIO_InitStruct);
+
+ /* COMP1 interrupt Init */
+ HAL_NVIC_SetPriority(COMP_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(COMP_IRQn);
+ /* USER CODE BEGIN COMP1_MspInit 1 */
+
+ /* USER CODE END COMP1_MspInit 1 */
+ }
}
-void HAL_COMP_MspDeInit(COMP_HandleTypeDef* compHandle)
-{
-
- if(compHandle->Instance==COMP1)
- {
- /* USER CODE BEGIN COMP1_MspDeInit 0 */
+void HAL_COMP_MspDeInit(COMP_HandleTypeDef* compHandle) {
+ if(compHandle->Instance == COMP1) {
+ /* USER CODE BEGIN COMP1_MspDeInit 0 */
- /* USER CODE END COMP1_MspDeInit 0 */
+ /* USER CODE END COMP1_MspDeInit 0 */
- /**COMP1 GPIO Configuration
+ /**COMP1 GPIO Configuration
PC5 ------> COMP1_INP
*/
- HAL_GPIO_DeInit(RFID_RF_IN_GPIO_Port, RFID_RF_IN_Pin);
+ HAL_GPIO_DeInit(RFID_RF_IN_GPIO_Port, RFID_RF_IN_Pin);
- /* COMP1 interrupt Deinit */
- HAL_NVIC_DisableIRQ(COMP_IRQn);
- /* USER CODE BEGIN COMP1_MspDeInit 1 */
+ /* COMP1 interrupt Deinit */
+ HAL_NVIC_DisableIRQ(COMP_IRQn);
+ /* USER CODE BEGIN COMP1_MspDeInit 1 */
- /* USER CODE END COMP1_MspDeInit 1 */
- }
+ /* USER CODE END COMP1_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f7/cube/Src/crc.c b/firmware/targets/f7/cube/Src/crc.c
index 7873e85a..203032ea 100644
--- a/firmware/targets/f7/cube/Src/crc.c
+++ b/firmware/targets/f7/cube/Src/crc.c
@@ -27,62 +27,52 @@
CRC_HandleTypeDef hcrc;
/* CRC init function */
-void MX_CRC_Init(void)
-{
-
- /* USER CODE BEGIN CRC_Init 0 */
-
- /* USER CODE END CRC_Init 0 */
-
- /* USER CODE BEGIN CRC_Init 1 */
-
- /* USER CODE END CRC_Init 1 */
- hcrc.Instance = CRC;
- hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_ENABLE;
- hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE;
- hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_NONE;
- hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_DISABLE;
- hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;
- if (HAL_CRC_Init(&hcrc) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN CRC_Init 2 */
-
- /* USER CODE END CRC_Init 2 */
-
+void MX_CRC_Init(void) {
+ /* USER CODE BEGIN CRC_Init 0 */
+
+ /* USER CODE END CRC_Init 0 */
+
+ /* USER CODE BEGIN CRC_Init 1 */
+
+ /* USER CODE END CRC_Init 1 */
+ hcrc.Instance = CRC;
+ hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_ENABLE;
+ hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE;
+ hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_NONE;
+ hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_DISABLE;
+ hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;
+ if(HAL_CRC_Init(&hcrc) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN CRC_Init 2 */
+
+ /* USER CODE END CRC_Init 2 */
}
-void HAL_CRC_MspInit(CRC_HandleTypeDef* crcHandle)
-{
+void HAL_CRC_MspInit(CRC_HandleTypeDef* crcHandle) {
+ if(crcHandle->Instance == CRC) {
+ /* USER CODE BEGIN CRC_MspInit 0 */
- if(crcHandle->Instance==CRC)
- {
- /* USER CODE BEGIN CRC_MspInit 0 */
+ /* USER CODE END CRC_MspInit 0 */
+ /* CRC clock enable */
+ __HAL_RCC_CRC_CLK_ENABLE();
+ /* USER CODE BEGIN CRC_MspInit 1 */
- /* USER CODE END CRC_MspInit 0 */
- /* CRC clock enable */
- __HAL_RCC_CRC_CLK_ENABLE();
- /* USER CODE BEGIN CRC_MspInit 1 */
-
- /* USER CODE END CRC_MspInit 1 */
- }
+ /* USER CODE END CRC_MspInit 1 */
+ }
}
-void HAL_CRC_MspDeInit(CRC_HandleTypeDef* crcHandle)
-{
-
- if(crcHandle->Instance==CRC)
- {
- /* USER CODE BEGIN CRC_MspDeInit 0 */
+void HAL_CRC_MspDeInit(CRC_HandleTypeDef* crcHandle) {
+ if(crcHandle->Instance == CRC) {
+ /* USER CODE BEGIN CRC_MspDeInit 0 */
- /* USER CODE END CRC_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_CRC_CLK_DISABLE();
- /* USER CODE BEGIN CRC_MspDeInit 1 */
+ /* USER CODE END CRC_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_CRC_CLK_DISABLE();
+ /* USER CODE BEGIN CRC_MspDeInit 1 */
- /* USER CODE END CRC_MspDeInit 1 */
- }
+ /* USER CODE END CRC_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f7/cube/Src/gpio.c b/firmware/targets/f7/cube/Src/gpio.c
index 8446aed5..d8fd35dc 100644
--- a/firmware/targets/f7/cube/Src/gpio.c
+++ b/firmware/targets/f7/cube/Src/gpio.c
@@ -38,140 +38,136 @@
* EVENT_OUT
* EXTI
*/
-void MX_GPIO_Init(void)
-{
+void MX_GPIO_Init(void) {
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
- GPIO_InitTypeDef GPIO_InitStruct = {0};
+ /* GPIO Ports Clock Enable */
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ __HAL_RCC_GPIOH_CLK_ENABLE();
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ __HAL_RCC_GPIOE_CLK_ENABLE();
+ __HAL_RCC_GPIOD_CLK_ENABLE();
- /* GPIO Ports Clock Enable */
- __HAL_RCC_GPIOC_CLK_ENABLE();
- __HAL_RCC_GPIOH_CLK_ENABLE();
- __HAL_RCC_GPIOB_CLK_ENABLE();
- __HAL_RCC_GPIOA_CLK_ENABLE();
- __HAL_RCC_GPIOE_CLK_ENABLE();
- __HAL_RCC_GPIOD_CLK_ENABLE();
+ /*Configure GPIO pin Output Level */
+ HAL_GPIO_WritePin(GPIOA, RFID_PULL_Pin | VIBRO_Pin, GPIO_PIN_RESET);
- /*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(GPIOA, RFID_PULL_Pin|VIBRO_Pin, GPIO_PIN_RESET);
+ /*Configure GPIO pin Output Level */
+ HAL_GPIO_WritePin(PERIPH_POWER_GPIO_Port, PERIPH_POWER_Pin, GPIO_PIN_SET);
- /*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(PERIPH_POWER_GPIO_Port, PERIPH_POWER_Pin, GPIO_PIN_SET);
+ /*Configure GPIO pin Output Level */
+ HAL_GPIO_WritePin(RF_SW_0_GPIO_Port, RF_SW_0_Pin, GPIO_PIN_RESET);
- /*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(RF_SW_0_GPIO_Port, RF_SW_0_Pin, GPIO_PIN_RESET);
+ /*Configure GPIO pin Output Level */
+ HAL_GPIO_WritePin(GPIOB, DISPLAY_RST_Pin | DISPLAY_DI_Pin, GPIO_PIN_RESET);
- /*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(GPIOB, DISPLAY_RST_Pin|DISPLAY_DI_Pin, GPIO_PIN_RESET);
+ /*Configure GPIO pin Output Level */
+ HAL_GPIO_WritePin(NFC_CS_GPIO_Port, NFC_CS_Pin, GPIO_PIN_SET);
- /*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(NFC_CS_GPIO_Port, NFC_CS_Pin, GPIO_PIN_SET);
+ /*Configure GPIO pin Output Level */
+ HAL_GPIO_WritePin(GPIOC, DISPLAY_CS_Pin | SD_CS_Pin, GPIO_PIN_SET);
- /*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(GPIOC, DISPLAY_CS_Pin|SD_CS_Pin, GPIO_PIN_SET);
+ /*Configure GPIO pin Output Level */
+ HAL_GPIO_WritePin(CC1101_CS_GPIO_Port, CC1101_CS_Pin, GPIO_PIN_SET);
- /*Configure GPIO pin Output Level */
- HAL_GPIO_WritePin(CC1101_CS_GPIO_Port, CC1101_CS_Pin, GPIO_PIN_SET);
+ /*Configure GPIO pin : PtPin */
+ GPIO_InitStruct.Pin = BUTTON_BACK_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
+ GPIO_InitStruct.Pull = GPIO_PULLUP;
+ HAL_GPIO_Init(BUTTON_BACK_GPIO_Port, &GPIO_InitStruct);
- /*Configure GPIO pin : PtPin */
- GPIO_InitStruct.Pin = BUTTON_BACK_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- HAL_GPIO_Init(BUTTON_BACK_GPIO_Port, &GPIO_InitStruct);
+ /*Configure GPIO pin : PtPin */
+ GPIO_InitStruct.Pin = BUTTON_OK_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ HAL_GPIO_Init(BUTTON_OK_GPIO_Port, &GPIO_InitStruct);
- /*Configure GPIO pin : PtPin */
- GPIO_InitStruct.Pin = BUTTON_OK_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(BUTTON_OK_GPIO_Port, &GPIO_InitStruct);
+ /*Configure GPIO pins : PCPin PCPin PCPin */
+ GPIO_InitStruct.Pin = PC0_Pin | PC1_Pin | PC3_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
- /*Configure GPIO pins : PCPin PCPin PCPin */
- GPIO_InitStruct.Pin = PC0_Pin|PC1_Pin|PC3_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
-
- /*Configure GPIO pins : PAPin PAPin PAPin PAPin
+ /*Configure GPIO pins : PAPin PAPin PAPin PAPin
PAPin */
- GPIO_InitStruct.Pin = CC1101_G0_Pin|PA4_Pin|PA6_Pin|PA7_Pin
- |RFID_CARRIER_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
-
- /*Configure GPIO pins : PAPin PAPin */
- GPIO_InitStruct.Pin = RFID_PULL_Pin|VIBRO_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
-
- /*Configure GPIO pin : PtPin */
- GPIO_InitStruct.Pin = PERIPH_POWER_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- HAL_GPIO_Init(PERIPH_POWER_GPIO_Port, &GPIO_InitStruct);
-
- /*Configure GPIO pins : PCPin PCPin */
- GPIO_InitStruct.Pin = RF_SW_0_Pin|DISPLAY_CS_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
-
- /*Configure GPIO pins : PBPin PBPin PBPin */
- GPIO_InitStruct.Pin = PB2_Pin|iBTN_Pin|PB3_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-
- /*Configure GPIO pins : PBPin PBPin PBPin */
- GPIO_InitStruct.Pin = BUTTON_UP_Pin|BUTTON_LEFT_Pin|BUTTON_RIGHT_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-
- /*Configure GPIO pins : PBPin PBPin */
- GPIO_InitStruct.Pin = DISPLAY_RST_Pin|DISPLAY_DI_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-
- /*Configure GPIO pin : PtPin */
- GPIO_InitStruct.Pin = NFC_CS_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- HAL_GPIO_Init(NFC_CS_GPIO_Port, &GPIO_InitStruct);
-
- /*Configure GPIO pins : PCPin PCPin */
- GPIO_InitStruct.Pin = BUTTON_DOWN_Pin|SD_CD_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
-
- /*Configure GPIO pin : PtPin */
- GPIO_InitStruct.Pin = SD_CS_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- HAL_GPIO_Init(SD_CS_GPIO_Port, &GPIO_InitStruct);
-
- /*Configure GPIO pin : PtPin */
- GPIO_InitStruct.Pin = CC1101_CS_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- HAL_GPIO_Init(CC1101_CS_GPIO_Port, &GPIO_InitStruct);
-
- /* EXTI interrupt init*/
- HAL_NVIC_SetPriority(EXTI3_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(EXTI3_IRQn);
-
- HAL_NVIC_SetPriority(EXTI15_10_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
-
+ GPIO_InitStruct.Pin = CC1101_G0_Pin | PA4_Pin | PA6_Pin | PA7_Pin | RFID_CARRIER_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+ /*Configure GPIO pins : PAPin PAPin */
+ GPIO_InitStruct.Pin = RFID_PULL_Pin | VIBRO_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+ /*Configure GPIO pin : PtPin */
+ GPIO_InitStruct.Pin = PERIPH_POWER_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ HAL_GPIO_Init(PERIPH_POWER_GPIO_Port, &GPIO_InitStruct);
+
+ /*Configure GPIO pins : PCPin PCPin */
+ GPIO_InitStruct.Pin = RF_SW_0_Pin | DISPLAY_CS_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+
+ /*Configure GPIO pins : PBPin PBPin PBPin */
+ GPIO_InitStruct.Pin = PB2_Pin | iBTN_Pin | PB3_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
+ /*Configure GPIO pins : PBPin PBPin PBPin */
+ GPIO_InitStruct.Pin = BUTTON_UP_Pin | BUTTON_LEFT_Pin | BUTTON_RIGHT_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
+ GPIO_InitStruct.Pull = GPIO_PULLUP;
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
+ /*Configure GPIO pins : PBPin PBPin */
+ GPIO_InitStruct.Pin = DISPLAY_RST_Pin | DISPLAY_DI_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
+ /*Configure GPIO pin : PtPin */
+ GPIO_InitStruct.Pin = NFC_CS_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ HAL_GPIO_Init(NFC_CS_GPIO_Port, &GPIO_InitStruct);
+
+ /*Configure GPIO pins : PCPin PCPin */
+ GPIO_InitStruct.Pin = BUTTON_DOWN_Pin | SD_CD_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+
+ /*Configure GPIO pin : PtPin */
+ GPIO_InitStruct.Pin = SD_CS_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ HAL_GPIO_Init(SD_CS_GPIO_Port, &GPIO_InitStruct);
+
+ /*Configure GPIO pin : PtPin */
+ GPIO_InitStruct.Pin = CC1101_CS_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ HAL_GPIO_Init(CC1101_CS_GPIO_Port, &GPIO_InitStruct);
+
+ /* EXTI interrupt init*/
+ HAL_NVIC_SetPriority(EXTI3_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(EXTI3_IRQn);
+
+ HAL_NVIC_SetPriority(EXTI15_10_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
}
/* USER CODE BEGIN 2 */
diff --git a/firmware/targets/f7/cube/Src/i2c.c b/firmware/targets/f7/cube/Src/i2c.c
index acc5ba38..0ad9765a 100644
--- a/firmware/targets/f7/cube/Src/i2c.c
+++ b/firmware/targets/f7/cube/Src/i2c.c
@@ -25,55 +25,52 @@
/* USER CODE END 0 */
/* I2C1 init function */
-void MX_I2C1_Init(void)
-{
+void MX_I2C1_Init(void) {
+ /* USER CODE BEGIN I2C1_Init 0 */
- /* USER CODE BEGIN I2C1_Init 0 */
+ /* USER CODE END I2C1_Init 0 */
- /* USER CODE END I2C1_Init 0 */
+ LL_I2C_InitTypeDef I2C_InitStruct = {0};
- LL_I2C_InitTypeDef I2C_InitStruct = {0};
+ LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
- LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
-
- LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA);
- /**I2C1 GPIO Configuration
+ LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA);
+ /**I2C1 GPIO Configuration
PA9 ------> I2C1_SCL
PA10 ------> I2C1_SDA
*/
- GPIO_InitStruct.Pin = LL_GPIO_PIN_9|LL_GPIO_PIN_10;
- GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
- GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
- GPIO_InitStruct.Alternate = LL_GPIO_AF_4;
- LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+ GPIO_InitStruct.Pin = LL_GPIO_PIN_9 | LL_GPIO_PIN_10;
+ GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
+ GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
+ GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
+ GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;
+ GPIO_InitStruct.Alternate = LL_GPIO_AF_4;
+ LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- /* Peripheral clock enable */
- LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C1);
+ /* Peripheral clock enable */
+ LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C1);
- /* USER CODE BEGIN I2C1_Init 1 */
+ /* USER CODE BEGIN I2C1_Init 1 */
- /* USER CODE END I2C1_Init 1 */
- /** I2C Initialization
+ /* USER CODE END I2C1_Init 1 */
+ /** I2C Initialization
*/
- I2C_InitStruct.PeripheralMode = LL_I2C_MODE_I2C;
- I2C_InitStruct.Timing = 0x10707DBC;
- I2C_InitStruct.AnalogFilter = LL_I2C_ANALOGFILTER_ENABLE;
- I2C_InitStruct.DigitalFilter = 0;
- I2C_InitStruct.OwnAddress1 = 0;
- I2C_InitStruct.TypeAcknowledge = LL_I2C_ACK;
- I2C_InitStruct.OwnAddrSize = LL_I2C_OWNADDRESS1_7BIT;
- LL_I2C_Init(I2C1, &I2C_InitStruct);
- LL_I2C_EnableAutoEndMode(I2C1);
- LL_I2C_SetOwnAddress2(I2C1, 0, LL_I2C_OWNADDRESS2_NOMASK);
- LL_I2C_DisableOwnAddress2(I2C1);
- LL_I2C_DisableGeneralCall(I2C1);
- LL_I2C_EnableClockStretching(I2C1);
- /* USER CODE BEGIN I2C1_Init 2 */
-
- /* USER CODE END I2C1_Init 2 */
-
+ I2C_InitStruct.PeripheralMode = LL_I2C_MODE_I2C;
+ I2C_InitStruct.Timing = 0x10707DBC;
+ I2C_InitStruct.AnalogFilter = LL_I2C_ANALOGFILTER_ENABLE;
+ I2C_InitStruct.DigitalFilter = 0;
+ I2C_InitStruct.OwnAddress1 = 0;
+ I2C_InitStruct.TypeAcknowledge = LL_I2C_ACK;
+ I2C_InitStruct.OwnAddrSize = LL_I2C_OWNADDRESS1_7BIT;
+ LL_I2C_Init(I2C1, &I2C_InitStruct);
+ LL_I2C_EnableAutoEndMode(I2C1);
+ LL_I2C_SetOwnAddress2(I2C1, 0, LL_I2C_OWNADDRESS2_NOMASK);
+ LL_I2C_DisableOwnAddress2(I2C1);
+ LL_I2C_DisableGeneralCall(I2C1);
+ LL_I2C_EnableClockStretching(I2C1);
+ /* USER CODE BEGIN I2C1_Init 2 */
+
+ /* USER CODE END I2C1_Init 2 */
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f7/cube/Src/main.c b/firmware/targets/f7/cube/Src/main.c
index 8e65442d..d4ec7ec2 100644
--- a/firmware/targets/f7/cube/Src/main.c
+++ b/firmware/targets/f7/cube/Src/main.c
@@ -76,179 +76,167 @@ void MX_FREERTOS_Init(void);
* @brief The application entry point.
* @retval int
*/
-int main(void)
-{
- /* USER CODE BEGIN 1 */
-
- /* USER CODE END 1 */
-
- /* MCU Configuration--------------------------------------------------------*/
-
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- HAL_Init();
-
- /* USER CODE BEGIN Init */
-
- /* USER CODE END Init */
-
- /* Configure the system clock */
- SystemClock_Config();
-
- /* USER CODE BEGIN SysInit */
-
- /* USER CODE END SysInit */
-
- /* Initialize all configured peripherals */
- MX_GPIO_Init();
- MX_ADC1_Init();
- MX_I2C1_Init();
- MX_RTC_Init();
- MX_SPI1_Init();
- MX_SPI2_Init();
- MX_USB_Device_Init();
- MX_TIM1_Init();
- MX_TIM2_Init();
- MX_TIM16_Init();
- MX_COMP1_Init();
- MX_RF_Init();
- MX_PKA_Init();
- MX_RNG_Init();
- MX_AES1_Init();
- MX_AES2_Init();
- MX_CRC_Init();
- MX_USART1_UART_Init();
- /* USER CODE BEGIN 2 */
-
- /* USER CODE END 2 */
-
- /* Init scheduler */
- osKernelInitialize(); /* Call init function for freertos objects (in freertos.c) */
- MX_FREERTOS_Init();
- /* Start scheduler */
- osKernelStart();
-
- /* We should never get here as control is now taken by the scheduler */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- /* USER CODE END WHILE */
-
- /* USER CODE BEGIN 3 */
- }
- /* USER CODE END 3 */
+int main(void) {
+ /* USER CODE BEGIN 1 */
+
+ /* USER CODE END 1 */
+
+ /* MCU Configuration--------------------------------------------------------*/
+
+ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
+ HAL_Init();
+
+ /* USER CODE BEGIN Init */
+
+ /* USER CODE END Init */
+
+ /* Configure the system clock */
+ SystemClock_Config();
+
+ /* USER CODE BEGIN SysInit */
+
+ /* USER CODE END SysInit */
+
+ /* Initialize all configured peripherals */
+ MX_GPIO_Init();
+ MX_ADC1_Init();
+ MX_I2C1_Init();
+ MX_RTC_Init();
+ MX_SPI1_Init();
+ MX_SPI2_Init();
+ MX_USB_Device_Init();
+ MX_TIM1_Init();
+ MX_TIM2_Init();
+ MX_TIM16_Init();
+ MX_COMP1_Init();
+ MX_RF_Init();
+ MX_PKA_Init();
+ MX_RNG_Init();
+ MX_AES1_Init();
+ MX_AES2_Init();
+ MX_CRC_Init();
+ MX_USART1_UART_Init();
+ /* USER CODE BEGIN 2 */
+
+ /* USER CODE END 2 */
+
+ /* Init scheduler */
+ osKernelInitialize(); /* Call init function for freertos objects (in freertos.c) */
+ MX_FREERTOS_Init();
+ /* Start scheduler */
+ osKernelStart();
+
+ /* We should never get here as control is now taken by the scheduler */
+ /* Infinite loop */
+ /* USER CODE BEGIN WHILE */
+ while(1) {
+ /* USER CODE END WHILE */
+
+ /* USER CODE BEGIN 3 */
+ }
+ /* USER CODE END 3 */
}
/**
* @brief System Clock Configuration
* @retval None
*/
-void SystemClock_Config(void)
-{
- LL_FLASH_SetLatency(LL_FLASH_LATENCY_3);
- while(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_3)
- {
- }
-
- /* HSE configuration and activation */
- LL_RCC_HSE_Enable();
- while(LL_RCC_HSE_IsReady() != 1)
- {
- }
-
- /* HSI configuration and activation */
- LL_RCC_HSI_Enable();
- while(LL_RCC_HSI_IsReady() != 1)
- {
- }
-
- LL_PWR_EnableBkUpAccess();
- if(LL_RCC_GetRTCClockSource() != LL_RCC_RTC_CLKSOURCE_LSE)
- {
- LL_RCC_ForceBackupDomainReset();
- LL_RCC_ReleaseBackupDomainReset();
- }
- LL_RCC_LSE_SetDriveCapability(LL_RCC_LSEDRIVE_MEDIUMLOW);
- LL_RCC_LSE_Enable();
-
- /* Wait till LSE is ready */
- while(LL_RCC_LSE_IsReady() != 1)
- {
- }
-
- LL_RCC_HSE_EnableCSS();
- LL_RCC_LSE_EnableCSS();
- /* Main PLL configuration and activation */
- LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 8, LL_RCC_PLLR_DIV_2);
- LL_RCC_PLL_Enable();
- LL_RCC_PLL_EnableDomain_SYS();
- while(LL_RCC_PLL_IsReady() != 1)
- {
- }
-
- LL_RCC_PLLSAI1_ConfigDomain_48M(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 6, LL_RCC_PLLSAI1Q_DIV_2);
- LL_RCC_PLLSAI1_ConfigDomain_ADC(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 6, LL_RCC_PLLSAI1R_DIV_2);
- LL_RCC_PLLSAI1_Enable();
- LL_RCC_PLLSAI1_EnableDomain_48M();
- LL_RCC_PLLSAI1_EnableDomain_ADC();
-
- /* Wait till PLLSAI1 is ready */
- while(LL_RCC_PLLSAI1_IsReady() != 1)
- {
- }
-
- /* Sysclk activation on the main PLL */
- /* Set CPU1 prescaler*/
- LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
-
- /* Set CPU2 prescaler*/
- LL_C2_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_2);
-
- LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);
- while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL)
- {
- }
-
- /* Set AHB SHARED prescaler*/
- LL_RCC_SetAHB4Prescaler(LL_RCC_SYSCLK_DIV_1);
-
- /* Set APB1 prescaler*/
- LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);
-
- /* Set APB2 prescaler*/
- LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);
-
- /* Disable MSI */
- LL_RCC_MSI_Disable();
- while(LL_RCC_MSI_IsReady() != 0)
- {
- }
-
- /* Update CMSIS variable (which can be updated also through SystemCoreClockUpdate function) */
- LL_SetSystemCoreClock(64000000);
-
- /* Update the time base */
- if (HAL_InitTick (TICK_INT_PRIORITY) != HAL_OK)
- {
- Error_Handler();
- }
- if(LL_RCC_GetRTCClockSource() != LL_RCC_RTC_CLKSOURCE_LSE)
- {
- LL_RCC_SetRTCClockSource(LL_RCC_RTC_CLKSOURCE_LSE);
- }
- LL_RCC_EnableRTC();
- LL_RCC_SetUSARTClockSource(LL_RCC_USART1_CLKSOURCE_PCLK2);
- LL_RCC_SetADCClockSource(LL_RCC_ADC_CLKSOURCE_PLLSAI1);
- LL_RCC_SetI2CClockSource(LL_RCC_I2C1_CLKSOURCE_PCLK1);
- LL_RCC_SetRNGClockSource(LL_RCC_RNG_CLKSOURCE_CLK48);
- LL_RCC_SetUSBClockSource(LL_RCC_USB_CLKSOURCE_PLLSAI1);
- LL_RCC_SetCLK48ClockSource(LL_RCC_CLK48_CLKSOURCE_PLLSAI1);
- LL_RCC_SetSMPSClockSource(LL_RCC_SMPS_CLKSOURCE_HSE);
- LL_RCC_SetSMPSPrescaler(LL_RCC_SMPS_DIV_1);
- LL_RCC_SetRFWKPClockSource(LL_RCC_RFWKP_CLKSOURCE_LSE);
- /* USER CODE BEGIN Smps */
-
- /* USER CODE END Smps */
+void SystemClock_Config(void) {
+ LL_FLASH_SetLatency(LL_FLASH_LATENCY_3);
+ while(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_3) {
+ }
+
+ /* HSE configuration and activation */
+ LL_RCC_HSE_Enable();
+ while(LL_RCC_HSE_IsReady() != 1) {
+ }
+
+ /* HSI configuration and activation */
+ LL_RCC_HSI_Enable();
+ while(LL_RCC_HSI_IsReady() != 1) {
+ }
+
+ LL_PWR_EnableBkUpAccess();
+ if(LL_RCC_GetRTCClockSource() != LL_RCC_RTC_CLKSOURCE_LSE) {
+ LL_RCC_ForceBackupDomainReset();
+ LL_RCC_ReleaseBackupDomainReset();
+ }
+ LL_RCC_LSE_SetDriveCapability(LL_RCC_LSEDRIVE_MEDIUMLOW);
+ LL_RCC_LSE_Enable();
+
+ /* Wait till LSE is ready */
+ while(LL_RCC_LSE_IsReady() != 1) {
+ }
+
+ LL_RCC_HSE_EnableCSS();
+ LL_RCC_LSE_EnableCSS();
+ /* Main PLL configuration and activation */
+ LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 8, LL_RCC_PLLR_DIV_2);
+ LL_RCC_PLL_Enable();
+ LL_RCC_PLL_EnableDomain_SYS();
+ while(LL_RCC_PLL_IsReady() != 1) {
+ }
+
+ LL_RCC_PLLSAI1_ConfigDomain_48M(
+ LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 6, LL_RCC_PLLSAI1Q_DIV_2);
+ LL_RCC_PLLSAI1_ConfigDomain_ADC(
+ LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 6, LL_RCC_PLLSAI1R_DIV_2);
+ LL_RCC_PLLSAI1_Enable();
+ LL_RCC_PLLSAI1_EnableDomain_48M();
+ LL_RCC_PLLSAI1_EnableDomain_ADC();
+
+ /* Wait till PLLSAI1 is ready */
+ while(LL_RCC_PLLSAI1_IsReady() != 1) {
+ }
+
+ /* Sysclk activation on the main PLL */
+ /* Set CPU1 prescaler*/
+ LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
+
+ /* Set CPU2 prescaler*/
+ LL_C2_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_2);
+
+ LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);
+ while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL) {
+ }
+
+ /* Set AHB SHARED prescaler*/
+ LL_RCC_SetAHB4Prescaler(LL_RCC_SYSCLK_DIV_1);
+
+ /* Set APB1 prescaler*/
+ LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);
+
+ /* Set APB2 prescaler*/
+ LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);
+
+ /* Disable MSI */
+ LL_RCC_MSI_Disable();
+ while(LL_RCC_MSI_IsReady() != 0) {
+ }
+
+ /* Update CMSIS variable (which can be updated also through SystemCoreClockUpdate function) */
+ LL_SetSystemCoreClock(64000000);
+
+ /* Update the time base */
+ if(HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK) {
+ Error_Handler();
+ }
+ if(LL_RCC_GetRTCClockSource() != LL_RCC_RTC_CLKSOURCE_LSE) {
+ LL_RCC_SetRTCClockSource(LL_RCC_RTC_CLKSOURCE_LSE);
+ }
+ LL_RCC_EnableRTC();
+ LL_RCC_SetUSARTClockSource(LL_RCC_USART1_CLKSOURCE_PCLK2);
+ LL_RCC_SetADCClockSource(LL_RCC_ADC_CLKSOURCE_PLLSAI1);
+ LL_RCC_SetI2CClockSource(LL_RCC_I2C1_CLKSOURCE_PCLK1);
+ LL_RCC_SetRNGClockSource(LL_RCC_RNG_CLKSOURCE_CLK48);
+ LL_RCC_SetUSBClockSource(LL_RCC_USB_CLKSOURCE_PLLSAI1);
+ LL_RCC_SetCLK48ClockSource(LL_RCC_CLK48_CLKSOURCE_PLLSAI1);
+ LL_RCC_SetSMPSClockSource(LL_RCC_SMPS_CLKSOURCE_HSE);
+ LL_RCC_SetSMPSPrescaler(LL_RCC_SMPS_DIV_1);
+ LL_RCC_SetRFWKPClockSource(LL_RCC_RFWKP_CLKSOURCE_LSE);
+ /* USER CODE BEGIN Smps */
+
+ /* USER CODE END Smps */
}
/* USER CODE BEGIN 4 */
@@ -259,18 +247,16 @@ void SystemClock_Config(void)
* @brief This function is executed in case of error occurrence.
* @retval None
*/
-void Error_Handler(void)
-{
- /* USER CODE BEGIN Error_Handler_Debug */
- /* User can add his own implementation to report the HAL error return state */
- __disable_irq();
- while (1)
- {
- }
- /* USER CODE END Error_Handler_Debug */
+void Error_Handler(void) {
+ /* USER CODE BEGIN Error_Handler_Debug */
+ /* User can add his own implementation to report the HAL error return state */
+ __disable_irq();
+ while(1) {
+ }
+ /* USER CODE END Error_Handler_Debug */
}
-#ifdef USE_FULL_ASSERT
+#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
@@ -278,12 +264,11 @@ void Error_Handler(void)
* @param line: assert_param error line source number
* @retval None
*/
-void assert_failed(uint8_t *file, uint32_t line)
-{
- /* USER CODE BEGIN 6 */
- /* User can add his own implementation to report the file name and line number,
+void assert_failed(uint8_t* file, uint32_t line) {
+ /* USER CODE BEGIN 6 */
+ /* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
- /* USER CODE END 6 */
+ /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */
diff --git a/firmware/targets/f7/cube/Src/pka.c b/firmware/targets/f7/cube/Src/pka.c
index 0655c2e6..6a581317 100644
--- a/firmware/targets/f7/cube/Src/pka.c
+++ b/firmware/targets/f7/cube/Src/pka.c
@@ -27,57 +27,47 @@
PKA_HandleTypeDef hpka;
/* PKA init function */
-void MX_PKA_Init(void)
-{
+void MX_PKA_Init(void) {
+ /* USER CODE BEGIN PKA_Init 0 */
- /* USER CODE BEGIN PKA_Init 0 */
+ /* USER CODE END PKA_Init 0 */
- /* USER CODE END PKA_Init 0 */
+ /* USER CODE BEGIN PKA_Init 1 */
- /* USER CODE BEGIN PKA_Init 1 */
-
- /* USER CODE END PKA_Init 1 */
- hpka.Instance = PKA;
- if (HAL_PKA_Init(&hpka) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN PKA_Init 2 */
-
- /* USER CODE END PKA_Init 2 */
+ /* USER CODE END PKA_Init 1 */
+ hpka.Instance = PKA;
+ if(HAL_PKA_Init(&hpka) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN PKA_Init 2 */
+ /* USER CODE END PKA_Init 2 */
}
-void HAL_PKA_MspInit(PKA_HandleTypeDef* pkaHandle)
-{
+void HAL_PKA_MspInit(PKA_HandleTypeDef* pkaHandle) {
+ if(pkaHandle->Instance == PKA) {
+ /* USER CODE BEGIN PKA_MspInit 0 */
- if(pkaHandle->Instance==PKA)
- {
- /* USER CODE BEGIN PKA_MspInit 0 */
+ /* USER CODE END PKA_MspInit 0 */
+ /* PKA clock enable */
+ __HAL_RCC_PKA_CLK_ENABLE();
+ /* USER CODE BEGIN PKA_MspInit 1 */
- /* USER CODE END PKA_MspInit 0 */
- /* PKA clock enable */
- __HAL_RCC_PKA_CLK_ENABLE();
- /* USER CODE BEGIN PKA_MspInit 1 */
-
- /* USER CODE END PKA_MspInit 1 */
- }
+ /* USER CODE END PKA_MspInit 1 */
+ }
}
-void HAL_PKA_MspDeInit(PKA_HandleTypeDef* pkaHandle)
-{
-
- if(pkaHandle->Instance==PKA)
- {
- /* USER CODE BEGIN PKA_MspDeInit 0 */
+void HAL_PKA_MspDeInit(PKA_HandleTypeDef* pkaHandle) {
+ if(pkaHandle->Instance == PKA) {
+ /* USER CODE BEGIN PKA_MspDeInit 0 */
- /* USER CODE END PKA_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_PKA_CLK_DISABLE();
- /* USER CODE BEGIN PKA_MspDeInit 1 */
+ /* USER CODE END PKA_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_PKA_CLK_DISABLE();
+ /* USER CODE BEGIN PKA_MspDeInit 1 */
- /* USER CODE END PKA_MspDeInit 1 */
- }
+ /* USER CODE END PKA_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f7/cube/Src/rf.c b/firmware/targets/f7/cube/Src/rf.c
index a23e20d7..eaa4ba67 100644
--- a/firmware/targets/f7/cube/Src/rf.c
+++ b/firmware/targets/f7/cube/Src/rf.c
@@ -25,20 +25,17 @@
/* USER CODE END 0 */
/* RF init function */
-void MX_RF_Init(void)
-{
+void MX_RF_Init(void) {
+ /* USER CODE BEGIN RF_Init 0 */
- /* USER CODE BEGIN RF_Init 0 */
+ /* USER CODE END RF_Init 0 */
- /* USER CODE END RF_Init 0 */
+ /* USER CODE BEGIN RF_Init 1 */
- /* USER CODE BEGIN RF_Init 1 */
-
- /* USER CODE END RF_Init 1 */
- /* USER CODE BEGIN RF_Init 2 */
-
- /* USER CODE END RF_Init 2 */
+ /* USER CODE END RF_Init 1 */
+ /* USER CODE BEGIN RF_Init 2 */
+ /* USER CODE END RF_Init 2 */
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f7/cube/Src/rng.c b/firmware/targets/f7/cube/Src/rng.c
index dbf929ec..bab1b278 100644
--- a/firmware/targets/f7/cube/Src/rng.c
+++ b/firmware/targets/f7/cube/Src/rng.c
@@ -27,58 +27,48 @@
RNG_HandleTypeDef hrng;
/* RNG init function */
-void MX_RNG_Init(void)
-{
+void MX_RNG_Init(void) {
+ /* USER CODE BEGIN RNG_Init 0 */
- /* USER CODE BEGIN RNG_Init 0 */
+ /* USER CODE END RNG_Init 0 */
- /* USER CODE END RNG_Init 0 */
+ /* USER CODE BEGIN RNG_Init 1 */
- /* USER CODE BEGIN RNG_Init 1 */
-
- /* USER CODE END RNG_Init 1 */
- hrng.Instance = RNG;
- hrng.Init.ClockErrorDetection = RNG_CED_ENABLE;
- if (HAL_RNG_Init(&hrng) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN RNG_Init 2 */
-
- /* USER CODE END RNG_Init 2 */
+ /* USER CODE END RNG_Init 1 */
+ hrng.Instance = RNG;
+ hrng.Init.ClockErrorDetection = RNG_CED_ENABLE;
+ if(HAL_RNG_Init(&hrng) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN RNG_Init 2 */
+ /* USER CODE END RNG_Init 2 */
}
-void HAL_RNG_MspInit(RNG_HandleTypeDef* rngHandle)
-{
+void HAL_RNG_MspInit(RNG_HandleTypeDef* rngHandle) {
+ if(rngHandle->Instance == RNG) {
+ /* USER CODE BEGIN RNG_MspInit 0 */
- if(rngHandle->Instance==RNG)
- {
- /* USER CODE BEGIN RNG_MspInit 0 */
+ /* USER CODE END RNG_MspInit 0 */
+ /* RNG clock enable */
+ __HAL_RCC_RNG_CLK_ENABLE();
+ /* USER CODE BEGIN RNG_MspInit 1 */
- /* USER CODE END RNG_MspInit 0 */
- /* RNG clock enable */
- __HAL_RCC_RNG_CLK_ENABLE();
- /* USER CODE BEGIN RNG_MspInit 1 */
-
- /* USER CODE END RNG_MspInit 1 */
- }
+ /* USER CODE END RNG_MspInit 1 */
+ }
}
-void HAL_RNG_MspDeInit(RNG_HandleTypeDef* rngHandle)
-{
-
- if(rngHandle->Instance==RNG)
- {
- /* USER CODE BEGIN RNG_MspDeInit 0 */
+void HAL_RNG_MspDeInit(RNG_HandleTypeDef* rngHandle) {
+ if(rngHandle->Instance == RNG) {
+ /* USER CODE BEGIN RNG_MspDeInit 0 */
- /* USER CODE END RNG_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_RNG_CLK_DISABLE();
- /* USER CODE BEGIN RNG_MspDeInit 1 */
+ /* USER CODE END RNG_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_RNG_CLK_DISABLE();
+ /* USER CODE BEGIN RNG_MspDeInit 1 */
- /* USER CODE END RNG_MspDeInit 1 */
- }
+ /* USER CODE END RNG_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f7/cube/Src/rtc.c b/firmware/targets/f7/cube/Src/rtc.c
index 91e92390..416159f8 100644
--- a/firmware/targets/f7/cube/Src/rtc.c
+++ b/firmware/targets/f7/cube/Src/rtc.c
@@ -27,104 +27,92 @@
RTC_HandleTypeDef hrtc;
/* RTC init function */
-void MX_RTC_Init(void)
-{
+void MX_RTC_Init(void) {
+ /* USER CODE BEGIN RTC_Init 0 */
- /* USER CODE BEGIN RTC_Init 0 */
+ /* USER CODE END RTC_Init 0 */
- /* USER CODE END RTC_Init 0 */
+ RTC_TimeTypeDef sTime = {0};
+ RTC_DateTypeDef sDate = {0};
- RTC_TimeTypeDef sTime = {0};
- RTC_DateTypeDef sDate = {0};
+ /* USER CODE BEGIN RTC_Init 1 */
- /* USER CODE BEGIN RTC_Init 1 */
-
- /* USER CODE END RTC_Init 1 */
- /** Initialize RTC Only
+ /* USER CODE END RTC_Init 1 */
+ /** Initialize RTC Only
*/
- hrtc.Instance = RTC;
- hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
- hrtc.Init.AsynchPrediv = 127;
- hrtc.Init.SynchPrediv = 255;
- hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
- hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
- hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
- hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
- if (HAL_RTC_Init(&hrtc) != HAL_OK)
- {
- Error_Handler();
- }
-
- /* USER CODE BEGIN Check_RTC_BKUP */
-
- /* USER CODE END Check_RTC_BKUP */
-
- /** Initialize RTC and set the Time and Date
+ hrtc.Instance = RTC;
+ hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
+ hrtc.Init.AsynchPrediv = 127;
+ hrtc.Init.SynchPrediv = 255;
+ hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
+ hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
+ hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
+ hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
+ if(HAL_RTC_Init(&hrtc) != HAL_OK) {
+ Error_Handler();
+ }
+
+ /* USER CODE BEGIN Check_RTC_BKUP */
+
+ /* USER CODE END Check_RTC_BKUP */
+
+ /** Initialize RTC and set the Time and Date
*/
- sTime.Hours = 0x0;
- sTime.Minutes = 0x0;
- sTime.Seconds = 0x0;
- sTime.SubSeconds = 0x0;
- sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
- sTime.StoreOperation = RTC_STOREOPERATION_RESET;
- if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
- {
- Error_Handler();
- }
- sDate.WeekDay = RTC_WEEKDAY_MONDAY;
- sDate.Month = RTC_MONTH_JANUARY;
- sDate.Date = 0x1;
- sDate.Year = 0x0;
-
- if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN RTC_Init 2 */
-
- /* USER CODE END RTC_Init 2 */
-
+ sTime.Hours = 0x0;
+ sTime.Minutes = 0x0;
+ sTime.Seconds = 0x0;
+ sTime.SubSeconds = 0x0;
+ sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
+ sTime.StoreOperation = RTC_STOREOPERATION_RESET;
+ if(HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK) {
+ Error_Handler();
+ }
+ sDate.WeekDay = RTC_WEEKDAY_MONDAY;
+ sDate.Month = RTC_MONTH_JANUARY;
+ sDate.Date = 0x1;
+ sDate.Year = 0x0;
+
+ if(HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN RTC_Init 2 */
+
+ /* USER CODE END RTC_Init 2 */
}
-void HAL_RTC_MspInit(RTC_HandleTypeDef* rtcHandle)
-{
+void HAL_RTC_MspInit(RTC_HandleTypeDef* rtcHandle) {
+ if(rtcHandle->Instance == RTC) {
+ /* USER CODE BEGIN RTC_MspInit 0 */
- if(rtcHandle->Instance==RTC)
- {
- /* USER CODE BEGIN RTC_MspInit 0 */
+ /* USER CODE END RTC_MspInit 0 */
+ /* RTC clock enable */
+ __HAL_RCC_RTC_ENABLE();
+ __HAL_RCC_RTCAPB_CLK_ENABLE();
- /* USER CODE END RTC_MspInit 0 */
- /* RTC clock enable */
- __HAL_RCC_RTC_ENABLE();
- __HAL_RCC_RTCAPB_CLK_ENABLE();
+ /* RTC interrupt Init */
+ HAL_NVIC_SetPriority(TAMP_STAMP_LSECSS_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(TAMP_STAMP_LSECSS_IRQn);
+ /* USER CODE BEGIN RTC_MspInit 1 */
- /* RTC interrupt Init */
- HAL_NVIC_SetPriority(TAMP_STAMP_LSECSS_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(TAMP_STAMP_LSECSS_IRQn);
- /* USER CODE BEGIN RTC_MspInit 1 */
-
- /* USER CODE END RTC_MspInit 1 */
- }
+ /* USER CODE END RTC_MspInit 1 */
+ }
}
-void HAL_RTC_MspDeInit(RTC_HandleTypeDef* rtcHandle)
-{
-
- if(rtcHandle->Instance==RTC)
- {
- /* USER CODE BEGIN RTC_MspDeInit 0 */
+void HAL_RTC_MspDeInit(RTC_HandleTypeDef* rtcHandle) {
+ if(rtcHandle->Instance == RTC) {
+ /* USER CODE BEGIN RTC_MspDeInit 0 */
- /* USER CODE END RTC_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_RTC_DISABLE();
- __HAL_RCC_RTCAPB_CLK_DISABLE();
+ /* USER CODE END RTC_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_RTC_DISABLE();
+ __HAL_RCC_RTCAPB_CLK_DISABLE();
- /* RTC interrupt Deinit */
- HAL_NVIC_DisableIRQ(TAMP_STAMP_LSECSS_IRQn);
- /* USER CODE BEGIN RTC_MspDeInit 1 */
+ /* RTC interrupt Deinit */
+ HAL_NVIC_DisableIRQ(TAMP_STAMP_LSECSS_IRQn);
+ /* USER CODE BEGIN RTC_MspDeInit 1 */
- /* USER CODE END RTC_MspDeInit 1 */
- }
+ /* USER CODE END RTC_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f7/cube/Src/spi.c b/firmware/targets/f7/cube/Src/spi.c
index 09e07d21..329bc3bb 100644
--- a/firmware/targets/f7/cube/Src/spi.c
+++ b/firmware/targets/f7/cube/Src/spi.c
@@ -28,201 +28,183 @@ SPI_HandleTypeDef hspi1;
SPI_HandleTypeDef hspi2;
/* SPI1 init function */
-void MX_SPI1_Init(void)
-{
-
- /* USER CODE BEGIN SPI1_Init 0 */
-
- /* USER CODE END SPI1_Init 0 */
-
- /* USER CODE BEGIN SPI1_Init 1 */
-
- /* USER CODE END SPI1_Init 1 */
- hspi1.Instance = SPI1;
- hspi1.Init.Mode = SPI_MODE_MASTER;
- hspi1.Init.Direction = SPI_DIRECTION_2LINES;
- hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
- hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
- hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
- hspi1.Init.NSS = SPI_NSS_SOFT;
- hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
- hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
- hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
- hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
- hspi1.Init.CRCPolynomial = 7;
- hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
- hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
- if (HAL_SPI_Init(&hspi1) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN SPI1_Init 2 */
-
- /* USER CODE END SPI1_Init 2 */
-
+void MX_SPI1_Init(void) {
+ /* USER CODE BEGIN SPI1_Init 0 */
+
+ /* USER CODE END SPI1_Init 0 */
+
+ /* USER CODE BEGIN SPI1_Init 1 */
+
+ /* USER CODE END SPI1_Init 1 */
+ hspi1.Instance = SPI1;
+ hspi1.Init.Mode = SPI_MODE_MASTER;
+ hspi1.Init.Direction = SPI_DIRECTION_2LINES;
+ hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
+ hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
+ hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
+ hspi1.Init.NSS = SPI_NSS_SOFT;
+ hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
+ hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
+ hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
+ hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
+ hspi1.Init.CRCPolynomial = 7;
+ hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
+ hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
+ if(HAL_SPI_Init(&hspi1) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN SPI1_Init 2 */
+
+ /* USER CODE END SPI1_Init 2 */
}
/* SPI2 init function */
-void MX_SPI2_Init(void)
-{
-
- /* USER CODE BEGIN SPI2_Init 0 */
-
- /* USER CODE END SPI2_Init 0 */
-
- /* USER CODE BEGIN SPI2_Init 1 */
-
- /* USER CODE END SPI2_Init 1 */
- hspi2.Instance = SPI2;
- hspi2.Init.Mode = SPI_MODE_MASTER;
- hspi2.Init.Direction = SPI_DIRECTION_2LINES;
- hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
- hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
- hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
- hspi2.Init.NSS = SPI_NSS_SOFT;
- hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
- hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
- hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
- hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
- hspi2.Init.CRCPolynomial = 7;
- hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
- hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
- if (HAL_SPI_Init(&hspi2) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN SPI2_Init 2 */
-
- /* USER CODE END SPI2_Init 2 */
-
+void MX_SPI2_Init(void) {
+ /* USER CODE BEGIN SPI2_Init 0 */
+
+ /* USER CODE END SPI2_Init 0 */
+
+ /* USER CODE BEGIN SPI2_Init 1 */
+
+ /* USER CODE END SPI2_Init 1 */
+ hspi2.Instance = SPI2;
+ hspi2.Init.Mode = SPI_MODE_MASTER;
+ hspi2.Init.Direction = SPI_DIRECTION_2LINES;
+ hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
+ hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
+ hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
+ hspi2.Init.NSS = SPI_NSS_SOFT;
+ hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
+ hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
+ hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
+ hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
+ hspi2.Init.CRCPolynomial = 7;
+ hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
+ hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
+ if(HAL_SPI_Init(&hspi2) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN SPI2_Init 2 */
+
+ /* USER CODE END SPI2_Init 2 */
}
-void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
-{
+void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle) {
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ if(spiHandle->Instance == SPI1) {
+ /* USER CODE BEGIN SPI1_MspInit 0 */
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- if(spiHandle->Instance==SPI1)
- {
- /* USER CODE BEGIN SPI1_MspInit 0 */
+ /* USER CODE END SPI1_MspInit 0 */
+ /* SPI1 clock enable */
+ __HAL_RCC_SPI1_CLK_ENABLE();
- /* USER CODE END SPI1_MspInit 0 */
- /* SPI1 clock enable */
- __HAL_RCC_SPI1_CLK_ENABLE();
-
- __HAL_RCC_GPIOA_CLK_ENABLE();
- __HAL_RCC_GPIOB_CLK_ENABLE();
- /**SPI1 GPIO Configuration
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ /**SPI1 GPIO Configuration
PA5 ------> SPI1_SCK
PB4 ------> SPI1_MISO
PB5 ------> SPI1_MOSI
*/
- GPIO_InitStruct.Pin = SPI_R_SCK_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
- HAL_GPIO_Init(SPI_R_SCK_GPIO_Port, &GPIO_InitStruct);
-
- GPIO_InitStruct.Pin = SPI_R_MISO_Pin|SPI_R_MOSI_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-
- /* USER CODE BEGIN SPI1_MspInit 1 */
-
- /* USER CODE END SPI1_MspInit 1 */
- }
- else if(spiHandle->Instance==SPI2)
- {
- /* USER CODE BEGIN SPI2_MspInit 0 */
-
- /* USER CODE END SPI2_MspInit 0 */
- /* SPI2 clock enable */
- __HAL_RCC_SPI2_CLK_ENABLE();
-
- __HAL_RCC_GPIOC_CLK_ENABLE();
- __HAL_RCC_GPIOB_CLK_ENABLE();
- __HAL_RCC_GPIOD_CLK_ENABLE();
- /**SPI2 GPIO Configuration
+ GPIO_InitStruct.Pin = SPI_R_SCK_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
+ HAL_GPIO_Init(SPI_R_SCK_GPIO_Port, &GPIO_InitStruct);
+
+ GPIO_InitStruct.Pin = SPI_R_MISO_Pin | SPI_R_MOSI_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
+ /* USER CODE BEGIN SPI1_MspInit 1 */
+
+ /* USER CODE END SPI1_MspInit 1 */
+ } else if(spiHandle->Instance == SPI2) {
+ /* USER CODE BEGIN SPI2_MspInit 0 */
+
+ /* USER CODE END SPI2_MspInit 0 */
+ /* SPI2 clock enable */
+ __HAL_RCC_SPI2_CLK_ENABLE();
+
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ __HAL_RCC_GPIOD_CLK_ENABLE();
+ /**SPI2 GPIO Configuration
PC2 ------> SPI2_MISO
PB15 ------> SPI2_MOSI
PD1 ------> SPI2_SCK
*/
- GPIO_InitStruct.Pin = SPI_D_MISO_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
- HAL_GPIO_Init(SPI_D_MISO_GPIO_Port, &GPIO_InitStruct);
-
- GPIO_InitStruct.Pin = SPI_D_MOSI_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
- HAL_GPIO_Init(SPI_D_MOSI_GPIO_Port, &GPIO_InitStruct);
-
- GPIO_InitStruct.Pin = SPI_D_SCK_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
- HAL_GPIO_Init(SPI_D_SCK_GPIO_Port, &GPIO_InitStruct);
-
- /* USER CODE BEGIN SPI2_MspInit 1 */
-
- /* USER CODE END SPI2_MspInit 1 */
- }
+ GPIO_InitStruct.Pin = SPI_D_MISO_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
+ HAL_GPIO_Init(SPI_D_MISO_GPIO_Port, &GPIO_InitStruct);
+
+ GPIO_InitStruct.Pin = SPI_D_MOSI_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
+ HAL_GPIO_Init(SPI_D_MOSI_GPIO_Port, &GPIO_InitStruct);
+
+ GPIO_InitStruct.Pin = SPI_D_SCK_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
+ HAL_GPIO_Init(SPI_D_SCK_GPIO_Port, &GPIO_InitStruct);
+
+ /* USER CODE BEGIN SPI2_MspInit 1 */
+
+ /* USER CODE END SPI2_MspInit 1 */
+ }
}
-void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
-{
-
- if(spiHandle->Instance==SPI1)
- {
- /* USER CODE BEGIN SPI1_MspDeInit 0 */
+void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle) {
+ if(spiHandle->Instance == SPI1) {
+ /* USER CODE BEGIN SPI1_MspDeInit 0 */
- /* USER CODE END SPI1_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_SPI1_CLK_DISABLE();
+ /* USER CODE END SPI1_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_SPI1_CLK_DISABLE();
- /**SPI1 GPIO Configuration
+ /**SPI1 GPIO Configuration
PA5 ------> SPI1_SCK
PB4 ------> SPI1_MISO
PB5 ------> SPI1_MOSI
*/
- HAL_GPIO_DeInit(SPI_R_SCK_GPIO_Port, SPI_R_SCK_Pin);
+ HAL_GPIO_DeInit(SPI_R_SCK_GPIO_Port, SPI_R_SCK_Pin);
- HAL_GPIO_DeInit(GPIOB, SPI_R_MISO_Pin|SPI_R_MOSI_Pin);
+ HAL_GPIO_DeInit(GPIOB, SPI_R_MISO_Pin | SPI_R_MOSI_Pin);
- /* USER CODE BEGIN SPI1_MspDeInit 1 */
+ /* USER CODE BEGIN SPI1_MspDeInit 1 */
- /* USER CODE END SPI1_MspDeInit 1 */
- }
- else if(spiHandle->Instance==SPI2)
- {
- /* USER CODE BEGIN SPI2_MspDeInit 0 */
+ /* USER CODE END SPI1_MspDeInit 1 */
+ } else if(spiHandle->Instance == SPI2) {
+ /* USER CODE BEGIN SPI2_MspDeInit 0 */
- /* USER CODE END SPI2_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_SPI2_CLK_DISABLE();
+ /* USER CODE END SPI2_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_SPI2_CLK_DISABLE();
- /**SPI2 GPIO Configuration
+ /**SPI2 GPIO Configuration
PC2 ------> SPI2_MISO
PB15 ------> SPI2_MOSI
PD1 ------> SPI2_SCK
*/
- HAL_GPIO_DeInit(SPI_D_MISO_GPIO_Port, SPI_D_MISO_Pin);
+ HAL_GPIO_DeInit(SPI_D_MISO_GPIO_Port, SPI_D_MISO_Pin);
- HAL_GPIO_DeInit(SPI_D_MOSI_GPIO_Port, SPI_D_MOSI_Pin);
+ HAL_GPIO_DeInit(SPI_D_MOSI_GPIO_Port, SPI_D_MOSI_Pin);
- HAL_GPIO_DeInit(SPI_D_SCK_GPIO_Port, SPI_D_SCK_Pin);
+ HAL_GPIO_DeInit(SPI_D_SCK_GPIO_Port, SPI_D_SCK_Pin);
- /* USER CODE BEGIN SPI2_MspDeInit 1 */
+ /* USER CODE BEGIN SPI2_MspDeInit 1 */
- /* USER CODE END SPI2_MspDeInit 1 */
- }
+ /* USER CODE END SPI2_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f7/cube/Src/stm32wbxx_hal_msp.c b/firmware/targets/f7/cube/Src/stm32wbxx_hal_msp.c
index 0dca1166..90ef3c3f 100644
--- a/firmware/targets/f7/cube/Src/stm32wbxx_hal_msp.c
+++ b/firmware/targets/f7/cube/Src/stm32wbxx_hal_msp.c
@@ -61,29 +61,28 @@
/**
* Initializes the Global MSP.
*/
-void HAL_MspInit(void)
-{
- /* USER CODE BEGIN MspInit 0 */
+void HAL_MspInit(void) {
+ /* USER CODE BEGIN MspInit 0 */
- /* USER CODE END MspInit 0 */
+ /* USER CODE END MspInit 0 */
- __HAL_RCC_HSEM_CLK_ENABLE();
+ __HAL_RCC_HSEM_CLK_ENABLE();
- /* System interrupt init*/
- /* PendSV_IRQn interrupt configuration */
- HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0);
+ /* System interrupt init*/
+ /* PendSV_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0);
- /* Peripheral interrupt init */
- /* RCC_IRQn interrupt configuration */
- HAL_NVIC_SetPriority(RCC_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(RCC_IRQn);
- /* HSEM_IRQn interrupt configuration */
- HAL_NVIC_SetPriority(HSEM_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(HSEM_IRQn);
+ /* Peripheral interrupt init */
+ /* RCC_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(RCC_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(RCC_IRQn);
+ /* HSEM_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(HSEM_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(HSEM_IRQn);
- /* USER CODE BEGIN MspInit 1 */
+ /* USER CODE BEGIN MspInit 1 */
- /* USER CODE END MspInit 1 */
+ /* USER CODE END MspInit 1 */
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f7/cube/Src/stm32wbxx_it.c b/firmware/targets/f7/cube/Src/stm32wbxx_it.c
index 6a037871..57f420fb 100644
--- a/firmware/targets/f7/cube/Src/stm32wbxx_it.c
+++ b/firmware/targets/f7/cube/Src/stm32wbxx_it.c
@@ -74,102 +74,90 @@ extern TIM_HandleTypeDef htim2;
/**
* @brief This function handles Non maskable interrupt.
*/
-void NMI_Handler(void)
-{
- /* USER CODE BEGIN NonMaskableInt_IRQn 0 */
-
- /* USER CODE END NonMaskableInt_IRQn 0 */
- /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
- while (1)
- {
- }
- /* USER CODE END NonMaskableInt_IRQn 1 */
+void NMI_Handler(void) {
+ /* USER CODE BEGIN NonMaskableInt_IRQn 0 */
+
+ /* USER CODE END NonMaskableInt_IRQn 0 */
+ /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
+ while(1) {
+ }
+ /* USER CODE END NonMaskableInt_IRQn 1 */
}
/**
* @brief This function handles Hard fault interrupt.
*/
-void HardFault_Handler(void)
-{
- /* USER CODE BEGIN HardFault_IRQn 0 */
-
- /* USER CODE END HardFault_IRQn 0 */
- while (1)
- {
- /* USER CODE BEGIN W1_HardFault_IRQn 0 */
- /* USER CODE END W1_HardFault_IRQn 0 */
- }
+void HardFault_Handler(void) {
+ /* USER CODE BEGIN HardFault_IRQn 0 */
+
+ /* USER CODE END HardFault_IRQn 0 */
+ while(1) {
+ /* USER CODE BEGIN W1_HardFault_IRQn 0 */
+ /* USER CODE END W1_HardFault_IRQn 0 */
+ }
}
/**
* @brief This function handles Memory management fault.
*/
-void MemManage_Handler(void)
-{
- /* USER CODE BEGIN MemoryManagement_IRQn 0 */
-
- /* USER CODE END MemoryManagement_IRQn 0 */
- while (1)
- {
- /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */
- /* USER CODE END W1_MemoryManagement_IRQn 0 */
- }
+void MemManage_Handler(void) {
+ /* USER CODE BEGIN MemoryManagement_IRQn 0 */
+
+ /* USER CODE END MemoryManagement_IRQn 0 */
+ while(1) {
+ /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */
+ /* USER CODE END W1_MemoryManagement_IRQn 0 */
+ }
}
/**
* @brief This function handles Prefetch fault, memory access fault.
*/
-void BusFault_Handler(void)
-{
- /* USER CODE BEGIN BusFault_IRQn 0 */
-
- /* USER CODE END BusFault_IRQn 0 */
- while (1)
- {
- /* USER CODE BEGIN W1_BusFault_IRQn 0 */
- /* USER CODE END W1_BusFault_IRQn 0 */
- }
+void BusFault_Handler(void) {
+ /* USER CODE BEGIN BusFault_IRQn 0 */
+
+ /* USER CODE END BusFault_IRQn 0 */
+ while(1) {
+ /* USER CODE BEGIN W1_BusFault_IRQn 0 */
+ /* USER CODE END W1_BusFault_IRQn 0 */
+ }
}
/**
* @brief This function handles Undefined instruction or illegal state.
*/
-void UsageFault_Handler(void)
-{
- /* USER CODE BEGIN UsageFault_IRQn 0 */
-
- /* USER CODE END UsageFault_IRQn 0 */
- while (1)
- {
- /* USER CODE BEGIN W1_UsageFault_IRQn 0 */
- /* USER CODE END W1_UsageFault_IRQn 0 */
- }
+void UsageFault_Handler(void) {
+ /* USER CODE BEGIN UsageFault_IRQn 0 */
+
+ /* USER CODE END UsageFault_IRQn 0 */
+ while(1) {
+ /* USER CODE BEGIN W1_UsageFault_IRQn 0 */
+ /* USER CODE END W1_UsageFault_IRQn 0 */
+ }
}
/**
* @brief This function handles Debug monitor.
*/
-void DebugMon_Handler(void)
-{
- /* USER CODE BEGIN DebugMonitor_IRQn 0 */
+void DebugMon_Handler(void) {
+ /* USER CODE BEGIN DebugMonitor_IRQn 0 */
- /* USER CODE END DebugMonitor_IRQn 0 */
- /* USER CODE BEGIN DebugMonitor_IRQn 1 */
+ /* USER CODE END DebugMonitor_IRQn 0 */
+ /* USER CODE BEGIN DebugMonitor_IRQn 1 */
- /* USER CODE END DebugMonitor_IRQn 1 */
+ /* USER CODE END DebugMonitor_IRQn 1 */
}
/**
* @brief This function handles System tick timer.
*/
-void SysTick_Handler(void)
-{
- /* USER CODE BEGIN SysTick_IRQn 0 */
+void SysTick_Handler(void) {
+ /* USER CODE BEGIN SysTick_IRQn 0 */
- /* USER CODE END SysTick_IRQn 0 */
- /* USER CODE BEGIN SysTick_IRQn 1 */
+ /* USER CODE END SysTick_IRQn 0 */
+ /* USER CODE BEGIN SysTick_IRQn 1 */
- /* USER CODE END SysTick_IRQn 1 */
+ /* USER CODE END SysTick_IRQn 1 */
}
/******************************************************************************/
@@ -182,142 +170,132 @@ void SysTick_Handler(void)
/**
* @brief This function handles RTC tamper and time stamp, CSS on LSE interrupts through EXTI line 18.
*/
-void TAMP_STAMP_LSECSS_IRQHandler(void)
-{
- /* USER CODE BEGIN TAMP_STAMP_LSECSS_IRQn 0 */
+void TAMP_STAMP_LSECSS_IRQHandler(void) {
+ /* USER CODE BEGIN TAMP_STAMP_LSECSS_IRQn 0 */
- /* USER CODE END TAMP_STAMP_LSECSS_IRQn 0 */
- /* USER CODE BEGIN TAMP_STAMP_LSECSS_IRQn 1 */
+ /* USER CODE END TAMP_STAMP_LSECSS_IRQn 0 */
+ /* USER CODE BEGIN TAMP_STAMP_LSECSS_IRQn 1 */
- /* USER CODE END TAMP_STAMP_LSECSS_IRQn 1 */
+ /* USER CODE END TAMP_STAMP_LSECSS_IRQn 1 */
}
/**
* @brief This function handles RCC global interrupt.
*/
-void RCC_IRQHandler(void)
-{
- /* USER CODE BEGIN RCC_IRQn 0 */
+void RCC_IRQHandler(void) {
+ /* USER CODE BEGIN RCC_IRQn 0 */
- /* USER CODE END RCC_IRQn 0 */
- /* USER CODE BEGIN RCC_IRQn 1 */
+ /* USER CODE END RCC_IRQn 0 */
+ /* USER CODE BEGIN RCC_IRQn 1 */
- /* USER CODE END RCC_IRQn 1 */
+ /* USER CODE END RCC_IRQn 1 */
}
/**
* @brief This function handles EXTI line3 interrupt.
*/
-void EXTI3_IRQHandler(void)
-{
- /* USER CODE BEGIN EXTI3_IRQn 0 */
+void EXTI3_IRQHandler(void) {
+ /* USER CODE BEGIN EXTI3_IRQn 0 */
- /* USER CODE END EXTI3_IRQn 0 */
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
- /* USER CODE BEGIN EXTI3_IRQn 1 */
+ /* USER CODE END EXTI3_IRQn 0 */
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
+ /* USER CODE BEGIN EXTI3_IRQn 1 */
- /* USER CODE END EXTI3_IRQn 1 */
+ /* USER CODE END EXTI3_IRQn 1 */
}
/**
* @brief This function handles ADC1 global interrupt.
*/
-void ADC1_IRQHandler(void)
-{
- /* USER CODE BEGIN ADC1_IRQn 0 */
+void ADC1_IRQHandler(void) {
+ /* USER CODE BEGIN ADC1_IRQn 0 */
- /* USER CODE END ADC1_IRQn 0 */
- HAL_ADC_IRQHandler(&hadc1);
- /* USER CODE BEGIN ADC1_IRQn 1 */
+ /* USER CODE END ADC1_IRQn 0 */
+ HAL_ADC_IRQHandler(&hadc1);
+ /* USER CODE BEGIN ADC1_IRQn 1 */
- /* USER CODE END ADC1_IRQn 1 */
+ /* USER CODE END ADC1_IRQn 1 */
}
/**
* @brief This function handles USB low priority interrupt, USB wake-up interrupt through EXTI line 28.
*/
-void USB_LP_IRQHandler(void)
-{
- /* USER CODE BEGIN USB_LP_IRQn 0 */
+void USB_LP_IRQHandler(void) {
+ /* USER CODE BEGIN USB_LP_IRQn 0 */
- /* USER CODE END USB_LP_IRQn 0 */
- HAL_PCD_IRQHandler(&hpcd_USB_FS);
- /* USER CODE BEGIN USB_LP_IRQn 1 */
+ /* USER CODE END USB_LP_IRQn 0 */
+ HAL_PCD_IRQHandler(&hpcd_USB_FS);
+ /* USER CODE BEGIN USB_LP_IRQn 1 */
- /* USER CODE END USB_LP_IRQn 1 */
+ /* USER CODE END USB_LP_IRQn 1 */
}
/**
* @brief This function handles COMP1 and COMP2 interrupts through EXTI lines 20 and 21.
*/
-void COMP_IRQHandler(void)
-{
- /* USER CODE BEGIN COMP_IRQn 0 */
+void COMP_IRQHandler(void) {
+ /* USER CODE BEGIN COMP_IRQn 0 */
- /* USER CODE END COMP_IRQn 0 */
- HAL_COMP_IRQHandler(&hcomp1);
- /* USER CODE BEGIN COMP_IRQn 1 */
+ /* USER CODE END COMP_IRQn 0 */
+ HAL_COMP_IRQHandler(&hcomp1);
+ /* USER CODE BEGIN COMP_IRQn 1 */
- /* USER CODE END COMP_IRQn 1 */
+ /* USER CODE END COMP_IRQn 1 */
}
/**
* @brief This function handles TIM1 trigger and commutation interrupts and TIM17 global interrupt.
*/
-void TIM1_TRG_COM_TIM17_IRQHandler(void)
-{
- /* USER CODE BEGIN TIM1_TRG_COM_TIM17_IRQn 0 */
+void TIM1_TRG_COM_TIM17_IRQHandler(void) {
+ /* USER CODE BEGIN TIM1_TRG_COM_TIM17_IRQn 0 */
- /* USER CODE END TIM1_TRG_COM_TIM17_IRQn 0 */
- HAL_TIM_IRQHandler(&htim1);
- /* USER CODE BEGIN TIM1_TRG_COM_TIM17_IRQn 1 */
+ /* USER CODE END TIM1_TRG_COM_TIM17_IRQn 0 */
+ HAL_TIM_IRQHandler(&htim1);
+ /* USER CODE BEGIN TIM1_TRG_COM_TIM17_IRQn 1 */
- /* USER CODE END TIM1_TRG_COM_TIM17_IRQn 1 */
+ /* USER CODE END TIM1_TRG_COM_TIM17_IRQn 1 */
}
/**
* @brief This function handles TIM2 global interrupt.
*/
-void TIM2_IRQHandler(void)
-{
- /* USER CODE BEGIN TIM2_IRQn 0 */
+void TIM2_IRQHandler(void) {
+ /* USER CODE BEGIN TIM2_IRQn 0 */
- /* USER CODE END TIM2_IRQn 0 */
- HAL_TIM_IRQHandler(&htim2);
- /* USER CODE BEGIN TIM2_IRQn 1 */
+ /* USER CODE END TIM2_IRQn 0 */
+ HAL_TIM_IRQHandler(&htim2);
+ /* USER CODE BEGIN TIM2_IRQn 1 */
- /* USER CODE END TIM2_IRQn 1 */
+ /* USER CODE END TIM2_IRQn 1 */
}
/**
* @brief This function handles EXTI line[15:10] interrupts.
*/
-void EXTI15_10_IRQHandler(void)
-{
- /* USER CODE BEGIN EXTI15_10_IRQn 0 */
-
- /* USER CODE END EXTI15_10_IRQn 0 */
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_10);
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_11);
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12);
- HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
- /* USER CODE BEGIN EXTI15_10_IRQn 1 */
-
- /* USER CODE END EXTI15_10_IRQn 1 */
+void EXTI15_10_IRQHandler(void) {
+ /* USER CODE BEGIN EXTI15_10_IRQn 0 */
+
+ /* USER CODE END EXTI15_10_IRQn 0 */
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_10);
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_11);
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12);
+ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
+ /* USER CODE BEGIN EXTI15_10_IRQn 1 */
+
+ /* USER CODE END EXTI15_10_IRQn 1 */
}
/**
* @brief This function handles HSEM global interrupt.
*/
-void HSEM_IRQHandler(void)
-{
- /* USER CODE BEGIN HSEM_IRQn 0 */
+void HSEM_IRQHandler(void) {
+ /* USER CODE BEGIN HSEM_IRQn 0 */
- /* USER CODE END HSEM_IRQn 0 */
- HAL_HSEM_IRQHandler();
- /* USER CODE BEGIN HSEM_IRQn 1 */
+ /* USER CODE END HSEM_IRQn 0 */
+ HAL_HSEM_IRQHandler();
+ /* USER CODE BEGIN HSEM_IRQn 1 */
- /* USER CODE END HSEM_IRQn 1 */
+ /* USER CODE END HSEM_IRQn 1 */
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f7/cube/Src/system_stm32wbxx.c b/firmware/targets/f7/cube/Src/system_stm32wbxx.c
index d0ff7d2d..ff09f34c 100644
--- a/firmware/targets/f7/cube/Src/system_stm32wbxx.c
+++ b/firmware/targets/f7/cube/Src/system_stm32wbxx.c
@@ -84,24 +84,24 @@
#include "stm32wbxx.h"
-#if !defined (HSE_VALUE)
- #define HSE_VALUE (32000000UL) /*!< Value of the External oscillator in Hz */
+#if !defined(HSE_VALUE)
+#define HSE_VALUE (32000000UL) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
-#if !defined (MSI_VALUE)
- #define MSI_VALUE (4000000UL) /*!< Value of the Internal oscillator in Hz*/
+#if !defined(MSI_VALUE)
+#define MSI_VALUE (4000000UL) /*!< Value of the Internal oscillator in Hz*/
#endif /* MSI_VALUE */
-#if !defined (HSI_VALUE)
- #define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/
+#if !defined(HSI_VALUE)
+#define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/
#endif /* HSI_VALUE */
-#if !defined (LSI_VALUE)
- #define LSI_VALUE (32000UL) /*!< Value of LSI in Hz*/
-#endif /* LSI_VALUE */
+#if !defined(LSI_VALUE)
+#define LSI_VALUE (32000UL) /*!< Value of LSI in Hz*/
+#endif /* LSI_VALUE */
-#if !defined (LSE_VALUE)
- #define LSE_VALUE (32768UL) /*!< Value of LSE in Hz*/
+#if !defined(LSE_VALUE)
+#define LSE_VALUE (32768UL) /*!< Value of LSE in Hz*/
#endif /* LSE_VALUE */
/**
@@ -127,18 +127,22 @@
at address 0x00 which correspond to automatic remap of boot address selected */
/* #define USER_VECT_TAB_ADDRESS */
#if defined(USER_VECT_TAB_ADDRESS)
- /*!< Uncomment this line for user vector table remap in Sram else user remap
+/*!< Uncomment this line for user vector table remap in Sram else user remap
will be done in Flash. */
/* #define VECT_TAB_SRAM */
#if defined(VECT_TAB_SRAM)
-#define VECT_TAB_BASE_ADDRESS SRAM1_BASE /*!< Vector Table base address field.
+#define VECT_TAB_BASE_ADDRESS \
+ SRAM1_BASE /*!< Vector Table base address field.
This value must be a multiple of 0x200. */
-#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field.
+#define VECT_TAB_OFFSET \
+ 0x00000000U /*!< Vector Table base offset field.
This value must be a multiple of 0x200. */
#else
-#define VECT_TAB_BASE_ADDRESS FLASH_BASE /*!< Vector Table base address field.
+#define VECT_TAB_BASE_ADDRESS \
+ FLASH_BASE /*!< Vector Table base address field.
This value must be a multiple of 0x200. */
-#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field.
+#define VECT_TAB_OFFSET \
+ 0x00000000U /*!< Vector Table base offset field.
This value must be a multiple of 0x200. */
#endif
#endif
@@ -158,7 +162,7 @@
/** @addtogroup STM32WBxx_System_Private_Variables
* @{
*/
- /* The SystemCoreClock variable is updated in three ways:
+/* The SystemCoreClock variable is updated in three ways:
1) by calling CMSIS function SystemCoreClockUpdate()
2) by calling HAL API function HAL_RCC_GetHCLKFreq()
3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
@@ -166,20 +170,38 @@
is no need to call the 2 first functions listed above, since SystemCoreClock
variable is updated automatically.
*/
- uint32_t SystemCoreClock = 4000000UL ; /*CPU1: M4 on MSI clock after startup (4MHz)*/
-
- const uint32_t AHBPrescTable[16UL] = {1UL, 3UL, 5UL, 1UL, 1UL, 6UL, 10UL, 32UL, 2UL, 4UL, 8UL, 16UL, 64UL, 128UL, 256UL, 512UL};
-
- const uint32_t APBPrescTable[8UL] = {0UL, 0UL, 0UL, 0UL, 1UL, 2UL, 3UL, 4UL};
-
- const uint32_t MSIRangeTable[16UL] = {100000UL, 200000UL, 400000UL, 800000UL, 1000000UL, 2000000UL, \
- 4000000UL, 8000000UL, 16000000UL, 24000000UL, 32000000UL, 48000000UL, 0UL, 0UL, 0UL, 0UL}; /* 0UL values are incorrect cases */
-
-#if defined(STM32WB55xx) || defined(STM32WB5Mxx) || defined(STM32WB35xx) || defined (STM32WB15xx) || defined (STM32WB10xx)
- const uint32_t SmpsPrescalerTable[4UL][6UL]={{1UL,3UL,2UL,2UL,1UL,2UL}, \
- {2UL,6UL,4UL,3UL,2UL,4UL}, \
- {4UL,12UL,8UL,6UL,4UL,8UL}, \
- {4UL,12UL,8UL,6UL,4UL,8UL}};
+uint32_t SystemCoreClock = 4000000UL; /*CPU1: M4 on MSI clock after startup (4MHz)*/
+
+const uint32_t AHBPrescTable[16UL] =
+ {1UL, 3UL, 5UL, 1UL, 1UL, 6UL, 10UL, 32UL, 2UL, 4UL, 8UL, 16UL, 64UL, 128UL, 256UL, 512UL};
+
+const uint32_t APBPrescTable[8UL] = {0UL, 0UL, 0UL, 0UL, 1UL, 2UL, 3UL, 4UL};
+
+const uint32_t MSIRangeTable[16UL] = {
+ 100000UL,
+ 200000UL,
+ 400000UL,
+ 800000UL,
+ 1000000UL,
+ 2000000UL,
+ 4000000UL,
+ 8000000UL,
+ 16000000UL,
+ 24000000UL,
+ 32000000UL,
+ 48000000UL,
+ 0UL,
+ 0UL,
+ 0UL,
+ 0UL}; /* 0UL values are incorrect cases */
+
+#if defined(STM32WB55xx) || defined(STM32WB5Mxx) || defined(STM32WB35xx) || \
+ defined(STM32WB15xx) || defined(STM32WB10xx)
+const uint32_t SmpsPrescalerTable[4UL][6UL] = {
+ {1UL, 3UL, 2UL, 2UL, 1UL, 2UL},
+ {2UL, 6UL, 4UL, 3UL, 2UL, 4UL},
+ {4UL, 12UL, 8UL, 6UL, 4UL, 8UL},
+ {4UL, 12UL, 8UL, 6UL, 4UL, 8UL}};
#endif
/**
@@ -203,47 +225,47 @@
* @param None
* @retval None
*/
-void SystemInit(void)
-{
+void SystemInit(void) {
#if defined(USER_VECT_TAB_ADDRESS)
- /* Configure the Vector Table location add offset address ------------------*/
- SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET;
+ /* Configure the Vector Table location add offset address ------------------*/
+ SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET;
#endif
- /* FPU settings ------------------------------------------------------------*/
- #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
- SCB->CPACR |= ((3UL << (10UL*2UL))|(3UL << (11UL*2UL))); /* set CP10 and CP11 Full Access */
- #endif
-
- /* Reset the RCC clock configuration to the default reset state ------------*/
- /* Set MSION bit */
- RCC->CR |= RCC_CR_MSION;
-
- /* Reset CFGR register */
- RCC->CFGR = 0x00070000U;
-
- /* Reset PLLSAI1ON, PLLON, HSECSSON, HSEON, HSION, and MSIPLLON bits */
- RCC->CR &= (uint32_t)0xFAF6FEFBU;
-
- /*!< Reset LSI1 and LSI2 bits */
- RCC->CSR &= (uint32_t)0xFFFFFFFAU;
-
- /*!< Reset HSI48ON bit */
- RCC->CRRCR &= (uint32_t)0xFFFFFFFEU;
-
- /* Reset PLLCFGR register */
- RCC->PLLCFGR = 0x22041000U;
+/* FPU settings ------------------------------------------------------------*/
+#if(__FPU_PRESENT == 1) && (__FPU_USED == 1)
+ SCB->CPACR |=
+ ((3UL << (10UL * 2UL)) | (3UL << (11UL * 2UL))); /* set CP10 and CP11 Full Access */
+#endif
+
+ /* Reset the RCC clock configuration to the default reset state ------------*/
+ /* Set MSION bit */
+ RCC->CR |= RCC_CR_MSION;
+
+ /* Reset CFGR register */
+ RCC->CFGR = 0x00070000U;
+
+ /* Reset PLLSAI1ON, PLLON, HSECSSON, HSEON, HSION, and MSIPLLON bits */
+ RCC->CR &= (uint32_t)0xFAF6FEFBU;
+
+ /*!< Reset LSI1 and LSI2 bits */
+ RCC->CSR &= (uint32_t)0xFFFFFFFAU;
+
+ /*!< Reset HSI48ON bit */
+ RCC->CRRCR &= (uint32_t)0xFFFFFFFEU;
+
+ /* Reset PLLCFGR register */
+ RCC->PLLCFGR = 0x22041000U;
#if defined(STM32WB55xx) || defined(STM32WB5Mxx)
- /* Reset PLLSAI1CFGR register */
- RCC->PLLSAI1CFGR = 0x22041000U;
+ /* Reset PLLSAI1CFGR register */
+ RCC->PLLSAI1CFGR = 0x22041000U;
#endif
-
- /* Reset HSEBYP bit */
- RCC->CR &= 0xFFFBFFFFU;
- /* Disable all interrupts */
- RCC->CIER = 0x00000000;
+ /* Reset HSEBYP bit */
+ RCC->CR &= 0xFFFBFFFFU;
+
+ /* Disable all interrupts */
+ RCC->CIER = 0x00000000;
}
/**
@@ -288,71 +310,65 @@ void SystemInit(void)
* @param None
* @retval None
*/
-void SystemCoreClockUpdate(void)
-{
- uint32_t tmp, msirange, pllvco, pllr, pllsource , pllm;
+void SystemCoreClockUpdate(void) {
+ uint32_t tmp, msirange, pllvco, pllr, pllsource, pllm;
- /* Get MSI Range frequency--------------------------------------------------*/
+ /* Get MSI Range frequency--------------------------------------------------*/
- /*MSI frequency range in Hz*/
- msirange = MSIRangeTable[(RCC->CR & RCC_CR_MSIRANGE) >> RCC_CR_MSIRANGE_Pos];
+ /*MSI frequency range in Hz*/
+ msirange = MSIRangeTable[(RCC->CR & RCC_CR_MSIRANGE) >> RCC_CR_MSIRANGE_Pos];
- /* Get SYSCLK source -------------------------------------------------------*/
- switch (RCC->CFGR & RCC_CFGR_SWS)
- {
- case 0x00: /* MSI used as system clock source */
- SystemCoreClock = msirange;
- break;
+ /* Get SYSCLK source -------------------------------------------------------*/
+ switch(RCC->CFGR & RCC_CFGR_SWS) {
+ case 0x00: /* MSI used as system clock source */
+ SystemCoreClock = msirange;
+ break;
- case 0x04: /* HSI used as system clock source */
- /* HSI used as system clock source */
+ case 0x04: /* HSI used as system clock source */
+ /* HSI used as system clock source */
SystemCoreClock = HSI_VALUE;
- break;
+ break;
- case 0x08: /* HSE used as system clock source */
- SystemCoreClock = HSE_VALUE;
- break;
+ case 0x08: /* HSE used as system clock source */
+ SystemCoreClock = HSE_VALUE;
+ break;
case 0x0C: /* PLL used as system clock source */
- /* PLL_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLM) * PLLN
+ /* PLL_VCO = (HSE_VALUE or HSI_VALUE or MSI_VALUE/ PLLM) * PLLN
SYSCLK = PLL_VCO / PLLR
*/
- pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC);
- pllm = ((RCC->PLLCFGR & RCC_PLLCFGR_PLLM) >> RCC_PLLCFGR_PLLM_Pos) + 1UL ;
-
- if(pllsource == 0x02UL) /* HSI used as PLL clock source */
- {
- pllvco = (HSI_VALUE / pllm);
- }
- else if(pllsource == 0x03UL) /* HSE used as PLL clock source */
- {
- pllvco = (HSE_VALUE / pllm);
- }
- else /* MSI used as PLL clock source */
- {
- pllvco = (msirange / pllm);
- }
-
- pllvco = pllvco * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos);
- pllr = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> RCC_PLLCFGR_PLLR_Pos) + 1UL);
-
- SystemCoreClock = pllvco/pllr;
- break;
+ pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC);
+ pllm = ((RCC->PLLCFGR & RCC_PLLCFGR_PLLM) >> RCC_PLLCFGR_PLLM_Pos) + 1UL;
+
+ if(pllsource == 0x02UL) /* HSI used as PLL clock source */
+ {
+ pllvco = (HSI_VALUE / pllm);
+ } else if(pllsource == 0x03UL) /* HSE used as PLL clock source */
+ {
+ pllvco = (HSE_VALUE / pllm);
+ } else /* MSI used as PLL clock source */
+ {
+ pllvco = (msirange / pllm);
+ }
+
+ pllvco = pllvco * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos);
+ pllr = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> RCC_PLLCFGR_PLLR_Pos) + 1UL);
+
+ SystemCoreClock = pllvco / pllr;
+ break;
default:
- SystemCoreClock = msirange;
- break;
- }
-
- /* Compute HCLK clock frequency --------------------------------------------*/
- /* Get HCLK1 prescaler */
- tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos)];
- /* HCLK clock frequency */
- SystemCoreClock = SystemCoreClock / tmp;
-
+ SystemCoreClock = msirange;
+ break;
+ }
+
+ /* Compute HCLK clock frequency --------------------------------------------*/
+ /* Get HCLK1 prescaler */
+ tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos)];
+ /* HCLK clock frequency */
+ SystemCoreClock = SystemCoreClock / tmp;
}
-
/**
* @}
*/
diff --git a/firmware/targets/f7/cube/Src/tim.c b/firmware/targets/f7/cube/Src/tim.c
index ce78dea8..1182d420 100644
--- a/firmware/targets/f7/cube/Src/tim.c
+++ b/firmware/targets/f7/cube/Src/tim.c
@@ -29,362 +29,315 @@ TIM_HandleTypeDef htim2;
TIM_HandleTypeDef htim16;
/* TIM1 init function */
-void MX_TIM1_Init(void)
-{
-
- /* USER CODE BEGIN TIM1_Init 0 */
-
- /* USER CODE END TIM1_Init 0 */
-
- TIM_ClockConfigTypeDef sClockSourceConfig = {0};
- TIM_MasterConfigTypeDef sMasterConfig = {0};
- TIM_OC_InitTypeDef sConfigOC = {0};
- TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
-
- /* USER CODE BEGIN TIM1_Init 1 */
-
- /* USER CODE END TIM1_Init 1 */
- htim1.Instance = TIM1;
- htim1.Init.Prescaler = 0;
- htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim1.Init.Period = 65535;
- htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
- htim1.Init.RepetitionCounter = 0;
- htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
- if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
- {
- Error_Handler();
- }
- sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
- if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_TIM_OC_Init(&htim1) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
- {
- Error_Handler();
- }
- sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
- sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
- sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
- if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigOC.OCMode = TIM_OCMODE_TIMING;
- sConfigOC.Pulse = 0;
- sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
- sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
- sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
- sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
- sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
- if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigOC.OCMode = TIM_OCMODE_PWM1;
- if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
- {
- Error_Handler();
- }
- sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
- sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
- sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
- sBreakDeadTimeConfig.DeadTime = 0;
- sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
- sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
- sBreakDeadTimeConfig.BreakFilter = 0;
- sBreakDeadTimeConfig.BreakAFMode = TIM_BREAK_AFMODE_INPUT;
- sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
- sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
- sBreakDeadTimeConfig.Break2Filter = 0;
- sBreakDeadTimeConfig.Break2AFMode = TIM_BREAK_AFMODE_INPUT;
- sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
- if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN TIM1_Init 2 */
-
- /* USER CODE END TIM1_Init 2 */
- HAL_TIM_MspPostInit(&htim1);
-
+void MX_TIM1_Init(void) {
+ /* USER CODE BEGIN TIM1_Init 0 */
+
+ /* USER CODE END TIM1_Init 0 */
+
+ TIM_ClockConfigTypeDef sClockSourceConfig = {0};
+ TIM_MasterConfigTypeDef sMasterConfig = {0};
+ TIM_OC_InitTypeDef sConfigOC = {0};
+ TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
+
+ /* USER CODE BEGIN TIM1_Init 1 */
+
+ /* USER CODE END TIM1_Init 1 */
+ htim1.Instance = TIM1;
+ htim1.Init.Prescaler = 0;
+ htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
+ htim1.Init.Period = 65535;
+ htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+ htim1.Init.RepetitionCounter = 0;
+ htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
+ if(HAL_TIM_Base_Init(&htim1) != HAL_OK) {
+ Error_Handler();
+ }
+ sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
+ if(HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ if(HAL_TIM_OC_Init(&htim1) != HAL_OK) {
+ Error_Handler();
+ }
+ if(HAL_TIM_PWM_Init(&htim1) != HAL_OK) {
+ Error_Handler();
+ }
+ sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
+ sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
+ sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
+ if(HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ sConfigOC.OCMode = TIM_OCMODE_TIMING;
+ sConfigOC.Pulse = 0;
+ sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
+ sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
+ sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
+ sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
+ sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
+ if(HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) {
+ Error_Handler();
+ }
+ sConfigOC.OCMode = TIM_OCMODE_PWM1;
+ if(HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) {
+ Error_Handler();
+ }
+ sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
+ sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
+ sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
+ sBreakDeadTimeConfig.DeadTime = 0;
+ sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
+ sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
+ sBreakDeadTimeConfig.BreakFilter = 0;
+ sBreakDeadTimeConfig.BreakAFMode = TIM_BREAK_AFMODE_INPUT;
+ sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
+ sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
+ sBreakDeadTimeConfig.Break2Filter = 0;
+ sBreakDeadTimeConfig.Break2AFMode = TIM_BREAK_AFMODE_INPUT;
+ sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
+ if(HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN TIM1_Init 2 */
+
+ /* USER CODE END TIM1_Init 2 */
+ HAL_TIM_MspPostInit(&htim1);
}
/* TIM2 init function */
-void MX_TIM2_Init(void)
-{
-
- /* USER CODE BEGIN TIM2_Init 0 */
-
- /* USER CODE END TIM2_Init 0 */
-
- TIM_ClockConfigTypeDef sClockSourceConfig = {0};
- TIM_MasterConfigTypeDef sMasterConfig = {0};
- TIM_IC_InitTypeDef sConfigIC = {0};
-
- /* USER CODE BEGIN TIM2_Init 1 */
-
- /* USER CODE END TIM2_Init 1 */
- htim2.Instance = TIM2;
- htim2.Init.Prescaler = 64-1;
- htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim2.Init.Period = 4294967295;
- htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
- htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
- if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
- {
- Error_Handler();
- }
- sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
- if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_TIM_IC_Init(&htim2) != HAL_OK)
- {
- Error_Handler();
- }
- sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
- sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
- if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_FALLING;
- sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
- sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
- sConfigIC.ICFilter = 0;
- if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
- sConfigIC.ICSelection = TIM_ICSELECTION_INDIRECTTI;
- if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_2) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN TIM2_Init 2 */
-
- /* USER CODE END TIM2_Init 2 */
-
+void MX_TIM2_Init(void) {
+ /* USER CODE BEGIN TIM2_Init 0 */
+
+ /* USER CODE END TIM2_Init 0 */
+
+ TIM_ClockConfigTypeDef sClockSourceConfig = {0};
+ TIM_MasterConfigTypeDef sMasterConfig = {0};
+ TIM_IC_InitTypeDef sConfigIC = {0};
+
+ /* USER CODE BEGIN TIM2_Init 1 */
+
+ /* USER CODE END TIM2_Init 1 */
+ htim2.Instance = TIM2;
+ htim2.Init.Prescaler = 64 - 1;
+ htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
+ htim2.Init.Period = 4294967295;
+ htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+ htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
+ if(HAL_TIM_Base_Init(&htim2) != HAL_OK) {
+ Error_Handler();
+ }
+ sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
+ if(HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ if(HAL_TIM_IC_Init(&htim2) != HAL_OK) {
+ Error_Handler();
+ }
+ sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
+ sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
+ if(HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_FALLING;
+ sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
+ sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
+ sConfigIC.ICFilter = 0;
+ if(HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1) != HAL_OK) {
+ Error_Handler();
+ }
+ sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
+ sConfigIC.ICSelection = TIM_ICSELECTION_INDIRECTTI;
+ if(HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_2) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN TIM2_Init 2 */
+
+ /* USER CODE END TIM2_Init 2 */
}
/* TIM16 init function */
-void MX_TIM16_Init(void)
-{
-
- /* USER CODE BEGIN TIM16_Init 0 */
-
- /* USER CODE END TIM16_Init 0 */
-
- TIM_OC_InitTypeDef sConfigOC = {0};
- TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
-
- /* USER CODE BEGIN TIM16_Init 1 */
-
- /* USER CODE END TIM16_Init 1 */
- htim16.Instance = TIM16;
- htim16.Init.Prescaler = 500 - 1;
- htim16.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim16.Init.Period = 291;
- htim16.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
- htim16.Init.RepetitionCounter = 0;
- htim16.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
- if (HAL_TIM_Base_Init(&htim16) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_TIM_PWM_Init(&htim16) != HAL_OK)
- {
- Error_Handler();
- }
- sConfigOC.OCMode = TIM_OCMODE_PWM1;
- sConfigOC.Pulse = 145;
- sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
- sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
- sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
- sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
- sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
- if (HAL_TIM_PWM_ConfigChannel(&htim16, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
- {
- Error_Handler();
- }
- sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
- sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
- sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
- sBreakDeadTimeConfig.DeadTime = 0;
- sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
- sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
- sBreakDeadTimeConfig.BreakFilter = 0;
- sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
- if (HAL_TIMEx_ConfigBreakDeadTime(&htim16, &sBreakDeadTimeConfig) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN TIM16_Init 2 */
-
- /* USER CODE END TIM16_Init 2 */
- HAL_TIM_MspPostInit(&htim16);
-
+void MX_TIM16_Init(void) {
+ /* USER CODE BEGIN TIM16_Init 0 */
+
+ /* USER CODE END TIM16_Init 0 */
+
+ TIM_OC_InitTypeDef sConfigOC = {0};
+ TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
+
+ /* USER CODE BEGIN TIM16_Init 1 */
+
+ /* USER CODE END TIM16_Init 1 */
+ htim16.Instance = TIM16;
+ htim16.Init.Prescaler = 500 - 1;
+ htim16.Init.CounterMode = TIM_COUNTERMODE_UP;
+ htim16.Init.Period = 291;
+ htim16.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+ htim16.Init.RepetitionCounter = 0;
+ htim16.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
+ if(HAL_TIM_Base_Init(&htim16) != HAL_OK) {
+ Error_Handler();
+ }
+ if(HAL_TIM_PWM_Init(&htim16) != HAL_OK) {
+ Error_Handler();
+ }
+ sConfigOC.OCMode = TIM_OCMODE_PWM1;
+ sConfigOC.Pulse = 145;
+ sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
+ sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
+ sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
+ sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
+ sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
+ if(HAL_TIM_PWM_ConfigChannel(&htim16, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) {
+ Error_Handler();
+ }
+ sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
+ sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
+ sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
+ sBreakDeadTimeConfig.DeadTime = 0;
+ sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
+ sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
+ sBreakDeadTimeConfig.BreakFilter = 0;
+ sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
+ if(HAL_TIMEx_ConfigBreakDeadTime(&htim16, &sBreakDeadTimeConfig) != HAL_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN TIM16_Init 2 */
+
+ /* USER CODE END TIM16_Init 2 */
+ HAL_TIM_MspPostInit(&htim16);
}
-void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
-{
-
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- if(tim_baseHandle->Instance==TIM1)
- {
- /* USER CODE BEGIN TIM1_MspInit 0 */
+void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) {
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ if(tim_baseHandle->Instance == TIM1) {
+ /* USER CODE BEGIN TIM1_MspInit 0 */
- /* USER CODE END TIM1_MspInit 0 */
- /* TIM1 clock enable */
- __HAL_RCC_TIM1_CLK_ENABLE();
+ /* USER CODE END TIM1_MspInit 0 */
+ /* TIM1 clock enable */
+ __HAL_RCC_TIM1_CLK_ENABLE();
- /* TIM1 interrupt Init */
- HAL_NVIC_SetPriority(TIM1_TRG_COM_TIM17_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(TIM1_TRG_COM_TIM17_IRQn);
- /* USER CODE BEGIN TIM1_MspInit 1 */
+ /* TIM1 interrupt Init */
+ HAL_NVIC_SetPriority(TIM1_TRG_COM_TIM17_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(TIM1_TRG_COM_TIM17_IRQn);
+ /* USER CODE BEGIN TIM1_MspInit 1 */
- /* USER CODE END TIM1_MspInit 1 */
- }
- else if(tim_baseHandle->Instance==TIM2)
- {
- /* USER CODE BEGIN TIM2_MspInit 0 */
+ /* USER CODE END TIM1_MspInit 1 */
+ } else if(tim_baseHandle->Instance == TIM2) {
+ /* USER CODE BEGIN TIM2_MspInit 0 */
- /* USER CODE END TIM2_MspInit 0 */
- /* TIM2 clock enable */
- __HAL_RCC_TIM2_CLK_ENABLE();
+ /* USER CODE END TIM2_MspInit 0 */
+ /* TIM2 clock enable */
+ __HAL_RCC_TIM2_CLK_ENABLE();
- __HAL_RCC_GPIOA_CLK_ENABLE();
- /**TIM2 GPIO Configuration
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ /**TIM2 GPIO Configuration
PA0 ------> TIM2_CH1
*/
- GPIO_InitStruct.Pin = IR_RX_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
- HAL_GPIO_Init(IR_RX_GPIO_Port, &GPIO_InitStruct);
-
- /* TIM2 interrupt Init */
- HAL_NVIC_SetPriority(TIM2_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(TIM2_IRQn);
- /* USER CODE BEGIN TIM2_MspInit 1 */
-
- /* USER CODE END TIM2_MspInit 1 */
- }
- else if(tim_baseHandle->Instance==TIM16)
- {
- /* USER CODE BEGIN TIM16_MspInit 0 */
-
- /* USER CODE END TIM16_MspInit 0 */
- /* TIM16 clock enable */
- __HAL_RCC_TIM16_CLK_ENABLE();
- /* USER CODE BEGIN TIM16_MspInit 1 */
-
- /* USER CODE END TIM16_MspInit 1 */
- }
+ GPIO_InitStruct.Pin = IR_RX_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
+ HAL_GPIO_Init(IR_RX_GPIO_Port, &GPIO_InitStruct);
+
+ /* TIM2 interrupt Init */
+ HAL_NVIC_SetPriority(TIM2_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(TIM2_IRQn);
+ /* USER CODE BEGIN TIM2_MspInit 1 */
+
+ /* USER CODE END TIM2_MspInit 1 */
+ } else if(tim_baseHandle->Instance == TIM16) {
+ /* USER CODE BEGIN TIM16_MspInit 0 */
+
+ /* USER CODE END TIM16_MspInit 0 */
+ /* TIM16 clock enable */
+ __HAL_RCC_TIM16_CLK_ENABLE();
+ /* USER CODE BEGIN TIM16_MspInit 1 */
+
+ /* USER CODE END TIM16_MspInit 1 */
+ }
}
-void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
-{
-
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- if(timHandle->Instance==TIM1)
- {
- /* USER CODE BEGIN TIM1_MspPostInit 0 */
-
- /* USER CODE END TIM1_MspPostInit 0 */
- __HAL_RCC_GPIOB_CLK_ENABLE();
- /**TIM1 GPIO Configuration
+void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) {
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ if(timHandle->Instance == TIM1) {
+ /* USER CODE BEGIN TIM1_MspPostInit 0 */
+
+ /* USER CODE END TIM1_MspPostInit 0 */
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ /**TIM1 GPIO Configuration
PB9 ------> TIM1_CH3N
PB13 ------> TIM1_CH1N
*/
- GPIO_InitStruct.Pin = IR_TX_Pin|RFID_OUT_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+ GPIO_InitStruct.Pin = IR_TX_Pin | RFID_OUT_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
- /* USER CODE BEGIN TIM1_MspPostInit 1 */
+ /* USER CODE BEGIN TIM1_MspPostInit 1 */
- /* USER CODE END TIM1_MspPostInit 1 */
- }
- else if(timHandle->Instance==TIM16)
- {
- /* USER CODE BEGIN TIM16_MspPostInit 0 */
+ /* USER CODE END TIM1_MspPostInit 1 */
+ } else if(timHandle->Instance == TIM16) {
+ /* USER CODE BEGIN TIM16_MspPostInit 0 */
- /* USER CODE END TIM16_MspPostInit 0 */
+ /* USER CODE END TIM16_MspPostInit 0 */
- __HAL_RCC_GPIOB_CLK_ENABLE();
- /**TIM16 GPIO Configuration
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ /**TIM16 GPIO Configuration
PB8 ------> TIM16_CH1
*/
- GPIO_InitStruct.Pin = SPEAKER_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF14_TIM16;
- HAL_GPIO_Init(SPEAKER_GPIO_Port, &GPIO_InitStruct);
+ GPIO_InitStruct.Pin = SPEAKER_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF14_TIM16;
+ HAL_GPIO_Init(SPEAKER_GPIO_Port, &GPIO_InitStruct);
- /* USER CODE BEGIN TIM16_MspPostInit 1 */
-
- /* USER CODE END TIM16_MspPostInit 1 */
- }
+ /* USER CODE BEGIN TIM16_MspPostInit 1 */
+ /* USER CODE END TIM16_MspPostInit 1 */
+ }
}
-void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
-{
-
- if(tim_baseHandle->Instance==TIM1)
- {
- /* USER CODE BEGIN TIM1_MspDeInit 0 */
+void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle) {
+ if(tim_baseHandle->Instance == TIM1) {
+ /* USER CODE BEGIN TIM1_MspDeInit 0 */
- /* USER CODE END TIM1_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_TIM1_CLK_DISABLE();
+ /* USER CODE END TIM1_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_TIM1_CLK_DISABLE();
- /* TIM1 interrupt Deinit */
- HAL_NVIC_DisableIRQ(TIM1_TRG_COM_TIM17_IRQn);
- /* USER CODE BEGIN TIM1_MspDeInit 1 */
+ /* TIM1 interrupt Deinit */
+ HAL_NVIC_DisableIRQ(TIM1_TRG_COM_TIM17_IRQn);
+ /* USER CODE BEGIN TIM1_MspDeInit 1 */
- /* USER CODE END TIM1_MspDeInit 1 */
- }
- else if(tim_baseHandle->Instance==TIM2)
- {
- /* USER CODE BEGIN TIM2_MspDeInit 0 */
+ /* USER CODE END TIM1_MspDeInit 1 */
+ } else if(tim_baseHandle->Instance == TIM2) {
+ /* USER CODE BEGIN TIM2_MspDeInit 0 */
- /* USER CODE END TIM2_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_TIM2_CLK_DISABLE();
+ /* USER CODE END TIM2_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_TIM2_CLK_DISABLE();
- /**TIM2 GPIO Configuration
+ /**TIM2 GPIO Configuration
PA0 ------> TIM2_CH1
*/
- HAL_GPIO_DeInit(IR_RX_GPIO_Port, IR_RX_Pin);
+ HAL_GPIO_DeInit(IR_RX_GPIO_Port, IR_RX_Pin);
- /* TIM2 interrupt Deinit */
- HAL_NVIC_DisableIRQ(TIM2_IRQn);
- /* USER CODE BEGIN TIM2_MspDeInit 1 */
+ /* TIM2 interrupt Deinit */
+ HAL_NVIC_DisableIRQ(TIM2_IRQn);
+ /* USER CODE BEGIN TIM2_MspDeInit 1 */
- /* USER CODE END TIM2_MspDeInit 1 */
- }
- else if(tim_baseHandle->Instance==TIM16)
- {
- /* USER CODE BEGIN TIM16_MspDeInit 0 */
+ /* USER CODE END TIM2_MspDeInit 1 */
+ } else if(tim_baseHandle->Instance == TIM16) {
+ /* USER CODE BEGIN TIM16_MspDeInit 0 */
- /* USER CODE END TIM16_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_TIM16_CLK_DISABLE();
- /* USER CODE BEGIN TIM16_MspDeInit 1 */
+ /* USER CODE END TIM16_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_TIM16_CLK_DISABLE();
+ /* USER CODE BEGIN TIM16_MspDeInit 1 */
- /* USER CODE END TIM16_MspDeInit 1 */
- }
+ /* USER CODE END TIM16_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f7/cube/Src/usart.c b/firmware/targets/f7/cube/Src/usart.c
index ce3113f8..c0b3ecee 100644
--- a/firmware/targets/f7/cube/Src/usart.c
+++ b/firmware/targets/f7/cube/Src/usart.c
@@ -26,66 +26,62 @@
/* USART1 init function */
-void MX_USART1_UART_Init(void)
-{
+void MX_USART1_UART_Init(void) {
+ /* USER CODE BEGIN USART1_Init 0 */
- /* USER CODE BEGIN USART1_Init 0 */
+ /* USER CODE END USART1_Init 0 */
- /* USER CODE END USART1_Init 0 */
+ LL_USART_InitTypeDef USART_InitStruct = {0};
- LL_USART_InitTypeDef USART_InitStruct = {0};
+ LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
- LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
+ /* Peripheral clock enable */
+ LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_USART1);
- /* Peripheral clock enable */
- LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_USART1);
-
- LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
- /**USART1 GPIO Configuration
+ LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
+ /**USART1 GPIO Configuration
PB6 ------> USART1_TX
PB7 ------> USART1_RX
*/
- GPIO_InitStruct.Pin = LL_GPIO_PIN_6|LL_GPIO_PIN_7;
- GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
- GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
- GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
- GPIO_InitStruct.Alternate = LL_GPIO_AF_7;
- LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-
- /* USER CODE BEGIN USART1_Init 1 */
-
- /* USER CODE END USART1_Init 1 */
- USART_InitStruct.PrescalerValue = LL_USART_PRESCALER_DIV1;
- USART_InitStruct.BaudRate = 115200;
- USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;
- USART_InitStruct.StopBits = LL_USART_STOPBITS_1;
- USART_InitStruct.Parity = LL_USART_PARITY_NONE;
- USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX;
- USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;
- USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;
- LL_USART_Init(USART1, &USART_InitStruct);
- LL_USART_SetTXFIFOThreshold(USART1, LL_USART_FIFOTHRESHOLD_1_8);
- LL_USART_SetRXFIFOThreshold(USART1, LL_USART_FIFOTHRESHOLD_1_8);
- LL_USART_DisableFIFO(USART1);
- LL_USART_EnableAutoBaudRate(USART1);
- LL_USART_SetAutoBaudRateMode(USART1, LL_USART_AUTOBAUD_DETECT_ON_STARTBIT);
- LL_USART_ConfigAsyncMode(USART1);
-
- /* USER CODE BEGIN WKUPType USART1 */
-
- /* USER CODE END WKUPType USART1 */
-
- LL_USART_Enable(USART1);
-
- /* Polling USART1 initialisation */
- while(!(LL_USART_IsActiveFlag_TEACK(USART1)))
- {
- }
- /* USER CODE BEGIN USART1_Init 2 */
-
- /* USER CODE END USART1_Init 2 */
-
+ GPIO_InitStruct.Pin = LL_GPIO_PIN_6 | LL_GPIO_PIN_7;
+ GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
+ GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
+ GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
+ GPIO_InitStruct.Alternate = LL_GPIO_AF_7;
+ LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
+ /* USER CODE BEGIN USART1_Init 1 */
+
+ /* USER CODE END USART1_Init 1 */
+ USART_InitStruct.PrescalerValue = LL_USART_PRESCALER_DIV1;
+ USART_InitStruct.BaudRate = 115200;
+ USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;
+ USART_InitStruct.StopBits = LL_USART_STOPBITS_1;
+ USART_InitStruct.Parity = LL_USART_PARITY_NONE;
+ USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX;
+ USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;
+ USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;
+ LL_USART_Init(USART1, &USART_InitStruct);
+ LL_USART_SetTXFIFOThreshold(USART1, LL_USART_FIFOTHRESHOLD_1_8);
+ LL_USART_SetRXFIFOThreshold(USART1, LL_USART_FIFOTHRESHOLD_1_8);
+ LL_USART_DisableFIFO(USART1);
+ LL_USART_EnableAutoBaudRate(USART1);
+ LL_USART_SetAutoBaudRateMode(USART1, LL_USART_AUTOBAUD_DETECT_ON_STARTBIT);
+ LL_USART_ConfigAsyncMode(USART1);
+
+ /* USER CODE BEGIN WKUPType USART1 */
+
+ /* USER CODE END WKUPType USART1 */
+
+ LL_USART_Enable(USART1);
+
+ /* Polling USART1 initialisation */
+ while(!(LL_USART_IsActiveFlag_TEACK(USART1))) {
+ }
+ /* USER CODE BEGIN USART1_Init 2 */
+
+ /* USER CODE END USART1_Init 2 */
}
/* USER CODE BEGIN 1 */
diff --git a/firmware/targets/f7/cube/Src/usb_device.c b/firmware/targets/f7/cube/Src/usb_device.c
index 35b13d51..d6d02cd6 100644
--- a/firmware/targets/f7/cube/Src/usb_device.c
+++ b/firmware/targets/f7/cube/Src/usb_device.c
@@ -64,28 +64,27 @@ extern USBD_DescriptorsTypeDef CDC_Desc;
* Init USB device Library, add supported class and start the library
* @retval None
*/
-void MX_USB_Device_Init(void)
-{
- /* USER CODE BEGIN USB_Device_Init_PreTreatment */
-
- /* USER CODE END USB_Device_Init_PreTreatment */
-
- /* Init Device Library, add supported class and start the library. */
- if (USBD_Init(&hUsbDeviceFS, &CDC_Desc, DEVICE_FS) != USBD_OK) {
- Error_Handler();
- }
- if (USBD_RegisterClass(&hUsbDeviceFS, &USBD_CDC) != USBD_OK) {
- Error_Handler();
- }
- if (USBD_CDC_RegisterInterface(&hUsbDeviceFS, &USBD_Interface_fops_FS) != USBD_OK) {
- Error_Handler();
- }
- if (USBD_Start(&hUsbDeviceFS) != USBD_OK) {
- Error_Handler();
- }
- /* USER CODE BEGIN USB_Device_Init_PostTreatment */
-
- /* USER CODE END USB_Device_Init_PostTreatment */
+void MX_USB_Device_Init(void) {
+ /* USER CODE BEGIN USB_Device_Init_PreTreatment */
+
+ /* USER CODE END USB_Device_Init_PreTreatment */
+
+ /* Init Device Library, add supported class and start the library. */
+ if(USBD_Init(&hUsbDeviceFS, &CDC_Desc, DEVICE_FS) != USBD_OK) {
+ Error_Handler();
+ }
+ if(USBD_RegisterClass(&hUsbDeviceFS, &USBD_CDC) != USBD_OK) {
+ Error_Handler();
+ }
+ if(USBD_CDC_RegisterInterface(&hUsbDeviceFS, &USBD_Interface_fops_FS) != USBD_OK) {
+ Error_Handler();
+ }
+ if(USBD_Start(&hUsbDeviceFS) != USBD_OK) {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN USB_Device_Init_PostTreatment */
+
+ /* USER CODE END USB_Device_Init_PostTreatment */
}
/**
diff --git a/firmware/targets/f7/cube/Src/usbd_cdc_if.c b/firmware/targets/f7/cube/Src/usbd_cdc_if.c
index 5f1a4196..e0d92f27 100644
--- a/firmware/targets/f7/cube/Src/usbd_cdc_if.c
+++ b/firmware/targets/f7/cube/Src/usbd_cdc_if.c
@@ -125,8 +125,8 @@ extern USBD_HandleTypeDef hUsbDeviceFS;
static int8_t CDC_Init_FS(void);
static int8_t CDC_DeInit_FS(void);
static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length);
-static int8_t CDC_Receive_FS(uint8_t* pbuf, uint32_t *Len);
-static int8_t CDC_TransmitCplt_FS(uint8_t *pbuf, uint32_t *Len, uint8_t epnum);
+static int8_t CDC_Receive_FS(uint8_t* pbuf, uint32_t* Len);
+static int8_t CDC_TransmitCplt_FS(uint8_t* pbuf, uint32_t* Len, uint8_t epnum);
/* USER CODE BEGIN PRIVATE_FUNCTIONS_DECLARATION */
@@ -137,38 +137,30 @@ static int8_t CDC_TransmitCplt_FS(uint8_t *pbuf, uint32_t *Len, uint8_t epnum);
*/
USBD_CDC_ItfTypeDef USBD_Interface_fops_FS =
-{
- CDC_Init_FS,
- CDC_DeInit_FS,
- CDC_Control_FS,
- CDC_Receive_FS,
- CDC_TransmitCplt_FS
-};
+ {CDC_Init_FS, CDC_DeInit_FS, CDC_Control_FS, CDC_Receive_FS, CDC_TransmitCplt_FS};
/* Private functions ---------------------------------------------------------*/
/**
* @brief Initializes the CDC media low layer over the FS USB IP
* @retval USBD_OK if all operations are OK else USBD_FAIL
*/
-static int8_t CDC_Init_FS(void)
-{
- /* USER CODE BEGIN 3 */
- /* Set Application Buffers */
- USBD_CDC_SetTxBuffer(&hUsbDeviceFS, UserTxBufferFS, 0);
- USBD_CDC_SetRxBuffer(&hUsbDeviceFS, UserRxBufferFS);
- return (USBD_OK);
- /* USER CODE END 3 */
+static int8_t CDC_Init_FS(void) {
+ /* USER CODE BEGIN 3 */
+ /* Set Application Buffers */
+ USBD_CDC_SetTxBuffer(&hUsbDeviceFS, UserTxBufferFS, 0);
+ USBD_CDC_SetRxBuffer(&hUsbDeviceFS, UserRxBufferFS);
+ return (USBD_OK);
+ /* USER CODE END 3 */
}
/**
* @brief DeInitializes the CDC media low layer
* @retval USBD_OK if all operations are OK else USBD_FAIL
*/
-static int8_t CDC_DeInit_FS(void)
-{
- /* USER CODE BEGIN 4 */
- return (USBD_OK);
- /* USER CODE END 4 */
+static int8_t CDC_DeInit_FS(void) {
+ /* USER CODE BEGIN 4 */
+ return (USBD_OK);
+ /* USER CODE END 4 */
}
/**
@@ -178,70 +170,68 @@ static int8_t CDC_DeInit_FS(void)
* @param length: Number of data to be sent (in bytes)
* @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
*/
-static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length)
-{
- /* USER CODE BEGIN 5 */
- switch(cmd)
- {
+static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length) {
+ /* USER CODE BEGIN 5 */
+ switch(cmd) {
case CDC_SEND_ENCAPSULATED_COMMAND:
- break;
+ break;
case CDC_GET_ENCAPSULATED_RESPONSE:
- break;
+ break;
case CDC_SET_COMM_FEATURE:
- break;
+ break;
case CDC_GET_COMM_FEATURE:
- break;
+ break;
case CDC_CLEAR_COMM_FEATURE:
- break;
-
- /*******************************************************************************/
- /* Line Coding Structure */
- /*-----------------------------------------------------------------------------*/
- /* Offset | Field | Size | Value | Description */
- /* 0 | dwDTERate | 4 | Number |Data terminal rate, in bits per second*/
- /* 4 | bCharFormat | 1 | Number | Stop bits */
- /* 0 - 1 Stop bit */
- /* 1 - 1.5 Stop bits */
- /* 2 - 2 Stop bits */
- /* 5 | bParityType | 1 | Number | Parity */
- /* 0 - None */
- /* 1 - Odd */
- /* 2 - Even */
- /* 3 - Mark */
- /* 4 - Space */
- /* 6 | bDataBits | 1 | Number Data bits (5, 6, 7, 8 or 16). */
- /*******************************************************************************/
+ break;
+
+ /*******************************************************************************/
+ /* Line Coding Structure */
+ /*-----------------------------------------------------------------------------*/
+ /* Offset | Field | Size | Value | Description */
+ /* 0 | dwDTERate | 4 | Number |Data terminal rate, in bits per second*/
+ /* 4 | bCharFormat | 1 | Number | Stop bits */
+ /* 0 - 1 Stop bit */
+ /* 1 - 1.5 Stop bits */
+ /* 2 - 2 Stop bits */
+ /* 5 | bParityType | 1 | Number | Parity */
+ /* 0 - None */
+ /* 1 - Odd */
+ /* 2 - Even */
+ /* 3 - Mark */
+ /* 4 - Space */
+ /* 6 | bDataBits | 1 | Number Data bits (5, 6, 7, 8 or 16). */
+ /*******************************************************************************/
case CDC_SET_LINE_CODING:
- break;
+ break;
case CDC_GET_LINE_CODING:
- break;
+ break;
case CDC_SET_CONTROL_LINE_STATE:
- break;
+ break;
case CDC_SEND_BREAK:
- break;
+ break;
- default:
- break;
- }
+ default:
+ break;
+ }
- return (USBD_OK);
- /* USER CODE END 5 */
+ return (USBD_OK);
+ /* USER CODE END 5 */
}
/**
@@ -259,13 +249,12 @@ static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length)
* @param Len: Number of data received (in bytes)
* @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
*/
-static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
-{
- /* USER CODE BEGIN 6 */
- USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
- USBD_CDC_ReceivePacket(&hUsbDeviceFS);
- return (USBD_OK);
- /* USER CODE END 6 */
+static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t* Len) {
+ /* USER CODE BEGIN 6 */
+ USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
+ USBD_CDC_ReceivePacket(&hUsbDeviceFS);
+ return (USBD_OK);
+ /* USER CODE END 6 */
}
/**
@@ -279,18 +268,17 @@ static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
* @param Len: Number of data to be sent (in bytes)
* @retval USBD_OK if all operations are OK else USBD_FAIL or USBD_BUSY
*/
-uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
-{
- uint8_t result = USBD_OK;
- /* USER CODE BEGIN 7 */
- USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData;
- if (hcdc->TxState != 0){
- return USBD_BUSY;
- }
- USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf, Len);
- result = USBD_CDC_TransmitPacket(&hUsbDeviceFS);
- /* USER CODE END 7 */
- return result;
+uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len) {
+ uint8_t result = USBD_OK;
+ /* USER CODE BEGIN 7 */
+ USBD_CDC_HandleTypeDef* hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData;
+ if(hcdc->TxState != 0) {
+ return USBD_BUSY;
+ }
+ USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf, Len);
+ result = USBD_CDC_TransmitPacket(&hUsbDeviceFS);
+ /* USER CODE END 7 */
+ return result;
}
/**
@@ -305,15 +293,14 @@ uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
* @param Len: Number of data received (in bytes)
* @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
*/
-static int8_t CDC_TransmitCplt_FS(uint8_t *Buf, uint32_t *Len, uint8_t epnum)
-{
- uint8_t result = USBD_OK;
- /* USER CODE BEGIN 13 */
- UNUSED(Buf);
- UNUSED(Len);
- UNUSED(epnum);
- /* USER CODE END 13 */
- return result;
+static int8_t CDC_TransmitCplt_FS(uint8_t* Buf, uint32_t* Len, uint8_t epnum) {
+ uint8_t result = USBD_OK;
+ /* USER CODE BEGIN 13 */
+ UNUSED(Buf);
+ UNUSED(Len);
+ UNUSED(epnum);
+ /* USER CODE END 13 */
+ return result;
}
/* USER CODE BEGIN PRIVATE_FUNCTIONS_IMPLEMENTATION */
diff --git a/firmware/targets/f7/cube/Src/usbd_conf.c b/firmware/targets/f7/cube/Src/usbd_conf.c
index 6b4ebabb..667164eb 100644
--- a/firmware/targets/f7/cube/Src/usbd_conf.c
+++ b/firmware/targets/f7/cube/Src/usbd_conf.c
@@ -67,70 +67,68 @@ extern void SystemClock_Config(void);
*******************************************************************************/
/* MSP Init */
-#if (USE_HAL_PCD_REGISTER_CALLBACK == 1U)
+#if(USE_HAL_PCD_REGISTER_CALLBACK == 1U)
static void HAL_PCD_MspInit(PCD_HandleTypeDef* pcdHandle)
#else
void HAL_PCD_MspInit(PCD_HandleTypeDef* pcdHandle)
#endif /* USE_HAL_PCD_REGISTER_CALLBACK */
{
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- if(pcdHandle->Instance==USB)
- {
- /* USER CODE BEGIN USB_MspInit 0 */
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ if(pcdHandle->Instance == USB) {
+ /* USER CODE BEGIN USB_MspInit 0 */
- /* USER CODE END USB_MspInit 0 */
+ /* USER CODE END USB_MspInit 0 */
- __HAL_RCC_GPIOA_CLK_ENABLE();
- /**USB GPIO Configuration
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ /**USB GPIO Configuration
PA11 ------> USB_DM
PA12 ------> USB_DP
*/
- GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.Alternate = GPIO_AF10_USB;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
-
- /* Peripheral clock enable */
- __HAL_RCC_USB_CLK_ENABLE();
-
- /* Peripheral interrupt init */
- HAL_NVIC_SetPriority(USB_LP_IRQn, 5, 0);
- HAL_NVIC_EnableIRQ(USB_LP_IRQn);
- /* USER CODE BEGIN USB_MspInit 1 */
-
- /* USER CODE END USB_MspInit 1 */
- }
+ GPIO_InitStruct.Pin = GPIO_PIN_11 | GPIO_PIN_12;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ GPIO_InitStruct.Alternate = GPIO_AF10_USB;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+ /* Peripheral clock enable */
+ __HAL_RCC_USB_CLK_ENABLE();
+
+ /* Peripheral interrupt init */
+ HAL_NVIC_SetPriority(USB_LP_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(USB_LP_IRQn);
+ /* USER CODE BEGIN USB_MspInit 1 */
+
+ /* USER CODE END USB_MspInit 1 */
+ }
}
-#if (USE_HAL_PCD_REGISTER_CALLBACK == 1U)
+#if(USE_HAL_PCD_REGISTER_CALLBACK == 1U)
static void HAL_PCD_MspDeInit(PCD_HandleTypeDef* pcdHandle)
#else
void HAL_PCD_MspDeInit(PCD_HandleTypeDef* pcdHandle)
#endif /* USE_HAL_PCD_REGISTER_CALLBACK */
{
- if(pcdHandle->Instance==USB)
- {
- /* USER CODE BEGIN USB_MspDeInit 0 */
+ if(pcdHandle->Instance == USB) {
+ /* USER CODE BEGIN USB_MspDeInit 0 */
- /* USER CODE END USB_MspDeInit 0 */
- /* Peripheral clock disable */
- __HAL_RCC_USB_CLK_DISABLE();
+ /* USER CODE END USB_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_USB_CLK_DISABLE();
- /**USB GPIO Configuration
+ /**USB GPIO Configuration
PA11 ------> USB_DM
PA12 ------> USB_DP
*/
- HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11|GPIO_PIN_12);
+ HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11 | GPIO_PIN_12);
- /* Peripheral interrupt Deinit*/
- HAL_NVIC_DisableIRQ(USB_LP_IRQn);
+ /* Peripheral interrupt Deinit*/
+ HAL_NVIC_DisableIRQ(USB_LP_IRQn);
- /* USER CODE BEGIN USB_MspDeInit 1 */
+ /* USER CODE BEGIN USB_MspDeInit 1 */
- /* USER CODE END USB_MspDeInit 1 */
- }
+ /* USER CODE END USB_MspDeInit 1 */
+ }
}
/**
@@ -138,19 +136,19 @@ void HAL_PCD_MspDeInit(PCD_HandleTypeDef* pcdHandle)
* @param hpcd: PCD handle
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCD_SetupStageCallback(PCD_HandleTypeDef* hpcd)
#else
-void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd)
+void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef* hpcd)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN HAL_PCD_SetupStageCallback_PreTreatment */
+ /* USER CODE BEGIN HAL_PCD_SetupStageCallback_PreTreatment */
- /* USER CODE END HAL_PCD_SetupStageCallback_PreTreatment */
- USBD_LL_SetupStage((USBD_HandleTypeDef*)hpcd->pData, (uint8_t *)hpcd->Setup);
- /* USER CODE BEGIN HAL_PCD_SetupStageCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_SetupStageCallback_PreTreatment */
+ USBD_LL_SetupStage((USBD_HandleTypeDef*)hpcd->pData, (uint8_t*)hpcd->Setup);
+ /* USER CODE BEGIN HAL_PCD_SetupStageCallback_PostTreatment */
- /* USER CODE END HAL_PCD_SetupStageCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_SetupStageCallback_PostTreatment */
}
/**
@@ -159,19 +157,19 @@ void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd)
* @param epnum: Endpoint number
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCD_DataOutStageCallback(PCD_HandleTypeDef* hpcd, uint8_t epnum)
#else
-void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
+void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef* hpcd, uint8_t epnum)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN HAL_PCD_DataOutStageCallback_PreTreatment */
+ /* USER CODE BEGIN HAL_PCD_DataOutStageCallback_PreTreatment */
- /* USER CODE END HAL_PCD_DataOutStageCallback_PreTreatment */
- USBD_LL_DataOutStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->OUT_ep[epnum].xfer_buff);
- /* USER CODE BEGIN HAL_PCD_DataOutStageCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_DataOutStageCallback_PreTreatment */
+ USBD_LL_DataOutStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->OUT_ep[epnum].xfer_buff);
+ /* USER CODE BEGIN HAL_PCD_DataOutStageCallback_PostTreatment */
- /* USER CODE END HAL_PCD_DataOutStageCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_DataOutStageCallback_PostTreatment */
}
/**
@@ -180,19 +178,19 @@ void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
* @param epnum: Endpoint number
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCD_DataInStageCallback(PCD_HandleTypeDef* hpcd, uint8_t epnum)
#else
-void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
+void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef* hpcd, uint8_t epnum)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN HAL_PCD_DataInStageCallback_PreTreatment */
+ /* USER CODE BEGIN HAL_PCD_DataInStageCallback_PreTreatment */
- /* USER CODE END HAL_PCD_DataInStageCallback_PreTreatment */
- USBD_LL_DataInStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->IN_ep[epnum].xfer_buff);
- /* USER CODE BEGIN HAL_PCD_DataInStageCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_DataInStageCallback_PreTreatment */
+ USBD_LL_DataInStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->IN_ep[epnum].xfer_buff);
+ /* USER CODE BEGIN HAL_PCD_DataInStageCallback_PostTreatment */
- /* USER CODE END HAL_PCD_DataInStageCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_DataInStageCallback_PostTreatment */
}
/**
@@ -200,19 +198,19 @@ void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
* @param hpcd: PCD handle
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCD_SOFCallback(PCD_HandleTypeDef *hpcd)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCD_SOFCallback(PCD_HandleTypeDef* hpcd)
#else
-void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd)
+void HAL_PCD_SOFCallback(PCD_HandleTypeDef* hpcd)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN HAL_PCD_SOFCallback_PreTreatment */
+ /* USER CODE BEGIN HAL_PCD_SOFCallback_PreTreatment */
- /* USER CODE END HAL_PCD_SOFCallback_PreTreatment */
- USBD_LL_SOF((USBD_HandleTypeDef*)hpcd->pData);
- /* USER CODE BEGIN HAL_PCD_SOFCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_SOFCallback_PreTreatment */
+ USBD_LL_SOF((USBD_HandleTypeDef*)hpcd->pData);
+ /* USER CODE BEGIN HAL_PCD_SOFCallback_PostTreatment */
- /* USER CODE END HAL_PCD_SOFCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_SOFCallback_PostTreatment */
}
/**
@@ -220,29 +218,28 @@ void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd)
* @param hpcd: PCD handle
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCD_ResetCallback(PCD_HandleTypeDef *hpcd)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCD_ResetCallback(PCD_HandleTypeDef* hpcd)
#else
-void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd)
+void HAL_PCD_ResetCallback(PCD_HandleTypeDef* hpcd)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN HAL_PCD_ResetCallback_PreTreatment */
+ /* USER CODE BEGIN HAL_PCD_ResetCallback_PreTreatment */
- /* USER CODE END HAL_PCD_ResetCallback_PreTreatment */
- USBD_SpeedTypeDef speed = USBD_SPEED_FULL;
+ /* USER CODE END HAL_PCD_ResetCallback_PreTreatment */
+ USBD_SpeedTypeDef speed = USBD_SPEED_FULL;
- if ( hpcd->Init.speed != PCD_SPEED_FULL)
- {
- Error_Handler();
- }
+ if(hpcd->Init.speed != PCD_SPEED_FULL) {
+ Error_Handler();
+ }
/* Set Speed. */
- USBD_LL_SetSpeed((USBD_HandleTypeDef*)hpcd->pData, speed);
+ USBD_LL_SetSpeed((USBD_HandleTypeDef*)hpcd->pData, speed);
- /* Reset Device. */
- USBD_LL_Reset((USBD_HandleTypeDef*)hpcd->pData);
- /* USER CODE BEGIN HAL_PCD_ResetCallback_PostTreatment */
+ /* Reset Device. */
+ USBD_LL_Reset((USBD_HandleTypeDef*)hpcd->pData);
+ /* USER CODE BEGIN HAL_PCD_ResetCallback_PostTreatment */
- /* USER CODE END HAL_PCD_ResetCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_ResetCallback_PostTreatment */
}
/**
@@ -251,28 +248,27 @@ void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd)
* @param hpcd: PCD handle
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCD_SuspendCallback(PCD_HandleTypeDef *hpcd)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCD_SuspendCallback(PCD_HandleTypeDef* hpcd)
#else
-void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd)
+void HAL_PCD_SuspendCallback(PCD_HandleTypeDef* hpcd)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN HAL_PCD_SuspendCallback_PreTreatment */
+ /* USER CODE BEGIN HAL_PCD_SuspendCallback_PreTreatment */
- /* USER CODE END HAL_PCD_SuspendCallback_PreTreatment */
- /* Inform USB library that core enters in suspend Mode. */
- USBD_LL_Suspend((USBD_HandleTypeDef*)hpcd->pData);
- /* Enter in STOP mode. */
- /* USER CODE BEGIN 2 */
- if (hpcd->Init.low_power_enable)
- {
- /* Set SLEEPDEEP bit and SleepOnExit of Cortex System Control Register. */
- SCB->SCR |= (uint32_t)((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
- }
- /* USER CODE END 2 */
- /* USER CODE BEGIN HAL_PCD_SuspendCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_SuspendCallback_PreTreatment */
+ /* Inform USB library that core enters in suspend Mode. */
+ USBD_LL_Suspend((USBD_HandleTypeDef*)hpcd->pData);
+ /* Enter in STOP mode. */
+ /* USER CODE BEGIN 2 */
+ if(hpcd->Init.low_power_enable) {
+ /* Set SLEEPDEEP bit and SleepOnExit of Cortex System Control Register. */
+ SCB->SCR |= (uint32_t)((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
+ }
+ /* USER CODE END 2 */
+ /* USER CODE BEGIN HAL_PCD_SuspendCallback_PostTreatment */
- /* USER CODE END HAL_PCD_SuspendCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_SuspendCallback_PostTreatment */
}
/**
@@ -281,29 +277,28 @@ void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd)
* @param hpcd: PCD handle
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCD_ResumeCallback(PCD_HandleTypeDef *hpcd)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCD_ResumeCallback(PCD_HandleTypeDef* hpcd)
#else
-void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd)
+void HAL_PCD_ResumeCallback(PCD_HandleTypeDef* hpcd)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN HAL_PCD_ResumeCallback_PreTreatment */
+ /* USER CODE BEGIN HAL_PCD_ResumeCallback_PreTreatment */
- /* USER CODE END HAL_PCD_ResumeCallback_PreTreatment */
+ /* USER CODE END HAL_PCD_ResumeCallback_PreTreatment */
- /* USER CODE BEGIN 3 */
- if (hpcd->Init.low_power_enable)
- {
- /* Reset SLEEPDEEP bit of Cortex System Control Register. */
- SCB->SCR &= (uint32_t)~((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
- SystemClockConfig_Resume();
- }
- /* USER CODE END 3 */
+ /* USER CODE BEGIN 3 */
+ if(hpcd->Init.low_power_enable) {
+ /* Reset SLEEPDEEP bit of Cortex System Control Register. */
+ SCB->SCR &= (uint32_t) ~((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
+ SystemClockConfig_Resume();
+ }
+ /* USER CODE END 3 */
- USBD_LL_Resume((USBD_HandleTypeDef*)hpcd->pData);
- /* USER CODE BEGIN HAL_PCD_ResumeCallback_PostTreatment */
+ USBD_LL_Resume((USBD_HandleTypeDef*)hpcd->pData);
+ /* USER CODE BEGIN HAL_PCD_ResumeCallback_PostTreatment */
- /* USER CODE END HAL_PCD_ResumeCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_ResumeCallback_PostTreatment */
}
/**
@@ -312,19 +307,19 @@ void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd)
* @param epnum: Endpoint number
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef* hpcd, uint8_t epnum)
#else
-void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
+void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef* hpcd, uint8_t epnum)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN HAL_PCD_ISOOUTIncompleteCallback_PreTreatment */
+ /* USER CODE BEGIN HAL_PCD_ISOOUTIncompleteCallback_PreTreatment */
- /* USER CODE END HAL_PCD_ISOOUTIncompleteCallback_PreTreatment */
- USBD_LL_IsoOUTIncomplete((USBD_HandleTypeDef*)hpcd->pData, epnum);
- /* USER CODE BEGIN HAL_PCD_ISOOUTIncompleteCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_ISOOUTIncompleteCallback_PreTreatment */
+ USBD_LL_IsoOUTIncomplete((USBD_HandleTypeDef*)hpcd->pData, epnum);
+ /* USER CODE BEGIN HAL_PCD_ISOOUTIncompleteCallback_PostTreatment */
- /* USER CODE END HAL_PCD_ISOOUTIncompleteCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_ISOOUTIncompleteCallback_PostTreatment */
}
/**
@@ -333,19 +328,19 @@ void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
* @param epnum: Endpoint number
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCD_ISOINIncompleteCallback(PCD_HandleTypeDef* hpcd, uint8_t epnum)
#else
-void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
+void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef* hpcd, uint8_t epnum)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN HAL_PCD_ISOINIncompleteCallback_PreTreatment */
+ /* USER CODE BEGIN HAL_PCD_ISOINIncompleteCallback_PreTreatment */
- /* USER CODE END HAL_PCD_ISOINIncompleteCallback_PreTreatment */
- USBD_LL_IsoINIncomplete((USBD_HandleTypeDef*)hpcd->pData, epnum);
- /* USER CODE BEGIN HAL_PCD_ISOINIncompleteCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_ISOINIncompleteCallback_PreTreatment */
+ USBD_LL_IsoINIncomplete((USBD_HandleTypeDef*)hpcd->pData, epnum);
+ /* USER CODE BEGIN HAL_PCD_ISOINIncompleteCallback_PostTreatment */
- /* USER CODE END HAL_PCD_ISOINIncompleteCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_ISOINIncompleteCallback_PostTreatment */
}
/**
@@ -353,19 +348,19 @@ void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
* @param hpcd: PCD handle
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCD_ConnectCallback(PCD_HandleTypeDef *hpcd)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCD_ConnectCallback(PCD_HandleTypeDef* hpcd)
#else
-void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd)
+void HAL_PCD_ConnectCallback(PCD_HandleTypeDef* hpcd)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN HAL_PCD_ConnectCallback_PreTreatment */
+ /* USER CODE BEGIN HAL_PCD_ConnectCallback_PreTreatment */
- /* USER CODE END HAL_PCD_ConnectCallback_PreTreatment */
- USBD_LL_DevConnected((USBD_HandleTypeDef*)hpcd->pData);
- /* USER CODE BEGIN HAL_PCD_ConnectCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_ConnectCallback_PreTreatment */
+ USBD_LL_DevConnected((USBD_HandleTypeDef*)hpcd->pData);
+ /* USER CODE BEGIN HAL_PCD_ConnectCallback_PostTreatment */
- /* USER CODE END HAL_PCD_ConnectCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_ConnectCallback_PostTreatment */
}
/**
@@ -373,24 +368,24 @@ void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd)
* @param hpcd: PCD handle
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCD_DisconnectCallback(PCD_HandleTypeDef* hpcd)
#else
-void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd)
+void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef* hpcd)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN HAL_PCD_DisconnectCallback_PreTreatment */
+ /* USER CODE BEGIN HAL_PCD_DisconnectCallback_PreTreatment */
- /* USER CODE END HAL_PCD_DisconnectCallback_PreTreatment */
- USBD_LL_DevDisconnected((USBD_HandleTypeDef*)hpcd->pData);
- /* USER CODE BEGIN HAL_PCD_DisconnectCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_DisconnectCallback_PreTreatment */
+ USBD_LL_DevDisconnected((USBD_HandleTypeDef*)hpcd->pData);
+ /* USER CODE BEGIN HAL_PCD_DisconnectCallback_PostTreatment */
- /* USER CODE END HAL_PCD_DisconnectCallback_PostTreatment */
+ /* USER CODE END HAL_PCD_DisconnectCallback_PostTreatment */
}
- /* USER CODE BEGIN LowLevelInterface */
+/* USER CODE BEGIN LowLevelInterface */
- /* USER CODE END LowLevelInterface */
+/* USER CODE END LowLevelInterface */
/*******************************************************************************
LL Driver Interface (USB Device Library --> PCD)
@@ -401,66 +396,64 @@ void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd)
* @param pdev: Device handle
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev)
-{
- /* Init USB Ip. */
- hpcd_USB_FS.pData = pdev;
- /* Link the driver to the stack. */
- pdev->pData = &hpcd_USB_FS;
-/* Enable USB power on Pwrctrl CR2 register. */
- HAL_PWREx_EnableVddUSB();
-
- hpcd_USB_FS.Instance = USB;
- hpcd_USB_FS.Init.dev_endpoints = 8;
- hpcd_USB_FS.Init.speed = PCD_SPEED_FULL;
- hpcd_USB_FS.Init.phy_itface = PCD_PHY_EMBEDDED;
- hpcd_USB_FS.Init.Sof_enable = DISABLE;
- hpcd_USB_FS.Init.low_power_enable = DISABLE;
- hpcd_USB_FS.Init.lpm_enable = DISABLE;
- hpcd_USB_FS.Init.battery_charging_enable = DISABLE;
-
- #if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
- /* register Msp Callbacks (before the Init) */
- HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_MSPINIT_CB_ID, PCD_MspInit);
- HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_MSPDEINIT_CB_ID, PCD_MspDeInit);
- #endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
-
- if (HAL_PCD_Init(&hpcd_USB_FS) != HAL_OK)
- {
- Error_Handler( );
- }
-
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
- /* Register USB PCD CallBacks */
- HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_SOF_CB_ID, PCD_SOFCallback);
- HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_SETUPSTAGE_CB_ID, PCD_SetupStageCallback);
- HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_RESET_CB_ID, PCD_ResetCallback);
- HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_SUSPEND_CB_ID, PCD_SuspendCallback);
- HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_RESUME_CB_ID, PCD_ResumeCallback);
- HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_CONNECT_CB_ID, PCD_ConnectCallback);
- HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_DISCONNECT_CB_ID, PCD_DisconnectCallback);
- /* USER CODE BEGIN RegisterCallBackFirstPart */
-
- /* USER CODE END RegisterCallBackFirstPart */
- HAL_PCD_RegisterLpmCallback(&hpcd_USB_FS, PCDEx_LPM_Callback);
- HAL_PCD_RegisterDataOutStageCallback(&hpcd_USB_FS, PCD_DataOutStageCallback);
- HAL_PCD_RegisterDataInStageCallback(&hpcd_USB_FS, PCD_DataInStageCallback);
- HAL_PCD_RegisterIsoOutIncpltCallback(&hpcd_USB_FS, PCD_ISOOUTIncompleteCallback);
- HAL_PCD_RegisterIsoInIncpltCallback(&hpcd_USB_FS, PCD_ISOINIncompleteCallback);
- /* USER CODE BEGIN RegisterCallBackSecondPart */
-
- /* USER CODE END RegisterCallBackSecondPart */
+USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef* pdev) {
+ /* Init USB Ip. */
+ hpcd_USB_FS.pData = pdev;
+ /* Link the driver to the stack. */
+ pdev->pData = &hpcd_USB_FS;
+ /* Enable USB power on Pwrctrl CR2 register. */
+ HAL_PWREx_EnableVddUSB();
+
+ hpcd_USB_FS.Instance = USB;
+ hpcd_USB_FS.Init.dev_endpoints = 8;
+ hpcd_USB_FS.Init.speed = PCD_SPEED_FULL;
+ hpcd_USB_FS.Init.phy_itface = PCD_PHY_EMBEDDED;
+ hpcd_USB_FS.Init.Sof_enable = DISABLE;
+ hpcd_USB_FS.Init.low_power_enable = DISABLE;
+ hpcd_USB_FS.Init.lpm_enable = DISABLE;
+ hpcd_USB_FS.Init.battery_charging_enable = DISABLE;
+
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+ /* register Msp Callbacks (before the Init) */
+ HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_MSPINIT_CB_ID, PCD_MspInit);
+ HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_MSPDEINIT_CB_ID, PCD_MspDeInit);
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
- /* USER CODE BEGIN EndPoint_Configuration */
- HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x00 , PCD_SNG_BUF, 0x18);
- HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x80 , PCD_SNG_BUF, 0x58);
- /* USER CODE END EndPoint_Configuration */
- /* USER CODE BEGIN EndPoint_Configuration_CDC */
- HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x81 , PCD_SNG_BUF, 0xC0);
- HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x01 , PCD_SNG_BUF, 0x110);
- HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x82 , PCD_SNG_BUF, 0x100);
- /* USER CODE END EndPoint_Configuration_CDC */
- return USBD_OK;
+
+ if(HAL_PCD_Init(&hpcd_USB_FS) != HAL_OK) {
+ Error_Handler();
+ }
+
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+ /* Register USB PCD CallBacks */
+ HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_SOF_CB_ID, PCD_SOFCallback);
+ HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_SETUPSTAGE_CB_ID, PCD_SetupStageCallback);
+ HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_RESET_CB_ID, PCD_ResetCallback);
+ HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_SUSPEND_CB_ID, PCD_SuspendCallback);
+ HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_RESUME_CB_ID, PCD_ResumeCallback);
+ HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_CONNECT_CB_ID, PCD_ConnectCallback);
+ HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_DISCONNECT_CB_ID, PCD_DisconnectCallback);
+ /* USER CODE BEGIN RegisterCallBackFirstPart */
+
+ /* USER CODE END RegisterCallBackFirstPart */
+ HAL_PCD_RegisterLpmCallback(&hpcd_USB_FS, PCDEx_LPM_Callback);
+ HAL_PCD_RegisterDataOutStageCallback(&hpcd_USB_FS, PCD_DataOutStageCallback);
+ HAL_PCD_RegisterDataInStageCallback(&hpcd_USB_FS, PCD_DataInStageCallback);
+ HAL_PCD_RegisterIsoOutIncpltCallback(&hpcd_USB_FS, PCD_ISOOUTIncompleteCallback);
+ HAL_PCD_RegisterIsoInIncpltCallback(&hpcd_USB_FS, PCD_ISOINIncompleteCallback);
+ /* USER CODE BEGIN RegisterCallBackSecondPart */
+
+ /* USER CODE END RegisterCallBackSecondPart */
+#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
+ /* USER CODE BEGIN EndPoint_Configuration */
+ HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData, 0x00, PCD_SNG_BUF, 0x18);
+ HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData, 0x80, PCD_SNG_BUF, 0x58);
+ /* USER CODE END EndPoint_Configuration */
+ /* USER CODE BEGIN EndPoint_Configuration_CDC */
+ HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData, 0x81, PCD_SNG_BUF, 0xC0);
+ HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData, 0x01, PCD_SNG_BUF, 0x110);
+ HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData, 0x82, PCD_SNG_BUF, 0x100);
+ /* USER CODE END EndPoint_Configuration_CDC */
+ return USBD_OK;
}
/**
@@ -468,16 +461,15 @@ USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev)
* @param pdev: Device handle
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev)
-{
- HAL_StatusTypeDef hal_status = HAL_OK;
- USBD_StatusTypeDef usb_status = USBD_OK;
+USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef* pdev) {
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ USBD_StatusTypeDef usb_status = USBD_OK;
- hal_status = HAL_PCD_DeInit(pdev->pData);
+ hal_status = HAL_PCD_DeInit(pdev->pData);
- usb_status = USBD_Get_USB_Status(hal_status);
+ usb_status = USBD_Get_USB_Status(hal_status);
- return usb_status;
+ return usb_status;
}
/**
@@ -485,16 +477,15 @@ USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev)
* @param pdev: Device handle
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev)
-{
- HAL_StatusTypeDef hal_status = HAL_OK;
- USBD_StatusTypeDef usb_status = USBD_OK;
+USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef* pdev) {
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ USBD_StatusTypeDef usb_status = USBD_OK;
- hal_status = HAL_PCD_Start(pdev->pData);
+ hal_status = HAL_PCD_Start(pdev->pData);
- usb_status = USBD_Get_USB_Status(hal_status);
+ usb_status = USBD_Get_USB_Status(hal_status);
- return usb_status;
+ return usb_status;
}
/**
@@ -502,16 +493,15 @@ USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev)
* @param pdev: Device handle
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev)
-{
- HAL_StatusTypeDef hal_status = HAL_OK;
- USBD_StatusTypeDef usb_status = USBD_OK;
+USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef* pdev) {
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ USBD_StatusTypeDef usb_status = USBD_OK;
- hal_status = HAL_PCD_Stop(pdev->pData);
+ hal_status = HAL_PCD_Stop(pdev->pData);
- usb_status = USBD_Get_USB_Status(hal_status);
+ usb_status = USBD_Get_USB_Status(hal_status);
- return usb_status;
+ return usb_status;
}
/**
@@ -522,16 +512,16 @@ USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev)
* @param ep_mps: Endpoint max packet size
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t ep_type, uint16_t ep_mps)
-{
- HAL_StatusTypeDef hal_status = HAL_OK;
- USBD_StatusTypeDef usb_status = USBD_OK;
+USBD_StatusTypeDef
+ USBD_LL_OpenEP(USBD_HandleTypeDef* pdev, uint8_t ep_addr, uint8_t ep_type, uint16_t ep_mps) {
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ USBD_StatusTypeDef usb_status = USBD_OK;
- hal_status = HAL_PCD_EP_Open(pdev->pData, ep_addr, ep_mps, ep_type);
+ hal_status = HAL_PCD_EP_Open(pdev->pData, ep_addr, ep_mps, ep_type);
- usb_status = USBD_Get_USB_Status(hal_status);
+ usb_status = USBD_Get_USB_Status(hal_status);
- return usb_status;
+ return usb_status;
}
/**
@@ -540,16 +530,15 @@ USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uin
* @param ep_addr: Endpoint number
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
-{
- HAL_StatusTypeDef hal_status = HAL_OK;
- USBD_StatusTypeDef usb_status = USBD_OK;
+USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef* pdev, uint8_t ep_addr) {
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ USBD_StatusTypeDef usb_status = USBD_OK;
- hal_status = HAL_PCD_EP_Close(pdev->pData, ep_addr);
+ hal_status = HAL_PCD_EP_Close(pdev->pData, ep_addr);
- usb_status = USBD_Get_USB_Status(hal_status);
+ usb_status = USBD_Get_USB_Status(hal_status);
- return usb_status;
+ return usb_status;
}
/**
@@ -558,16 +547,15 @@ USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
* @param ep_addr: Endpoint number
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
-{
- HAL_StatusTypeDef hal_status = HAL_OK;
- USBD_StatusTypeDef usb_status = USBD_OK;
+USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef* pdev, uint8_t ep_addr) {
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ USBD_StatusTypeDef usb_status = USBD_OK;
- hal_status = HAL_PCD_EP_Flush(pdev->pData, ep_addr);
+ hal_status = HAL_PCD_EP_Flush(pdev->pData, ep_addr);
- usb_status = USBD_Get_USB_Status(hal_status);
+ usb_status = USBD_Get_USB_Status(hal_status);
- return usb_status;
+ return usb_status;
}
/**
@@ -576,16 +564,15 @@ USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
* @param ep_addr: Endpoint number
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
-{
- HAL_StatusTypeDef hal_status = HAL_OK;
- USBD_StatusTypeDef usb_status = USBD_OK;
+USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef* pdev, uint8_t ep_addr) {
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ USBD_StatusTypeDef usb_status = USBD_OK;
- hal_status = HAL_PCD_EP_SetStall(pdev->pData, ep_addr);
+ hal_status = HAL_PCD_EP_SetStall(pdev->pData, ep_addr);
- usb_status = USBD_Get_USB_Status(hal_status);
+ usb_status = USBD_Get_USB_Status(hal_status);
- return usb_status;
+ return usb_status;
}
/**
@@ -594,16 +581,15 @@ USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
* @param ep_addr: Endpoint number
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
-{
- HAL_StatusTypeDef hal_status = HAL_OK;
- USBD_StatusTypeDef usb_status = USBD_OK;
+USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef* pdev, uint8_t ep_addr) {
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ USBD_StatusTypeDef usb_status = USBD_OK;
- hal_status = HAL_PCD_EP_ClrStall(pdev->pData, ep_addr);
+ hal_status = HAL_PCD_EP_ClrStall(pdev->pData, ep_addr);
- usb_status = USBD_Get_USB_Status(hal_status);
+ usb_status = USBD_Get_USB_Status(hal_status);
- return usb_status;
+ return usb_status;
}
/**
@@ -612,18 +598,14 @@ USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_add
* @param ep_addr: Endpoint number
* @retval Stall (1: Yes, 0: No)
*/
-uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
-{
- PCD_HandleTypeDef *hpcd = (PCD_HandleTypeDef*) pdev->pData;
+uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef* pdev, uint8_t ep_addr) {
+ PCD_HandleTypeDef* hpcd = (PCD_HandleTypeDef*)pdev->pData;
- if((ep_addr & 0x80) == 0x80)
- {
- return hpcd->IN_ep[ep_addr & 0x7F].is_stall;
- }
- else
- {
- return hpcd->OUT_ep[ep_addr & 0x7F].is_stall;
- }
+ if((ep_addr & 0x80) == 0x80) {
+ return hpcd->IN_ep[ep_addr & 0x7F].is_stall;
+ } else {
+ return hpcd->OUT_ep[ep_addr & 0x7F].is_stall;
+ }
}
/**
@@ -632,16 +614,15 @@ uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
* @param dev_addr: Device address
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_addr)
-{
- HAL_StatusTypeDef hal_status = HAL_OK;
- USBD_StatusTypeDef usb_status = USBD_OK;
+USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef* pdev, uint8_t dev_addr) {
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ USBD_StatusTypeDef usb_status = USBD_OK;
- hal_status = HAL_PCD_SetAddress(pdev->pData, dev_addr);
+ hal_status = HAL_PCD_SetAddress(pdev->pData, dev_addr);
- usb_status = USBD_Get_USB_Status(hal_status);
+ usb_status = USBD_Get_USB_Status(hal_status);
- return usb_status;
+ return usb_status;
}
/**
@@ -652,16 +633,16 @@ USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_a
* @param size: Data size
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint32_t size)
-{
- HAL_StatusTypeDef hal_status = HAL_OK;
- USBD_StatusTypeDef usb_status = USBD_OK;
+USBD_StatusTypeDef
+ USBD_LL_Transmit(USBD_HandleTypeDef* pdev, uint8_t ep_addr, uint8_t* pbuf, uint32_t size) {
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ USBD_StatusTypeDef usb_status = USBD_OK;
- hal_status = HAL_PCD_EP_Transmit(pdev->pData, ep_addr, pbuf, size);
+ hal_status = HAL_PCD_EP_Transmit(pdev->pData, ep_addr, pbuf, size);
- usb_status = USBD_Get_USB_Status(hal_status);
+ usb_status = USBD_Get_USB_Status(hal_status);
- return usb_status;
+ return usb_status;
}
/**
@@ -672,16 +653,19 @@ USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, u
* @param size: Data size
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint32_t size)
-{
- HAL_StatusTypeDef hal_status = HAL_OK;
- USBD_StatusTypeDef usb_status = USBD_OK;
+USBD_StatusTypeDef USBD_LL_PrepareReceive(
+ USBD_HandleTypeDef* pdev,
+ uint8_t ep_addr,
+ uint8_t* pbuf,
+ uint32_t size) {
+ HAL_StatusTypeDef hal_status = HAL_OK;
+ USBD_StatusTypeDef usb_status = USBD_OK;
- hal_status = HAL_PCD_EP_Receive(pdev->pData, ep_addr, pbuf, size);
+ hal_status = HAL_PCD_EP_Receive(pdev->pData, ep_addr, pbuf, size);
- usb_status = USBD_Get_USB_Status(hal_status);
+ usb_status = USBD_Get_USB_Status(hal_status);
- return usb_status;
+ return usb_status;
}
/**
@@ -690,9 +674,8 @@ USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_a
* @param ep_addr: Endpoint number
* @retval Received Data Size
*/
-uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
-{
- return HAL_PCD_EP_GetRxCount((PCD_HandleTypeDef*) pdev->pData, ep_addr);
+uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef* pdev, uint8_t ep_addr) {
+ return HAL_PCD_EP_GetRxCount((PCD_HandleTypeDef*)pdev->pData, ep_addr);
}
/**
@@ -701,38 +684,35 @@ uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
* @param msg: LPM message
* @retval None
*/
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
-static void PCDEx_LPM_Callback(PCD_HandleTypeDef *hpcd, PCD_LPM_MsgTypeDef msg)
+#if(USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+static void PCDEx_LPM_Callback(PCD_HandleTypeDef* hpcd, PCD_LPM_MsgTypeDef msg)
#else
-void HAL_PCDEx_LPM_Callback(PCD_HandleTypeDef *hpcd, PCD_LPM_MsgTypeDef msg)
+void HAL_PCDEx_LPM_Callback(PCD_HandleTypeDef* hpcd, PCD_LPM_MsgTypeDef msg)
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- /* USER CODE BEGIN LPM_Callback */
- switch (msg)
- {
- case PCD_LPM_L0_ACTIVE:
- if (hpcd->Init.low_power_enable)
- {
- SystemClockConfig_Resume();
-
- /* Reset SLEEPDEEP bit of Cortex System Control Register. */
- SCB->SCR &= (uint32_t)~((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
+ /* USER CODE BEGIN LPM_Callback */
+ switch(msg) {
+ case PCD_LPM_L0_ACTIVE:
+ if(hpcd->Init.low_power_enable) {
+ SystemClockConfig_Resume();
+
+ /* Reset SLEEPDEEP bit of Cortex System Control Register. */
+ SCB->SCR &= (uint32_t) ~((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
+ }
+ USBD_LL_Resume(hpcd->pData);
+ break;
+
+ case PCD_LPM_L1_ACTIVE:
+ USBD_LL_Suspend(hpcd->pData);
+
+ /* Enter in STOP mode. */
+ if(hpcd->Init.low_power_enable) {
+ /* Set SLEEPDEEP bit and SleepOnExit of Cortex System Control Register. */
+ SCB->SCR |= (uint32_t)((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
+ }
+ break;
}
- USBD_LL_Resume(hpcd->pData);
- break;
-
- case PCD_LPM_L1_ACTIVE:
- USBD_LL_Suspend(hpcd->pData);
-
- /* Enter in STOP mode. */
- if (hpcd->Init.low_power_enable)
- {
- /* Set SLEEPDEEP bit and SleepOnExit of Cortex System Control Register. */
- SCB->SCR |= (uint32_t)((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
- }
- break;
- }
- /* USER CODE END LPM_Callback */
+ /* USER CODE END LPM_Callback */
}
/**
@@ -740,9 +720,8 @@ void HAL_PCDEx_LPM_Callback(PCD_HandleTypeDef *hpcd, PCD_LPM_MsgTypeDef msg)
* @param Delay: Delay in ms
* @retval None
*/
-void USBD_LL_Delay(uint32_t Delay)
-{
- HAL_Delay(Delay);
+void USBD_LL_Delay(uint32_t Delay) {
+ HAL_Delay(Delay);
}
/**
@@ -750,10 +729,9 @@ void USBD_LL_Delay(uint32_t Delay)
* @param size: Size of allocated memory
* @retval None
*/
-void *USBD_static_malloc(uint32_t size)
-{
- static uint32_t mem[(sizeof(USBD_CDC_HandleTypeDef)/4)+1];/* On 32-bit boundary */
- return mem;
+void* USBD_static_malloc(uint32_t size) {
+ static uint32_t mem[(sizeof(USBD_CDC_HandleTypeDef) / 4) + 1]; /* On 32-bit boundary */
+ return mem;
}
/**
@@ -761,9 +739,7 @@ void *USBD_static_malloc(uint32_t size)
* @param p: Pointer to allocated memory address
* @retval None
*/
-void USBD_static_free(void *p)
-{
-
+void USBD_static_free(void* p) {
}
/* USER CODE BEGIN 5 */
@@ -772,9 +748,8 @@ void USBD_static_free(void *p)
* enable HSI, PLL and select PLL as system clock source.
* @retval None
*/
-static void SystemClockConfig_Resume(void)
-{
- SystemClock_Config();
+static void SystemClockConfig_Resume(void) {
+ SystemClock_Config();
}
/* USER CODE END 5 */
@@ -783,28 +758,26 @@ static void SystemClockConfig_Resume(void)
* @param hal_status: HAL status
* @retval USB status
*/
-USBD_StatusTypeDef USBD_Get_USB_Status(HAL_StatusTypeDef hal_status)
-{
- USBD_StatusTypeDef usb_status = USBD_OK;
-
- switch (hal_status)
- {
- case HAL_OK :
- usb_status = USBD_OK;
- break;
- case HAL_ERROR :
- usb_status = USBD_FAIL;
- break;
- case HAL_BUSY :
- usb_status = USBD_BUSY;
- break;
- case HAL_TIMEOUT :
- usb_status = USBD_FAIL;
- break;
- default :
- usb_status = USBD_FAIL;
- break;
- }
- return usb_status;
+USBD_StatusTypeDef USBD_Get_USB_Status(HAL_StatusTypeDef hal_status) {
+ USBD_StatusTypeDef usb_status = USBD_OK;
+
+ switch(hal_status) {
+ case HAL_OK:
+ usb_status = USBD_OK;
+ break;
+ case HAL_ERROR:
+ usb_status = USBD_FAIL;
+ break;
+ case HAL_BUSY:
+ usb_status = USBD_BUSY;
+ break;
+ case HAL_TIMEOUT:
+ usb_status = USBD_FAIL;
+ break;
+ default:
+ usb_status = USBD_FAIL;
+ break;
+ }
+ return usb_status;
}
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/firmware/targets/f7/cube/Src/usbd_desc.c b/firmware/targets/f7/cube/Src/usbd_desc.c
index 7b11ae64..6e466cd3 100644
--- a/firmware/targets/f7/cube/Src/usbd_desc.c
+++ b/firmware/targets/f7/cube/Src/usbd_desc.c
@@ -63,13 +63,13 @@
* @{
*/
-#define USBD_VID 1155
-#define USBD_LANGID_STRING 1033
-#define USBD_MANUFACTURER_STRING "Flipper"
-#define USBD_PID 22336
-#define USBD_PRODUCT_STRING "Flipper Control Virtual ComPort"
-#define USBD_CONFIGURATION_STRING "CDC Config"
-#define USBD_INTERFACE_STRING "CDC Interface"
+#define USBD_VID 1155
+#define USBD_LANGID_STRING 1033
+#define USBD_MANUFACTURER_STRING "Flipper"
+#define USBD_PID 22336
+#define USBD_PRODUCT_STRING "Flipper Control Virtual ComPort"
+#define USBD_CONFIGURATION_STRING "CDC Config"
+#define USBD_INTERFACE_STRING "CDC Interface"
/* USER CODE BEGIN PRIVATE_DEFINES */
@@ -102,7 +102,7 @@
*/
static void Get_SerialNum(void);
-static void IntToUnicode(uint32_t value, uint8_t * pbuf, uint8_t len);
+static void IntToUnicode(uint32_t value, uint8_t* pbuf, uint8_t len);
/**
* @}
@@ -113,13 +113,13 @@ static void IntToUnicode(uint32_t value, uint8_t * pbuf, uint8_t len);
* @{
*/
-uint8_t * USBD_CDC_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
-uint8_t * USBD_CDC_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
-uint8_t * USBD_CDC_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
-uint8_t * USBD_CDC_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
-uint8_t * USBD_CDC_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
-uint8_t * USBD_CDC_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
-uint8_t * USBD_CDC_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
+uint8_t* USBD_CDC_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t* length);
+uint8_t* USBD_CDC_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length);
+uint8_t* USBD_CDC_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length);
+uint8_t* USBD_CDC_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length);
+uint8_t* USBD_CDC_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length);
+uint8_t* USBD_CDC_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length);
+uint8_t* USBD_CDC_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length);
/**
* @}
@@ -130,41 +130,38 @@ uint8_t * USBD_CDC_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *len
* @{
*/
-USBD_DescriptorsTypeDef CDC_Desc =
-{
- USBD_CDC_DeviceDescriptor,
- USBD_CDC_LangIDStrDescriptor,
- USBD_CDC_ManufacturerStrDescriptor,
- USBD_CDC_ProductStrDescriptor,
- USBD_CDC_SerialStrDescriptor,
- USBD_CDC_ConfigStrDescriptor,
- USBD_CDC_InterfaceStrDescriptor
-};
-
-#if defined ( __ICCARM__ ) /* IAR Compiler */
- #pragma data_alignment=4
+USBD_DescriptorsTypeDef CDC_Desc = {
+ USBD_CDC_DeviceDescriptor,
+ USBD_CDC_LangIDStrDescriptor,
+ USBD_CDC_ManufacturerStrDescriptor,
+ USBD_CDC_ProductStrDescriptor,
+ USBD_CDC_SerialStrDescriptor,
+ USBD_CDC_ConfigStrDescriptor,
+ USBD_CDC_InterfaceStrDescriptor};
+
+#if defined(__ICCARM__) /* IAR Compiler */
+#pragma data_alignment = 4
#endif /* defined ( __ICCARM__ ) */
/** USB standard device descriptor. */
-__ALIGN_BEGIN uint8_t USBD_CDC_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END =
-{
- 0x12, /*bLength */
- USB_DESC_TYPE_DEVICE, /*bDescriptorType*/
- 0x00, /*bcdUSB */
- 0x02,
- 0x02, /*bDeviceClass*/
- 0x02, /*bDeviceSubClass*/
- 0x00, /*bDeviceProtocol*/
- USB_MAX_EP0_SIZE, /*bMaxPacketSize*/
- LOBYTE(USBD_VID), /*idVendor*/
- HIBYTE(USBD_VID), /*idVendor*/
- LOBYTE(USBD_PID), /*idProduct*/
- HIBYTE(USBD_PID), /*idProduct*/
- 0x00, /*bcdDevice rel. 2.00*/
- 0x02,
- USBD_IDX_MFC_STR, /*Index of manufacturer string*/
- USBD_IDX_PRODUCT_STR, /*Index of product string*/
- USBD_IDX_SERIAL_STR, /*Index of serial number string*/
- USBD_MAX_NUM_CONFIGURATION /*bNumConfigurations*/
+__ALIGN_BEGIN uint8_t USBD_CDC_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END = {
+ 0x12, /*bLength */
+ USB_DESC_TYPE_DEVICE, /*bDescriptorType*/
+ 0x00, /*bcdUSB */
+ 0x02,
+ 0x02, /*bDeviceClass*/
+ 0x02, /*bDeviceSubClass*/
+ 0x00, /*bDeviceProtocol*/
+ USB_MAX_EP0_SIZE, /*bMaxPacketSize*/
+ LOBYTE(USBD_VID), /*idVendor*/
+ HIBYTE(USBD_VID), /*idVendor*/
+ LOBYTE(USBD_PID), /*idProduct*/
+ HIBYTE(USBD_PID), /*idProduct*/
+ 0x00, /*bcdDevice rel. 2.00*/
+ 0x02,
+ USBD_IDX_MFC_STR, /*Index of manufacturer string*/
+ USBD_IDX_PRODUCT_STR, /*Index of product string*/
+ USBD_IDX_SERIAL_STR, /*Index of serial number string*/
+ USBD_MAX_NUM_CONFIGURATION /*bNumConfigurations*/
};
/* USB_DeviceDescriptor */
@@ -178,31 +175,29 @@ __ALIGN_BEGIN uint8_t USBD_CDC_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END =
* @{
*/
-#if defined ( __ICCARM__ ) /* IAR Compiler */
- #pragma data_alignment=4
+#if defined(__ICCARM__) /* IAR Compiler */
+#pragma data_alignment = 4
#endif /* defined ( __ICCARM__ ) */
/** USB lang identifier descriptor. */
-__ALIGN_BEGIN uint8_t USBD_LangIDDesc[USB_LEN_LANGID_STR_DESC] __ALIGN_END =
-{
- USB_LEN_LANGID_STR_DESC,
- USB_DESC_TYPE_STRING,
- LOBYTE(USBD_LANGID_STRING),
- HIBYTE(USBD_LANGID_STRING)
-};
-
-#if defined ( __ICCARM__ ) /* IAR Compiler */
- #pragma data_alignment=4
+__ALIGN_BEGIN uint8_t USBD_LangIDDesc[USB_LEN_LANGID_STR_DESC] __ALIGN_END = {
+ USB_LEN_LANGID_STR_DESC,
+ USB_DESC_TYPE_STRING,
+ LOBYTE(USBD_LANGID_STRING),
+ HIBYTE(USBD_LANGID_STRING)};
+
+#if defined(__ICCARM__) /* IAR Compiler */
+#pragma data_alignment = 4
#endif /* defined ( __ICCARM__ ) */
/* Internal string descriptor. */
__ALIGN_BEGIN uint8_t USBD_StrDesc[USBD_MAX_STR_DESC_SIZ] __ALIGN_END;
-#if defined ( __ICCARM__ ) /*!< IAR Compiler */
- #pragma data_alignment=4
+#if defined(__ICCARM__) /*!< IAR Compiler */
+#pragma data_alignment = 4
#endif
__ALIGN_BEGIN uint8_t USBD_StringSerial[USB_SIZ_STRING_SERIAL] __ALIGN_END = {
- USB_SIZ_STRING_SERIAL,
- USB_DESC_TYPE_STRING,
+ USB_SIZ_STRING_SERIAL,
+ USB_DESC_TYPE_STRING,
};
/**
@@ -220,11 +215,10 @@ __ALIGN_BEGIN uint8_t USBD_StringSerial[USB_SIZ_STRING_SERIAL] __ALIGN_END = {
* @param length : Pointer to data length variable
* @retval Pointer to descriptor buffer
*/
-uint8_t * USBD_CDC_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
-{
- UNUSED(speed);
- *length = sizeof(USBD_CDC_DeviceDesc);
- return USBD_CDC_DeviceDesc;
+uint8_t* USBD_CDC_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t* length) {
+ UNUSED(speed);
+ *length = sizeof(USBD_CDC_DeviceDesc);
+ return USBD_CDC_DeviceDesc;
}
/**
@@ -233,11 +227,10 @@ uint8_t * USBD_CDC_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
* @param length : Pointer to data length variable
* @retval Pointer to descriptor buffer
*/
-uint8_t * USBD_CDC_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
-{
- UNUSED(speed);
- *length = sizeof(USBD_LangIDDesc);
- return USBD_LangIDDesc;
+uint8_t* USBD_CDC_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length) {
+ UNUSED(speed);
+ *length = sizeof(USBD_LangIDDesc);
+ return USBD_LangIDDesc;
}
/**
@@ -246,17 +239,13 @@ uint8_t * USBD_CDC_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length
* @param length : Pointer to data length variable
* @retval Pointer to descriptor buffer
*/
-uint8_t * USBD_CDC_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
-{
- if(speed == 0)
- {
- USBD_GetString((uint8_t *)USBD_PRODUCT_STRING, USBD_StrDesc, length);
- }
- else
- {
- USBD_GetString((uint8_t *)USBD_PRODUCT_STRING, USBD_StrDesc, length);
- }
- return USBD_StrDesc;
+uint8_t* USBD_CDC_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length) {
+ if(speed == 0) {
+ USBD_GetString((uint8_t*)USBD_PRODUCT_STRING, USBD_StrDesc, length);
+ } else {
+ USBD_GetString((uint8_t*)USBD_PRODUCT_STRING, USBD_StrDesc, length);
+ }
+ return USBD_StrDesc;
}
/**
@@ -265,11 +254,10 @@ uint8_t * USBD_CDC_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *lengt
* @param length : Pointer to data length variable
* @retval Pointer to descriptor buffer
*/
-uint8_t * USBD_CDC_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
-{
- UNUSED(speed);
- USBD_GetString((uint8_t *)USBD_MANUFACTURER_STRING, USBD_StrDesc, length);
- return USBD_StrDesc;
+uint8_t* USBD_CDC_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length) {
+ UNUSED(speed);
+ USBD_GetString((uint8_t*)USBD_MANUFACTURER_STRING, USBD_StrDesc, length);
+ return USBD_StrDesc;
}
/**
@@ -278,20 +266,19 @@ uint8_t * USBD_CDC_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *
* @param length : Pointer to data length variable
* @retval Pointer to descriptor buffer
*/
-uint8_t * USBD_CDC_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
-{
- UNUSED(speed);
- *length = USB_SIZ_STRING_SERIAL;
+uint8_t* USBD_CDC_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length) {
+ UNUSED(speed);
+ *length = USB_SIZ_STRING_SERIAL;
- /* Update the serial number string descriptor with the data from the unique
+ /* Update the serial number string descriptor with the data from the unique
* ID */
- Get_SerialNum();
+ Get_SerialNum();
- /* USER CODE BEGIN USBD_CDC_SerialStrDescriptor */
+ /* USER CODE BEGIN USBD_CDC_SerialStrDescriptor */
- /* USER CODE END USBD_CDC_SerialStrDescriptor */
+ /* USER CODE END USBD_CDC_SerialStrDescriptor */
- return (uint8_t *) USBD_StringSerial;
+ return (uint8_t*)USBD_StringSerial;
}
/**
@@ -300,17 +287,13 @@ uint8_t * USBD_CDC_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length
* @param length : Pointer to data length variable
* @retval Pointer to descriptor buffer
*/
-uint8_t * USBD_CDC_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
-{
- if(speed == USBD_SPEED_HIGH)
- {
- USBD_GetString((uint8_t *)USBD_CONFIGURATION_STRING, USBD_StrDesc, length);
- }
- else
- {
- USBD_GetString((uint8_t *)USBD_CONFIGURATION_STRING, USBD_StrDesc, length);
- }
- return USBD_StrDesc;
+uint8_t* USBD_CDC_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length) {
+ if(speed == USBD_SPEED_HIGH) {
+ USBD_GetString((uint8_t*)USBD_CONFIGURATION_STRING, USBD_StrDesc, length);
+ } else {
+ USBD_GetString((uint8_t*)USBD_CONFIGURATION_STRING, USBD_StrDesc, length);
+ }
+ return USBD_StrDesc;
}
/**
@@ -319,17 +302,13 @@ uint8_t * USBD_CDC_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length
* @param length : Pointer to data length variable
* @retval Pointer to descriptor buffer
*/
-uint8_t * USBD_CDC_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
-{
- if(speed == 0)
- {
- USBD_GetString((uint8_t *)USBD_INTERFACE_STRING, USBD_StrDesc, length);
- }
- else
- {
- USBD_GetString((uint8_t *)USBD_INTERFACE_STRING, USBD_StrDesc, length);
- }
- return USBD_StrDesc;
+uint8_t* USBD_CDC_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t* length) {
+ if(speed == 0) {
+ USBD_GetString((uint8_t*)USBD_INTERFACE_STRING, USBD_StrDesc, length);
+ } else {
+ USBD_GetString((uint8_t*)USBD_INTERFACE_STRING, USBD_StrDesc, length);
+ }
+ return USBD_StrDesc;
}
/**
@@ -337,21 +316,19 @@ uint8_t * USBD_CDC_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *len
* @param None
* @retval None
*/
-static void Get_SerialNum(void)
-{
- uint32_t deviceserial0, deviceserial1, deviceserial2;
+static void Get_SerialNum(void) {
+ uint32_t deviceserial0, deviceserial1, deviceserial2;
- deviceserial0 = *(uint32_t *) DEVICE_ID1;
- deviceserial1 = *(uint32_t *) DEVICE_ID2;
- deviceserial2 = *(uint32_t *) DEVICE_ID3;
+ deviceserial0 = *(uint32_t*)DEVICE_ID1;
+ deviceserial1 = *(uint32_t*)DEVICE_ID2;
+ deviceserial2 = *(uint32_t*)DEVICE_ID3;
- deviceserial0 += deviceserial2;
+ deviceserial0 += deviceserial2;
- if (deviceserial0 != 0)
- {
- IntToUnicode(deviceserial0, &USBD_StringSerial[2], 8);
- IntToUnicode(deviceserial1, &USBD_StringSerial[18], 4);
- }
+ if(deviceserial0 != 0) {
+ IntToUnicode(deviceserial0, &USBD_StringSerial[2], 8);
+ IntToUnicode(deviceserial1, &USBD_StringSerial[18], 4);
+ }
}
/**
@@ -361,25 +338,20 @@ static void Get_SerialNum(void)
* @param len: buffer length
* @retval None
*/
-static void IntToUnicode(uint32_t value, uint8_t * pbuf, uint8_t len)
-{
- uint8_t idx = 0;
-
- for (idx = 0; idx < len; idx++)
- {
- if (((value >> 28)) < 0xA)
- {
- pbuf[2 * idx] = (value >> 28) + '0';
- }
- else
- {
- pbuf[2 * idx] = (value >> 28) + 'A' - 10;
- }
+static void IntToUnicode(uint32_t value, uint8_t* pbuf, uint8_t len) {
+ uint8_t idx = 0;
+
+ for(idx = 0; idx < len; idx++) {
+ if(((value >> 28)) < 0xA) {
+ pbuf[2 * idx] = (value >> 28) + '0';
+ } else {
+ pbuf[2 * idx] = (value >> 28) + 'A' - 10;
+ }
- value = value << 4;
+ value = value << 4;
- pbuf[2 * idx + 1] = 0;
- }
+ pbuf[2 * idx + 1] = 0;
+ }
}
/**
* @}
diff --git a/firmware/targets/f7/fatfs/fatfs.c b/firmware/targets/f7/fatfs/fatfs.c
index d52b3d4e..1aa5fe44 100644
--- a/firmware/targets/f7/fatfs/fatfs.c
+++ b/firmware/targets/f7/fatfs/fatfs.c
@@ -18,23 +18,22 @@
#include "fatfs.h"
-uint8_t retUSER; /* Return value for USER */
-char USERPath[4]; /* USER logical drive path */
-FATFS USERFatFS; /* File system object for USER logical drive */
-FIL USERFile; /* File object for USER */
+uint8_t retUSER; /* Return value for USER */
+char USERPath[4]; /* USER logical drive path */
+FATFS USERFatFS; /* File system object for USER logical drive */
+FIL USERFile; /* File object for USER */
/* USER CODE BEGIN Variables */
-/* USER CODE END Variables */
+/* USER CODE END Variables */
-void MX_FATFS_Init(void)
-{
- /*## FatFS: Link the USER driver ###########################*/
- retUSER = FATFS_LinkDriver(&USER_Driver, USERPath);
+void MX_FATFS_Init(void) {
+ /*## FatFS: Link the USER driver ###########################*/
+ retUSER = FATFS_LinkDriver(&USER_Driver, USERPath);
- /* USER CODE BEGIN Init */
- /* additional user code for init */
- /* USER CODE END Init */
+ /* USER CODE BEGIN Init */
+ /* additional user code for init */
+ /* USER CODE END Init */
}
/**
@@ -42,15 +41,14 @@ void MX_FATFS_Init(void)
* @param None
* @retval Time in DWORD
*/
-DWORD get_fattime(void)
-{
- /* USER CODE BEGIN get_fattime */
- return 0;
- /* USER CODE END get_fattime */
+DWORD get_fattime(void) {
+ /* USER CODE BEGIN get_fattime */
+ return 0;
+ /* USER CODE END get_fattime */
}
/* USER CODE BEGIN Application */
-
+
/* USER CODE END Application */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/firmware/targets/f7/fatfs/ffconf.h b/firmware/targets/f7/fatfs/ffconf.h
index 354948d8..991e0e28 100644
--- a/firmware/targets/f7/fatfs/ffconf.h
+++ b/firmware/targets/f7/fatfs/ffconf.h
@@ -18,7 +18,7 @@
/* USER CODE END Header */
#ifndef _FFCONF
-#define _FFCONF 68300 /* Revision ID */
+#define _FFCONF 68300 /* Revision ID */
/*-----------------------------------------------------------------------------/
/ Additional user header to be used
@@ -31,13 +31,13 @@
/ Function Configurations
/-----------------------------------------------------------------------------*/
-#define _FS_READONLY 0 /* 0:Read/Write or 1:Read only */
+#define _FS_READONLY 0 /* 0:Read/Write or 1:Read only */
/* This option switches read-only configuration. (0:Read/Write or 1:Read-only)
/ Read-only configuration removes writing API functions, f_write(), f_sync(),
/ f_unlink(), f_mkdir(), f_chmod(), f_rename(), f_truncate(), f_getfree()
/ and optional writing functions as well. */
-#define _FS_MINIMIZE 0 /* 0 to 3 */
+#define _FS_MINIMIZE 0 /* 0 to 3 */
/* This option defines minimization level to remove some basic API functions.
/
/ 0: All basic functions are enabled.
@@ -46,7 +46,7 @@
/ 2: f_opendir(), f_readdir() and f_closedir() are removed in addition to 1.
/ 3: f_lseek() function is removed in addition to 2. */
-#define _USE_STRFUNC 0 /* 0:Disable or 1-2:Enable */
+#define _USE_STRFUNC 0 /* 0:Disable or 1-2:Enable */
/* This option switches string functions, f_gets(), f_putc(), f_puts() and
/ f_printf().
/
@@ -54,35 +54,35 @@
/ 1: Enable without LF-CRLF conversion.
/ 2: Enable with LF-CRLF conversion. */
-#define _USE_FIND 0
+#define _USE_FIND 0
/* This option switches filtered directory read functions, f_findfirst() and
/ f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */
-#define _USE_MKFS 1
+#define _USE_MKFS 1
/* This option switches f_mkfs() function. (0:Disable or 1:Enable) */
-#define _USE_FASTSEEK 1
+#define _USE_FASTSEEK 1
/* This option switches fast seek feature. (0:Disable or 1:Enable) */
-#define _USE_EXPAND 0
+#define _USE_EXPAND 0
/* This option switches f_expand function. (0:Disable or 1:Enable) */
-#define _USE_CHMOD 0
+#define _USE_CHMOD 0
/* This option switches attribute manipulation functions, f_chmod() and f_utime().
/ (0:Disable or 1:Enable) Also _FS_READONLY needs to be 0 to enable this option. */
-#define _USE_LABEL 1
+#define _USE_LABEL 1
/* This option switches volume label functions, f_getlabel() and f_setlabel().
/ (0:Disable or 1:Enable) */
-#define _USE_FORWARD 0
+#define _USE_FORWARD 0
/* This option switches f_forward() function. (0:Disable or 1:Enable) */
/*-----------------------------------------------------------------------------/
/ Locale and Namespace Configurations
/-----------------------------------------------------------------------------*/
-#define _CODE_PAGE 850
+#define _CODE_PAGE 850
/* This option specifies the OEM code page to be used on the target system.
/ Incorrect setting of the code page can cause a file open failure.
/
@@ -110,8 +110,8 @@
/ 950 - Traditional Chinese (DBCS)
*/
-#define _USE_LFN 2 /* 0 to 3 */
-#define _MAX_LFN 255 /* Maximum LFN length to handle (12 to 255) */
+#define _USE_LFN 2 /* 0 to 3 */
+#define _MAX_LFN 255 /* Maximum LFN length to handle (12 to 255) */
/* The _USE_LFN switches the support of long file name (LFN).
/
/ 0: Disable support of LFN. _MAX_LFN has no effect.
@@ -127,12 +127,12 @@
/ memory for the working buffer, memory management functions, ff_memalloc() and
/ ff_memfree(), must be added to the project. */
-#define _LFN_UNICODE 0 /* 0:ANSI/OEM or 1:Unicode */
+#define _LFN_UNICODE 0 /* 0:ANSI/OEM or 1:Unicode */
/* This option switches character encoding on the API. (0:ANSI/OEM or 1:UTF-16)
/ To use Unicode string for the path name, enable LFN and set _LFN_UNICODE = 1.
/ This option also affects behavior of string I/O functions. */
-#define _STRF_ENCODE 0
+#define _STRF_ENCODE 0
/* When _LFN_UNICODE == 1, this option selects the character encoding ON THE FILE to
/ be read/written via string I/O functions, f_gets(), f_putc(), f_puts and f_printf().
/
@@ -143,7 +143,7 @@
/
/ This option has no effect when _LFN_UNICODE == 0. */
-#define _FS_RPATH 0 /* 0 to 2 */
+#define _FS_RPATH 0 /* 0 to 2 */
/* This option configures support of relative path.
/
/ 0: Disable relative path and remove related functions.
@@ -155,28 +155,28 @@
/ Drive/Volume Configurations
/----------------------------------------------------------------------------*/
-#define _VOLUMES 1
+#define _VOLUMES 1
/* Number of volumes (logical drives) to be used. */
-/* USER CODE BEGIN Volumes */
-#define _STR_VOLUME_ID 0 /* 0:Use only 0-9 for drive ID, 1:Use strings for drive ID */
-#define _VOLUME_STRS "RAM","NAND","CF","SD1","SD2","USB1","USB2","USB3"
+/* USER CODE BEGIN Volumes */
+#define _STR_VOLUME_ID 0 /* 0:Use only 0-9 for drive ID, 1:Use strings for drive ID */
+#define _VOLUME_STRS "RAM", "NAND", "CF", "SD1", "SD2", "USB1", "USB2", "USB3"
/* _STR_VOLUME_ID switches string support of volume ID.
/ When _STR_VOLUME_ID is set to 1, also pre-defined strings can be used as drive
/ number in the path name. _VOLUME_STRS defines the drive ID strings for each
/ logical drives. Number of items must be equal to _VOLUMES. Valid characters for
/ the drive ID strings are: A-Z and 0-9. */
-/* USER CODE END Volumes */
+/* USER CODE END Volumes */
-#define _MULTI_PARTITION 0 /* 0:Single partition, 1:Multiple partition */
+#define _MULTI_PARTITION 0 /* 0:Single partition, 1:Multiple partition */
/* This option switches support of multi-partition on a physical drive.
/ By default (0), each logical drive number is bound to the same physical drive
/ number and only an FAT volume found on the physical drive will be mounted.
/ When multi-partition is enabled (1), each logical drive number can be bound to
/ arbitrary physical drive and partition listed in the VolToPart[]. Also f_fdisk()
/ funciton will be available. */
-#define _MIN_SS 512 /* 512, 1024, 2048 or 4096 */
-#define _MAX_SS 512 /* 512, 1024, 2048 or 4096 */
+#define _MIN_SS 512 /* 512, 1024, 2048 or 4096 */
+#define _MAX_SS 512 /* 512, 1024, 2048 or 4096 */
/* These options configure the range of sector size to be supported. (512, 1024,
/ 2048 or 4096) Always set both 512 for most systems, all type of memory cards and
/ harddisk. But a larger value may be required for on-board flash memory and some
@@ -184,12 +184,12 @@
/ to variable sector size and GET_SECTOR_SIZE command must be implemented to the
/ disk_ioctl() function. */
-#define _USE_TRIM 0
+#define _USE_TRIM 0
/* This option switches support of ATA-TRIM. (0:Disable or 1:Enable)
/ To enable Trim function, also CTRL_TRIM command should be implemented to the
/ disk_ioctl() function. */
-#define _FS_NOFSINFO 0 /* 0,1,2 or 3 */
+#define _FS_NOFSINFO 0 /* 0,1,2 or 3 */
/* If you need to know correct free space on the FAT32 volume, set bit 0 of this
/ option, and f_getfree() function at first time after volume mount will force
/ a full FAT scan. Bit 1 controls the use of last allocated cluster number.
@@ -204,21 +204,21 @@
/ System Configurations
/----------------------------------------------------------------------------*/
-#define _FS_TINY 0 /* 0:Normal or 1:Tiny */
+#define _FS_TINY 0 /* 0:Normal or 1:Tiny */
/* This option switches tiny buffer configuration. (0:Normal or 1:Tiny)
/ At the tiny configuration, size of file object (FIL) is reduced _MAX_SS bytes.
/ Instead of private sector buffer eliminated from the file object, common sector
/ buffer in the file system object (FATFS) is used for the file data transfer. */
-#define _FS_EXFAT 1
+#define _FS_EXFAT 1
/* This option switches support of exFAT file system. (0:Disable or 1:Enable)
/ When enable exFAT, also LFN needs to be enabled. (_USE_LFN >= 1)
/ Note that enabling exFAT discards C89 compatibility. */
-#define _FS_NORTC 1
-#define _NORTC_MON 7
-#define _NORTC_MDAY 20
-#define _NORTC_YEAR 2021
+#define _FS_NORTC 1
+#define _NORTC_MON 7
+#define _NORTC_MDAY 20
+#define _NORTC_YEAR 2021
/* The option _FS_NORTC switches timestamp functiton. If the system does not have
/ any RTC function or valid timestamp is not needed, set _FS_NORTC = 1 to disable
/ the timestamp function. All objects modified by FatFs will have a fixed timestamp
@@ -228,7 +228,7 @@
/ _NORTC_MDAY and _NORTC_YEAR have no effect.
/ These options have no effect at read-only configuration (_FS_READONLY = 1). */
-#define _FS_LOCK 0 /* 0:Disable or >=1:Enable */
+#define _FS_LOCK 0 /* 0:Disable or >=1:Enable */
/* The option _FS_LOCK switches file lock function to control duplicated file open
/ and illegal operation to open objects. This option must be 0 when _FS_READONLY
/ is 1.
@@ -239,9 +239,9 @@
/ can be opened simultaneously under file lock control. Note that the file
/ lock control is independent of re-entrancy. */
-#define _FS_REENTRANT 0 /* 0:Disable or 1:Enable */
-#define _FS_TIMEOUT 1000 /* Timeout period in unit of time ticks */
-#define _SYNC_t osMutexId_t
+#define _FS_REENTRANT 0 /* 0:Disable or 1:Enable */
+#define _FS_TIMEOUT 1000 /* Timeout period in unit of time ticks */
+#define _SYNC_t osMutexId_t
/* The option _FS_REENTRANT switches the re-entrancy (thread safe) of the FatFs
/ module itself. Note that regardless of this option, file access to different
/ volume is always re-entrant and volume control functions, f_mount(), f_mkfs()
@@ -262,8 +262,8 @@
/* define the ff_malloc ff_free macros as standard malloc free */
#if !defined(ff_malloc) && !defined(ff_free)
#include <stdlib.h>
-#define ff_malloc malloc
-#define ff_free free
+#define ff_malloc malloc
+#define ff_free free
#endif
#endif /* _FFCONF */
diff --git a/firmware/targets/f7/fatfs/spi_sd_hal.c b/firmware/targets/f7/fatfs/spi_sd_hal.c
index 7e41799f..fce041cb 100644
--- a/firmware/targets/f7/fatfs/spi_sd_hal.c
+++ b/firmware/targets/f7/fatfs/spi_sd_hal.c
@@ -1,5 +1,5 @@
#include "main.h"
-#include <furi-hal.h>
+#include <furi_hal.h>
#include <furi.h>
#define SD_DUMMY_BYTE 0xFF
@@ -19,7 +19,8 @@ uint8_t SD_IO_WriteByte(uint8_t Data);
* @retval None
*/
static void SPIx_WriteReadData(const uint8_t* DataIn, uint8_t* DataOut, uint16_t DataLength) {
- furi_check(furi_hal_spi_bus_trx(furi_hal_sd_spi_handle, (uint8_t*)DataIn, DataOut, DataLength, SpiTimeout));
+ furi_check(furi_hal_spi_bus_trx(
+ furi_hal_sd_spi_handle, (uint8_t*)DataIn, DataOut, DataLength, SpiTimeout));
}
/**
diff --git a/firmware/targets/f7/fatfs/stm32_adafruit_sd.c b/firmware/targets/f7/fatfs/stm32_adafruit_sd.c
index 1c571d63..b97b95c8 100644
--- a/firmware/targets/f7/fatfs/stm32_adafruit_sd.c
+++ b/firmware/targets/f7/fatfs/stm32_adafruit_sd.c
@@ -91,7 +91,7 @@
#include "stdlib.h"
#include "string.h"
#include "stdio.h"
-#include <furi-hal.h>
+#include <furi_hal.h>
/** @addtogroup BSP
* @{
@@ -278,10 +278,25 @@ static uint8_t SD_ReadData(void);
/* Private functions ---------------------------------------------------------*/
-void SD_SPI_Bus_To_Down_State(){
- hal_gpio_init_ex(furi_hal_sd_spi_handle->miso, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh, GpioAltFnUnused);
- hal_gpio_init_ex(furi_hal_sd_spi_handle->mosi, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh, GpioAltFnUnused);
- hal_gpio_init_ex(furi_hal_sd_spi_handle->sck, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh, GpioAltFnUnused);
+void SD_SPI_Bus_To_Down_State() {
+ hal_gpio_init_ex(
+ furi_hal_sd_spi_handle->miso,
+ GpioModeOutputPushPull,
+ GpioPullNo,
+ GpioSpeedVeryHigh,
+ GpioAltFnUnused);
+ hal_gpio_init_ex(
+ furi_hal_sd_spi_handle->mosi,
+ GpioModeOutputPushPull,
+ GpioPullNo,
+ GpioSpeedVeryHigh,
+ GpioAltFnUnused);
+ hal_gpio_init_ex(
+ furi_hal_sd_spi_handle->sck,
+ GpioModeOutputPushPull,
+ GpioPullNo,
+ GpioSpeedVeryHigh,
+ GpioAltFnUnused);
hal_gpio_write(furi_hal_sd_spi_handle->cs, false);
hal_gpio_write(furi_hal_sd_spi_handle->miso, false);
@@ -289,12 +304,27 @@ void SD_SPI_Bus_To_Down_State(){
hal_gpio_write(furi_hal_sd_spi_handle->sck, false);
}
-void SD_SPI_Bus_To_Normal_State(){
+void SD_SPI_Bus_To_Normal_State() {
hal_gpio_write(furi_hal_sd_spi_handle->cs, true);
- hal_gpio_init_ex(furi_hal_sd_spi_handle->miso, GpioModeAltFunctionPushPull, GpioPullUp, GpioSpeedVeryHigh, GpioAltFn5SPI2);
- hal_gpio_init_ex(furi_hal_sd_spi_handle->mosi, GpioModeAltFunctionPushPull, GpioPullUp, GpioSpeedVeryHigh, GpioAltFn5SPI2);
- hal_gpio_init_ex(furi_hal_sd_spi_handle->sck, GpioModeAltFunctionPushPull, GpioPullUp, GpioSpeedVeryHigh, GpioAltFn5SPI2);
+ hal_gpio_init_ex(
+ furi_hal_sd_spi_handle->miso,
+ GpioModeAltFunctionPushPull,
+ GpioPullUp,
+ GpioSpeedVeryHigh,
+ GpioAltFn5SPI2);
+ hal_gpio_init_ex(
+ furi_hal_sd_spi_handle->mosi,
+ GpioModeAltFunctionPushPull,
+ GpioPullUp,
+ GpioSpeedVeryHigh,
+ GpioAltFn5SPI2);
+ hal_gpio_init_ex(
+ furi_hal_sd_spi_handle->sck,
+ GpioModeAltFunctionPushPull,
+ GpioPullUp,
+ GpioSpeedVeryHigh,
+ GpioAltFn5SPI2);
}
/** @defgroup STM32_ADAFRUIT_SD_Private_Functions
@@ -388,7 +418,7 @@ uint8_t BSP_SD_GetCardInfo(SD_CardInfo* pCardInfo) {
* @retval SD status
*/
uint8_t
-BSP_SD_ReadBlocks(uint32_t* pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout) {
+ BSP_SD_ReadBlocks(uint32_t* pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout) {
uint32_t offset = 0;
uint32_t addr;
uint8_t retr = BSP_SD_ERROR;
@@ -465,8 +495,11 @@ error:
* @param Timeout: This parameter is used for compatibility with BSP implementation
* @retval SD status
*/
-uint8_t
-BSP_SD_WriteBlocks(uint32_t* pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout) {
+uint8_t BSP_SD_WriteBlocks(
+ uint32_t* pData,
+ uint32_t WriteAddr,
+ uint32_t NumOfBlocks,
+ uint32_t Timeout) {
uint32_t offset = 0;
uint32_t addr;
uint8_t retr = BSP_SD_ERROR;
@@ -513,7 +546,7 @@ BSP_SD_WriteBlocks(uint32_t* pData, uint32_t WriteAddr, uint32_t NumOfBlocks, ui
/* Set next write address */
offset += BlockSize;
addr = ((flag_SDHC == 1) ? (addr + 1) : (addr + BlockSize));
-
+
/* Put CRC bytes (not really needed by us, but required by SD) */
SD_IO_WriteByte(SD_DUMMY_BYTE);
SD_IO_WriteByte(SD_DUMMY_BYTE);
diff --git a/firmware/targets/f7/fatfs/stm32_adafruit_sd.h b/firmware/targets/f7/fatfs/stm32_adafruit_sd.h
index 38f9da49..74a0e0c2 100644
--- a/firmware/targets/f7/fatfs/stm32_adafruit_sd.h
+++ b/firmware/targets/f7/fatfs/stm32_adafruit_sd.h
@@ -34,15 +34,15 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
- */
+ */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32_ADAFRUIT_SD_H
#define __STM32_ADAFRUIT_SD_H
#ifdef __cplusplus
- extern "C" {
-#endif
+extern "C" {
+#endif
/* Includes ------------------------------------------------------------------*/
#include <stdint.h>
@@ -50,178 +50,169 @@
/** @addtogroup BSP
* @{
- */
-#define __IO volatile
-
+ */
+#define __IO volatile
+
/** @addtogroup STM32_ADAFRUIT
* @{
*/
-
+
/** @defgroup STM32_ADAFRUIT_SD
* @{
- */
+ */
/** @defgroup STM32_ADAFRUIT_SD_Exported_Types
* @{
*/
-
+
/**
* @brief SD status structure definition
- */
-enum {
- BSP_SD_OK = 0x00,
- MSD_OK = 0x00,
- BSP_SD_ERROR = 0x01,
- BSP_SD_TIMEOUT
-};
-
-typedef struct
-{
- uint8_t Reserved1:2; /* Reserved */
- uint16_t DeviceSize:12; /* Device Size */
- uint8_t MaxRdCurrentVDDMin:3; /* Max. read current @ VDD min */
- uint8_t MaxRdCurrentVDDMax:3; /* Max. read current @ VDD max */
- uint8_t MaxWrCurrentVDDMin:3; /* Max. write current @ VDD min */
- uint8_t MaxWrCurrentVDDMax:3; /* Max. write current @ VDD max */
- uint8_t DeviceSizeMul:3; /* Device size multiplier */
+ */
+enum { BSP_SD_OK = 0x00, MSD_OK = 0x00, BSP_SD_ERROR = 0x01, BSP_SD_TIMEOUT };
+
+typedef struct {
+ uint8_t Reserved1 : 2; /* Reserved */
+ uint16_t DeviceSize : 12; /* Device Size */
+ uint8_t MaxRdCurrentVDDMin : 3; /* Max. read current @ VDD min */
+ uint8_t MaxRdCurrentVDDMax : 3; /* Max. read current @ VDD max */
+ uint8_t MaxWrCurrentVDDMin : 3; /* Max. write current @ VDD min */
+ uint8_t MaxWrCurrentVDDMax : 3; /* Max. write current @ VDD max */
+ uint8_t DeviceSizeMul : 3; /* Device size multiplier */
} struct_v1;
-
-typedef struct
-{
- uint8_t Reserved1:6; /* Reserved */
- uint32_t DeviceSize:22; /* Device Size */
- uint8_t Reserved2:1; /* Reserved */
+typedef struct {
+ uint8_t Reserved1 : 6; /* Reserved */
+ uint32_t DeviceSize : 22; /* Device Size */
+ uint8_t Reserved2 : 1; /* Reserved */
} struct_v2;
/**
* @brief Card Specific Data: CSD Register
- */
-typedef struct
-{
- /* Header part */
- uint8_t CSDStruct:2; /* CSD structure */
- uint8_t Reserved1:6; /* Reserved */
- uint8_t TAAC:8; /* Data read access-time 1 */
- uint8_t NSAC:8; /* Data read access-time 2 in CLK cycles */
- uint8_t MaxBusClkFrec:8; /* Max. bus clock frequency */
- uint16_t CardComdClasses:12; /* Card command classes */
- uint8_t RdBlockLen:4; /* Max. read data block length */
- uint8_t PartBlockRead:1; /* Partial blocks for read allowed */
- uint8_t WrBlockMisalign:1; /* Write block misalignment */
- uint8_t RdBlockMisalign:1; /* Read block misalignment */
- uint8_t DSRImpl:1; /* DSR implemented */
-
- /* v1 or v2 struct */
- union csd_version {
- struct_v1 v1;
- struct_v2 v2;
- } version;
-
- uint8_t EraseSingleBlockEnable:1; /* Erase single block enable */
- uint8_t EraseSectorSize:7; /* Erase group size multiplier */
- uint8_t WrProtectGrSize:7; /* Write protect group size */
- uint8_t WrProtectGrEnable:1; /* Write protect group enable */
- uint8_t Reserved2:2; /* Reserved */
- uint8_t WrSpeedFact:3; /* Write speed factor */
- uint8_t MaxWrBlockLen:4; /* Max. write data block length */
- uint8_t WriteBlockPartial:1; /* Partial blocks for write allowed */
- uint8_t Reserved3:5; /* Reserved */
- uint8_t FileFormatGrouop:1; /* File format group */
- uint8_t CopyFlag:1; /* Copy flag (OTP) */
- uint8_t PermWrProtect:1; /* Permanent write protection */
- uint8_t TempWrProtect:1; /* Temporary write protection */
- uint8_t FileFormat:2; /* File Format */
- uint8_t Reserved4:2; /* Reserved */
- uint8_t crc:7; /* Reserved */
- uint8_t Reserved5:1; /* always 1*/
-
+ */
+typedef struct {
+ /* Header part */
+ uint8_t CSDStruct : 2; /* CSD structure */
+ uint8_t Reserved1 : 6; /* Reserved */
+ uint8_t TAAC : 8; /* Data read access-time 1 */
+ uint8_t NSAC : 8; /* Data read access-time 2 in CLK cycles */
+ uint8_t MaxBusClkFrec : 8; /* Max. bus clock frequency */
+ uint16_t CardComdClasses : 12; /* Card command classes */
+ uint8_t RdBlockLen : 4; /* Max. read data block length */
+ uint8_t PartBlockRead : 1; /* Partial blocks for read allowed */
+ uint8_t WrBlockMisalign : 1; /* Write block misalignment */
+ uint8_t RdBlockMisalign : 1; /* Read block misalignment */
+ uint8_t DSRImpl : 1; /* DSR implemented */
+
+ /* v1 or v2 struct */
+ union csd_version {
+ struct_v1 v1;
+ struct_v2 v2;
+ } version;
+
+ uint8_t EraseSingleBlockEnable : 1; /* Erase single block enable */
+ uint8_t EraseSectorSize : 7; /* Erase group size multiplier */
+ uint8_t WrProtectGrSize : 7; /* Write protect group size */
+ uint8_t WrProtectGrEnable : 1; /* Write protect group enable */
+ uint8_t Reserved2 : 2; /* Reserved */
+ uint8_t WrSpeedFact : 3; /* Write speed factor */
+ uint8_t MaxWrBlockLen : 4; /* Max. write data block length */
+ uint8_t WriteBlockPartial : 1; /* Partial blocks for write allowed */
+ uint8_t Reserved3 : 5; /* Reserved */
+ uint8_t FileFormatGrouop : 1; /* File format group */
+ uint8_t CopyFlag : 1; /* Copy flag (OTP) */
+ uint8_t PermWrProtect : 1; /* Permanent write protection */
+ uint8_t TempWrProtect : 1; /* Temporary write protection */
+ uint8_t FileFormat : 2; /* File Format */
+ uint8_t Reserved4 : 2; /* Reserved */
+ uint8_t crc : 7; /* Reserved */
+ uint8_t Reserved5 : 1; /* always 1*/
+
} SD_CSD;
/**
* @brief Card Identification Data: CID Register
*/
-typedef struct
-{
- __IO uint8_t ManufacturerID; /* ManufacturerID */
- __IO uint16_t OEM_AppliID; /* OEM/Application ID */
- __IO uint32_t ProdName1; /* Product Name part1 */
- __IO uint8_t ProdName2; /* Product Name part2*/
- __IO uint8_t ProdRev; /* Product Revision */
- __IO uint32_t ProdSN; /* Product Serial Number */
- __IO uint8_t Reserved1; /* Reserved1 */
- __IO uint16_t ManufactDate; /* Manufacturing Date */
- __IO uint8_t CID_CRC; /* CID CRC */
- __IO uint8_t Reserved2; /* always 1 */
+typedef struct {
+ __IO uint8_t ManufacturerID; /* ManufacturerID */
+ __IO uint16_t OEM_AppliID; /* OEM/Application ID */
+ __IO uint32_t ProdName1; /* Product Name part1 */
+ __IO uint8_t ProdName2; /* Product Name part2*/
+ __IO uint8_t ProdRev; /* Product Revision */
+ __IO uint32_t ProdSN; /* Product Serial Number */
+ __IO uint8_t Reserved1; /* Reserved1 */
+ __IO uint16_t ManufactDate; /* Manufacturing Date */
+ __IO uint8_t CID_CRC; /* CID CRC */
+ __IO uint8_t Reserved2; /* always 1 */
} SD_CID;
/**
* @brief SD Card information
*/
-typedef struct
-{
- SD_CSD Csd;
- SD_CID Cid;
- uint64_t CardCapacity; /*!< Card Capacity */
- uint32_t CardBlockSize; /*!< Card Block Size */
- uint32_t LogBlockNbr; /*!< Specifies the Card logical Capacity in blocks */
- uint32_t LogBlockSize; /*!< Specifies logical block size in bytes */
+typedef struct {
+ SD_CSD Csd;
+ SD_CID Cid;
+ uint64_t CardCapacity; /*!< Card Capacity */
+ uint32_t CardBlockSize; /*!< Card Block Size */
+ uint32_t LogBlockNbr; /*!< Specifies the Card logical Capacity in blocks */
+ uint32_t LogBlockSize; /*!< Specifies logical block size in bytes */
} SD_CardInfo;
/**
* @}
*/
-
+
/** @defgroup STM32_ADAFRUIT_SPI_SD_Exported_Constants
* @{
- */
-
+ */
+
/**
* @brief Block Size
*/
-#define SD_BLOCK_SIZE 0x200
+#define SD_BLOCK_SIZE 0x200
/**
* @brief SD detection on its memory slot
*/
-#define SD_PRESENT ((uint8_t)0x01)
-#define SD_NOT_PRESENT ((uint8_t)0x00)
+#define SD_PRESENT ((uint8_t)0x01)
+#define SD_NOT_PRESENT ((uint8_t)0x00)
-#define SD_DATATIMEOUT ((uint32_t)100000000)
+#define SD_DATATIMEOUT ((uint32_t)100000000)
/**
* @brief SD Card information structure
- */
+ */
#define BSP_SD_CardInfo SD_CardInfo
/**
* @}
*/
-
+
/** @defgroup STM32_ADAFRUIT_SD_Exported_Macro
* @{
- */
+ */
/**
* @}
- */
+ */
/** @defgroup STM32_ADAFRUIT_SD_Exported_Functions
* @{
- */
+ */
uint8_t BSP_SD_Init(bool reset_card);
-uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout);
-uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout);
+uint8_t
+ BSP_SD_ReadBlocks(uint32_t* pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout);
+uint8_t
+ BSP_SD_WriteBlocks(uint32_t* pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout);
uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr);
uint8_t BSP_SD_GetCardState(void);
-uint8_t BSP_SD_GetCardInfo(SD_CardInfo *pCardInfo);
-
+uint8_t BSP_SD_GetCardInfo(SD_CardInfo* pCardInfo);
+
/* Link functions for SD Card peripheral*/
-void SD_SPI_Slow_Init(void);
-void SD_SPI_Fast_Init(void);
-void SD_IO_Init(void);
-void SD_IO_CSState(uint8_t state);
-void SD_IO_WriteReadData(const uint8_t *DataIn, uint8_t *DataOut, uint16_t DataLength);
+void SD_SPI_Slow_Init(void);
+void SD_SPI_Fast_Init(void);
+void SD_IO_Init(void);
+void SD_IO_CSState(uint8_t state);
+void SD_IO_WriteReadData(const uint8_t* DataIn, uint8_t* DataOut, uint16_t DataLength);
uint8_t SD_IO_WriteByte(uint8_t Data);
/* Link function for HAL delay */
@@ -235,18 +226,18 @@ void HAL_Delay(__IO uint32_t Delay);
/**
* @}
- */
+ */
/**
* @}
- */
+ */
/**
* @}
- */
+ */
/**
* @}
- */
+ */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/firmware/targets/f7/fatfs/syscall.c b/firmware/targets/f7/fatfs/syscall.c
index 8d488dc7..7bed9315 100644
--- a/firmware/targets/f7/fatfs/syscall.c
+++ b/firmware/targets/f7/fatfs/syscall.c
@@ -19,11 +19,8 @@
******************************************************************************
**/
-
-
#include "fatfs/ff.h"
-
#if _FS_REENTRANT
/*------------------------------------------------------------------------*/
/* Create a Synchronization Object */
@@ -33,12 +30,10 @@
/ the f_mount() function fails with FR_INT_ERR.
*/
-int ff_cre_syncobj ( /* 1:Function succeeded, 0:Could not create the sync object */
- BYTE vol, /* Corresponding volume (logical drive number) */
- _SYNC_t *sobj /* Pointer to return the created sync object */
-)
-{
-
+int ff_cre_syncobj(/* 1:Function succeeded, 0:Could not create the sync object */
+ BYTE vol, /* Corresponding volume (logical drive number) */
+ _SYNC_t* sobj /* Pointer to return the created sync object */
+) {
int ret;
//osSemaphoreDef(SEM);
@@ -49,8 +44,6 @@ int ff_cre_syncobj ( /* 1:Function succeeded, 0:Could not create the sync object
return ret;
}
-
-
/*------------------------------------------------------------------------*/
/* Delete a Synchronization Object */
/*------------------------------------------------------------------------*/
@@ -59,16 +52,13 @@ int ff_cre_syncobj ( /* 1:Function succeeded, 0:Could not create the sync object
/ the f_mount() function fails with FR_INT_ERR.
*/
-int ff_del_syncobj ( /* 1:Function succeeded, 0:Could not delete due to any error */
- _SYNC_t sobj /* Sync object tied to the logical drive to be deleted */
-)
-{
+int ff_del_syncobj(/* 1:Function succeeded, 0:Could not delete due to any error */
+ _SYNC_t sobj /* Sync object tied to the logical drive to be deleted */
+) {
osMutexDelete(sobj);
return 1;
}
-
-
/*------------------------------------------------------------------------*/
/* Request Grant to Access the Volume */
/*------------------------------------------------------------------------*/
@@ -76,63 +66,51 @@ int ff_del_syncobj ( /* 1:Function succeeded, 0:Could not delete due to any erro
/ When a 0 is returned, the file function fails with FR_TIMEOUT.
*/
-int ff_req_grant ( /* 1:Got a grant to access the volume, 0:Could not get a grant */
- _SYNC_t sobj /* Sync object to wait */
-)
-{
- int ret = 0;
+int ff_req_grant(/* 1:Got a grant to access the volume, 0:Could not get a grant */
+ _SYNC_t sobj /* Sync object to wait */
+) {
+ int ret = 0;
- if(osMutexAcquire(sobj, _FS_TIMEOUT) == osOK) {
- ret = 1;
- }
+ if(osMutexAcquire(sobj, _FS_TIMEOUT) == osOK) {
+ ret = 1;
+ }
- return ret;
+ return ret;
}
-
-
/*------------------------------------------------------------------------*/
/* Release Grant to Access the Volume */
/*------------------------------------------------------------------------*/
/* This function is called on leaving file functions to unlock the volume.
*/
-void ff_rel_grant (
- _SYNC_t sobj /* Sync object to be signaled */
-)
-{
+void ff_rel_grant(_SYNC_t sobj /* Sync object to be signaled */
+) {
osMutexRelease(sobj);
}
#endif
-
-
-
-#if _USE_LFN == 3 /* LFN with a working buffer on the heap */
+#if _USE_LFN == 3 /* LFN with a working buffer on the heap */
/*------------------------------------------------------------------------*/
/* Allocate a memory block */
/*------------------------------------------------------------------------*/
/* If a NULL is returned, the file function fails with FR_NOT_ENOUGH_CORE.
*/
-void* ff_memalloc ( /* Returns pointer to the allocated memory block */
- UINT msize /* Number of bytes to allocate */
-)
-{
- return ff_malloc(msize); /* Allocate a new memory block with POSIX API */
+void* ff_memalloc(/* Returns pointer to the allocated memory block */
+ UINT msize /* Number of bytes to allocate */
+) {
+ return ff_malloc(msize); /* Allocate a new memory block with POSIX API */
}
-
/*------------------------------------------------------------------------*/
/* Free a memory block */
/*------------------------------------------------------------------------*/
-void ff_memfree (
- void* mblock /* Pointer to the memory block to free */
-)
-{
- ff_free(mblock); /* Discard the memory block with POSIX API */
+void ff_memfree(void* mblock /* Pointer to the memory block to free */
+) {
+ ff_free(mblock); /* Discard the memory block with POSIX API */
}
#endif
diff --git a/firmware/targets/f7/fatfs/user_diskio.c b/firmware/targets/f7/fatfs/user_diskio.c
index df16245a..94a7d4d3 100644
--- a/firmware/targets/f7/fatfs/user_diskio.c
+++ b/firmware/targets/f7/fatfs/user_diskio.c
@@ -35,7 +35,7 @@
/* Includes ------------------------------------------------------------------*/
#include "user_diskio.h"
-#include <furi-hal.h>
+#include <furi_hal.h>
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
diff --git a/firmware/targets/f7/furi-hal/furi-hal-usb-cdc.c b/firmware/targets/f7/furi-hal/furi-hal-usb-cdc.c
deleted file mode 100644
index 86218f83..00000000
--- a/firmware/targets/f7/furi-hal/furi-hal-usb-cdc.c
+++ /dev/null
@@ -1,631 +0,0 @@
-#include "furi-hal-version.h"
-#include "furi-hal-usb_i.h"
-#include "furi-hal-usb.h"
-#include "furi-hal-usb-cdc_i.h"
-#include <furi.h>
-
-#include "usb.h"
-#include "usb_cdc.h"
-
-#define CDC0_RXD_EP 0x01
-#define CDC0_TXD_EP 0x82
-#define CDC0_NTF_EP 0x83
-
-#define CDC1_RXD_EP 0x04
-#define CDC1_TXD_EP 0x85
-#define CDC1_NTF_EP 0x86
-
-#define CDC_NTF_SZ 0x08
-
-#define IF_NUM_MAX 2
-
-struct CdcIadDescriptor {
- struct usb_iad_descriptor comm_iad;
- struct usb_interface_descriptor comm;
- struct usb_cdc_header_desc cdc_hdr;
- struct usb_cdc_call_mgmt_desc cdc_mgmt;
- struct usb_cdc_acm_desc cdc_acm;
- struct usb_cdc_union_desc cdc_union;
- struct usb_endpoint_descriptor comm_ep;
- struct usb_interface_descriptor data;
- struct usb_endpoint_descriptor data_eprx;
- struct usb_endpoint_descriptor data_eptx;
-};
-
-struct CdcConfigDescriptorSingle {
- struct usb_config_descriptor config;
- struct CdcIadDescriptor iad_0;
-} __attribute__((packed));
-
-struct CdcConfigDescriptorDual {
- struct usb_config_descriptor config;
- struct CdcIadDescriptor iad_0;
- struct CdcIadDescriptor iad_1;
-} __attribute__((packed));
-
-static const struct usb_string_descriptor dev_manuf_desc = USB_STRING_DESC("Flipper Devices Inc.");
-
-/* Device descriptor */
-static const struct usb_device_descriptor cdc_device_desc = {
- .bLength = sizeof(struct usb_device_descriptor),
- .bDescriptorType = USB_DTYPE_DEVICE,
- .bcdUSB = VERSION_BCD(2,0,0),
- .bDeviceClass = USB_CLASS_IAD,
- .bDeviceSubClass = USB_SUBCLASS_IAD,
- .bDeviceProtocol = USB_PROTO_IAD,
- .bMaxPacketSize0 = USB_EP0_SIZE,
- .idVendor = 0x0483,
- .idProduct = 0x5740,
- .bcdDevice = VERSION_BCD(1,0,0),
- .iManufacturer = UsbDevManuf,
- .iProduct = UsbDevProduct,
- .iSerialNumber = UsbDevSerial,
- .bNumConfigurations = 1,
-};
-
-/* Device configuration descriptor - single mode*/
-static const struct CdcConfigDescriptorSingle cdc_cfg_desc_single = {
- .config = {
- .bLength = sizeof(struct usb_config_descriptor),
- .bDescriptorType = USB_DTYPE_CONFIGURATION,
- .wTotalLength = sizeof(struct CdcConfigDescriptorSingle),
- .bNumInterfaces = 2,
-
- .bConfigurationValue = 1,
- .iConfiguration = NO_DESCRIPTOR,
- .bmAttributes = USB_CFG_ATTR_RESERVED | USB_CFG_ATTR_SELFPOWERED,
- .bMaxPower = USB_CFG_POWER_MA(100),
- },
- .iad_0 = {
- .comm_iad = {
- .bLength = sizeof(struct usb_iad_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFASEASSOC,
- .bFirstInterface = 0,
- .bInterfaceCount = 2,
- .bFunctionClass = USB_CLASS_CDC,
- .bFunctionSubClass = USB_CDC_SUBCLASS_ACM,
- .bFunctionProtocol = USB_PROTO_NONE,
- .iFunction = NO_DESCRIPTOR,
- },
- .comm = {
- .bLength = sizeof(struct usb_interface_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFACE,
- .bInterfaceNumber = 0,
- .bAlternateSetting = 0,
- .bNumEndpoints = 1,
- .bInterfaceClass = USB_CLASS_CDC,
- .bInterfaceSubClass = USB_CDC_SUBCLASS_ACM,
- .bInterfaceProtocol = USB_PROTO_NONE,
- .iInterface = NO_DESCRIPTOR,
- },
- .cdc_hdr = {
- .bFunctionLength = sizeof(struct usb_cdc_header_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_HEADER,
- .bcdCDC = VERSION_BCD(1,1,0),
- },
- .cdc_mgmt = {
- .bFunctionLength = sizeof(struct usb_cdc_call_mgmt_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_CALL_MANAGEMENT,
- .bmCapabilities = 0,
- .bDataInterface = 1,
- },
- .cdc_acm = {
- .bFunctionLength = sizeof(struct usb_cdc_acm_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_ACM,
- .bmCapabilities = 0,
- },
- .cdc_union = {
- .bFunctionLength = sizeof(struct usb_cdc_union_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_UNION,
- .bMasterInterface0 = 0,
- .bSlaveInterface0 = 1,
- },
- .comm_ep = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = CDC0_NTF_EP,
- .bmAttributes = USB_EPTYPE_INTERRUPT,
- .wMaxPacketSize = CDC_NTF_SZ,
- .bInterval = 0xFF,
- },
- .data = {
- .bLength = sizeof(struct usb_interface_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFACE,
- .bInterfaceNumber = 1,
- .bAlternateSetting = 0,
- .bNumEndpoints = 2,
- .bInterfaceClass = USB_CLASS_CDC_DATA,
- .bInterfaceSubClass = USB_SUBCLASS_NONE,
- .bInterfaceProtocol = USB_PROTO_NONE,
- .iInterface = NO_DESCRIPTOR,
- },
- .data_eprx = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = CDC0_RXD_EP,
- .bmAttributes = USB_EPTYPE_BULK,
- .wMaxPacketSize = CDC_DATA_SZ,
- .bInterval = 0x01,
- },
- .data_eptx = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = CDC0_TXD_EP,
- .bmAttributes = USB_EPTYPE_BULK,
- .wMaxPacketSize = CDC_DATA_SZ,
- .bInterval = 0x01,
- },
- },
-};
-
-/* Device configuration descriptor - dual mode*/
-static const struct CdcConfigDescriptorDual cdc_cfg_desc_dual = {
- .config = {
- .bLength = sizeof(struct usb_config_descriptor),
- .bDescriptorType = USB_DTYPE_CONFIGURATION,
- .wTotalLength = sizeof(struct CdcConfigDescriptorDual),
- .bNumInterfaces = 4,
-
- .bConfigurationValue = 1,
- .iConfiguration = NO_DESCRIPTOR,
- .bmAttributes = USB_CFG_ATTR_RESERVED | USB_CFG_ATTR_SELFPOWERED,
- .bMaxPower = USB_CFG_POWER_MA(100),
- },
- .iad_0 = {
- .comm_iad = {
- .bLength = sizeof(struct usb_iad_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFASEASSOC,
- .bFirstInterface = 0,
- .bInterfaceCount = 2,
- .bFunctionClass = USB_CLASS_CDC,
- .bFunctionSubClass = USB_CDC_SUBCLASS_ACM,
- .bFunctionProtocol = USB_PROTO_NONE,
- .iFunction = NO_DESCRIPTOR,
- },
- .comm = {
- .bLength = sizeof(struct usb_interface_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFACE,
- .bInterfaceNumber = 0,
- .bAlternateSetting = 0,
- .bNumEndpoints = 1,
- .bInterfaceClass = USB_CLASS_CDC,
- .bInterfaceSubClass = USB_CDC_SUBCLASS_ACM,
- .bInterfaceProtocol = USB_PROTO_NONE,
- .iInterface = NO_DESCRIPTOR,
- },
- .cdc_hdr = {
- .bFunctionLength = sizeof(struct usb_cdc_header_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_HEADER,
- .bcdCDC = VERSION_BCD(1,1,0),
- },
- .cdc_mgmt = {
- .bFunctionLength = sizeof(struct usb_cdc_call_mgmt_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_CALL_MANAGEMENT,
- .bmCapabilities = 0,
- .bDataInterface = 1,
- },
- .cdc_acm = {
- .bFunctionLength = sizeof(struct usb_cdc_acm_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_ACM,
- .bmCapabilities = 0,
- },
- .cdc_union = {
- .bFunctionLength = sizeof(struct usb_cdc_union_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_UNION,
- .bMasterInterface0 = 0,
- .bSlaveInterface0 = 1,
- },
- .comm_ep = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = CDC0_NTF_EP,
- .bmAttributes = USB_EPTYPE_INTERRUPT,
- .wMaxPacketSize = CDC_NTF_SZ,
- .bInterval = 0xFF,
- },
- .data = {
- .bLength = sizeof(struct usb_interface_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFACE,
- .bInterfaceNumber = 1,
- .bAlternateSetting = 0,
- .bNumEndpoints = 2,
- .bInterfaceClass = USB_CLASS_CDC_DATA,
- .bInterfaceSubClass = USB_SUBCLASS_NONE,
- .bInterfaceProtocol = USB_PROTO_NONE,
- .iInterface = NO_DESCRIPTOR,
- },
- .data_eprx = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = CDC0_RXD_EP,
- .bmAttributes = USB_EPTYPE_BULK,
- .wMaxPacketSize = CDC_DATA_SZ,
- .bInterval = 0x01,
- },
- .data_eptx = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = CDC0_TXD_EP,
- .bmAttributes = USB_EPTYPE_BULK,
- .wMaxPacketSize = CDC_DATA_SZ,
- .bInterval = 0x01,
- },
- },
- .iad_1 = {
- .comm_iad = {
- .bLength = sizeof(struct usb_iad_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFASEASSOC,
- .bFirstInterface = 2,
- .bInterfaceCount = 2,
- .bFunctionClass = USB_CLASS_CDC,
- .bFunctionSubClass = USB_CDC_SUBCLASS_ACM,
- .bFunctionProtocol = USB_PROTO_NONE,
- .iFunction = NO_DESCRIPTOR,
- },
- .comm = {
- .bLength = sizeof(struct usb_interface_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFACE,
- .bInterfaceNumber = 2+0,
- .bAlternateSetting = 0,
- .bNumEndpoints = 1,
- .bInterfaceClass = USB_CLASS_CDC,
- .bInterfaceSubClass = USB_CDC_SUBCLASS_ACM,
- .bInterfaceProtocol = USB_PROTO_NONE,
- .iInterface = NO_DESCRIPTOR,
- },
- .cdc_hdr = {
- .bFunctionLength = sizeof(struct usb_cdc_header_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_HEADER,
- .bcdCDC = VERSION_BCD(1,1,0),
- },
- .cdc_mgmt = {
- .bFunctionLength = sizeof(struct usb_cdc_call_mgmt_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_CALL_MANAGEMENT,
- .bmCapabilities = 0,
- .bDataInterface = 2+1,
- },
- .cdc_acm = {
- .bFunctionLength = sizeof(struct usb_cdc_acm_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_ACM,
- .bmCapabilities = 0,
- },
- .cdc_union = {
- .bFunctionLength = sizeof(struct usb_cdc_union_desc),
- .bDescriptorType = USB_DTYPE_CS_INTERFACE,
- .bDescriptorSubType = USB_DTYPE_CDC_UNION,
- .bMasterInterface0 = 2+0,
- .bSlaveInterface0 = 2+1,
- },
- .comm_ep = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = CDC1_NTF_EP,
- .bmAttributes = USB_EPTYPE_INTERRUPT,
- .wMaxPacketSize = CDC_NTF_SZ,
- .bInterval = 0xFF,
- },
- .data = {
- .bLength = sizeof(struct usb_interface_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFACE,
- .bInterfaceNumber = 2+1,
- .bAlternateSetting = 0,
- .bNumEndpoints = 2,
- .bInterfaceClass = USB_CLASS_CDC_DATA,
- .bInterfaceSubClass = USB_SUBCLASS_NONE,
- .bInterfaceProtocol = USB_PROTO_NONE,
- .iInterface = NO_DESCRIPTOR,
- },
- .data_eprx = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = CDC1_RXD_EP,
- .bmAttributes = USB_EPTYPE_BULK,
- .wMaxPacketSize = CDC_DATA_SZ,
- .bInterval = 0x01,
- },
- .data_eptx = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = CDC1_TXD_EP,
- .bmAttributes = USB_EPTYPE_BULK,
- .wMaxPacketSize = CDC_DATA_SZ,
- .bInterval = 0x01,
- },
- },
-};
-
-static struct usb_cdc_line_coding cdc_config[IF_NUM_MAX] = {};
-static uint8_t cdc_ctrl_line_state[IF_NUM_MAX];
-
-static void cdc_init(usbd_device* dev, UsbInterface* intf);
-static void cdc_deinit(usbd_device *dev);
-static void cdc_on_wakeup(usbd_device *dev);
-static void cdc_on_suspend(usbd_device *dev);
-
-static usbd_respond cdc_ep_config (usbd_device *dev, uint8_t cfg);
-static usbd_respond cdc_control (usbd_device *dev, usbd_ctlreq *req, usbd_rqc_callback *callback);
-static usbd_device* usb_dev;
-static UsbInterface* cdc_if_cur = NULL;
-static bool connected = false;
-static CdcCallbacks* callbacks[IF_NUM_MAX] = {NULL};
-static void* cb_ctx[IF_NUM_MAX];
-
-UsbInterface usb_cdc_single = {
- .init = cdc_init,
- .deinit = cdc_deinit,
- .wakeup = cdc_on_wakeup,
- .suspend = cdc_on_suspend,
-
- .dev_descr = (struct usb_device_descriptor*)&cdc_device_desc,
-
- .str_manuf_descr = (void*)&dev_manuf_desc,
- .str_prod_descr = NULL,
- .str_serial_descr = NULL,
-
- .cfg_descr = (void*)&cdc_cfg_desc_single,
-};
-
-UsbInterface usb_cdc_dual = {
- .init = cdc_init,
- .deinit = cdc_deinit,
- .wakeup = cdc_on_wakeup,
- .suspend = cdc_on_suspend,
-
- .dev_descr = (struct usb_device_descriptor*)&cdc_device_desc,
-
- .str_manuf_descr = (void*)&dev_manuf_desc,
- .str_prod_descr = NULL,
- .str_serial_descr = NULL,
-
- .cfg_descr = (void*)&cdc_cfg_desc_dual,
-};
-
-static void cdc_init(usbd_device* dev, UsbInterface* intf) {
- usb_dev = dev;
- cdc_if_cur = intf;
-
- char* name = (char*)furi_hal_version_get_device_name_ptr();
- uint8_t len = (name == NULL) ? (0) : (strlen(name));
- struct usb_string_descriptor* dev_prod_desc = furi_alloc(len * 2 + 2);
- dev_prod_desc->bLength = len * 2 + 2;
- dev_prod_desc->bDescriptorType = USB_DTYPE_STRING;
- for (uint8_t i = 0; i < len; i++)
- dev_prod_desc->wString[i] = name[i];
-
- name = (char*)furi_hal_version_get_name_ptr();
- len = (name == NULL) ? (0) : (strlen(name));
- struct usb_string_descriptor* dev_serial_desc = furi_alloc((len + 5) * 2 + 2);
- dev_serial_desc->bLength = (len + 5) * 2 + 2;
- dev_serial_desc->bDescriptorType = USB_DTYPE_STRING;
- memcpy(dev_serial_desc->wString, "f\0l\0i\0p\0_\0", 5*2);
- for (uint8_t i = 0; i < len; i++)
- dev_serial_desc->wString[i+5] = name[i];
-
- cdc_if_cur->str_prod_descr = dev_prod_desc;
- cdc_if_cur->str_serial_descr = dev_serial_desc;
-
- usbd_reg_config(dev, cdc_ep_config);
- usbd_reg_control(dev, cdc_control);
-
- usbd_connect(dev, true);
-}
-
-static void cdc_deinit(usbd_device *dev) {
- usbd_reg_config(dev, NULL);
- usbd_reg_control(dev, NULL);
-
- free(cdc_if_cur->str_prod_descr);
- free(cdc_if_cur->str_serial_descr);
-
- cdc_if_cur = NULL;
-}
-
-void furi_hal_cdc_set_callbacks(uint8_t if_num, CdcCallbacks* cb, void* context) {
- furi_assert(if_num < IF_NUM_MAX);
-
- if (callbacks[if_num] != NULL) {
- if (callbacks[if_num]->state_callback != NULL) {
- if (connected == true)
- callbacks[if_num]->state_callback(cb_ctx[if_num], 0);
- }
- }
-
- callbacks[if_num] = cb;
- cb_ctx[if_num] = context;
-
- if (callbacks[if_num] != NULL) {
- if (callbacks[if_num]->state_callback != NULL) {
- if (connected == true)
- callbacks[if_num]->state_callback(cb_ctx[if_num], 1);
- }
- }
-}
-
-struct usb_cdc_line_coding* furi_hal_cdc_get_port_settings(uint8_t if_num) {
- furi_assert(if_num < IF_NUM_MAX);
- return &cdc_config[if_num];
-}
-
-uint8_t furi_hal_cdc_get_ctrl_line_state(uint8_t if_num) {
- furi_assert(if_num < IF_NUM_MAX);
- return cdc_ctrl_line_state[if_num];
-}
-
-void furi_hal_cdc_send(uint8_t if_num, uint8_t* buf, uint16_t len) {
- if (if_num == 0)
- usbd_ep_write(usb_dev, CDC0_TXD_EP, buf, len);
- else
- usbd_ep_write(usb_dev, CDC1_TXD_EP, buf, len);
-}
-
-int32_t furi_hal_cdc_receive(uint8_t if_num, uint8_t* buf, uint16_t max_len) {
- int32_t len = 0;
- if (if_num == 0)
- len = usbd_ep_read(usb_dev, CDC0_RXD_EP, buf, max_len);
- else
- len = usbd_ep_read(usb_dev, CDC1_RXD_EP, buf, max_len);
- return ((len < 0) ? 0 : len);
-}
-
-static void cdc_on_wakeup(usbd_device *dev) {
- connected = true;
- for (uint8_t i = 0; i < IF_NUM_MAX; i++) {
- if (callbacks[i] != NULL) {
- if (callbacks[i]->state_callback != NULL)
- callbacks[i]->state_callback(cb_ctx[i], 1);
- }
- }
-}
-
-static void cdc_on_suspend(usbd_device *dev) {
- connected = false;
- for (uint8_t i = 0; i < IF_NUM_MAX; i++) {
- cdc_ctrl_line_state[i] = 0;
- if (callbacks[i] != NULL) {
- if (callbacks[i]->state_callback != NULL)
- callbacks[i]->state_callback(cb_ctx[i], 0);
- }
- }
-}
-
-static void cdc_rx_ep_callback (usbd_device *dev, uint8_t event, uint8_t ep) {
- uint8_t if_num = 0;
- if (ep == CDC0_RXD_EP)
- if_num = 0;
- else
- if_num = 1;
-
- if (callbacks[if_num] != NULL) {
- if (callbacks[if_num]->rx_ep_callback != NULL)
- callbacks[if_num]->rx_ep_callback(cb_ctx[if_num]);
- }
-}
-
-static void cdc_tx_ep_callback (usbd_device *dev, uint8_t event, uint8_t ep) {
- uint8_t if_num = 0;
- if (ep == CDC0_TXD_EP)
- if_num = 0;
- else
- if_num = 1;
-
- if (callbacks[if_num] != NULL) {
- if (callbacks[if_num]->tx_ep_callback != NULL)
- callbacks[if_num]->tx_ep_callback(cb_ctx[if_num]);
- }
-}
-
-static void cdc_txrx_ep_callback (usbd_device *dev, uint8_t event, uint8_t ep) {
- if (event == usbd_evt_eptx) {
- cdc_tx_ep_callback(dev, event, ep);
- } else {
- cdc_rx_ep_callback(dev, event, ep);
- }
-}
-
-/* Configure endpoints */
-static usbd_respond cdc_ep_config (usbd_device *dev, uint8_t cfg) {
- uint8_t if_cnt = ((struct usb_config_descriptor*)(cdc_if_cur->cfg_descr))->bNumInterfaces;
- switch (cfg) {
- case 0:
- /* deconfiguring device */
- if (if_cnt == 4) {
- usbd_ep_deconfig(dev, CDC1_NTF_EP);
- usbd_ep_deconfig(dev, CDC1_TXD_EP);
- usbd_ep_deconfig(dev, CDC1_RXD_EP);
- usbd_reg_endpoint(dev, CDC1_RXD_EP, 0);
- usbd_reg_endpoint(dev, CDC1_TXD_EP, 0);
- }
- usbd_ep_deconfig(dev, CDC0_NTF_EP);
- usbd_ep_deconfig(dev, CDC0_TXD_EP);
- usbd_ep_deconfig(dev, CDC0_RXD_EP);
- usbd_reg_endpoint(dev, CDC0_RXD_EP, 0);
- usbd_reg_endpoint(dev, CDC0_TXD_EP, 0);
- return usbd_ack;
- case 1:
- /* configuring device */
- if ((CDC0_TXD_EP & 0x7F) != (CDC0_RXD_EP & 0x7F)) {
- // 2x unidirectional endpoint mode with dualbuf
- usbd_ep_config(dev, CDC0_RXD_EP, USB_EPTYPE_BULK | USB_EPTYPE_DBLBUF, CDC_DATA_SZ);
- usbd_ep_config(dev, CDC0_TXD_EP, USB_EPTYPE_BULK | USB_EPTYPE_DBLBUF, CDC_DATA_SZ);
- usbd_ep_config(dev, CDC0_NTF_EP, USB_EPTYPE_INTERRUPT, CDC_NTF_SZ);
- usbd_reg_endpoint(dev, CDC0_RXD_EP, cdc_rx_ep_callback);
- usbd_reg_endpoint(dev, CDC0_TXD_EP, cdc_tx_ep_callback);
- } else {
- // 1x bidirectional endpoint mode
- usbd_ep_config(dev, CDC0_RXD_EP, USB_EPTYPE_BULK, CDC_DATA_SZ);
- usbd_ep_config(dev, CDC0_TXD_EP, USB_EPTYPE_BULK, CDC_DATA_SZ);
- usbd_ep_config(dev, CDC0_NTF_EP, USB_EPTYPE_INTERRUPT, CDC_NTF_SZ);
- usbd_reg_endpoint(dev, CDC0_RXD_EP, cdc_txrx_ep_callback);
- usbd_reg_endpoint(dev, CDC0_TXD_EP, cdc_txrx_ep_callback);
- }
- usbd_ep_write(dev, CDC0_TXD_EP, 0, 0);
-
- if (if_cnt == 4) {
- if ((CDC1_TXD_EP & 0x7F) != (CDC1_RXD_EP & 0x7F)) {
- usbd_ep_config(dev, CDC1_RXD_EP, USB_EPTYPE_BULK | USB_EPTYPE_DBLBUF, CDC_DATA_SZ);
- usbd_ep_config(dev, CDC1_TXD_EP, USB_EPTYPE_BULK | USB_EPTYPE_DBLBUF, CDC_DATA_SZ);
- usbd_ep_config(dev, CDC1_NTF_EP, USB_EPTYPE_INTERRUPT, CDC_NTF_SZ);
- usbd_reg_endpoint(dev, CDC1_RXD_EP, cdc_rx_ep_callback);
- usbd_reg_endpoint(dev, CDC1_TXD_EP, cdc_tx_ep_callback);
- } else {
- usbd_ep_config(dev, CDC1_RXD_EP, USB_EPTYPE_BULK, CDC_DATA_SZ);
- usbd_ep_config(dev, CDC1_TXD_EP, USB_EPTYPE_BULK, CDC_DATA_SZ);
- usbd_ep_config(dev, CDC1_NTF_EP, USB_EPTYPE_INTERRUPT, CDC_NTF_SZ);
- usbd_reg_endpoint(dev, CDC1_RXD_EP, cdc_txrx_ep_callback);
- usbd_reg_endpoint(dev, CDC1_TXD_EP, cdc_txrx_ep_callback);
- }
- usbd_ep_write(dev, CDC1_TXD_EP, 0, 0);
- }
- return usbd_ack;
- default:
- return usbd_fail;
- }
-}
-
-/* Control requests handler */
-static usbd_respond cdc_control(usbd_device* dev, usbd_ctlreq* req, usbd_rqc_callback* callback) {
- /* CDC control requests */
- uint8_t if_num = 0;
- if(((USB_REQ_RECIPIENT | USB_REQ_TYPE) & req->bmRequestType) == (USB_REQ_INTERFACE | USB_REQ_CLASS)
- && (req->wIndex == 0 || req->wIndex == 2)) {
- if (req->wIndex == 0)
- if_num = 0;
- else
- if_num = 1;
-
- switch(req->bRequest) {
- case USB_CDC_SET_CONTROL_LINE_STATE:
- if (callbacks[if_num] != NULL) {
- cdc_ctrl_line_state[if_num] = req->wValue;
- if (callbacks[if_num]->ctrl_line_callback != NULL)
- callbacks[if_num]->ctrl_line_callback(cb_ctx[if_num], cdc_ctrl_line_state[if_num]);
- }
- return usbd_ack;
- case USB_CDC_SET_LINE_CODING:
- memcpy(&cdc_config[if_num], req->data, sizeof(cdc_config[0]));
- if (callbacks[if_num] != NULL) {
- if (callbacks[if_num]->config_callback != NULL)
- callbacks[if_num]->config_callback(cb_ctx[if_num], &cdc_config[if_num]);
- }
- return usbd_ack;
- case USB_CDC_GET_LINE_CODING:
- dev->status.data_ptr = &cdc_config[if_num];
- dev->status.data_count = sizeof(cdc_config[0]);
- return usbd_ack;
- default:
- return usbd_fail;
- }
- }
- return usbd_fail;
-}
diff --git a/firmware/targets/f7/furi-hal/furi-hal-usb-hid.c b/firmware/targets/f7/furi-hal/furi-hal-usb-hid.c
deleted file mode 100644
index 71b03ace..00000000
--- a/firmware/targets/f7/furi-hal/furi-hal-usb-hid.c
+++ /dev/null
@@ -1,481 +0,0 @@
-#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"
-#include "usb_hid.h"
-#include "hid_usage_desktop.h"
-#include "hid_usage_button.h"
-#include "hid_usage_keyboard.h"
-#include "hid_usage_led.h"
-
-#define HID_EP_IN 0x81
-#define HID_EP_OUT 0x01
-#define HID_EP_SZ 0x10
-
-#define HID_KB_MAX_KEYS 6
-#define HID_CONSUMER_MAX_KEYS 2
-
-#define HID_PAGE_CONSUMER 0x0C
-#define HID_CONSUMER_CONTROL 0x01
-
-struct HidIadDescriptor {
- struct usb_iad_descriptor hid_iad;
- struct usb_interface_descriptor hid;
- struct usb_hid_descriptor hid_desc;
- struct usb_endpoint_descriptor hid_ep_in;
- struct usb_endpoint_descriptor hid_ep_out;
-};
-
-struct HidConfigDescriptor {
- struct usb_config_descriptor config;
- struct HidIadDescriptor iad_0;
-} __attribute__((packed));
-
-enum HidReportId {
- ReportIdKeyboard = 1,
- ReportIdMouse = 2,
- ReportIdConsumer = 3,
-};
-
-/* HID report: keyboard+mouse */
-static const uint8_t hid_report_desc[] = {
- HID_USAGE_PAGE(HID_PAGE_DESKTOP),
- HID_USAGE(HID_DESKTOP_KEYBOARD),
- HID_COLLECTION(HID_APPLICATION_COLLECTION),
- HID_REPORT_ID(ReportIdKeyboard),
- HID_USAGE_PAGE(HID_DESKTOP_KEYPAD),
- HID_USAGE_MINIMUM(HID_KEYBOARD_L_CTRL),
- HID_USAGE_MAXIMUM(HID_KEYBOARD_R_GUI),
- HID_LOGICAL_MINIMUM(0),
- HID_LOGICAL_MAXIMUM(1),
- HID_REPORT_SIZE(1),
- HID_REPORT_COUNT(8),
- HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
- HID_REPORT_COUNT(1),
- HID_REPORT_SIZE(8),
- HID_INPUT(HID_IOF_CONSTANT | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
- HID_USAGE_PAGE(HID_PAGE_LED),
- HID_REPORT_COUNT(8),
- HID_REPORT_SIZE(1),
- HID_USAGE_MINIMUM(1),
- HID_USAGE_MAXIMUM(8),
- HID_OUTPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
- HID_REPORT_COUNT(HID_KB_MAX_KEYS),
- HID_REPORT_SIZE(8),
- HID_LOGICAL_MINIMUM(0),
- HID_LOGICAL_MAXIMUM(101),
- HID_USAGE_PAGE(HID_DESKTOP_KEYPAD),
- HID_USAGE_MINIMUM(0),
- HID_USAGE_MAXIMUM(101),
- HID_INPUT(HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE),
- HID_END_COLLECTION,
- HID_USAGE_PAGE(HID_PAGE_DESKTOP),
- HID_USAGE(HID_DESKTOP_MOUSE),
- HID_COLLECTION(HID_APPLICATION_COLLECTION),
- HID_USAGE(HID_DESKTOP_POINTER),
- HID_COLLECTION(HID_PHYSICAL_COLLECTION),
- HID_REPORT_ID(ReportIdMouse),
- HID_USAGE_PAGE(HID_PAGE_BUTTON),
- HID_USAGE_MINIMUM(1),
- HID_USAGE_MAXIMUM(3),
- HID_LOGICAL_MINIMUM(0),
- HID_LOGICAL_MAXIMUM(1),
- HID_REPORT_COUNT(3),
- HID_REPORT_SIZE(1),
- HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
- HID_REPORT_SIZE(1),
- HID_REPORT_COUNT(5),
- HID_INPUT(HID_IOF_CONSTANT | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
- HID_USAGE_PAGE(HID_PAGE_DESKTOP),
- HID_USAGE(HID_DESKTOP_X),
- HID_USAGE(HID_DESKTOP_Y),
- HID_USAGE(HID_DESKTOP_WHEEL),
- HID_LOGICAL_MINIMUM(-127),
- HID_LOGICAL_MAXIMUM(127),
- HID_REPORT_SIZE(8),
- HID_REPORT_COUNT(3),
- HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE),
- HID_END_COLLECTION,
- HID_END_COLLECTION,
- HID_USAGE_PAGE(HID_PAGE_CONSUMER),
- HID_USAGE(HID_CONSUMER_CONTROL),
- HID_COLLECTION(HID_APPLICATION_COLLECTION),
- HID_REPORT_ID(ReportIdConsumer),
- HID_LOGICAL_MINIMUM(0),
- HID_RI_LOGICAL_MAXIMUM(16, 0x3FF),
- HID_USAGE_MINIMUM(0),
- HID_RI_USAGE_MAXIMUM(16, 0x3FF),
- HID_REPORT_COUNT(HID_CONSUMER_MAX_KEYS),
- HID_REPORT_SIZE(16),
- HID_INPUT(HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE),
- HID_END_COLLECTION,
-};
-
-static const struct usb_string_descriptor dev_manuf_desc = USB_STRING_DESC("Logitech");
-static const struct usb_string_descriptor dev_prod_desc = USB_STRING_DESC("USB Receiver");
-static const struct usb_string_descriptor dev_serial_desc = USB_STRING_DESC("1234567890");
-
-/* Device descriptor */
-static const struct usb_device_descriptor hid_device_desc = {
- .bLength = sizeof(struct usb_device_descriptor),
- .bDescriptorType = USB_DTYPE_DEVICE,
- .bcdUSB = VERSION_BCD(2,0,0),
- .bDeviceClass = USB_CLASS_IAD,
- .bDeviceSubClass = USB_SUBCLASS_IAD,
- .bDeviceProtocol = USB_PROTO_IAD,
- .bMaxPacketSize0 = USB_EP0_SIZE,
- .idVendor = 0x046d,
- .idProduct = 0xc529,
- .bcdDevice = VERSION_BCD(1,0,0),
- .iManufacturer = UsbDevManuf,
- .iProduct = UsbDevProduct,
- .iSerialNumber = UsbDevSerial,
- .bNumConfigurations = 1,
-};
-
-/* Device configuration descriptor */
-static const struct HidConfigDescriptor hid_cfg_desc = {
- .config = {
- .bLength = sizeof(struct usb_config_descriptor),
- .bDescriptorType = USB_DTYPE_CONFIGURATION,
- .wTotalLength = sizeof(struct HidConfigDescriptor),
- .bNumInterfaces = 1,
- .bConfigurationValue = 1,
- .iConfiguration = NO_DESCRIPTOR,
- .bmAttributes = USB_CFG_ATTR_RESERVED | USB_CFG_ATTR_SELFPOWERED,
- .bMaxPower = USB_CFG_POWER_MA(100),
- },
- .iad_0 = {
- .hid_iad = {
- .bLength = sizeof(struct usb_iad_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFASEASSOC,
- .bFirstInterface = 0,
- .bInterfaceCount = 1,
- .bFunctionClass = USB_CLASS_PER_INTERFACE,
- .bFunctionSubClass = USB_SUBCLASS_NONE,
- .bFunctionProtocol = USB_PROTO_NONE,
- .iFunction = NO_DESCRIPTOR,
- },
- .hid = {
- .bLength = sizeof(struct usb_interface_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFACE,
- .bInterfaceNumber = 0,
- .bAlternateSetting = 0,
- .bNumEndpoints = 2,
- .bInterfaceClass = USB_CLASS_HID,
- .bInterfaceSubClass = USB_HID_SUBCLASS_NONBOOT,
- .bInterfaceProtocol = USB_HID_PROTO_NONBOOT,
- .iInterface = NO_DESCRIPTOR,
- },
- .hid_desc = {
- .bLength = sizeof(struct usb_hid_descriptor),
- .bDescriptorType = USB_DTYPE_HID,
- .bcdHID = VERSION_BCD(1,0,0),
- .bCountryCode = USB_HID_COUNTRY_NONE,
- .bNumDescriptors = 1,
- .bDescriptorType0 = USB_DTYPE_HID_REPORT,
- .wDescriptorLength0 = sizeof(hid_report_desc),
- },
- .hid_ep_in = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = HID_EP_IN,
- .bmAttributes = USB_EPTYPE_INTERRUPT,
- .wMaxPacketSize = HID_EP_SZ,
- .bInterval = 10,
- },
- .hid_ep_out = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = HID_EP_OUT,
- .bmAttributes = USB_EPTYPE_INTERRUPT,
- .wMaxPacketSize = HID_EP_SZ,
- .bInterval = 10,
- },
- },
-};
-
-struct HidReportMouse {
- uint8_t report_id;
- uint8_t btn;
- int8_t x;
- int8_t y;
- int8_t wheel;
-} __attribute__((packed));
-
-struct HidReportKB {
- uint8_t report_id;
- uint8_t mods;
- uint8_t reserved;
- uint8_t btn[HID_KB_MAX_KEYS];
-} __attribute__((packed));
-
-struct HidReportConsumer {
- uint8_t report_id;
- uint16_t btn[HID_CONSUMER_MAX_KEYS];
-} __attribute__((packed));
-
-struct HidReportLED {
- uint8_t report_id;
- uint8_t led_state;
-} __attribute__((packed));
-
-static struct HidReport {
- struct HidReportKB keyboard;
- struct HidReportMouse mouse;
- struct HidReportConsumer consumer;
-} __attribute__((packed)) hid_report;
-
-static void hid_init(usbd_device* dev, UsbInterface* intf);
-static void hid_deinit(usbd_device *dev);
-static void hid_on_wakeup(usbd_device *dev);
-static void hid_on_suspend(usbd_device *dev);
-
-static bool hid_send_report(uint8_t report_id);
-static usbd_respond hid_ep_config (usbd_device *dev, uint8_t cfg);
-static usbd_respond hid_control (usbd_device *dev, usbd_ctlreq *req, usbd_rqc_callback *callback);
-static usbd_device* usb_dev;
-static osSemaphoreId_t hid_semaphore = NULL;
-static bool hid_connected = false;
-static HidStateCallback callback;
-static void* cb_ctx;
-static uint8_t led_state;
-
-bool furi_hal_hid_is_connected() {
- return hid_connected;
-}
-
-uint8_t furi_hal_hid_get_led_state() {
- return led_state;
-}
-
-void furi_hal_hid_set_state_callback(HidStateCallback cb, void* ctx) {
- if (callback != NULL) {
- if (hid_connected == true)
- callback(false, cb_ctx);
- }
-
- callback = cb;
- cb_ctx = ctx;
-
- if (callback != NULL) {
- if (hid_connected == true)
- callback(true, cb_ctx);
- }
-}
-
-bool furi_hal_hid_kb_press(uint16_t button) {
- for (uint8_t key_nb = 0; key_nb < HID_KB_MAX_KEYS; key_nb++) {
- if (hid_report.keyboard.btn[key_nb] == 0) {
- hid_report.keyboard.btn[key_nb] = button & 0xFF;
- break;
- }
- }
- hid_report.keyboard.mods |= (button >> 8);
- return hid_send_report(ReportIdKeyboard);
-}
-
-bool furi_hal_hid_kb_release(uint16_t button) {
- for (uint8_t key_nb = 0; key_nb < HID_KB_MAX_KEYS; key_nb++) {
- if (hid_report.keyboard.btn[key_nb] == (button & 0xFF)) {
- hid_report.keyboard.btn[key_nb] = 0;
- break;
- }
- }
- hid_report.keyboard.mods &= ~(button >> 8);
- return hid_send_report(ReportIdKeyboard);
-}
-
-bool furi_hal_hid_kb_release_all() {
- for (uint8_t key_nb = 0; key_nb < HID_KB_MAX_KEYS; key_nb++) {
- hid_report.keyboard.btn[key_nb] = 0;
- }
- hid_report.keyboard.mods = 0;
- return hid_send_report(ReportIdKeyboard);
-}
-
-bool furi_hal_hid_mouse_move(int8_t dx, int8_t dy) {
- hid_report.mouse.x = dx;
- hid_report.mouse.y = dy;
- bool state = hid_send_report(ReportIdMouse);
- hid_report.mouse.x = 0;
- hid_report.mouse.y = 0;
- return state;
-}
-
-bool furi_hal_hid_mouse_press(uint8_t button) {
- hid_report.mouse.btn |= button;
- return hid_send_report(ReportIdMouse);
-}
-
-bool furi_hal_hid_mouse_release(uint8_t button) {
- hid_report.mouse.btn &= ~button;
- return hid_send_report(ReportIdMouse);
-}
-
-bool furi_hal_hid_mouse_scroll(int8_t delta) {
- hid_report.mouse.wheel = delta;
- bool state = hid_send_report(ReportIdMouse);
- hid_report.mouse.wheel = 0;
- return state;
-}
-
-bool furi_hal_hid_consumer_key_press(uint16_t button) {
- for (uint8_t key_nb = 0; key_nb < HID_CONSUMER_MAX_KEYS; key_nb++) {
- if (hid_report.consumer.btn[key_nb] == 0) {
- hid_report.consumer.btn[key_nb] = button;
- break;
- }
- }
- return hid_send_report(ReportIdConsumer);
-}
-
-bool furi_hal_hid_consumer_key_release(uint16_t button) {
- for (uint8_t key_nb = 0; key_nb < HID_CONSUMER_MAX_KEYS; key_nb++) {
- if (hid_report.consumer.btn[key_nb] == button) {
- hid_report.consumer.btn[key_nb] = 0;
- break;
- }
- }
- return hid_send_report(ReportIdConsumer);
-}
-
-UsbInterface usb_hid = {
- .init = hid_init,
- .deinit = hid_deinit,
- .wakeup = hid_on_wakeup,
- .suspend = hid_on_suspend,
-
- .dev_descr = (struct usb_device_descriptor*)&hid_device_desc,
-
- .str_manuf_descr = (void*)&dev_manuf_desc,
- .str_prod_descr = (void*)&dev_prod_desc,
- .str_serial_descr = (void*)&dev_serial_desc,
-
- .cfg_descr = (void*)&hid_cfg_desc,
-};
-
-static void hid_init(usbd_device* dev, UsbInterface* intf) {
- if (hid_semaphore == NULL)
- hid_semaphore = osSemaphoreNew(1, 1, NULL);
- usb_dev = dev;
- hid_report.keyboard.report_id = ReportIdKeyboard;
- hid_report.mouse.report_id = ReportIdMouse;
- hid_report.consumer.report_id = ReportIdConsumer;
-
- usbd_reg_config(dev, hid_ep_config);
- usbd_reg_control(dev, hid_control);
-
- usbd_connect(dev, true);
-}
-
-static void hid_deinit(usbd_device *dev) {
- usbd_reg_config(dev, NULL);
- usbd_reg_control(dev, NULL);
-}
-
-static void hid_on_wakeup(usbd_device *dev) {
- if (hid_connected == false) {
- hid_connected = true;
- if (callback != NULL)
- callback(true, cb_ctx);
- }
-}
-
-static void hid_on_suspend(usbd_device *dev) {
- if (hid_connected == true) {
- hid_connected = false;
- osSemaphoreRelease(hid_semaphore);
- if (callback != NULL)
- callback(false, cb_ctx);
- }
-}
-
-static bool hid_send_report(uint8_t report_id)
-{
- if ((hid_semaphore == NULL) || (hid_connected == false))
- return false;
-
- furi_check(osSemaphoreAcquire(hid_semaphore, osWaitForever) == osOK);
- if (hid_connected == true) {
- if (report_id == ReportIdKeyboard)
- usbd_ep_write(usb_dev, HID_EP_IN, &hid_report.keyboard, sizeof(hid_report.keyboard));
- else if (report_id == ReportIdMouse)
- usbd_ep_write(usb_dev, HID_EP_IN, &hid_report.mouse, sizeof(hid_report.mouse));
- else if (report_id == ReportIdConsumer)
- usbd_ep_write(usb_dev, HID_EP_IN, &hid_report.consumer, sizeof(hid_report.consumer));
- return true;
- }
- return false;
-}
-
-static void hid_txrx_ep_callback(usbd_device *dev, uint8_t event, uint8_t ep) {
- if (event == usbd_evt_eptx) {
- osSemaphoreRelease(hid_semaphore);
- } else {
- struct HidReportLED leds;
- usbd_ep_read(usb_dev, ep, &leds, 2);
- led_state = leds.led_state;
- }
-}
-
-/* Configure endpoints */
-static usbd_respond hid_ep_config (usbd_device *dev, uint8_t cfg) {
- switch (cfg) {
- case 0:
- /* deconfiguring device */
- usbd_ep_deconfig(dev, HID_EP_OUT);
- usbd_ep_deconfig(dev, HID_EP_IN);
- usbd_reg_endpoint(dev, HID_EP_OUT, 0);
- usbd_reg_endpoint(dev, HID_EP_IN, 0);
- return usbd_ack;
- case 1:
- /* configuring device */
- usbd_ep_config(dev, HID_EP_IN, USB_EPTYPE_INTERRUPT, HID_EP_SZ);
- usbd_ep_config(dev, HID_EP_OUT, USB_EPTYPE_INTERRUPT, HID_EP_SZ);
- usbd_reg_endpoint(dev, HID_EP_IN, hid_txrx_ep_callback);
- usbd_reg_endpoint(dev, HID_EP_OUT, hid_txrx_ep_callback);
- usbd_ep_write(dev, HID_EP_IN, 0, 0);
- return usbd_ack;
- default:
- return usbd_fail;
- }
-}
-
-/* Control requests handler */
-static usbd_respond hid_control (usbd_device *dev, usbd_ctlreq *req, usbd_rqc_callback *callback) {
- /* HID control requests */
- if (((USB_REQ_RECIPIENT | USB_REQ_TYPE) & req->bmRequestType) == (USB_REQ_INTERFACE | USB_REQ_CLASS)
- && req->wIndex == 0 ) {
- switch (req->bRequest) {
- case USB_HID_SETIDLE:
- return usbd_ack;
- case USB_HID_GETREPORT:
- dev->status.data_ptr = &hid_report;
- dev->status.data_count = sizeof(hid_report);
- return usbd_ack;
- default:
- return usbd_fail;
- }
- }
- if (((USB_REQ_RECIPIENT | USB_REQ_TYPE) & req->bmRequestType) == (USB_REQ_INTERFACE | USB_REQ_STANDARD)
- && req->wIndex == 0
- && req->bRequest == USB_STD_GET_DESCRIPTOR) {
- switch (req->wValue >> 8) {
- case USB_DTYPE_HID:
- dev->status.data_ptr = (uint8_t*)&(hid_cfg_desc.iad_0.hid_desc);
- dev->status.data_count = sizeof(hid_cfg_desc.iad_0.hid_desc);
- return usbd_ack;
- case USB_DTYPE_HID_REPORT:
- dev->status.data_ptr = (uint8_t*)hid_report_desc;
- dev->status.data_count = sizeof(hid_report_desc);
- return usbd_ack;
- default:
- return usbd_fail;
- }
- }
- return usbd_fail;
-}
diff --git a/firmware/targets/f7/furi-hal/furi-hal-usb_i.h b/firmware/targets/f7/furi-hal/furi-hal-usb_i.h
deleted file mode 100644
index a3ef8e05..00000000
--- a/firmware/targets/f7/furi-hal/furi-hal-usb_i.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#pragma once
-
-#include "usb.h"
-
-#define USB_EP0_SIZE 8
-
-/* String descriptors */
-enum UsbDevDescStr{
- UsbDevLang = 0,
- UsbDevManuf = 1,
- UsbDevProduct = 2,
- UsbDevSerial = 3,
-};
diff --git a/firmware/targets/f6/furi-hal/furi-hal.c b/firmware/targets/f7/furi_hal/furi_hal.c
index 3f41684f..da529893 100644
--- a/firmware/targets/f6/furi-hal/furi-hal.c
+++ b/firmware/targets/f7/furi_hal/furi_hal.c
@@ -1,4 +1,4 @@
-#include <furi-hal.h>
+#include <furi_hal.h>
#include <comp.h>
#include <tim.h>
@@ -64,14 +64,11 @@ void furi_hal_init() {
// Partial null pointer dereference protection
LL_MPU_Disable();
LL_MPU_ConfigRegion(
- LL_MPU_REGION_NUMBER0, 0x00, 0x0,
- LL_MPU_REGION_SIZE_1MB
- | LL_MPU_REGION_PRIV_RO_URO
- | LL_MPU_ACCESS_BUFFERABLE
- | LL_MPU_ACCESS_CACHEABLE
- | LL_MPU_ACCESS_SHAREABLE
- | LL_MPU_TEX_LEVEL1
- | LL_MPU_INSTRUCTION_ACCESS_ENABLE
- );
+ LL_MPU_REGION_NUMBER0,
+ 0x00,
+ 0x0,
+ LL_MPU_REGION_SIZE_1MB | LL_MPU_REGION_PRIV_RO_URO | LL_MPU_ACCESS_BUFFERABLE |
+ LL_MPU_ACCESS_CACHEABLE | LL_MPU_ACCESS_SHAREABLE | LL_MPU_TEX_LEVEL1 |
+ LL_MPU_INSTRUCTION_ACCESS_ENABLE);
LL_MPU_Enable(LL_MPU_CTRL_PRIVILEGED_DEFAULT);
}
diff --git a/firmware/targets/f6/furi-hal/furi-hal-bootloader.c b/firmware/targets/f7/furi_hal/furi_hal_bootloader.c
index eca6f947..3b549955 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-bootloader.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_bootloader.c
@@ -1,5 +1,5 @@
-#include <furi-hal-bootloader.h>
-#include <furi-hal-rtc.h>
+#include <furi_hal_bootloader.h>
+#include <furi_hal_rtc.h>
#include <furi.h>
#define TAG "FuriHalBoot"
@@ -17,9 +17,9 @@ void furi_hal_bootloader_init() {
}
void furi_hal_bootloader_set_mode(FuriHalBootloaderMode mode) {
- if (mode == FuriHalBootloaderModeNormal) {
+ if(mode == FuriHalBootloaderModeNormal) {
furi_hal_rtc_set_register(FuriHalRtcRegisterBoot, BOOT_REQUEST_CLEAN);
- } else if (mode == FuriHalBootloaderModeDFU) {
+ } else if(mode == FuriHalBootloaderModeDFU) {
furi_hal_rtc_set_register(FuriHalRtcRegisterBoot, BOOT_REQUEST_DFU);
}
}
diff --git a/firmware/targets/f7/furi-hal/furi-hal-bt.c b/firmware/targets/f7/furi_hal/furi_hal_bt.c
index 1435a165..13c747b4 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-bt.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_bt.c
@@ -1,19 +1,20 @@
-#include <furi-hal-bt.h>
+#include <furi_hal_bt.h>
#include <ble.h>
#include <stm32wbxx.h>
#include <shci.h>
#include <cmsis_os2.h>
-#include <furi-hal-version.h>
-#include <furi-hal-bt-hid.h>
-#include <furi-hal-bt-serial.h>
+#include <furi_hal_version.h>
+#include <furi_hal_bt_hid.h>
+#include <furi_hal_bt_serial.h>
#include "battery_service.h"
#include <furi.h>
#define TAG "FuriHalBt"
-#define FURI_HAL_BT_DEFAULT_MAC_ADDR {0x6c, 0x7a, 0xd8, 0xac, 0x57, 0x72}
+#define FURI_HAL_BT_DEFAULT_MAC_ADDR \
+ { 0x6c, 0x7a, 0xd8, 0xac, 0x57, 0x72 }
osMutexId_t furi_hal_bt_core2_mtx = NULL;
static FuriHalBtStack furi_hal_bt_stack = FuriHalBtStackUnknown;
@@ -30,28 +31,32 @@ typedef struct {
} FuriHalBtProfileConfig;
FuriHalBtProfileConfig profile_config[FuriHalBtProfileNumber] = {
- [FuriHalBtProfileSerial] = {
- .start = furi_hal_bt_serial_start,
- .stop = furi_hal_bt_serial_stop,
- .config = {
- .adv_service_uuid = 0x3080,
- .appearance_char = 0x8600,
- .bonding_mode = true,
- .pairing_method = GapPairingPinCodeShow,
- .mac_address = FURI_HAL_BT_DEFAULT_MAC_ADDR,
+ [FuriHalBtProfileSerial] =
+ {
+ .start = furi_hal_bt_serial_start,
+ .stop = furi_hal_bt_serial_stop,
+ .config =
+ {
+ .adv_service_uuid = 0x3080,
+ .appearance_char = 0x8600,
+ .bonding_mode = true,
+ .pairing_method = GapPairingPinCodeShow,
+ .mac_address = FURI_HAL_BT_DEFAULT_MAC_ADDR,
+ },
},
- },
- [FuriHalBtProfileHidKeyboard] = {
- .start = furi_hal_bt_hid_start,
- .stop = furi_hal_bt_hid_stop,
- .config = {
- .adv_service_uuid = HUMAN_INTERFACE_DEVICE_SERVICE_UUID,
- .appearance_char = GAP_APPEARANCE_KEYBOARD,
- .bonding_mode = true,
- .pairing_method = GapPairingPinCodeVerifyYesNo,
- .mac_address = FURI_HAL_BT_DEFAULT_MAC_ADDR,
+ [FuriHalBtProfileHidKeyboard] =
+ {
+ .start = furi_hal_bt_hid_start,
+ .stop = furi_hal_bt_hid_stop,
+ .config =
+ {
+ .adv_service_uuid = HUMAN_INTERFACE_DEVICE_SERVICE_UUID,
+ .appearance_char = GAP_APPEARANCE_KEYBOARD,
+ .bonding_mode = true,
+ .pairing_method = GapPairingPinCodeVerifyYesNo,
+ .mac_address = FURI_HAL_BT_DEFAULT_MAC_ADDR,
+ },
},
- },
};
FuriHalBtProfileConfig* current_profile = NULL;
@@ -90,7 +95,7 @@ static bool furi_hal_bt_radio_stack_is_supported(WirelessFwInfo_t* info) {
info->VersionMinor >= FURI_HAL_BT_STACK_VERSION_MINOR) {
furi_hal_bt_stack = FuriHalBtStackLight;
supported = true;
- }
+ }
} else {
furi_hal_bt_stack = FuriHalBtStackUnknown;
}
@@ -122,7 +127,7 @@ bool furi_hal_bt_start_radio_stack() {
FURI_LOG_E(TAG, "Unsupported radio stack");
LL_C2_PWR_SetPowerMode(LL_PWR_MODE_SHUTDOWN);
ble_glue_thread_stop();
- break;
+ break;
}
// Starting radio stack
if(!ble_glue_start()) {
@@ -161,14 +166,12 @@ bool furi_hal_bt_start_app(FuriHalBtProfile profile, GapEventCallback event_cb,
memcpy(
profile_config[profile].config.mac_address,
furi_hal_version_get_ble_mac(),
- sizeof(profile_config[profile].config.mac_address)
- );
+ sizeof(profile_config[profile].config.mac_address));
// Set advertise name
strlcpy(
profile_config[profile].config.adv_name,
furi_hal_version_get_ble_local_device_name_ptr(),
- FURI_HAL_VERSION_DEVICE_NAME_LENGTH
- );
+ FURI_HAL_VERSION_DEVICE_NAME_LENGTH);
// Configure GAP
GapConfig* config = &profile_config[profile].config;
if(profile == FuriHalBtProfileSerial) {
@@ -253,7 +256,9 @@ void furi_hal_bt_get_key_storage_buff(uint8_t** key_buff_addr, uint16_t* key_buf
ble_app_get_key_storage_buff(key_buff_addr, key_buff_size);
}
-void furi_hal_bt_set_key_storage_change_callback(BleGlueKeyStorageChangedCallback callback, void* context) {
+void furi_hal_bt_set_key_storage_change_callback(
+ BleGlueKeyStorageChangedCallback callback,
+ void* context) {
furi_assert(callback);
ble_glue_set_key_storage_changed_callback(callback, context);
}
@@ -269,7 +274,7 @@ void furi_hal_bt_nvm_sram_sem_release() {
}
void furi_hal_bt_dump_state(string_t buffer) {
- if (furi_hal_bt_is_alive()) {
+ if(furi_hal_bt_is_alive()) {
uint8_t HCI_Version;
uint16_t HCI_Revision;
uint8_t LMP_PAL_Version;
@@ -277,13 +282,17 @@ void furi_hal_bt_dump_state(string_t buffer) {
uint16_t LMP_PAL_Subversion;
tBleStatus ret = hci_read_local_version_information(
- &HCI_Version, &HCI_Revision, &LMP_PAL_Version, &Manufacturer_Name, &LMP_PAL_Subversion
- );
+ &HCI_Version, &HCI_Revision, &LMP_PAL_Version, &Manufacturer_Name, &LMP_PAL_Subversion);
- string_cat_printf(buffer,
+ string_cat_printf(
+ buffer,
"Ret: %d, HCI_Version: %d, HCI_Revision: %d, LMP_PAL_Version: %d, Manufacturer_Name: %d, LMP_PAL_Subversion: %d",
- ret, HCI_Version, HCI_Revision, LMP_PAL_Version, Manufacturer_Name, LMP_PAL_Subversion
- );
+ ret,
+ HCI_Version,
+ HCI_Revision,
+ LMP_PAL_Version,
+ Manufacturer_Name,
+ LMP_PAL_Subversion);
} else {
string_cat_printf(buffer, "BLE not ready");
}
@@ -324,7 +333,7 @@ float furi_hal_bt_get_rssi() {
float val;
uint8_t rssi_raw[3];
- if (aci_hal_read_raw_rssi(rssi_raw) != BLE_STATUS_SUCCESS) {
+ if(aci_hal_read_raw_rssi(rssi_raw) != BLE_STATUS_SUCCESS) {
return 0.0f;
}
@@ -337,7 +346,7 @@ float furi_hal_bt_get_rssi() {
val = agc * 6.0f - 127.0f;
while(rssi > 30) {
val += 6.0;
- rssi >>=1;
+ rssi >>= 1;
}
val += (417 * rssi + 18080) >> 10;
}
diff --git a/firmware/targets/f6/furi-hal/furi-hal-bt-hid.c b/firmware/targets/f7/furi_hal/furi_hal_bt_hid.c
index 890c447c..6b7128d8 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-bt-hid.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_bt_hid.c
@@ -1,4 +1,4 @@
-#include "furi-hal-bt-hid.h"
+#include "furi_hal_bt_hid.h"
#include "dev_info_service.h"
#include "battery_service.h"
#include "hid_service.h"
@@ -26,50 +26,88 @@ typedef struct {
// TODO make composite HID device
static uint8_t furi_hal_bt_hid_report_map_data[] = {
- 0x05, 0x01, // Usage Page (Generic Desktop)
- 0x09, 0x06, // Usage (Keyboard)
- 0xA1, 0x01, // Collection (Application)
+ 0x05,
+ 0x01, // Usage Page (Generic Desktop)
+ 0x09,
+ 0x06, // Usage (Keyboard)
+ 0xA1,
+ 0x01, // Collection (Application)
// 0x85, 0x01, // Report ID (1)
- 0x05, 0x07, // Usage Page (Key Codes)
- 0x19, 0xe0, // Usage Minimum (224)
- 0x29, 0xe7, // Usage Maximum (231)
- 0x15, 0x00, // Logical Minimum (0)
- 0x25, 0x01, // Logical Maximum (1)
- 0x75, 0x01, // Report Size (1)
- 0x95, 0x08, // Report Count (8)
- 0x81, 0x02, // Input (Data, Variable, Absolute)
-
- 0x95, 0x01, // Report Count (1)
- 0x75, 0x08, // Report Size (8)
- 0x81, 0x01, // Input (Constant) reserved byte(1)
-
- 0x95, 0x05, // Report Count (5)
- 0x75, 0x01, // Report Size (1)
- 0x05, 0x08, // Usage Page (Page# for LEDs)
- 0x19, 0x01, // Usage Minimum (1)
- 0x29, 0x05, // Usage Maximum (5)
- 0x91, 0x02, // Output (Data, Variable, Absolute), Led report
- 0x95, 0x01, // Report Count (1)
- 0x75, 0x03, // Report Size (3)
- 0x91, 0x01, // Output (Data, Variable, Absolute), Led report padding
-
- 0x95, 0x06, // Report Count (6)
- 0x75, 0x08, // Report Size (8)
- 0x15, 0x00, // Logical Minimum (0)
- 0x25, 0x65, // Logical Maximum (101)
- 0x05, 0x07, // Usage Page (Key codes)
- 0x19, 0x00, // Usage Minimum (0)
- 0x29, 0x65, // Usage Maximum (101)
- 0x81, 0x00, // Input (Data, Array) Key array(6 bytes)
-
- 0x09, 0x05, // Usage (Vendor Defined)
- 0x15, 0x00, // Logical Minimum (0)
- 0x26, 0xFF, 0x00, // Logical Maximum (255)
- 0x75, 0x08, // Report Size (8 bit)
- 0x95, 0x02, // Report Count (2)
- 0xB1, 0x02, // Feature (Data, Variable, Absolute)
-
- 0xC0, // End Collection (Application)
+ 0x05,
+ 0x07, // Usage Page (Key Codes)
+ 0x19,
+ 0xe0, // Usage Minimum (224)
+ 0x29,
+ 0xe7, // Usage Maximum (231)
+ 0x15,
+ 0x00, // Logical Minimum (0)
+ 0x25,
+ 0x01, // Logical Maximum (1)
+ 0x75,
+ 0x01, // Report Size (1)
+ 0x95,
+ 0x08, // Report Count (8)
+ 0x81,
+ 0x02, // Input (Data, Variable, Absolute)
+
+ 0x95,
+ 0x01, // Report Count (1)
+ 0x75,
+ 0x08, // Report Size (8)
+ 0x81,
+ 0x01, // Input (Constant) reserved byte(1)
+
+ 0x95,
+ 0x05, // Report Count (5)
+ 0x75,
+ 0x01, // Report Size (1)
+ 0x05,
+ 0x08, // Usage Page (Page# for LEDs)
+ 0x19,
+ 0x01, // Usage Minimum (1)
+ 0x29,
+ 0x05, // Usage Maximum (5)
+ 0x91,
+ 0x02, // Output (Data, Variable, Absolute), Led report
+ 0x95,
+ 0x01, // Report Count (1)
+ 0x75,
+ 0x03, // Report Size (3)
+ 0x91,
+ 0x01, // Output (Data, Variable, Absolute), Led report padding
+
+ 0x95,
+ 0x06, // Report Count (6)
+ 0x75,
+ 0x08, // Report Size (8)
+ 0x15,
+ 0x00, // Logical Minimum (0)
+ 0x25,
+ 0x65, // Logical Maximum (101)
+ 0x05,
+ 0x07, // Usage Page (Key codes)
+ 0x19,
+ 0x00, // Usage Minimum (0)
+ 0x29,
+ 0x65, // Usage Maximum (101)
+ 0x81,
+ 0x00, // Input (Data, Array) Key array(6 bytes)
+
+ 0x09,
+ 0x05, // Usage (Vendor Defined)
+ 0x15,
+ 0x00, // Logical Minimum (0)
+ 0x26,
+ 0xFF,
+ 0x00, // Logical Maximum (255)
+ 0x75,
+ 0x08, // Report Size (8 bit)
+ 0x95,
+ 0x02, // Report Count (2)
+ 0xB1,
+ 0x02, // Feature (Data, Variable, Absolute)
+
+ 0xC0, // End Collection (Application)
// 0x05, 0x0C, // Usage Page (Consumer)
// 0x09, 0x01, // Usage (Consumer Control)
@@ -112,13 +150,15 @@ void furi_hal_bt_hid_start() {
kb_report = furi_alloc(sizeof(FuriHalBtHidKbReport));
media_report = furi_alloc(sizeof(FuriHalBtHidMediaReport));
// Configure Report Map characteristic
- hid_svc_update_report_map(furi_hal_bt_hid_report_map_data, sizeof(furi_hal_bt_hid_report_map_data));
+ hid_svc_update_report_map(
+ furi_hal_bt_hid_report_map_data, sizeof(furi_hal_bt_hid_report_map_data));
// Configure HID Information characteristic
uint8_t hid_info_val[4] = {
FURI_HAL_BT_INFO_BASE_USB_SPECIFICATION & 0x00ff,
(FURI_HAL_BT_INFO_BASE_USB_SPECIFICATION & 0xff00) >> 8,
FURI_HAL_BT_INFO_COUNTRY_CODE,
- FURI_HAL_BT_HID_INFO_FLAG_REMOTE_WAKE_MSK | FURI_HAL_BT_HID_INFO_FLAG_NORMALLY_CONNECTABLE_MSK,
+ FURI_HAL_BT_HID_INFO_FLAG_REMOTE_WAKE_MSK |
+ FURI_HAL_BT_HID_INFO_FLAG_NORMALLY_CONNECTABLE_MSK,
};
hid_svc_update_info(hid_info_val, sizeof(hid_info_val));
}
@@ -144,8 +184,8 @@ void furi_hal_bt_hid_stop() {
bool furi_hal_bt_hid_kb_press(uint16_t button) {
furi_assert(kb_report);
// kb_report->report_id = 0x01;
- for (uint8_t i = 0; i < FURI_HAL_BT_HID_KB_KEYS_MAX; i++) {
- if (kb_report->key[i] == 0) {
+ for(uint8_t i = 0; i < FURI_HAL_BT_HID_KB_KEYS_MAX; i++) {
+ if(kb_report->key[i] == 0) {
kb_report->key[i] = button & 0xFF;
break;
}
@@ -157,8 +197,8 @@ bool furi_hal_bt_hid_kb_press(uint16_t button) {
bool furi_hal_bt_hid_kb_release(uint16_t button) {
furi_assert(kb_report);
// kb_report->report_id = 0x01;
- for (uint8_t i = 0; i < FURI_HAL_BT_HID_KB_KEYS_MAX; i++) {
- if (kb_report->key[i] == (button & 0xFF)) {
+ for(uint8_t i = 0; i < FURI_HAL_BT_HID_KB_KEYS_MAX; i++) {
+ if(kb_report->key[i] == (button & 0xFF)) {
kb_report->key[i] = 0;
break;
}
diff --git a/firmware/targets/f7/furi-hal/furi-hal-bt-serial.c b/firmware/targets/f7/furi_hal/furi_hal_bt_serial.c
index d5ea869b..9bdad5bf 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-bt-serial.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_bt_serial.c
@@ -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"
@@ -20,7 +20,10 @@ void furi_hal_bt_serial_start() {
}
}
-void furi_hal_bt_serial_set_event_callback(uint16_t buff_size, FuriHalBtSerialCallback callback, void* context) {
+void furi_hal_bt_serial_set_event_callback(
+ uint16_t buff_size,
+ FuriHalBtSerialCallback callback,
+ void* context) {
serial_svc_set_callbacks(buff_size, callback, context);
}
diff --git a/firmware/targets/f6/furi-hal/furi-hal-clock.c b/firmware/targets/f7/furi_hal/furi_hal_clock.c
index ddbeaa0b..209a2181 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-clock.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_clock.c
@@ -1,4 +1,4 @@
-#include <furi-hal-clock.h>
+#include <furi_hal_clock.h>
#include <furi.h>
#include <stm32wbxx_ll_pwr.h>
@@ -13,13 +13,15 @@
void furi_hal_clock_init() {
/* Prepare Flash memory for 64mHz system clock */
LL_FLASH_SetLatency(LL_FLASH_LATENCY_3);
- while(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_3);
+ while(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_3)
+ ;
/* HSE and HSI configuration and activation */
LL_RCC_HSE_SetCapacitorTuning(0x26);
LL_RCC_HSE_Enable();
LL_RCC_HSI_Enable();
- while(!HS_CLOCK_IS_READY());
+ while(!HS_CLOCK_IS_READY())
+ ;
LL_RCC_HSE_EnableCSS();
/* LSE and LSI1 configuration and activation */
@@ -27,8 +29,10 @@ void furi_hal_clock_init() {
LL_RCC_LSE_SetDriveCapability(LL_RCC_LSEDRIVE_HIGH);
LL_RCC_LSE_Enable();
LL_RCC_LSI1_Enable();
- while(!LS_CLOCK_IS_READY());
- LL_EXTI_EnableIT_0_31(LL_EXTI_LINE_18); /* Why? Because that's why. See RM0434, Table 61. CPU1 vector table. */
+ while(!LS_CLOCK_IS_READY())
+ ;
+ LL_EXTI_EnableIT_0_31(
+ LL_EXTI_LINE_18); /* Why? Because that's why. See RM0434, Table 61. CPU1 vector table. */
LL_EXTI_EnableRisingTrig_0_31(LL_EXTI_LINE_18);
LL_RCC_EnableIT_LSECSS();
LL_RCC_LSE_EnableCSS();
@@ -37,14 +41,18 @@ void furi_hal_clock_init() {
LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 8, LL_RCC_PLLR_DIV_2);
LL_RCC_PLL_Enable();
LL_RCC_PLL_EnableDomain_SYS();
- while(LL_RCC_PLL_IsReady() != 1);
+ while(LL_RCC_PLL_IsReady() != 1)
+ ;
- LL_RCC_PLLSAI1_ConfigDomain_48M(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 6, LL_RCC_PLLSAI1Q_DIV_2);
- LL_RCC_PLLSAI1_ConfigDomain_ADC(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 6, LL_RCC_PLLSAI1R_DIV_2);
+ LL_RCC_PLLSAI1_ConfigDomain_48M(
+ LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 6, LL_RCC_PLLSAI1Q_DIV_2);
+ LL_RCC_PLLSAI1_ConfigDomain_ADC(
+ LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 6, LL_RCC_PLLSAI1R_DIV_2);
LL_RCC_PLLSAI1_Enable();
LL_RCC_PLLSAI1_EnableDomain_48M();
LL_RCC_PLLSAI1_EnableDomain_ADC();
- while(LL_RCC_PLLSAI1_IsReady() != 1);
+ while(LL_RCC_PLLSAI1_IsReady() != 1)
+ ;
/* Sysclk activation on the main PLL */
/* Set CPU1 prescaler*/
@@ -54,7 +62,8 @@ void furi_hal_clock_init() {
LL_C2_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_2);
LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);
- while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL);
+ while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL)
+ ;
/* Set AHB SHARED prescaler*/
LL_RCC_SetAHB4Prescaler(LL_RCC_SYSCLK_DIV_1);
@@ -67,13 +76,14 @@ void furi_hal_clock_init() {
/* Disable MSI */
LL_RCC_MSI_Disable();
- while(LL_RCC_MSI_IsReady() != 0);
+ while(LL_RCC_MSI_IsReady() != 0)
+ ;
/* Update CMSIS variable (which can be updated also through SystemCoreClockUpdate function) */
LL_SetSystemCoreClock(64000000);
/* Update the time base */
- if (HAL_InitTick (TICK_INT_PRIORITY) != HAL_OK) {
+ if(HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK) {
Error_Handler();
}
@@ -120,25 +130,30 @@ void furi_hal_clock_init() {
}
void furi_hal_clock_switch_to_hsi() {
- LL_RCC_HSI_Enable( );
+ LL_RCC_HSI_Enable();
- while(!LL_RCC_HSI_IsReady());
+ while(!LL_RCC_HSI_IsReady())
+ ;
LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_HSI);
LL_RCC_SetSMPSClockSource(LL_RCC_SMPS_CLKSOURCE_HSI);
- while (LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_HSI);
+ while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_HSI)
+ ;
}
void furi_hal_clock_switch_to_pll() {
LL_RCC_HSE_Enable();
LL_RCC_PLL_Enable();
- while(!LL_RCC_HSE_IsReady());
- while(!LL_RCC_PLL_IsReady());
+ while(!LL_RCC_HSE_IsReady())
+ ;
+ while(!LL_RCC_PLL_IsReady())
+ ;
LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);
LL_RCC_SetSMPSClockSource(LL_RCC_SMPS_CLKSOURCE_HSE);
- while (LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL);
+ while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL)
+ ;
}
diff --git a/firmware/targets/f7/furi-hal/furi-hal-clock.h b/firmware/targets/f7/furi_hal/furi_hal_clock.h
index 3ec59205..3ec59205 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-clock.h
+++ b/firmware/targets/f7/furi_hal/furi_hal_clock.h
diff --git a/firmware/targets/f6/furi-hal/furi-hal-compress.c b/firmware/targets/f7/furi_hal/furi_hal_compress.c
index 369ab3a0..d0efb143 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-compress.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_compress.c
@@ -1,4 +1,4 @@
-#include <furi-hal-compress.h>
+#include <furi_hal_compress.h>
#include <furi.h>
#include <lib/heatshrink/heatshrink_encoder.h>
@@ -6,7 +6,7 @@
#define TAG "FuriHalCompress"
-#define FURI_HAL_COMPRESS_ICON_ENCODED_BUFF_SIZE (2*512)
+#define FURI_HAL_COMPRESS_ICON_ENCODED_BUFF_SIZE (2 * 512)
#define FURI_HAL_COMPRESS_ICON_DECODED_BUFF_SIZE (1024)
#define FURI_HAL_COMPRESS_EXP_BUFF_SIZE (1 << FURI_HAL_COMPRESS_EXP_BUFF_SIZE_LOG)
@@ -19,14 +19,15 @@ typedef struct {
typedef struct {
heatshrink_decoder* decoder;
- uint8_t compress_buff[FURI_HAL_COMPRESS_EXP_BUFF_SIZE + FURI_HAL_COMPRESS_ICON_ENCODED_BUFF_SIZE];
+ uint8_t
+ compress_buff[FURI_HAL_COMPRESS_EXP_BUFF_SIZE + FURI_HAL_COMPRESS_ICON_ENCODED_BUFF_SIZE];
uint8_t decoded_buff[FURI_HAL_COMPRESS_ICON_DECODED_BUFF_SIZE];
} FuriHalCompressIcon;
struct FuriHalCompress {
heatshrink_encoder* encoder;
heatshrink_decoder* decoder;
- uint8_t *compress_buff;
+ uint8_t* compress_buff;
uint16_t compress_buff_size;
};
@@ -51,22 +52,26 @@ void furi_hal_compress_icon_init() {
FURI_LOG_I(TAG, "Init OK");
}
-void furi_hal_compress_icon_decode(const uint8_t* icon_data, uint8_t** decoded_buff) {
+void furi_hal_compress_icon_decode(const uint8_t* icon_data, uint8_t** decoded_buff) {
furi_assert(icon_data);
furi_assert(decoded_buff);
- FuriHalCompressHeader* header = (FuriHalCompressHeader*) icon_data;
+ FuriHalCompressHeader* header = (FuriHalCompressHeader*)icon_data;
if(header->is_compressed) {
size_t data_processed = 0;
- heatshrink_decoder_sink(icon_decoder->decoder, (uint8_t*)&icon_data[4], header->compressed_buff_size, &data_processed);
- while (1) {
+ heatshrink_decoder_sink(
+ icon_decoder->decoder,
+ (uint8_t*)&icon_data[4],
+ header->compressed_buff_size,
+ &data_processed);
+ while(1) {
HSD_poll_res res = heatshrink_decoder_poll(
icon_decoder->decoder,
icon_decoder->decoded_buff,
sizeof(icon_decoder->decoded_buff),
&data_processed);
furi_assert((res == HSDR_POLL_EMPTY) || (res == HSDR_POLL_MORE));
- if (res != HSDR_POLL_MORE) {
+ if(res != HSDR_POLL_MORE) {
break;
}
}
@@ -81,8 +86,15 @@ void furi_hal_compress_icon_decode(const uint8_t* icon_data, uint8_t** decoded_b
FuriHalCompress* furi_hal_compress_alloc(uint16_t compress_buff_size) {
FuriHalCompress* compress = furi_alloc(sizeof(FuriHalCompress));
compress->compress_buff = furi_alloc(compress_buff_size + FURI_HAL_COMPRESS_EXP_BUFF_SIZE);
- compress->encoder = heatshrink_encoder_alloc(compress->compress_buff, FURI_HAL_COMPRESS_EXP_BUFF_SIZE_LOG, FURI_HAL_COMPRESS_LOOKAHEAD_BUFF_SIZE_LOG);
- compress->decoder = heatshrink_decoder_alloc(compress->compress_buff, compress_buff_size, FURI_HAL_COMPRESS_EXP_BUFF_SIZE_LOG, FURI_HAL_COMPRESS_LOOKAHEAD_BUFF_SIZE_LOG);
+ compress->encoder = heatshrink_encoder_alloc(
+ compress->compress_buff,
+ FURI_HAL_COMPRESS_EXP_BUFF_SIZE_LOG,
+ FURI_HAL_COMPRESS_LOOKAHEAD_BUFF_SIZE_LOG);
+ compress->decoder = heatshrink_decoder_alloc(
+ compress->compress_buff,
+ compress_buff_size,
+ FURI_HAL_COMPRESS_EXP_BUFF_SIZE_LOG,
+ FURI_HAL_COMPRESS_LOOKAHEAD_BUFF_SIZE_LOG);
return compress;
}
@@ -96,7 +108,13 @@ void furi_hal_compress_free(FuriHalCompress* compress) {
free(compress);
}
-bool furi_hal_compress_encode(FuriHalCompress* compress, uint8_t* data_in, size_t data_in_size, uint8_t* data_out, size_t data_out_size, size_t* data_res_size) {
+bool furi_hal_compress_encode(
+ FuriHalCompress* compress,
+ uint8_t* data_in,
+ size_t data_in_size,
+ uint8_t* data_out,
+ size_t data_out_size,
+ size_t* data_res_size) {
furi_assert(compress);
furi_assert(data_in);
furi_assert(data_in_size);
@@ -112,14 +130,19 @@ bool furi_hal_compress_encode(FuriHalCompress* compress, uint8_t* data_in, size_
// Sink data to encoding buffer
while((sunk < data_in_size) && !encode_failed) {
- sink_res = heatshrink_encoder_sink(compress->encoder, &data_in[sunk], data_in_size - sunk, &sink_size);
+ sink_res = heatshrink_encoder_sink(
+ compress->encoder, &data_in[sunk], data_in_size - sunk, &sink_size);
if(sink_res != HSER_SINK_OK) {
encode_failed = true;
break;
}
sunk += sink_size;
do {
- poll_res = heatshrink_encoder_poll(compress->encoder, &data_out[res_buff_size], data_out_size - res_buff_size, &poll_size);
+ poll_res = heatshrink_encoder_poll(
+ compress->encoder,
+ &data_out[res_buff_size],
+ data_out_size - res_buff_size,
+ &poll_size);
if(poll_res < 0) {
encode_failed = true;
break;
@@ -134,7 +157,11 @@ bool furi_hal_compress_encode(FuriHalCompress* compress, uint8_t* data_in, size_
encode_failed = true;
} else {
do {
- poll_res = heatshrink_encoder_poll(compress->encoder, &data_out[res_buff_size], data_out_size - 4 - res_buff_size, &poll_size);
+ poll_res = heatshrink_encoder_poll(
+ compress->encoder,
+ &data_out[res_buff_size],
+ data_out_size - 4 - res_buff_size,
+ &poll_size);
if(poll_res < 0) {
encode_failed = true;
break;
@@ -147,10 +174,11 @@ bool furi_hal_compress_encode(FuriHalCompress* compress, uint8_t* data_in, size_
bool result = true;
// Write encoded data to output buffer if compression is efficient. Else - write header and original data
if(!encode_failed && (res_buff_size < data_in_size + 1)) {
- FuriHalCompressHeader header = {.is_compressed = 0x01, .reserved = 0x00, .compressed_buff_size = res_buff_size};
+ FuriHalCompressHeader header = {
+ .is_compressed = 0x01, .reserved = 0x00, .compressed_buff_size = res_buff_size};
memcpy(data_out, &header, sizeof(header));
*data_res_size = res_buff_size;
- } else if (data_out_size > data_in_size) {
+ } else if(data_out_size > data_in_size) {
data_out[0] = 0x00;
memcpy(&data_out[1], data_in, data_in_size);
*data_res_size = data_in_size + 1;
@@ -163,7 +191,13 @@ bool furi_hal_compress_encode(FuriHalCompress* compress, uint8_t* data_in, size_
return result;
}
-bool furi_hal_compress_decode(FuriHalCompress* compress, uint8_t* data_in, size_t data_in_size, uint8_t* data_out, size_t data_out_size, size_t* data_res_size) {
+bool furi_hal_compress_decode(
+ FuriHalCompress* compress,
+ uint8_t* data_in,
+ size_t data_in_size,
+ uint8_t* data_out,
+ size_t data_out_size,
+ size_t* data_res_size) {
furi_assert(compress);
furi_assert(data_in);
furi_assert(data_out);
@@ -178,20 +212,22 @@ bool furi_hal_compress_decode(FuriHalCompress* compress, uint8_t* data_in, size_
size_t res_buff_size = 0;
size_t poll_size = 0;
- FuriHalCompressHeader* header = (FuriHalCompressHeader*) data_in;
+ FuriHalCompressHeader* header = (FuriHalCompressHeader*)data_in;
if(header->is_compressed) {
// Sink data to decoding buffer
size_t compressed_size = header->compressed_buff_size;
size_t sunk = sizeof(FuriHalCompressHeader);
while(sunk < compressed_size && !decode_failed) {
- sink_res = heatshrink_decoder_sink(compress->decoder, &data_in[sunk], compressed_size - sunk, &sink_size);
+ sink_res = heatshrink_decoder_sink(
+ compress->decoder, &data_in[sunk], compressed_size - sunk, &sink_size);
if(sink_res < 0) {
decode_failed = true;
break;
}
sunk += sink_size;
do {
- poll_res = heatshrink_decoder_poll(compress->decoder, &data_out[res_buff_size], data_out_size, &poll_size);
+ poll_res = heatshrink_decoder_poll(
+ compress->decoder, &data_out[res_buff_size], data_out_size, &poll_size);
if(poll_res < 0) {
decode_failed = true;
break;
@@ -206,7 +242,8 @@ bool furi_hal_compress_decode(FuriHalCompress* compress, uint8_t* data_in, size_
decode_failed = true;
} else {
do {
- poll_res = heatshrink_decoder_poll(compress->decoder, &data_out[res_buff_size], data_out_size, &poll_size);
+ poll_res = heatshrink_decoder_poll(
+ compress->decoder, &data_out[res_buff_size], data_out_size, &poll_size);
res_buff_size += poll_size;
finish_res = heatshrink_decoder_finish(compress->decoder);
} while(finish_res != HSDR_FINISH_DONE);
@@ -222,6 +259,6 @@ bool furi_hal_compress_decode(FuriHalCompress* compress, uint8_t* data_in, size_
result = false;
}
furi_hal_compress_reset(compress);
-
+
return result;
}
diff --git a/firmware/targets/f6/furi-hal/furi-hal-console.c b/firmware/targets/f7/furi_hal/furi_hal_console.c
index c3943497..dd51716f 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-console.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_console.c
@@ -1,5 +1,5 @@
-#include <furi-hal-console.h>
-#include <furi-hal-uart.h>
+#include <furi_hal_console.h>
+#include <furi_hal_uart.h>
#include <stdbool.h>
#include <stm32wbxx_ll_gpio.h>
@@ -25,31 +25,32 @@ void furi_hal_console_init() {
void furi_hal_console_enable() {
furi_hal_uart_set_irq_cb(FuriHalUartIdUSART1, NULL, NULL);
- while (!LL_USART_IsActiveFlag_TC(USART1));
+ while(!LL_USART_IsActiveFlag_TC(USART1))
+ ;
furi_hal_uart_set_br(FuriHalUartIdUSART1, CONSOLE_BAUDRATE);
furi_hal_console_alive = true;
}
void furi_hal_console_disable() {
- while (!LL_USART_IsActiveFlag_TC(USART1));
+ while(!LL_USART_IsActiveFlag_TC(USART1))
+ ;
furi_hal_console_alive = false;
}
void furi_hal_console_tx(const uint8_t* buffer, size_t buffer_size) {
- if (!furi_hal_console_alive)
- return;
+ if(!furi_hal_console_alive) return;
FURI_CRITICAL_ENTER();
// Transmit data
furi_hal_uart_tx(FuriHalUartIdUSART1, (uint8_t*)buffer, buffer_size);
// Wait for TC flag to be raised for last char
- while (!LL_USART_IsActiveFlag_TC(USART1));
+ while(!LL_USART_IsActiveFlag_TC(USART1))
+ ;
FURI_CRITICAL_EXIT();
}
void furi_hal_console_tx_with_new_line(const uint8_t* buffer, size_t buffer_size) {
- if (!furi_hal_console_alive)
- return;
+ if(!furi_hal_console_alive) return;
FURI_CRITICAL_ENTER();
// Transmit data
@@ -57,7 +58,8 @@ void furi_hal_console_tx_with_new_line(const uint8_t* buffer, size_t buffer_size
// Transmit new line symbols
furi_hal_uart_tx(FuriHalUartIdUSART1, (uint8_t*)"\r\n", 2);
// Wait for TC flag to be raised for last char
- while (!LL_USART_IsActiveFlag_TC(USART1));
+ while(!LL_USART_IsActiveFlag_TC(USART1))
+ ;
FURI_CRITICAL_EXIT();
}
@@ -71,6 +73,6 @@ void furi_hal_console_printf(const char format[], ...) {
string_clear(string);
}
-void furi_hal_console_puts(const char *data) {
+void furi_hal_console_puts(const char* data) {
furi_hal_console_tx((const uint8_t*)data, strlen(data));
}
diff --git a/firmware/targets/f7/furi-hal/furi-hal-console.h b/firmware/targets/f7/furi_hal/furi_hal_console.h
index 637c17f6..637c17f6 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-console.h
+++ b/firmware/targets/f7/furi_hal/furi_hal_console.h
diff --git a/firmware/targets/f6/furi-hal/furi-hal-crypto.c b/firmware/targets/f7/furi_hal/furi_hal_crypto.c
index f5398421..72de7d87 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-crypto.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_crypto.c
@@ -1,6 +1,6 @@
-#include <furi-hal-crypto.h>
-#include <furi-hal-bt.h>
-#include <furi-hal-random.h>
+#include <furi_hal_crypto.h>
+#include <furi_hal_bt.h>
+#include <furi_hal_random.h>
#include <furi.h>
#include <shci.h>
@@ -58,12 +58,12 @@ static bool furi_hal_crypto_generate_unique_keys(uint8_t start_slot, uint8_t end
FuriHalCryptoKey key;
uint8_t key_data[32];
FURI_LOG_I(TAG, "Generating keys %u..%u", start_slot, end_slot);
- for (uint8_t slot = start_slot; slot <= end_slot; slot++) {
+ for(uint8_t slot = start_slot; slot <= end_slot; slot++) {
key.type = FuriHalCryptoKeyTypeSimple;
key.size = FuriHalCryptoKeySize256;
key.data = key_data;
furi_hal_random_fill_buf(key_data, 32);
- if (!furi_hal_crypto_store_add_key(&key, &slot)) {
+ if(!furi_hal_crypto_store_add_key(&key, &slot)) {
FURI_LOG_E(TAG, "Error writing key to slot %u", slot);
return false;
}
@@ -77,23 +77,22 @@ bool furi_hal_crypto_verify_key(uint8_t key_slot) {
uint8_t last_valid_slot = ENCLAVE_FACTORY_KEY_SLOTS;
uint8_t empty_iv[16];
furi_hal_crypto_verify_enclave(&keys_nb, &valid_keys_nb);
- if (key_slot <= ENCLAVE_FACTORY_KEY_SLOTS) { // It's a factory key
- if (key_slot > keys_nb)
- return false;
+ if(key_slot <= ENCLAVE_FACTORY_KEY_SLOTS) { // It's a factory key
+ if(key_slot > keys_nb) return false;
} else { // Unique key
- if (keys_nb < ENCLAVE_FACTORY_KEY_SLOTS) // Some factory keys are missing
+ if(keys_nb < ENCLAVE_FACTORY_KEY_SLOTS) // Some factory keys are missing
return false;
- for (uint8_t i = key_slot; i > ENCLAVE_FACTORY_KEY_SLOTS; i--) {
+ for(uint8_t i = key_slot; i > ENCLAVE_FACTORY_KEY_SLOTS; i--) {
if(furi_hal_crypto_store_load_key(i, empty_iv)) {
last_valid_slot = i;
furi_hal_crypto_store_unload_key(i);
break;
}
}
- if (last_valid_slot == key_slot)
+ if(last_valid_slot == key_slot)
return true;
else // Generate missing unique keys
- return furi_hal_crypto_generate_unique_keys(last_valid_slot+1, key_slot);
+ return furi_hal_crypto_generate_unique_keys(last_valid_slot + 1, key_slot);
}
return true;
}
@@ -107,15 +106,18 @@ bool furi_hal_crypto_verify_enclave(uint8_t* keys_nb, uint8_t* valid_keys_nb) {
for(size_t key_slot = 0; key_slot < ENCLAVE_FACTORY_KEY_SLOTS; key_slot++) {
if(furi_hal_crypto_store_load_key(key_slot + 1, enclave_signature_iv[key_slot])) {
keys++;
- if(furi_hal_crypto_encrypt(enclave_signature_input[key_slot], buffer, ENCLAVE_SIGNATURE_SIZE)) {
- keys_valid += memcmp(buffer, enclave_signature_expected[key_slot], ENCLAVE_SIGNATURE_SIZE) == 0;
+ if(furi_hal_crypto_encrypt(
+ enclave_signature_input[key_slot], buffer, ENCLAVE_SIGNATURE_SIZE)) {
+ keys_valid +=
+ memcmp(buffer, enclave_signature_expected[key_slot], ENCLAVE_SIGNATURE_SIZE) ==
+ 0;
}
furi_hal_crypto_store_unload_key(key_slot + 1);
}
}
*keys_nb = keys;
*valid_keys_nb = keys_valid;
- if (*valid_keys_nb == ENCLAVE_FACTORY_KEY_SLOTS)
+ if(*valid_keys_nb == ENCLAVE_FACTORY_KEY_SLOTS)
return true;
else
return false;
diff --git a/firmware/targets/f7/furi-hal/furi-hal-delay.c b/firmware/targets/f7/furi_hal/furi_hal_delay.c
index b5f3c334..60c9b1c4 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-delay.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_delay.c
@@ -1,4 +1,4 @@
-#include "furi-hal-delay.h"
+#include "furi_hal_delay.h"
#include <furi.h>
#include <cmsis_os2.h>
@@ -31,6 +31,6 @@ void delay(float milliseconds) {
furi_assert(result == osOK);
}
-uint32_t millis(void){
+uint32_t millis(void) {
return HAL_GetTick();
}
diff --git a/firmware/targets/f6/furi-hal/furi-hal-flash.c b/firmware/targets/f7/furi_hal/furi_hal_flash.c
index 8a1d2d06..9d09e9c5 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-flash.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_flash.c
@@ -1,5 +1,5 @@
-#include <furi-hal-flash.h>
-#include <furi-hal-bt.h>
+#include <furi_hal_flash.h>
+#include <furi_hal_bt.h>
#include <furi.h>
#include <ble.h>
#include <shci.h>
@@ -43,13 +43,13 @@ const void* furi_hal_flash_get_free_start_address() {
const void* furi_hal_flash_get_free_end_address() {
uint32_t sfr_reg_val = READ_REG(FLASH->SFR);
uint32_t sfsa = (READ_BIT(sfr_reg_val, FLASH_SFR_SFSA) >> FLASH_SFR_SFSA_Pos);
- return (const void *)((sfsa * FLASH_PAGE_SIZE) + FLASH_BASE);
+ return (const void*)((sfsa * FLASH_PAGE_SIZE) + FLASH_BASE);
}
size_t furi_hal_flash_get_free_page_start_address() {
size_t start = (size_t)furi_hal_flash_get_free_start_address();
size_t page_start = start - start % FURI_HAL_FLASH_PAGE_SIZE;
- if (page_start != start) {
+ if(page_start != start) {
page_start += FURI_HAL_FLASH_PAGE_SIZE;
}
return page_start;
@@ -58,7 +58,7 @@ size_t furi_hal_flash_get_free_page_start_address() {
size_t furi_hal_flash_get_free_page_count() {
size_t end = (size_t)furi_hal_flash_get_free_end_address();
size_t page_start = (size_t)furi_hal_flash_get_free_page_start_address();
- return (end-page_start) / FURI_HAL_FLASH_PAGE_SIZE;
+ return (end - page_start) / FURI_HAL_FLASH_PAGE_SIZE;
}
static void furi_hal_flash_unlock() {
@@ -86,8 +86,8 @@ static void furi_hal_flash_lock(void) {
}
static void furi_hal_flash_begin_with_core2(bool erase_flag) {
- // Take flash controller ownership
- while (HAL_HSEM_FastTake(CFG_HW_FLASH_SEMID) != HAL_OK) {
+ // Take flash controller ownership
+ while(HAL_HSEM_FastTake(CFG_HW_FLASH_SEMID) != HAL_OK) {
taskYIELD();
}
@@ -107,14 +107,14 @@ static void furi_hal_flash_begin_with_core2(bool erase_flag) {
taskENTER_CRITICAL();
// Actually we already have mutex for it, but specification is specification
- if (HAL_HSEM_IsSemTaken(CFG_HW_BLOCK_FLASH_REQ_BY_CPU1_SEMID)) {
+ if(HAL_HSEM_IsSemTaken(CFG_HW_BLOCK_FLASH_REQ_BY_CPU1_SEMID)) {
taskEXIT_CRITICAL();
continue;
}
// Take sempahopre and prevent core2 from anyting funky
if(!HAL_HSEM_IsSemTaken(CFG_HW_BLOCK_FLASH_REQ_BY_CPU2_SEMID)) {
- if (HAL_HSEM_FastTake(CFG_HW_BLOCK_FLASH_REQ_BY_CPU2_SEMID) != HAL_OK) {
+ if(HAL_HSEM_FastTake(CFG_HW_BLOCK_FLASH_REQ_BY_CPU2_SEMID) != HAL_OK) {
taskEXIT_CRITICAL();
continue;
}
@@ -131,7 +131,7 @@ static void furi_hal_flash_begin(bool erase_flag) {
// If Core2 is running use IPC locking
if(furi_hal_bt_is_alive()) {
furi_hal_flash_begin_with_core2(erase_flag);
- } else {
+ } else {
furi_hal_flash_unlock();
}
}
@@ -144,7 +144,7 @@ static void furi_hal_flash_end_with_core2(bool erase_flag) {
taskEXIT_CRITICAL();
// Doesn't make much sense, does it?
- while (__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY)) {
+ while(__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY)) {
taskYIELD();
}
@@ -162,7 +162,7 @@ static void furi_hal_flash_end(bool erase_flag) {
// If Core2 is running use IPC locking
if(furi_hal_bt_is_alive()) {
furi_hal_flash_end_with_core2(erase_flag);
- } else {
+ } else {
furi_hal_flash_lock();
}
@@ -172,7 +172,7 @@ static void furi_hal_flash_end(bool erase_flag) {
static void furi_hal_flush_cache(void) {
/* Flush instruction cache */
- if (READ_BIT(FLASH->ACR, FLASH_ACR_ICEN) == FLASH_ACR_ICEN) {
+ if(READ_BIT(FLASH->ACR, FLASH_ACR_ICEN) == FLASH_ACR_ICEN) {
/* Disable instruction cache */
__HAL_FLASH_INSTRUCTION_CACHE_DISABLE();
/* Reset instruction cache */
@@ -182,7 +182,7 @@ static void furi_hal_flush_cache(void) {
}
/* Flush data cache */
- if (READ_BIT(FLASH->ACR, FLASH_ACR_DCEN) == FLASH_ACR_DCEN) {
+ if(READ_BIT(FLASH->ACR, FLASH_ACR_DCEN) == FLASH_ACR_DCEN) {
/* Disable data cache */
__HAL_FLASH_DATA_CACHE_DISABLE();
/* Reset data cache */
@@ -198,13 +198,13 @@ HAL_StatusTypeDef furi_hal_flash_wait_last_operation(uint32_t timeout) {
// Wait for the FLASH operation to complete by polling on BUSY flag to be reset.
// Even if the FLASH operation fails, the BUSY flag will be reset and an error
- // flag will be set
+ // flag will be set
countdown = timeout;
- while (__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY)) {
+ while(__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY)) {
if(LL_SYSTICK_IsActiveCounterFlag()) {
countdown--;
}
- if (countdown == 0) {
+ if(countdown == 0) {
return HAL_TIMEOUT;
}
}
@@ -213,7 +213,7 @@ HAL_StatusTypeDef furi_hal_flash_wait_last_operation(uint32_t timeout) {
error = FLASH->SR;
/* Check FLASH End of Operation flag */
- if ((error & FLASH_FLAG_EOP) != 0U) {
+ if((error & FLASH_FLAG_EOP) != 0U) {
/* Clear FLASH End of Operation pending bit */
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP);
}
@@ -228,11 +228,11 @@ HAL_StatusTypeDef furi_hal_flash_wait_last_operation(uint32_t timeout) {
/* Wait for control register to be written */
countdown = timeout;
- while (__HAL_FLASH_GET_FLAG(FLASH_FLAG_CFGBSY)) {
+ while(__HAL_FLASH_GET_FLAG(FLASH_FLAG_CFGBSY)) {
if(LL_SYSTICK_IsActiveCounterFlag()) {
countdown--;
}
- if (countdown == 0) {
+ if(countdown == 0) {
return HAL_TIMEOUT;
}
}
@@ -250,7 +250,8 @@ bool furi_hal_flash_erase(uint8_t page) {
furi_check(furi_hal_flash_wait_last_operation(FLASH_TIMEOUT_VALUE) == HAL_OK);
/* Select page and start operation */
- MODIFY_REG(FLASH->CR, FLASH_CR_PNB, ((page << FLASH_CR_PNB_Pos) | FLASH_CR_PER | FLASH_CR_STRT));
+ MODIFY_REG(
+ FLASH->CR, FLASH_CR_PNB, ((page << FLASH_CR_PNB_Pos) | FLASH_CR_PER | FLASH_CR_STRT));
/* Wait for last operation to be completed */
furi_check(furi_hal_flash_wait_last_operation(FLASH_TIMEOUT_VALUE) == HAL_OK);
@@ -280,14 +281,14 @@ bool furi_hal_flash_write_dword(size_t address, uint64_t data) {
SET_BIT(FLASH->CR, FLASH_CR_PG);
/* Program first word */
- *(uint32_t *)address = (uint32_t)data;
+ *(uint32_t*)address = (uint32_t)data;
// Barrier to ensure programming is performed in 2 steps, in right order
- // (independently of compiler optimization behavior)
+ // (independently of compiler optimization behavior)
__ISB();
/* Program second word */
- *(uint32_t *)(address + 4U) = (uint32_t)(data >> 32U);
+ *(uint32_t*)(address + 4U) = (uint32_t)(data >> 32U);
/* Wait for last operation to be completed */
furi_check(furi_hal_flash_wait_last_operation(FLASH_TIMEOUT_VALUE) == HAL_OK);
diff --git a/firmware/targets/f7/furi-hal/furi-hal-flash.h b/firmware/targets/f7/furi_hal/furi_hal_flash.h
index 3d8031e6..37f714b8 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-flash.h
+++ b/firmware/targets/f7/furi_hal/furi_hal_flash.h
@@ -78,4 +78,3 @@ bool furi_hal_flash_erase(uint8_t page);
* @return true on success
*/
bool furi_hal_flash_write_dword(size_t address, uint64_t data);
-
diff --git a/firmware/targets/f7/furi-hal/furi-hal-gpio.c b/firmware/targets/f7/furi_hal/furi_hal_gpio.c
index 1de1657f..8c2aefe2 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-gpio.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_gpio.c
@@ -1,6 +1,6 @@
#include <furi.h>
-#include <furi-hal-gpio.h>
-#include <furi-hal-version.h>
+#include <furi_hal_gpio.h>
+#include <furi_hal_version.h>
#define GET_SYSCFG_EXTI_PORT(gpio) \
(((gpio) == (GPIOA)) ? LL_SYSCFG_EXTI_PORTA : \
diff --git a/firmware/targets/f7/furi-hal/furi-hal-gpio.h b/firmware/targets/f7/furi_hal/furi_hal_gpio.h
index a81afb39..a81afb39 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-gpio.h
+++ b/firmware/targets/f7/furi_hal/furi_hal_gpio.h
diff --git a/firmware/targets/f7/furi-hal/furi-hal-i2c.c b/firmware/targets/f7/furi_hal/furi_hal_i2c.c
index 826d98a5..a957e8b5 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-i2c.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_i2c.c
@@ -1,5 +1,5 @@
-#include <furi-hal-i2c.h>
-#include <furi-hal-version.h>
+#include <furi_hal_i2c.h>
+#include <furi_hal_version.h>
#include <stm32wbxx_ll_i2c.h>
#include <stm32wbxx_ll_gpio.h>
@@ -46,7 +46,6 @@ bool furi_hal_i2c_tx(
const uint8_t* data,
uint8_t size,
uint32_t timeout) {
-
furi_check(handle->bus->current_handle == handle);
furi_assert(timeout > 0);
@@ -98,7 +97,6 @@ bool furi_hal_i2c_rx(
uint8_t* data,
uint8_t size,
uint32_t timeout) {
-
furi_check(handle->bus->current_handle == handle);
furi_assert(timeout > 0);
@@ -152,7 +150,6 @@ bool furi_hal_i2c_trx(
uint8_t* rx_data,
uint8_t rx_size,
uint32_t timeout) {
-
if(furi_hal_i2c_tx(handle, address, tx_data, tx_size, timeout) &&
furi_hal_i2c_rx(handle, address, rx_data, rx_size, timeout)) {
return true;
diff --git a/firmware/targets/f6/furi-hal/furi-hal-i2c-config.c b/firmware/targets/f7/furi_hal/furi_hal_i2c_config.c
index 3211000c..29065f96 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-i2c-config.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_i2c_config.c
@@ -1,6 +1,6 @@
-#include "furi-hal-i2c-config.h"
-#include <furi-hal-resources.h>
-#include <furi-hal-version.h>
+#include "furi_hal_i2c_config.h"
+#include <furi_hal_resources.h>
+#include <furi_hal_version.h>
/** Timing register value is computed with the STM32CubeMX Tool,
* Standard Mode @100kHz with I2CCLK = 64 MHz,
@@ -17,7 +17,7 @@
osMutexId_t furi_hal_i2c_bus_power_mutex = NULL;
static void furi_hal_i2c_bus_power_event(FuriHalI2cBus* bus, FuriHalI2cBusEvent event) {
- if (event == FuriHalI2cBusEventInit) {
+ if(event == FuriHalI2cBusEventInit) {
furi_hal_i2c_bus_power_mutex = osMutexNew(NULL);
FURI_CRITICAL_ENTER();
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C1);
@@ -25,17 +25,17 @@ static void furi_hal_i2c_bus_power_event(FuriHalI2cBus* bus, FuriHalI2cBusEvent
LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_I2C1);
FURI_CRITICAL_EXIT();
bus->current_handle = NULL;
- } else if (event == FuriHalI2cBusEventDeinit) {
+ } else if(event == FuriHalI2cBusEventDeinit) {
osMutexDelete(furi_hal_i2c_bus_power_mutex);
- } else if (event == FuriHalI2cBusEventLock) {
+ } else if(event == FuriHalI2cBusEventLock) {
furi_check(osMutexAcquire(furi_hal_i2c_bus_power_mutex, osWaitForever) == osOK);
- } else if (event == FuriHalI2cBusEventUnlock) {
+ } else if(event == FuriHalI2cBusEventUnlock) {
furi_check(osMutexRelease(furi_hal_i2c_bus_power_mutex) == osOK);
- } else if (event == FuriHalI2cBusEventActivate) {
+ } else if(event == FuriHalI2cBusEventActivate) {
FURI_CRITICAL_ENTER();
LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_I2C1);
FURI_CRITICAL_EXIT();
- } else if (event == FuriHalI2cBusEventDeactivate) {
+ } else if(event == FuriHalI2cBusEventDeactivate) {
FURI_CRITICAL_ENTER();
LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_I2C1);
FURI_CRITICAL_EXIT();
@@ -43,20 +43,20 @@ static void furi_hal_i2c_bus_power_event(FuriHalI2cBus* bus, FuriHalI2cBusEvent
}
FuriHalI2cBus furi_hal_i2c_bus_power = {
- .i2c=I2C1,
- .callback=furi_hal_i2c_bus_power_event,
+ .i2c = I2C1,
+ .callback = furi_hal_i2c_bus_power_event,
};
osMutexId_t furi_hal_i2c_bus_external_mutex = NULL;
static void furi_hal_i2c_bus_external_event(FuriHalI2cBus* bus, FuriHalI2cBusEvent event) {
- if (event == FuriHalI2cBusEventActivate) {
+ if(event == FuriHalI2cBusEventActivate) {
FURI_CRITICAL_ENTER();
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C3);
LL_RCC_SetI2CClockSource(LL_RCC_I2C3_CLKSOURCE_PCLK1);
LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_I2C3);
FURI_CRITICAL_EXIT();
- } else if (event == FuriHalI2cBusEventDeactivate) {
+ } else if(event == FuriHalI2cBusEventDeactivate) {
FURI_CRITICAL_ENTER();
LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_I2C3);
FURI_CRITICAL_EXIT();
@@ -64,14 +64,26 @@ static void furi_hal_i2c_bus_external_event(FuriHalI2cBus* bus, FuriHalI2cBusEve
}
FuriHalI2cBus furi_hal_i2c_bus_external = {
- .i2c=I2C3,
- .callback=furi_hal_i2c_bus_external_event,
+ .i2c = I2C3,
+ .callback = furi_hal_i2c_bus_external_event,
};
-void furi_hal_i2c_bus_handle_power_event(FuriHalI2cBusHandle* handle, FuriHalI2cBusHandleEvent event) {
- if (event == FuriHalI2cBusHandleEventActivate) {
- hal_gpio_init_ex(&gpio_i2c_power_sda, GpioModeAltFunctionOpenDrain, GpioPullNo, GpioSpeedLow, GpioAltFn4I2C1);
- hal_gpio_init_ex(&gpio_i2c_power_scl, GpioModeAltFunctionOpenDrain, GpioPullNo, GpioSpeedLow, GpioAltFn4I2C1);
+void furi_hal_i2c_bus_handle_power_event(
+ FuriHalI2cBusHandle* handle,
+ FuriHalI2cBusHandleEvent event) {
+ if(event == FuriHalI2cBusHandleEventActivate) {
+ hal_gpio_init_ex(
+ &gpio_i2c_power_sda,
+ GpioModeAltFunctionOpenDrain,
+ GpioPullNo,
+ GpioSpeedLow,
+ GpioAltFn4I2C1);
+ hal_gpio_init_ex(
+ &gpio_i2c_power_scl,
+ GpioModeAltFunctionOpenDrain,
+ GpioPullNo,
+ GpioSpeedLow,
+ GpioAltFn4I2C1);
LL_I2C_InitTypeDef I2C_InitStruct = {0};
I2C_InitStruct.PeripheralMode = LL_I2C_MODE_I2C;
@@ -80,7 +92,7 @@ void furi_hal_i2c_bus_handle_power_event(FuriHalI2cBusHandle* handle, FuriHalI2c
I2C_InitStruct.OwnAddress1 = 0;
I2C_InitStruct.TypeAcknowledge = LL_I2C_ACK;
I2C_InitStruct.OwnAddrSize = LL_I2C_OWNADDRESS1_7BIT;
- if (furi_hal_version_get_hw_version() > 10) {
+ if(furi_hal_version_get_hw_version() > 10) {
I2C_InitStruct.Timing = FURI_HAL_I2C_CONFIG_POWER_I2C_TIMINGS_400;
} else {
I2C_InitStruct.Timing = FURI_HAL_I2C_CONFIG_POWER_I2C_TIMINGS_100;
@@ -92,12 +104,14 @@ void furi_hal_i2c_bus_handle_power_event(FuriHalI2cBusHandle* handle, FuriHalI2c
LL_I2C_DisableOwnAddress2(handle->bus->i2c);
LL_I2C_DisableGeneralCall(handle->bus->i2c);
LL_I2C_EnableClockStretching(handle->bus->i2c);
- } else if (event == FuriHalI2cBusHandleEventDeactivate) {
+ } else if(event == FuriHalI2cBusHandleEventDeactivate) {
LL_I2C_Disable(handle->bus->i2c);
hal_gpio_write(&gpio_i2c_power_sda, 1);
hal_gpio_write(&gpio_i2c_power_scl, 1);
- hal_gpio_init_ex(&gpio_i2c_power_sda, GpioModeAnalog, GpioPullNo, GpioSpeedLow, GpioAltFnUnused);
- hal_gpio_init_ex(&gpio_i2c_power_scl, GpioModeAnalog, GpioPullNo, GpioSpeedLow, GpioAltFnUnused);
+ hal_gpio_init_ex(
+ &gpio_i2c_power_sda, GpioModeAnalog, GpioPullNo, GpioSpeedLow, GpioAltFnUnused);
+ hal_gpio_init_ex(
+ &gpio_i2c_power_scl, GpioModeAnalog, GpioPullNo, GpioSpeedLow, GpioAltFnUnused);
}
}
@@ -106,10 +120,14 @@ FuriHalI2cBusHandle furi_hal_i2c_handle_power = {
.callback = furi_hal_i2c_bus_handle_power_event,
};
-void furi_hal_i2c_bus_handle_external_event(FuriHalI2cBusHandle* handle, FuriHalI2cBusHandleEvent event) {
- if (event == FuriHalI2cBusHandleEventActivate) {
- hal_gpio_init_ex(&gpio_ext_pc0, GpioModeAltFunctionOpenDrain, GpioPullNo, GpioSpeedLow, GpioAltFn4I2C3);
- hal_gpio_init_ex(&gpio_ext_pc1, GpioModeAltFunctionOpenDrain, GpioPullNo, GpioSpeedLow, GpioAltFn4I2C3);
+void furi_hal_i2c_bus_handle_external_event(
+ FuriHalI2cBusHandle* handle,
+ FuriHalI2cBusHandleEvent event) {
+ if(event == FuriHalI2cBusHandleEventActivate) {
+ hal_gpio_init_ex(
+ &gpio_ext_pc0, GpioModeAltFunctionOpenDrain, GpioPullNo, GpioSpeedLow, GpioAltFn4I2C3);
+ hal_gpio_init_ex(
+ &gpio_ext_pc1, GpioModeAltFunctionOpenDrain, GpioPullNo, GpioSpeedLow, GpioAltFn4I2C3);
LL_I2C_InitTypeDef I2C_InitStruct = {0};
I2C_InitStruct.PeripheralMode = LL_I2C_MODE_I2C;
@@ -126,7 +144,7 @@ void furi_hal_i2c_bus_handle_external_event(FuriHalI2cBusHandle* handle, FuriHal
LL_I2C_DisableOwnAddress2(handle->bus->i2c);
LL_I2C_DisableGeneralCall(handle->bus->i2c);
LL_I2C_EnableClockStretching(handle->bus->i2c);
- } else if (event == FuriHalI2cBusHandleEventDeactivate) {
+ } else if(event == FuriHalI2cBusHandleEventDeactivate) {
LL_I2C_Disable(handle->bus->i2c);
hal_gpio_write(&gpio_ext_pc0, 1);
hal_gpio_write(&gpio_ext_pc1, 1);
diff --git a/firmware/targets/f7/furi-hal/furi-hal-i2c-config.h b/firmware/targets/f7/furi_hal/furi_hal_i2c_config.h
index 2094dca3..03c0f1ca 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-i2c-config.h
+++ b/firmware/targets/f7/furi_hal/furi_hal_i2c_config.h
@@ -1,6 +1,6 @@
#pragma once
-#include <furi-hal-i2c-types.h>
+#include <furi_hal_i2c_types.h>
#ifdef __cplusplus
extern "C" {
diff --git a/firmware/targets/f6/furi-hal/furi-hal-i2c-types.h b/firmware/targets/f7/furi_hal/furi_hal_i2c_types.h
index 4f7aab91..0f2b735e 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-i2c-types.h
+++ b/firmware/targets/f7/furi_hal/furi_hal_i2c_types.h
@@ -36,7 +36,9 @@ typedef enum {
} FuriHalI2cBusHandleEvent;
/** FuriHal i2c handle event callback */
-typedef void (*FuriHalI2cBusHandleEventCallback)(FuriHalI2cBusHandle* handle, FuriHalI2cBusHandleEvent event);
+typedef void (*FuriHalI2cBusHandleEventCallback)(
+ FuriHalI2cBusHandle* handle,
+ FuriHalI2cBusHandleEvent event);
/** FuriHal i2c handle */
struct FuriHalI2cBusHandle {
diff --git a/firmware/targets/f7/furi-hal/furi-hal-ibutton.c b/firmware/targets/f7/furi_hal/furi_hal_ibutton.c
index 8a0af9f9..05cf25f1 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-ibutton.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_ibutton.c
@@ -1,5 +1,5 @@
-#include <furi-hal-ibutton.h>
-#include <furi-hal-resources.h>
+#include <furi_hal_ibutton.h>
+#include <furi_hal_resources.h>
void furi_hal_ibutton_start() {
furi_hal_ibutton_pin_high();
diff --git a/firmware/targets/f6/furi-hal/furi-hal-info.c b/firmware/targets/f7/furi_hal/furi_hal_info.c
index c1225ac9..a6d34477 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-info.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_info.c
@@ -1,5 +1,5 @@
-#include <furi-hal-info.h>
-#include <furi-hal.h>
+#include <furi_hal_info.h>
+#include <furi_hal.h>
#include <shci.h>
void furi_hal_info_get(FuriHalInfoValueCallback out, void* context) {
diff --git a/firmware/targets/f6/furi-hal/furi-hal-interrupt.c b/firmware/targets/f7/furi_hal/furi_hal_interrupt.c
index 8e24c488..417d72ef 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-interrupt.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_interrupt.c
@@ -1,4 +1,4 @@
-#include "furi-hal-interrupt.h"
+#include "furi_hal_interrupt.h"
#include <furi.h>
#include <main.h>
@@ -12,13 +12,15 @@ volatile FuriHalInterruptISR furi_hal_tim_tim1_isr = NULL;
#define FURI_HAL_INTERRUPT_DMA_COUNT 2
#define FURI_HAL_INTERRUPT_DMA_CHANNELS_COUNT 8
-volatile FuriHalInterruptISR furi_hal_dma_channel_isr[FURI_HAL_INTERRUPT_DMA_COUNT][FURI_HAL_INTERRUPT_DMA_CHANNELS_COUNT] = {0};
+volatile FuriHalInterruptISR furi_hal_dma_channel_isr[FURI_HAL_INTERRUPT_DMA_COUNT]
+ [FURI_HAL_INTERRUPT_DMA_CHANNELS_COUNT] = {0};
void furi_hal_interrupt_init() {
NVIC_SetPriority(RCC_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0, 0));
NVIC_EnableIRQ(RCC_IRQn);
- NVIC_SetPriority(TAMP_STAMP_LSECSS_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0, 0));
+ NVIC_SetPriority(
+ TAMP_STAMP_LSECSS_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0, 0));
NVIC_EnableIRQ(TAMP_STAMP_LSECSS_IRQn);
NVIC_SetPriority(DMA1_Channel1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 5, 0));
@@ -28,15 +30,15 @@ void furi_hal_interrupt_init() {
}
void furi_hal_interrupt_set_timer_isr(TIM_TypeDef* timer, FuriHalInterruptISR isr) {
- if (timer == TIM2) {
- if (isr) {
+ if(timer == TIM2) {
+ if(isr) {
furi_assert(furi_hal_tim_tim2_isr == NULL);
} else {
furi_assert(furi_hal_tim_tim2_isr != NULL);
}
furi_hal_tim_tim2_isr = isr;
- } else if (timer == TIM1) {
- if (isr) {
+ } else if(timer == TIM1) {
+ if(isr) {
furi_assert(furi_hal_tim_tim1_isr == NULL);
} else {
furi_assert(furi_hal_tim_tim1_isr != NULL);
@@ -47,13 +49,16 @@ void furi_hal_interrupt_set_timer_isr(TIM_TypeDef* timer, FuriHalInterruptISR is
}
}
-void furi_hal_interrupt_set_dma_channel_isr(DMA_TypeDef* dma, uint32_t channel, FuriHalInterruptISR isr) {
+void furi_hal_interrupt_set_dma_channel_isr(
+ DMA_TypeDef* dma,
+ uint32_t channel,
+ FuriHalInterruptISR isr) {
--channel; // Pascal
furi_check(dma);
furi_check(channel < FURI_HAL_INTERRUPT_DMA_CHANNELS_COUNT);
- if (dma == DMA1) {
+ if(dma == DMA1) {
furi_hal_dma_channel_isr[0][channel] = isr;
- } else if (dma == DMA2) {
+ } else if(dma == DMA2) {
furi_hal_dma_channel_isr[1][channel] = isr;
} else {
furi_crash(NULL);
@@ -76,7 +81,7 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim) {
/* Timer 2 */
void TIM2_IRQHandler(void) {
- if (furi_hal_tim_tim2_isr) {
+ if(furi_hal_tim_tim2_isr) {
furi_hal_tim_tim2_isr();
} else {
HAL_TIM_IRQHandler(&htim2);
@@ -85,7 +90,7 @@ void TIM2_IRQHandler(void) {
/* Timer 1 Update */
void TIM1_UP_TIM16_IRQHandler(void) {
- if (furi_hal_tim_tim1_isr) {
+ if(furi_hal_tim_tim1_isr) {
furi_hal_tim_tim1_isr();
} else {
HAL_TIM_IRQHandler(&htim1);
@@ -94,74 +99,74 @@ void TIM1_UP_TIM16_IRQHandler(void) {
/* DMA 1 */
void DMA1_Channel1_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[0][0]) furi_hal_dma_channel_isr[0][0]();
+ if(furi_hal_dma_channel_isr[0][0]) furi_hal_dma_channel_isr[0][0]();
}
void DMA1_Channel2_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[0][1]) furi_hal_dma_channel_isr[0][1]();
+ if(furi_hal_dma_channel_isr[0][1]) furi_hal_dma_channel_isr[0][1]();
}
void DMA1_Channel3_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[0][2]) furi_hal_dma_channel_isr[0][2]();
+ if(furi_hal_dma_channel_isr[0][2]) furi_hal_dma_channel_isr[0][2]();
}
void DMA1_Channel4_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[0][3]) furi_hal_dma_channel_isr[0][3]();
+ if(furi_hal_dma_channel_isr[0][3]) furi_hal_dma_channel_isr[0][3]();
}
void DMA1_Channel5_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[0][4]) furi_hal_dma_channel_isr[0][4]();
+ if(furi_hal_dma_channel_isr[0][4]) furi_hal_dma_channel_isr[0][4]();
}
void DMA1_Channel6_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[0][5]) furi_hal_dma_channel_isr[0][5]();
+ if(furi_hal_dma_channel_isr[0][5]) furi_hal_dma_channel_isr[0][5]();
}
void DMA1_Channel7_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[0][6]) furi_hal_dma_channel_isr[0][6]();
+ if(furi_hal_dma_channel_isr[0][6]) furi_hal_dma_channel_isr[0][6]();
}
void DMA1_Channel8_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[0][7]) furi_hal_dma_channel_isr[0][7]();
+ if(furi_hal_dma_channel_isr[0][7]) furi_hal_dma_channel_isr[0][7]();
}
/* DMA 2 */
void DMA2_Channel1_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[1][0]) furi_hal_dma_channel_isr[1][0]();
+ if(furi_hal_dma_channel_isr[1][0]) furi_hal_dma_channel_isr[1][0]();
}
void DMA2_Channel2_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[1][1]) furi_hal_dma_channel_isr[1][1]();
+ if(furi_hal_dma_channel_isr[1][1]) furi_hal_dma_channel_isr[1][1]();
}
void DMA2_Channel3_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[1][2]) furi_hal_dma_channel_isr[1][2]();
+ if(furi_hal_dma_channel_isr[1][2]) furi_hal_dma_channel_isr[1][2]();
}
void DMA2_Channel4_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[1][3]) furi_hal_dma_channel_isr[1][3]();
+ if(furi_hal_dma_channel_isr[1][3]) furi_hal_dma_channel_isr[1][3]();
}
void DMA2_Channel5_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[1][4]) furi_hal_dma_channel_isr[1][4]();
+ if(furi_hal_dma_channel_isr[1][4]) furi_hal_dma_channel_isr[1][4]();
}
void DMA2_Channel6_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[1][5]) furi_hal_dma_channel_isr[1][5]();
+ if(furi_hal_dma_channel_isr[1][5]) furi_hal_dma_channel_isr[1][5]();
}
void DMA2_Channel7_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[1][6]) furi_hal_dma_channel_isr[1][6]();
+ if(furi_hal_dma_channel_isr[1][6]) furi_hal_dma_channel_isr[1][6]();
}
void DMA2_Channel8_IRQHandler(void) {
- if (furi_hal_dma_channel_isr[1][7]) furi_hal_dma_channel_isr[1][7]();
+ if(furi_hal_dma_channel_isr[1][7]) furi_hal_dma_channel_isr[1][7]();
}
void TAMP_STAMP_LSECSS_IRQHandler(void) {
- if (LL_RCC_IsActiveFlag_LSECSS()) {
+ if(LL_RCC_IsActiveFlag_LSECSS()) {
LL_RCC_ClearFlag_LSECSS();
- if (!LL_RCC_LSE_IsReady()) {
+ if(!LL_RCC_LSE_IsReady()) {
FURI_LOG_E(TAG, "LSE CSS fired: resetting system");
NVIC_SystemReset();
} else {
@@ -174,7 +179,7 @@ void RCC_IRQHandler(void) {
}
void NMI_Handler(void) {
- if (LL_RCC_IsActiveFlag_HSECSS()) {
+ if(LL_RCC_IsActiveFlag_HSECSS()) {
LL_RCC_ClearFlag_HSECSS();
FURI_LOG_E(TAG, "HSE CSS fired: resetting system");
NVIC_SystemReset();
diff --git a/firmware/targets/f7/furi-hal/furi-hal-interrupt.h b/firmware/targets/f7/furi_hal/furi_hal_interrupt.h
index 693924e6..b4cb6030 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-interrupt.h
+++ b/firmware/targets/f7/furi_hal/furi_hal_interrupt.h
@@ -18,7 +18,10 @@ void furi_hal_interrupt_init();
* @param channel - DMA channel
* @param isr - your interrupt service routine or use NULL to clear
*/
-void furi_hal_interrupt_set_dma_channel_isr(DMA_TypeDef* dma, uint32_t channel, FuriHalInterruptISR isr);
+void furi_hal_interrupt_set_dma_channel_isr(
+ DMA_TypeDef* dma,
+ uint32_t channel,
+ FuriHalInterruptISR isr);
/** Set Timer ISR
* By default ISR is serviced by ST HAL. Use this function to override it.
@@ -26,8 +29,7 @@ void furi_hal_interrupt_set_dma_channel_isr(DMA_TypeDef* dma, uint32_t channel,
* @param timer - timer instance
* @param isr - your interrupt service routine or use NULL to clear
*/
-void furi_hal_interrupt_set_timer_isr(TIM_TypeDef *timer, FuriHalInterruptISR isr);
-
+void furi_hal_interrupt_set_timer_isr(TIM_TypeDef* timer, FuriHalInterruptISR isr);
#ifdef __cplusplus
}
diff --git a/firmware/targets/f6/furi-hal/furi-hal-irda.c b/firmware/targets/f7/furi_hal/furi_hal_irda.c
index 4d3d389b..070e3c16 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-irda.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_irda.c
@@ -1,11 +1,11 @@
-#include "furi-hal-irda.h"
-#include "furi-hal-delay.h"
+#include "furi_hal_irda.h"
+#include "furi_hal_delay.h"
#include "furi/check.h"
#include "stm32wbxx_ll_dma.h"
#include "sys/_stdint.h"
#include <cmsis_os2.h>
-#include <furi-hal-interrupt.h>
-#include <furi-hal-resources.h>
+#include <furi_hal_interrupt.h>
+#include <furi_hal_resources.h>
#include <stdint.h>
#include <stm32wbxx_ll_tim.h>
@@ -15,7 +15,7 @@
#include <furi.h>
#include <math.h>
#include <main.h>
-#include <furi-hal-pwm.h>
+#include <furi_hal_pwm.h>
#define IRDA_TX_DEBUG 0
@@ -24,20 +24,21 @@
const GpioPin gpio_irda_tx_debug = {.port = GPIOA, .pin = GPIO_PIN_7};
#endif
-#define IRDA_TIM_TX_DMA_BUFFER_SIZE 200
-#define IRDA_POLARITY_SHIFT 1
+#define IRDA_TIM_TX_DMA_BUFFER_SIZE 200
+#define IRDA_POLARITY_SHIFT 1
-#define IRDA_TX_CCMR_HIGH (TIM_CCMR2_OC3PE | LL_TIM_OCMODE_PWM2) /* Mark time - enable PWM2 mode */
-#define IRDA_TX_CCMR_LOW (TIM_CCMR2_OC3PE | LL_TIM_OCMODE_FORCED_INACTIVE) /* Space time - force low */
+#define IRDA_TX_CCMR_HIGH (TIM_CCMR2_OC3PE | LL_TIM_OCMODE_PWM2) /* Mark time - enable PWM2 mode */
+#define IRDA_TX_CCMR_LOW \
+ (TIM_CCMR2_OC3PE | LL_TIM_OCMODE_FORCED_INACTIVE) /* Space time - force low */
-typedef struct{
+typedef struct {
FuriHalIrdaRxCaptureCallback capture_callback;
- void *capture_context;
+ void* capture_context;
FuriHalIrdaRxTimeoutCallback timeout_callback;
- void *timeout_context;
+ void* timeout_context;
} IrdaTimRx;
-typedef struct{
+typedef struct {
uint8_t* polarity;
uint16_t* data;
size_t size;
@@ -53,18 +54,19 @@ typedef struct {
void* signal_sent_context;
IrdaTxBuf buffer[2];
osSemaphoreId_t stop_semaphore;
- uint32_t tx_timing_rest_duration; /** if timing is too long (> 0xFFFF), send it in few iterations */
+ uint32_t
+ tx_timing_rest_duration; /** if timing is too long (> 0xFFFF), send it in few iterations */
bool tx_timing_rest_level;
FuriHalIrdaTxGetDataState tx_timing_rest_status;
} IrdaTimTx;
typedef enum {
- IrdaStateIdle, /** Furi Hal Irda is ready to start RX or TX */
- IrdaStateAsyncRx, /** Async RX started */
- IrdaStateAsyncTx, /** Async TX started, DMA and timer is on */
- IrdaStateAsyncTxStopReq, /** Async TX started, async stop request received */
+ IrdaStateIdle, /** Furi Hal Irda is ready to start RX or TX */
+ IrdaStateAsyncRx, /** Async RX started */
+ IrdaStateAsyncTx, /** Async TX started, DMA and timer is on */
+ IrdaStateAsyncTxStopReq, /** Async TX started, async stop request received */
IrdaStateAsyncTxStopInProgress, /** Async TX started, stop request is processed and we wait for last data to be sent */
- IrdaStateAsyncTxStopped, /** Async TX complete, cleanup needed */
+ IrdaStateAsyncTxStopped, /** Async TX complete, cleanup needed */
IrdaStateMAX,
} IrdaState;
@@ -95,8 +97,8 @@ static void furi_hal_irda_tim_rx_isr() {
* This can cause false timeout: when time is over, but we started
* receiving new signal few microseconds ago, because CNT register
* is reseted once per period, not per sample. */
- if (LL_GPIO_IsInputPinSet(gpio_irda_rx.port, gpio_irda_rx.pin) != 0) {
- if (irda_tim_rx.timeout_callback)
+ if(LL_GPIO_IsInputPinSet(gpio_irda_rx.port, gpio_irda_rx.pin) != 0) {
+ if(irda_tim_rx.timeout_callback)
irda_tim_rx.timeout_callback(irda_tim_rx.timeout_context);
}
}
@@ -109,7 +111,7 @@ static void furi_hal_irda_tim_rx_isr() {
if(READ_BIT(TIM2->CCMR1, TIM_CCMR1_CC1S)) {
/* Low pin level is a Mark state of IRDA signal. Invert level for further processing. */
uint32_t duration = LL_TIM_IC_GetCaptureCH1(TIM2) - previous_captured_ch2;
- if (irda_tim_rx.capture_callback)
+ if(irda_tim_rx.capture_callback)
irda_tim_rx.capture_callback(irda_tim_rx.capture_context, 1, duration);
} else {
furi_assert(0);
@@ -125,7 +127,7 @@ static void furi_hal_irda_tim_rx_isr() {
/* High pin level is a Space state of IRDA signal. Invert level for further processing. */
uint32_t duration = LL_TIM_IC_GetCaptureCH2(TIM2);
previous_captured_ch2 = duration;
- if (irda_tim_rx.capture_callback)
+ if(irda_tim_rx.capture_callback)
irda_tim_rx.capture_callback(irda_tim_rx.capture_context, 0, duration);
} else {
furi_assert(0);
@@ -141,7 +143,8 @@ void furi_hal_irda_async_rx_start(void) {
LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA);
FURI_CRITICAL_EXIT();
- hal_gpio_init_ex(&gpio_irda_rx, GpioModeAltFunctionPushPull, GpioPullNo, GpioSpeedLow, GpioAltFn1TIM2);
+ hal_gpio_init_ex(
+ &gpio_irda_rx, GpioModeAltFunctionPushPull, GpioPullNo, GpioSpeedLow, GpioAltFn1TIM2);
LL_TIM_InitTypeDef TIM_InitStruct = {0};
TIM_InitStruct.Prescaler = 64 - 1;
@@ -204,12 +207,16 @@ bool furi_hal_irda_is_busy(void) {
return furi_hal_irda_state != IrdaStateIdle;
}
-void furi_hal_irda_async_rx_set_capture_isr_callback(FuriHalIrdaRxCaptureCallback callback, void *ctx) {
+void furi_hal_irda_async_rx_set_capture_isr_callback(
+ FuriHalIrdaRxCaptureCallback callback,
+ void* ctx) {
irda_tim_rx.capture_callback = callback;
irda_tim_rx.capture_context = ctx;
}
-void furi_hal_irda_async_rx_set_timeout_isr_callback(FuriHalIrdaRxTimeoutCallback callback, void *ctx) {
+void furi_hal_irda_async_rx_set_timeout_isr_callback(
+ FuriHalIrdaRxTimeoutCallback callback,
+ void* ctx) {
irda_tim_rx.timeout_callback = callback;
irda_tim_rx.timeout_context = ctx;
}
@@ -233,9 +240,9 @@ static void furi_hal_irda_tx_dma_terminate(void) {
static uint8_t furi_hal_irda_get_current_dma_tx_buffer(void) {
uint8_t buf_num = 0;
uint32_t buffer_adr = LL_DMA_GetMemoryAddress(DMA1, LL_DMA_CHANNEL_2);
- if (buffer_adr == (uint32_t) irda_tim_tx.buffer[0].data) {
+ if(buffer_adr == (uint32_t)irda_tim_tx.buffer[0].data) {
buf_num = 0;
- } else if (buffer_adr == (uint32_t) irda_tim_tx.buffer[1].data) {
+ } else if(buffer_adr == (uint32_t)irda_tim_tx.buffer[1].data) {
buf_num = 1;
} else {
furi_assert(0);
@@ -244,16 +251,17 @@ static uint8_t furi_hal_irda_get_current_dma_tx_buffer(void) {
}
static void furi_hal_irda_tx_dma_polarity_isr() {
- if (LL_DMA_IsActiveFlag_TE1(DMA1)) {
+ if(LL_DMA_IsActiveFlag_TE1(DMA1)) {
LL_DMA_ClearFlag_TE1(DMA1);
furi_crash(NULL);
}
- if (LL_DMA_IsActiveFlag_TC1(DMA1) && LL_DMA_IsEnabledIT_TC(DMA1, LL_DMA_CHANNEL_1)) {
+ if(LL_DMA_IsActiveFlag_TC1(DMA1) && LL_DMA_IsEnabledIT_TC(DMA1, LL_DMA_CHANNEL_1)) {
LL_DMA_ClearFlag_TC1(DMA1);
- furi_check((furi_hal_irda_state == IrdaStateAsyncTx)
- || (furi_hal_irda_state == IrdaStateAsyncTxStopReq)
- || (furi_hal_irda_state == IrdaStateAsyncTxStopInProgress));
+ furi_check(
+ (furi_hal_irda_state == IrdaStateAsyncTx) ||
+ (furi_hal_irda_state == IrdaStateAsyncTxStopReq) ||
+ (furi_hal_irda_state == IrdaStateAsyncTxStopInProgress));
/* actually TC2 is processed and buffer is next buffer */
uint8_t next_buf_num = furi_hal_irda_get_current_dma_tx_buffer();
furi_hal_irda_tx_dma_set_polarity(next_buf_num, 0);
@@ -261,39 +269,43 @@ static void furi_hal_irda_tx_dma_polarity_isr() {
}
static void furi_hal_irda_tx_dma_isr() {
- if (LL_DMA_IsActiveFlag_TE2(DMA1)) {
+ if(LL_DMA_IsActiveFlag_TE2(DMA1)) {
LL_DMA_ClearFlag_TE2(DMA1);
furi_crash(NULL);
}
- if (LL_DMA_IsActiveFlag_HT2(DMA1) && LL_DMA_IsEnabledIT_HT(DMA1, LL_DMA_CHANNEL_2)) {
+ if(LL_DMA_IsActiveFlag_HT2(DMA1) && LL_DMA_IsEnabledIT_HT(DMA1, LL_DMA_CHANNEL_2)) {
LL_DMA_ClearFlag_HT2(DMA1);
uint8_t buf_num = furi_hal_irda_get_current_dma_tx_buffer();
uint8_t next_buf_num = !buf_num;
- if (irda_tim_tx.buffer[buf_num].last_packet_end) {
+ if(irda_tim_tx.buffer[buf_num].last_packet_end) {
LL_DMA_DisableIT_HT(DMA1, LL_DMA_CHANNEL_2);
- } else if (!irda_tim_tx.buffer[buf_num].packet_end || (furi_hal_irda_state == IrdaStateAsyncTx)) {
+ } else if(
+ !irda_tim_tx.buffer[buf_num].packet_end || (furi_hal_irda_state == IrdaStateAsyncTx)) {
furi_hal_irda_tx_fill_buffer(next_buf_num, 0);
- if (irda_tim_tx.buffer[next_buf_num].last_packet_end) {
+ if(irda_tim_tx.buffer[next_buf_num].last_packet_end) {
LL_DMA_DisableIT_HT(DMA1, LL_DMA_CHANNEL_2);
}
- } else if (furi_hal_irda_state == IrdaStateAsyncTxStopReq) {
+ } else if(furi_hal_irda_state == IrdaStateAsyncTxStopReq) {
/* fallthrough */
} else {
furi_crash(NULL);
}
}
- if (LL_DMA_IsActiveFlag_TC2(DMA1) && LL_DMA_IsEnabledIT_TC(DMA1, LL_DMA_CHANNEL_2)) {
+ if(LL_DMA_IsActiveFlag_TC2(DMA1) && LL_DMA_IsEnabledIT_TC(DMA1, LL_DMA_CHANNEL_2)) {
LL_DMA_ClearFlag_TC2(DMA1);
- furi_check((furi_hal_irda_state == IrdaStateAsyncTxStopInProgress)
- || (furi_hal_irda_state == IrdaStateAsyncTxStopReq)
- || (furi_hal_irda_state == IrdaStateAsyncTx));
+ furi_check(
+ (furi_hal_irda_state == IrdaStateAsyncTxStopInProgress) ||
+ (furi_hal_irda_state == IrdaStateAsyncTxStopReq) ||
+ (furi_hal_irda_state == IrdaStateAsyncTx));
uint8_t buf_num = furi_hal_irda_get_current_dma_tx_buffer();
uint8_t next_buf_num = !buf_num;
- if (furi_hal_irda_state == IrdaStateAsyncTxStopInProgress) {
+ if(furi_hal_irda_state == IrdaStateAsyncTxStopInProgress) {
furi_hal_irda_tx_dma_terminate();
- } else if (irda_tim_tx.buffer[buf_num].last_packet_end
- || (irda_tim_tx.buffer[buf_num].packet_end && (furi_hal_irda_state == IrdaStateAsyncTxStopReq))) {
+ } else if(
+ irda_tim_tx.buffer[buf_num].last_packet_end ||
+ (irda_tim_tx.buffer[buf_num].packet_end &&
+ (furi_hal_irda_state == IrdaStateAsyncTxStopReq))) {
furi_hal_irda_state = IrdaStateAsyncTxStopInProgress;
furi_hal_irda_tx_fill_buffer_last(next_buf_num);
furi_hal_irda_tx_dma_set_buffer(next_buf_num);
@@ -301,16 +313,16 @@ static void furi_hal_irda_tx_dma_isr() {
/* if it's not end of the packet - continue receiving */
furi_hal_irda_tx_dma_set_buffer(next_buf_num);
}
- if (irda_tim_tx.signal_sent_callback && irda_tim_tx.buffer[buf_num].packet_end && (furi_hal_irda_state != IrdaStateAsyncTxStopped)) {
+ if(irda_tim_tx.signal_sent_callback && irda_tim_tx.buffer[buf_num].packet_end &&
+ (furi_hal_irda_state != IrdaStateAsyncTxStopped)) {
irda_tim_tx.signal_sent_callback(irda_tim_tx.signal_sent_context);
}
}
}
-static void furi_hal_irda_configure_tim_pwm_tx(uint32_t freq, float duty_cycle)
-{
+static void furi_hal_irda_configure_tim_pwm_tx(uint32_t freq, float duty_cycle) {
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_TIM1);
-/* LL_DBGMCU_APB2_GRP1_FreezePeriph(LL_DBGMCU_APB2_GRP1_TIM1_STOP); */
+ /* LL_DBGMCU_APB2_GRP1_FreezePeriph(LL_DBGMCU_APB2_GRP1_TIM1_STOP); */
LL_TIM_DisableCounter(TIM1);
LL_TIM_SetRepetitionCounter(TIM1, 0);
@@ -318,9 +330,10 @@ static void furi_hal_irda_configure_tim_pwm_tx(uint32_t freq, float duty_cycle)
LL_TIM_SetPrescaler(TIM1, 0);
LL_TIM_SetCounterMode(TIM1, LL_TIM_COUNTERMODE_UP);
LL_TIM_EnableARRPreload(TIM1);
- LL_TIM_SetAutoReload(TIM1, __LL_TIM_CALC_ARR(SystemCoreClock, LL_TIM_GetPrescaler(TIM1), freq));
+ LL_TIM_SetAutoReload(
+ TIM1, __LL_TIM_CALC_ARR(SystemCoreClock, LL_TIM_GetPrescaler(TIM1), freq));
#if IRDA_TX_DEBUG == 1
- LL_TIM_OC_SetCompareCH1(TIM1, ( (LL_TIM_GetAutoReload(TIM1) + 1 ) * (1 - duty_cycle)));
+ LL_TIM_OC_SetCompareCH1(TIM1, ((LL_TIM_GetAutoReload(TIM1) + 1) * (1 - duty_cycle)));
LL_TIM_OC_EnablePreload(TIM1, LL_TIM_CHANNEL_CH1);
/* LL_TIM_OCMODE_PWM2 set by DMA */
LL_TIM_OC_SetMode(TIM1, LL_TIM_CHANNEL_CH1, LL_TIM_OCMODE_FORCED_INACTIVE);
@@ -329,7 +342,7 @@ static void furi_hal_irda_configure_tim_pwm_tx(uint32_t freq, float duty_cycle)
LL_TIM_CC_EnableChannel(TIM1, LL_TIM_CHANNEL_CH1N);
LL_TIM_DisableIT_CC1(TIM1);
#else
- LL_TIM_OC_SetCompareCH3(TIM1, ( (LL_TIM_GetAutoReload(TIM1) + 1 ) * (1 - duty_cycle)));
+ LL_TIM_OC_SetCompareCH3(TIM1, ((LL_TIM_GetAutoReload(TIM1) + 1) * (1 - duty_cycle)));
LL_TIM_OC_EnablePreload(TIM1, LL_TIM_CHANNEL_CH3);
/* LL_TIM_OCMODE_PWM2 set by DMA */
LL_TIM_OC_SetMode(TIM1, LL_TIM_CHANNEL_CH3, LL_TIM_OCMODE_FORCED_INACTIVE);
@@ -352,11 +365,11 @@ static void furi_hal_irda_configure_tim_cmgr2_dma_tx(void) {
LL_DMA_InitTypeDef dma_config = {0};
#if IRDA_TX_DEBUG == 1
- dma_config.PeriphOrM2MSrcAddress = (uint32_t)&(TIM1->CCMR1);
+ dma_config.PeriphOrM2MSrcAddress = (uint32_t) & (TIM1->CCMR1);
#else
- dma_config.PeriphOrM2MSrcAddress = (uint32_t)&(TIM1->CCMR2);
+ dma_config.PeriphOrM2MSrcAddress = (uint32_t) & (TIM1->CCMR2);
#endif
- dma_config.MemoryOrM2MDstAddress = (uint32_t) NULL;
+ dma_config.MemoryOrM2MDstAddress = (uint32_t)NULL;
dma_config.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH;
dma_config.Mode = LL_DMA_MODE_NORMAL;
dma_config.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT;
@@ -368,7 +381,8 @@ static void furi_hal_irda_configure_tim_cmgr2_dma_tx(void) {
dma_config.PeriphRequest = LL_DMAMUX_REQ_TIM1_UP;
dma_config.Priority = LL_DMA_PRIORITY_VERYHIGH;
LL_DMA_Init(DMA1, LL_DMA_CHANNEL_1, &dma_config);
- furi_hal_interrupt_set_dma_channel_isr(DMA1, LL_DMA_CHANNEL_1, furi_hal_irda_tx_dma_polarity_isr);
+ furi_hal_interrupt_set_dma_channel_isr(
+ DMA1, LL_DMA_CHANNEL_1, furi_hal_irda_tx_dma_polarity_isr);
LL_DMA_ClearFlag_TE1(DMA1);
LL_DMA_ClearFlag_TC1(DMA1);
LL_DMA_EnableIT_TE(DMA1, LL_DMA_CHANNEL_1);
@@ -382,8 +396,8 @@ static void furi_hal_irda_configure_tim_rcr_dma_tx(void) {
LL_C2_AHB1_GRP1_EnableClock(LL_C2_AHB1_GRP1_PERIPH_DMA1);
LL_DMA_InitTypeDef dma_config = {0};
- dma_config.PeriphOrM2MSrcAddress = (uint32_t)&(TIM1->RCR);
- dma_config.MemoryOrM2MDstAddress = (uint32_t) NULL;
+ dma_config.PeriphOrM2MSrcAddress = (uint32_t) & (TIM1->RCR);
+ dma_config.MemoryOrM2MDstAddress = (uint32_t)NULL;
dma_config.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH;
dma_config.Mode = LL_DMA_MODE_NORMAL;
dma_config.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT;
@@ -417,9 +431,9 @@ static void furi_hal_irda_tx_fill_buffer_last(uint8_t buf_num) {
furi_assert(buffer->polarity != NULL);
(void)buffer->polarity;
- irda_tim_tx.buffer[buf_num].data[0] = 0; // 1 pulse
+ irda_tim_tx.buffer[buf_num].data[0] = 0; // 1 pulse
irda_tim_tx.buffer[buf_num].polarity[0] = IRDA_TX_CCMR_LOW;
- irda_tim_tx.buffer[buf_num].data[1] = 0; // 1 pulse
+ irda_tim_tx.buffer[buf_num].data[1] = 0; // 1 pulse
irda_tim_tx.buffer[buf_num].polarity[1] = IRDA_TX_CCMR_LOW;
irda_tim_tx.buffer[buf_num].size = 2;
irda_tim_tx.buffer[buf_num].last_packet_end = true;
@@ -438,15 +452,16 @@ static void furi_hal_irda_tx_fill_buffer(uint8_t buf_num, uint8_t polarity_shift
FuriHalIrdaTxGetDataState status = FuriHalIrdaTxGetDataStateOk;
uint32_t duration = 0;
bool level = 0;
- size_t *size = &buffer->size;
+ size_t* size = &buffer->size;
size_t polarity_counter = 0;
- while (polarity_shift--) {
+ while(polarity_shift--) {
buffer->polarity[polarity_counter++] = IRDA_TX_CCMR_LOW;
}
- for (*size = 0; (*size < IRDA_TIM_TX_DMA_BUFFER_SIZE) && (status == FuriHalIrdaTxGetDataStateOk);) {
- if (irda_tim_tx.tx_timing_rest_duration > 0) {
- if (irda_tim_tx.tx_timing_rest_duration > 0xFFFF) {
+ for(*size = 0;
+ (*size < IRDA_TIM_TX_DMA_BUFFER_SIZE) && (status == FuriHalIrdaTxGetDataStateOk);) {
+ if(irda_tim_tx.tx_timing_rest_duration > 0) {
+ if(irda_tim_tx.tx_timing_rest_duration > 0xFFFF) {
buffer->data[*size] = 0xFFFF;
status = FuriHalIrdaTxGetDataStateOk;
} else {
@@ -454,7 +469,8 @@ static void furi_hal_irda_tx_fill_buffer(uint8_t buf_num, uint8_t polarity_shift
status = irda_tim_tx.tx_timing_rest_status;
}
irda_tim_tx.tx_timing_rest_duration -= buffer->data[*size];
- buffer->polarity[polarity_counter] = irda_tim_tx.tx_timing_rest_level ? IRDA_TX_CCMR_HIGH : IRDA_TX_CCMR_LOW;
+ buffer->polarity[polarity_counter] =
+ irda_tim_tx.tx_timing_rest_level ? IRDA_TX_CCMR_HIGH : IRDA_TX_CCMR_LOW;
++(*size);
++polarity_counter;
continue;
@@ -464,14 +480,14 @@ static void furi_hal_irda_tx_fill_buffer(uint8_t buf_num, uint8_t polarity_shift
uint32_t num_of_impulses = roundf(duration / irda_tim_tx.cycle_duration);
- if (num_of_impulses == 0) {
- if ((*size == 0) && (status == FuriHalIrdaTxGetDataStateDone)) {
+ if(num_of_impulses == 0) {
+ if((*size == 0) && (status == FuriHalIrdaTxGetDataStateDone)) {
/* if this is one sample in current buffer, but we
* have more to send - continue
*/
status = FuriHalIrdaTxGetDataStateOk;
}
- } else if ((num_of_impulses - 1) > 0xFFFF) {
+ } else if((num_of_impulses - 1) > 0xFFFF) {
irda_tim_tx.tx_timing_rest_duration = num_of_impulses - 1;
irda_tim_tx.tx_timing_rest_status = status;
irda_tim_tx.tx_timing_rest_level = level;
@@ -487,8 +503,8 @@ static void furi_hal_irda_tx_fill_buffer(uint8_t buf_num, uint8_t polarity_shift
buffer->last_packet_end = (status == FuriHalIrdaTxGetDataStateLastDone);
buffer->packet_end = buffer->last_packet_end || (status == FuriHalIrdaTxGetDataStateDone);
- if (*size == 0) {
- buffer->data[0] = 0; // 1 pulse
+ if(*size == 0) {
+ buffer->data[0] = 0; // 1 pulse
buffer->polarity[0] = IRDA_TX_CCMR_LOW;
buffer->size = 1;
}
@@ -502,12 +518,12 @@ static void furi_hal_irda_tx_dma_set_polarity(uint8_t buf_num, uint8_t polarity_
__disable_irq();
bool channel_enabled = LL_DMA_IsEnabledChannel(DMA1, LL_DMA_CHANNEL_1);
- if (channel_enabled) {
+ if(channel_enabled) {
LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1);
}
- LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_1, (uint32_t) buffer->polarity);
+ LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_1, (uint32_t)buffer->polarity);
LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, buffer->size + polarity_shift);
- if (channel_enabled) {
+ if(channel_enabled) {
LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);
}
__enable_irq();
@@ -522,19 +538,21 @@ static void furi_hal_irda_tx_dma_set_buffer(uint8_t buf_num) {
/* non-circular mode requires disabled channel before setup */
__disable_irq();
bool channel_enabled = LL_DMA_IsEnabledChannel(DMA1, LL_DMA_CHANNEL_2);
- if (channel_enabled) {
+ if(channel_enabled) {
LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_2);
}
LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_2, (uint32_t)buffer->data);
LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_2, buffer->size);
- if (channel_enabled) {
+ if(channel_enabled) {
LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2);
}
__enable_irq();
}
static void furi_hal_irda_async_tx_free_resources(void) {
- furi_assert((furi_hal_irda_state == IrdaStateIdle) || (furi_hal_irda_state == IrdaStateAsyncTxStopped));
+ furi_assert(
+ (furi_hal_irda_state == IrdaStateIdle) ||
+ (furi_hal_irda_state == IrdaStateAsyncTxStopped));
osStatus_t status;
hal_gpio_init(&gpio_irda_tx, GpioModeOutputOpenDrain, GpioPullDown, GpioSpeedLow);
@@ -558,7 +576,8 @@ static void furi_hal_irda_async_tx_free_resources(void) {
}
void furi_hal_irda_async_tx_start(uint32_t freq, float duty_cycle) {
- if ((duty_cycle > 1) || (duty_cycle <= 0) || (freq > IRDA_MAX_FREQUENCY) || (freq < IRDA_MIN_FREQUENCY) || (irda_tim_tx.data_callback == NULL)) {
+ if((duty_cycle > 1) || (duty_cycle <= 0) || (freq > IRDA_MAX_FREQUENCY) ||
+ (freq < IRDA_MIN_FREQUENCY) || (irda_tim_tx.data_callback == NULL)) {
furi_crash(NULL);
}
@@ -572,7 +591,8 @@ void furi_hal_irda_async_tx_start(uint32_t freq, float duty_cycle) {
irda_tim_tx.buffer[0].data = furi_alloc(alloc_size_data);
irda_tim_tx.buffer[1].data = furi_alloc(alloc_size_data);
- size_t alloc_size_polarity = (IRDA_TIM_TX_DMA_BUFFER_SIZE + IRDA_POLARITY_SHIFT) * sizeof(uint8_t);
+ size_t alloc_size_polarity =
+ (IRDA_TIM_TX_DMA_BUFFER_SIZE + IRDA_POLARITY_SHIFT) * sizeof(uint8_t);
irda_tim_tx.buffer[0].polarity = furi_alloc(alloc_size_polarity);
irda_tim_tx.buffer[1].polarity = furi_alloc(alloc_size_polarity);
@@ -594,13 +614,15 @@ void furi_hal_irda_async_tx_start(uint32_t freq, float duty_cycle) {
LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);
LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2);
delay_us(5);
- LL_TIM_GenerateEvent_UPDATE(TIM1); /* DMA -> TIMx_RCR */
+ LL_TIM_GenerateEvent_UPDATE(TIM1); /* DMA -> TIMx_RCR */
delay_us(5);
- LL_GPIO_ResetOutputPin(gpio_irda_tx.port, gpio_irda_tx.pin); /* when disable it prevents false pulse */
- hal_gpio_init_ex(&gpio_irda_tx, GpioModeAltFunctionPushPull, GpioPullUp, GpioSpeedHigh, GpioAltFn1TIM1);
+ LL_GPIO_ResetOutputPin(
+ gpio_irda_tx.port, gpio_irda_tx.pin); /* when disable it prevents false pulse */
+ hal_gpio_init_ex(
+ &gpio_irda_tx, GpioModeAltFunctionPushPull, GpioPullUp, GpioSpeedHigh, GpioAltFn1TIM1);
__disable_irq();
- LL_TIM_GenerateEvent_UPDATE(TIM1); /* TIMx_RCR -> Repetition counter */
+ LL_TIM_GenerateEvent_UPDATE(TIM1); /* TIMx_RCR -> Repetition counter */
LL_TIM_EnableCounter(TIM1);
__enable_irq();
}
@@ -621,21 +643,23 @@ void furi_hal_irda_async_tx_stop(void) {
furi_assert(furi_hal_irda_state < IrdaStateMAX);
__disable_irq();
- if (furi_hal_irda_state == IrdaStateAsyncTx)
- furi_hal_irda_state = IrdaStateAsyncTxStopReq;
+ if(furi_hal_irda_state == IrdaStateAsyncTx) furi_hal_irda_state = IrdaStateAsyncTxStopReq;
__enable_irq();
furi_hal_irda_async_tx_wait_termination();
}
-void furi_hal_irda_async_tx_set_data_isr_callback(FuriHalIrdaTxGetDataISRCallback callback, void* context) {
+void furi_hal_irda_async_tx_set_data_isr_callback(
+ FuriHalIrdaTxGetDataISRCallback callback,
+ void* context) {
furi_assert(furi_hal_irda_state == IrdaStateIdle);
irda_tim_tx.data_callback = callback;
irda_tim_tx.data_context = context;
}
-void furi_hal_irda_async_tx_set_signal_sent_isr_callback(FuriHalIrdaTxSignalSentISRCallback callback, void* context) {
+void furi_hal_irda_async_tx_set_signal_sent_isr_callback(
+ FuriHalIrdaTxSignalSentISRCallback callback,
+ void* context) {
irda_tim_tx.signal_sent_callback = callback;
irda_tim_tx.signal_sent_context = context;
}
-
diff --git a/firmware/targets/f7/furi-hal/furi-hal-light.c b/firmware/targets/f7/furi_hal/furi_hal_light.c
index 15a69f09..6aba7efb 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-light.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_light.c
@@ -1,4 +1,4 @@
-#include <furi-hal-light.h>
+#include <furi_hal_light.h>
#include <lp5562.h>
#define LED_CURRENT_RED 50
diff --git a/firmware/targets/f6/furi-hal/furi-hal-nfc.c b/firmware/targets/f7/furi_hal/furi_hal_nfc.c
index ee1138d8..be79aca1 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-nfc.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_nfc.c
@@ -1,4 +1,4 @@
-#include "furi-hal-nfc.h"
+#include "furi_hal_nfc.h"
#include <st25r3916.h>
#define TAG "FuriHalNfc"
@@ -37,7 +37,11 @@ void furi_hal_nfc_exit_sleep() {
rfalLowPowerModeStop();
}
-bool furi_hal_nfc_detect(rfalNfcDevice **dev_list, uint8_t* dev_cnt, uint32_t timeout, bool deactivate) {
+bool furi_hal_nfc_detect(
+ rfalNfcDevice** dev_list,
+ uint8_t* dev_cnt,
+ uint32_t timeout,
+ bool deactivate) {
furi_assert(dev_list);
furi_assert(dev_cnt);
@@ -88,7 +92,13 @@ bool furi_hal_nfc_detect(rfalNfcDevice **dev_list, uint8_t* dev_cnt, uint32_t ti
return true;
}
-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) {
+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) {
rfalNfcState state = rfalNfcGetState();
if(state == RFAL_NFC_STATE_NOTINIT) {
rfalNfcInitialize();
@@ -131,11 +141,17 @@ bool furi_hal_nfc_listen(uint8_t* uid, uint8_t uid_len, uint8_t* atqa, uint8_t s
}
bool furi_hal_nfc_get_first_frame(uint8_t** rx_buff, uint16_t** rx_len) {
- ReturnCode ret = rfalNfcDataExchangeStart(NULL, 0, rx_buff, rx_len, 0, RFAL_TXRX_FLAGS_DEFAULT);
+ ReturnCode ret =
+ rfalNfcDataExchangeStart(NULL, 0, rx_buff, rx_len, 0, RFAL_TXRX_FLAGS_DEFAULT);
return ret == ERR_NONE;
}
-ReturnCode furi_hal_nfc_data_exchange(uint8_t* tx_buff, uint16_t tx_len, uint8_t** rx_buff, uint16_t** rx_len, bool deactivate) {
+ReturnCode furi_hal_nfc_data_exchange(
+ uint8_t* tx_buff,
+ uint16_t tx_len,
+ uint8_t** rx_buff,
+ uint16_t** rx_len,
+ bool deactivate) {
furi_assert(rx_buff);
furi_assert(rx_len);
@@ -170,13 +186,19 @@ ReturnCode furi_hal_nfc_data_exchange(uint8_t* tx_buff, uint16_t tx_len, uint8_t
return ERR_NONE;
}
-ReturnCode furi_hal_nfc_raw_bitstream_exchange(uint8_t* tx_buff, uint16_t tx_bit_len, uint8_t** rx_buff, uint16_t** rx_bit_len, bool deactivate) {
+ReturnCode furi_hal_nfc_raw_bitstream_exchange(
+ uint8_t* tx_buff,
+ uint16_t tx_bit_len,
+ uint8_t** rx_buff,
+ uint16_t** rx_bit_len,
+ bool deactivate) {
furi_assert(rx_buff);
furi_assert(rx_bit_len);
ReturnCode ret;
rfalNfcState state = RFAL_NFC_STATE_ACTIVATED;
- ret = rfalNfcDataExchangeStart(tx_buff, tx_bit_len, rx_buff, rx_bit_len, 0, RFAL_TXRX_FLAGS_RAW);
+ ret =
+ rfalNfcDataExchangeStart(tx_buff, tx_bit_len, rx_buff, rx_bit_len, 0, RFAL_TXRX_FLAGS_RAW);
if(ret != ERR_NONE) {
return ret;
}
diff --git a/firmware/targets/f6/furi-hal/furi-hal-os.c b/firmware/targets/f7/furi_hal/furi_hal_os.c
index f166c5ec..6ef5a9f4 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-os.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_os.c
@@ -1,6 +1,6 @@
-#include <furi-hal-os.h>
-#include <furi-hal-os-timer.h>
-#include <furi-hal-power.h>
+#include <furi_hal_os.h>
+#include <furi_hal_os_timer.h>
+#include <furi_hal_power.h>
#include <stm32wbxx_ll_cortex.h>
#include <furi.h>
@@ -53,10 +53,10 @@ void LPTIM2_IRQHandler(void) {
// Autoreload
if(LL_LPTIM_IsActiveFlag_ARRM(FURI_HAL_OS_TIMER)) {
LL_LPTIM_ClearFLAG_ARRM(FURI_HAL_OS_TIMER);
- if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) {
- #ifdef FURI_HAL_OS_DEBUG
+ if(xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) {
+#ifdef FURI_HAL_OS_DEBUG
LL_GPIO_TogglePin(LED_TICK_PORT, LED_TICK_PIN);
- #endif
+#endif
xPortSysTickHandler();
}
}
@@ -91,7 +91,7 @@ static inline uint32_t furi_hal_os_sleep(TickType_t expected_idle_ticks) {
bool cmpm = LL_LPTIM_IsActiveFlag_CMPM(FURI_HAL_OS_TIMER);
bool arrm = LL_LPTIM_IsActiveFlag_ARRM(FURI_HAL_OS_TIMER);
- if (cmpm && arrm) after_tick += expected_idle_ticks;
+ if(cmpm && arrm) after_tick += expected_idle_ticks;
// Prepare tick timer for new round
furi_hal_os_timer_reset();
@@ -110,15 +110,15 @@ void vPortSuppressTicksAndSleep(TickType_t expected_idle_ticks) {
}
// Limit mount of ticks to maximum that timer can count
- if (expected_idle_ticks > FURI_HAL_OS_MAX_SLEEP) {
+ if(expected_idle_ticks > FURI_HAL_OS_MAX_SLEEP) {
expected_idle_ticks = FURI_HAL_OS_MAX_SLEEP;
}
- // Stop IRQ handling, no one should disturb us till we finish
+ // Stop IRQ handling, no one should disturb us till we finish
__disable_irq();
// Confirm OS that sleep is still possible
- if (eTaskConfirmSleepModeStatus() == eAbortSleep) {
+ if(eTaskConfirmSleepModeStatus() == eAbortSleep) {
__enable_irq();
return;
}
@@ -127,8 +127,8 @@ void vPortSuppressTicksAndSleep(TickType_t expected_idle_ticks) {
uint32_t completed_ticks = furi_hal_os_sleep(expected_idle_ticks);
// Notify system about time spent in sleep
- if (completed_ticks > 0) {
- if (completed_ticks > expected_idle_ticks) {
+ if(completed_ticks > 0) {
+ if(completed_ticks > expected_idle_ticks) {
vTaskStepTick(expected_idle_ticks);
} else {
vTaskStepTick(completed_ticks);
@@ -139,6 +139,6 @@ void vPortSuppressTicksAndSleep(TickType_t expected_idle_ticks) {
__enable_irq();
}
-void vApplicationStackOverflowHook(TaskHandle_t xTask, char * pcTaskName) {
+void vApplicationStackOverflowHook(TaskHandle_t xTask, char* pcTaskName) {
furi_crash("StackOverflow");
}
diff --git a/firmware/targets/f6/furi-hal/furi-hal-os.h b/firmware/targets/f7/furi_hal/furi_hal_os.h
index 72ae74fc..0b3d1580 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-os.h
+++ b/firmware/targets/f7/furi_hal/furi_hal_os.h
@@ -2,7 +2,6 @@
#include <stdint.h>
-
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/firmware/targets/f6/furi-hal/furi-hal-os-timer.h b/firmware/targets/f7/furi_hal/furi_hal_os_timer.h
index 8b7752e8..6b26d337 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-os-timer.h
+++ b/firmware/targets/f7/furi_hal/furi_hal_os_timer.h
@@ -5,17 +5,18 @@
#include <stdint.h>
// Timer used for system ticks
-#define FURI_HAL_OS_TIMER_MAX 0xFFFF
+#define FURI_HAL_OS_TIMER_MAX 0xFFFF
#define FURI_HAL_OS_TIMER_REG_LOAD_DLY 0x1
-#define FURI_HAL_OS_TIMER LPTIM2
-#define FURI_HAL_OS_TIMER_IRQ LPTIM2_IRQn
+#define FURI_HAL_OS_TIMER LPTIM2
+#define FURI_HAL_OS_TIMER_IRQ LPTIM2_IRQn
static inline void furi_hal_os_timer_init() {
// Configure clock source
LL_RCC_SetLPTIMClockSource(LL_RCC_LPTIM2_CLKSOURCE_LSE);
LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_LPTIM2);
// Set interrupt priority and enable them
- NVIC_SetPriority(FURI_HAL_OS_TIMER_IRQ, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 15, 0));
+ NVIC_SetPriority(
+ FURI_HAL_OS_TIMER_IRQ, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 15, 0));
NVIC_EnableIRQ(FURI_HAL_OS_TIMER_IRQ);
}
@@ -23,7 +24,8 @@ static inline void furi_hal_os_timer_continuous(uint32_t count) {
count--;
// Enable timer
LL_LPTIM_Enable(FURI_HAL_OS_TIMER);
- while(!LL_LPTIM_IsEnabled(FURI_HAL_OS_TIMER));
+ while(!LL_LPTIM_IsEnabled(FURI_HAL_OS_TIMER))
+ ;
// Enable rutoreload match interrupt
LL_LPTIM_EnableIT_ARRM(FURI_HAL_OS_TIMER);
@@ -37,14 +39,15 @@ static inline void furi_hal_os_timer_single(uint32_t count) {
count--;
// Enable timer
LL_LPTIM_Enable(FURI_HAL_OS_TIMER);
- while(!LL_LPTIM_IsEnabled(FURI_HAL_OS_TIMER));
+ while(!LL_LPTIM_IsEnabled(FURI_HAL_OS_TIMER))
+ ;
// Enable compare match interrupt
LL_LPTIM_EnableIT_CMPM(FURI_HAL_OS_TIMER);
// Set compare, autoreload and start counter
// Include some marging to workaround ARRM behaviour
- LL_LPTIM_SetCompare(FURI_HAL_OS_TIMER, count-3);
+ LL_LPTIM_SetCompare(FURI_HAL_OS_TIMER, count - 3);
LL_LPTIM_SetAutoReload(FURI_HAL_OS_TIMER, count);
LL_LPTIM_StartCounter(FURI_HAL_OS_TIMER, LL_LPTIM_OPERATING_MODE_ONESHOT);
}
diff --git a/firmware/targets/f6/furi-hal/furi-hal-power.c b/firmware/targets/f7/furi_hal/furi_hal_power.c
index ad333b5d..b2997b58 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-power.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_power.c
@@ -1,6 +1,6 @@
-#include <furi-hal-power.h>
-#include <furi-hal-clock.h>
-#include <furi-hal-bt.h>
+#include <furi_hal_power.h>
+#include <furi_hal_clock.h>
+#include <furi_hal_bt.h>
#include <stm32wbxx_ll_rcc.h>
#include <stm32wbxx_ll_pwr.h>
@@ -30,17 +30,18 @@ static volatile FuriHalPower furi_hal_power = {
};
const ParamCEDV cedv = {
- .cedv_conf.gauge_conf = {
- .CCT = 1,
- .CSYNC = 0,
- .EDV_CMP = 0,
- .SC = 1,
- .FIXED_EDV0 = 1,
- .FCC_LIM = 1,
- .FC_FOR_VDQ = 1,
- .IGNORE_SD = 1,
- .SME0 = 0,
- },
+ .cedv_conf.gauge_conf =
+ {
+ .CCT = 1,
+ .CSYNC = 0,
+ .EDV_CMP = 0,
+ .SC = 1,
+ .FIXED_EDV0 = 1,
+ .FCC_LIM = 1,
+ .FC_FOR_VDQ = 1,
+ .IGNORE_SD = 1,
+ .SME0 = 0,
+ },
.full_charge_cap = 2100,
.design_cap = 2100,
.EDV0 = 3300,
@@ -112,14 +113,15 @@ void furi_hal_power_light_sleep() {
}
void furi_hal_power_deep_sleep() {
- while( LL_HSEM_1StepLock(HSEM, CFG_HW_RCC_SEMID));
+ while(LL_HSEM_1StepLock(HSEM, CFG_HW_RCC_SEMID))
+ ;
- if (!LL_HSEM_1StepLock(HSEM, CFG_HW_ENTRY_STOP_MODE_SEMID)) {
+ if(!LL_HSEM_1StepLock(HSEM, CFG_HW_ENTRY_STOP_MODE_SEMID)) {
if(LL_PWR_IsActiveFlag_C2DS()) {
// Release ENTRY_STOP_MODE semaphore
LL_HSEM_ReleaseLock(HSEM, CFG_HW_ENTRY_STOP_MODE_SEMID, 0);
- // The switch on HSI before entering Stop Mode is required
+ // The switch on HSI before entering Stop Mode is required
furi_hal_clock_switch_to_hsi();
}
} else {
@@ -136,7 +138,7 @@ void furi_hal_power_deep_sleep() {
LL_PWR_SetPowerMode(LL_PWR_MODE_STOP1);
LL_LPM_EnableDeepSleep();
-#if defined ( __CC_ARM)
+#if defined(__CC_ARM)
// Force store operations
__force_stores();
#endif
@@ -146,7 +148,8 @@ void furi_hal_power_deep_sleep() {
/* Release ENTRY_STOP_MODE semaphore */
LL_HSEM_ReleaseLock(HSEM, CFG_HW_ENTRY_STOP_MODE_SEMID, 0);
- while(LL_HSEM_1StepLock(HSEM, CFG_HW_RCC_SEMID));
+ while(LL_HSEM_1StepLock(HSEM, CFG_HW_RCC_SEMID))
+ ;
if(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL) {
furi_hal_clock_switch_to_pll();
@@ -163,7 +166,6 @@ void furi_hal_power_sleep() {
}
}
-
uint8_t furi_hal_power_get_pct() {
furi_hal_i2c_acquire(&furi_hal_i2c_handle_power);
uint8_t ret = bq27220_get_state_of_charge(&furi_hal_i2c_handle_power);
@@ -232,9 +234,9 @@ float furi_hal_power_get_battery_voltage(FuriHalPowerIC ic) {
float ret = 0.0f;
furi_hal_i2c_acquire(&furi_hal_i2c_handle_power);
- if (ic == FuriHalPowerICCharger) {
+ if(ic == FuriHalPowerICCharger) {
ret = (float)bq25896_get_vbat_voltage(&furi_hal_i2c_handle_power) / 1000.0f;
- } else if (ic == FuriHalPowerICFuelGauge) {
+ } else if(ic == FuriHalPowerICFuelGauge) {
ret = (float)bq27220_get_voltage(&furi_hal_i2c_handle_power) / 1000.0f;
}
furi_hal_i2c_release(&furi_hal_i2c_handle_power);
@@ -246,11 +248,11 @@ float furi_hal_power_get_battery_current(FuriHalPowerIC ic) {
float ret = 0.0f;
furi_hal_i2c_acquire(&furi_hal_i2c_handle_power);
- if (ic == FuriHalPowerICCharger) {
+ if(ic == FuriHalPowerICCharger) {
ret = (float)bq25896_get_vbat_current(&furi_hal_i2c_handle_power) / 1000.0f;
- } else if (ic == FuriHalPowerICFuelGauge) {
+ } else if(ic == FuriHalPowerICFuelGauge) {
ret = (float)bq27220_get_current(&furi_hal_i2c_handle_power) / 1000.0f;
- }
+ }
furi_hal_i2c_release(&furi_hal_i2c_handle_power);
return ret;
@@ -259,10 +261,10 @@ float furi_hal_power_get_battery_current(FuriHalPowerIC ic) {
static float furi_hal_power_get_battery_temperature_internal(FuriHalPowerIC ic) {
float ret = 0.0f;
- if (ic == FuriHalPowerICCharger) {
+ if(ic == FuriHalPowerICCharger) {
// Linear approximation, +/- 5 C
- ret = (71.0f - (float)bq25896_get_ntc_mpct(&furi_hal_i2c_handle_power)/1000) / 0.6f;
- } else if (ic == FuriHalPowerICFuelGauge) {
+ ret = (71.0f - (float)bq25896_get_ntc_mpct(&furi_hal_i2c_handle_power) / 1000) / 0.6f;
+ } else if(ic == FuriHalPowerICFuelGauge) {
ret = ((float)bq27220_get_temperature(&furi_hal_i2c_handle_power) - 2731.0f) / 10.0f;
}
@@ -277,7 +279,7 @@ float furi_hal_power_get_battery_temperature(FuriHalPowerIC ic) {
return ret;
}
-float furi_hal_power_get_usb_voltage(){
+float furi_hal_power_get_usb_voltage() {
furi_hal_i2c_acquire(&furi_hal_i2c_handle_power);
float ret = (float)bq25896_get_vbus_voltage(&furi_hal_i2c_handle_power) / 1000.0f;
furi_hal_i2c_release(&furi_hal_i2c_handle_power);
@@ -290,57 +292,75 @@ void furi_hal_power_dump_state() {
furi_hal_i2c_acquire(&furi_hal_i2c_handle_power);
- if (bq27220_get_battery_status(&furi_hal_i2c_handle_power, &battery_status) == BQ27220_ERROR
- || bq27220_get_operation_status(&furi_hal_i2c_handle_power, &operation_status) == BQ27220_ERROR) {
+ if(bq27220_get_battery_status(&furi_hal_i2c_handle_power, &battery_status) == BQ27220_ERROR ||
+ bq27220_get_operation_status(&furi_hal_i2c_handle_power, &operation_status) ==
+ BQ27220_ERROR) {
printf("Failed to get bq27220 status. Communication error.\r\n");
} else {
printf(
- "bq27220: CALMD: %d, SEC0: %d, SEC1: %d, EDV2: %d, VDQ: %d, INITCOMP: %d, SMTH: %d, BTPINT: %d, CFGUPDATE: %d\r\n",
- operation_status.CALMD, operation_status.SEC0, operation_status.SEC1,
- operation_status.EDV2, operation_status.VDQ, operation_status.INITCOMP,
- operation_status.SMTH, operation_status.BTPINT, operation_status.CFGUPDATE
- );
+ "bq27220: CALMD: %d, SEC0: %d, SEC1: %d, EDV2: %d, VDQ: %d, INITCOMP: %d, SMTH: %d, BTPINT: %d, CFGUPDATE: %d\r\n",
+ operation_status.CALMD,
+ operation_status.SEC0,
+ operation_status.SEC1,
+ operation_status.EDV2,
+ operation_status.VDQ,
+ operation_status.INITCOMP,
+ operation_status.SMTH,
+ operation_status.BTPINT,
+ operation_status.CFGUPDATE);
// Battery status register, part 1
printf(
- "bq27220: CHGINH: %d, FC: %d, OTD: %d, OTC: %d, SLEEP: %d, OCVFAIL: %d, OCVCOMP: %d, FD: %d\r\n",
- battery_status.CHGINH, battery_status.FC, battery_status.OTD,
- battery_status.OTC, battery_status.SLEEP, battery_status.OCVFAIL,
- battery_status.OCVCOMP, battery_status.FD
- );
+ "bq27220: CHGINH: %d, FC: %d, OTD: %d, OTC: %d, SLEEP: %d, OCVFAIL: %d, OCVCOMP: %d, FD: %d\r\n",
+ battery_status.CHGINH,
+ battery_status.FC,
+ battery_status.OTD,
+ battery_status.OTC,
+ battery_status.SLEEP,
+ battery_status.OCVFAIL,
+ battery_status.OCVCOMP,
+ battery_status.FD);
// Battery status register, part 2
printf(
- "bq27220: DSG: %d, SYSDWN: %d, TDA: %d, BATTPRES: %d, AUTH_GD: %d, OCVGD: %d, TCA: %d, RSVD: %d\r\n",
- battery_status.DSG, battery_status.SYSDWN, battery_status.TDA,
- battery_status.BATTPRES, battery_status.AUTH_GD, battery_status.OCVGD,
- battery_status.TCA, battery_status.RSVD
- );
+ "bq27220: DSG: %d, SYSDWN: %d, TDA: %d, BATTPRES: %d, AUTH_GD: %d, OCVGD: %d, TCA: %d, RSVD: %d\r\n",
+ battery_status.DSG,
+ battery_status.SYSDWN,
+ battery_status.TDA,
+ battery_status.BATTPRES,
+ battery_status.AUTH_GD,
+ battery_status.OCVGD,
+ battery_status.TCA,
+ battery_status.RSVD);
// Voltage and current info
printf(
"bq27220: Full capacity: %dmAh, Design capacity: %dmAh, Remaining capacity: %dmAh, State of Charge: %d%%, State of health: %d%%\r\n",
- bq27220_get_full_charge_capacity(&furi_hal_i2c_handle_power), bq27220_get_design_capacity(&furi_hal_i2c_handle_power), bq27220_get_remaining_capacity(&furi_hal_i2c_handle_power),
- bq27220_get_state_of_charge(&furi_hal_i2c_handle_power), bq27220_get_state_of_health(&furi_hal_i2c_handle_power)
- );
+ bq27220_get_full_charge_capacity(&furi_hal_i2c_handle_power),
+ bq27220_get_design_capacity(&furi_hal_i2c_handle_power),
+ bq27220_get_remaining_capacity(&furi_hal_i2c_handle_power),
+ bq27220_get_state_of_charge(&furi_hal_i2c_handle_power),
+ bq27220_get_state_of_health(&furi_hal_i2c_handle_power));
printf(
"bq27220: Voltage: %dmV, Current: %dmA, Temperature: %dC\r\n",
- bq27220_get_voltage(&furi_hal_i2c_handle_power), bq27220_get_current(&furi_hal_i2c_handle_power), (int)furi_hal_power_get_battery_temperature_internal(FuriHalPowerICFuelGauge)
- );
+ bq27220_get_voltage(&furi_hal_i2c_handle_power),
+ bq27220_get_current(&furi_hal_i2c_handle_power),
+ (int)furi_hal_power_get_battery_temperature_internal(FuriHalPowerICFuelGauge));
}
printf(
"bq25896: VBUS: %d, VSYS: %d, VBAT: %d, Current: %d, NTC: %ldm%%\r\n",
- bq25896_get_vbus_voltage(&furi_hal_i2c_handle_power), bq25896_get_vsys_voltage(&furi_hal_i2c_handle_power),
- bq25896_get_vbat_voltage(&furi_hal_i2c_handle_power), bq25896_get_vbat_current(&furi_hal_i2c_handle_power),
- bq25896_get_ntc_mpct(&furi_hal_i2c_handle_power)
- );
+ bq25896_get_vbus_voltage(&furi_hal_i2c_handle_power),
+ bq25896_get_vsys_voltage(&furi_hal_i2c_handle_power),
+ bq25896_get_vbat_voltage(&furi_hal_i2c_handle_power),
+ bq25896_get_vbat_current(&furi_hal_i2c_handle_power),
+ bq25896_get_ntc_mpct(&furi_hal_i2c_handle_power));
furi_hal_i2c_release(&furi_hal_i2c_handle_power);
}
-void furi_hal_power_enable_external_3_3v(){
+void furi_hal_power_enable_external_3_3v() {
LL_GPIO_SetOutputPin(PERIPH_POWER_GPIO_Port, PERIPH_POWER_Pin);
}
-void furi_hal_power_disable_external_3_3v(){
+void furi_hal_power_disable_external_3_3v() {
LL_GPIO_ResetOutputPin(PERIPH_POWER_GPIO_Port, PERIPH_POWER_Pin);
}
@@ -350,7 +370,7 @@ void furi_hal_power_suppress_charge_enter() {
furi_hal_power.suppress_charge++;
xTaskResumeAll();
- if (disable_charging) {
+ if(disable_charging) {
furi_hal_i2c_acquire(&furi_hal_i2c_handle_power);
bq25896_disable_charging(&furi_hal_i2c_handle_power);
furi_hal_i2c_release(&furi_hal_i2c_handle_power);
@@ -363,7 +383,7 @@ void furi_hal_power_suppress_charge_exit() {
bool enable_charging = furi_hal_power.suppress_charge == 0;
xTaskResumeAll();
- if (enable_charging) {
+ if(enable_charging) {
furi_hal_i2c_acquire(&furi_hal_i2c_handle_power);
bq25896_enable_charging(&furi_hal_i2c_handle_power);
furi_hal_i2c_release(&furi_hal_i2c_handle_power);
diff --git a/firmware/targets/f6/furi-hal/furi-hal-pwm.c b/firmware/targets/f7/furi_hal/furi_hal_pwm.c
index 972d28ba..1be4738d 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-pwm.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_pwm.c
@@ -1,4 +1,4 @@
-#include "furi-hal-pwm.h"
+#include "furi_hal_pwm.h"
void hal_pwm_set(float value, float freq, TIM_HandleTypeDef* tim, uint32_t channel) {
tim->Init.CounterMode = TIM_COUNTERMODE_UP;
@@ -47,4 +47,3 @@ void hal_pwm_stop(TIM_HandleTypeDef* tim, uint32_t channel) {
void hal_pwmn_stop(TIM_HandleTypeDef* tim, uint32_t channel) {
HAL_TIMEx_PWMN_Stop(tim, channel);
}
-
diff --git a/firmware/targets/f7/furi-hal/furi-hal-pwm.h b/firmware/targets/f7/furi_hal/furi_hal_pwm.h
index 58b5701e..58b5701e 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-pwm.h
+++ b/firmware/targets/f7/furi_hal/furi_hal_pwm.h
diff --git a/firmware/targets/f6/furi-hal/furi-hal-random.c b/firmware/targets/f7/furi_hal/furi_hal_random.c
index a7bc3a31..5dfda2b2 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-random.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_random.c
@@ -1,6 +1,6 @@
-#include "furi-hal-random.h"
+#include "furi_hal_random.h"
#include <furi.h>
-#include <furi-hal.h>
+#include <furi_hal.h>
#include <stm32wbxx_ll_rng.h>
#include <stm32wbxx_ll_hsem.h>
@@ -8,13 +8,14 @@
#include <hw_conf.h>
uint32_t furi_hal_random_get() {
-
- while( LL_HSEM_1StepLock(HSEM, CFG_HW_RNG_SEMID));
+ while(LL_HSEM_1StepLock(HSEM, CFG_HW_RNG_SEMID))
+ ;
LL_RNG_Enable(RNG);
- while (!LL_RNG_IsActiveFlag_DRDY(RNG));
+ while(!LL_RNG_IsActiveFlag_DRDY(RNG))
+ ;
- if ((LL_RNG_IsActiveFlag_CECS(RNG)) || (LL_RNG_IsActiveFlag_SECS(RNG))) {
+ if((LL_RNG_IsActiveFlag_CECS(RNG)) || (LL_RNG_IsActiveFlag_SECS(RNG))) {
furi_crash("TRNG error");
}
@@ -27,20 +28,21 @@ uint32_t furi_hal_random_get() {
}
void furi_hal_random_fill_buf(uint8_t* buf, uint32_t len) {
-
- while( LL_HSEM_1StepLock(HSEM, CFG_HW_RNG_SEMID));
+ while(LL_HSEM_1StepLock(HSEM, CFG_HW_RNG_SEMID))
+ ;
LL_RNG_Enable(RNG);
- for (uint32_t i = 0; i < len; i+= 4) {
- while (!LL_RNG_IsActiveFlag_DRDY(RNG));
+ for(uint32_t i = 0; i < len; i += 4) {
+ while(!LL_RNG_IsActiveFlag_DRDY(RNG))
+ ;
- if ((LL_RNG_IsActiveFlag_CECS(RNG)) || (LL_RNG_IsActiveFlag_SECS(RNG))) {
+ if((LL_RNG_IsActiveFlag_CECS(RNG)) || (LL_RNG_IsActiveFlag_SECS(RNG))) {
furi_crash("TRNG error");
}
uint32_t random_val = LL_RNG_ReadRandData32(RNG);
- uint8_t len_cur = ((i+4) < len) ? (4) : (len-i);
+ uint8_t len_cur = ((i + 4) < len) ? (4) : (len - i);
memcpy(&buf[i], &random_val, len_cur);
}
diff --git a/firmware/targets/f7/furi-hal/furi-hal-resources.c b/firmware/targets/f7/furi_hal/furi_hal_resources.c
index 3f7fe36c..d8955096 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-resources.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_resources.c
@@ -1,17 +1,38 @@
-#include <furi-hal-resources.h>
+#include <furi_hal_resources.h>
#include "main.h"
#include <furi.h>
const InputPin input_pins[] = {
- {.port = BUTTON_UP_GPIO_Port, .pin = BUTTON_UP_Pin, .key = InputKeyUp, .inverted = true, .name="Up"},
- {.port = BUTTON_DOWN_GPIO_Port, .pin = BUTTON_DOWN_Pin, .key = InputKeyDown, .inverted = true, .name="Down"},
+ {.port = BUTTON_UP_GPIO_Port,
+ .pin = BUTTON_UP_Pin,
+ .key = InputKeyUp,
+ .inverted = true,
+ .name = "Up"},
+ {.port = BUTTON_DOWN_GPIO_Port,
+ .pin = BUTTON_DOWN_Pin,
+ .key = InputKeyDown,
+ .inverted = true,
+ .name = "Down"},
{.port = BUTTON_RIGHT_GPIO_Port,
.pin = BUTTON_RIGHT_Pin,
.key = InputKeyRight,
- .inverted = true, .name="Right"},
- {.port = BUTTON_LEFT_GPIO_Port, .pin = BUTTON_LEFT_Pin, .key = InputKeyLeft, .inverted = true, .name="Left"},
- {.port = BUTTON_OK_GPIO_Port, .pin = BUTTON_OK_Pin, .key = InputKeyOk, .inverted = false, .name="Ok"},
- {.port = BUTTON_BACK_GPIO_Port, .pin = BUTTON_BACK_Pin, .key = InputKeyBack, .inverted = true, .name="Back"},
+ .inverted = true,
+ .name = "Right"},
+ {.port = BUTTON_LEFT_GPIO_Port,
+ .pin = BUTTON_LEFT_Pin,
+ .key = InputKeyLeft,
+ .inverted = true,
+ .name = "Left"},
+ {.port = BUTTON_OK_GPIO_Port,
+ .pin = BUTTON_OK_Pin,
+ .key = InputKeyOk,
+ .inverted = false,
+ .name = "Ok"},
+ {.port = BUTTON_BACK_GPIO_Port,
+ .pin = BUTTON_BACK_Pin,
+ .key = InputKeyBack,
+ .inverted = true,
+ .name = "Back"},
};
const size_t input_pins_count = sizeof(input_pins) / sizeof(InputPin);
diff --git a/firmware/targets/f7/furi-hal/furi-hal-resources.h b/firmware/targets/f7/furi_hal/furi_hal_resources.h
index aed61372..0851f1b1 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-resources.h
+++ b/firmware/targets/f7/furi_hal/furi_hal_resources.h
@@ -84,7 +84,6 @@ extern const GpioPin gpio_usart_rx;
extern const GpioPin gpio_i2c_power_sda;
extern const GpioPin gpio_i2c_power_scl;
-
#ifdef __cplusplus
}
#endif
diff --git a/firmware/targets/f7/furi-hal/furi-hal-rfid.c b/firmware/targets/f7/furi_hal/furi_hal_rfid.c
index b4b5af50..0b0616d8 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-rfid.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_rfid.c
@@ -1,6 +1,6 @@
-#include <furi-hal-rfid.h>
-#include <furi-hal-ibutton.h>
-#include <furi-hal-resources.h>
+#include <furi_hal_rfid.h>
+#include <furi_hal_ibutton.h>
+#include <furi_hal_resources.h>
#include <stm32wbxx_ll_tim.h>
diff --git a/firmware/targets/f6/furi-hal/furi-hal-rtc.c b/firmware/targets/f7/furi_hal/furi_hal_rtc.c
index a13913a1..4d45c748 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-rtc.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_rtc.c
@@ -1,4 +1,4 @@
-#include <furi-hal-rtc.h>
+#include <furi_hal_rtc.h>
#include <stm32wbxx_ll_rcc.h>
#include <stm32wbxx_ll_rtc.h>
@@ -7,8 +7,8 @@
#define TAG "FuriHalRtc"
typedef struct {
- uint8_t log_level:4;
- uint8_t log_reserved:4;
+ uint8_t log_level : 4;
+ uint8_t log_reserved : 4;
uint8_t flags;
uint16_t reserved;
} DeveloperReg;
@@ -86,31 +86,33 @@ void furi_hal_rtc_set_datetime(FuriHalRtcDateTime* datetime) {
/* Enter Initialization mode and wait for INIT flag to be set */
LL_RTC_EnableInitMode(RTC);
- while(!LL_RTC_IsActiveFlag_INIT(RTC)) {}
+ while(!LL_RTC_IsActiveFlag_INIT(RTC)) {
+ }
/* Set time */
- LL_RTC_TIME_Config(RTC,
+ LL_RTC_TIME_Config(
+ RTC,
LL_RTC_TIME_FORMAT_AM_OR_24,
__LL_RTC_CONVERT_BIN2BCD(datetime->hour),
__LL_RTC_CONVERT_BIN2BCD(datetime->minute),
- __LL_RTC_CONVERT_BIN2BCD(datetime->second)
- );
+ __LL_RTC_CONVERT_BIN2BCD(datetime->second));
/* Set date */
- LL_RTC_DATE_Config(RTC,
+ LL_RTC_DATE_Config(
+ RTC,
datetime->weekday,
__LL_RTC_CONVERT_BIN2BCD(datetime->day),
__LL_RTC_CONVERT_BIN2BCD(datetime->month),
- __LL_RTC_CONVERT_BIN2BCD(datetime->year - 2000)
- );
+ __LL_RTC_CONVERT_BIN2BCD(datetime->year - 2000));
/* Exit Initialization mode */
LL_RTC_DisableInitMode(RTC);
/* If RTC_CR_BYPSHAD bit = 0, wait for synchro else this check is not needed */
- if (!LL_RTC_IsShadowRegBypassEnabled(RTC)) {
+ if(!LL_RTC_IsShadowRegBypassEnabled(RTC)) {
LL_RTC_ClearFlag_RS(RTC);
- while(!LL_RTC_IsActiveFlag_RS(RTC)) {};
+ while(!LL_RTC_IsActiveFlag_RS(RTC)) {
+ };
}
/* Enable write protection */
@@ -123,9 +125,9 @@ void furi_hal_rtc_get_datetime(FuriHalRtcDateTime* datetime) {
uint32_t time = LL_RTC_TIME_Get(RTC); // 0x00HHMMSS
uint32_t date = LL_RTC_DATE_Get(RTC); // 0xWWDDMMYY
- datetime->second = __LL_RTC_CONVERT_BCD2BIN((time>>0) & 0xFF);
- datetime->minute = __LL_RTC_CONVERT_BCD2BIN((time>>8) & 0xFF);
- datetime->hour = __LL_RTC_CONVERT_BCD2BIN((time>>16) & 0xFF);
+ datetime->second = __LL_RTC_CONVERT_BCD2BIN((time >> 0) & 0xFF);
+ datetime->minute = __LL_RTC_CONVERT_BCD2BIN((time >> 8) & 0xFF);
+ datetime->hour = __LL_RTC_CONVERT_BCD2BIN((time >> 16) & 0xFF);
datetime->year = __LL_RTC_CONVERT_BCD2BIN((date >> 0) & 0xFF) + 2000;
datetime->month = __LL_RTC_CONVERT_BCD2BIN((date >> 8) & 0xFF);
datetime->day = __LL_RTC_CONVERT_BCD2BIN((date >> 16) & 0xFF);
diff --git a/firmware/targets/f7/furi-hal/furi-hal-sd.c b/firmware/targets/f7/furi_hal/furi_hal_sd.c
index 82549e16..c62b4aa5 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-sd.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_sd.c
@@ -1,4 +1,4 @@
-#include "furi-hal-sd.h"
+#include "furi_hal_sd.h"
#include <stm32wbxx_ll_gpio.h>
#include <furi.h>
diff --git a/firmware/targets/f6/furi-hal/furi-hal-spi.c b/firmware/targets/f7/furi_hal/furi_hal_spi.c
index a0ce7166..8af2879f 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-spi.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_spi.c
@@ -1,5 +1,5 @@
-#include "furi-hal-spi.h"
-#include "furi-hal-resources.h"
+#include "furi_hal_spi.h"
+#include "furi_hal_resources.h"
#include <stdbool.h>
#include <string.h>
@@ -70,14 +70,20 @@ void furi_hal_spi_release(FuriHalSpiBusHandle* handle) {
}
static void furi_hal_spi_bus_end_txrx(FuriHalSpiBusHandle* handle, uint32_t timeout) {
- while(LL_SPI_GetTxFIFOLevel(handle->bus->spi) != LL_SPI_TX_FIFO_EMPTY);
- while(LL_SPI_IsActiveFlag_BSY(handle->bus->spi));
+ while(LL_SPI_GetTxFIFOLevel(handle->bus->spi) != LL_SPI_TX_FIFO_EMPTY)
+ ;
+ while(LL_SPI_IsActiveFlag_BSY(handle->bus->spi))
+ ;
while(LL_SPI_GetRxFIFOLevel(handle->bus->spi) != LL_SPI_RX_FIFO_EMPTY) {
LL_SPI_ReceiveData8(handle->bus->spi);
}
}
-bool furi_hal_spi_bus_rx(FuriHalSpiBusHandle* handle, uint8_t* buffer, size_t size, uint32_t timeout) {
+bool furi_hal_spi_bus_rx(
+ FuriHalSpiBusHandle* handle,
+ uint8_t* buffer,
+ size_t size,
+ uint32_t timeout) {
furi_assert(handle);
furi_assert(handle->bus->current_handle == handle);
furi_assert(buffer);
@@ -86,7 +92,11 @@ bool furi_hal_spi_bus_rx(FuriHalSpiBusHandle* handle, uint8_t* buffer, size_t si
return furi_hal_spi_bus_trx(handle, buffer, buffer, size, timeout);
}
-bool furi_hal_spi_bus_tx(FuriHalSpiBusHandle* handle, uint8_t* buffer, size_t size, uint32_t timeout) {
+bool furi_hal_spi_bus_tx(
+ FuriHalSpiBusHandle* handle,
+ uint8_t* buffer,
+ size_t size,
+ uint32_t timeout) {
furi_assert(handle);
furi_assert(handle->bus->current_handle == handle);
furi_assert(buffer);
@@ -94,7 +104,7 @@ bool furi_hal_spi_bus_tx(FuriHalSpiBusHandle* handle, uint8_t* buffer, size_t si
bool ret = true;
while(size > 0) {
- if (LL_SPI_IsActiveFlag_TXE(handle->bus->spi)) {
+ if(LL_SPI_IsActiveFlag_TXE(handle->bus->spi)) {
LL_SPI_TransmitData8(handle->bus->spi, *buffer);
buffer++;
size--;
@@ -107,7 +117,12 @@ bool furi_hal_spi_bus_tx(FuriHalSpiBusHandle* handle, uint8_t* buffer, size_t si
return ret;
}
-bool furi_hal_spi_bus_trx(FuriHalSpiBusHandle* handle, uint8_t* tx_buffer, uint8_t* rx_buffer, size_t size, uint32_t timeout) {
+bool furi_hal_spi_bus_trx(
+ FuriHalSpiBusHandle* handle,
+ uint8_t* tx_buffer,
+ uint8_t* rx_buffer,
+ size_t size,
+ uint32_t timeout) {
furi_assert(handle);
furi_assert(handle->bus->current_handle == handle);
furi_assert(tx_buffer);
@@ -125,7 +140,7 @@ bool furi_hal_spi_bus_trx(FuriHalSpiBusHandle* handle, uint8_t* tx_buffer, uint8
tx_size--;
tx_allowed = false;
}
-
+
if(LL_SPI_IsActiveFlag_RXNE(handle->bus->spi)) {
*rx_buffer = LL_SPI_ReceiveData8(handle->bus->spi);
rx_buffer++;
diff --git a/firmware/targets/f6/furi-hal/furi-hal-spi-config.c b/firmware/targets/f7/furi_hal/furi_hal_spi_config.c
index e84f0368..eb7491cd 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-spi-config.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_spi_config.c
@@ -1,5 +1,5 @@
-#include <furi-hal-spi-config.h>
-#include <furi-hal-resources.h>
+#include <furi_hal_spi_config.h>
+#include <furi_hal_resources.h>
/* SPI Presets */
@@ -73,24 +73,24 @@ const LL_SPI_InitTypeDef furi_hal_spi_preset_1edge_low_2m = {
osMutexId_t furi_hal_spi_bus_r_mutex = NULL;
static void furi_hal_spi_bus_r_event_callback(FuriHalSpiBus* bus, FuriHalSpiBusEvent event) {
- if (event == FuriHalSpiBusEventInit) {
+ if(event == FuriHalSpiBusEventInit) {
furi_hal_spi_bus_r_mutex = osMutexNew(NULL);
FURI_CRITICAL_ENTER();
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SPI1);
LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_SPI1);
FURI_CRITICAL_EXIT();
bus->current_handle = NULL;
- } else if (event == FuriHalSpiBusEventDeinit) {
+ } else if(event == FuriHalSpiBusEventDeinit) {
furi_check(osMutexDelete(furi_hal_spi_bus_r_mutex));
- } else if (event == FuriHalSpiBusEventLock) {
+ } else if(event == FuriHalSpiBusEventLock) {
furi_check(osMutexAcquire(furi_hal_spi_bus_r_mutex, osWaitForever) == osOK);
- } else if (event == FuriHalSpiBusEventUnlock) {
+ } else if(event == FuriHalSpiBusEventUnlock) {
furi_check(osMutexRelease(furi_hal_spi_bus_r_mutex) == osOK);
- } else if (event == FuriHalSpiBusEventActivate) {
+ } else if(event == FuriHalSpiBusEventActivate) {
FURI_CRITICAL_ENTER();
LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_SPI1);
FURI_CRITICAL_EXIT();
- } else if (event == FuriHalSpiBusEventDeactivate) {
+ } else if(event == FuriHalSpiBusEventDeactivate) {
FURI_CRITICAL_ENTER();
LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_SPI1);
FURI_CRITICAL_EXIT();
@@ -98,31 +98,31 @@ static void furi_hal_spi_bus_r_event_callback(FuriHalSpiBus* bus, FuriHalSpiBusE
}
FuriHalSpiBus furi_hal_spi_bus_r = {
- .spi=SPI1,
+ .spi = SPI1,
.callback = furi_hal_spi_bus_r_event_callback,
};
osMutexId_t furi_hal_spi_bus_d_mutex = NULL;
static void furi_hal_spi_bus_d_event_callback(FuriHalSpiBus* bus, FuriHalSpiBusEvent event) {
- if (event == FuriHalSpiBusEventInit) {
+ if(event == FuriHalSpiBusEventInit) {
furi_hal_spi_bus_d_mutex = osMutexNew(NULL);
FURI_CRITICAL_ENTER();
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_SPI2);
LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_SPI2);
FURI_CRITICAL_EXIT();
bus->current_handle = NULL;
- } else if (event == FuriHalSpiBusEventDeinit) {
+ } else if(event == FuriHalSpiBusEventDeinit) {
furi_check(osMutexDelete(furi_hal_spi_bus_d_mutex));
- } else if (event == FuriHalSpiBusEventLock) {
+ } else if(event == FuriHalSpiBusEventLock) {
furi_check(osMutexAcquire(furi_hal_spi_bus_d_mutex, osWaitForever) == osOK);
- } else if (event == FuriHalSpiBusEventUnlock) {
+ } else if(event == FuriHalSpiBusEventUnlock) {
furi_check(osMutexRelease(furi_hal_spi_bus_d_mutex) == osOK);
- } else if (event == FuriHalSpiBusEventActivate) {
+ } else if(event == FuriHalSpiBusEventActivate) {
FURI_CRITICAL_ENTER();
LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_SPI2);
FURI_CRITICAL_EXIT();
- } else if (event == FuriHalSpiBusEventDeactivate) {
+ } else if(event == FuriHalSpiBusEventDeactivate) {
FURI_CRITICAL_ENTER();
LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_SPI2);
FURI_CRITICAL_EXIT();
@@ -130,30 +130,48 @@ static void furi_hal_spi_bus_d_event_callback(FuriHalSpiBus* bus, FuriHalSpiBusE
}
FuriHalSpiBus furi_hal_spi_bus_d = {
- .spi=SPI2,
+ .spi = SPI2,
.callback = furi_hal_spi_bus_d_event_callback,
};
/* SPI Bus Handles */
-inline static void furi_hal_spi_bus_r_handle_event_callback(FuriHalSpiBusHandle* handle, FuriHalSpiBusHandleEvent event, const LL_SPI_InitTypeDef* preset) {
- if (event == FuriHalSpiBusHandleEventInit) {
+inline static void furi_hal_spi_bus_r_handle_event_callback(
+ FuriHalSpiBusHandle* handle,
+ FuriHalSpiBusHandleEvent event,
+ const LL_SPI_InitTypeDef* preset) {
+ if(event == FuriHalSpiBusHandleEventInit) {
hal_gpio_write(handle->cs, true);
hal_gpio_init(handle->cs, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh);
- } else if (event == FuriHalSpiBusHandleEventDeinit) {
+ } else if(event == FuriHalSpiBusHandleEventDeinit) {
hal_gpio_write(handle->cs, true);
hal_gpio_init(handle->cs, GpioModeAnalog, GpioPullNo, GpioSpeedLow);
- } else if (event == FuriHalSpiBusHandleEventActivate) {
+ } else if(event == FuriHalSpiBusHandleEventActivate) {
LL_SPI_Init(handle->bus->spi, (LL_SPI_InitTypeDef*)preset);
LL_SPI_SetRxFIFOThreshold(handle->bus->spi, LL_SPI_RX_FIFO_TH_QUARTER);
LL_SPI_Enable(handle->bus->spi);
- hal_gpio_init_ex(handle->miso, GpioModeAltFunctionPushPull, GpioPullNo, GpioSpeedVeryHigh, GpioAltFn5SPI1);
- hal_gpio_init_ex(handle->mosi, GpioModeAltFunctionPushPull, GpioPullNo, GpioSpeedVeryHigh, GpioAltFn5SPI1);
- hal_gpio_init_ex(handle->sck, GpioModeAltFunctionPushPull, GpioPullNo, GpioSpeedVeryHigh, GpioAltFn5SPI1);
+ hal_gpio_init_ex(
+ handle->miso,
+ GpioModeAltFunctionPushPull,
+ GpioPullNo,
+ GpioSpeedVeryHigh,
+ GpioAltFn5SPI1);
+ hal_gpio_init_ex(
+ handle->mosi,
+ GpioModeAltFunctionPushPull,
+ GpioPullNo,
+ GpioSpeedVeryHigh,
+ GpioAltFn5SPI1);
+ hal_gpio_init_ex(
+ handle->sck,
+ GpioModeAltFunctionPushPull,
+ GpioPullNo,
+ GpioSpeedVeryHigh,
+ GpioAltFn5SPI1);
hal_gpio_write(handle->cs, false);
- } else if (event == FuriHalSpiBusHandleEventDeactivate) {
+ } else if(event == FuriHalSpiBusHandleEventDeactivate) {
hal_gpio_write(handle->cs, true);
hal_gpio_init(handle->miso, GpioModeAnalog, GpioPullNo, GpioSpeedLow);
@@ -164,103 +182,133 @@ inline static void furi_hal_spi_bus_r_handle_event_callback(FuriHalSpiBusHandle*
}
}
-static void furi_hal_spi_bus_handle_subghz_event_callback(FuriHalSpiBusHandle* handle, FuriHalSpiBusHandleEvent event) {
+static void furi_hal_spi_bus_handle_subghz_event_callback(
+ FuriHalSpiBusHandle* handle,
+ FuriHalSpiBusHandleEvent event) {
furi_hal_spi_bus_r_handle_event_callback(handle, event, &furi_hal_spi_preset_1edge_low_8m);
}
FuriHalSpiBusHandle furi_hal_spi_bus_handle_subghz = {
- .bus=&furi_hal_spi_bus_r,
- .callback=furi_hal_spi_bus_handle_subghz_event_callback,
- .miso=&gpio_spi_r_miso,
- .mosi=&gpio_spi_r_mosi,
- .sck=&gpio_spi_r_sck,
- .cs=&gpio_subghz_cs,
+ .bus = &furi_hal_spi_bus_r,
+ .callback = furi_hal_spi_bus_handle_subghz_event_callback,
+ .miso = &gpio_spi_r_miso,
+ .mosi = &gpio_spi_r_mosi,
+ .sck = &gpio_spi_r_sck,
+ .cs = &gpio_subghz_cs,
};
-static void furi_hal_spi_bus_handle_nfc_event_callback(FuriHalSpiBusHandle* handle, FuriHalSpiBusHandleEvent event) {
+static void furi_hal_spi_bus_handle_nfc_event_callback(
+ FuriHalSpiBusHandle* handle,
+ FuriHalSpiBusHandleEvent event) {
furi_hal_spi_bus_r_handle_event_callback(handle, event, &furi_hal_spi_preset_2edge_low_8m);
}
FuriHalSpiBusHandle furi_hal_spi_bus_handle_nfc = {
- .bus=&furi_hal_spi_bus_r,
- .callback=furi_hal_spi_bus_handle_nfc_event_callback,
- .miso=&gpio_spi_r_miso,
- .mosi=&gpio_spi_r_mosi,
- .sck=&gpio_spi_r_sck,
- .cs=&gpio_nfc_cs,
+ .bus = &furi_hal_spi_bus_r,
+ .callback = furi_hal_spi_bus_handle_nfc_event_callback,
+ .miso = &gpio_spi_r_miso,
+ .mosi = &gpio_spi_r_mosi,
+ .sck = &gpio_spi_r_sck,
+ .cs = &gpio_nfc_cs,
};
-static void furi_hal_spi_bus_handle_external_event_callback(FuriHalSpiBusHandle* handle, FuriHalSpiBusHandleEvent event) {
+static void furi_hal_spi_bus_handle_external_event_callback(
+ FuriHalSpiBusHandle* handle,
+ FuriHalSpiBusHandleEvent event) {
furi_hal_spi_bus_r_handle_event_callback(handle, event, &furi_hal_spi_preset_1edge_low_2m);
}
FuriHalSpiBusHandle furi_hal_spi_bus_handle_external = {
- .bus=&furi_hal_spi_bus_r,
- .callback=furi_hal_spi_bus_handle_external_event_callback,
- .miso=&gpio_ext_pa6,
- .mosi=&gpio_ext_pa7,
- .sck=&gpio_ext_pb3,
- .cs=&gpio_ext_pa4,
+ .bus = &furi_hal_spi_bus_r,
+ .callback = furi_hal_spi_bus_handle_external_event_callback,
+ .miso = &gpio_ext_pa6,
+ .mosi = &gpio_ext_pa7,
+ .sck = &gpio_ext_pb3,
+ .cs = &gpio_ext_pa4,
};
-inline static void furi_hal_spi_bus_d_handle_event_callback(FuriHalSpiBusHandle* handle, FuriHalSpiBusHandleEvent event, const LL_SPI_InitTypeDef* preset) {
- if (event == FuriHalSpiBusHandleEventInit) {
+inline static void furi_hal_spi_bus_d_handle_event_callback(
+ FuriHalSpiBusHandle* handle,
+ FuriHalSpiBusHandleEvent event,
+ const LL_SPI_InitTypeDef* preset) {
+ if(event == FuriHalSpiBusHandleEventInit) {
hal_gpio_write(handle->cs, true);
hal_gpio_init(handle->cs, GpioModeOutputPushPull, GpioPullUp, GpioSpeedVeryHigh);
- hal_gpio_init_ex(handle->miso, GpioModeAltFunctionPushPull, GpioPullNo, GpioSpeedVeryHigh, GpioAltFn5SPI2);
- hal_gpio_init_ex(handle->mosi, GpioModeAltFunctionPushPull, GpioPullNo, GpioSpeedVeryHigh, GpioAltFn5SPI2);
- hal_gpio_init_ex(handle->sck, GpioModeAltFunctionPushPull, GpioPullNo, GpioSpeedVeryHigh, GpioAltFn5SPI2);
-
- } else if (event == FuriHalSpiBusHandleEventDeinit) {
+ hal_gpio_init_ex(
+ handle->miso,
+ GpioModeAltFunctionPushPull,
+ GpioPullNo,
+ GpioSpeedVeryHigh,
+ GpioAltFn5SPI2);
+ hal_gpio_init_ex(
+ handle->mosi,
+ GpioModeAltFunctionPushPull,
+ GpioPullNo,
+ GpioSpeedVeryHigh,
+ GpioAltFn5SPI2);
+ hal_gpio_init_ex(
+ handle->sck,
+ GpioModeAltFunctionPushPull,
+ GpioPullNo,
+ GpioSpeedVeryHigh,
+ GpioAltFn5SPI2);
+
+ } else if(event == FuriHalSpiBusHandleEventDeinit) {
hal_gpio_write(handle->cs, true);
hal_gpio_init(handle->cs, GpioModeAnalog, GpioPullUp, GpioSpeedLow);
- } else if (event == FuriHalSpiBusHandleEventActivate) {
+ } else if(event == FuriHalSpiBusHandleEventActivate) {
LL_SPI_Init(handle->bus->spi, (LL_SPI_InitTypeDef*)preset);
LL_SPI_SetRxFIFOThreshold(handle->bus->spi, LL_SPI_RX_FIFO_TH_QUARTER);
LL_SPI_Enable(handle->bus->spi);
hal_gpio_write(handle->cs, false);
- } else if (event == FuriHalSpiBusHandleEventDeactivate) {
+ } else if(event == FuriHalSpiBusHandleEventDeactivate) {
hal_gpio_write(handle->cs, true);
LL_SPI_Disable(handle->bus->spi);
}
}
-static void furi_hal_spi_bus_handle_display_event_callback(FuriHalSpiBusHandle* handle, FuriHalSpiBusHandleEvent event) {
+static void furi_hal_spi_bus_handle_display_event_callback(
+ FuriHalSpiBusHandle* handle,
+ FuriHalSpiBusHandleEvent event) {
furi_hal_spi_bus_d_handle_event_callback(handle, event, &furi_hal_spi_preset_1edge_low_4m);
}
FuriHalSpiBusHandle furi_hal_spi_bus_handle_display = {
- .bus=&furi_hal_spi_bus_d,
- .callback=furi_hal_spi_bus_handle_display_event_callback,
- .miso=&gpio_spi_d_miso,
- .mosi=&gpio_spi_d_mosi,
- .sck=&gpio_spi_d_sck,
- .cs=&gpio_display_cs,
+ .bus = &furi_hal_spi_bus_d,
+ .callback = furi_hal_spi_bus_handle_display_event_callback,
+ .miso = &gpio_spi_d_miso,
+ .mosi = &gpio_spi_d_mosi,
+ .sck = &gpio_spi_d_sck,
+ .cs = &gpio_display_cs,
};
-static void furi_hal_spi_bus_handle_sd_fast_event_callback(FuriHalSpiBusHandle* handle, FuriHalSpiBusHandleEvent event) {
+static void furi_hal_spi_bus_handle_sd_fast_event_callback(
+ FuriHalSpiBusHandle* handle,
+ FuriHalSpiBusHandleEvent event) {
furi_hal_spi_bus_d_handle_event_callback(handle, event, &furi_hal_spi_preset_1edge_low_16m);
}
FuriHalSpiBusHandle furi_hal_spi_bus_handle_sd_fast = {
- .bus=&furi_hal_spi_bus_d,
- .callback=furi_hal_spi_bus_handle_sd_fast_event_callback,
- .miso=&gpio_spi_d_miso,
- .mosi=&gpio_spi_d_mosi,
- .sck=&gpio_spi_d_sck,
- .cs=&gpio_sdcard_cs,
+ .bus = &furi_hal_spi_bus_d,
+ .callback = furi_hal_spi_bus_handle_sd_fast_event_callback,
+ .miso = &gpio_spi_d_miso,
+ .mosi = &gpio_spi_d_mosi,
+ .sck = &gpio_spi_d_sck,
+ .cs = &gpio_sdcard_cs,
};
-static void furi_hal_spi_bus_handle_sd_slow_event_callback(FuriHalSpiBusHandle* handle, FuriHalSpiBusHandleEvent event) {
+static void furi_hal_spi_bus_handle_sd_slow_event_callback(
+ FuriHalSpiBusHandle* handle,
+ FuriHalSpiBusHandleEvent event) {
furi_hal_spi_bus_d_handle_event_callback(handle, event, &furi_hal_spi_preset_1edge_low_2m);
}
FuriHalSpiBusHandle furi_hal_spi_bus_handle_sd_slow = {
- .bus=&furi_hal_spi_bus_d,
- .callback=furi_hal_spi_bus_handle_sd_slow_event_callback,
- .miso=&gpio_spi_d_miso,
- .mosi=&gpio_spi_d_mosi,
- .sck=&gpio_spi_d_sck,
- .cs=&gpio_sdcard_cs,
+ .bus = &furi_hal_spi_bus_d,
+ .callback = furi_hal_spi_bus_handle_sd_slow_event_callback,
+ .miso = &gpio_spi_d_miso,
+ .mosi = &gpio_spi_d_mosi,
+ .sck = &gpio_spi_d_sck,
+ .cs = &gpio_sdcard_cs,
};
diff --git a/firmware/targets/f6/furi-hal/furi-hal-spi-config.h b/firmware/targets/f7/furi_hal/furi_hal_spi_config.h
index d483e625..3e4296a0 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-spi-config.h
+++ b/firmware/targets/f7/furi_hal/furi_hal_spi_config.h
@@ -1,6 +1,6 @@
#pragma once
-#include <furi-hal-spi-types.h>
+#include <furi_hal_spi_types.h>
#ifdef __cplusplus
extern "C" {
diff --git a/firmware/targets/f7/furi-hal/furi-hal-spi-types.h b/firmware/targets/f7/furi_hal/furi_hal_spi_types.h
index c7520f4a..1fb1c02b 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-spi-types.h
+++ b/firmware/targets/f7/furi_hal/furi_hal_spi_types.h
@@ -3,7 +3,7 @@
#include <stdint.h>
#include <stddef.h>
-#include <furi-hal-gpio.h>
+#include <furi_hal_gpio.h>
#include <stm32wbxx_ll_spi.h>
#include <stm32wbxx_ll_rcc.h>
@@ -45,7 +45,9 @@ typedef enum {
} FuriHalSpiBusHandleEvent;
/** FuriHal spi handle event callback */
-typedef void (*FuriHalSpiBusHandleEventCallback)(FuriHalSpiBusHandle* handle, FuriHalSpiBusHandleEvent event);
+typedef void (*FuriHalSpiBusHandleEventCallback)(
+ FuriHalSpiBusHandle* handle,
+ FuriHalSpiBusHandleEvent event);
/** FuriHal spi handle */
struct FuriHalSpiBusHandle {
diff --git a/firmware/targets/f6/furi-hal/furi-hal-subghz.c b/firmware/targets/f7/furi_hal/furi_hal_subghz.c
index ff5346c9..e2de0038 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-subghz.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_subghz.c
@@ -1,11 +1,11 @@
-#include "furi-hal-subghz.h"
-#include "furi-hal-version.h"
-#include "furi-hal-rtc.h"
-
-#include <furi-hal-gpio.h>
-#include <furi-hal-spi.h>
-#include <furi-hal-interrupt.h>
-#include <furi-hal-resources.h>
+#include "furi_hal_subghz.h"
+#include "furi_hal_version.h"
+#include "furi_hal_rtc.h"
+
+#include <furi_hal_gpio.h>
+#include <furi_hal_spi.h>
+#include <furi_hal_interrupt.h>
+#include <furi_hal_resources.h>
#include <furi.h>
#include <cc1101.h>
diff --git a/firmware/targets/f6/furi-hal/furi-hal-task.c b/firmware/targets/f7/furi_hal/furi_hal_task.c
index 433070d2..577586aa 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-task.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_task.c
@@ -1,4 +1,4 @@
-#include "furi-hal-task.h"
+#include "furi_hal_task.h"
//-----------------------------cmsis_os2.c-------------------------------
// helpers to get isr context
diff --git a/firmware/targets/f7/furi-hal/furi-hal-task.h b/firmware/targets/f7/furi_hal/furi_hal_task.h
index 8b157233..8b157233 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-task.h
+++ b/firmware/targets/f7/furi_hal/furi_hal_task.h
diff --git a/firmware/targets/f6/furi-hal/furi-hal-uart.c b/firmware/targets/f7/furi_hal/furi_hal_uart.c
index 92942a91..1ebba5d3 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-uart.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_uart.c
@@ -1,8 +1,8 @@
-#include <furi-hal-uart.h>
+#include <furi_hal_uart.h>
#include <stdbool.h>
#include <stm32wbxx_ll_lpuart.h>
#include <stm32wbxx_ll_usart.h>
-#include <furi-hal-resources.h>
+#include <furi_hal_resources.h>
#include <furi.h>
diff --git a/firmware/targets/f6/furi-hal/furi-hal-uart.h b/firmware/targets/f7/furi_hal/furi_hal_uart.h
index 53a45f1e..9224a0b2 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-uart.h
+++ b/firmware/targets/f7/furi_hal/furi_hal_uart.h
@@ -1,5 +1,5 @@
/**
- * @file furi-hal-uart.h
+ * @file furi_hal_uart.h
* @version 1.0
* @date 2021-11-19
*
diff --git a/firmware/targets/f7/furi-hal/furi-hal-usb.c b/firmware/targets/f7/furi_hal/furi_hal_usb.c
index 513c718c..59b37bbf 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-usb.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_usb.c
@@ -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.h>
#include "usb.h"
@@ -17,11 +17,11 @@ static const struct usb_string_descriptor dev_lang_desc = USB_ARRAY_DESC(USB_LAN
static uint32_t ubuf[0x20];
usbd_device udev;
-static usbd_respond usb_descriptor_get (usbd_ctlreq *req, void **address, uint16_t *length);
-static void susp_evt(usbd_device *dev, uint8_t event, uint8_t ep);
-static void wkup_evt(usbd_device *dev, uint8_t event, uint8_t ep);
+static usbd_respond usb_descriptor_get(usbd_ctlreq* req, void** address, uint16_t* length);
+static void susp_evt(usbd_device* dev, uint8_t event, uint8_t ep);
+static void wkup_evt(usbd_device* dev, uint8_t event, uint8_t ep);
-struct UsbCfg{
+struct UsbCfg {
osTimerId_t reconnect_tmr;
bool enabled;
bool connected;
@@ -31,10 +31,9 @@ static void furi_hal_usb_tmr_cb(void* context);
/* Low-level init */
void furi_hal_usb_init(void) {
-
LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
LL_PWR_EnableVddUSB();
-
+
GPIO_InitStruct.Pin = LL_GPIO_PIN_11 | LL_GPIO_PIN_12;
GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
@@ -59,18 +58,17 @@ void furi_hal_usb_init(void) {
}
void furi_hal_usb_set_config(UsbInterface* new_if) {
- if (new_if != usb_if_cur) {
- if (usb_config.enabled) {
+ if(new_if != usb_if_cur) {
+ if(usb_config.enabled) {
usb_if_next = new_if;
- if (usb_config.reconnect_tmr == NULL)
- usb_config.reconnect_tmr = osTimerNew(furi_hal_usb_tmr_cb, osTimerOnce, NULL, NULL);
+ if(usb_config.reconnect_tmr == NULL)
+ usb_config.reconnect_tmr =
+ osTimerNew(furi_hal_usb_tmr_cb, osTimerOnce, NULL, NULL);
furi_hal_usb_disable();
osTimerStart(usb_config.reconnect_tmr, USB_RECONNECT_DELAY);
- }
- else {
- if (usb_if_cur != NULL)
- usb_if_cur->deinit(&udev);
- if (new_if != NULL) {
+ } else {
+ if(usb_if_cur != NULL) usb_if_cur->deinit(&udev);
+ if(new_if != NULL) {
new_if->init(&udev, new_if);
FURI_LOG_I(TAG, "USB mode change");
usb_config.enabled = true;
@@ -85,7 +83,7 @@ UsbInterface* furi_hal_usb_get_config() {
}
void furi_hal_usb_disable() {
- if (usb_config.enabled) {
+ if(usb_config.enabled) {
susp_evt(&udev, 0, 0);
usbd_connect(&udev, false);
usb_config.enabled = false;
@@ -94,7 +92,7 @@ void furi_hal_usb_disable() {
}
void furi_hal_usb_enable() {
- if ((!usb_config.enabled) && (usb_if_cur != NULL)) {
+ if((!usb_config.enabled) && (usb_if_cur != NULL)) {
usbd_connect(&udev, true);
usb_config.enabled = true;
FURI_LOG_I(TAG, "USB Enable");
@@ -106,15 +104,14 @@ static void furi_hal_usb_tmr_cb(void* context) {
}
/* Get device / configuration descriptors */
-static usbd_respond usb_descriptor_get(usbd_ctlreq *req, void **address, uint16_t *length) {
+static usbd_respond usb_descriptor_get(usbd_ctlreq* req, void** address, uint16_t* length) {
const uint8_t dtype = req->wValue >> 8;
const uint8_t dnumber = req->wValue & 0xFF;
const void* desc;
uint16_t len = 0;
- if (usb_if_cur == NULL)
- return usbd_fail;
+ if(usb_if_cur == NULL) return usbd_fail;
- switch (dtype) {
+ switch(dtype) {
case USB_DTYPE_DEVICE:
desc = usb_if_cur->dev_descr;
break;
@@ -123,24 +120,23 @@ static usbd_respond usb_descriptor_get(usbd_ctlreq *req, void **address, uint16_
len = ((struct usb_string_descriptor*)(usb_if_cur->cfg_descr))->wString[0];
break;
case USB_DTYPE_STRING:
- if (dnumber == UsbDevLang) {
+ if(dnumber == UsbDevLang) {
desc = &dev_lang_desc;
- } else if (dnumber == UsbDevManuf) {
+ } else if(dnumber == UsbDevManuf) {
desc = usb_if_cur->str_manuf_descr;
- } else if (dnumber == UsbDevProduct) {
+ } else if(dnumber == UsbDevProduct) {
desc = usb_if_cur->str_prod_descr;
- } else if (dnumber == UsbDevSerial) {
+ } else if(dnumber == UsbDevSerial) {
desc = usb_if_cur->str_serial_descr;
- } else
+ } else
return usbd_fail;
break;
default:
return usbd_fail;
}
- if (desc == NULL)
- return usbd_fail;
+ if(desc == NULL) return usbd_fail;
- if (len == 0) {
+ if(len == 0) {
len = ((struct usb_header_descriptor*)desc)->bLength;
}
*address = (void*)desc;
@@ -148,16 +144,16 @@ static usbd_respond usb_descriptor_get(usbd_ctlreq *req, void **address, uint16_
return usbd_ack;
}
-static void susp_evt(usbd_device *dev, uint8_t event, uint8_t ep) {
- if ((usb_if_cur != NULL) && (usb_config.connected == true)) {
+static void susp_evt(usbd_device* dev, uint8_t event, uint8_t ep) {
+ if((usb_if_cur != NULL) && (usb_config.connected == true)) {
usb_config.connected = false;
usb_if_cur->suspend(&udev);
}
}
-static void wkup_evt(usbd_device *dev, uint8_t event, uint8_t ep) {
- if ((usb_if_cur != NULL) && (usb_config.connected == false)) {
+static void wkup_evt(usbd_device* dev, uint8_t event, uint8_t ep) {
+ if((usb_if_cur != NULL) && (usb_config.connected == false)) {
usb_config.connected = true;
usb_if_cur->wakeup(&udev);
- }
+ }
}
diff --git a/firmware/targets/f7/furi_hal/furi_hal_usb_cdc.c b/firmware/targets/f7/furi_hal/furi_hal_usb_cdc.c
new file mode 100644
index 00000000..26fd40c3
--- /dev/null
+++ b/firmware/targets/f7/furi_hal/furi_hal_usb_cdc.c
@@ -0,0 +1,664 @@
+#include "furi_hal_version.h"
+#include "furi_hal_usb_i.h"
+#include "furi_hal_usb.h"
+#include "furi_hal_usb_cdc_i.h"
+#include <furi.h>
+
+#include "usb.h"
+#include "usb_cdc.h"
+
+#define CDC0_RXD_EP 0x01
+#define CDC0_TXD_EP 0x82
+#define CDC0_NTF_EP 0x83
+
+#define CDC1_RXD_EP 0x04
+#define CDC1_TXD_EP 0x85
+#define CDC1_NTF_EP 0x86
+
+#define CDC_NTF_SZ 0x08
+
+#define IF_NUM_MAX 2
+
+struct CdcIadDescriptor {
+ struct usb_iad_descriptor comm_iad;
+ struct usb_interface_descriptor comm;
+ struct usb_cdc_header_desc cdc_hdr;
+ struct usb_cdc_call_mgmt_desc cdc_mgmt;
+ struct usb_cdc_acm_desc cdc_acm;
+ struct usb_cdc_union_desc cdc_union;
+ struct usb_endpoint_descriptor comm_ep;
+ struct usb_interface_descriptor data;
+ struct usb_endpoint_descriptor data_eprx;
+ struct usb_endpoint_descriptor data_eptx;
+};
+
+struct CdcConfigDescriptorSingle {
+ struct usb_config_descriptor config;
+ struct CdcIadDescriptor iad_0;
+} __attribute__((packed));
+
+struct CdcConfigDescriptorDual {
+ struct usb_config_descriptor config;
+ struct CdcIadDescriptor iad_0;
+ struct CdcIadDescriptor iad_1;
+} __attribute__((packed));
+
+static const struct usb_string_descriptor dev_manuf_desc = USB_STRING_DESC("Flipper Devices Inc.");
+
+/* Device descriptor */
+static const struct usb_device_descriptor cdc_device_desc = {
+ .bLength = sizeof(struct usb_device_descriptor),
+ .bDescriptorType = USB_DTYPE_DEVICE,
+ .bcdUSB = VERSION_BCD(2, 0, 0),
+ .bDeviceClass = USB_CLASS_IAD,
+ .bDeviceSubClass = USB_SUBCLASS_IAD,
+ .bDeviceProtocol = USB_PROTO_IAD,
+ .bMaxPacketSize0 = USB_EP0_SIZE,
+ .idVendor = 0x0483,
+ .idProduct = 0x5740,
+ .bcdDevice = VERSION_BCD(1, 0, 0),
+ .iManufacturer = UsbDevManuf,
+ .iProduct = UsbDevProduct,
+ .iSerialNumber = UsbDevSerial,
+ .bNumConfigurations = 1,
+};
+
+/* Device configuration descriptor - single mode*/
+static const struct CdcConfigDescriptorSingle cdc_cfg_desc_single = {
+ .config =
+ {
+ .bLength = sizeof(struct usb_config_descriptor),
+ .bDescriptorType = USB_DTYPE_CONFIGURATION,
+ .wTotalLength = sizeof(struct CdcConfigDescriptorSingle),
+ .bNumInterfaces = 2,
+
+ .bConfigurationValue = 1,
+ .iConfiguration = NO_DESCRIPTOR,
+ .bmAttributes = USB_CFG_ATTR_RESERVED | USB_CFG_ATTR_SELFPOWERED,
+ .bMaxPower = USB_CFG_POWER_MA(100),
+ },
+ .iad_0 =
+ {
+ .comm_iad =
+ {
+ .bLength = sizeof(struct usb_iad_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFASEASSOC,
+ .bFirstInterface = 0,
+ .bInterfaceCount = 2,
+ .bFunctionClass = USB_CLASS_CDC,
+ .bFunctionSubClass = USB_CDC_SUBCLASS_ACM,
+ .bFunctionProtocol = USB_PROTO_NONE,
+ .iFunction = NO_DESCRIPTOR,
+ },
+ .comm =
+ {
+ .bLength = sizeof(struct usb_interface_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFACE,
+ .bInterfaceNumber = 0,
+ .bAlternateSetting = 0,
+ .bNumEndpoints = 1,
+ .bInterfaceClass = USB_CLASS_CDC,
+ .bInterfaceSubClass = USB_CDC_SUBCLASS_ACM,
+ .bInterfaceProtocol = USB_PROTO_NONE,
+ .iInterface = NO_DESCRIPTOR,
+ },
+ .cdc_hdr =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_header_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_HEADER,
+ .bcdCDC = VERSION_BCD(1, 1, 0),
+ },
+ .cdc_mgmt =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_call_mgmt_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_CALL_MANAGEMENT,
+ .bmCapabilities = 0,
+ .bDataInterface = 1,
+ },
+ .cdc_acm =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_acm_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_ACM,
+ .bmCapabilities = 0,
+ },
+ .cdc_union =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_union_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_UNION,
+ .bMasterInterface0 = 0,
+ .bSlaveInterface0 = 1,
+ },
+ .comm_ep =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = CDC0_NTF_EP,
+ .bmAttributes = USB_EPTYPE_INTERRUPT,
+ .wMaxPacketSize = CDC_NTF_SZ,
+ .bInterval = 0xFF,
+ },
+ .data =
+ {
+ .bLength = sizeof(struct usb_interface_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFACE,
+ .bInterfaceNumber = 1,
+ .bAlternateSetting = 0,
+ .bNumEndpoints = 2,
+ .bInterfaceClass = USB_CLASS_CDC_DATA,
+ .bInterfaceSubClass = USB_SUBCLASS_NONE,
+ .bInterfaceProtocol = USB_PROTO_NONE,
+ .iInterface = NO_DESCRIPTOR,
+ },
+ .data_eprx =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = CDC0_RXD_EP,
+ .bmAttributes = USB_EPTYPE_BULK,
+ .wMaxPacketSize = CDC_DATA_SZ,
+ .bInterval = 0x01,
+ },
+ .data_eptx =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = CDC0_TXD_EP,
+ .bmAttributes = USB_EPTYPE_BULK,
+ .wMaxPacketSize = CDC_DATA_SZ,
+ .bInterval = 0x01,
+ },
+ },
+};
+
+/* Device configuration descriptor - dual mode*/
+static const struct CdcConfigDescriptorDual
+ cdc_cfg_desc_dual =
+ {
+ .config =
+ {
+ .bLength = sizeof(struct usb_config_descriptor),
+ .bDescriptorType = USB_DTYPE_CONFIGURATION,
+ .wTotalLength = sizeof(struct CdcConfigDescriptorDual),
+ .bNumInterfaces = 4,
+
+ .bConfigurationValue = 1,
+ .iConfiguration = NO_DESCRIPTOR,
+ .bmAttributes = USB_CFG_ATTR_RESERVED | USB_CFG_ATTR_SELFPOWERED,
+ .bMaxPower = USB_CFG_POWER_MA(100),
+ },
+ .iad_0 =
+ {
+ .comm_iad =
+ {
+ .bLength = sizeof(struct usb_iad_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFASEASSOC,
+ .bFirstInterface = 0,
+ .bInterfaceCount = 2,
+ .bFunctionClass = USB_CLASS_CDC,
+ .bFunctionSubClass = USB_CDC_SUBCLASS_ACM,
+ .bFunctionProtocol = USB_PROTO_NONE,
+ .iFunction = NO_DESCRIPTOR,
+ },
+ .comm =
+ {
+ .bLength = sizeof(struct usb_interface_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFACE,
+ .bInterfaceNumber = 0,
+ .bAlternateSetting = 0,
+ .bNumEndpoints = 1,
+ .bInterfaceClass = USB_CLASS_CDC,
+ .bInterfaceSubClass = USB_CDC_SUBCLASS_ACM,
+ .bInterfaceProtocol = USB_PROTO_NONE,
+ .iInterface = NO_DESCRIPTOR,
+ },
+ .cdc_hdr =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_header_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_HEADER,
+ .bcdCDC = VERSION_BCD(1, 1, 0),
+ },
+ .cdc_mgmt =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_call_mgmt_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_CALL_MANAGEMENT,
+ .bmCapabilities = 0,
+ .bDataInterface = 1,
+ },
+ .cdc_acm =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_acm_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_ACM,
+ .bmCapabilities = 0,
+ },
+ .cdc_union =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_union_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_UNION,
+ .bMasterInterface0 = 0,
+ .bSlaveInterface0 = 1,
+ },
+ .comm_ep =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = CDC0_NTF_EP,
+ .bmAttributes = USB_EPTYPE_INTERRUPT,
+ .wMaxPacketSize = CDC_NTF_SZ,
+ .bInterval = 0xFF,
+ },
+ .data =
+ {
+ .bLength = sizeof(struct usb_interface_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFACE,
+ .bInterfaceNumber = 1,
+ .bAlternateSetting = 0,
+ .bNumEndpoints = 2,
+ .bInterfaceClass = USB_CLASS_CDC_DATA,
+ .bInterfaceSubClass = USB_SUBCLASS_NONE,
+ .bInterfaceProtocol = USB_PROTO_NONE,
+ .iInterface = NO_DESCRIPTOR,
+ },
+ .data_eprx =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = CDC0_RXD_EP,
+ .bmAttributes = USB_EPTYPE_BULK,
+ .wMaxPacketSize = CDC_DATA_SZ,
+ .bInterval = 0x01,
+ },
+ .data_eptx =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = CDC0_TXD_EP,
+ .bmAttributes = USB_EPTYPE_BULK,
+ .wMaxPacketSize = CDC_DATA_SZ,
+ .bInterval = 0x01,
+ },
+ },
+ .iad_1 =
+ {
+ .comm_iad =
+ {
+ .bLength = sizeof(struct usb_iad_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFASEASSOC,
+ .bFirstInterface = 2,
+ .bInterfaceCount = 2,
+ .bFunctionClass = USB_CLASS_CDC,
+ .bFunctionSubClass = USB_CDC_SUBCLASS_ACM,
+ .bFunctionProtocol = USB_PROTO_NONE,
+ .iFunction = NO_DESCRIPTOR,
+ },
+ .comm =
+ {
+ .bLength = sizeof(struct usb_interface_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFACE,
+ .bInterfaceNumber = 2 + 0,
+ .bAlternateSetting = 0,
+ .bNumEndpoints = 1,
+ .bInterfaceClass = USB_CLASS_CDC,
+ .bInterfaceSubClass = USB_CDC_SUBCLASS_ACM,
+ .bInterfaceProtocol = USB_PROTO_NONE,
+ .iInterface = NO_DESCRIPTOR,
+ },
+ .cdc_hdr =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_header_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_HEADER,
+ .bcdCDC = VERSION_BCD(1, 1, 0),
+ },
+ .cdc_mgmt =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_call_mgmt_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_CALL_MANAGEMENT,
+ .bmCapabilities = 0,
+ .bDataInterface = 2 + 1,
+ },
+ .cdc_acm =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_acm_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_ACM,
+ .bmCapabilities = 0,
+ },
+ .cdc_union =
+ {
+ .bFunctionLength = sizeof(struct usb_cdc_union_desc),
+ .bDescriptorType = USB_DTYPE_CS_INTERFACE,
+ .bDescriptorSubType = USB_DTYPE_CDC_UNION,
+ .bMasterInterface0 = 2 + 0,
+ .bSlaveInterface0 = 2 + 1,
+ },
+ .comm_ep =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = CDC1_NTF_EP,
+ .bmAttributes = USB_EPTYPE_INTERRUPT,
+ .wMaxPacketSize = CDC_NTF_SZ,
+ .bInterval = 0xFF,
+ },
+ .data =
+ {
+ .bLength = sizeof(struct usb_interface_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFACE,
+ .bInterfaceNumber = 2 + 1,
+ .bAlternateSetting = 0,
+ .bNumEndpoints = 2,
+ .bInterfaceClass = USB_CLASS_CDC_DATA,
+ .bInterfaceSubClass = USB_SUBCLASS_NONE,
+ .bInterfaceProtocol = USB_PROTO_NONE,
+ .iInterface = NO_DESCRIPTOR,
+ },
+ .data_eprx =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = CDC1_RXD_EP,
+ .bmAttributes = USB_EPTYPE_BULK,
+ .wMaxPacketSize = CDC_DATA_SZ,
+ .bInterval = 0x01,
+ },
+ .data_eptx =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = CDC1_TXD_EP,
+ .bmAttributes = USB_EPTYPE_BULK,
+ .wMaxPacketSize = CDC_DATA_SZ,
+ .bInterval = 0x01,
+ },
+ },
+};
+
+static struct usb_cdc_line_coding cdc_config[IF_NUM_MAX] = {};
+static uint8_t cdc_ctrl_line_state[IF_NUM_MAX];
+
+static void cdc_init(usbd_device* dev, UsbInterface* intf);
+static void cdc_deinit(usbd_device* dev);
+static void cdc_on_wakeup(usbd_device* dev);
+static void cdc_on_suspend(usbd_device* dev);
+
+static usbd_respond cdc_ep_config(usbd_device* dev, uint8_t cfg);
+static usbd_respond cdc_control(usbd_device* dev, usbd_ctlreq* req, usbd_rqc_callback* callback);
+static usbd_device* usb_dev;
+static UsbInterface* cdc_if_cur = NULL;
+static bool connected = false;
+static CdcCallbacks* callbacks[IF_NUM_MAX] = {NULL};
+static void* cb_ctx[IF_NUM_MAX];
+
+UsbInterface usb_cdc_single = {
+ .init = cdc_init,
+ .deinit = cdc_deinit,
+ .wakeup = cdc_on_wakeup,
+ .suspend = cdc_on_suspend,
+
+ .dev_descr = (struct usb_device_descriptor*)&cdc_device_desc,
+
+ .str_manuf_descr = (void*)&dev_manuf_desc,
+ .str_prod_descr = NULL,
+ .str_serial_descr = NULL,
+
+ .cfg_descr = (void*)&cdc_cfg_desc_single,
+};
+
+UsbInterface usb_cdc_dual = {
+ .init = cdc_init,
+ .deinit = cdc_deinit,
+ .wakeup = cdc_on_wakeup,
+ .suspend = cdc_on_suspend,
+
+ .dev_descr = (struct usb_device_descriptor*)&cdc_device_desc,
+
+ .str_manuf_descr = (void*)&dev_manuf_desc,
+ .str_prod_descr = NULL,
+ .str_serial_descr = NULL,
+
+ .cfg_descr = (void*)&cdc_cfg_desc_dual,
+};
+
+static void cdc_init(usbd_device* dev, UsbInterface* intf) {
+ usb_dev = dev;
+ cdc_if_cur = intf;
+
+ char* name = (char*)furi_hal_version_get_device_name_ptr();
+ uint8_t len = (name == NULL) ? (0) : (strlen(name));
+ struct usb_string_descriptor* dev_prod_desc = furi_alloc(len * 2 + 2);
+ dev_prod_desc->bLength = len * 2 + 2;
+ dev_prod_desc->bDescriptorType = USB_DTYPE_STRING;
+ for(uint8_t i = 0; i < len; i++) dev_prod_desc->wString[i] = name[i];
+
+ name = (char*)furi_hal_version_get_name_ptr();
+ len = (name == NULL) ? (0) : (strlen(name));
+ struct usb_string_descriptor* dev_serial_desc = furi_alloc((len + 5) * 2 + 2);
+ dev_serial_desc->bLength = (len + 5) * 2 + 2;
+ dev_serial_desc->bDescriptorType = USB_DTYPE_STRING;
+ memcpy(dev_serial_desc->wString, "f\0l\0i\0p\0_\0", 5 * 2);
+ for(uint8_t i = 0; i < len; i++) dev_serial_desc->wString[i + 5] = name[i];
+
+ cdc_if_cur->str_prod_descr = dev_prod_desc;
+ cdc_if_cur->str_serial_descr = dev_serial_desc;
+
+ usbd_reg_config(dev, cdc_ep_config);
+ usbd_reg_control(dev, cdc_control);
+
+ usbd_connect(dev, true);
+}
+
+static void cdc_deinit(usbd_device* dev) {
+ usbd_reg_config(dev, NULL);
+ usbd_reg_control(dev, NULL);
+
+ free(cdc_if_cur->str_prod_descr);
+ free(cdc_if_cur->str_serial_descr);
+
+ cdc_if_cur = NULL;
+}
+
+void furi_hal_cdc_set_callbacks(uint8_t if_num, CdcCallbacks* cb, void* context) {
+ furi_assert(if_num < IF_NUM_MAX);
+
+ if(callbacks[if_num] != NULL) {
+ if(callbacks[if_num]->state_callback != NULL) {
+ if(connected == true) callbacks[if_num]->state_callback(cb_ctx[if_num], 0);
+ }
+ }
+
+ callbacks[if_num] = cb;
+ cb_ctx[if_num] = context;
+
+ if(callbacks[if_num] != NULL) {
+ if(callbacks[if_num]->state_callback != NULL) {
+ if(connected == true) callbacks[if_num]->state_callback(cb_ctx[if_num], 1);
+ }
+ }
+}
+
+struct usb_cdc_line_coding* furi_hal_cdc_get_port_settings(uint8_t if_num) {
+ furi_assert(if_num < IF_NUM_MAX);
+ return &cdc_config[if_num];
+}
+
+uint8_t furi_hal_cdc_get_ctrl_line_state(uint8_t if_num) {
+ furi_assert(if_num < IF_NUM_MAX);
+ return cdc_ctrl_line_state[if_num];
+}
+
+void furi_hal_cdc_send(uint8_t if_num, uint8_t* buf, uint16_t len) {
+ if(if_num == 0)
+ usbd_ep_write(usb_dev, CDC0_TXD_EP, buf, len);
+ else
+ usbd_ep_write(usb_dev, CDC1_TXD_EP, buf, len);
+}
+
+int32_t furi_hal_cdc_receive(uint8_t if_num, uint8_t* buf, uint16_t max_len) {
+ int32_t len = 0;
+ if(if_num == 0)
+ len = usbd_ep_read(usb_dev, CDC0_RXD_EP, buf, max_len);
+ else
+ len = usbd_ep_read(usb_dev, CDC1_RXD_EP, buf, max_len);
+ return ((len < 0) ? 0 : len);
+}
+
+static void cdc_on_wakeup(usbd_device* dev) {
+ connected = true;
+ for(uint8_t i = 0; i < IF_NUM_MAX; i++) {
+ if(callbacks[i] != NULL) {
+ if(callbacks[i]->state_callback != NULL) callbacks[i]->state_callback(cb_ctx[i], 1);
+ }
+ }
+}
+
+static void cdc_on_suspend(usbd_device* dev) {
+ connected = false;
+ for(uint8_t i = 0; i < IF_NUM_MAX; i++) {
+ cdc_ctrl_line_state[i] = 0;
+ if(callbacks[i] != NULL) {
+ if(callbacks[i]->state_callback != NULL) callbacks[i]->state_callback(cb_ctx[i], 0);
+ }
+ }
+}
+
+static void cdc_rx_ep_callback(usbd_device* dev, uint8_t event, uint8_t ep) {
+ uint8_t if_num = 0;
+ if(ep == CDC0_RXD_EP)
+ if_num = 0;
+ else
+ if_num = 1;
+
+ if(callbacks[if_num] != NULL) {
+ if(callbacks[if_num]->rx_ep_callback != NULL)
+ callbacks[if_num]->rx_ep_callback(cb_ctx[if_num]);
+ }
+}
+
+static void cdc_tx_ep_callback(usbd_device* dev, uint8_t event, uint8_t ep) {
+ uint8_t if_num = 0;
+ if(ep == CDC0_TXD_EP)
+ if_num = 0;
+ else
+ if_num = 1;
+
+ if(callbacks[if_num] != NULL) {
+ if(callbacks[if_num]->tx_ep_callback != NULL)
+ callbacks[if_num]->tx_ep_callback(cb_ctx[if_num]);
+ }
+}
+
+static void cdc_txrx_ep_callback(usbd_device* dev, uint8_t event, uint8_t ep) {
+ if(event == usbd_evt_eptx) {
+ cdc_tx_ep_callback(dev, event, ep);
+ } else {
+ cdc_rx_ep_callback(dev, event, ep);
+ }
+}
+
+/* Configure endpoints */
+static usbd_respond cdc_ep_config(usbd_device* dev, uint8_t cfg) {
+ uint8_t if_cnt = ((struct usb_config_descriptor*)(cdc_if_cur->cfg_descr))->bNumInterfaces;
+ switch(cfg) {
+ case 0:
+ /* deconfiguring device */
+ if(if_cnt == 4) {
+ usbd_ep_deconfig(dev, CDC1_NTF_EP);
+ usbd_ep_deconfig(dev, CDC1_TXD_EP);
+ usbd_ep_deconfig(dev, CDC1_RXD_EP);
+ usbd_reg_endpoint(dev, CDC1_RXD_EP, 0);
+ usbd_reg_endpoint(dev, CDC1_TXD_EP, 0);
+ }
+ usbd_ep_deconfig(dev, CDC0_NTF_EP);
+ usbd_ep_deconfig(dev, CDC0_TXD_EP);
+ usbd_ep_deconfig(dev, CDC0_RXD_EP);
+ usbd_reg_endpoint(dev, CDC0_RXD_EP, 0);
+ usbd_reg_endpoint(dev, CDC0_TXD_EP, 0);
+ return usbd_ack;
+ case 1:
+ /* configuring device */
+ if((CDC0_TXD_EP & 0x7F) != (CDC0_RXD_EP & 0x7F)) {
+ // 2x unidirectional endpoint mode with dualbuf
+ usbd_ep_config(dev, CDC0_RXD_EP, USB_EPTYPE_BULK | USB_EPTYPE_DBLBUF, CDC_DATA_SZ);
+ usbd_ep_config(dev, CDC0_TXD_EP, USB_EPTYPE_BULK | USB_EPTYPE_DBLBUF, CDC_DATA_SZ);
+ usbd_ep_config(dev, CDC0_NTF_EP, USB_EPTYPE_INTERRUPT, CDC_NTF_SZ);
+ usbd_reg_endpoint(dev, CDC0_RXD_EP, cdc_rx_ep_callback);
+ usbd_reg_endpoint(dev, CDC0_TXD_EP, cdc_tx_ep_callback);
+ } else {
+ // 1x bidirectional endpoint mode
+ usbd_ep_config(dev, CDC0_RXD_EP, USB_EPTYPE_BULK, CDC_DATA_SZ);
+ usbd_ep_config(dev, CDC0_TXD_EP, USB_EPTYPE_BULK, CDC_DATA_SZ);
+ usbd_ep_config(dev, CDC0_NTF_EP, USB_EPTYPE_INTERRUPT, CDC_NTF_SZ);
+ usbd_reg_endpoint(dev, CDC0_RXD_EP, cdc_txrx_ep_callback);
+ usbd_reg_endpoint(dev, CDC0_TXD_EP, cdc_txrx_ep_callback);
+ }
+ usbd_ep_write(dev, CDC0_TXD_EP, 0, 0);
+
+ if(if_cnt == 4) {
+ if((CDC1_TXD_EP & 0x7F) != (CDC1_RXD_EP & 0x7F)) {
+ usbd_ep_config(dev, CDC1_RXD_EP, USB_EPTYPE_BULK | USB_EPTYPE_DBLBUF, CDC_DATA_SZ);
+ usbd_ep_config(dev, CDC1_TXD_EP, USB_EPTYPE_BULK | USB_EPTYPE_DBLBUF, CDC_DATA_SZ);
+ usbd_ep_config(dev, CDC1_NTF_EP, USB_EPTYPE_INTERRUPT, CDC_NTF_SZ);
+ usbd_reg_endpoint(dev, CDC1_RXD_EP, cdc_rx_ep_callback);
+ usbd_reg_endpoint(dev, CDC1_TXD_EP, cdc_tx_ep_callback);
+ } else {
+ usbd_ep_config(dev, CDC1_RXD_EP, USB_EPTYPE_BULK, CDC_DATA_SZ);
+ usbd_ep_config(dev, CDC1_TXD_EP, USB_EPTYPE_BULK, CDC_DATA_SZ);
+ usbd_ep_config(dev, CDC1_NTF_EP, USB_EPTYPE_INTERRUPT, CDC_NTF_SZ);
+ usbd_reg_endpoint(dev, CDC1_RXD_EP, cdc_txrx_ep_callback);
+ usbd_reg_endpoint(dev, CDC1_TXD_EP, cdc_txrx_ep_callback);
+ }
+ usbd_ep_write(dev, CDC1_TXD_EP, 0, 0);
+ }
+ return usbd_ack;
+ default:
+ return usbd_fail;
+ }
+}
+
+/* Control requests handler */
+static usbd_respond cdc_control(usbd_device* dev, usbd_ctlreq* req, usbd_rqc_callback* callback) {
+ /* CDC control requests */
+ uint8_t if_num = 0;
+ if(((USB_REQ_RECIPIENT | USB_REQ_TYPE) & req->bmRequestType) ==
+ (USB_REQ_INTERFACE | USB_REQ_CLASS) &&
+ (req->wIndex == 0 || req->wIndex == 2)) {
+ if(req->wIndex == 0)
+ if_num = 0;
+ else
+ if_num = 1;
+
+ switch(req->bRequest) {
+ case USB_CDC_SET_CONTROL_LINE_STATE:
+ if(callbacks[if_num] != NULL) {
+ cdc_ctrl_line_state[if_num] = req->wValue;
+ if(callbacks[if_num]->ctrl_line_callback != NULL)
+ callbacks[if_num]->ctrl_line_callback(
+ cb_ctx[if_num], cdc_ctrl_line_state[if_num]);
+ }
+ return usbd_ack;
+ case USB_CDC_SET_LINE_CODING:
+ memcpy(&cdc_config[if_num], req->data, sizeof(cdc_config[0]));
+ if(callbacks[if_num] != NULL) {
+ if(callbacks[if_num]->config_callback != NULL)
+ callbacks[if_num]->config_callback(cb_ctx[if_num], &cdc_config[if_num]);
+ }
+ return usbd_ack;
+ case USB_CDC_GET_LINE_CODING:
+ dev->status.data_ptr = &cdc_config[if_num];
+ dev->status.data_count = sizeof(cdc_config[0]);
+ return usbd_ack;
+ default:
+ return usbd_fail;
+ }
+ }
+ return usbd_fail;
+}
diff --git a/firmware/targets/f7/furi-hal/furi-hal-usb-cdc_i.h b/firmware/targets/f7/furi_hal/furi_hal_usb_cdc_i.h
index 9af1e76a..4ba150eb 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-usb-cdc_i.h
+++ b/firmware/targets/f7/furi_hal/furi_hal_usb_cdc_i.h
@@ -1,7 +1,7 @@
#pragma once
#include <stdint.h>
-#include "usb_cdc.h"
+#include "usb_cdc.h"
#define CDC_DATA_SZ 64
diff --git a/firmware/targets/f7/furi_hal/furi_hal_usb_hid.c b/firmware/targets/f7/furi_hal/furi_hal_usb_hid.c
new file mode 100644
index 00000000..098acc73
--- /dev/null
+++ b/firmware/targets/f7/furi_hal/furi_hal_usb_hid.c
@@ -0,0 +1,482 @@
+#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"
+#include "usb_hid.h"
+#include "hid_usage_desktop.h"
+#include "hid_usage_button.h"
+#include "hid_usage_keyboard.h"
+#include "hid_usage_led.h"
+
+#define HID_EP_IN 0x81
+#define HID_EP_OUT 0x01
+#define HID_EP_SZ 0x10
+
+#define HID_KB_MAX_KEYS 6
+#define HID_CONSUMER_MAX_KEYS 2
+
+#define HID_PAGE_CONSUMER 0x0C
+#define HID_CONSUMER_CONTROL 0x01
+
+struct HidIadDescriptor {
+ struct usb_iad_descriptor hid_iad;
+ struct usb_interface_descriptor hid;
+ struct usb_hid_descriptor hid_desc;
+ struct usb_endpoint_descriptor hid_ep_in;
+ struct usb_endpoint_descriptor hid_ep_out;
+};
+
+struct HidConfigDescriptor {
+ struct usb_config_descriptor config;
+ struct HidIadDescriptor iad_0;
+} __attribute__((packed));
+
+enum HidReportId {
+ ReportIdKeyboard = 1,
+ ReportIdMouse = 2,
+ ReportIdConsumer = 3,
+};
+
+/* HID report: keyboard+mouse */
+static const uint8_t hid_report_desc[] = {
+ HID_USAGE_PAGE(HID_PAGE_DESKTOP),
+ HID_USAGE(HID_DESKTOP_KEYBOARD),
+ HID_COLLECTION(HID_APPLICATION_COLLECTION),
+ HID_REPORT_ID(ReportIdKeyboard),
+ HID_USAGE_PAGE(HID_DESKTOP_KEYPAD),
+ HID_USAGE_MINIMUM(HID_KEYBOARD_L_CTRL),
+ HID_USAGE_MAXIMUM(HID_KEYBOARD_R_GUI),
+ HID_LOGICAL_MINIMUM(0),
+ HID_LOGICAL_MAXIMUM(1),
+ HID_REPORT_SIZE(1),
+ HID_REPORT_COUNT(8),
+ HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
+ HID_REPORT_COUNT(1),
+ HID_REPORT_SIZE(8),
+ HID_INPUT(HID_IOF_CONSTANT | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
+ HID_USAGE_PAGE(HID_PAGE_LED),
+ HID_REPORT_COUNT(8),
+ HID_REPORT_SIZE(1),
+ HID_USAGE_MINIMUM(1),
+ HID_USAGE_MAXIMUM(8),
+ HID_OUTPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
+ HID_REPORT_COUNT(HID_KB_MAX_KEYS),
+ HID_REPORT_SIZE(8),
+ HID_LOGICAL_MINIMUM(0),
+ HID_LOGICAL_MAXIMUM(101),
+ HID_USAGE_PAGE(HID_DESKTOP_KEYPAD),
+ HID_USAGE_MINIMUM(0),
+ HID_USAGE_MAXIMUM(101),
+ HID_INPUT(HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE),
+ HID_END_COLLECTION,
+ HID_USAGE_PAGE(HID_PAGE_DESKTOP),
+ HID_USAGE(HID_DESKTOP_MOUSE),
+ HID_COLLECTION(HID_APPLICATION_COLLECTION),
+ HID_USAGE(HID_DESKTOP_POINTER),
+ HID_COLLECTION(HID_PHYSICAL_COLLECTION),
+ HID_REPORT_ID(ReportIdMouse),
+ HID_USAGE_PAGE(HID_PAGE_BUTTON),
+ HID_USAGE_MINIMUM(1),
+ HID_USAGE_MAXIMUM(3),
+ HID_LOGICAL_MINIMUM(0),
+ HID_LOGICAL_MAXIMUM(1),
+ HID_REPORT_COUNT(3),
+ HID_REPORT_SIZE(1),
+ HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
+ HID_REPORT_SIZE(1),
+ HID_REPORT_COUNT(5),
+ HID_INPUT(HID_IOF_CONSTANT | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
+ HID_USAGE_PAGE(HID_PAGE_DESKTOP),
+ HID_USAGE(HID_DESKTOP_X),
+ HID_USAGE(HID_DESKTOP_Y),
+ HID_USAGE(HID_DESKTOP_WHEEL),
+ HID_LOGICAL_MINIMUM(-127),
+ HID_LOGICAL_MAXIMUM(127),
+ HID_REPORT_SIZE(8),
+ HID_REPORT_COUNT(3),
+ HID_INPUT(HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE),
+ HID_END_COLLECTION,
+ HID_END_COLLECTION,
+ HID_USAGE_PAGE(HID_PAGE_CONSUMER),
+ HID_USAGE(HID_CONSUMER_CONTROL),
+ HID_COLLECTION(HID_APPLICATION_COLLECTION),
+ HID_REPORT_ID(ReportIdConsumer),
+ HID_LOGICAL_MINIMUM(0),
+ HID_RI_LOGICAL_MAXIMUM(16, 0x3FF),
+ HID_USAGE_MINIMUM(0),
+ HID_RI_USAGE_MAXIMUM(16, 0x3FF),
+ HID_REPORT_COUNT(HID_CONSUMER_MAX_KEYS),
+ HID_REPORT_SIZE(16),
+ HID_INPUT(HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE),
+ HID_END_COLLECTION,
+};
+
+static const struct usb_string_descriptor dev_manuf_desc = USB_STRING_DESC("Logitech");
+static const struct usb_string_descriptor dev_prod_desc = USB_STRING_DESC("USB Receiver");
+static const struct usb_string_descriptor dev_serial_desc = USB_STRING_DESC("1234567890");
+
+/* Device descriptor */
+static const struct usb_device_descriptor hid_device_desc = {
+ .bLength = sizeof(struct usb_device_descriptor),
+ .bDescriptorType = USB_DTYPE_DEVICE,
+ .bcdUSB = VERSION_BCD(2, 0, 0),
+ .bDeviceClass = USB_CLASS_IAD,
+ .bDeviceSubClass = USB_SUBCLASS_IAD,
+ .bDeviceProtocol = USB_PROTO_IAD,
+ .bMaxPacketSize0 = USB_EP0_SIZE,
+ .idVendor = 0x046d,
+ .idProduct = 0xc529,
+ .bcdDevice = VERSION_BCD(1, 0, 0),
+ .iManufacturer = UsbDevManuf,
+ .iProduct = UsbDevProduct,
+ .iSerialNumber = UsbDevSerial,
+ .bNumConfigurations = 1,
+};
+
+/* Device configuration descriptor */
+static const struct HidConfigDescriptor hid_cfg_desc = {
+ .config =
+ {
+ .bLength = sizeof(struct usb_config_descriptor),
+ .bDescriptorType = USB_DTYPE_CONFIGURATION,
+ .wTotalLength = sizeof(struct HidConfigDescriptor),
+ .bNumInterfaces = 1,
+ .bConfigurationValue = 1,
+ .iConfiguration = NO_DESCRIPTOR,
+ .bmAttributes = USB_CFG_ATTR_RESERVED | USB_CFG_ATTR_SELFPOWERED,
+ .bMaxPower = USB_CFG_POWER_MA(100),
+ },
+ .iad_0 =
+ {
+ .hid_iad =
+ {
+ .bLength = sizeof(struct usb_iad_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFASEASSOC,
+ .bFirstInterface = 0,
+ .bInterfaceCount = 1,
+ .bFunctionClass = USB_CLASS_PER_INTERFACE,
+ .bFunctionSubClass = USB_SUBCLASS_NONE,
+ .bFunctionProtocol = USB_PROTO_NONE,
+ .iFunction = NO_DESCRIPTOR,
+ },
+ .hid =
+ {
+ .bLength = sizeof(struct usb_interface_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFACE,
+ .bInterfaceNumber = 0,
+ .bAlternateSetting = 0,
+ .bNumEndpoints = 2,
+ .bInterfaceClass = USB_CLASS_HID,
+ .bInterfaceSubClass = USB_HID_SUBCLASS_NONBOOT,
+ .bInterfaceProtocol = USB_HID_PROTO_NONBOOT,
+ .iInterface = NO_DESCRIPTOR,
+ },
+ .hid_desc =
+ {
+ .bLength = sizeof(struct usb_hid_descriptor),
+ .bDescriptorType = USB_DTYPE_HID,
+ .bcdHID = VERSION_BCD(1, 0, 0),
+ .bCountryCode = USB_HID_COUNTRY_NONE,
+ .bNumDescriptors = 1,
+ .bDescriptorType0 = USB_DTYPE_HID_REPORT,
+ .wDescriptorLength0 = sizeof(hid_report_desc),
+ },
+ .hid_ep_in =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = HID_EP_IN,
+ .bmAttributes = USB_EPTYPE_INTERRUPT,
+ .wMaxPacketSize = HID_EP_SZ,
+ .bInterval = 10,
+ },
+ .hid_ep_out =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = HID_EP_OUT,
+ .bmAttributes = USB_EPTYPE_INTERRUPT,
+ .wMaxPacketSize = HID_EP_SZ,
+ .bInterval = 10,
+ },
+ },
+};
+
+struct HidReportMouse {
+ uint8_t report_id;
+ uint8_t btn;
+ int8_t x;
+ int8_t y;
+ int8_t wheel;
+} __attribute__((packed));
+
+struct HidReportKB {
+ uint8_t report_id;
+ uint8_t mods;
+ uint8_t reserved;
+ uint8_t btn[HID_KB_MAX_KEYS];
+} __attribute__((packed));
+
+struct HidReportConsumer {
+ uint8_t report_id;
+ uint16_t btn[HID_CONSUMER_MAX_KEYS];
+} __attribute__((packed));
+
+struct HidReportLED {
+ uint8_t report_id;
+ uint8_t led_state;
+} __attribute__((packed));
+
+static struct HidReport {
+ struct HidReportKB keyboard;
+ struct HidReportMouse mouse;
+ struct HidReportConsumer consumer;
+} __attribute__((packed)) hid_report;
+
+static void hid_init(usbd_device* dev, UsbInterface* intf);
+static void hid_deinit(usbd_device* dev);
+static void hid_on_wakeup(usbd_device* dev);
+static void hid_on_suspend(usbd_device* dev);
+
+static bool hid_send_report(uint8_t report_id);
+static usbd_respond hid_ep_config(usbd_device* dev, uint8_t cfg);
+static usbd_respond hid_control(usbd_device* dev, usbd_ctlreq* req, usbd_rqc_callback* callback);
+static usbd_device* usb_dev;
+static osSemaphoreId_t hid_semaphore = NULL;
+static bool hid_connected = false;
+static HidStateCallback callback;
+static void* cb_ctx;
+static uint8_t led_state;
+
+bool furi_hal_hid_is_connected() {
+ return hid_connected;
+}
+
+uint8_t furi_hal_hid_get_led_state() {
+ return led_state;
+}
+
+void furi_hal_hid_set_state_callback(HidStateCallback cb, void* ctx) {
+ if(callback != NULL) {
+ if(hid_connected == true) callback(false, cb_ctx);
+ }
+
+ callback = cb;
+ cb_ctx = ctx;
+
+ if(callback != NULL) {
+ if(hid_connected == true) callback(true, cb_ctx);
+ }
+}
+
+bool furi_hal_hid_kb_press(uint16_t button) {
+ for(uint8_t key_nb = 0; key_nb < HID_KB_MAX_KEYS; key_nb++) {
+ if(hid_report.keyboard.btn[key_nb] == 0) {
+ hid_report.keyboard.btn[key_nb] = button & 0xFF;
+ break;
+ }
+ }
+ hid_report.keyboard.mods |= (button >> 8);
+ return hid_send_report(ReportIdKeyboard);
+}
+
+bool furi_hal_hid_kb_release(uint16_t button) {
+ for(uint8_t key_nb = 0; key_nb < HID_KB_MAX_KEYS; key_nb++) {
+ if(hid_report.keyboard.btn[key_nb] == (button & 0xFF)) {
+ hid_report.keyboard.btn[key_nb] = 0;
+ break;
+ }
+ }
+ hid_report.keyboard.mods &= ~(button >> 8);
+ return hid_send_report(ReportIdKeyboard);
+}
+
+bool furi_hal_hid_kb_release_all() {
+ for(uint8_t key_nb = 0; key_nb < HID_KB_MAX_KEYS; key_nb++) {
+ hid_report.keyboard.btn[key_nb] = 0;
+ }
+ hid_report.keyboard.mods = 0;
+ return hid_send_report(ReportIdKeyboard);
+}
+
+bool furi_hal_hid_mouse_move(int8_t dx, int8_t dy) {
+ hid_report.mouse.x = dx;
+ hid_report.mouse.y = dy;
+ bool state = hid_send_report(ReportIdMouse);
+ hid_report.mouse.x = 0;
+ hid_report.mouse.y = 0;
+ return state;
+}
+
+bool furi_hal_hid_mouse_press(uint8_t button) {
+ hid_report.mouse.btn |= button;
+ return hid_send_report(ReportIdMouse);
+}
+
+bool furi_hal_hid_mouse_release(uint8_t button) {
+ hid_report.mouse.btn &= ~button;
+ return hid_send_report(ReportIdMouse);
+}
+
+bool furi_hal_hid_mouse_scroll(int8_t delta) {
+ hid_report.mouse.wheel = delta;
+ bool state = hid_send_report(ReportIdMouse);
+ hid_report.mouse.wheel = 0;
+ return state;
+}
+
+bool furi_hal_hid_consumer_key_press(uint16_t button) {
+ for(uint8_t key_nb = 0; key_nb < HID_CONSUMER_MAX_KEYS; key_nb++) {
+ if(hid_report.consumer.btn[key_nb] == 0) {
+ hid_report.consumer.btn[key_nb] = button;
+ break;
+ }
+ }
+ return hid_send_report(ReportIdConsumer);
+}
+
+bool furi_hal_hid_consumer_key_release(uint16_t button) {
+ for(uint8_t key_nb = 0; key_nb < HID_CONSUMER_MAX_KEYS; key_nb++) {
+ if(hid_report.consumer.btn[key_nb] == button) {
+ hid_report.consumer.btn[key_nb] = 0;
+ break;
+ }
+ }
+ return hid_send_report(ReportIdConsumer);
+}
+
+UsbInterface usb_hid = {
+ .init = hid_init,
+ .deinit = hid_deinit,
+ .wakeup = hid_on_wakeup,
+ .suspend = hid_on_suspend,
+
+ .dev_descr = (struct usb_device_descriptor*)&hid_device_desc,
+
+ .str_manuf_descr = (void*)&dev_manuf_desc,
+ .str_prod_descr = (void*)&dev_prod_desc,
+ .str_serial_descr = (void*)&dev_serial_desc,
+
+ .cfg_descr = (void*)&hid_cfg_desc,
+};
+
+static void hid_init(usbd_device* dev, UsbInterface* intf) {
+ if(hid_semaphore == NULL) hid_semaphore = osSemaphoreNew(1, 1, NULL);
+ usb_dev = dev;
+ hid_report.keyboard.report_id = ReportIdKeyboard;
+ hid_report.mouse.report_id = ReportIdMouse;
+ hid_report.consumer.report_id = ReportIdConsumer;
+
+ usbd_reg_config(dev, hid_ep_config);
+ usbd_reg_control(dev, hid_control);
+
+ usbd_connect(dev, true);
+}
+
+static void hid_deinit(usbd_device* dev) {
+ usbd_reg_config(dev, NULL);
+ usbd_reg_control(dev, NULL);
+}
+
+static void hid_on_wakeup(usbd_device* dev) {
+ if(hid_connected == false) {
+ hid_connected = true;
+ if(callback != NULL) callback(true, cb_ctx);
+ }
+}
+
+static void hid_on_suspend(usbd_device* dev) {
+ if(hid_connected == true) {
+ hid_connected = false;
+ osSemaphoreRelease(hid_semaphore);
+ if(callback != NULL) callback(false, cb_ctx);
+ }
+}
+
+static bool hid_send_report(uint8_t report_id) {
+ if((hid_semaphore == NULL) || (hid_connected == false)) return false;
+
+ furi_check(osSemaphoreAcquire(hid_semaphore, osWaitForever) == osOK);
+ if(hid_connected == true) {
+ if(report_id == ReportIdKeyboard)
+ usbd_ep_write(usb_dev, HID_EP_IN, &hid_report.keyboard, sizeof(hid_report.keyboard));
+ else if(report_id == ReportIdMouse)
+ usbd_ep_write(usb_dev, HID_EP_IN, &hid_report.mouse, sizeof(hid_report.mouse));
+ else if(report_id == ReportIdConsumer)
+ usbd_ep_write(usb_dev, HID_EP_IN, &hid_report.consumer, sizeof(hid_report.consumer));
+ return true;
+ }
+ return false;
+}
+
+static void hid_txrx_ep_callback(usbd_device* dev, uint8_t event, uint8_t ep) {
+ if(event == usbd_evt_eptx) {
+ osSemaphoreRelease(hid_semaphore);
+ } else {
+ struct HidReportLED leds;
+ usbd_ep_read(usb_dev, ep, &leds, 2);
+ led_state = leds.led_state;
+ }
+}
+
+/* Configure endpoints */
+static usbd_respond hid_ep_config(usbd_device* dev, uint8_t cfg) {
+ switch(cfg) {
+ case 0:
+ /* deconfiguring device */
+ usbd_ep_deconfig(dev, HID_EP_OUT);
+ usbd_ep_deconfig(dev, HID_EP_IN);
+ usbd_reg_endpoint(dev, HID_EP_OUT, 0);
+ usbd_reg_endpoint(dev, HID_EP_IN, 0);
+ return usbd_ack;
+ case 1:
+ /* configuring device */
+ usbd_ep_config(dev, HID_EP_IN, USB_EPTYPE_INTERRUPT, HID_EP_SZ);
+ usbd_ep_config(dev, HID_EP_OUT, USB_EPTYPE_INTERRUPT, HID_EP_SZ);
+ usbd_reg_endpoint(dev, HID_EP_IN, hid_txrx_ep_callback);
+ usbd_reg_endpoint(dev, HID_EP_OUT, hid_txrx_ep_callback);
+ usbd_ep_write(dev, HID_EP_IN, 0, 0);
+ return usbd_ack;
+ default:
+ return usbd_fail;
+ }
+}
+
+/* Control requests handler */
+static usbd_respond hid_control(usbd_device* dev, usbd_ctlreq* req, usbd_rqc_callback* callback) {
+ /* HID control requests */
+ if(((USB_REQ_RECIPIENT | USB_REQ_TYPE) & req->bmRequestType) ==
+ (USB_REQ_INTERFACE | USB_REQ_CLASS) &&
+ req->wIndex == 0) {
+ switch(req->bRequest) {
+ case USB_HID_SETIDLE:
+ return usbd_ack;
+ case USB_HID_GETREPORT:
+ dev->status.data_ptr = &hid_report;
+ dev->status.data_count = sizeof(hid_report);
+ return usbd_ack;
+ default:
+ return usbd_fail;
+ }
+ }
+ if(((USB_REQ_RECIPIENT | USB_REQ_TYPE) & req->bmRequestType) ==
+ (USB_REQ_INTERFACE | USB_REQ_STANDARD) &&
+ req->wIndex == 0 && req->bRequest == USB_STD_GET_DESCRIPTOR) {
+ switch(req->wValue >> 8) {
+ case USB_DTYPE_HID:
+ dev->status.data_ptr = (uint8_t*)&(hid_cfg_desc.iad_0.hid_desc);
+ dev->status.data_count = sizeof(hid_cfg_desc.iad_0.hid_desc);
+ return usbd_ack;
+ case USB_DTYPE_HID_REPORT:
+ dev->status.data_ptr = (uint8_t*)hid_report_desc;
+ dev->status.data_count = sizeof(hid_report_desc);
+ return usbd_ack;
+ default:
+ return usbd_fail;
+ }
+ }
+ return usbd_fail;
+}
diff --git a/firmware/targets/f7/furi_hal/furi_hal_usb_i.h b/firmware/targets/f7/furi_hal/furi_hal_usb_i.h
new file mode 100644
index 00000000..be7ce168
--- /dev/null
+++ b/firmware/targets/f7/furi_hal/furi_hal_usb_i.h
@@ -0,0 +1,13 @@
+#pragma once
+
+#include "usb.h"
+
+#define USB_EP0_SIZE 8
+
+/* String descriptors */
+enum UsbDevDescStr {
+ UsbDevLang = 0,
+ UsbDevManuf = 1,
+ UsbDevProduct = 2,
+ UsbDevSerial = 3,
+};
diff --git a/firmware/targets/f7/furi-hal/furi-hal-usb-u2f.c b/firmware/targets/f7/furi_hal/furi_hal_usb_u2f.c
index 5c0eaf9b..a3bb145e 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-usb-u2f.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_usb_u2f.c
@@ -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"
@@ -71,65 +71,71 @@ static const struct usb_device_descriptor hid_u2f_device_desc = {
/* Device configuration descriptor */
static const struct HidConfigDescriptor hid_u2f_cfg_desc = {
- .config = {
- .bLength = sizeof(struct usb_config_descriptor),
- .bDescriptorType = USB_DTYPE_CONFIGURATION,
- .wTotalLength = sizeof(struct HidConfigDescriptor),
- .bNumInterfaces = 1,
- .bConfigurationValue = 1,
- .iConfiguration = NO_DESCRIPTOR,
- .bmAttributes = USB_CFG_ATTR_RESERVED | USB_CFG_ATTR_SELFPOWERED,
- .bMaxPower = USB_CFG_POWER_MA(100),
- },
- .iad_0 = {
- .hid_iad =
+ .config =
{
- .bLength = sizeof(struct usb_iad_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFASEASSOC,
- .bFirstInterface = 0,
- .bInterfaceCount = 1,
- .bFunctionClass = USB_CLASS_PER_INTERFACE,
- .bFunctionSubClass = USB_SUBCLASS_NONE,
- .bFunctionProtocol = USB_PROTO_NONE,
- .iFunction = NO_DESCRIPTOR,
+ .bLength = sizeof(struct usb_config_descriptor),
+ .bDescriptorType = USB_DTYPE_CONFIGURATION,
+ .wTotalLength = sizeof(struct HidConfigDescriptor),
+ .bNumInterfaces = 1,
+ .bConfigurationValue = 1,
+ .iConfiguration = NO_DESCRIPTOR,
+ .bmAttributes = USB_CFG_ATTR_RESERVED | USB_CFG_ATTR_SELFPOWERED,
+ .bMaxPower = USB_CFG_POWER_MA(100),
},
- .hid = {
- .bLength = sizeof(struct usb_interface_descriptor),
- .bDescriptorType = USB_DTYPE_INTERFACE,
- .bInterfaceNumber = 0,
- .bAlternateSetting = 0,
- .bNumEndpoints = 2,
- .bInterfaceClass = USB_CLASS_HID,
- .bInterfaceSubClass = USB_HID_SUBCLASS_NONBOOT,
- .bInterfaceProtocol = USB_HID_PROTO_NONBOOT,
- .iInterface = NO_DESCRIPTOR,
- },
- .hid_desc = {
- .bLength = sizeof(struct usb_hid_descriptor),
- .bDescriptorType = USB_DTYPE_HID,
- .bcdHID = VERSION_BCD(1, 0, 0),
- .bCountryCode = USB_HID_COUNTRY_NONE,
- .bNumDescriptors = 1,
- .bDescriptorType0 = USB_DTYPE_HID_REPORT,
- .wDescriptorLength0 = sizeof(hid_u2f_report_desc),
- },
- .hid_ep_in = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = HID_EP_IN,
- .bmAttributes = USB_EPTYPE_INTERRUPT,
- .wMaxPacketSize = HID_U2F_PACKET_LEN,
- .bInterval = 5,
- },
- .hid_ep_out = {
- .bLength = sizeof(struct usb_endpoint_descriptor),
- .bDescriptorType = USB_DTYPE_ENDPOINT,
- .bEndpointAddress = HID_EP_OUT,
- .bmAttributes = USB_EPTYPE_INTERRUPT,
- .wMaxPacketSize = HID_U2F_PACKET_LEN,
- .bInterval = 5,
+ .iad_0 =
+ {
+ .hid_iad =
+ {
+ .bLength = sizeof(struct usb_iad_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFASEASSOC,
+ .bFirstInterface = 0,
+ .bInterfaceCount = 1,
+ .bFunctionClass = USB_CLASS_PER_INTERFACE,
+ .bFunctionSubClass = USB_SUBCLASS_NONE,
+ .bFunctionProtocol = USB_PROTO_NONE,
+ .iFunction = NO_DESCRIPTOR,
+ },
+ .hid =
+ {
+ .bLength = sizeof(struct usb_interface_descriptor),
+ .bDescriptorType = USB_DTYPE_INTERFACE,
+ .bInterfaceNumber = 0,
+ .bAlternateSetting = 0,
+ .bNumEndpoints = 2,
+ .bInterfaceClass = USB_CLASS_HID,
+ .bInterfaceSubClass = USB_HID_SUBCLASS_NONBOOT,
+ .bInterfaceProtocol = USB_HID_PROTO_NONBOOT,
+ .iInterface = NO_DESCRIPTOR,
+ },
+ .hid_desc =
+ {
+ .bLength = sizeof(struct usb_hid_descriptor),
+ .bDescriptorType = USB_DTYPE_HID,
+ .bcdHID = VERSION_BCD(1, 0, 0),
+ .bCountryCode = USB_HID_COUNTRY_NONE,
+ .bNumDescriptors = 1,
+ .bDescriptorType0 = USB_DTYPE_HID_REPORT,
+ .wDescriptorLength0 = sizeof(hid_u2f_report_desc),
+ },
+ .hid_ep_in =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = HID_EP_IN,
+ .bmAttributes = USB_EPTYPE_INTERRUPT,
+ .wMaxPacketSize = HID_U2F_PACKET_LEN,
+ .bInterval = 5,
+ },
+ .hid_ep_out =
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DTYPE_ENDPOINT,
+ .bEndpointAddress = HID_EP_OUT,
+ .bmAttributes = USB_EPTYPE_INTERRUPT,
+ .wMaxPacketSize = HID_U2F_PACKET_LEN,
+ .bInterval = 5,
+ },
},
- },
};
static void hid_u2f_init(usbd_device* dev, UsbInterface* intf);
@@ -153,17 +159,15 @@ bool furi_hal_hid_u2f_is_connected() {
}
void furi_hal_hid_u2f_set_callback(HidU2fCallback cb, void* ctx) {
- if (callback != NULL) {
- if (hid_u2f_connected == true)
- callback(HidU2fDisconnected, cb_ctx);
+ if(callback != NULL) {
+ if(hid_u2f_connected == true) callback(HidU2fDisconnected, cb_ctx);
}
callback = cb;
cb_ctx = ctx;
- if (callback != NULL) {
- if (hid_u2f_connected == true)
- callback(HidU2fConnected, cb_ctx);
+ if(callback != NULL) {
+ if(hid_u2f_connected == true) callback(HidU2fConnected, cb_ctx);
}
}
@@ -199,24 +203,21 @@ static void hid_u2f_deinit(usbd_device* dev) {
static void hid_u2f_on_wakeup(usbd_device* dev) {
hid_u2f_connected = true;
- if (callback != NULL)
- callback(HidU2fConnected, cb_ctx);
+ if(callback != NULL) callback(HidU2fConnected, cb_ctx);
}
static void hid_u2f_on_suspend(usbd_device* dev) {
if(hid_u2f_connected == true) {
hid_u2f_connected = false;
osSemaphoreRelease(hid_u2f_semaphore);
- if (callback != NULL)
- callback(HidU2fDisconnected, cb_ctx);
+ if(callback != NULL) callback(HidU2fDisconnected, cb_ctx);
}
}
void furi_hal_hid_u2f_send_response(uint8_t* data, uint8_t len) {
- if ((hid_u2f_semaphore == NULL) || (hid_u2f_connected == false))
- return;
+ if((hid_u2f_semaphore == NULL) || (hid_u2f_connected == false)) return;
furi_check(osSemaphoreAcquire(hid_u2f_semaphore, osWaitForever) == osOK);
- if (hid_u2f_connected == true) {
+ if(hid_u2f_connected == true) {
usbd_ep_write(usb_dev, HID_EP_OUT, data, len);
}
}
@@ -226,17 +227,16 @@ uint32_t furi_hal_hid_u2f_get_request(uint8_t* data) {
return ((len < 0) ? 0 : len);
}
-static void hid_u2f_rx_ep_callback (usbd_device *dev, uint8_t event, uint8_t ep) {
- if (callback != NULL)
- callback(HidU2fRequest, cb_ctx);
+static void hid_u2f_rx_ep_callback(usbd_device* dev, uint8_t event, uint8_t ep) {
+ if(callback != NULL) callback(HidU2fRequest, cb_ctx);
}
-static void hid_u2f_tx_ep_callback (usbd_device *dev, uint8_t event, uint8_t ep) {
+static void hid_u2f_tx_ep_callback(usbd_device* dev, uint8_t event, uint8_t ep) {
osSemaphoreRelease(hid_u2f_semaphore);
}
-static void hid_u2f_txrx_ep_callback (usbd_device *dev, uint8_t event, uint8_t ep) {
- if (event == usbd_evt_eptx) {
+static void hid_u2f_txrx_ep_callback(usbd_device* dev, uint8_t event, uint8_t ep) {
+ if(event == usbd_evt_eptx) {
hid_u2f_tx_ep_callback(dev, event, ep);
} else {
hid_u2f_rx_ep_callback(dev, event, ep);
@@ -267,9 +267,10 @@ static usbd_respond hid_u2f_ep_config(usbd_device* dev, uint8_t cfg) {
}
/* Control requests handler */
-static usbd_respond hid_u2f_control(usbd_device* dev, usbd_ctlreq* req, usbd_rqc_callback* callback) {
+static usbd_respond
+ hid_u2f_control(usbd_device* dev, usbd_ctlreq* req, usbd_rqc_callback* callback) {
/* HID control requests */
- if (((USB_REQ_RECIPIENT | USB_REQ_TYPE) & req->bmRequestType) ==
+ if(((USB_REQ_RECIPIENT | USB_REQ_TYPE) & req->bmRequestType) ==
(USB_REQ_INTERFACE | USB_REQ_CLASS) &&
req->wIndex == 0) {
switch(req->bRequest) {
@@ -279,7 +280,7 @@ static usbd_respond hid_u2f_control(usbd_device* dev, usbd_ctlreq* req, usbd_rqc
return usbd_fail;
}
}
- if (((USB_REQ_RECIPIENT | USB_REQ_TYPE) & req->bmRequestType) ==
+ if(((USB_REQ_RECIPIENT | USB_REQ_TYPE) & req->bmRequestType) ==
(USB_REQ_INTERFACE | USB_REQ_STANDARD) &&
req->wIndex == 0 && req->bRequest == USB_STD_GET_DESCRIPTOR) {
switch(req->wValue >> 8) {
diff --git a/firmware/targets/f7/furi-hal/furi-hal-vcp.c b/firmware/targets/f7/furi_hal/furi_hal_vcp.c
index 05033817..fd4fb2ff 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-vcp.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_vcp.c
@@ -1,5 +1,5 @@
-#include <furi-hal-usb-cdc_i.h>
-#include <furi-hal-console.h>
+#include <furi_hal_usb_cdc_i.h>
+#include <furi_hal_console.h>
#include <furi.h>
#include <stream_buffer.h>
@@ -12,18 +12,20 @@
#define VCP_IF_NUM 0
typedef enum {
- VcpEvtReserved = (1 << 0), // Reserved for StreamBuffer internal event
- VcpEvtEnable = (1 << 1),
- VcpEvtDisable = (1 << 2),
- VcpEvtConnect = (1 << 3),
- VcpEvtDisconnect = (1 << 4),
- VcpEvtStreamRx = (1 << 5),
- VcpEvtRx = (1 << 6),
- VcpEvtStreamTx = (1 << 7),
- VcpEvtTx = (1 << 8),
+ VcpEvtReserved = (1 << 0), // Reserved for StreamBuffer internal event
+ VcpEvtEnable = (1 << 1),
+ VcpEvtDisable = (1 << 2),
+ VcpEvtConnect = (1 << 3),
+ VcpEvtDisconnect = (1 << 4),
+ VcpEvtStreamRx = (1 << 5),
+ VcpEvtRx = (1 << 6),
+ VcpEvtStreamTx = (1 << 7),
+ VcpEvtTx = (1 << 8),
} WorkerEvtFlags;
-#define VCP_THREAD_FLAG_ALL (VcpEvtEnable | VcpEvtDisable | VcpEvtConnect | VcpEvtDisconnect | VcpEvtRx | VcpEvtTx | VcpEvtStreamRx | VcpEvtStreamTx)
+#define VCP_THREAD_FLAG_ALL \
+ (VcpEvtEnable | VcpEvtDisable | VcpEvtConnect | VcpEvtDisconnect | VcpEvtRx | VcpEvtTx | \
+ VcpEvtStreamRx | VcpEvtStreamTx)
typedef struct {
FuriThread* thread;
@@ -78,20 +80,20 @@ static int32_t vcp_worker(void* context) {
furi_hal_cdc_set_callbacks(VCP_IF_NUM, &cdc_cb, NULL);
- while (1) {
+ while(1) {
uint32_t flags = osThreadFlagsWait(VCP_THREAD_FLAG_ALL, osFlagsWaitAny, osWaitForever);
furi_assert((flags & osFlagsError) == 0);
// VCP enabled
- if((flags & VcpEvtEnable) && !enabled){
+ if((flags & VcpEvtEnable) && !enabled) {
#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "Enable");
-#endif
+#endif
flags |= VcpEvtTx;
furi_hal_cdc_set_callbacks(VCP_IF_NUM, &cdc_cb, NULL);
enabled = true;
furi_hal_cdc_receive(VCP_IF_NUM, vcp->data_buffer, USB_CDC_PKT_LEN); // flush Rx buffer
- if (furi_hal_cdc_get_ctrl_line_state(VCP_IF_NUM) & (1 << 0)) {
+ if(furi_hal_cdc_get_ctrl_line_state(VCP_IF_NUM) & (1 << 0)) {
vcp->connected = true;
xStreamBufferSend(vcp->rx_stream, &ascii_soh, 1, osWaitForever);
}
@@ -99,9 +101,9 @@ static int32_t vcp_worker(void* context) {
// VCP disabled
if((flags & VcpEvtDisable) && enabled) {
-#ifdef FURI_HAL_USB_VCP_DEBUG
+#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "Disable");
-#endif
+#endif
enabled = false;
vcp->connected = false;
xStreamBufferReceive(vcp->tx_stream, vcp->data_buffer, USB_CDC_PKT_LEN, 0);
@@ -110,10 +112,10 @@ static int32_t vcp_worker(void* context) {
// VCP session opened
if((flags & VcpEvtConnect) && enabled) {
-#ifdef FURI_HAL_USB_VCP_DEBUG
+#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "Connect");
-#endif
- if (vcp->connected == false) {
+#endif
+ if(vcp->connected == false) {
vcp->connected = true;
xStreamBufferSend(vcp->rx_stream, &ascii_soh, 1, osWaitForever);
}
@@ -121,10 +123,10 @@ static int32_t vcp_worker(void* context) {
// VCP session closed
if((flags & VcpEvtDisconnect) && enabled) {
-#ifdef FURI_HAL_USB_VCP_DEBUG
+#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "Disconnect");
-#endif
- if (vcp->connected == true) {
+#endif
+ if(vcp->connected == true) {
vcp->connected = false;
xStreamBufferReceive(vcp->tx_stream, vcp->data_buffer, USB_CDC_PKT_LEN, 0);
xStreamBufferSend(vcp->rx_stream, &ascii_eot, 1, osWaitForever);
@@ -136,7 +138,7 @@ static int32_t vcp_worker(void* context) {
#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "StreamRx");
#endif
- if (xStreamBufferSpacesAvailable(vcp->rx_stream) >= USB_CDC_PKT_LEN) {
+ if(xStreamBufferSpacesAvailable(vcp->rx_stream) >= USB_CDC_PKT_LEN) {
flags |= VcpEvtRx;
missed_rx--;
}
@@ -144,39 +146,42 @@ static int32_t vcp_worker(void* context) {
// New data received
if((flags & VcpEvtRx)) {
- if (xStreamBufferSpacesAvailable(vcp->rx_stream) >= USB_CDC_PKT_LEN) {
+ if(xStreamBufferSpacesAvailable(vcp->rx_stream) >= USB_CDC_PKT_LEN) {
int32_t len = furi_hal_cdc_receive(VCP_IF_NUM, vcp->data_buffer, USB_CDC_PKT_LEN);
-#ifdef FURI_HAL_USB_VCP_DEBUG
+#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "Rx %d", len);
-#endif
- if (len > 0) {
- furi_check(xStreamBufferSend(vcp->rx_stream, vcp->data_buffer, len, osWaitForever) == len);
+#endif
+ if(len > 0) {
+ furi_check(
+ xStreamBufferSend(vcp->rx_stream, vcp->data_buffer, len, osWaitForever) ==
+ len);
}
} else {
-#ifdef FURI_HAL_USB_VCP_DEBUG
+#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "Rx missed");
-#endif
+#endif
missed_rx++;
}
}
// New data in Tx buffer
if((flags & VcpEvtStreamTx) && enabled) {
-#ifdef FURI_HAL_USB_VCP_DEBUG
+#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "StreamTx");
-#endif
- if (tx_idle) {
+#endif
+ if(tx_idle) {
flags |= VcpEvtTx;
}
}
// CDC write transfer done
if((flags & VcpEvtTx) && enabled) {
- size_t len = xStreamBufferReceive(vcp->tx_stream, vcp->data_buffer, USB_CDC_PKT_LEN, 0);
-#ifdef FURI_HAL_USB_VCP_DEBUG
+ size_t len =
+ xStreamBufferReceive(vcp->tx_stream, vcp->data_buffer, USB_CDC_PKT_LEN, 0);
+#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "Tx %d", len);
-#endif
- if (len > 0) { // Some data left in Tx buffer. Sending it now
+#endif
+ if(len > 0) { // Some data left in Tx buffer. Sending it now
tx_idle = false;
furi_hal_cdc_send(VCP_IF_NUM, vcp->data_buffer, len);
} else { // There is nothing to send. Set flag to start next transfer instantly
@@ -201,21 +206,19 @@ size_t furi_hal_vcp_rx_with_timeout(uint8_t* buffer, size_t size, uint32_t timeo
#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "rx %u start", size);
-#endif
+#endif
size_t rx_cnt = 0;
- while (size > 0) {
+ while(size > 0) {
size_t batch_size = size;
- if (batch_size > VCP_RX_BUF_SIZE)
- batch_size = VCP_RX_BUF_SIZE;
+ if(batch_size > VCP_RX_BUF_SIZE) batch_size = VCP_RX_BUF_SIZE;
size_t len = xStreamBufferReceive(vcp->rx_stream, buffer, batch_size, timeout);
-#ifdef FURI_HAL_USB_VCP_DEBUG
+#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "%u ", batch_size);
-#endif
- if (len == 0)
- break;
+#endif
+ if(len == 0) break;
osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtStreamRx);
size -= len;
buffer += len;
@@ -224,7 +227,7 @@ size_t furi_hal_vcp_rx_with_timeout(uint8_t* buffer, size_t size, uint32_t timeo
#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "rx %u end", size);
-#endif
+#endif
return rx_cnt;
}
@@ -239,18 +242,17 @@ void furi_hal_vcp_tx(const uint8_t* buffer, size_t size) {
#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "tx %u start", size);
-#endif
+#endif
- while (size > 0 && vcp->connected) {
+ while(size > 0 && vcp->connected) {
size_t batch_size = size;
- if (batch_size > USB_CDC_PKT_LEN)
- batch_size = USB_CDC_PKT_LEN;
+ if(batch_size > USB_CDC_PKT_LEN) batch_size = USB_CDC_PKT_LEN;
xStreamBufferSend(vcp->tx_stream, buffer, batch_size, osWaitForever);
osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtStreamTx);
#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "%u ", batch_size);
-#endif
+#endif
size -= batch_size;
buffer += batch_size;
@@ -258,11 +260,11 @@ void furi_hal_vcp_tx(const uint8_t* buffer, size_t size) {
#ifdef FURI_HAL_USB_VCP_DEBUG
FURI_LOG_D(TAG, "tx %u end", size);
-#endif
+#endif
}
static void vcp_state_callback(void* context, uint8_t state) {
- if (state == 0) {
+ if(state == 0) {
osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtDisconnect);
}
}
@@ -271,7 +273,7 @@ static void vcp_on_cdc_control_line(void* context, uint8_t state) {
// bit 0: DTR state, bit 1: RTS state
bool dtr = state & (1 << 0);
- if (dtr == true) {
+ if(dtr == true) {
osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtConnect);
} else {
osThreadFlagsSet(furi_thread_get_thread_id(vcp->thread), VcpEvtDisconnect);
diff --git a/firmware/targets/f7/furi-hal/furi-hal-version.c b/firmware/targets/f7/furi_hal/furi_hal_version.c
index bd561c72..821de05a 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-version.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_version.c
@@ -1,5 +1,5 @@
-#include <furi-hal-version.h>
-#include <furi-hal-rtc.h>
+#include <furi_hal_version.h>
+#include <furi_hal_rtc.h>
#include <furi.h>
#include <stm32wbxx.h>
@@ -13,7 +13,6 @@
#define FURI_HAL_VERSION_OTP_HEADER_MAGIC 0xBABE
#define FURI_HAL_VERSION_OTP_ADDRESS OTP_AREA_BASE
-
/** OTP V0 Structure: prototypes and early EVT */
typedef struct {
uint8_t board_version;
@@ -85,7 +84,7 @@ typedef struct {
uint8_t board_display; /** Board display */
char name[FURI_HAL_VERSION_ARRAY_NAME_LENGTH]; /** \0 terminated name */
- char device_name[FURI_HAL_VERSION_DEVICE_NAME_LENGTH]; /** device name for special needs */
+ char device_name[FURI_HAL_VERSION_DEVICE_NAME_LENGTH]; /** device name for special needs */
uint8_t ble_mac[6];
} FuriHalVersion;
@@ -100,10 +99,7 @@ static void furi_hal_version_set_name(const char* name) {
"xFlipper %s",
furi_hal_version.name);
} else {
- snprintf(
- furi_hal_version.device_name,
- FURI_HAL_VERSION_DEVICE_NAME_LENGTH,
- "xFlipper");
+ snprintf(furi_hal_version.device_name, FURI_HAL_VERSION_DEVICE_NAME_LENGTH, "xFlipper");
}
furi_hal_version.device_name[0] = AD_TYPE_COMPLETE_LOCAL_NAME;
@@ -113,11 +109,11 @@ static void furi_hal_version_set_name(const char* name) {
uint32_t company_id = LL_FLASH_GetSTCompanyID();
uint32_t device_id = LL_FLASH_GetDeviceID();
furi_hal_version.ble_mac[0] = (uint8_t)(udn & 0x000000FF);
- furi_hal_version.ble_mac[1] = (uint8_t)( (udn & 0x0000FF00) >> 8 );
- furi_hal_version.ble_mac[2] = (uint8_t)( (udn & 0x00FF0000) >> 16 );
+ furi_hal_version.ble_mac[1] = (uint8_t)((udn & 0x0000FF00) >> 8);
+ furi_hal_version.ble_mac[2] = (uint8_t)((udn & 0x00FF0000) >> 16);
furi_hal_version.ble_mac[3] = (uint8_t)device_id;
furi_hal_version.ble_mac[4] = (uint8_t)(company_id & 0x000000FF);
- furi_hal_version.ble_mac[5] = (uint8_t)( (company_id & 0x0000FF00) >> 8 );
+ furi_hal_version.ble_mac[5] = (uint8_t)((company_id & 0x0000FF00) >> 8);
}
static void furi_hal_version_load_otp_default() {
@@ -164,7 +160,7 @@ static void furi_hal_version_load_otp_v2() {
furi_hal_version.board_display = otp->board_display;
// 3rd and 4th blocks, programmed on FATP stage
- if (otp->board_color != 0xFF) {
+ if(otp->board_color != 0xFF) {
furi_hal_version.board_color = otp->board_color;
furi_hal_version.board_region = otp->board_region;
furi_hal_version_set_name(otp->name);
@@ -177,22 +173,23 @@ static void furi_hal_version_load_otp_v2() {
void furi_hal_version_init() {
switch(furi_hal_version_get_otp_version()) {
- case FuriHalVersionOtpVersionUnknown:
- furi_hal_version_load_otp_default();
+ case FuriHalVersionOtpVersionUnknown:
+ furi_hal_version_load_otp_default();
break;
- case FuriHalVersionOtpVersionEmpty:
- furi_hal_version_load_otp_default();
+ case FuriHalVersionOtpVersionEmpty:
+ furi_hal_version_load_otp_default();
break;
- case FuriHalVersionOtpVersion0:
- furi_hal_version_load_otp_v0();
+ case FuriHalVersionOtpVersion0:
+ furi_hal_version_load_otp_v0();
break;
- case FuriHalVersionOtpVersion1:
- furi_hal_version_load_otp_v1();
+ case FuriHalVersionOtpVersion1:
+ furi_hal_version_load_otp_v1();
break;
- case FuriHalVersionOtpVersion2:
- furi_hal_version_load_otp_v2();
+ case FuriHalVersionOtpVersion2:
+ furi_hal_version_load_otp_v2();
break;
- default: furi_crash(NULL);
+ default:
+ furi_crash(NULL);
}
furi_hal_rtc_set_register(FuriHalRtcRegisterSystemVersion, (uint32_t)version_get());
@@ -209,18 +206,19 @@ const char* furi_hal_version_get_model_name() {
}
const FuriHalVersionOtpVersion furi_hal_version_get_otp_version() {
- if (*(uint64_t*)FURI_HAL_VERSION_OTP_ADDRESS == 0xFFFFFFFF) {
+ if(*(uint64_t*)FURI_HAL_VERSION_OTP_ADDRESS == 0xFFFFFFFF) {
return FuriHalVersionOtpVersionEmpty;
} else {
- if (((FuriHalVersionOTPv1*)FURI_HAL_VERSION_OTP_ADDRESS)->header_magic == FURI_HAL_VERSION_OTP_HEADER_MAGIC) {
+ if(((FuriHalVersionOTPv1*)FURI_HAL_VERSION_OTP_ADDRESS)->header_magic ==
+ FURI_HAL_VERSION_OTP_HEADER_MAGIC) {
// Version 1+
uint8_t version = ((FuriHalVersionOTPv1*)FURI_HAL_VERSION_OTP_ADDRESS)->header_version;
- if (version >= FuriHalVersionOtpVersion1 && version <= FuriHalVersionOtpVersion2) {
+ if(version >= FuriHalVersionOtpVersion1 && version <= FuriHalVersionOtpVersion2) {
return version;
} else {
return FuriHalVersionOtpVersionUnknown;
}
- } else if (((FuriHalVersionOTPv0*)FURI_HAL_VERSION_OTP_ADDRESS)->board_version <= 10) {
+ } else if(((FuriHalVersionOTPv0*)FURI_HAL_VERSION_OTP_ADDRESS)->board_version <= 10) {
// Version 0
return FuriHalVersionOtpVersion0;
} else {
@@ -292,9 +290,9 @@ const struct Version* furi_hal_version_get_bootloader_version(void) {
}
size_t furi_hal_version_uid_size() {
- return 64/8;
+ return 64 / 8;
}
const uint8_t* furi_hal_version_uid() {
- return (const uint8_t *)UID64_BASE;
+ return (const uint8_t*)UID64_BASE;
}
diff --git a/firmware/targets/f6/furi-hal/furi-hal-vibro.c b/firmware/targets/f7/furi_hal/furi_hal_vibro.c
index 7de8ad84..d9e9ec58 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-vibro.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_vibro.c
@@ -1,5 +1,5 @@
-#include <furi-hal-vibro.h>
-#include <furi-hal-gpio.h>
+#include <furi_hal_vibro.h>
+#include <furi_hal_gpio.h>
#define TAG "FuriHalVibro"
@@ -7,7 +7,6 @@ void furi_hal_vibro_init() {
hal_gpio_init(&vibro_gpio, GpioModeOutputPushPull, GpioPullNo, GpioSpeedLow);
hal_gpio_write(&vibro_gpio, false);
FURI_LOG_I(TAG, "Init OK");
-
}
void furi_hal_vibro_on(bool value) {
diff --git a/firmware/targets/f7/target.mk b/firmware/targets/f7/target.mk
index e60e375e..029c8f40 100644
--- a/firmware/targets/f7/target.mk
+++ b/firmware/targets/f7/target.mk
@@ -92,7 +92,7 @@ C_SOURCES += \
# BLE glue
CFLAGS += \
- -I$(TARGET_DIR)/ble-glue \
+ -I$(TARGET_DIR)/ble_glue \
-I$(CUBE_DIR)/Middlewares/ST/STM32_WPAN \
-I$(CUBE_DIR)/Middlewares/ST/STM32_WPAN/ble \
-I$(CUBE_DIR)/Middlewares/ST/STM32_WPAN/ble/core \
@@ -102,7 +102,7 @@ CFLAGS += \
-I$(CUBE_DIR)/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl \
-I$(CUBE_DIR)/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci
C_SOURCES += \
- $(wildcard $(TARGET_DIR)/ble-glue/*.c) \
+ $(wildcard $(TARGET_DIR)/ble_glue/*.c) \
$(CUBE_DIR)/Middlewares/ST/STM32_WPAN/utilities/otp.c \
$(CUBE_DIR)/Middlewares/ST/STM32_WPAN/utilities/stm_list.c \
$(CUBE_DIR)/Middlewares/ST/STM32_WPAN/utilities/dbg_trace.c \
@@ -144,7 +144,7 @@ ifeq ($(INVERT_RFID_IN), 1)
CFLAGS += -DINVERT_RFID_IN
endif
-FURI_HAL_DIR = $(TARGET_DIR)/furi-hal
+FURI_HAL_DIR = $(TARGET_DIR)/furi_hal
CFLAGS += -I$(FURI_HAL_DIR)
C_SOURCES += $(wildcard $(FURI_HAL_DIR)/*.c)
diff --git a/firmware/targets/furi-hal-include/furi-hal.h b/firmware/targets/furi-hal-include/furi-hal.h
deleted file mode 100644
index e0885598..00000000
--- a/firmware/targets/furi-hal-include/furi-hal.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * @file furi-hal.h
- * Furi HAL API
- */
-
-#pragma once
-
-#ifdef __cplusplus
-template <unsigned int N> struct STOP_EXTERNING_ME {};
-#endif
-
-#include "furi-hal-bootloader.h"
-#include "furi-hal-clock.h"
-#include "furi-hal-crypto.h"
-#include "furi-hal-console.h"
-#include "furi-hal-os.h"
-#include "furi-hal-sd.h"
-#include "furi-hal-i2c.h"
-#include "furi-hal-resources.h"
-#include "furi-hal-rtc.h"
-#include "furi-hal-gpio.h"
-#include "furi-hal-light.h"
-#include "furi-hal-delay.h"
-#include "furi-hal-pwm.h"
-#include "furi-hal-task.h"
-#include "furi-hal-power.h"
-#include "furi-hal-vcp.h"
-#include "furi-hal-interrupt.h"
-#include "furi-hal-version.h"
-#include "furi-hal-bt.h"
-#include "furi-hal-spi.h"
-#include "furi-hal-flash.h"
-#include "furi-hal-subghz.h"
-#include "furi-hal-vibro.h"
-#include "furi-hal-ibutton.h"
-#include "furi-hal-rfid.h"
-#include "furi-hal-nfc.h"
-#include "furi-hal-usb.h"
-#include "furi-hal-usb-hid.h"
-#include "furi-hal-compress.h"
-#include "furi-hal-uart.h"
-#include "furi-hal-info.h"
-#include "furi-hal-random.h"
-
-/** Init furi-hal */
-void furi_hal_init();
diff --git a/firmware/targets/furi_hal_include/furi_hal.h b/firmware/targets/furi_hal_include/furi_hal.h
new file mode 100644
index 00000000..334c628f
--- /dev/null
+++ b/firmware/targets/furi_hal_include/furi_hal.h
@@ -0,0 +1,46 @@
+/**
+ * @file furi_hal.h
+ * Furi HAL API
+ */
+
+#pragma once
+
+#ifdef __cplusplus
+template <unsigned int N> struct STOP_EXTERNING_ME {};
+#endif
+
+#include "furi_hal_bootloader.h"
+#include "furi_hal_clock.h"
+#include "furi_hal_crypto.h"
+#include "furi_hal_console.h"
+#include "furi_hal_os.h"
+#include "furi_hal_sd.h"
+#include "furi_hal_i2c.h"
+#include "furi_hal_resources.h"
+#include "furi_hal_rtc.h"
+#include "furi_hal_gpio.h"
+#include "furi_hal_light.h"
+#include "furi_hal_delay.h"
+#include "furi_hal_pwm.h"
+#include "furi_hal_task.h"
+#include "furi_hal_power.h"
+#include "furi_hal_vcp.h"
+#include "furi_hal_interrupt.h"
+#include "furi_hal_version.h"
+#include "furi_hal_bt.h"
+#include "furi_hal_spi.h"
+#include "furi_hal_flash.h"
+#include "furi_hal_subghz.h"
+#include "furi_hal_vibro.h"
+#include "furi_hal_ibutton.h"
+#include "furi_hal_rfid.h"
+#include "furi_hal_nfc.h"
+#include "furi_hal_usb.h"
+#include "furi_hal_usb_hid.h"
+#include "furi_hal_compress.h"
+#include "furi_hal_uart.h"
+#include "furi_hal_info.h"
+#include "furi_hal_random.h"
+
+/** Init furi_hal */
+void furi_hal_init();
diff --git a/firmware/targets/furi-hal-include/furi-hal-bootloader.h b/firmware/targets/furi_hal_include/furi_hal_bootloader.h
index 8dd2901f..51a9c4e8 100644
--- a/firmware/targets/furi-hal-include/furi-hal-bootloader.h
+++ b/firmware/targets/furi_hal_include/furi_hal_bootloader.h
@@ -1,5 +1,5 @@
/**
- * @file furi-hal-bootloader.h
+ * @file furi_hal_bootloader.h
* Bootloader HAL API
*/
@@ -12,10 +12,7 @@ extern "C" {
#endif
/** Boot modes */
-typedef enum {
- FuriHalBootloaderModeNormal,
- FuriHalBootloaderModeDFU
-} FuriHalBootloaderMode;
+typedef enum { FuriHalBootloaderModeNormal, FuriHalBootloaderModeDFU } FuriHalBootloaderMode;
/** Initialize boot subsystem
*/
diff --git a/firmware/targets/furi-hal-include/furi-hal-bt.h b/firmware/targets/furi_hal_include/furi_hal_bt.h
index b13d7260..cacf33a3 100644
--- a/firmware/targets/furi-hal-include/furi-hal-bt.h
+++ b/firmware/targets/furi_hal_include/furi_hal_bt.h
@@ -1,5 +1,5 @@
/**
- * @file furi-hal-bt.h
+ * @file furi_hal_bt.h
* BT/BLE HAL API
*/
@@ -12,7 +12,7 @@
#include <ble_glue.h>
#include <ble_app.h>
-#include "furi-hal-bt-serial.h"
+#include "furi_hal_bt_serial.h"
#define FURI_HAL_BT_STACK_VERSION_MAJOR (1)
#define FURI_HAL_BT_STACK_VERSION_MINOR (13)
@@ -126,7 +126,9 @@ void furi_hal_bt_nvm_sram_sem_release();
* @param callback BleGlueKeyStorageChangedCallback instance
* @param context pointer to context
*/
-void furi_hal_bt_set_key_storage_change_callback(BleGlueKeyStorageChangedCallback callback, void* context);
+void furi_hal_bt_set_key_storage_change_callback(
+ BleGlueKeyStorageChangedCallback callback,
+ void* context);
/** Start ble tone tx at given channel and power
*
diff --git a/firmware/targets/furi-hal-include/furi-hal-bt-hid.h b/firmware/targets/furi_hal_include/furi_hal_bt_hid.h
index 8dd42803..4faeebae 100644
--- a/firmware/targets/furi-hal-include/furi-hal-bt-hid.h
+++ b/firmware/targets/furi_hal_include/furi_hal_bt_hid.h
@@ -3,7 +3,7 @@
#include <stdint.h>
#include <stdbool.h>
-enum FuriHalBtHidMediKeys{
+enum FuriHalBtHidMediKeys {
FuriHalBtHidMediaScanNext,
FuriHalBtHidMediaScanPrevious,
FuriHalBtHidMediaStop,
diff --git a/firmware/targets/furi-hal-include/furi-hal-bt-serial.h b/firmware/targets/furi_hal_include/furi_hal_bt_serial.h
index a1c71041..9cc4ba5b 100644
--- a/firmware/targets/furi-hal-include/furi-hal-bt-serial.h
+++ b/firmware/targets/furi_hal_include/furi_hal_bt_serial.h
@@ -21,7 +21,10 @@ void furi_hal_bt_serial_stop();
* @param calback FuriHalBtSerialCallback instance
* @param context pointer to context
*/
-void furi_hal_bt_serial_set_event_callback(uint16_t buff_size, FuriHalBtSerialCallback callback, void* context);
+void furi_hal_bt_serial_set_event_callback(
+ uint16_t buff_size,
+ FuriHalBtSerialCallback callback,
+ void* context);
/** Notify that application buffer is empty
*/
diff --git a/firmware/targets/furi-hal-include/furi-hal-compress.h b/firmware/targets/furi_hal_include/furi_hal_compress.h
index 991d3857..17ce3e69 100644
--- a/firmware/targets/furi-hal-include/furi-hal-compress.h
+++ b/firmware/targets/furi_hal_include/furi_hal_compress.h
@@ -1,5 +1,5 @@
/**
- * @file furi-hal-compress.h
+ * @file furi_hal_compress.h
* LZSS based compression HAL API
*/
#pragma once
@@ -52,7 +52,13 @@ void furi_hal_compress_free(FuriHalCompress* compress);
*
* @return true on success
*/
-bool furi_hal_compress_encode(FuriHalCompress* compress, uint8_t* data_in, size_t data_in_size, uint8_t* data_out, size_t data_out_size, size_t* data_res_size);
+bool furi_hal_compress_encode(
+ FuriHalCompress* compress,
+ uint8_t* data_in,
+ size_t data_in_size,
+ uint8_t* data_out,
+ size_t data_out_size,
+ size_t* data_res_size);
/** Decode data
*
@@ -64,4 +70,10 @@ bool furi_hal_compress_encode(FuriHalCompress* compress, uint8_t* data_in, size_
*
* @return true on success
*/
-bool furi_hal_compress_decode(FuriHalCompress* compress, uint8_t* data_in, size_t data_in_size, uint8_t* data_out, size_t data_out_size, size_t* data_res_size);
+bool furi_hal_compress_decode(
+ FuriHalCompress* compress,
+ uint8_t* data_in,
+ size_t data_in_size,
+ uint8_t* data_out,
+ size_t data_out_size,
+ size_t* data_res_size);
diff --git a/firmware/targets/furi-hal-include/furi-hal-crypto.h b/firmware/targets/furi_hal_include/furi_hal_crypto.h
index 3aba2ede..fc3974bb 100644
--- a/firmware/targets/furi-hal-include/furi-hal-crypto.h
+++ b/firmware/targets/furi_hal_include/furi_hal_crypto.h
@@ -1,5 +1,5 @@
/**
- * @file furi-hal-crypto.h
+ * @file furi_hal_crypto.h
* Cryptography HAL API
*/
#pragma once
diff --git a/firmware/targets/furi-hal-include/furi-hal-delay.h b/firmware/targets/furi_hal_include/furi_hal_delay.h
index 7e5c0d7f..733097ce 100644
--- a/firmware/targets/furi-hal-include/furi-hal-delay.h
+++ b/firmware/targets/furi_hal_include/furi_hal_delay.h
@@ -1,5 +1,5 @@
/**
- * @file furi-hal-delay.h
+ * @file furi_hal_delay.h
* Delay HAL API
*/
diff --git a/firmware/targets/furi-hal-include/furi-hal-i2c.h b/firmware/targets/furi_hal_include/furi_hal_i2c.h
index ab4052fb..35269ec5 100644
--- a/firmware/targets/furi-hal-include/furi-hal-i2c.h
+++ b/firmware/targets/furi_hal_include/furi_hal_i2c.h
@@ -1,5 +1,5 @@
/**
- * @file furi-hal-i2c.h
+ * @file furi_hal_i2c.h
* I2C HAL API
*/
@@ -7,7 +7,7 @@
#include <stdbool.h>
#include <stdint.h>
-#include <furi-hal-i2c-config.h>
+#include <furi_hal_i2c_config.h>
#ifdef __cplusplus
extern "C" {
diff --git a/firmware/targets/furi-hal-include/furi-hal-ibutton.h b/firmware/targets/furi_hal_include/furi_hal_ibutton.h
index d1158121..edab9027 100644
--- a/firmware/targets/furi-hal-include/furi-hal-ibutton.h
+++ b/firmware/targets/furi_hal_include/furi_hal_ibutton.h
@@ -1,5 +1,5 @@
/**
- * @file furi-hal-ibutton.h
+ * @file furi_hal_ibutton.h
* iButton HAL API
*/
diff --git a/firmware/targets/furi-hal-include/furi-hal-info.h b/firmware/targets/furi_hal_include/furi_hal_info.h
index adf9819b..4a335f2a 100644
--- a/firmware/targets/furi-hal-include/furi-hal-info.h
+++ b/firmware/targets/furi_hal_include/furi_hal_info.h
@@ -1,5 +1,5 @@
/**
- * @file furi-hal-info.h
+ * @file furi_hal_info.h
* Device info HAL API
*/
@@ -19,7 +19,8 @@ extern "C" {
* @param last[in] whether the passed key-value pair is the last one
* @param context[in] to pass to callback
*/
-typedef void (*FuriHalInfoValueCallback) (const char* key, const char* value, bool last, void* context);
+typedef void (
+ *FuriHalInfoValueCallback)(const char* key, const char* value, bool last, void* context);
/** Get device information
*
diff --git a/firmware/targets/furi-hal-include/furi-hal-irda.h b/firmware/targets/furi_hal_include/furi_hal_irda.h
index 00db4b34..551210b2 100644
--- a/firmware/targets/furi-hal-include/furi-hal-irda.h
+++ b/firmware/targets/furi_hal_include/furi_hal_irda.h
@@ -1,5 +1,5 @@
/**
- * @file furi-hal-irda.h
+ * @file furi_hal_irda.h
* IRDA HAL API
*/
@@ -13,17 +13,18 @@
extern "C" {
#endif
-#define IRDA_MAX_FREQUENCY 56000
-#define IRDA_MIN_FREQUENCY 10000
+#define IRDA_MAX_FREQUENCY 56000
+#define IRDA_MIN_FREQUENCY 10000
typedef enum {
- FuriHalIrdaTxGetDataStateOk, /**< New data obtained */
- FuriHalIrdaTxGetDataStateDone, /**< New data obtained, and this is end of package */
- FuriHalIrdaTxGetDataStateLastDone, /**< New data obtained, and this is end of package and no more data available */
+ FuriHalIrdaTxGetDataStateOk, /**< New data obtained */
+ FuriHalIrdaTxGetDataStateDone, /**< New data obtained, and this is end of package */
+ FuriHalIrdaTxGetDataStateLastDone, /**< New data obtained, and this is end of package and no more data available */
} FuriHalIrdaTxGetDataState;
/** Callback type for providing data to IRDA DMA TX system. It is called every tim */
-typedef FuriHalIrdaTxGetDataState (*FuriHalIrdaTxGetDataISRCallback) (void* context, uint32_t* duration, bool* level);
+typedef FuriHalIrdaTxGetDataState (
+ *FuriHalIrdaTxGetDataISRCallback)(void* context, uint32_t* duration, bool* level);
/** Callback type called every time signal is sent by DMA to Timer.
*
@@ -31,7 +32,7 @@ typedef FuriHalIrdaTxGetDataState (*FuriHalIrdaTxGetDataISRCallback) (void* cont
* almost end. Don't use this callback to stop transmission, as far as there are
* next signal is charged for transmission by DMA.
*/
-typedef void (*FuriHalIrdaTxSignalSentISRCallback) (void* context);
+typedef void (*FuriHalIrdaTxSignalSentISRCallback)(void* context);
/** Signature of callback function for receiving continuous IRDA rx signal.
*
@@ -71,7 +72,9 @@ void furi_hal_irda_async_rx_set_timeout(uint32_t timeout_us);
* @param[in] callback callback to call when RX signal edge changing occurs
* @param[in] ctx context for callback
*/
-void furi_hal_irda_async_rx_set_capture_isr_callback(FuriHalIrdaRxCaptureCallback callback, void *ctx);
+void furi_hal_irda_async_rx_set_capture_isr_callback(
+ FuriHalIrdaRxCaptureCallback callback,
+ void* ctx);
/** Setup callback for reaching silence timeout on IRDA port.
*
@@ -80,7 +83,9 @@ void furi_hal_irda_async_rx_set_capture_isr_callback(FuriHalIrdaRxCaptureCallbac
* @param[in] callback callback for silence timeout
* @param[in] ctx context to pass to callback
*/
-void furi_hal_irda_async_rx_set_timeout_isr_callback(FuriHalIrdaRxTimeoutCallback callback, void *ctx);
+void furi_hal_irda_async_rx_set_timeout_isr_callback(
+ FuriHalIrdaRxTimeoutCallback callback,
+ void* ctx);
/** Check if IRDA is in use now.
*
@@ -95,7 +100,9 @@ bool furi_hal_irda_is_busy(void);
* @param[in] callback function to provide new data
* @param[in] context context for callback
*/
-void furi_hal_irda_async_tx_set_data_isr_callback(FuriHalIrdaTxGetDataISRCallback callback, void* context);
+void furi_hal_irda_async_tx_set_data_isr_callback(
+ FuriHalIrdaTxGetDataISRCallback callback,
+ void* context);
/** Start IR asynchronous transmission.
*
@@ -132,9 +139,10 @@ void furi_hal_irda_async_tx_wait_termination(void);
* @param[in] callback function to call when signal is sent
* @param[in] context context for callback
*/
-void furi_hal_irda_async_tx_set_signal_sent_isr_callback(FuriHalIrdaTxSignalSentISRCallback callback, void* context);
+void furi_hal_irda_async_tx_set_signal_sent_isr_callback(
+ FuriHalIrdaTxSignalSentISRCallback callback,
+ void* context);
#ifdef __cplusplus
}
#endif
-
diff --git a/firmware/targets/furi-hal-include/furi-hal-light.h b/firmware/targets/furi_hal_include/furi_hal_light.h
index 741ba423..569778d0 100644
--- a/firmware/targets/furi-hal-include/furi-hal-light.h
+++ b/firmware/targets/furi_hal_include/furi_hal_light.h
@@ -1,5 +1,5 @@
/**
- * @file furi-hal-light.h
+ * @file furi_hal_light.h
* Light control HAL API
*/
@@ -7,7 +7,7 @@
#include <stdbool.h>
#include <stdint.h>
-#include <furi-hal-resources.h>
+#include <furi_hal_resources.h>
#ifdef __cplusplus
extern "C" {
diff --git a/firmware/targets/furi-hal-include/furi-hal-nfc.h b/firmware/targets/furi_hal_include/furi_hal_nfc.h
index babc7b18..61d95e90 100644
--- a/firmware/targets/furi-hal-include/furi-hal-nfc.h
+++ b/firmware/targets/furi_hal_include/furi_hal_nfc.h
@@ -1,5 +1,5 @@
/**
- * @file furi-hal-nfc.h
+ * @file furi_hal_nfc.h
* NFC HAL API
*/
@@ -51,7 +51,11 @@ void furi_hal_nfc_exit_sleep();
*
* @return true on success
*/
-bool furi_hal_nfc_detect(rfalNfcDevice** dev_list, uint8_t* dev_cnt, uint32_t timeout, bool deactivate);
+bool furi_hal_nfc_detect(
+ rfalNfcDevice** dev_list,
+ uint8_t* dev_cnt,
+ uint32_t timeout,
+ bool deactivate);
/** NFC listen
*
@@ -64,7 +68,13 @@ bool furi_hal_nfc_detect(rfalNfcDevice** dev_list, uint8_t* dev_cnt, uint32_t ti
*
* @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);
+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);
/** Get first command from reader after activation in emulation mode
*
@@ -85,9 +95,19 @@ bool furi_hal_nfc_get_first_frame(uint8_t** rx_buff, uint16_t** rx_len);
*
* @return ST ReturnCode
*/
-ReturnCode furi_hal_nfc_data_exchange(uint8_t* tx_buff, uint16_t tx_len, uint8_t** rx_buff, uint16_t** rx_len, bool deactivate);
-
-ReturnCode furi_hal_nfc_raw_bitstream_exchange(uint8_t* tx_buff, uint16_t tx_bit_len, uint8_t** rx_buff, uint16_t** rx_bit_len, bool deactivate);
+ReturnCode furi_hal_nfc_data_exchange(
+ uint8_t* tx_buff,
+ uint16_t tx_len,
+ uint8_t** rx_buff,
+ uint16_t** rx_len,
+ bool deactivate);
+
+ReturnCode furi_hal_nfc_raw_bitstream_exchange(
+ uint8_t* tx_buff,
+ uint16_t tx_bit_len,
+ uint8_t** rx_buff,
+ uint16_t** rx_bit_len,
+ bool deactivate);
/** NFC deactivate and start sleep
*/
diff --git a/firmware/targets/furi-hal-include/furi-hal-power.h b/firmware/targets/furi_hal_include/furi_hal_power.h
index d44138ab..62387059 100644
--- a/firmware/targets/furi-hal-include/furi-hal-power.h
+++ b/firmware/targets/furi_hal_include/furi_hal_power.h
@@ -1,5 +1,5 @@
/**
- * @file furi-hal-power.h
+ * @file furi_hal_power.h
* Power HAL API
*/
diff --git a/firmware/targets/furi-hal-include/furi-hal-random.h b/firmware/targets/furi_hal_include/furi_hal_random.h
index fa549d23..fa549d23 100644
--- a/firmware/targets/furi-hal-include/furi-hal-random.h
+++ b/firmware/targets/furi_hal_include/furi_hal_random.h
diff --git a/firmware/targets/furi-hal-include/furi-hal-rfid.h b/firmware/targets/furi_hal_include/furi_hal_rfid.h
index 68ac18c1..4831e6a2 100644
--- a/firmware/targets/furi-hal-include/furi-hal-rfid.h
+++ b/firmware/targets/furi_hal_include/furi_hal_rfid.h
@@ -1,5 +1,5 @@
/**
- * @file furi-hal-rfid.h
+ * @file furi_hal_rfid.h
* RFID HAL API
*/
diff --git a/firmware/targets/furi-hal-include/furi-hal-rtc.h b/firmware/targets/furi_hal_include/furi_hal_rtc.h
index 3a00b0da..8e79c95a 100644
--- a/firmware/targets/furi-hal-include/furi-hal-rtc.h
+++ b/firmware/targets/furi_hal_include/furi_hal_rtc.h
@@ -1,5 +1,5 @@
/**
- * @file furi-hal-rtc.h
+ * @file furi_hal_rtc.h
* Furi Hal RTC API
*/
@@ -15,20 +15,20 @@ extern "C" {
typedef struct {
// Time
- uint8_t hour; /**< Hour in 24H format: 0-23 */
+ uint8_t hour; /**< Hour in 24H format: 0-23 */
uint8_t minute; /**< Minute: 0-59 */
uint8_t second; /**< Second: 0-59 */
// Date
- uint8_t day; /**< Current day: 1-31 */
- uint8_t month; /**< Current month: 1-12 */
- uint16_t year; /**< Current year: 2000-2099 */
- uint8_t weekday;/**< Current weekday: 1-7 */
+ uint8_t day; /**< Current day: 1-31 */
+ uint8_t month; /**< Current month: 1-12 */
+ uint16_t year; /**< Current year: 2000-2099 */
+ uint8_t weekday; /**< Current weekday: 1-7 */
} FuriHalRtcDateTime;
typedef enum {
- FuriHalRtcFlagDebug = (1<<0),
- FuriHalRtcFlagFactoryReset = (1<<1),
- FuriHalRtcFlagLock = (1<<2),
+ FuriHalRtcFlagDebug = (1 << 0),
+ FuriHalRtcFlagFactoryReset = (1 << 1),
+ FuriHalRtcFlagLock = (1 << 2),
} FuriHalRtcFlag;
typedef enum {
diff --git a/firmware/targets/furi-hal-include/furi-hal-sd.h b/firmware/targets/furi_hal_include/furi_hal_sd.h
index 9399726e..307a8721 100644
--- a/firmware/targets/furi-hal-include/furi-hal-sd.h
+++ b/firmware/targets/furi_hal_include/furi_hal_sd.h
@@ -1,11 +1,11 @@
/**
- * @file furi-hal-sd.h
+ * @file furi_hal_sd.h
* SD Card HAL API
*/
#include <stdint.h>
#include <stdbool.h>
-#include <furi-hal-spi-types.h>
+#include <furi_hal_spi_types.h>
#ifdef __cplusplus
extern "C" {
diff --git a/firmware/targets/furi-hal-include/furi-hal-spi.h b/firmware/targets/furi_hal_include/furi_hal_spi.h
index 97913f63..be31727f 100644
--- a/firmware/targets/furi-hal-include/furi-hal-spi.h
+++ b/firmware/targets/furi_hal_include/furi_hal_spi.h
@@ -1,6 +1,6 @@
#pragma once
-#include <furi-hal-spi-config.h>
+#include <furi_hal_spi_config.h>
#include <stdbool.h>
#ifdef __cplusplus
@@ -59,7 +59,11 @@ void furi_hal_spi_release(FuriHalSpiBusHandle* handle);
*
* @return true on sucess
*/
-bool furi_hal_spi_bus_rx(FuriHalSpiBusHandle* handle, uint8_t* buffer, size_t size, uint32_t timeout);
+bool furi_hal_spi_bus_rx(
+ FuriHalSpiBusHandle* handle,
+ uint8_t* buffer,
+ size_t size,
+ uint32_t timeout);
/** SPI Transmit
*
@@ -70,7 +74,11 @@ bool furi_hal_spi_bus_rx(FuriHalSpiBusHandle* handle, uint8_t* buffer, size_t si
*
* @return true on success
*/
-bool furi_hal_spi_bus_tx(FuriHalSpiBusHandle* handle, uint8_t* buffer, size_t size, uint32_t timeout);
+bool furi_hal_spi_bus_tx(
+ FuriHalSpiBusHandle* handle,
+ uint8_t* buffer,
+ size_t size,
+ uint32_t timeout);
/** SPI Transmit and Receive
*
@@ -82,7 +90,12 @@ bool furi_hal_spi_bus_tx(FuriHalSpiBusHandle* handle, uint8_t* buffer, size_t si
*
* @return true on success
*/
-bool furi_hal_spi_bus_trx(FuriHalSpiBusHandle* handle, uint8_t* tx_buffer, uint8_t* rx_buffer, size_t size, uint32_t timeout);
+bool furi_hal_spi_bus_trx(
+ FuriHalSpiBusHandle* handle,
+ uint8_t* tx_buffer,
+ uint8_t* rx_buffer,
+ size_t size,
+ uint32_t timeout);
#ifdef __cplusplus
}
diff --git a/firmware/targets/furi-hal-include/furi-hal-subghz.h b/firmware/targets/furi_hal_include/furi_hal_subghz.h
index f39b98b1..59741e3f 100644
--- a/firmware/targets/furi-hal-include/furi-hal-subghz.h
+++ b/firmware/targets/furi_hal_include/furi_hal_subghz.h
@@ -1,5 +1,5 @@
/**
- * @file furi-hal-subghz.h
+ * @file furi_hal_subghz.h
* SubGhz HAL API
*/
@@ -16,34 +16,34 @@ extern "C" {
/** Radio Presets */
typedef enum {
- FuriHalSubGhzPresetIDLE, /**< default configuration */
- FuriHalSubGhzPresetOok270Async, /**< OOK, bandwidth 270kHz, asynchronous */
- FuriHalSubGhzPresetOok650Async, /**< OOK, bandwidth 650kHz, asynchronous */
+ FuriHalSubGhzPresetIDLE, /**< default configuration */
+ FuriHalSubGhzPresetOok270Async, /**< OOK, bandwidth 270kHz, asynchronous */
+ FuriHalSubGhzPresetOok650Async, /**< OOK, bandwidth 650kHz, asynchronous */
FuriHalSubGhzPreset2FSKDev238Async, /**< FM, deviation 2.380371 kHz, asynchronous */
FuriHalSubGhzPreset2FSKDev476Async, /**< FM, deviation 4.760742 kHz, asynchronous */
FuriHalSubGhzPresetMSK99_97KbAsync, /**< MSK, deviation 47.60742 kHz, 99.97Kb/s, asynchronous */
- FuriHalSubGhzPresetGFSK9_99KbAsync /**< GFSK, deviation 19.042969 kHz, 9.996Kb/s, asynchronous */
+ FuriHalSubGhzPresetGFSK9_99KbAsync /**< GFSK, deviation 19.042969 kHz, 9.996Kb/s, asynchronous */
} FuriHalSubGhzPreset;
/** Switchable Radio Paths */
typedef enum {
- FuriHalSubGhzPathIsolate, /**< Isolate Radio from antenna */
- FuriHalSubGhzPath433, /**< Center Frquency: 433MHz. Path 1: SW1RF1-SW2RF2, LCLCL */
- FuriHalSubGhzPath315, /**< Center Frquency: 315MHz. Path 2: SW1RF2-SW2RF1, LCLCLCL */
- FuriHalSubGhzPath868, /**< Center Frquency: 868MHz. Path 3: SW1RF3-SW2RF3, LCLC */
+ FuriHalSubGhzPathIsolate, /**< Isolate Radio from antenna */
+ FuriHalSubGhzPath433, /**< Center Frquency: 433MHz. Path 1: SW1RF1-SW2RF2, LCLCL */
+ FuriHalSubGhzPath315, /**< Center Frquency: 315MHz. Path 2: SW1RF2-SW2RF1, LCLCLCL */
+ FuriHalSubGhzPath868, /**< Center Frquency: 868MHz. Path 3: SW1RF3-SW2RF3, LCLC */
} FuriHalSubGhzPath;
/** SubGhz state */
typedef enum {
- SubGhzStateInit, /**< Init pending */
+ SubGhzStateInit, /**< Init pending */
- SubGhzStateIdle, /**< Idle, energy save mode */
+ SubGhzStateIdle, /**< Idle, energy save mode */
- SubGhzStateAsyncRx, /**< Async RX started */
+ 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 */
+ 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;
diff --git a/firmware/targets/furi-hal-include/furi-hal-usb.h b/firmware/targets/furi_hal_include/furi_hal_usb.h
index a384236b..b4f001e8 100644
--- a/firmware/targets/furi-hal-include/furi-hal-usb.h
+++ b/firmware/targets/furi_hal_include/furi_hal_usb.h
@@ -5,10 +5,10 @@
typedef struct UsbInterface UsbInterface;
struct UsbInterface {
- void (*init)(usbd_device *dev, UsbInterface* intf);
- void (*deinit)(usbd_device *dev);
- void (*wakeup)(usbd_device *dev);
- void (*suspend)(usbd_device *dev);
+ void (*init)(usbd_device* dev, UsbInterface* intf);
+ void (*deinit)(usbd_device* dev);
+ void (*wakeup)(usbd_device* dev);
+ void (*suspend)(usbd_device* dev);
struct usb_device_descriptor* dev_descr;
diff --git a/firmware/targets/furi-hal-include/furi-hal-usb-hid.h b/firmware/targets/furi_hal_include/furi_hal_usb_hid.h
index a5f58170..6adfb7f1 100644
--- a/firmware/targets/furi-hal-include/furi-hal-usb-hid.h
+++ b/firmware/targets/furi_hal_include/furi_hal_usb_hid.h
@@ -2,120 +2,120 @@
/** HID keyboard key codes */
enum HidKeyboardKeys {
- KEY_NONE = 0x00,
- KEY_ERROR_ROLLOVER = 0x01,
- KEY_POST_FAIL = 0x02,
+ KEY_NONE = 0x00,
+ KEY_ERROR_ROLLOVER = 0x01,
+ KEY_POST_FAIL = 0x02,
KEY_ERROR_UNDEFINED = 0x03,
- KEY_A = 0x04,
- KEY_B = 0x05,
- KEY_C = 0x06,
- KEY_D = 0x07,
- KEY_E = 0x08,
- KEY_F = 0x09,
- KEY_G = 0x0A,
- KEY_H = 0x0B,
- KEY_I = 0x0C,
- KEY_J = 0x0D,
- KEY_K = 0x0E,
- KEY_L = 0x0F,
- KEY_M = 0x10,
- KEY_N = 0x11,
- KEY_O = 0x12,
- KEY_P = 0x13,
- KEY_Q = 0x14,
- KEY_R = 0x15,
- KEY_S = 0x16,
- KEY_T = 0x17,
- KEY_U = 0x18,
- KEY_V = 0x19,
- KEY_W = 0x1A,
- KEY_X = 0x1B,
- KEY_Y = 0x1C,
- KEY_Z = 0x1D,
- KEY_1 = 0x1E,
- KEY_2 = 0x1F,
- KEY_3 = 0x20,
- KEY_4 = 0x21,
- KEY_5 = 0x22,
- KEY_6 = 0x23,
- KEY_7 = 0x24,
- KEY_8 = 0x25,
- KEY_9 = 0x26,
- KEY_0 = 0x27,
- KEY_ENTER = 0x28,
- KEY_ESC = 0x29,
- KEY_BACKSPACE = 0x2A,
- KEY_TAB = 0x2B,
- KEY_SPACE = 0x2C,
- KEY_MINUS = 0x2D,
- KEY_EQUAL = 0x2E,
- KEY_LEFT_BRACE = 0x2F,
- KEY_RIGHT_BRACE = 0x30,
- KEY_BACKSLASH = 0x31,
- KEY_NON_US_NUM = 0x32,
- KEY_SEMICOLON = 0x33,
- KEY_QUOTE = 0x34,
- KEY_TILDE = 0x35,
- KEY_COMMA = 0x36,
- KEY_PERIOD = 0x37,
- KEY_SLASH = 0x38,
- KEY_CAPS_LOCK = 0x39,
- KEY_F1 = 0x3A,
- KEY_F2 = 0x3B,
- KEY_F3 = 0x3C,
- KEY_F4 = 0x3D,
- KEY_F5 = 0x3E,
- KEY_F6 = 0x3F,
- KEY_F7 = 0x40,
- KEY_F8 = 0x41,
- KEY_F9 = 0x42,
- KEY_F10 = 0x43,
- KEY_F11 = 0x44,
- KEY_F12 = 0x45,
- KEY_PRINT = 0x46,
- KEY_SCROLL_LOCK = 0x47,
- KEY_PAUSE = 0x48,
- KEY_INSERT = 0x49,
- KEY_HOME = 0x4A,
- KEY_PAGE_UP = 0x4B,
- KEY_DELETE = 0x4C,
- KEY_END = 0x4D,
- KEY_PAGE_DOWN = 0x4E,
- KEY_RIGHT_ARROW = 0x4F,
- KEY_LEFT_ARROW = 0x50,
- KEY_DOWN_ARROW = 0x51,
- KEY_UP_ARROW = 0x52,
- KEY_NUM_LOCK = 0x53,
- KEYPAD_DIVIDE = 0x54,
- KEYPAD_MULTIPLY = 0x55,
- KEYPAD_SUBTRACT = 0x56,
- KEYPAD_ADD = 0x57,
- KEYPAD_ENTER = 0x58,
- KEYPAD_1 = 0x59,
- KEYPAD_2 = 0x5A,
- KEYPAD_3 = 0x5B,
- KEYPAD_4 = 0x5C,
- KEYPAD_5 = 0x5D,
- KEYPAD_6 = 0x5E,
- KEYPAD_7 = 0x5F,
- KEYPAD_8 = 0x60,
- KEYPAD_9 = 0x61,
- KEYPAD_0 = 0x62,
- KEYPAD_DOT = 0x63,
- KEY_NON_US = 0x64,
- KEY_APPLICATION = 0x65,
+ KEY_A = 0x04,
+ KEY_B = 0x05,
+ KEY_C = 0x06,
+ KEY_D = 0x07,
+ KEY_E = 0x08,
+ KEY_F = 0x09,
+ KEY_G = 0x0A,
+ KEY_H = 0x0B,
+ KEY_I = 0x0C,
+ KEY_J = 0x0D,
+ KEY_K = 0x0E,
+ KEY_L = 0x0F,
+ KEY_M = 0x10,
+ KEY_N = 0x11,
+ KEY_O = 0x12,
+ KEY_P = 0x13,
+ KEY_Q = 0x14,
+ KEY_R = 0x15,
+ KEY_S = 0x16,
+ KEY_T = 0x17,
+ KEY_U = 0x18,
+ KEY_V = 0x19,
+ KEY_W = 0x1A,
+ KEY_X = 0x1B,
+ KEY_Y = 0x1C,
+ KEY_Z = 0x1D,
+ KEY_1 = 0x1E,
+ KEY_2 = 0x1F,
+ KEY_3 = 0x20,
+ KEY_4 = 0x21,
+ KEY_5 = 0x22,
+ KEY_6 = 0x23,
+ KEY_7 = 0x24,
+ KEY_8 = 0x25,
+ KEY_9 = 0x26,
+ KEY_0 = 0x27,
+ KEY_ENTER = 0x28,
+ KEY_ESC = 0x29,
+ KEY_BACKSPACE = 0x2A,
+ KEY_TAB = 0x2B,
+ KEY_SPACE = 0x2C,
+ KEY_MINUS = 0x2D,
+ KEY_EQUAL = 0x2E,
+ KEY_LEFT_BRACE = 0x2F,
+ KEY_RIGHT_BRACE = 0x30,
+ KEY_BACKSLASH = 0x31,
+ KEY_NON_US_NUM = 0x32,
+ KEY_SEMICOLON = 0x33,
+ KEY_QUOTE = 0x34,
+ KEY_TILDE = 0x35,
+ KEY_COMMA = 0x36,
+ KEY_PERIOD = 0x37,
+ KEY_SLASH = 0x38,
+ KEY_CAPS_LOCK = 0x39,
+ KEY_F1 = 0x3A,
+ KEY_F2 = 0x3B,
+ KEY_F3 = 0x3C,
+ KEY_F4 = 0x3D,
+ KEY_F5 = 0x3E,
+ KEY_F6 = 0x3F,
+ KEY_F7 = 0x40,
+ KEY_F8 = 0x41,
+ KEY_F9 = 0x42,
+ KEY_F10 = 0x43,
+ KEY_F11 = 0x44,
+ KEY_F12 = 0x45,
+ KEY_PRINT = 0x46,
+ KEY_SCROLL_LOCK = 0x47,
+ KEY_PAUSE = 0x48,
+ KEY_INSERT = 0x49,
+ KEY_HOME = 0x4A,
+ KEY_PAGE_UP = 0x4B,
+ KEY_DELETE = 0x4C,
+ KEY_END = 0x4D,
+ KEY_PAGE_DOWN = 0x4E,
+ KEY_RIGHT_ARROW = 0x4F,
+ KEY_LEFT_ARROW = 0x50,
+ KEY_DOWN_ARROW = 0x51,
+ KEY_UP_ARROW = 0x52,
+ KEY_NUM_LOCK = 0x53,
+ KEYPAD_DIVIDE = 0x54,
+ KEYPAD_MULTIPLY = 0x55,
+ KEYPAD_SUBTRACT = 0x56,
+ KEYPAD_ADD = 0x57,
+ KEYPAD_ENTER = 0x58,
+ KEYPAD_1 = 0x59,
+ KEYPAD_2 = 0x5A,
+ KEYPAD_3 = 0x5B,
+ KEYPAD_4 = 0x5C,
+ KEYPAD_5 = 0x5D,
+ KEYPAD_6 = 0x5E,
+ KEYPAD_7 = 0x5F,
+ KEYPAD_8 = 0x60,
+ KEYPAD_9 = 0x61,
+ KEYPAD_0 = 0x62,
+ KEYPAD_DOT = 0x63,
+ KEY_NON_US = 0x64,
+ KEY_APPLICATION = 0x65,
};
/** HID keyboard modifier keys */
enum HidKeyboardMods {
- KEY_MOD_LEFT_CTRL = (1 << 8),
- KEY_MOD_LEFT_SHIFT = (1 << 9),
- KEY_MOD_LEFT_ALT = (1 << 10),
- KEY_MOD_LEFT_GUI = (1 << 11),
- KEY_MOD_RIGHT_CTRL = (1 << 12),
- KEY_MOD_RIGHT_SHIFT = (1 << 13),
- KEY_MOD_RIGHT_ALT = (1 << 14),
- KEY_MOD_RIGHT_GUI = (1 << 15),
+ KEY_MOD_LEFT_CTRL = (1 << 8),
+ KEY_MOD_LEFT_SHIFT = (1 << 9),
+ KEY_MOD_LEFT_ALT = (1 << 10),
+ KEY_MOD_LEFT_GUI = (1 << 11),
+ KEY_MOD_RIGHT_CTRL = (1 << 12),
+ KEY_MOD_RIGHT_SHIFT = (1 << 13),
+ KEY_MOD_RIGHT_ALT = (1 << 14),
+ KEY_MOD_RIGHT_GUI = (1 << 15),
};
/** ASCII to keycode conversion table */
@@ -257,16 +257,16 @@ typedef void (*HidStateCallback)(bool state, void* context);
/** HID keyboard leds */
enum HidKeyboardLeds {
- HID_KB_LED_NUM = (1 << 0),
- HID_KB_LED_CAPS = (1 << 1),
- HID_KB_LED_SCROLL = (1 << 2),
+ HID_KB_LED_NUM = (1 << 0),
+ HID_KB_LED_CAPS = (1 << 1),
+ HID_KB_LED_SCROLL = (1 << 2),
};
/** HID mouse buttons */
enum HidMouseButtons {
- HID_MOUSE_BTN_LEFT = (1 << 0),
- HID_MOUSE_BTN_RIGHT = (1 << 1),
- HID_MOUSE_BTN_WHEEL = (1 << 2),
+ HID_MOUSE_BTN_LEFT = (1 << 0),
+ HID_MOUSE_BTN_RIGHT = (1 << 1),
+ HID_MOUSE_BTN_WHEEL = (1 << 2),
};
/** Get USB HID connection state
diff --git a/firmware/targets/furi-hal-include/furi-hal-usb-hid-u2f.h b/firmware/targets/furi_hal_include/furi_hal_usb_hid_u2f.h
index e9bf5765..e9bf5765 100644
--- a/firmware/targets/furi-hal-include/furi-hal-usb-hid-u2f.h
+++ b/firmware/targets/furi_hal_include/furi_hal_usb_hid_u2f.h
diff --git a/firmware/targets/furi-hal-include/furi-hal-vcp.h b/firmware/targets/furi_hal_include/furi_hal_vcp.h
index 27c04fb1..ef5c18f9 100644
--- a/firmware/targets/furi-hal-include/furi-hal-vcp.h
+++ b/firmware/targets/furi_hal_include/furi_hal_vcp.h
@@ -1,5 +1,5 @@
/**
- * @file furi-hal-vcp.h
+ * @file furi_hal_vcp.h
* VCP HAL API
*/
diff --git a/firmware/targets/furi-hal-include/furi-hal-version.h b/firmware/targets/furi_hal_include/furi_hal_version.h
index 29343d57..62f0147f 100644
--- a/firmware/targets/furi-hal-include/furi-hal-version.h
+++ b/firmware/targets/furi_hal_include/furi_hal_version.h
@@ -1,5 +1,5 @@
/**
- * @file furi-hal-version.h
+ * @file furi_hal_version.h
* Version HAL API
*/
@@ -21,33 +21,33 @@ extern "C" {
/** OTP Versions enum */
typedef enum {
- FuriHalVersionOtpVersion0=0x00,
- FuriHalVersionOtpVersion1=0x01,
- FuriHalVersionOtpVersion2=0x02,
- FuriHalVersionOtpVersionEmpty=0xFFFFFFFE,
- FuriHalVersionOtpVersionUnknown=0xFFFFFFFF,
+ FuriHalVersionOtpVersion0 = 0x00,
+ FuriHalVersionOtpVersion1 = 0x01,
+ FuriHalVersionOtpVersion2 = 0x02,
+ FuriHalVersionOtpVersionEmpty = 0xFFFFFFFE,
+ FuriHalVersionOtpVersionUnknown = 0xFFFFFFFF,
} FuriHalVersionOtpVersion;
/** Device Colors */
typedef enum {
- FuriHalVersionColorUnknown=0x00,
- FuriHalVersionColorBlack=0x01,
- FuriHalVersionColorWhite=0x02,
+ FuriHalVersionColorUnknown = 0x00,
+ FuriHalVersionColorBlack = 0x01,
+ FuriHalVersionColorWhite = 0x02,
} FuriHalVersionColor;
/** Device Regions */
typedef enum {
- FuriHalVersionRegionUnknown=0x00,
- FuriHalVersionRegionEuRu=0x01,
- FuriHalVersionRegionUsCaAu=0x02,
- FuriHalVersionRegionJp=0x03,
+ FuriHalVersionRegionUnknown = 0x00,
+ FuriHalVersionRegionEuRu = 0x01,
+ FuriHalVersionRegionUsCaAu = 0x02,
+ FuriHalVersionRegionJp = 0x03,
} FuriHalVersionRegion;
/** Device Display */
typedef enum {
- FuriHalVersionDisplayUnknown=0x00,
- FuriHalVersionDisplayErc=0x01,
- FuriHalVersionDisplayMgg=0x02,
+ FuriHalVersionDisplayUnknown = 0x00,
+ FuriHalVersionDisplayErc = 0x01,
+ FuriHalVersionDisplayMgg = 0x02,
} FuriHalVersionDisplay;
/** Init flipper version
diff --git a/firmware/targets/furi-hal-include/furi-hal-vibro.h b/firmware/targets/furi_hal_include/furi_hal_vibro.h
index 99dae2fe..fa5a54c6 100644
--- a/firmware/targets/furi-hal-include/furi-hal-vibro.h
+++ b/firmware/targets/furi_hal_include/furi_hal_vibro.h
@@ -1,5 +1,5 @@
/**
- * @file furi-hal-vibro.h
+ * @file furi_hal_vibro.h
* Vibro HAL API
*/
@@ -7,7 +7,7 @@
#include <stdbool.h>
#include <stdint.h>
-#include <furi-hal-resources.h>
+#include <furi_hal_resources.h>
#ifdef __cplusplus
extern "C" {