Просмотр исходного кода

FuriHal: replace HAL with LL in RFID Part 1. Drop F6. (#1049)

* FuriHal: new speaker HAL
* FuriHal: drop PWM
* FuriHal: move COMP1 to LL
* FuriHal: move COMP1 to LL backport to F6
* FuriHal: remove missing gpio_rfid_carrier from F6
* FurHal: use LL for system controls in flash HAL
* Drop F6 source tree
* Drop F6 from GitHub workflow
* Tie USE_FULL_ASSERT with APP_UNIT_TESTS
* Speaker: return to old volume calculation
* FreeRTOS: move TCB header to glue

Co-authored-by: DrZlo13 <who.just.the.doctor@gmail.com>
あく 3 лет назад
Родитель
Сommit
c4a0847c99
100 измененных файлов с 151 добавлено и 11816 удалено
  1. 1 1
      .github/pull_request_template.md
  2. 1 1
      .github/workflows/build.yml
  3. 1 1
      .github/workflows/lint_c.yml
  4. 9 15
      applications/ibutton/helpers/key_reader.cpp
  5. 3 3
      applications/ibutton/helpers/key_reader.h
  6. 1 3
      applications/ibutton/helpers/key_worker.cpp
  7. 7 25
      applications/lfrfid/helpers/rfid_reader.cpp
  8. 0 2
      applications/lfrfid/helpers/rfid_writer.cpp
  9. 7 26
      applications/lfrfid_debug/scene/lfrfid_debug_app_scene_tune.cpp
  10. 4 4
      applications/music_player/music_player.c
  11. 1 1
      applications/notification/notification.h
  12. 5 5
      applications/notification/notification_app.c
  13. 110 110
      applications/notification/notification_messages_notes.c
  14. 1 1
      applications/notification/notification_settings_app.c
  15. 0 21
      bootloader/targets/f6/furi_hal/furi_hal.c
  16. 0 215
      bootloader/targets/f6/furi_hal/furi_hal_gpio.c
  17. 0 264
      bootloader/targets/f6/furi_hal/furi_hal_gpio.h
  18. 0 205
      bootloader/targets/f6/furi_hal/furi_hal_i2c.c
  19. 0 195
      bootloader/targets/f6/furi_hal/furi_hal_i2c.h
  20. 0 149
      bootloader/targets/f6/furi_hal/furi_hal_i2c_config.c
  21. 0 31
      bootloader/targets/f6/furi_hal/furi_hal_i2c_config.h
  22. 0 51
      bootloader/targets/f6/furi_hal/furi_hal_i2c_types.h
  23. 0 49
      bootloader/targets/f6/furi_hal/furi_hal_light.c
  24. 0 17
      bootloader/targets/f6/furi_hal/furi_hal_light.h
  25. 0 44
      bootloader/targets/f6/furi_hal/furi_hal_resources.c
  26. 0 73
      bootloader/targets/f6/furi_hal/furi_hal_resources.h
  27. 0 151
      bootloader/targets/f6/furi_hal/furi_hal_spi.c
  28. 0 290
      bootloader/targets/f6/furi_hal/furi_hal_spi_config.c
  29. 0 61
      bootloader/targets/f6/furi_hal/furi_hal_spi_config.h
  30. 0 64
      bootloader/targets/f6/furi_hal/furi_hal_spi_types.h
  31. 0 268
      bootloader/targets/f6/furi_hal/furi_hal_version.c
  32. 0 108
      bootloader/targets/f6/furi_hal/main.h
  33. 0 187
      bootloader/targets/f6/stm32wb55xx_flash_cm4.ld
  34. 0 264
      bootloader/targets/f6/target.c
  35. 0 50
      bootloader/targets/f6/target.mk
  36. 0 1
      core/furi_hal/api_interrupt_mgr.h
  37. 0 138
      firmware/targets/f6/Inc/FreeRTOSConfig.h
  38. 0 52
      firmware/targets/f6/Inc/comp.h
  39. 0 49
      firmware/targets/f6/Inc/gpio.h
  40. 0 149
      firmware/targets/f6/Inc/main.h
  41. 0 51
      firmware/targets/f6/Inc/stm32.h
  42. 0 40
      firmware/targets/f6/Inc/stm32_assert.h
  43. 0 345
      firmware/targets/f6/Inc/stm32wbxx_hal_conf.h
  44. 0 69
      firmware/targets/f6/Inc/stm32wbxx_it.h
  45. 0 58
      firmware/targets/f6/Inc/tim.h
  46. 0 93
      firmware/targets/f6/Src/comp.c
  47. 0 139
      firmware/targets/f6/Src/gpio.c
  48. 0 51
      firmware/targets/f6/Src/main.c
  49. 0 92
      firmware/targets/f6/Src/stm32wbxx_hal_msp.c
  50. 0 48
      firmware/targets/f6/Src/stm32wbxx_it.c
  51. 0 371
      firmware/targets/f6/Src/system_stm32wbxx.c
  52. 0 317
      firmware/targets/f6/Src/tim.c
  53. 0 39
      firmware/targets/f6/ble_glue/app_common.h
  54. 0 465
      firmware/targets/f6/ble_glue/app_conf.h
  55. 0 357
      firmware/targets/f6/ble_glue/app_debug.c
  56. 0 38
      firmware/targets/f6/ble_glue/app_debug.h
  57. 0 81
      firmware/targets/f6/ble_glue/battery_service.c
  58. 0 20
      firmware/targets/f6/ble_glue/battery_service.h
  59. 0 185
      firmware/targets/f6/ble_glue/ble_app.c
  60. 0 16
      firmware/targets/f6/ble_glue/ble_app.h
  61. 0 69
      firmware/targets/f6/ble_glue/ble_conf.h
  62. 0 199
      firmware/targets/f6/ble_glue/ble_dbg_conf.h
  63. 0 312
      firmware/targets/f6/ble_glue/ble_glue.c
  64. 0 57
      firmware/targets/f6/ble_glue/ble_glue.h
  65. 0 213
      firmware/targets/f6/ble_glue/dev_info_service.c
  66. 0 24
      firmware/targets/f6/ble_glue/dev_info_service.h
  67. 0 581
      firmware/targets/f6/ble_glue/gap.c
  68. 0 91
      firmware/targets/f6/ble_glue/gap.h
  69. 0 260
      firmware/targets/f6/ble_glue/hid_service.c
  70. 0 23
      firmware/targets/f6/ble_glue/hid_service.h
  71. 0 231
      firmware/targets/f6/ble_glue/hw_conf.h
  72. 0 102
      firmware/targets/f6/ble_glue/hw_if.h
  73. 0 597
      firmware/targets/f6/ble_glue/hw_ipcc.c
  74. 0 242
      firmware/targets/f6/ble_glue/serial_service.c
  75. 0 47
      firmware/targets/f6/ble_glue/serial_service.h
  76. 0 136
      firmware/targets/f6/ble_glue/tl_dbg_conf.h
  77. 0 69
      firmware/targets/f6/ble_glue/utilities_conf.h
  78. 0 193
      firmware/targets/f6/cube/Inc/FreeRTOSConfig.h
  79. 0 52
      firmware/targets/f6/cube/Inc/adc.h
  80. 0 54
      firmware/targets/f6/cube/Inc/aes.h
  81. 0 52
      firmware/targets/f6/cube/Inc/comp.h
  82. 0 52
      firmware/targets/f6/cube/Inc/crc.h
  83. 0 49
      firmware/targets/f6/cube/Inc/gpio.h
  84. 0 50
      firmware/targets/f6/cube/Inc/i2c.h
  85. 0 175
      firmware/targets/f6/cube/Inc/main.h
  86. 0 52
      firmware/targets/f6/cube/Inc/pka.h
  87. 0 50
      firmware/targets/f6/cube/Inc/rf.h
  88. 0 52
      firmware/targets/f6/cube/Inc/rng.h
  89. 0 52
      firmware/targets/f6/cube/Inc/rtc.h
  90. 0 54
      firmware/targets/f6/cube/Inc/spi.h
  91. 0 53
      firmware/targets/f6/cube/Inc/stm32_assert.h
  92. 0 354
      firmware/targets/f6/cube/Inc/stm32wbxx_hal_conf.h
  93. 0 77
      firmware/targets/f6/cube/Inc/stm32wbxx_it.h
  94. 0 58
      firmware/targets/f6/cube/Inc/tim.h
  95. 0 50
      firmware/targets/f6/cube/Inc/usart.h
  96. 0 105
      firmware/targets/f6/cube/Inc/usb_device.h
  97. 0 133
      firmware/targets/f6/cube/Inc/usbd_cdc_if.h
  98. 0 179
      firmware/targets/f6/cube/Inc/usbd_conf.h
  99. 0 145
      firmware/targets/f6/cube/Inc/usbd_desc.h
  100. 0 253
      firmware/targets/f6/cube/Makefile

+ 1 - 1
.github/pull_request_template.md

@@ -6,7 +6,7 @@
 
 - [ Describe how to verify changes ]
 
-# Checklist (do not modify)
+# Checklist (For Reviewer)
 
 - [ ] PR has description of feature/bug or link to Confluence/Jira task
 - [ ] Description contains actions to verify feature/bugfix

+ 1 - 1
.github/workflows/build.yml

@@ -10,7 +10,7 @@ on:
   pull_request:
 
 env:
-  TARGETS: f6 f7
+  TARGETS: f7
   DEFAULT_TARGET: f7
 
 jobs:

+ 1 - 1
.github/workflows/lint_c.yml

@@ -10,7 +10,7 @@ on:
   pull_request:
 
 env:
-  TARGETS: f6 f7
+  TARGETS: f7
 
 jobs:
   lint_c_cpp:

+ 9 - 15
applications/ibutton/helpers/key_reader.cpp

@@ -3,8 +3,6 @@
 #include <callback-connector.h>
 #include <maxim_crc.h>
 
-extern COMP_HandleTypeDef hcomp1;
-
 KeyReader::Error KeyReader::read(iButtonKey* key) {
     uint8_t tmp_key_data[8] = {0, 0, 0, 0, 0, 0, 0, 0};
     iButtonKeyType key_type;
@@ -116,9 +114,9 @@ void KeyReader::start_comaparator(void) {
 
     comparator_callback_pointer =
         cbc::obtain_connector(this, &KeyReader::comparator_trigger_callback);
-    api_interrupt_add(comparator_callback_pointer, InterruptTypeComparatorTrigger, this);
+    furi_hal_rfid_comp_set_callback(comparator_callback_pointer, this);
     last_dwt_value = DWT->CYCCNT;
-    HAL_COMP_Start(&hcomp1);
+    furi_hal_rfid_comp_start();
 }
 
 void KeyReader::stop_comaparator(void) {
@@ -127,23 +125,19 @@ void KeyReader::stop_comaparator(void) {
     // rfid_pins_reset will disable ibutton pin
     furi_hal_ibutton_start();
 
-    HAL_COMP_Stop(&hcomp1);
-    api_interrupt_remove(comparator_callback_pointer, InterruptTypeComparatorTrigger);
+    furi_hal_rfid_comp_stop();
+    furi_hal_rfid_comp_set_callback(NULL, NULL);
 }
 
-void KeyReader::comparator_trigger_callback(void* hcomp, void* comp_ctx) {
+void KeyReader::comparator_trigger_callback(bool level, void* comp_ctx) {
     KeyReader* _this = static_cast<KeyReader*>(comp_ctx);
 
-    if(hcomp == &hcomp1) {
-        uint32_t current_dwt_value = DWT->CYCCNT;
+    uint32_t current_dwt_value = DWT->CYCCNT;
 
-        _this->cyfral_decoder.process_front(
-            hal_gpio_get_rfid_in_level(), current_dwt_value - last_dwt_value);
-        _this->metakom_decoder.process_front(
-            hal_gpio_get_rfid_in_level(), current_dwt_value - last_dwt_value);
+    _this->cyfral_decoder.process_front(level, current_dwt_value - last_dwt_value);
+    _this->metakom_decoder.process_front(level, current_dwt_value - last_dwt_value);
 
-        last_dwt_value = current_dwt_value;
-    }
+    last_dwt_value = current_dwt_value;
 }
 
 void KeyReader::switch_to(ReadMode mode) {

+ 3 - 3
applications/ibutton/helpers/key_reader.h

@@ -28,8 +28,8 @@ private:
     bool verify_key(iButtonKeyType key_type, const uint8_t* const data, uint8_t data_size);
 
     // cyfral and metakom readers data
-    void comparator_trigger_callback(void* hcomp, void* comp_ctx);
-    void (*comparator_callback_pointer)(void* hcomp, void* comp_ctx);
+    void comparator_trigger_callback(bool level, void* comp_ctx);
+    void (*comparator_callback_pointer)(bool level, void* comp_ctx);
 
     void start_comaparator(void);
     void stop_comaparator(void);
@@ -51,4 +51,4 @@ private:
 
     void switch_to(ReadMode mode);
     void switch_mode_if_needed();
-};
+};

+ 1 - 3
applications/ibutton/helpers/key_worker.cpp

@@ -2,8 +2,6 @@
 #include <callback-connector.h>
 #include <maxim_crc.h>
 
-extern COMP_HandleTypeDef hcomp1;
-
 KeyReader::Error KeyWorker::read(iButtonKey* key) {
     KeyReader::Error result = key_reader.read(key);
 
@@ -51,4 +49,4 @@ KeyWorker::KeyWorker(const GpioPin* one_wire_gpio)
 }
 
 KeyWorker::~KeyWorker() {
-}
+}

+ 7 - 25
applications/lfrfid/helpers/rfid_reader.cpp

@@ -4,8 +4,6 @@
 #include <stm32wbxx_ll_cortex.h>
 #include <tim.h>
 
-extern COMP_HandleTypeDef hcomp1;
-
 /**
  * @brief private violation assistant for RfidReader
  */
@@ -63,14 +61,10 @@ void RfidReader::switch_mode() {
     switch_timer_reset();
 }
 
-static void comparator_trigger_callback(void* hcomp, void* comp_ctx) {
-    COMP_HandleTypeDef* _hcomp = static_cast<COMP_HandleTypeDef*>(hcomp);
+static void comparator_trigger_callback(bool level, void* comp_ctx) {
     RfidReader* _this = static_cast<RfidReader*>(comp_ctx);
 
-    if(hcomp == &hcomp1) {
-        RfidReaderAccessor::decode(
-            *_this, (HAL_COMP_GetOutputLevel(_hcomp) == COMP_OUTPUT_LEVEL_HIGH));
-    }
+    RfidReaderAccessor::decode(*_this, !level);
 }
 
 RfidReader::RfidReader() {
@@ -163,25 +157,13 @@ bool RfidReader::any_read() {
 }
 
 void RfidReader::start_comparator(void) {
-    api_interrupt_add(comparator_trigger_callback, InterruptTypeComparatorTrigger, this);
+    furi_hal_rfid_comp_set_callback(comparator_trigger_callback, this);
     last_dwt_value = DWT->CYCCNT;
 
-    hcomp1.Init.InputMinus = COMP_INPUT_MINUS_1_2VREFINT;
-    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();
-    }
-
-    HAL_COMP_Start(&hcomp1);
+    furi_hal_rfid_comp_start();
 }
 
 void RfidReader::stop_comparator(void) {
-    HAL_COMP_Stop(&hcomp1);
-    api_interrupt_remove(comparator_trigger_callback, InterruptTypeComparatorTrigger);
-}
+    furi_hal_rfid_comp_stop();
+    furi_hal_rfid_comp_set_callback(NULL, NULL);
+}

+ 0 - 2
applications/lfrfid/helpers/rfid_writer.cpp

@@ -4,8 +4,6 @@
 #include "protocols/protocol_hid_h10301.h"
 #include "protocols/protocol_indala_40134.h"
 
-extern COMP_HandleTypeDef hcomp1;
-
 /**
  * @brief all timings are specified in field clocks (field clock = 125 kHz, 8 us)
  * 

+ 7 - 26
applications/lfrfid_debug/scene/lfrfid_debug_app_scene_tune.cpp

@@ -1,35 +1,16 @@
 #include "lfrfid_debug_app_scene_tune.h"
 #include <furi_hal.h>
 
-extern COMP_HandleTypeDef hcomp1;
-
-static void comparator_trigger_callback(void* hcomp, void* comp_ctx) {
-    COMP_HandleTypeDef* _hcomp = static_cast<COMP_HandleTypeDef*>(hcomp);
-
-    if(hcomp == &hcomp1) {
-        hal_gpio_write(&gpio_ext_pa7, HAL_COMP_GetOutputLevel(_hcomp) == COMP_OUTPUT_LEVEL_HIGH);
-    }
+static void comparator_trigger_callback(bool level, void* comp_ctx) {
+    hal_gpio_write(&gpio_ext_pa7, !level);
 }
 
 void LfRfidDebugAppSceneTune::on_enter(LfRfidDebugApp* app, bool need_restore) {
     app->view_controller.switch_to<LfRfidViewTuneVM>();
     hal_gpio_init_simple(&gpio_ext_pa7, GpioModeOutputPushPull);
 
-    api_interrupt_add(comparator_trigger_callback, InterruptTypeComparatorTrigger, this);
-
-    hcomp1.Init.InputMinus = COMP_INPUT_MINUS_1_2VREFINT;
-    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();
-    }
-
-    HAL_COMP_Start(&hcomp1);
+    furi_hal_rfid_comp_set_callback(comparator_trigger_callback, this);
+    furi_hal_rfid_comp_start();
 
     furi_hal_rfid_pins_read();
     furi_hal_rfid_tim_read(125000, 0.5);
@@ -50,11 +31,11 @@ bool LfRfidDebugAppSceneTune::on_event(LfRfidDebugApp* app, LfRfidDebugApp::Even
 }
 
 void LfRfidDebugAppSceneTune::on_exit(LfRfidDebugApp* app) {
-    HAL_COMP_Stop(&hcomp1);
-    api_interrupt_remove(comparator_trigger_callback, InterruptTypeComparatorTrigger);
+    furi_hal_rfid_comp_stop();
+    furi_hal_rfid_comp_set_callback(NULL, NULL);
 
     hal_gpio_init_simple(&gpio_ext_pa7, GpioModeAnalog);
     furi_hal_rfid_tim_read_stop();
     furi_hal_rfid_tim_reset();
     furi_hal_rfid_pins_reset();
-}
+}

+ 4 - 4
applications/music_player/music_player.c

@@ -102,7 +102,7 @@ typedef struct {
     uint8_t volume_id_max;
 } State;
 
-const float volumes[] = {0, 0.02, 0.05, 0.1, 0.5};
+const float volumes[] = {0, .25, .5, .75, 1};
 
 bool is_white_note(const MelodyEventRecord* note_record, uint8_t id) {
     if(note_record == NULL) return false;
@@ -332,10 +332,10 @@ void process_note(
     // play note
     float note_delay = bar_length_ms / (float)note_record->length;
     if(note_record->note != N) {
-        hal_pwm_set(volume, note_record->note, &SPEAKER_TIM, SPEAKER_CH);
+        furi_hal_speaker_start(note_record->note, volume);
     }
     delay(note_delay);
-    hal_pwm_stop(&SPEAKER_TIM, SPEAKER_CH);
+    furi_hal_speaker_stop();
 }
 
 void music_player_thread(void* p) {
@@ -447,7 +447,7 @@ int32_t music_player_app(void* p) {
     }
 
     osThreadTerminate(player);
-    hal_pwm_stop(&SPEAKER_TIM, SPEAKER_CH);
+    furi_hal_speaker_stop();
     view_port_enabled_set(view_port, false);
     gui_remove_view_port(gui, view_port);
     furi_record_close("gui");

+ 1 - 1
applications/notification/notification.h

@@ -9,7 +9,7 @@ extern "C" {
 typedef struct NotificationApp NotificationApp;
 typedef struct {
     float frequency;
-    float pwm;
+    float volume;
 } NotificationMessageDataSound;
 
 typedef struct {

+ 5 - 5
applications/notification/notification_app.c

@@ -139,12 +139,12 @@ void notification_vibro_off() {
     furi_hal_vibro_on(false);
 }
 
-void notification_sound_on(float pwm, float freq) {
-    hal_pwm_set(pwm, freq, &SPEAKER_TIM, SPEAKER_CH);
+void notification_sound_on(float freq, float volume) {
+    furi_hal_speaker_start(freq, volume);
 }
 
 void notification_sound_off() {
-    hal_pwm_stop(&SPEAKER_TIM, SPEAKER_CH);
+    furi_hal_speaker_stop();
 }
 
 // display timer
@@ -236,8 +236,8 @@ void notification_process_notification_message(
             break;
         case NotificationMessageTypeSoundOn:
             notification_sound_on(
-                notification_message->data.sound.pwm * speaker_volume_setting,
-                notification_message->data.sound.frequency);
+                notification_message->data.sound.frequency,
+                notification_message->data.sound.volume * speaker_volume_setting);
             reset_mask |= reset_sound_mask;
             break;
         case NotificationMessageTypeSoundOff:

+ 110 - 110
applications/notification/notification_messages_notes.c

@@ -17,7 +17,7 @@ for octave in range(9):
         print(f"const NotificationMessage message_note_{name}{octave}" + " = {\n"
               "\t.type = NotificationMessageTypeSoundOn,\n"
               f"\t.data.sound.frequency = {round(note, 2)}f,\n"
-              "\t.data.sound.pwm = 0.5f,\n"
+              "\t.data.sound.volume = 1.0f,\n"
               "};")
         note = note * cf
 
@@ -29,545 +29,545 @@ for octave in range(9):
 const NotificationMessage message_click = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 1.0f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_c0 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 16.35f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_cs0 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 17.32f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_d0 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 18.35f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_ds0 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 19.45f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_e0 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 20.6f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_f0 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 21.83f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_fs0 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 23.12f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_g0 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 24.5f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_gs0 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 25.96f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_a0 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 27.5f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_as0 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 29.14f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_b0 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 30.87f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_c1 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 32.7f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_cs1 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 34.65f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_d1 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 36.71f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_ds1 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 38.89f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_e1 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 41.2f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_f1 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 43.65f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_fs1 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 46.25f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_g1 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 49.0f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_gs1 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 51.91f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_a1 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 55.0f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_as1 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 58.27f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_b1 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 61.74f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_c2 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 65.41f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_cs2 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 69.3f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_d2 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 73.42f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_ds2 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 77.78f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_e2 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 82.41f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_f2 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 87.31f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_fs2 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 92.5f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_g2 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 98.0f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_gs2 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 103.83f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_a2 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 110.0f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_as2 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 116.54f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_b2 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 123.47f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_c3 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 130.81f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_cs3 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 138.59f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_d3 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 146.83f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_ds3 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 155.56f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_e3 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 164.81f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_f3 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 174.61f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_fs3 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 185.0f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_g3 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 196.0f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_gs3 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 207.65f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_a3 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 220.0f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_as3 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 233.08f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_b3 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 246.94f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_c4 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 261.63f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_cs4 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 277.18f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_d4 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 293.66f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_ds4 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 311.13f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_e4 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 329.63f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_f4 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 349.23f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_fs4 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 369.99f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_g4 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 392.0f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_gs4 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 415.3f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_a4 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 440.0f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_as4 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 466.16f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_b4 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 493.88f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_c5 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 523.25f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_cs5 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 554.37f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_d5 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 587.33f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_ds5 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 622.25f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_e5 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 659.26f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_f5 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 698.46f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_fs5 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 739.99f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_g5 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 783.99f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_gs5 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 830.61f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_a5 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 880.0f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_as5 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 932.33f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_b5 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 987.77f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_c6 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 1046.5f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_cs6 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 1108.73f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_d6 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 1174.66f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_ds6 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 1244.51f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_e6 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 1318.51f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_f6 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 1396.91f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_fs6 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 1479.98f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_g6 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 1567.98f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_gs6 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 1661.22f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_a6 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 1760.0f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_as6 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 1864.66f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_b6 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 1975.53f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_c7 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 2093.0f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_cs7 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 2217.46f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_d7 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 2349.32f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_ds7 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 2489.02f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_e7 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 2637.02f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_f7 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 2793.83f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_fs7 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 2959.96f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_g7 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 3135.96f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_gs7 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 3322.44f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_a7 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 3520.0f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_as7 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 3729.31f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_b7 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 3951.07f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_c8 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 4186.01f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_cs8 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 4434.92f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_d8 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 4698.64f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_ds8 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 4978.03f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_e8 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 5274.04f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_f8 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 5587.65f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_fs8 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 5919.91f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_g8 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 6271.93f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_gs8 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 6644.88f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_a8 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 7040.0f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_as8 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 7458.62f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };
 const NotificationMessage message_note_b8 = {
     .type = NotificationMessageTypeSoundOn,
     .data.sound.frequency = 7902.13f,
-    .data.sound.pwm = 0.5f,
+    .data.sound.volume = 1.0f,
 };

+ 1 - 1
applications/notification/notification_settings_app.c

@@ -43,7 +43,7 @@ const char* const volume_text[VOLUME_COUNT] = {
     "75%",
     "100%",
 };
-const float volume_value[VOLUME_COUNT] = {0.0f, 0.04f, 0.1f, 0.2f, 1.0f};
+const float volume_value[VOLUME_COUNT] = {0.0f, 0.25f, 0.5f, 0.75f, 1.0f};
 
 #define DELAY_COUNT 6
 const char* const delay_text[DELAY_COUNT] = {

+ 0 - 21
bootloader/targets/f6/furi_hal/furi_hal.c

@@ -1,21 +0,0 @@
-#include <furi_hal.h>
-#include <stm32wbxx_ll_utils.h>
-
-void furi_hal_init() {
-    furi_hal_i2c_init();
-    furi_hal_light_init();
-    furi_hal_spi_init();
-    furi_hal_version_init();
-}
-
-void delay(float milliseconds) {
-    LL_mDelay((uint32_t)milliseconds);
-}
-
-void delay_us(float microseconds) {
-    microseconds = microseconds / 1000;
-    if(microseconds < 1) {
-        microseconds = 1;
-    }
-    LL_mDelay((uint32_t)microseconds);
-}

+ 0 - 215
bootloader/targets/f6/furi_hal/furi_hal_gpio.c

@@ -1,215 +0,0 @@
-#include <furi_hal_gpio.h>
-#include <stddef.h>
-#include <assert.h>
-
-#define GET_SYSCFG_EXTI_PORT(gpio)                \
-    (((gpio) == (GPIOA)) ? LL_SYSCFG_EXTI_PORTA : \
-     ((gpio) == (GPIOB)) ? LL_SYSCFG_EXTI_PORTB : \
-     ((gpio) == (GPIOC)) ? LL_SYSCFG_EXTI_PORTC : \
-     ((gpio) == (GPIOD)) ? LL_SYSCFG_EXTI_PORTD : \
-     ((gpio) == (GPIOE)) ? LL_SYSCFG_EXTI_PORTE : \
-                           LL_SYSCFG_EXTI_PORTH)
-
-#define GPIO_PIN_MAP(pin, prefix)               \
-    (((pin) == (LL_GPIO_PIN_0))  ? prefix##0 :  \
-     ((pin) == (LL_GPIO_PIN_1))  ? prefix##1 :  \
-     ((pin) == (LL_GPIO_PIN_2))  ? prefix##2 :  \
-     ((pin) == (LL_GPIO_PIN_3))  ? prefix##3 :  \
-     ((pin) == (LL_GPIO_PIN_4))  ? prefix##4 :  \
-     ((pin) == (LL_GPIO_PIN_5))  ? prefix##5 :  \
-     ((pin) == (LL_GPIO_PIN_6))  ? prefix##6 :  \
-     ((pin) == (LL_GPIO_PIN_7))  ? prefix##7 :  \
-     ((pin) == (LL_GPIO_PIN_8))  ? prefix##8 :  \
-     ((pin) == (LL_GPIO_PIN_9))  ? prefix##9 :  \
-     ((pin) == (LL_GPIO_PIN_10)) ? prefix##10 : \
-     ((pin) == (LL_GPIO_PIN_11)) ? prefix##11 : \
-     ((pin) == (LL_GPIO_PIN_12)) ? prefix##12 : \
-     ((pin) == (LL_GPIO_PIN_13)) ? prefix##13 : \
-     ((pin) == (LL_GPIO_PIN_14)) ? prefix##14 : \
-                                   prefix##15)
-
-#define GET_SYSCFG_EXTI_LINE(pin) GPIO_PIN_MAP(pin, LL_SYSCFG_EXTI_LINE)
-#define GET_EXTI_LINE(pin) GPIO_PIN_MAP(pin, LL_EXTI_LINE_)
-
-static volatile GpioInterrupt gpio_interrupt[GPIO_NUMBER];
-
-static uint8_t hal_gpio_get_pin_num(const GpioPin* gpio) {
-    uint8_t pin_num = 0;
-    for(pin_num = 0; pin_num < GPIO_NUMBER; pin_num++) {
-        if(gpio->pin & (1 << pin_num)) break;
-    }
-    return pin_num;
-}
-
-void hal_gpio_init_simple(const GpioPin* gpio, const GpioMode mode) {
-    hal_gpio_init(gpio, mode, GpioPullNo, GpioSpeedLow);
-}
-
-void hal_gpio_init(
-    const GpioPin* gpio,
-    const GpioMode mode,
-    const GpioPull pull,
-    const GpioSpeed speed) {
-    // we cannot set alternate mode in this function
-    assert(mode != GpioModeAltFunctionPushPull);
-    assert(mode != GpioModeAltFunctionOpenDrain);
-
-    hal_gpio_init_ex(gpio, mode, pull, speed, GpioAltFnUnused);
-}
-
-void hal_gpio_init_ex(
-    const GpioPin* gpio,
-    const GpioMode mode,
-    const GpioPull pull,
-    const GpioSpeed speed,
-    const GpioAltFn alt_fn) {
-    uint32_t sys_exti_port = GET_SYSCFG_EXTI_PORT(gpio->port);
-    uint32_t sys_exti_line = GET_SYSCFG_EXTI_LINE(gpio->pin);
-    uint32_t exti_line = GET_EXTI_LINE(gpio->pin);
-
-    // Configure gpio with interrupts disabled
-    __disable_irq();
-
-    // Set gpio speed
-    switch(speed) {
-    case GpioSpeedLow:
-        LL_GPIO_SetPinSpeed(gpio->port, gpio->pin, LL_GPIO_SPEED_FREQ_LOW);
-        break;
-    case GpioSpeedMedium:
-        LL_GPIO_SetPinSpeed(gpio->port, gpio->pin, LL_GPIO_SPEED_FREQ_MEDIUM);
-        break;
-    case GpioSpeedHigh:
-        LL_GPIO_SetPinSpeed(gpio->port, gpio->pin, LL_GPIO_SPEED_FREQ_HIGH);
-        break;
-    case GpioSpeedVeryHigh:
-        LL_GPIO_SetPinSpeed(gpio->port, gpio->pin, LL_GPIO_SPEED_FREQ_VERY_HIGH);
-        break;
-    }
-
-    // Set gpio pull mode
-    switch(pull) {
-    case GpioPullNo:
-        LL_GPIO_SetPinPull(gpio->port, gpio->pin, LL_GPIO_PULL_NO);
-        break;
-    case GpioPullUp:
-        LL_GPIO_SetPinPull(gpio->port, gpio->pin, LL_GPIO_PULL_UP);
-        break;
-    case GpioPullDown:
-        LL_GPIO_SetPinPull(gpio->port, gpio->pin, LL_GPIO_PULL_DOWN);
-        break;
-    }
-
-    // Set gpio mode
-    if(mode >= GpioModeInterruptRise) {
-        // Set pin in interrupt mode
-        LL_GPIO_SetPinMode(gpio->port, gpio->pin, LL_GPIO_MODE_INPUT);
-        LL_SYSCFG_SetEXTISource(sys_exti_port, sys_exti_line);
-        if(mode == GpioModeInterruptRise || mode == GpioModeInterruptRiseFall) {
-            LL_EXTI_EnableIT_0_31(exti_line);
-            LL_EXTI_EnableRisingTrig_0_31(exti_line);
-        }
-        if(mode == GpioModeInterruptFall || mode == GpioModeInterruptRiseFall) {
-            LL_EXTI_EnableIT_0_31(exti_line);
-            LL_EXTI_EnableFallingTrig_0_31(exti_line);
-        }
-        if(mode == GpioModeEventRise || mode == GpioModeEventRiseFall) {
-            LL_EXTI_EnableEvent_0_31(exti_line);
-            LL_EXTI_EnableRisingTrig_0_31(exti_line);
-        }
-        if(mode == GpioModeEventFall || mode == GpioModeEventRiseFall) {
-            LL_EXTI_EnableEvent_0_31(exti_line);
-            LL_EXTI_EnableFallingTrig_0_31(exti_line);
-        }
-    } else {
-        // Disable interrupts if set
-        if(LL_SYSCFG_GetEXTISource(sys_exti_line) == sys_exti_port &&
-           LL_EXTI_IsEnabledIT_0_31(exti_line)) {
-            LL_EXTI_DisableIT_0_31(exti_line);
-            LL_EXTI_DisableRisingTrig_0_31(exti_line);
-            LL_EXTI_DisableFallingTrig_0_31(exti_line);
-        }
-
-        // Prepare alternative part if any
-        if(mode == GpioModeAltFunctionPushPull || mode == GpioModeAltFunctionOpenDrain) {
-            // set alternate function
-            if(hal_gpio_get_pin_num(gpio) < 8) {
-                LL_GPIO_SetAFPin_0_7(gpio->port, gpio->pin, alt_fn);
-            } else {
-                LL_GPIO_SetAFPin_8_15(gpio->port, gpio->pin, alt_fn);
-            }
-        }
-
-        // Set not interrupt pin modes
-        switch(mode) {
-        case GpioModeInput:
-            LL_GPIO_SetPinMode(gpio->port, gpio->pin, LL_GPIO_MODE_INPUT);
-            break;
-        case GpioModeOutputPushPull:
-            LL_GPIO_SetPinOutputType(gpio->port, gpio->pin, LL_GPIO_OUTPUT_PUSHPULL);
-            LL_GPIO_SetPinMode(gpio->port, gpio->pin, LL_GPIO_MODE_OUTPUT);
-            break;
-        case GpioModeAltFunctionPushPull:
-            LL_GPIO_SetPinOutputType(gpio->port, gpio->pin, LL_GPIO_OUTPUT_PUSHPULL);
-            LL_GPIO_SetPinMode(gpio->port, gpio->pin, LL_GPIO_MODE_ALTERNATE);
-            break;
-        case GpioModeOutputOpenDrain:
-            LL_GPIO_SetPinOutputType(gpio->port, gpio->pin, LL_GPIO_OUTPUT_OPENDRAIN);
-            LL_GPIO_SetPinMode(gpio->port, gpio->pin, LL_GPIO_MODE_OUTPUT);
-            break;
-        case GpioModeAltFunctionOpenDrain:
-            LL_GPIO_SetPinOutputType(gpio->port, gpio->pin, LL_GPIO_OUTPUT_OPENDRAIN);
-            LL_GPIO_SetPinMode(gpio->port, gpio->pin, LL_GPIO_MODE_ALTERNATE);
-            break;
-        case GpioModeAnalog:
-            LL_GPIO_SetPinMode(gpio->port, gpio->pin, LL_GPIO_MODE_ANALOG);
-            break;
-        default:
-            break;
-        }
-    }
-
-    __enable_irq();
-}
-
-void hal_gpio_add_int_callback(const GpioPin* gpio, GpioExtiCallback cb, void* ctx) {
-    assert(gpio);
-    assert(cb);
-
-    __disable_irq();
-    uint8_t pin_num = hal_gpio_get_pin_num(gpio);
-    gpio_interrupt[pin_num].callback = cb;
-    gpio_interrupt[pin_num].context = ctx;
-    gpio_interrupt[pin_num].ready = true;
-    __enable_irq();
-}
-
-void hal_gpio_enable_int_callback(const GpioPin* gpio) {
-    assert(gpio);
-
-    __disable_irq();
-    uint8_t pin_num = hal_gpio_get_pin_num(gpio);
-    if(gpio_interrupt[pin_num].callback) {
-        gpio_interrupt[pin_num].ready = true;
-    }
-    __enable_irq();
-}
-
-void hal_gpio_disable_int_callback(const GpioPin* gpio) {
-    assert(gpio);
-
-    __disable_irq();
-    uint8_t pin_num = hal_gpio_get_pin_num(gpio);
-    gpio_interrupt[pin_num].ready = false;
-    __enable_irq();
-}
-
-void hal_gpio_remove_int_callback(const GpioPin* gpio) {
-    assert(gpio);
-
-    __disable_irq();
-    uint8_t pin_num = hal_gpio_get_pin_num(gpio);
-    gpio_interrupt[pin_num].callback = NULL;
-    gpio_interrupt[pin_num].context = NULL;
-    gpio_interrupt[pin_num].ready = false;
-    __enable_irq();
-}

+ 0 - 264
bootloader/targets/f6/furi_hal/furi_hal_gpio.h

@@ -1,264 +0,0 @@
-#pragma once
-#include "main.h"
-#include "stdbool.h"
-#include <stm32wbxx_ll_gpio.h>
-#include <stm32wbxx_ll_system.h>
-#include <stm32wbxx_ll_exti.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Number of gpio on one port
- */
-#define GPIO_NUMBER (16U)
-
-/**
- * Interrupt callback prototype
- */
-typedef void (*GpioExtiCallback)(void* ctx);
-
-/**
- * Gpio interrupt type
- */
-typedef struct {
-    GpioExtiCallback callback;
-    void* context;
-    volatile bool ready;
-} GpioInterrupt;
-
-/**
- * Gpio modes
- */
-typedef enum {
-    GpioModeInput,
-    GpioModeOutputPushPull,
-    GpioModeOutputOpenDrain,
-    GpioModeAltFunctionPushPull,
-    GpioModeAltFunctionOpenDrain,
-    GpioModeAnalog,
-    GpioModeInterruptRise,
-    GpioModeInterruptFall,
-    GpioModeInterruptRiseFall,
-    GpioModeEventRise,
-    GpioModeEventFall,
-    GpioModeEventRiseFall,
-} GpioMode;
-
-/**
- * Gpio pull modes
- */
-typedef enum {
-    GpioPullNo,
-    GpioPullUp,
-    GpioPullDown,
-} GpioPull;
-
-/**
- * Gpio speed modes
- */
-typedef enum {
-    GpioSpeedLow,
-    GpioSpeedMedium,
-    GpioSpeedHigh,
-    GpioSpeedVeryHigh,
-} GpioSpeed;
-
-/**
- * Gpio alternate functions
- */
-typedef enum {
-    GpioAltFn0MCO = 0, /*!< MCO Alternate Function mapping */
-    GpioAltFn0LSCO = 0, /*!< LSCO Alternate Function mapping */
-    GpioAltFn0JTMS_SWDIO = 0, /*!< JTMS-SWDIO Alternate Function mapping */
-    GpioAltFn0JTCK_SWCLK = 0, /*!< JTCK-SWCLK Alternate Function mapping */
-    GpioAltFn0JTDI = 0, /*!< JTDI Alternate Function mapping */
-    GpioAltFn0RTC_OUT = 0, /*!< RCT_OUT Alternate Function mapping */
-    GpioAltFn0JTD_TRACE = 0, /*!< JTDO-TRACESWO Alternate Function mapping */
-    GpioAltFn0NJTRST = 0, /*!< NJTRST Alternate Function mapping */
-    GpioAltFn0RTC_REFIN = 0, /*!< RTC_REFIN Alternate Function mapping */
-    GpioAltFn0TRACED0 = 0, /*!< TRACED0 Alternate Function mapping */
-    GpioAltFn0TRACED1 = 0, /*!< TRACED1 Alternate Function mapping */
-    GpioAltFn0TRACED2 = 0, /*!< TRACED2 Alternate Function mapping */
-    GpioAltFn0TRACED3 = 0, /*!< TRACED3 Alternate Function mapping */
-    GpioAltFn0TRIG_INOUT = 0, /*!< TRIG_INOUT Alternate Function mapping */
-    GpioAltFn0TRACECK = 0, /*!< TRACECK Alternate Function mapping */
-    GpioAltFn0SYS = 0, /*!< System Function mapping */
-
-    GpioAltFn1TIM1 = 1, /*!< TIM1 Alternate Function mapping */
-    GpioAltFn1TIM2 = 1, /*!< TIM2 Alternate Function mapping */
-    GpioAltFn1LPTIM1 = 1, /*!< LPTIM1 Alternate Function mapping */
-
-    GpioAltFn2TIM2 = 2, /*!< TIM2 Alternate Function mapping */
-    GpioAltFn2TIM1 = 2, /*!< TIM1 Alternate Function mapping */
-
-    GpioAltFn3SAI1 = 3, /*!< SAI1_CK1 Alternate Function mapping */
-    GpioAltFn3SPI2 = 3, /*!< SPI2 Alternate Function mapping */
-    GpioAltFn3TIM1 = 3, /*!< TIM1 Alternate Function mapping */
-
-    GpioAltFn4I2C1 = 4, /*!< I2C1 Alternate Function mapping */
-    GpioAltFn4I2C3 = 4, /*!< I2C3 Alternate Function mapping */
-
-    GpioAltFn5SPI1 = 5, /*!< SPI1 Alternate Function mapping */
-    GpioAltFn5SPI2 = 5, /*!< SPI2 Alternate Function mapping */
-
-    GpioAltFn6MCO = 6, /*!< MCO Alternate Function mapping */
-    GpioAltFn6LSCO = 6, /*!< LSCO Alternate Function mapping */
-    GpioAltFn6RF_DTB0 = 6, /*!< RF_DTB0 Alternate Function mapping */
-    GpioAltFn6RF_DTB1 = 6, /*!< RF_DTB1 Alternate Function mapping */
-    GpioAltFn6RF_DTB2 = 6, /*!< RF_DTB2 Alternate Function mapping */
-    GpioAltFn6RF_DTB3 = 6, /*!< RF_DTB3 Alternate Function mapping */
-    GpioAltFn6RF_DTB4 = 6, /*!< RF_DTB4 Alternate Function mapping */
-    GpioAltFn6RF_DTB5 = 6, /*!< RF_DTB5 Alternate Function mapping */
-    GpioAltFn6RF_DTB6 = 6, /*!< RF_DTB6 Alternate Function mapping */
-    GpioAltFn6RF_DTB7 = 6, /*!< RF_DTB7 Alternate Function mapping */
-    GpioAltFn6RF_DTB8 = 6, /*!< RF_DTB8 Alternate Function mapping */
-    GpioAltFn6RF_DTB9 = 6, /*!< RF_DTB9 Alternate Function mapping */
-    GpioAltFn6RF_DTB10 = 6, /*!< RF_DTB10 Alternate Function mapping */
-    GpioAltFn6RF_DTB11 = 6, /*!< RF_DTB11 Alternate Function mapping */
-    GpioAltFn6RF_DTB12 = 6, /*!< RF_DTB12 Alternate Function mapping */
-    GpioAltFn6RF_DTB13 = 6, /*!< RF_DTB13 Alternate Function mapping */
-    GpioAltFn6RF_DTB14 = 6, /*!< RF_DTB14 Alternate Function mapping */
-    GpioAltFn6RF_DTB15 = 6, /*!< RF_DTB15 Alternate Function mapping */
-    GpioAltFn6RF_DTB16 = 6, /*!< RF_DTB16 Alternate Function mapping */
-    GpioAltFn6RF_DTB17 = 6, /*!< RF_DTB17 Alternate Function mapping */
-    GpioAltFn6RF_DTB18 = 6, /*!< RF_DTB18 Alternate Function mapping */
-    GpioAltFn6RF_MISO = 6, /*!< RF_MISO Alternate Function mapping */
-    GpioAltFn6RF_MOSI = 6, /*!< RF_MOSI Alternate Function mapping */
-    GpioAltFn6RF_SCK = 6, /*!< RF_SCK Alternate Function mapping */
-    GpioAltFn6RF_NSS = 6, /*!< RF_NSS Alternate Function mapping */
-
-    GpioAltFn7USART1 = 7, /*!< USART1 Alternate Function mapping */
-
-    GpioAltFn8LPUART1 = 8, /*!< LPUART1 Alternate Function mapping */
-    GpioAltFn8IR = 8, /*!< IR Alternate Function mapping */
-
-    GpioAltFn9TSC = 9, /*!< TSC Alternate Function mapping */
-
-    GpioAltFn10QUADSPI = 10, /*!< QUADSPI Alternate Function mapping */
-    GpioAltFn10USB = 10, /*!< USB Alternate Function mapping */
-
-    GpioAltFn11LCD = 11, /*!< LCD Alternate Function mapping */
-
-    GpioAltFn12COMP1 = 12, /*!< COMP1 Alternate Function mapping */
-    GpioAltFn12COMP2 = 12, /*!< COMP2 Alternate Function mapping */
-    GpioAltFn12TIM1 = 12, /*!< TIM1 Alternate Function mapping */
-
-    GpioAltFn13SAI1 = 13, /*!< SAI1 Alternate Function mapping */
-
-    GpioAltFn14TIM2 = 14, /*!< TIM2 Alternate Function mapping */
-    GpioAltFn14TIM16 = 14, /*!< TIM16 Alternate Function mapping */
-    GpioAltFn14TIM17 = 14, /*!< TIM17 Alternate Function mapping */
-    GpioAltFn14LPTIM2 = 14, /*!< LPTIM2 Alternate Function mapping */
-
-    GpioAltFn15EVENTOUT = 15, /*!< EVENTOUT Alternate Function mapping */
-
-    GpioAltFnUnused = 16, /*!< just dummy value */
-} GpioAltFn;
-
-/**
- * Gpio structure
- */
-typedef struct {
-    GPIO_TypeDef* port;
-    uint16_t pin;
-} GpioPin;
-
-/**
- * GPIO initialization function, simple version
- * @param gpio  GpioPin
- * @param mode  GpioMode
- */
-void hal_gpio_init_simple(const GpioPin* gpio, const GpioMode mode);
-
-/**
- * GPIO initialization function, normal version
- * @param gpio  GpioPin
- * @param mode  GpioMode
- * @param pull  GpioPull
- * @param speed GpioSpeed
- */
-void hal_gpio_init(
-    const GpioPin* gpio,
-    const GpioMode mode,
-    const GpioPull pull,
-    const GpioSpeed speed);
-
-/**
- * GPIO initialization function, extended version
- * @param gpio  GpioPin
- * @param mode  GpioMode
- * @param pull  GpioPull
- * @param speed GpioSpeed
- * @param alt_fn GpioAltFn
- */
-void hal_gpio_init_ex(
-    const GpioPin* gpio,
-    const GpioMode mode,
-    const GpioPull pull,
-    const GpioSpeed speed,
-    const GpioAltFn alt_fn);
-
-/**
- * Add and enable interrupt
- * @param gpio GpioPin
- * @param cb   GpioExtiCallback
- * @param ctx  context for callback
- */
-void hal_gpio_add_int_callback(const GpioPin* gpio, GpioExtiCallback cb, void* ctx);
-
-/**
- * Enable interrupt
- * @param gpio GpioPin
- */
-void hal_gpio_enable_int_callback(const GpioPin* gpio);
-
-/**
- * Disable interrupt
- * @param gpio GpioPin
- */
-void hal_gpio_disable_int_callback(const GpioPin* gpio);
-
-/**
- * Remove interrupt
- * @param gpio GpioPin
- */
-void hal_gpio_remove_int_callback(const GpioPin* gpio);
-
-/**
- * GPIO write pin
- * @param gpio  GpioPin
- * @param state true / false
- */
-static inline void hal_gpio_write(const GpioPin* gpio, const bool state) {
-    // writing to BSSR is an atomic operation
-    if(state == true) {
-        gpio->port->BSRR = gpio->pin;
-    } else {
-        gpio->port->BSRR = (uint32_t)gpio->pin << GPIO_NUMBER;
-    }
-}
-
-/**
- * GPIO read pin
- * @param gpio GpioPin
- * @return true / false
- */
-static inline bool hal_gpio_read(const GpioPin* gpio) {
-    if((gpio->port->IDR & gpio->pin) != 0x00U) {
-        return true;
-    } else {
-        return false;
-    }
-}
-
-/**
- * Get RFID IN level
- * @return false = LOW, true = HIGH
- */
-bool hal_gpio_get_rfid_in_level();
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 205
bootloader/targets/f6/furi_hal/furi_hal_i2c.c

@@ -1,205 +0,0 @@
-#include <furi_hal_i2c.h>
-#include <furi_hal_version.h>
-
-#include <stm32wbxx_ll_i2c.h>
-#include <stm32wbxx_ll_gpio.h>
-#include <stm32wbxx_ll_cortex.h>
-
-#include <assert.h>
-
-void furi_hal_i2c_init() {
-    furi_hal_i2c_bus_power.callback(&furi_hal_i2c_bus_power, FuriHalI2cBusEventInit);
-}
-
-void furi_hal_i2c_acquire(FuriHalI2cBusHandle* handle) {
-    handle->bus->callback(handle->bus, FuriHalI2cBusEventLock);
-
-    assert(handle->bus->current_handle == NULL);
-
-    handle->bus->current_handle = handle;
-
-    handle->bus->callback(handle->bus, FuriHalI2cBusEventActivate);
-
-    handle->callback(handle, FuriHalI2cBusHandleEventActivate);
-}
-
-void furi_hal_i2c_release(FuriHalI2cBusHandle* handle) {
-    assert(handle->bus->current_handle == handle);
-
-    handle->callback(handle, FuriHalI2cBusHandleEventDeactivate);
-
-    handle->bus->callback(handle->bus, FuriHalI2cBusEventDeactivate);
-
-    handle->bus->current_handle = NULL;
-
-    handle->bus->callback(handle->bus, FuriHalI2cBusEventUnlock);
-}
-
-bool furi_hal_i2c_tx(
-    FuriHalI2cBusHandle* handle,
-    uint8_t address,
-    const uint8_t* data,
-    uint8_t size,
-    uint32_t timeout) {
-    assert(handle->bus->current_handle == handle);
-    uint32_t time_left = timeout;
-    bool ret = true;
-
-    while(LL_I2C_IsActiveFlag_BUSY(handle->bus->i2c))
-        ;
-
-    LL_I2C_HandleTransfer(
-        handle->bus->i2c,
-        address,
-        LL_I2C_ADDRSLAVE_7BIT,
-        size,
-        LL_I2C_MODE_AUTOEND,
-        LL_I2C_GENERATE_START_WRITE);
-
-    while(!LL_I2C_IsActiveFlag_STOP(handle->bus->i2c) || size > 0) {
-        if(LL_I2C_IsActiveFlag_TXIS(handle->bus->i2c)) {
-            LL_I2C_TransmitData8(handle->bus->i2c, (*data));
-            data++;
-            size--;
-            time_left = timeout;
-        }
-
-        if(LL_SYSTICK_IsActiveCounterFlag()) {
-            if(--time_left == 0) {
-                ret = false;
-                break;
-            }
-        }
-    }
-
-    LL_I2C_ClearFlag_STOP(handle->bus->i2c);
-
-    return ret;
-}
-
-bool furi_hal_i2c_rx(
-    FuriHalI2cBusHandle* handle,
-    uint8_t address,
-    uint8_t* data,
-    uint8_t size,
-    uint32_t timeout) {
-    assert(handle->bus->current_handle == handle);
-    uint32_t time_left = timeout;
-    bool ret = true;
-
-    while(LL_I2C_IsActiveFlag_BUSY(handle->bus->i2c))
-        ;
-
-    LL_I2C_HandleTransfer(
-        handle->bus->i2c,
-        address,
-        LL_I2C_ADDRSLAVE_7BIT,
-        size,
-        LL_I2C_MODE_AUTOEND,
-        LL_I2C_GENERATE_START_READ);
-
-    while(!LL_I2C_IsActiveFlag_STOP(handle->bus->i2c) || size > 0) {
-        if(LL_I2C_IsActiveFlag_RXNE(handle->bus->i2c)) {
-            *data = LL_I2C_ReceiveData8(handle->bus->i2c);
-            data++;
-            size--;
-            time_left = timeout;
-        }
-
-        if(LL_SYSTICK_IsActiveCounterFlag()) {
-            if(--time_left == 0) {
-                ret = false;
-                break;
-            }
-        }
-    }
-
-    LL_I2C_ClearFlag_STOP(handle->bus->i2c);
-
-    return ret;
-}
-
-bool furi_hal_i2c_trx(
-    FuriHalI2cBusHandle* handle,
-    uint8_t address,
-    const uint8_t* tx_data,
-    uint8_t tx_size,
-    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;
-    } else {
-        return false;
-    }
-}
-
-bool furi_hal_i2c_read_reg_8(
-    FuriHalI2cBusHandle* handle,
-    uint8_t i2c_addr,
-    uint8_t reg_addr,
-    uint8_t* data,
-    uint32_t timeout) {
-    assert(handle);
-
-    return furi_hal_i2c_trx(handle, i2c_addr, &reg_addr, 1, data, 1, timeout);
-}
-
-bool furi_hal_i2c_read_reg_16(
-    FuriHalI2cBusHandle* handle,
-    uint8_t i2c_addr,
-    uint8_t reg_addr,
-    uint16_t* data,
-    uint32_t timeout) {
-    assert(handle);
-
-    uint8_t reg_data[2];
-    bool ret = furi_hal_i2c_trx(handle, i2c_addr, &reg_addr, 1, reg_data, 2, timeout);
-    *data = (reg_data[0] << 8) | (reg_data[1]);
-
-    return ret;
-}
-
-bool furi_hal_i2c_read_mem(
-    FuriHalI2cBusHandle* handle,
-    uint8_t i2c_addr,
-    uint8_t mem_addr,
-    uint8_t* data,
-    uint8_t len,
-    uint32_t timeout) {
-    assert(handle);
-
-    return furi_hal_i2c_trx(handle, i2c_addr, &mem_addr, 1, data, len, timeout);
-}
-
-bool furi_hal_i2c_write_reg_8(
-    FuriHalI2cBusHandle* handle,
-    uint8_t i2c_addr,
-    uint8_t reg_addr,
-    uint8_t data,
-    uint32_t timeout) {
-    assert(handle);
-
-    uint8_t tx_data[2];
-    tx_data[0] = reg_addr;
-    tx_data[1] = data;
-
-    return furi_hal_i2c_tx(handle, i2c_addr, (const uint8_t*)&tx_data, 2, timeout);
-}
-
-bool furi_hal_i2c_write_reg_16(
-    FuriHalI2cBusHandle* handle,
-    uint8_t i2c_addr,
-    uint8_t reg_addr,
-    uint16_t data,
-    uint32_t timeout) {
-    assert(handle);
-
-    uint8_t tx_data[3];
-    tx_data[0] = reg_addr;
-    tx_data[1] = (data >> 8) & 0xFF;
-    tx_data[2] = data & 0xFF;
-
-    return furi_hal_i2c_tx(handle, i2c_addr, (const uint8_t*)&tx_data, 3, timeout);
-}

+ 0 - 195
bootloader/targets/f6/furi_hal/furi_hal_i2c.h

@@ -1,195 +0,0 @@
-/**
- * @file furi_hal_i2c.h
- * I2C HAL API
- */
-
-#pragma once
-
-#include <stdbool.h>
-#include <stdint.h>
-#include <furi_hal_i2c_config.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** Init I2C
- */
-void furi_hal_i2c_init();
-
-/** Acquire i2c bus handle
- *
- * @return     Instance of FuriHalI2cBus
- */
-void furi_hal_i2c_acquire(FuriHalI2cBusHandle* handle);
-
-/** Release i2c bus handle
- *
- * @param      bus   instance of FuriHalI2cBus aquired in `furi_hal_i2c_acquire`
- */
-void furi_hal_i2c_release(FuriHalI2cBusHandle* handle);
-
-/** Perform I2C tx transfer
- *
- * @param      handle   pointer to FuriHalI2cBusHandle instance
- * @param      address  I2C slave address
- * @param      data     pointer to data buffer
- * @param      size     size of data buffer
- * @param      timeout  timeout in ticks
- *
- * @return     true on successful transfer, false otherwise
- */
-bool furi_hal_i2c_tx(
-    FuriHalI2cBusHandle* handle,
-    const uint8_t address,
-    const uint8_t* data,
-    const uint8_t size,
-    uint32_t timeout);
-
-/** Perform I2C rx transfer
- *
- * @param      handle   pointer to FuriHalI2cBusHandle instance
- * @param      address  I2C slave address
- * @param      data     pointer to data buffer
- * @param      size     size of data buffer
- * @param      timeout  timeout in ticks
- *
- * @return     true on successful transfer, false otherwise
- */
-bool furi_hal_i2c_rx(
-    FuriHalI2cBusHandle* handle,
-    const uint8_t address,
-    uint8_t* data,
-    const uint8_t size,
-    uint32_t timeout);
-
-/** Perform I2C tx and rx transfers
- *
- * @param      handle   pointer to FuriHalI2cBusHandle instance
- * @param      address  I2C slave address
- * @param      tx_data  pointer to tx data buffer
- * @param      tx_size  size of tx data buffer
- * @param      rx_data  pointer to rx data buffer
- * @param      rx_size  size of rx data buffer
- * @param      timeout  timeout in ticks
- *
- * @return     true on successful transfer, false otherwise
- */
-bool furi_hal_i2c_trx(
-    FuriHalI2cBusHandle* handle,
-    const uint8_t address,
-    const uint8_t* tx_data,
-    const uint8_t tx_size,
-    uint8_t* rx_data,
-    const uint8_t rx_size,
-    uint32_t timeout);
-
-/** Perform I2C device register read (8-bit)
- *
- * @param      handle   pointer to FuriHalI2cBusHandle instance
- * @param      i2c_addr I2C slave address
- * @param      reg_addr register address
- * @param      data     pointer to register value
- * @param      timeout  timeout in ticks
- *
- * @return     true on successful transfer, false otherwise
- */
-bool furi_hal_i2c_read_reg_8(
-    FuriHalI2cBusHandle* handle,
-    uint8_t i2c_addr,
-    uint8_t reg_addr,
-    uint8_t* data,
-    uint32_t timeout);
-
-/** Perform I2C device register read (16-bit)
- *
- * @param      handle   pointer to FuriHalI2cBusHandle instance
- * @param      i2c_addr I2C slave address
- * @param      reg_addr register address
- * @param      data     pointer to register value
- * @param      timeout  timeout in ticks
- *
- * @return     true on successful transfer, false otherwise
- */
-bool furi_hal_i2c_read_reg_16(
-    FuriHalI2cBusHandle* handle,
-    uint8_t i2c_addr,
-    uint8_t reg_addr,
-    uint16_t* data,
-    uint32_t timeout);
-
-/** Perform I2C device memory read
- *
- * @param      handle   pointer to FuriHalI2cBusHandle instance
- * @param      i2c_addr I2C slave address
- * @param      mem_addr memory start address
- * @param      data     pointer to data buffer
- * @param      len      size of data buffer
- * @param      timeout  timeout in ticks
- *
- * @return     true on successful transfer, false otherwise
- */
-bool furi_hal_i2c_read_mem(
-    FuriHalI2cBusHandle* handle,
-    uint8_t i2c_addr,
-    uint8_t mem_addr,
-    uint8_t* data,
-    uint8_t len,
-    uint32_t timeout);
-
-/** Perform I2C device register write (8-bit)
- *
- * @param      handle   pointer to FuriHalI2cBusHandle instance
- * @param      i2c_addr I2C slave address
- * @param      reg_addr register address
- * @param      data     register value
- * @param      timeout  timeout in ticks
- *
- * @return     true on successful transfer, false otherwise
- */
-bool furi_hal_i2c_write_reg_8(
-    FuriHalI2cBusHandle* handle,
-    uint8_t i2c_addr,
-    uint8_t reg_addr,
-    uint8_t data,
-    uint32_t timeout);
-
-/** Perform I2C device register write (16-bit)
- *
- * @param      handle   pointer to FuriHalI2cBusHandle instance
- * @param      i2c_addr I2C slave address
- * @param      reg_addr register address
- * @param      data     register value
- * @param      timeout  timeout in ticks
- *
- * @return     true on successful transfer, false otherwise
- */
-bool furi_hal_i2c_write_reg_16(
-    FuriHalI2cBusHandle* handle,
-    uint8_t i2c_addr,
-    uint8_t reg_addr,
-    uint16_t data,
-    uint32_t timeout);
-
-/** Perform I2C device memory
- *
- * @param      handle   pointer to FuriHalI2cBusHandle instance
- * @param      i2c_addr I2C slave address
- * @param      mem_addr memory start address
- * @param      data     pointer to data buffer
- * @param      len      size of data buffer
- * @param      timeout  timeout in ticks
- *
- * @return     true on successful transfer, false otherwise
- */
-bool furi_hal_i2c_write_mem(
-    FuriHalI2cBusHandle* handle,
-    uint8_t i2c_addr,
-    uint8_t mem_addr,
-    uint8_t* data,
-    uint8_t len,
-    uint32_t timeout);
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 149
bootloader/targets/f6/furi_hal/furi_hal_i2c_config.c

@@ -1,149 +0,0 @@
-#include "furi_hal_i2c_config.h"
-#include <furi_hal_resources.h>
-#include <furi_hal_version.h>
-
-#include <stm32wbxx_ll_rcc.h>
-#include <stm32wbxx_ll_bus.h>
-
-/** Timing register value is computed with the STM32CubeMX Tool,
-  * Standard Mode @100kHz with I2CCLK = 64 MHz,
-  * rise time = 0ns, fall time = 0ns
-  */
-#define FURI_HAL_I2C_CONFIG_POWER_I2C_TIMINGS_100 0x10707DBC
-
-/** Timing register value is computed with the STM32CubeMX Tool,
-  * Fast Mode @400kHz with I2CCLK = 64 MHz,
-  * rise time = 0ns, fall time = 0ns
-  */
-#define FURI_HAL_I2C_CONFIG_POWER_I2C_TIMINGS_400 0x00602173
-
-static void furi_hal_i2c_bus_power_event(FuriHalI2cBus* bus, FuriHalI2cBusEvent event) {
-    if(event == FuriHalI2cBusEventInit) {
-        LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C1);
-        LL_RCC_SetI2CClockSource(LL_RCC_I2C1_CLKSOURCE_PCLK1);
-        LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_I2C1);
-        bus->current_handle = NULL;
-    } else if(event == FuriHalI2cBusEventDeinit) {
-    } else if(event == FuriHalI2cBusEventLock) {
-    } else if(event == FuriHalI2cBusEventUnlock) {
-    } else if(event == FuriHalI2cBusEventActivate) {
-        LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_I2C1);
-    } else if(event == FuriHalI2cBusEventDeactivate) {
-        LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_I2C1);
-    }
-}
-
-FuriHalI2cBus furi_hal_i2c_bus_power = {
-    .i2c = I2C1,
-    .current_handle = NULL,
-    .callback = furi_hal_i2c_bus_power_event,
-};
-
-static void furi_hal_i2c_bus_external_event(FuriHalI2cBus* bus, FuriHalI2cBusEvent event) {
-    if(event == FuriHalI2cBusEventActivate) {
-        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);
-    } else if(event == FuriHalI2cBusEventDeactivate) {
-        LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_I2C3);
-    }
-}
-
-FuriHalI2cBus furi_hal_i2c_bus_external = {
-    .i2c = I2C3,
-    .current_handle = NULL,
-    .callback = furi_hal_i2c_bus_external_event,
-};
-
-void furi_hal_i2c_bus_handle_power_event(
-    FuriHalI2cBusHandle* handle,
-    FuriHalI2cBusHandleEvent event) {
-    if(event == FuriHalI2cBusHandleEventActivate) {
-        LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA);
-        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;
-        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;
-        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;
-        }
-        LL_I2C_Init(handle->bus->i2c, &I2C_InitStruct);
-
-        LL_I2C_EnableAutoEndMode(handle->bus->i2c);
-        LL_I2C_SetOwnAddress2(handle->bus->i2c, 0, LL_I2C_OWNADDRESS2_NOMASK);
-        LL_I2C_DisableOwnAddress2(handle->bus->i2c);
-        LL_I2C_DisableGeneralCall(handle->bus->i2c);
-        LL_I2C_EnableClockStretching(handle->bus->i2c);
-        LL_I2C_Enable(handle->bus->i2c);
-    } 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);
-    }
-}
-
-FuriHalI2cBusHandle furi_hal_i2c_handle_power = {
-    .bus = &furi_hal_i2c_bus_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);
-
-        LL_I2C_InitTypeDef I2C_InitStruct = {0};
-        I2C_InitStruct.PeripheralMode = LL_I2C_MODE_I2C;
-        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;
-        I2C_InitStruct.Timing = FURI_HAL_I2C_CONFIG_POWER_I2C_TIMINGS_100;
-        LL_I2C_Init(handle->bus->i2c, &I2C_InitStruct);
-
-        LL_I2C_EnableAutoEndMode(handle->bus->i2c);
-        LL_I2C_SetOwnAddress2(handle->bus->i2c, 0, LL_I2C_OWNADDRESS2_NOMASK);
-        LL_I2C_DisableOwnAddress2(handle->bus->i2c);
-        LL_I2C_DisableGeneralCall(handle->bus->i2c);
-        LL_I2C_EnableClockStretching(handle->bus->i2c);
-        LL_I2C_Enable(handle->bus->i2c);
-    } else if(event == FuriHalI2cBusHandleEventDeactivate) {
-        LL_I2C_Disable(handle->bus->i2c);
-        hal_gpio_write(&gpio_ext_pc0, 1);
-        hal_gpio_write(&gpio_ext_pc1, 1);
-        hal_gpio_init_ex(&gpio_ext_pc0, GpioModeAnalog, GpioPullNo, GpioSpeedLow, GpioAltFnUnused);
-        hal_gpio_init_ex(&gpio_ext_pc1, GpioModeAnalog, GpioPullNo, GpioSpeedLow, GpioAltFnUnused);
-    }
-}
-
-FuriHalI2cBusHandle furi_hal_i2c_handle_external = {
-    .bus = &furi_hal_i2c_bus_external,
-    .callback = furi_hal_i2c_bus_handle_external_event,
-};

+ 0 - 31
bootloader/targets/f6/furi_hal/furi_hal_i2c_config.h

@@ -1,31 +0,0 @@
-#pragma once
-
-#include <furi_hal_i2c_types.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** Internal(power) i2c bus, I2C1, under reset when not used */
-extern FuriHalI2cBus furi_hal_i2c_bus_power;
-
-/** External i2c bus, I2C3, under reset when not used */
-extern FuriHalI2cBus furi_hal_i2c_bus_external;
-
-/** Handle for internal(power) i2c bus
- * Bus: furi_hal_i2c_bus_external
- * Pins: PA9(SCL) / PA10(SDA), float on release
- * Params: 400khz
- */
-extern FuriHalI2cBusHandle furi_hal_i2c_handle_power;
-
-/** Handle for external i2c bus
- * Bus: furi_hal_i2c_bus_external
- * Pins: PC0(SCL) / PC1(SDA), float on release
- * Params: 100khz
- */
-extern FuriHalI2cBusHandle furi_hal_i2c_handle_external;
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 51
bootloader/targets/f6/furi_hal/furi_hal_i2c_types.h

@@ -1,51 +0,0 @@
-#pragma once
-
-#include <stm32wbxx_ll_i2c.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct FuriHalI2cBus FuriHalI2cBus;
-typedef struct FuriHalI2cBusHandle FuriHalI2cBusHandle;
-
-/** FuriHal i2c bus states */
-typedef enum {
-    FuriHalI2cBusEventInit, /**< Bus initialization event, called on system start */
-    FuriHalI2cBusEventDeinit, /**< Bus deinitialization event, called on system stop */
-    FuriHalI2cBusEventLock, /**< Bus lock event, called before activation */
-    FuriHalI2cBusEventUnlock, /**< Bus unlock event, called after deactivation */
-    FuriHalI2cBusEventActivate, /**< Bus activation event, called before handle activation */
-    FuriHalI2cBusEventDeactivate, /**< Bus deactivation event, called after handle deactivation  */
-} FuriHalI2cBusEvent;
-
-/** FuriHal i2c bus event callback */
-typedef void (*FuriHalI2cBusEventCallback)(FuriHalI2cBus* bus, FuriHalI2cBusEvent event);
-
-/** FuriHal i2c bus */
-struct FuriHalI2cBus {
-    I2C_TypeDef* i2c;
-    FuriHalI2cBusHandle* current_handle;
-    FuriHalI2cBusEventCallback callback;
-};
-
-/** FuriHal i2c handle states */
-typedef enum {
-    FuriHalI2cBusHandleEventActivate, /**< Handle activate: connect gpio and apply bus config */
-    FuriHalI2cBusHandleEventDeactivate, /**< Handle deactivate: disconnect gpio and reset bus config */
-} FuriHalI2cBusHandleEvent;
-
-/** FuriHal i2c handle event callback */
-typedef void (*FuriHalI2cBusHandleEventCallback)(
-    FuriHalI2cBusHandle* handle,
-    FuriHalI2cBusHandleEvent event);
-
-/** FuriHal i2c handle */
-struct FuriHalI2cBusHandle {
-    FuriHalI2cBus* bus;
-    FuriHalI2cBusHandleEventCallback callback;
-};
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 49
bootloader/targets/f6/furi_hal/furi_hal_light.c

@@ -1,49 +0,0 @@
-#include <furi_hal_light.h>
-#include <lp5562.h>
-
-#define LED_CURRENT_RED 50
-#define LED_CURRENT_GREEN 50
-#define LED_CURRENT_BLUE 50
-#define LED_CURRENT_WHITE 150
-
-void furi_hal_light_init() {
-    furi_hal_i2c_acquire(&furi_hal_i2c_handle_power);
-
-    lp5562_reset(&furi_hal_i2c_handle_power);
-
-    lp5562_set_channel_current(&furi_hal_i2c_handle_power, LP5562ChannelRed, LED_CURRENT_RED);
-    lp5562_set_channel_current(&furi_hal_i2c_handle_power, LP5562ChannelGreen, LED_CURRENT_GREEN);
-    lp5562_set_channel_current(&furi_hal_i2c_handle_power, LP5562ChannelBlue, LED_CURRENT_BLUE);
-    lp5562_set_channel_current(&furi_hal_i2c_handle_power, LP5562ChannelWhite, LED_CURRENT_WHITE);
-
-    lp5562_set_channel_value(&furi_hal_i2c_handle_power, LP5562ChannelRed, 0x00);
-    lp5562_set_channel_value(&furi_hal_i2c_handle_power, LP5562ChannelGreen, 0x00);
-    lp5562_set_channel_value(&furi_hal_i2c_handle_power, LP5562ChannelBlue, 0x00);
-    lp5562_set_channel_value(&furi_hal_i2c_handle_power, LP5562ChannelWhite, 0x00);
-
-    lp5562_enable(&furi_hal_i2c_handle_power);
-    lp5562_configure(&furi_hal_i2c_handle_power);
-
-    furi_hal_i2c_release(&furi_hal_i2c_handle_power);
-}
-
-void furi_hal_light_set(Light light, uint8_t value) {
-    furi_hal_i2c_acquire(&furi_hal_i2c_handle_power);
-    switch(light) {
-    case LightRed:
-        lp5562_set_channel_value(&furi_hal_i2c_handle_power, LP5562ChannelRed, value);
-        break;
-    case LightGreen:
-        lp5562_set_channel_value(&furi_hal_i2c_handle_power, LP5562ChannelGreen, value);
-        break;
-    case LightBlue:
-        lp5562_set_channel_value(&furi_hal_i2c_handle_power, LP5562ChannelBlue, value);
-        break;
-    case LightBacklight:
-        lp5562_set_channel_value(&furi_hal_i2c_handle_power, LP5562ChannelWhite, value);
-        break;
-    default:
-        break;
-    }
-    furi_hal_i2c_release(&furi_hal_i2c_handle_power);
-}

+ 0 - 17
bootloader/targets/f6/furi_hal/furi_hal_light.h

@@ -1,17 +0,0 @@
-#pragma once
-
-#include <stdbool.h>
-#include <stdint.h>
-#include <furi_hal_resources.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void furi_hal_light_init();
-
-void furi_hal_light_set(Light light, uint8_t value);
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 44
bootloader/targets/f6/furi_hal/furi_hal_resources.c

@@ -1,44 +0,0 @@
-#include "furi_hal_resources.h"
-#include "main.h"
-
-const GpioPin vibro_gpio = {.port = VIBRO_GPIO_Port, .pin = VIBRO_Pin};
-const GpioPin ibutton_gpio = {.port = iBTN_GPIO_Port, .pin = iBTN_Pin};
-
-const GpioPin gpio_cc1101_g0 = {.port = CC1101_G0_GPIO_Port, .pin = CC1101_G0_Pin};
-const GpioPin gpio_rf_sw_0 = {.port = RF_SW_0_GPIO_Port, .pin = RF_SW_0_Pin};
-
-const GpioPin gpio_subghz_cs = {.port = CC1101_CS_GPIO_Port, .pin = CC1101_CS_Pin};
-const GpioPin gpio_display_cs = {.port = DISPLAY_CS_GPIO_Port, .pin = DISPLAY_CS_Pin};
-const GpioPin gpio_display_rst = {.port = DISPLAY_RST_GPIO_Port, .pin = DISPLAY_RST_Pin};
-const GpioPin gpio_display_di = {.port = DISPLAY_DI_GPIO_Port, .pin = DISPLAY_DI_Pin};
-const GpioPin gpio_sdcard_cs = {.port = SD_CS_GPIO_Port, .pin = SD_CS_Pin};
-const GpioPin gpio_nfc_cs = {.port = NFC_CS_GPIO_Port, .pin = NFC_CS_Pin};
-
-const GpioPin gpio_spi_d_miso = {.port = SPI_D_MISO_GPIO_Port, .pin = SPI_D_MISO_Pin};
-const GpioPin gpio_spi_d_mosi = {.port = SPI_D_MOSI_GPIO_Port, .pin = SPI_D_MOSI_Pin};
-const GpioPin gpio_spi_d_sck = {.port = SPI_D_SCK_GPIO_Port, .pin = SPI_D_SCK_Pin};
-const GpioPin gpio_spi_r_miso = {.port = SPI_R_MISO_GPIO_Port, .pin = SPI_R_MISO_Pin};
-const GpioPin gpio_spi_r_mosi = {.port = SPI_R_MOSI_GPIO_Port, .pin = SPI_R_MOSI_Pin};
-const GpioPin gpio_spi_r_sck = {.port = SPI_R_SCK_GPIO_Port, .pin = SPI_R_SCK_Pin};
-
-const GpioPin gpio_ext_pc0 = {.port = GPIOC, .pin = LL_GPIO_PIN_0};
-const GpioPin gpio_ext_pc1 = {.port = GPIOC, .pin = LL_GPIO_PIN_1};
-const GpioPin gpio_ext_pc3 = {.port = GPIOC, .pin = LL_GPIO_PIN_3};
-const GpioPin gpio_ext_pb2 = {.port = GPIOB, .pin = LL_GPIO_PIN_2};
-const GpioPin gpio_ext_pb3 = {.port = GPIOB, .pin = LL_GPIO_PIN_3};
-const GpioPin gpio_ext_pa4 = {.port = GPIOA, .pin = LL_GPIO_PIN_4};
-const GpioPin gpio_ext_pa6 = {.port = GPIOA, .pin = LL_GPIO_PIN_6};
-const GpioPin gpio_ext_pa7 = {.port = GPIOA, .pin = LL_GPIO_PIN_7};
-
-const GpioPin gpio_rfid_pull = {.port = RFID_PULL_GPIO_Port, .pin = RFID_PULL_Pin};
-const GpioPin gpio_rfid_carrier_out = {.port = RFID_OUT_GPIO_Port, .pin = RFID_OUT_Pin};
-const GpioPin gpio_rfid_data_in = {.port = RFID_RF_IN_GPIO_Port, .pin = RFID_RF_IN_Pin};
-
-const GpioPin gpio_infrared_rx = {.port = IR_RX_GPIO_Port, .pin = IR_RX_Pin};
-const GpioPin gpio_infrared_tx = {.port = IR_TX_GPIO_Port, .pin = IR_TX_Pin};
-
-const GpioPin gpio_usart_tx = {.port = USART1_TX_Port, .pin = USART1_TX_Pin};
-const GpioPin gpio_usart_rx = {.port = USART1_RX_Port, .pin = USART1_RX_Pin};
-
-const GpioPin gpio_i2c_power_sda = {.port = GPIOA, .pin = LL_GPIO_PIN_10};
-const GpioPin gpio_i2c_power_scl = {.port = GPIOA, .pin = LL_GPIO_PIN_9};

+ 0 - 73
bootloader/targets/f6/furi_hal/furi_hal_resources.h

@@ -1,73 +0,0 @@
-#pragma once
-
-#include <stm32wbxx.h>
-#include <stm32wbxx_ll_gpio.h>
-#include <furi_hal_gpio.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Input Keys */
-typedef enum {
-    InputKeyUp,
-    InputKeyDown,
-    InputKeyRight,
-    InputKeyLeft,
-    InputKeyOk,
-    InputKeyBack,
-} InputKey;
-
-/* Light */
-typedef enum {
-    LightRed,
-    LightGreen,
-    LightBlue,
-    LightBacklight,
-} Light;
-
-extern const GpioPin vibro_gpio;
-extern const GpioPin ibutton_gpio;
-
-extern const GpioPin gpio_cc1101_g0;
-extern const GpioPin gpio_rf_sw_0;
-
-extern const GpioPin gpio_subghz_cs;
-extern const GpioPin gpio_display_cs;
-extern const GpioPin gpio_display_rst;
-extern const GpioPin gpio_display_di;
-extern const GpioPin gpio_sdcard_cs;
-extern const GpioPin gpio_nfc_cs;
-
-extern const GpioPin gpio_spi_d_miso;
-extern const GpioPin gpio_spi_d_mosi;
-extern const GpioPin gpio_spi_d_sck;
-extern const GpioPin gpio_spi_r_miso;
-extern const GpioPin gpio_spi_r_mosi;
-extern const GpioPin gpio_spi_r_sck;
-
-extern const GpioPin gpio_ext_pc0;
-extern const GpioPin gpio_ext_pc1;
-extern const GpioPin gpio_ext_pc3;
-extern const GpioPin gpio_ext_pb2;
-extern const GpioPin gpio_ext_pb3;
-extern const GpioPin gpio_ext_pa4;
-extern const GpioPin gpio_ext_pa6;
-extern const GpioPin gpio_ext_pa7;
-
-extern const GpioPin gpio_rfid_pull;
-extern const GpioPin gpio_rfid_carrier_out;
-extern const GpioPin gpio_rfid_data_in;
-
-extern const GpioPin gpio_infrared_rx;
-extern const GpioPin gpio_infrared_tx;
-
-extern const GpioPin gpio_usart_tx;
-extern const GpioPin gpio_usart_rx;
-
-extern const GpioPin gpio_i2c_power_sda;
-extern const GpioPin gpio_i2c_power_scl;
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 151
bootloader/targets/f6/furi_hal/furi_hal_spi.c

@@ -1,151 +0,0 @@
-#include "furi_hal_spi.h"
-#include "furi_hal_resources.h"
-
-#include <stdbool.h>
-#include <string.h>
-#include <assert.h>
-
-#include <stm32wbxx_ll_spi.h>
-#include <stm32wbxx_ll_utils.h>
-#include <stm32wbxx_ll_cortex.h>
-
-void furi_hal_spi_init() {
-    furi_hal_spi_bus_init(&furi_hal_spi_bus_r);
-    furi_hal_spi_bus_init(&furi_hal_spi_bus_d);
-
-    furi_hal_spi_bus_handle_init(&furi_hal_spi_bus_handle_subghz);
-    furi_hal_spi_bus_handle_init(&furi_hal_spi_bus_handle_nfc);
-    furi_hal_spi_bus_handle_init(&furi_hal_spi_bus_handle_display);
-    furi_hal_spi_bus_handle_init(&furi_hal_spi_bus_handle_sd_fast);
-    furi_hal_spi_bus_handle_init(&furi_hal_spi_bus_handle_sd_slow);
-}
-
-void furi_hal_spi_bus_init(FuriHalSpiBus* bus) {
-    assert(bus);
-    bus->callback(bus, FuriHalSpiBusEventInit);
-}
-
-void furi_hal_spi_bus_deinit(FuriHalSpiBus* bus) {
-    assert(bus);
-    bus->callback(bus, FuriHalSpiBusEventDeinit);
-}
-
-void furi_hal_spi_bus_handle_init(FuriHalSpiBusHandle* handle) {
-    assert(handle);
-    handle->callback(handle, FuriHalSpiBusHandleEventInit);
-}
-
-void furi_hal_spi_bus_handle_deinit(FuriHalSpiBusHandle* handle) {
-    assert(handle);
-    handle->callback(handle, FuriHalSpiBusHandleEventDeinit);
-}
-
-void furi_hal_spi_acquire(FuriHalSpiBusHandle* handle) {
-    assert(handle);
-
-    handle->bus->callback(handle->bus, FuriHalSpiBusEventLock);
-    handle->bus->callback(handle->bus, FuriHalSpiBusEventActivate);
-
-    assert(handle->bus->current_handle == NULL);
-
-    handle->bus->current_handle = handle;
-    handle->callback(handle, FuriHalSpiBusHandleEventActivate);
-}
-
-void furi_hal_spi_release(FuriHalSpiBusHandle* handle) {
-    assert(handle);
-    assert(handle->bus->current_handle == handle);
-
-    // Handle event and unset handle
-    handle->callback(handle, FuriHalSpiBusHandleEventDeactivate);
-    handle->bus->current_handle = NULL;
-
-    // Bus events
-    handle->bus->callback(handle->bus, FuriHalSpiBusEventDeactivate);
-    handle->bus->callback(handle->bus, FuriHalSpiBusEventUnlock);
-}
-
-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_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) {
-    assert(handle);
-    assert(handle->bus->current_handle == handle);
-    assert(buffer);
-    assert(size > 0);
-
-    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) {
-    assert(handle);
-    assert(handle->bus->current_handle == handle);
-    assert(buffer);
-    assert(size > 0);
-    bool ret = true;
-
-    while(size > 0) {
-        if(LL_SPI_IsActiveFlag_TXE(handle->bus->spi)) {
-            LL_SPI_TransmitData8(handle->bus->spi, *buffer);
-            buffer++;
-            size--;
-        }
-    }
-
-    furi_hal_spi_bus_end_txrx(handle, timeout);
-    LL_SPI_ClearFlag_OVR(handle->bus->spi);
-
-    return ret;
-}
-
-bool furi_hal_spi_bus_trx(
-    FuriHalSpiBusHandle* handle,
-    uint8_t* tx_buffer,
-    uint8_t* rx_buffer,
-    size_t size,
-    uint32_t timeout) {
-    assert(handle);
-    assert(handle->bus->current_handle == handle);
-    assert(tx_buffer);
-    assert(rx_buffer);
-    assert(size > 0);
-
-    bool ret = true;
-    size_t tx_size = size;
-    bool tx_allowed = true;
-
-    while(size > 0) {
-        if(tx_size > 0 && LL_SPI_IsActiveFlag_TXE(handle->bus->spi) && tx_allowed) {
-            LL_SPI_TransmitData8(handle->bus->spi, *tx_buffer);
-            tx_buffer++;
-            tx_size--;
-            tx_allowed = false;
-        }
-
-        if(LL_SPI_IsActiveFlag_RXNE(handle->bus->spi)) {
-            *rx_buffer = LL_SPI_ReceiveData8(handle->bus->spi);
-            rx_buffer++;
-            size--;
-            tx_allowed = true;
-        }
-    }
-
-    furi_hal_spi_bus_end_txrx(handle, timeout);
-
-    return ret;
-}

+ 0 - 290
bootloader/targets/f6/furi_hal/furi_hal_spi_config.c

@@ -1,290 +0,0 @@
-#include <furi_hal_spi_config.h>
-#include <furi_hal_resources.h>
-
-/* SPI Presets */
-
-const LL_SPI_InitTypeDef furi_hal_spi_preset_2edge_low_8m = {
-    .Mode = LL_SPI_MODE_MASTER,
-    .TransferDirection = LL_SPI_FULL_DUPLEX,
-    .DataWidth = LL_SPI_DATAWIDTH_8BIT,
-    .ClockPolarity = LL_SPI_POLARITY_LOW,
-    .ClockPhase = LL_SPI_PHASE_2EDGE,
-    .NSS = LL_SPI_NSS_SOFT,
-    .BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV8,
-    .BitOrder = LL_SPI_MSB_FIRST,
-    .CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE,
-    .CRCPoly = 7,
-};
-
-const LL_SPI_InitTypeDef furi_hal_spi_preset_1edge_low_8m = {
-    .Mode = LL_SPI_MODE_MASTER,
-    .TransferDirection = LL_SPI_FULL_DUPLEX,
-    .DataWidth = LL_SPI_DATAWIDTH_8BIT,
-    .ClockPolarity = LL_SPI_POLARITY_LOW,
-    .ClockPhase = LL_SPI_PHASE_1EDGE,
-    .NSS = LL_SPI_NSS_SOFT,
-    .BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV8,
-    .BitOrder = LL_SPI_MSB_FIRST,
-    .CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE,
-    .CRCPoly = 7,
-};
-
-const LL_SPI_InitTypeDef furi_hal_spi_preset_1edge_low_4m = {
-    .Mode = LL_SPI_MODE_MASTER,
-    .TransferDirection = LL_SPI_FULL_DUPLEX,
-    .DataWidth = LL_SPI_DATAWIDTH_8BIT,
-    .ClockPolarity = LL_SPI_POLARITY_LOW,
-    .ClockPhase = LL_SPI_PHASE_1EDGE,
-    .NSS = LL_SPI_NSS_SOFT,
-    .BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV16,
-    .BitOrder = LL_SPI_MSB_FIRST,
-    .CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE,
-    .CRCPoly = 7,
-};
-
-const LL_SPI_InitTypeDef furi_hal_spi_preset_1edge_low_16m = {
-    .Mode = LL_SPI_MODE_MASTER,
-    .TransferDirection = LL_SPI_FULL_DUPLEX,
-    .DataWidth = LL_SPI_DATAWIDTH_8BIT,
-    .ClockPolarity = LL_SPI_POLARITY_LOW,
-    .ClockPhase = LL_SPI_PHASE_1EDGE,
-    .NSS = LL_SPI_NSS_SOFT,
-    .BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV2,
-    .BitOrder = LL_SPI_MSB_FIRST,
-    .CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE,
-    .CRCPoly = 7,
-};
-
-const LL_SPI_InitTypeDef furi_hal_spi_preset_1edge_low_2m = {
-    .Mode = LL_SPI_MODE_MASTER,
-    .TransferDirection = LL_SPI_FULL_DUPLEX,
-    .DataWidth = LL_SPI_DATAWIDTH_8BIT,
-    .ClockPolarity = LL_SPI_POLARITY_LOW,
-    .ClockPhase = LL_SPI_PHASE_1EDGE,
-    .NSS = LL_SPI_NSS_SOFT,
-    .BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV32,
-    .BitOrder = LL_SPI_MSB_FIRST,
-    .CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE,
-    .CRCPoly = 7,
-};
-
-/* SPI Buses */
-
-static void furi_hal_spi_bus_r_event_callback(FuriHalSpiBus* bus, FuriHalSpiBusEvent event) {
-    if(event == FuriHalSpiBusEventInit) {
-        LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SPI1);
-        LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_SPI1);
-        bus->current_handle = NULL;
-    } else if(event == FuriHalSpiBusEventDeinit) {
-    } else if(event == FuriHalSpiBusEventLock) {
-    } else if(event == FuriHalSpiBusEventUnlock) {
-    } else if(event == FuriHalSpiBusEventActivate) {
-        LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_SPI1);
-    } else if(event == FuriHalSpiBusEventDeactivate) {
-        LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_SPI1);
-    }
-}
-
-FuriHalSpiBus furi_hal_spi_bus_r = {
-    .spi = SPI1,
-    .callback = furi_hal_spi_bus_r_event_callback,
-};
-
-static void furi_hal_spi_bus_d_event_callback(FuriHalSpiBus* bus, FuriHalSpiBusEvent event) {
-    if(event == FuriHalSpiBusEventInit) {
-        LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_SPI2);
-        LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_SPI2);
-        bus->current_handle = NULL;
-    } else if(event == FuriHalSpiBusEventDeinit) {
-    } else if(event == FuriHalSpiBusEventLock) {
-    } else if(event == FuriHalSpiBusEventUnlock) {
-    } else if(event == FuriHalSpiBusEventActivate) {
-        LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_SPI2);
-    } else if(event == FuriHalSpiBusEventDeactivate) {
-        LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_SPI2);
-    }
-}
-
-FuriHalSpiBus furi_hal_spi_bus_d = {
-    .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) {
-        hal_gpio_write(handle->cs, true);
-        hal_gpio_init(handle->cs, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh);
-    } else if(event == FuriHalSpiBusHandleEventDeinit) {
-        hal_gpio_write(handle->cs, true);
-        hal_gpio_init(handle->cs, GpioModeAnalog, GpioPullNo, GpioSpeedLow);
-    } 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_write(handle->cs, false);
-    } else if(event == FuriHalSpiBusHandleEventDeactivate) {
-        hal_gpio_write(handle->cs, true);
-
-        hal_gpio_init(handle->miso, GpioModeAnalog, GpioPullNo, GpioSpeedLow);
-        hal_gpio_init(handle->mosi, GpioModeAnalog, GpioPullNo, GpioSpeedLow);
-        hal_gpio_init(handle->sck, GpioModeAnalog, GpioPullNo, GpioSpeedLow);
-
-        LL_SPI_Disable(handle->bus->spi);
-    }
-}
-
-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,
-};
-
-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,
-};
-
-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,
-};
-
-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_write(handle->cs, true);
-        hal_gpio_init(handle->cs, GpioModeAnalog, GpioPullUp, GpioSpeedLow);
-    } 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) {
-        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) {
-    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,
-};
-
-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,
-};
-
-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,
-};

+ 0 - 61
bootloader/targets/f6/furi_hal/furi_hal_spi_config.h

@@ -1,61 +0,0 @@
-#pragma once
-
-#include <furi_hal_spi_types.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** Preset for ST25R916 */
-extern const LL_SPI_InitTypeDef furi_hal_spi_preset_2edge_low_8m;
-
-/** Preset for CC1101 */
-extern const LL_SPI_InitTypeDef furi_hal_spi_preset_1edge_low_8m;
-
-/** Preset for ST7567 (Display) */
-extern const LL_SPI_InitTypeDef furi_hal_spi_preset_1edge_low_4m;
-
-/** Preset for SdCard in fast mode */
-extern const LL_SPI_InitTypeDef furi_hal_spi_preset_1edge_low_16m;
-
-/** Preset for SdCard in slow mode */
-extern const LL_SPI_InitTypeDef furi_hal_spi_preset_1edge_low_2m;
-
-/** Furi Hal Spi Bus R (Radio: CC1101, Nfc, External)*/
-extern FuriHalSpiBus furi_hal_spi_bus_r;
-
-/** Furi Hal Spi Bus D (Display, SdCard) */
-extern FuriHalSpiBus furi_hal_spi_bus_d;
-
-/** CC1101 on `furi_hal_spi_bus_r` */
-extern FuriHalSpiBusHandle furi_hal_spi_bus_handle_subghz;
-
-/** ST25R3916 on `furi_hal_spi_bus_r` */
-extern FuriHalSpiBusHandle furi_hal_spi_bus_handle_nfc;
-
-/** External on `furi_hal_spi_bus_r`
- * Preset: `furi_hal_spi_preset_1edge_low_2m`
- * 
- * miso: pa6
- * mosi: pa7
- * sck: pb3
- * cs:  pa4 (software controlled)
- * 
- * @warning not initialized by default, call `furi_hal_spi_bus_handle_init` to initialize
- * Bus pins are floating on inactive state, CS high after initialization
- * 
- */
-extern FuriHalSpiBusHandle furi_hal_spi_bus_handle_external;
-
-/** ST7567(Display) on `furi_hal_spi_bus_d` */
-extern FuriHalSpiBusHandle furi_hal_spi_bus_handle_display;
-
-/** SdCard in fast mode on `furi_hal_spi_bus_d` */
-extern FuriHalSpiBusHandle furi_hal_spi_bus_handle_sd_fast;
-
-/** SdCard in slow mode on `furi_hal_spi_bus_d` */
-extern FuriHalSpiBusHandle furi_hal_spi_bus_handle_sd_slow;
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 64
bootloader/targets/f6/furi_hal/furi_hal_spi_types.h

@@ -1,64 +0,0 @@
-#pragma once
-
-#include <stdint.h>
-#include <stddef.h>
-
-#include <furi_hal_gpio.h>
-
-#include <stm32wbxx_ll_spi.h>
-#include <stm32wbxx_ll_rcc.h>
-#include <stm32wbxx_ll_bus.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct FuriHalSpiBus FuriHalSpiBus;
-typedef struct FuriHalSpiBusHandle FuriHalSpiBusHandle;
-
-/** FuriHal spi bus states */
-typedef enum {
-    FuriHalSpiBusEventInit, /**< Bus initialization event, called on system start */
-    FuriHalSpiBusEventDeinit, /**< Bus deinitialization event, called on system stop */
-    FuriHalSpiBusEventLock, /**< Bus lock event, called before activation */
-    FuriHalSpiBusEventUnlock, /**< Bus unlock event, called after deactivation */
-    FuriHalSpiBusEventActivate, /**< Bus activation event, called before handle activation */
-    FuriHalSpiBusEventDeactivate, /**< Bus deactivation event, called after handle deactivation  */
-} FuriHalSpiBusEvent;
-
-/** FuriHal spi bus event callback */
-typedef void (*FuriHalSpiBusEventCallback)(FuriHalSpiBus* bus, FuriHalSpiBusEvent event);
-
-/** FuriHal spi bus */
-struct FuriHalSpiBus {
-    SPI_TypeDef* spi;
-    FuriHalSpiBusEventCallback callback;
-    FuriHalSpiBusHandle* current_handle;
-};
-
-/** FuriHal spi handle states */
-typedef enum {
-    FuriHalSpiBusHandleEventInit, /**< Handle init, called on system start, initialize gpio for idle state */
-    FuriHalSpiBusHandleEventDeinit, /**< Handle deinit, called on system stop, deinitialize gpio for default state */
-    FuriHalSpiBusHandleEventActivate, /**< Handle activate: connect gpio and apply bus config */
-    FuriHalSpiBusHandleEventDeactivate, /**< Handle deactivate: disconnect gpio and reset bus config */
-} FuriHalSpiBusHandleEvent;
-
-/** FuriHal spi handle event callback */
-typedef void (*FuriHalSpiBusHandleEventCallback)(
-    FuriHalSpiBusHandle* handle,
-    FuriHalSpiBusHandleEvent event);
-
-/** FuriHal spi handle */
-struct FuriHalSpiBusHandle {
-    FuriHalSpiBus* bus;
-    FuriHalSpiBusHandleEventCallback callback;
-    const GpioPin* miso;
-    const GpioPin* mosi;
-    const GpioPin* sck;
-    const GpioPin* cs;
-};
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 268
bootloader/targets/f6/furi_hal/furi_hal_version.c

@@ -1,268 +0,0 @@
-#include <furi_hal_version.h>
-
-#include <stm32wbxx.h>
-#include <stm32wbxx_ll_rtc.h>
-#include <stm32wbxx_ll_system.h>
-
-#include <stdio.h>
-
-#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;
-    uint8_t board_target;
-    uint8_t board_body;
-    uint8_t board_connect;
-    uint32_t header_timestamp;
-    char name[FURI_HAL_VERSION_NAME_LENGTH];
-} FuriHalVersionOTPv0;
-
-/** OTP V1 Structure: late EVT, DVT */
-typedef struct {
-    /* First 64 bits: header */
-    uint16_t header_magic;
-    uint8_t header_version;
-    uint8_t header_reserved;
-    uint32_t header_timestamp;
-
-    /* Second 64 bits: board info */
-    uint8_t board_version; /** Board version */
-    uint8_t board_target; /** Board target firmware */
-    uint8_t board_body; /** Board body */
-    uint8_t board_connect; /** Board interconnect */
-    uint8_t board_color; /** Board color */
-    uint8_t board_region; /** Board region */
-    uint16_t board_reserved; /** Reserved for future use, 0x0000 */
-
-    /* Third 64 bits: Unique Device Name */
-    char name[FURI_HAL_VERSION_NAME_LENGTH]; /** Unique Device Name */
-} FuriHalVersionOTPv1;
-
-/** OTP V2 Structure: DVT2, PVT, Production */
-typedef struct {
-    /* Early First 64 bits: header */
-    uint16_t header_magic;
-    uint8_t header_version;
-    uint8_t header_reserved;
-    uint32_t header_timestamp;
-
-    /* Early Second 64 bits: board info */
-    uint8_t board_version; /** Board version */
-    uint8_t board_target; /** Board target firmware */
-    uint8_t board_body; /** Board body */
-    uint8_t board_connect; /** Board interconnect */
-    uint8_t board_display; /** Board display */
-    uint8_t board_reserved2_0; /** Reserved for future use, 0x00 */
-    uint16_t board_reserved2_1; /** Reserved for future use, 0x0000 */
-
-    /* Late Third 64 bits: device info */
-    uint8_t board_color; /** Board color */
-    uint8_t board_region; /** Board region */
-    uint16_t board_reserved3_0; /** Reserved for future use, 0x0000 */
-    uint32_t board_reserved3_1; /** Reserved for future use, 0x00000000 */
-
-    /* Late Fourth 64 bits: Unique Device Name */
-    char name[FURI_HAL_VERSION_NAME_LENGTH]; /** Unique Device Name */
-} FuriHalVersionOTPv2;
-
-/** Represenation Model: */
-typedef struct {
-    uint32_t timestamp;
-
-    uint8_t board_version; /** Board version */
-    uint8_t board_target; /** Board target firmware */
-    uint8_t board_body; /** Board body */
-    uint8_t board_connect; /** Board interconnect */
-    uint8_t board_color; /** Board color */
-    uint8_t board_region; /** Board region */
-    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 */
-    uint8_t ble_mac[6];
-} FuriHalVersion;
-
-static FuriHalVersion furi_hal_version = {0};
-
-static void furi_hal_version_set_name(const char* name) {
-    furi_hal_version.device_name[0] = 0;
-}
-
-static void furi_hal_version_load_otp_default() {
-    furi_hal_version_set_name(NULL);
-}
-
-static void furi_hal_version_load_otp_v0() {
-    const FuriHalVersionOTPv0* otp = (FuriHalVersionOTPv0*)FURI_HAL_VERSION_OTP_ADDRESS;
-
-    furi_hal_version.timestamp = otp->header_timestamp;
-    furi_hal_version.board_version = otp->board_version;
-    furi_hal_version.board_target = otp->board_target;
-    furi_hal_version.board_body = otp->board_body;
-    furi_hal_version.board_connect = otp->board_connect;
-
-    furi_hal_version_set_name(otp->name);
-}
-
-static void furi_hal_version_load_otp_v1() {
-    const FuriHalVersionOTPv1* otp = (FuriHalVersionOTPv1*)FURI_HAL_VERSION_OTP_ADDRESS;
-
-    furi_hal_version.timestamp = otp->header_timestamp;
-    furi_hal_version.board_version = otp->board_version;
-    furi_hal_version.board_target = otp->board_target;
-    furi_hal_version.board_body = otp->board_body;
-    furi_hal_version.board_connect = otp->board_connect;
-    furi_hal_version.board_color = otp->board_color;
-    furi_hal_version.board_region = otp->board_region;
-
-    furi_hal_version_set_name(otp->name);
-}
-
-static void furi_hal_version_load_otp_v2() {
-    const FuriHalVersionOTPv2* otp = (FuriHalVersionOTPv2*)FURI_HAL_VERSION_OTP_ADDRESS;
-
-    // 1st block, programmed afer baking
-    furi_hal_version.timestamp = otp->header_timestamp;
-
-    // 2nd block, programmed afer baking
-    furi_hal_version.board_version = otp->board_version;
-    furi_hal_version.board_target = otp->board_target;
-    furi_hal_version.board_body = otp->board_body;
-    furi_hal_version.board_connect = otp->board_connect;
-    furi_hal_version.board_display = otp->board_display;
-
-    // 3rd and 4th blocks, programmed on FATP stage
-    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);
-    } else {
-        furi_hal_version.board_color = 0;
-        furi_hal_version.board_region = 0;
-        furi_hal_version_set_name(NULL);
-    }
-}
-
-void furi_hal_version_init() {
-    switch(furi_hal_version_get_otp_version()) {
-    case FuriHalVersionOtpVersionUnknown:
-        furi_hal_version_load_otp_default();
-        break;
-    case FuriHalVersionOtpVersionEmpty:
-        furi_hal_version_load_otp_default();
-        break;
-    case FuriHalVersionOtpVersion0:
-        furi_hal_version_load_otp_v0();
-        break;
-    case FuriHalVersionOtpVersion1:
-        furi_hal_version_load_otp_v1();
-        break;
-    case FuriHalVersionOtpVersion2:
-        furi_hal_version_load_otp_v2();
-        break;
-    default:
-        furi_hal_version_load_otp_default();
-    }
-}
-
-bool furi_hal_version_do_i_belong_here() {
-    return furi_hal_version_get_hw_target() == 7;
-}
-
-const char* furi_hal_version_get_model_name() {
-    return "Flipper Zero";
-}
-
-const FuriHalVersionOtpVersion furi_hal_version_get_otp_version() {
-    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) {
-            // Version 1+
-            uint8_t version = ((FuriHalVersionOTPv1*)FURI_HAL_VERSION_OTP_ADDRESS)->header_version;
-            if(version >= FuriHalVersionOtpVersion1 && version <= FuriHalVersionOtpVersion2) {
-                return version;
-            } else {
-                return FuriHalVersionOtpVersionUnknown;
-            }
-        } else if(((FuriHalVersionOTPv0*)FURI_HAL_VERSION_OTP_ADDRESS)->board_version <= 10) {
-            // Version 0
-            return FuriHalVersionOtpVersion0;
-        } else {
-            // Version Unknown
-            return FuriHalVersionOtpVersionUnknown;
-        }
-    }
-}
-
-const uint8_t furi_hal_version_get_hw_version() {
-    return furi_hal_version.board_version;
-}
-
-const uint8_t furi_hal_version_get_hw_target() {
-    return furi_hal_version.board_target;
-}
-
-const uint8_t furi_hal_version_get_hw_body() {
-    return furi_hal_version.board_body;
-}
-
-const FuriHalVersionColor furi_hal_version_get_hw_color() {
-    return furi_hal_version.board_color;
-}
-
-const uint8_t furi_hal_version_get_hw_connect() {
-    return furi_hal_version.board_connect;
-}
-
-const FuriHalVersionRegion furi_hal_version_get_hw_region() {
-    return furi_hal_version.board_region;
-}
-
-const FuriHalVersionDisplay furi_hal_version_get_hw_display() {
-    return furi_hal_version.board_display;
-}
-
-const uint32_t furi_hal_version_get_hw_timestamp() {
-    return furi_hal_version.timestamp;
-}
-
-const char* furi_hal_version_get_name_ptr() {
-    return *furi_hal_version.name == 0x00 ? NULL : furi_hal_version.name;
-}
-
-const char* furi_hal_version_get_device_name_ptr() {
-    return furi_hal_version.device_name + 1;
-}
-
-const char* furi_hal_version_get_ble_local_device_name_ptr() {
-    return furi_hal_version.device_name;
-}
-
-const uint8_t* furi_hal_version_get_ble_mac() {
-    return furi_hal_version.ble_mac;
-}
-
-const struct Version* furi_hal_version_get_firmware_version(void) {
-    return version_get();
-}
-
-const struct Version* furi_hal_version_get_bootloader_version(void) {
-#ifdef NO_BOOTLOADER
-    return 0;
-#else
-    /* Backup register which points to structure in flash memory */
-    return (const struct Version*)LL_RTC_BAK_GetRegister(RTC, LL_RTC_BKP_DR1);
-#endif
-}
-
-size_t furi_hal_version_uid_size() {
-    return 64 / 8;
-}
-
-const uint8_t* furi_hal_version_uid() {
-    return (const uint8_t*)UID64_BASE;
-}

+ 0 - 108
bootloader/targets/f6/furi_hal/main.h

@@ -1,108 +0,0 @@
-#pragma once
-
-#include <stm32wbxx.h>
-#include <stm32wbxx_ll_gpio.h>
-#include <stm32wbxx_ll_spi.h>
-
-#define BUTTON_BACK_GPIO_Port GPIOC
-#define BUTTON_BACK_Pin LL_GPIO_PIN_13
-#define BUTTON_DOWN_GPIO_Port GPIOC
-#define BUTTON_DOWN_Pin LL_GPIO_PIN_6
-#define BUTTON_LEFT_GPIO_Port GPIOB
-#define BUTTON_LEFT_Pin LL_GPIO_PIN_11
-#define BUTTON_OK_GPIO_Port GPIOH
-#define BUTTON_OK_Pin LL_GPIO_PIN_3
-#define BUTTON_RIGHT_GPIO_Port GPIOB
-#define BUTTON_RIGHT_Pin LL_GPIO_PIN_12
-#define BUTTON_UP_GPIO_Port GPIOB
-#define BUTTON_UP_Pin LL_GPIO_PIN_10
-
-#define CC1101_CS_GPIO_Port GPIOD
-#define CC1101_CS_Pin LL_GPIO_PIN_0
-#define CC1101_G0_GPIO_Port GPIOA
-#define CC1101_G0_Pin LL_GPIO_PIN_1
-
-#define DISPLAY_CS_GPIO_Port GPIOC
-#define DISPLAY_CS_Pin LL_GPIO_PIN_11
-#define DISPLAY_DI_GPIO_Port GPIOB
-#define DISPLAY_DI_Pin LL_GPIO_PIN_1
-#define DISPLAY_RST_GPIO_Port GPIOB
-#define DISPLAY_RST_Pin LL_GPIO_PIN_0
-
-#define IR_RX_GPIO_Port GPIOA
-#define IR_RX_Pin LL_GPIO_PIN_0
-#define IR_TX_GPIO_Port GPIOB
-#define IR_TX_Pin LL_GPIO_PIN_9
-
-#define NFC_CS_GPIO_Port GPIOE
-#define NFC_CS_Pin LL_GPIO_PIN_4
-
-#define PA4_GPIO_Port GPIOA
-#define PA4_Pin LL_GPIO_PIN_4
-#define PA6_GPIO_Port GPIOA
-#define PA6_Pin LL_GPIO_PIN_6
-#define PA7_GPIO_Port GPIOA
-#define PA7_Pin LL_GPIO_PIN_7
-#define PB2_GPIO_Port GPIOB
-#define PB2_Pin LL_GPIO_PIN_2
-#define PB3_GPIO_Port GPIOB
-#define PB3_Pin LL_GPIO_PIN_3
-#define PC0_GPIO_Port GPIOC
-#define PC0_Pin LL_GPIO_PIN_0
-#define PC1_GPIO_Port GPIOC
-#define PC1_Pin LL_GPIO_PIN_1
-#define PC3_GPIO_Port GPIOC
-#define PC3_Pin LL_GPIO_PIN_3
-
-#define PERIPH_POWER_GPIO_Port GPIOA
-#define PERIPH_POWER_Pin LL_GPIO_PIN_3
-
-#define QUARTZ_32MHZ_IN_GPIO_Port GPIOC
-#define QUARTZ_32MHZ_IN_Pin LL_GPIO_PIN_14
-#define QUARTZ_32MHZ_OUT_GPIO_Port GPIOC
-#define QUARTZ_32MHZ_OUT_Pin LL_GPIO_PIN_15
-
-#define RFID_OUT_GPIO_Port GPIOB
-#define RFID_OUT_Pin LL_GPIO_PIN_13
-#define RFID_PULL_GPIO_Port GPIOA
-#define RFID_PULL_Pin LL_GPIO_PIN_2
-#define RFID_RF_IN_GPIO_Port GPIOC
-#define RFID_RF_IN_Pin LL_GPIO_PIN_5
-#define RFID_TUNE_GPIO_Port GPIOA
-#define RFID_TUNE_Pin LL_GPIO_PIN_8
-
-#define RF_SW_0_GPIO_Port GPIOC
-#define RF_SW_0_Pin LL_GPIO_PIN_4
-
-#define SD_CD_GPIO_Port GPIOC
-#define SD_CD_Pin LL_GPIO_PIN_10
-#define SD_CS_GPIO_Port GPIOC
-#define SD_CS_Pin LL_GPIO_PIN_12
-
-#define SPEAKER_GPIO_Port GPIOB
-#define SPEAKER_Pin LL_GPIO_PIN_8
-
-#define VIBRO_GPIO_Port GPIOA
-#define VIBRO_Pin LL_GPIO_PIN_15
-
-#define iBTN_GPIO_Port GPIOB
-#define iBTN_Pin LL_GPIO_PIN_14
-
-#define USART1_TX_Pin LL_GPIO_PIN_6
-#define USART1_TX_Port GPIOB
-#define USART1_RX_Pin LL_GPIO_PIN_7
-#define USART1_RX_Port GPIOB
-
-#define SPI_D_MISO_GPIO_Port GPIOC
-#define SPI_D_MISO_Pin LL_GPIO_PIN_2
-#define SPI_D_MOSI_GPIO_Port GPIOB
-#define SPI_D_MOSI_Pin LL_GPIO_PIN_15
-#define SPI_D_SCK_GPIO_Port GPIOD
-#define SPI_D_SCK_Pin LL_GPIO_PIN_1
-
-#define SPI_R_MISO_GPIO_Port GPIOB
-#define SPI_R_MISO_Pin LL_GPIO_PIN_4
-#define SPI_R_MOSI_GPIO_Port GPIOB
-#define SPI_R_MOSI_Pin LL_GPIO_PIN_5
-#define SPI_R_SCK_GPIO_Port GPIOA
-#define SPI_R_SCK_Pin LL_GPIO_PIN_5

+ 0 - 187
bootloader/targets/f6/stm32wb55xx_flash_cm4.ld

@@ -1,187 +0,0 @@
-/**
-*****************************************************************************
-**
-**  File        : stm32wb55xx_flash_cm4.ld
-**
-**  Abstract    : System Workbench Minimal System calls file
-**
-** 		          For more information about which c-functions
-**                need which of these lowlevel functions
-**                please consult the Newlib libc-manual
-**
-**  Environment : System Workbench for MCU
-**
-**  Distribution: The file is distributed “as is,” without any warranty
-**                of any kind.
-**
-*****************************************************************************
-**
-** <h2><center>&copy; COPYRIGHT(c) 2019 Ac6</center></h2>
-**
-** Redistribution and use in source and binary forms, with or without modification,
-** are permitted provided that the following conditions are met:
-**   1. Redistributions of source code must retain the above copyright notice,
-**      this list of conditions and the following disclaimer.
-**   2. Redistributions in binary form must reproduce the above copyright notice,
-**      this list of conditions and the following disclaimer in the documentation
-**      and/or other materials provided with the distribution.
-**   3. Neither the name of Ac6 nor the names of its contributors
-**      may be used to endorse or promote products derived from this software
-**      without specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**
-*****************************************************************************
-*/
-
-/* Entry Point */
-ENTRY(Reset_Handler)
-
-/* Highest address of the user mode stack */
-_estack = 0x20030000;    /* end of RAM */
-/* Generate a link error if heap and stack don't fit into RAM */
-_Min_Heap_Size = 0x200;      /* required amount of heap  */
-_Min_Stack_Size = 0x400; /* required amount of stack */
-
-/* Specify the memory areas */
-MEMORY
-{
-FLASH (rx)                 : ORIGIN = 0x08000000, LENGTH = 32K
-RAM1 (xrw)                 : ORIGIN = 0x20000008, LENGTH = 0x2FFF8
-RAM_SHARED (xrw)           : ORIGIN = 0x20030000, LENGTH = 10K
-}
-
-/* Define output sections */
-SECTIONS
-{
-  /* The startup code goes first into FLASH */
-  .isr_vector :
-  {
-    . = ALIGN(4);
-    KEEP(*(.isr_vector)) /* Startup code */
-    . = ALIGN(4);
-  } >FLASH
-
-  /* The program code and other data goes into FLASH */
-  .text :
-  {
-    . = ALIGN(4);
-    *(.text)           /* .text sections (code) */
-    *(.text*)          /* .text* sections (code) */
-    *(.glue_7)         /* glue arm to thumb code */
-    *(.glue_7t)        /* glue thumb to arm code */
-    *(.eh_frame)
-
-    KEEP (*(.init))
-    KEEP (*(.fini))
-
-    . = ALIGN(4);
-    _etext = .;        /* define a global symbols at end of code */
-  } >FLASH
-
-  /* Constant data goes into FLASH */
-  .rodata :
-  {
-    . = ALIGN(4);
-    *(.rodata)         /* .rodata sections (constants, strings, etc.) */
-    *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */
-    . = ALIGN(4);
-  } >FLASH
-
-  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
-  .ARM : {
-    __exidx_start = .;
-    *(.ARM.exidx*)
-    __exidx_end = .;
-  } >FLASH
-
-  .preinit_array     :
-  {
-    PROVIDE_HIDDEN (__preinit_array_start = .);
-    KEEP (*(.preinit_array*))
-    PROVIDE_HIDDEN (__preinit_array_end = .);
-  } >FLASH
-  .init_array :
-  {
-    PROVIDE_HIDDEN (__init_array_start = .);
-    KEEP (*(SORT(.init_array.*)))
-    KEEP (*(.init_array*))
-    PROVIDE_HIDDEN (__init_array_end = .);
-  } >FLASH
-  .fini_array :
-  {
-    PROVIDE_HIDDEN (__fini_array_start = .);
-    KEEP (*(SORT(.fini_array.*)))
-    KEEP (*(.fini_array*))
-    PROVIDE_HIDDEN (__fini_array_end = .);
-  } >FLASH
-
-  /* used by the startup to initialize data */
-  _sidata = LOADADDR(.data);
-
-  /* Initialized data sections goes into RAM, load LMA copy after code */
-  .data : 
-  {
-    . = ALIGN(4);
-    _sdata = .;        /* create a global symbol at data start */
-    *(.data)           /* .data sections */
-    *(.data*)          /* .data* sections */
-
-    . = ALIGN(4);
-    _edata = .;        /* define a global symbol at data end */
-  } >RAM1 AT> FLASH
-
-  
-  /* Uninitialized data section */
-  . = ALIGN(4);
-  .bss :
-  {
-    /* This is used by the startup in order to initialize the .bss secion */
-    _sbss = .;         /* define a global symbol at bss start */
-    __bss_start__ = _sbss;
-    *(.bss)
-    *(.bss*)
-    *(COMMON)
-
-    . = ALIGN(4);
-    _ebss = .;         /* define a global symbol at bss end */
-    __bss_end__ = _ebss;
-  } >RAM1
-
-  /* User_heap_stack section, used to check that there is enough RAM left */
-  ._user_heap_stack :
-  {
-    . = ALIGN(8);
-    PROVIDE ( end = . );
-    PROVIDE ( _end = . );
-    . = . + _Min_Heap_Size;
-    . = . + _Min_Stack_Size;
-    . = ALIGN(8);
-  } >RAM1
-
-  
-
-  /* Remove information from the standard libraries */
-  /DISCARD/ :
-  {
-    libc.a ( * )
-    libm.a ( * )
-    libgcc.a ( * )
-  }
-
-  .ARM.attributes 0       : { *(.ARM.attributes) }
-   MAPPING_TABLE (NOLOAD) : { *(MAPPING_TABLE) } >RAM_SHARED
-   MB_MEM1 (NOLOAD)       : { *(MB_MEM1) } >RAM_SHARED
-   MB_MEM2 (NOLOAD)       : { _sMB_MEM2 = . ; *(MB_MEM2) ; _eMB_MEM2 = . ; } >RAM_SHARED
-}
-
-

+ 0 - 264
bootloader/targets/f6/target.c

@@ -1,264 +0,0 @@
-#include <target.h>
-#include <stm32wbxx.h>
-#include <stm32wbxx_ll_system.h>
-#include <stm32wbxx_ll_bus.h>
-#include <stm32wbxx_ll_utils.h>
-#include <stm32wbxx_ll_rcc.h>
-#include <stm32wbxx_ll_rtc.h>
-#include <stm32wbxx_ll_pwr.h>
-#include <stm32wbxx_ll_gpio.h>
-#include <stm32wbxx_hal_flash.h>
-
-#include <lib/toolbox/version.h>
-#include <furi_hal.h>
-
-#include <u8g2.h>
-#include <u8g2_glue.h>
-
-const uint8_t I_DFU_128x50[] = {
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x38, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0xC0, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x75, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x0A, 0x00, 0x00, 0x0F, 0x60, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xE0, 0x0F, 0x00, 0xC0, 0xE0, 0x4F, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x30, 0x1E, 0x90, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x18, 0x00, 0x8C, 0x01, 0xA0, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x81, 0xFF, 0x19, 0x00, 0x63, 0x00, 0xC0, 0xF0, 0x07,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x5E, 0x1F, 0x80, 0x18, 0x00, 0xE0, 0x0E, 0x18,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x18, 0xAF, 0x0F, 0x40, 0x06, 0x00, 0xF8, 0x01, 0x20,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x06, 0x57, 0x01, 0x20, 0x01, 0x00, 0x78, 0x00, 0x3E,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x81, 0xAF, 0x02, 0x90, 0x00, 0x00, 0x38, 0x80, 0x41,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x80, 0x57, 0x01, 0x48, 0x00, 0x00, 0x10, 0x60, 0x40,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x10, 0x80, 0xAB, 0x00, 0x24, 0x00, 0x00, 0x08, 0x10, 0x40,
-    0x3F, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0C, 0xC0, 0x57, 0x01, 0x12, 0x00, 0x00, 0x04, 0x08, 0x40,
-    0xC0, 0x0F, 0x00, 0x00, 0xC0, 0x07, 0x03, 0xF0, 0xAB, 0x00, 0x0A, 0x00, 0x00, 0x02, 0x04, 0x40,
-    0x00, 0xF0, 0x1F, 0x80, 0x3F, 0xC0, 0x00, 0xFC, 0x55, 0x01, 0x05, 0xE0, 0x00, 0x01, 0x04, 0x40,
-    0x00, 0x00, 0xE0, 0x7F, 0x00, 0x30, 0x00, 0xFF, 0xAB, 0x00, 0x05, 0xE0, 0x80, 0x00, 0x02, 0x40,
-    0x0F, 0x00, 0x00, 0x00, 0x80, 0x0F, 0xE0, 0xCF, 0x55, 0x81, 0x02, 0xF0, 0x40, 0x00, 0x02, 0x40,
-    0xF0, 0x0F, 0x00, 0x00, 0x7F, 0x00, 0xFE, 0xC3, 0xAB, 0x80, 0x02, 0x78, 0x20, 0x00, 0x01, 0x40,
-    0x00, 0xF0, 0xFF, 0xFF, 0x00, 0xF0, 0xFF, 0xC0, 0xD5, 0x81, 0x01, 0x7E, 0x10, 0x80, 0x00, 0x20,
-    0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x0F, 0xE0, 0xFA, 0x83, 0xC1, 0x3F, 0x08, 0x80, 0x00, 0x20,
-    0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0xD8, 0x07, 0x83, 0xF1, 0x1F, 0x04, 0x40, 0x00, 0x20,
-    0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, 0x80, 0xC7, 0x01, 0x83, 0xF1, 0x0F, 0x00, 0x20, 0x00, 0x10,
-    0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0xC0, 0x7F, 0x40, 0x80, 0x83, 0xE1, 0x01, 0x00, 0x20, 0x00, 0x18,
-    0xFC, 0xFF, 0xFF, 0xFF, 0x03, 0x3F, 0x00, 0x20, 0xFC, 0x83, 0x01, 0x00, 0x00, 0x10, 0x00, 0x18,
-    0xFF, 0xFF, 0xFF, 0x3F, 0xF0, 0x00, 0x00, 0x10, 0xD7, 0x01, 0x03, 0x00, 0x00, 0x08, 0x00, 0x1C,
-    0xFF, 0xFF, 0x01, 0x00, 0x0F, 0x00, 0x00, 0x88, 0xAB, 0x02, 0xE3, 0x01, 0x00, 0x08, 0x00, 0x0C,
-    0xFF, 0x07, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xC4, 0x55, 0x05, 0x1E, 0x00, 0x00, 0x04, 0x00, 0x0E,
-    0x7F, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0xA3, 0xAB, 0x02, 0x06, 0x00, 0x00, 0x02, 0x00, 0x0F,
-    0x0F, 0x00, 0x80, 0x03, 0x00, 0x00, 0xC0, 0x10, 0x57, 0x05, 0x02, 0x00, 0x00, 0x01, 0x80, 0x07,
-    0x03, 0x00, 0x70, 0x00, 0x00, 0x00, 0x30, 0x08, 0xAB, 0x0A, 0x02, 0x00, 0xC0, 0x00, 0xC0, 0x07,
-    0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x84, 0x57, 0x15, 0x01, 0x00, 0x30, 0x00, 0xE0, 0x07,
-    0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0xC3, 0xFF, 0x2A, 0x01, 0x00, 0x0C, 0x00, 0xF0, 0x0F,
-    0x00, 0xC0, 0x00, 0x00, 0x00, 0xE0, 0xC0, 0xE0, 0xFE, 0x55, 0x01, 0x82, 0x03, 0x00, 0xF8, 0x15,
-    0x00, 0x30, 0x00, 0x00, 0x00, 0x1C, 0x30, 0x78, 0xFE, 0xAA, 0x01, 0x7C, 0x00, 0x00, 0xFC, 0x23,
-    0x00, 0x0E, 0x00, 0x00, 0xC0, 0x03, 0x0C, 0x3C, 0x7F, 0x5D, 0x01, 0x00, 0x00, 0x00, 0xFF, 0x45,
-    0xC0, 0x01, 0x00, 0x00, 0x3E, 0x00, 0x02, 0x8F, 0xBF, 0xAE, 0x03, 0x00, 0x00, 0xC0, 0xFF, 0x82,
-    0x30, 0x00, 0x00, 0xC0, 0x01, 0x80, 0xC1, 0x43, 0xFE, 0x5D, 0x01, 0x00, 0x00, 0xF0, 0xFF, 0x05,
-    0x0F, 0x00, 0x80, 0x3F, 0x00, 0x60, 0xF0, 0x31, 0xF6, 0xAE, 0x03, 0x00, 0x00, 0xFA, 0xAF, 0x02,
-    0xFC, 0xFF, 0x7F, 0x00, 0x00, 0x18, 0x7C, 0x08, 0x23, 0xFF, 0x05, 0x00, 0x00, 0xFD, 0x55, 0x01,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x1F, 0x84, 0x30, 0xFE, 0x0A, 0x00, 0x00, 0xAA, 0xAA, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x80, 0xF1, 0x07, 0x43, 0x18, 0xFF, 0x15, 0x00, 0x00, 0x54, 0x15, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x80, 0x20, 0x8C, 0xFF, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-
-// Boot request enum
-#define BOOT_REQUEST_TAINTED 0x00000000
-#define BOOT_REQUEST_CLEAN 0xDADEDADE
-#define BOOT_REQUEST_DFU 0xDF00B000
-// Boot to DFU pin
-#define BOOT_DFU_PORT GPIOB
-#define BOOT_DFU_PIN LL_GPIO_PIN_11
-// USB pins
-#define BOOT_USB_PORT GPIOA
-#define BOOT_USB_DM_PIN LL_GPIO_PIN_11
-#define BOOT_USB_DP_PIN LL_GPIO_PIN_12
-#define BOOT_USB_PIN (BOOT_USB_DM_PIN | BOOT_USB_DP_PIN)
-
-#define RTC_CLOCK_IS_READY() (LL_RCC_LSE_IsReady() && LL_RCC_LSI1_IsReady())
-
-void target_led_control(char* c) {
-    furi_hal_light_set(LightRed, 0x00);
-    furi_hal_light_set(LightGreen, 0x00);
-    furi_hal_light_set(LightBlue, 0x00);
-    do {
-        if(*c == 'R') {
-            furi_hal_light_set(LightRed, 0xFF);
-        } else if(*c == 'G') {
-            furi_hal_light_set(LightGreen, 0xFF);
-        } else if(*c == 'B') {
-            furi_hal_light_set(LightBlue, 0xFF);
-        } else if(*c == '.') {
-            LL_mDelay(125);
-            furi_hal_light_set(LightRed, 0x00);
-            furi_hal_light_set(LightGreen, 0x00);
-            furi_hal_light_set(LightBlue, 0x00);
-            LL_mDelay(125);
-        } else if(*c == '-') {
-            LL_mDelay(250);
-            furi_hal_light_set(LightRed, 0x00);
-            furi_hal_light_set(LightGreen, 0x00);
-            furi_hal_light_set(LightBlue, 0x00);
-            LL_mDelay(250);
-        } else if(*c == '|') {
-            furi_hal_light_set(LightRed, 0x00);
-            furi_hal_light_set(LightGreen, 0x00);
-            furi_hal_light_set(LightBlue, 0x00);
-        }
-        c++;
-    } while(*c != 0);
-}
-
-void target_clock_init() {
-    LL_Init1msTick(4000000);
-    LL_SetSystemCoreClock(4000000);
-
-    LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA);
-    LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
-    LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOC);
-    LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOD);
-    LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOE);
-    LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOH);
-
-    LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SPI1);
-    LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_SPI2);
-}
-
-void target_gpio_init() {
-    // USB D+
-    LL_GPIO_SetPinMode(BOOT_USB_PORT, BOOT_USB_DP_PIN, LL_GPIO_MODE_OUTPUT);
-    LL_GPIO_SetPinSpeed(BOOT_USB_PORT, BOOT_USB_DP_PIN, LL_GPIO_SPEED_FREQ_VERY_HIGH);
-    LL_GPIO_SetPinOutputType(BOOT_USB_PORT, BOOT_USB_DP_PIN, LL_GPIO_OUTPUT_OPENDRAIN);
-    // USB D-
-    LL_GPIO_SetPinMode(BOOT_USB_PORT, BOOT_USB_DM_PIN, LL_GPIO_MODE_OUTPUT);
-    LL_GPIO_SetPinSpeed(BOOT_USB_PORT, BOOT_USB_DM_PIN, LL_GPIO_SPEED_FREQ_VERY_HIGH);
-    LL_GPIO_SetPinOutputType(BOOT_USB_PORT, BOOT_USB_DM_PIN, LL_GPIO_OUTPUT_OPENDRAIN);
-    // Button: back
-    LL_GPIO_SetPinMode(BOOT_DFU_PORT, BOOT_DFU_PIN, LL_GPIO_MODE_INPUT);
-    LL_GPIO_SetPinPull(BOOT_DFU_PORT, BOOT_DFU_PIN, LL_GPIO_PULL_UP);
-}
-
-void target_rtc_init() {
-    // LSE and RTC
-    LL_PWR_EnableBkUpAccess();
-    if(!RTC_CLOCK_IS_READY()) {
-        // Start LSI1 needed for CSS
-        LL_RCC_LSI1_Enable();
-        // Try to start LSE normal way
-        LL_RCC_LSE_SetDriveCapability(LL_RCC_LSEDRIVE_HIGH);
-        LL_RCC_LSE_Enable();
-        uint32_t c = 0;
-        while(!RTC_CLOCK_IS_READY() && c < 200) {
-            LL_mDelay(10);
-            c++;
-        }
-        // Plan B: reset backup domain
-        if(!RTC_CLOCK_IS_READY()) {
-            target_led_control("-R.R.R.");
-            LL_RCC_ForceBackupDomainReset();
-            LL_RCC_ReleaseBackupDomainReset();
-            NVIC_SystemReset();
-        }
-        // Set RTC domain clock to LSE
-        LL_RCC_SetRTCClockSource(LL_RCC_RTC_CLKSOURCE_LSE);
-        // Enable LSE CSS
-        LL_RCC_LSE_EnableCSS();
-    }
-    // Enable clocking
-    LL_RCC_EnableRTC();
-    LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_RTCAPB);
-}
-
-void target_version_save(void) {
-    LL_RTC_BAK_SetRegister(RTC, LL_RTC_BKP_DR1, (uint32_t)version_get());
-}
-
-void target_usb_wire_reset() {
-    LL_GPIO_ResetOutputPin(BOOT_USB_PORT, BOOT_USB_PIN);
-}
-
-void target_display_init() {
-    // Prepare gpio
-    hal_gpio_init_simple(&gpio_display_rst, GpioModeOutputPushPull);
-    hal_gpio_init_simple(&gpio_display_di, GpioModeOutputPushPull);
-    // Initialize
-    u8g2_t fb;
-    u8g2_Setup_st756x_flipper(&fb, U8G2_R0, u8x8_hw_spi_stm32, u8g2_gpio_and_delay_stm32);
-    u8g2_InitDisplay(&fb);
-    // Create payload
-    u8g2_ClearBuffer(&fb);
-    u8g2_SetDrawColor(&fb, 0x01);
-    u8g2_DrawXBM(&fb, 0, 64 - 50, 128, 50, I_DFU_128x50);
-#ifndef SLIM_BOOTLOADER
-    u8g2_SetFont(&fb, u8g2_font_helvB08_tf);
-    u8g2_DrawStr(&fb, 2, 8, "Update & Recovery Mode");
-    u8g2_DrawStr(&fb, 2, 21, "DFU started");
-#endif
-    // Send buffer
-    u8g2_SetPowerSave(&fb, 0);
-    u8g2_SendBuffer(&fb);
-}
-
-void target_init() {
-    target_clock_init();
-    target_gpio_init();
-    furi_hal_init();
-    target_led_control("RGB");
-    target_rtc_init();
-    target_version_save();
-    target_usb_wire_reset();
-
-    // Errata 2.2.9, Flash OPTVERR flag is always set after system reset
-    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_ALL_ERRORS);
-}
-
-int target_is_dfu_requested() {
-    if(LL_RTC_BAK_GetRegister(RTC, LL_RTC_BKP_DR0) == BOOT_REQUEST_TAINTED) {
-        // Default system state is tainted
-        // We must ensure that MCU is cleanly booted
-        LL_RTC_BAK_SetRegister(RTC, LL_RTC_BKP_DR0, BOOT_REQUEST_CLEAN);
-        NVIC_SystemReset();
-    } else if(LL_RTC_BAK_GetRegister(RTC, LL_RTC_BKP_DR0) == BOOT_REQUEST_DFU) {
-        return 1;
-    }
-    LL_mDelay(100);
-    if(!LL_GPIO_IsInputPinSet(BOOT_DFU_PORT, BOOT_DFU_PIN)) {
-        return 1;
-    }
-
-    return 0;
-}
-
-void target_switch(void* offset) {
-    asm volatile("ldr    r3, [%0]    \n"
-                 "msr    msp, r3     \n"
-                 "ldr    r3, [%1]    \n"
-                 "mov    pc, r3      \n"
-                 :
-                 : "r"(offset), "r"(offset + 0x4)
-                 : "r3");
-}
-
-void target_switch2dfu() {
-    target_led_control("B");
-    furi_hal_light_set(LightBacklight, 0xFF);
-    target_display_init();
-    // Mark system as tainted, it will be soon
-    LL_RTC_BAK_SetRegister(RTC, LL_RTC_BKP_DR0, BOOT_REQUEST_TAINTED);
-    // Remap memory to system bootloader
-    LL_SYSCFG_SetRemapMemory(LL_SYSCFG_REMAP_SYSTEMFLASH);
-    // Jump
-    target_switch(0x0);
-}
-
-void target_switch2os() {
-    target_led_control("G");
-    SCB->VTOR = OS_OFFSET;
-    target_switch((void*)(BOOT_ADDRESS + OS_OFFSET));
-}

+ 0 - 50
bootloader/targets/f6/target.mk

@@ -1,50 +0,0 @@
-TOOLCHAIN = arm
-
-BOOT_ADDRESS	= 0x08000000
-FW_ADDRESS		= 0x08008000
-OS_OFFSET		= 0x00008000
-FLASH_ADDRESS	= 0x08000000
-
-OPENOCD_OPTS	= -f interface/stlink.cfg -c "transport select hla_swd" -f ../debug/stm32wbx.cfg -c "init"
-BOOT_CFLAGS		= -DBOOT_ADDRESS=$(BOOT_ADDRESS) -DFW_ADDRESS=$(FW_ADDRESS) -DOS_OFFSET=$(OS_OFFSET)
-MCU_FLAGS		= -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard
-
-CFLAGS			+= $(MCU_FLAGS) $(BOOT_CFLAGS) -DSTM32WB55xx -Wall -fdata-sections -ffunction-sections
-LDFLAGS			+= $(MCU_FLAGS) -specs=nosys.specs -specs=nano.specs 
-
-HARDWARE_TARGET = 6
-
-CUBE_DIR		= $(PROJECT_ROOT)/lib/STM32CubeWB
-
-# ST HAL
-CFLAGS			+=  -DUSE_FULL_LL_DRIVER
-ASM_SOURCES		+= $(CUBE_DIR)/Drivers/CMSIS/Device/ST/STM32WBxx/Source/Templates/gcc/startup_stm32wb55xx_cm4.s
-C_SOURCES		+= $(CUBE_DIR)/Drivers/CMSIS/Device/ST/STM32WBxx/Source/Templates/system_stm32wbxx.c
-C_SOURCES		+= $(CUBE_DIR)/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_utils.c
-C_SOURCES		+= $(CUBE_DIR)/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_gpio.c
-C_SOURCES		+= $(CUBE_DIR)/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_i2c.c
-C_SOURCES		+= $(CUBE_DIR)/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_spi.c
-
-CFLAGS			+= -I$(CUBE_DIR)/Drivers/CMSIS/Include
-CFLAGS			+= -I$(CUBE_DIR)/Drivers/CMSIS/Device/ST/STM32WBxx/Include
-CFLAGS			+= -I$(CUBE_DIR)/Drivers/STM32WBxx_HAL_Driver/Inc
-
-LDFLAGS			+= -T$(TARGET_DIR)/stm32wb55xx_flash_cm4.ld
-
-# Drivers
-DRIVERS_DIR		= $(PROJECT_ROOT)//lib/drivers
-CFLAGS			+= -I$(DRIVERS_DIR)
-C_SOURCES		+= $(DRIVERS_DIR)/lp5562.c
-
-# API-HAL
-CFLAGS			+= -I$(TARGET_DIR)/furi_hal
-C_SOURCES		+= $(wildcard $(TARGET_DIR)/furi_hal/*.c)
-
-# Version generation
-C_SOURCES		+= $(PROJECT_ROOT)/lib/toolbox/version.c
-
-ASM_SOURCES		+= $(wildcard $(TARGET_DIR)/*.s)
-C_SOURCES		+= $(wildcard $(TARGET_DIR)/*.c)
-CPP_SOURCES		+= $(wildcard $(TARGET_DIR)/*.cpp)
-
-SVD_FILE		= $(PROJECT_ROOT)/debug/STM32WB55_CM4.svd

+ 0 - 1
core/furi_hal/api_interrupt_mgr.h

@@ -16,7 +16,6 @@ typedef void (*InterruptCallback)(void*, void*);
 
 /** Interupt type */
 typedef enum {
-    InterruptTypeComparatorTrigger,
     InterruptTypeTimerUpdate,
     InterruptTypeLast,
 } InterruptType;

+ 0 - 138
firmware/targets/f6/Inc/FreeRTOSConfig.h

@@ -1,138 +0,0 @@
-#pragma once
-
-#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)
-#include <stdint.h>
-extern uint32_t SystemCoreClock;
-#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 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
-
-/* 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
-
-/* Co-routine definitions. */
-#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 configIDLE_TASK_NAME "(-_-)"
-
-/* Set the following definitions to 1 to include the API function, or zero
-to exclude the API function. */
-#define INCLUDE_xTaskGetHandle 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
-
-/* CMSIS-RTOS */
-#define configTASK_NOTIFICATION_ARRAY_ENTRIES 2
-#define CMSIS_TASK_NOTIFY_INDEX 1
-
-/*
- * The CMSIS-RTOS V2 FreeRTOS wrapper is dependent on the heap implementation used
- * by the application thus the correct define need to be enabled below
- */
-#define USE_FreeRTOS_HEAP_4
-
-/* 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
-#else
-#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
-
-/* 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
-INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER
-PRIORITY THAN THIS! (higher priorities are lower numeric values. */
-#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5
-
-/* 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))
-
-/* !!!! 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))
-
-/* 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"); \
-    }
-
-/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
-standard names. */
-#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 */

+ 0 - 52
firmware/targets/f6/Inc/comp.h

@@ -1,52 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    comp.h
-  * @brief   This file contains all the function prototypes for
-  *          the comp.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 __COMP_H__
-#define __COMP_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "main.h"
-
-/* USER CODE BEGIN Includes */
-
-/* USER CODE END Includes */
-
-extern COMP_HandleTypeDef hcomp1;
-
-/* USER CODE BEGIN Private defines */
-
-/* USER CODE END Private defines */
-
-void MX_COMP1_Init(void);
-
-/* USER CODE BEGIN Prototypes */
-
-/* USER CODE END Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __COMP_H__ */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 49
firmware/targets/f6/Inc/gpio.h

@@ -1,49 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    gpio.h
-  * @brief   This file contains all the function prototypes for
-  *          the gpio.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 __GPIO_H__
-#define __GPIO_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "main.h"
-
-/* USER CODE BEGIN Includes */
-
-/* USER CODE END Includes */
-
-/* USER CODE BEGIN Private defines */
-
-/* USER CODE END Private defines */
-
-void MX_GPIO_Init(void);
-
-/* USER CODE BEGIN Prototypes */
-
-/* USER CODE END Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-#endif /*__ GPIO_H__ */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 149
firmware/targets/f6/Inc/main.h

@@ -1,149 +0,0 @@
-#pragma once
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "stm32wbxx_hal.h"
-
-void Error_Handler(void);
-
-#define BUTTON_BACK_EXTI_IRQn EXTI15_10_IRQn
-#define BUTTON_BACK_GPIO_Port GPIOC
-#define BUTTON_BACK_Pin GPIO_PIN_13
-#define BUTTON_DOWN_EXTI_IRQn EXTI6_IRQn
-#define BUTTON_DOWN_GPIO_Port GPIOC
-#define BUTTON_DOWN_Pin GPIO_PIN_6
-#define BUTTON_LEFT_EXTI_IRQn EXTI15_10_IRQn
-#define BUTTON_LEFT_GPIO_Port GPIOB
-#define BUTTON_LEFT_Pin GPIO_PIN_11
-#define BUTTON_OK_EXTI_IRQn EXTI3_IRQn
-#define BUTTON_OK_GPIO_Port GPIOH
-#define BUTTON_OK_Pin GPIO_PIN_3
-#define BUTTON_RIGHT_EXTI_IRQn EXTI15_10_IRQn
-#define BUTTON_RIGHT_GPIO_Port GPIOB
-#define BUTTON_RIGHT_Pin GPIO_PIN_12
-#define BUTTON_UP_EXTI_IRQn EXTI15_10_IRQn
-#define BUTTON_UP_GPIO_Port GPIOB
-#define BUTTON_UP_Pin GPIO_PIN_10
-
-#define CC1101_CS_GPIO_Port GPIOD
-#define CC1101_CS_Pin GPIO_PIN_0
-#define CC1101_G0_GPIO_Port GPIOA
-#define CC1101_G0_Pin GPIO_PIN_1
-
-#define DISPLAY_CS_GPIO_Port GPIOC
-#define DISPLAY_CS_Pin GPIO_PIN_11
-#define DISPLAY_DI_GPIO_Port GPIOB
-#define DISPLAY_DI_Pin GPIO_PIN_1
-#define DISPLAY_RST_GPIO_Port GPIOB
-#define DISPLAY_RST_Pin GPIO_PIN_0
-
-#define IR_RX_GPIO_Port GPIOA
-#define IR_RX_Pin GPIO_PIN_0
-#define IR_TX_GPIO_Port GPIOB
-#define IR_TX_Pin GPIO_PIN_9
-
-#define NFC_CS_GPIO_Port GPIOE
-#define NFC_CS_Pin GPIO_PIN_4
-
-#define PA4_GPIO_Port GPIOA
-#define PA4_Pin GPIO_PIN_4
-#define PA6_GPIO_Port GPIOA
-#define PA6_Pin GPIO_PIN_6
-#define PA7_GPIO_Port GPIOA
-#define PA7_Pin GPIO_PIN_7
-#define PB2_GPIO_Port GPIOB
-#define PB2_Pin GPIO_PIN_2
-#define PB3_GPIO_Port GPIOB
-#define PB3_Pin GPIO_PIN_3
-#define PC0_GPIO_Port GPIOC
-#define PC0_Pin GPIO_PIN_0
-#define PC1_GPIO_Port GPIOC
-#define PC1_Pin GPIO_PIN_1
-#define PC3_GPIO_Port GPIOC
-#define PC3_Pin GPIO_PIN_3
-
-#define PERIPH_POWER_GPIO_Port GPIOA
-#define PERIPH_POWER_Pin GPIO_PIN_3
-
-#define QUARTZ_32MHZ_IN_GPIO_Port GPIOC
-#define QUARTZ_32MHZ_IN_Pin GPIO_PIN_14
-#define QUARTZ_32MHZ_OUT_GPIO_Port GPIOC
-#define QUARTZ_32MHZ_OUT_Pin GPIO_PIN_15
-
-#define RFID_OUT_GPIO_Port GPIOB
-#define RFID_OUT_Pin GPIO_PIN_13
-#define RFID_PULL_GPIO_Port GPIOA
-#define RFID_PULL_Pin GPIO_PIN_2
-#define RFID_RF_IN_GPIO_Port GPIOC
-#define RFID_RF_IN_Pin GPIO_PIN_5
-#define RFID_TUNE_GPIO_Port GPIOA
-#define RFID_TUNE_Pin GPIO_PIN_8
-
-#define RF_SW_0_GPIO_Port GPIOC
-#define RF_SW_0_Pin GPIO_PIN_4
-
-#define SD_CD_GPIO_Port GPIOC
-#define SD_CD_Pin GPIO_PIN_10
-#define SD_CS_GPIO_Port GPIOC
-#define SD_CS_Pin GPIO_PIN_12
-
-#define SPEAKER_GPIO_Port GPIOB
-#define SPEAKER_Pin GPIO_PIN_8
-
-#define VIBRO_GPIO_Port GPIOA
-#define VIBRO_Pin GPIO_PIN_15
-
-#define iBTN_GPIO_Port GPIOB
-#define iBTN_Pin GPIO_PIN_14
-
-#define USART1_TX_Pin GPIO_PIN_6
-#define USART1_TX_Port GPIOB
-#define USART1_RX_Pin GPIO_PIN_7
-#define USART1_RX_Port GPIOB
-
-#define SPI_D_MISO_GPIO_Port GPIOC
-#define SPI_D_MISO_Pin GPIO_PIN_2
-#define SPI_D_MOSI_GPIO_Port GPIOB
-#define SPI_D_MOSI_Pin GPIO_PIN_15
-#define SPI_D_SCK_GPIO_Port GPIOD
-#define SPI_D_SCK_Pin GPIO_PIN_1
-
-#define SPI_R_MISO_GPIO_Port GPIOB
-#define SPI_R_MISO_Pin GPIO_PIN_4
-#define SPI_R_MOSI_GPIO_Port GPIOB
-#define SPI_R_MOSI_Pin GPIO_PIN_5
-#define SPI_R_SCK_GPIO_Port GPIOA
-#define SPI_R_SCK_Pin GPIO_PIN_5
-
-extern TIM_HandleTypeDef htim1;
-extern TIM_HandleTypeDef htim2;
-extern TIM_HandleTypeDef htim16;
-
-#define TIM_A htim1
-#define TIM_B htim2
-#define TIM_C htim16
-
-#define SPEAKER_TIM htim16
-#define SPEAKER_CH TIM_CHANNEL_1
-
-#define LFRFID_TIM htim1
-#define LFRFID_CH TIM_CHANNEL_1
-
-#define INFRARED_TX_TIM htim1
-#define INFRARED_TX_CH TIM_CHANNEL_3
-
-// only for reference
-// INFRARED RX timer dont exist in F2
-// and timer need more data to init (NVIC IRQn to set priority)
-#define INFRARED_RX_TIM htim2
-#define INFRARED_RX_FALLING_CH TIM_CHANNEL_1
-#define INFRARED_RX_RISING_CH TIM_CHANNEL_2
-
-#define NFC_IRQ_Pin RFID_PULL_Pin
-#define NFC_IRQ_GPIO_Port RFID_PULL_GPIO_Port
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 51
firmware/targets/f6/Inc/stm32.h

@@ -1,51 +0,0 @@
-#ifndef _STM32_H_
-#define _STM32_H_
-
-/* modify bitfield */
-#define _BMD(reg, msk, val) (reg) = (((reg) & ~(msk)) | (val))
-/* set bitfield */
-#define _BST(reg, bits) (reg) = ((reg) | (bits))
-/* clear bitfield */
-#define _BCL(reg, bits) (reg) = ((reg) & ~(bits))
-/* wait until bitfield set */
-#define _WBS(reg, bits) while(((reg) & (bits)) == 0)
-/* wait until bitfield clear */
-#define _WBC(reg, bits) while(((reg) & (bits)) != 0)
-/* wait for bitfield value */
-#define _WVL(reg, msk, val) while(((reg) & (msk)) != (val))
-/* bit value */
-#define _BV(bit) (0x01 << (bit))
-
-#if defined(STM32F0)
-#include "STM32F0xx/Include/stm32f0xx.h"
-#elif defined(STM32F1)
-#include "STM32F1xx/Include/stm32f1xx.h"
-#elif defined(STM32F2)
-#include "STM32F2xx/Include/stm32f2xx.h"
-#elif defined(STM32F3)
-#include "STM32F3xx/Include/stm32f3xx.h"
-#elif defined(STM32F4)
-#include "STM32F4xx/Include/stm32f4xx.h"
-#elif defined(STM32F7)
-#include "STM32F7xx/Include/stm32f7xx.h"
-#elif defined(STM32H7)
-#include "STM32H7xx/Include/stm32h7xx.h"
-#elif defined(STM32L0)
-#include "STM32L0xx/Include/stm32l0xx.h"
-#elif defined(STM32L1)
-#include "STM32L1xx/Include/stm32l1xx.h"
-#elif defined(STM32L4)
-#include "STM32L4xx/Include/stm32l4xx.h"
-#elif defined(STM32L5)
-#include "STM32L5xx/Include/stm32l5xx.h"
-#elif defined(STM32G0)
-#include "STM32G0xx/Include/stm32g0xx.h"
-#elif defined(STM32G4)
-#include "STM32G4xx/Include/stm32g4xx.h"
-#elif defined(STM32WB)
-#include "STM32WBxx/Include/stm32wbxx.h"
-#else
-#error "STM32 family not defined"
-#endif
-
-#endif // _STM32_H_

+ 0 - 40
firmware/targets/f6/Inc/stm32_assert.h

@@ -1,40 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32_assert.h
-  * @brief   STM32 assert file.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
-  * All rights reserved.</center></h2>
-  *
-  * This software component is licensed by ST under BSD 3-Clause license,
-  * the "License"; You may not use this file except in compliance with the
-  * License. You may obtain a copy of the License at:
-  *                        opensource.org/licenses/BSD-3-Clause
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32_ASSERT_H
-#define __STM32_ASSERT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef USE_FULL_ASSERT
-#define assert_param(expr) ((expr) ? (void)0U : assert_failed())
-void assert_failed();
-#else
-#define assert_param(expr) ((void)0U)
-#endif /* USE_FULL_ASSERT */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32_ASSERT_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 345
firmware/targets/f6/Inc/stm32wbxx_hal_conf.h

@@ -1,345 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32wbxx_hal_conf.h
-  * @author  MCD Application Team
-  * @brief   HAL configuration file.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
-  * All rights reserved.</center></h2>
-  *
-  * This software component is licensed by ST under BSD 3-Clause license,
-  * the "License"; You may not use this file except in compliance with the
-  * License. You may obtain a copy of the License at:
-  *                        opensource.org/licenses/BSD-3-Clause
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32WBxx_HAL_CONF_H
-#define __STM32WBxx_HAL_CONF_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-
-/* ########################## Module Selection ############################## */
-/**
-  * @brief This is the list of modules to be used in the HAL driver
-  */
-#define HAL_MODULE_ENABLED
-/*#define HAL_ADC_MODULE_ENABLED    */
-#define HAL_CRYP_MODULE_ENABLED
-#define HAL_COMP_MODULE_ENABLED
-/*#define HAL_CRC_MODULE_ENABLED    */
-#define HAL_HSEM_MODULE_ENABLED
-/*#define HAL_I2C_MODULE_ENABLED    */
-/*#define HAL_IPCC_MODULE_ENABLED   */
-/*#define HAL_IRDA_MODULE_ENABLED   */
-/*#define HAL_IWDG_MODULE_ENABLED   */
-/*#define HAL_LCD_MODULE_ENABLED    */
-/*#define HAL_LPTIM_MODULE_ENABLED  */
-#define HAL_PCD_MODULE_ENABLED
-#define HAL_PKA_MODULE_ENABLED
-/*#define HAL_QSPI_MODULE_ENABLED   */
-#define HAL_RNG_MODULE_ENABLED
-/*#define HAL_RTC_MODULE_ENABLED    */
-/*#define HAL_SAI_MODULE_ENABLED    */
-/*#define HAL_SMBUS_MODULE_ENABLED  */
-/*#define HAL_SMARTCARD_MODULE_ENABLED   */
-/*#define HAL_SPI_MODULE_ENABLED    */
-#define HAL_TIM_MODULE_ENABLED
-/*#define HAL_TSC_MODULE_ENABLED    */
-/*#define HAL_UART_MODULE_ENABLED   */
-/*#define HAL_USART_MODULE_ENABLED  */
-/*#define HAL_WWDG_MODULE_ENABLED   */
-#define HAL_EXTI_MODULE_ENABLED
-#define HAL_CORTEX_MODULE_ENABLED
-#define HAL_DMA_MODULE_ENABLED
-#define HAL_FLASH_MODULE_ENABLED
-#define HAL_GPIO_MODULE_ENABLED
-#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_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
-
-/* ########################## Oscillator Values adaptation ####################*/
-/**
-  * @brief Adjust the value of External High Speed oscillator (HSE) used in your application.
-  *        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 */
-#endif /* HSE_VALUE */
-
-#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*/
-#endif /* MSI_VALUE */
-
-/**
-  * @brief Internal High Speed oscillator (HSI) value.
-  *        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*/
-#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
-                                             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
-                                             The real value may vary depending on the variations
-                                             in voltage and temperature.*/
-
-/**
-  * @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*/
-#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*/
-#endif /* HSI48_VALUE */
-
-#if !defined(LSE_STARTUP_TIMEOUT)
-#define LSE_STARTUP_TIMEOUT 1000U /*!< Time out for LSE start up, in ms */
-#endif /* HSE_STARTUP_TIMEOUT */
-
-/**
-  * @brief External clock source for SAI1 peripheral
-  *        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*/
-#endif /* EXTERNAL_SAI1_CLOCK_VALUE */
-
-/* Tip: To avoid modifying this file each time you need to use different HSE,
-   ===  you can define the HSE value in your toolchain compiler preprocessor. */
-
-/* ########################### System Configuration ######################### */
-/**
-  * @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
-
-/* ########################## Assert Selection ############################## */
-/**
-  * @brief Uncomment the line below to expanse the "assert_param" macro in the
-  *        HAL drivers code
-  */
-#define USE_FULL_ASSERT 1U
-
-/* ################## SPI peripheral configuration ########################## */
-
-/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver
- * Activated: CRC code is present inside driver
- * Deactivated: CRC code cleaned from driver
- */
-
-#define USE_SPI_CRC 0U
-
-/* Includes ------------------------------------------------------------------*/
-/**
-  * @brief Include module's header file
-  */
-#ifdef HAL_DMA_MODULE_ENABLED
-#include "stm32wbxx_hal_dma.h"
-#endif /* HAL_DMA_MODULE_ENABLED */
-
-#ifdef HAL_ADC_MODULE_ENABLED
-#include "stm32wbxx_hal_adc.h"
-#endif /* HAL_ADC_MODULE_ENABLED */
-
-#ifdef HAL_COMP_MODULE_ENABLED
-#include "stm32wbxx_hal_comp.h"
-#endif /* HAL_COMP_MODULE_ENABLED */
-
-#ifdef HAL_CORTEX_MODULE_ENABLED
-#include "stm32wbxx_hal_cortex.h"
-#endif /* HAL_CORTEX_MODULE_ENABLED */
-
-#ifdef HAL_CRC_MODULE_ENABLED
-#include "stm32wbxx_hal_crc.h"
-#endif /* HAL_CRC_MODULE_ENABLED */
-
-#ifdef HAL_CRYP_MODULE_ENABLED
-#include "stm32wbxx_hal_cryp.h"
-#endif /* HAL_CRYP_MODULE_ENABLED */
-
-#ifdef HAL_EXTI_MODULE_ENABLED
-#include "stm32wbxx_hal_exti.h"
-#endif /* HAL_EXTI_MODULE_ENABLED */
-
-#ifdef HAL_FLASH_MODULE_ENABLED
-#include "stm32wbxx_hal_flash.h"
-#endif /* HAL_FLASH_MODULE_ENABLED */
-
-#ifdef HAL_GPIO_MODULE_ENABLED
-#include "stm32wbxx_hal_gpio.h"
-#endif /* HAL_GPIO_MODULE_ENABLED */
-
-#ifdef HAL_HSEM_MODULE_ENABLED
-#include "stm32wbxx_hal_hsem.h"
-#endif /* HAL_HSEM_MODULE_ENABLED */
-
-#ifdef HAL_I2C_MODULE_ENABLED
-#include "stm32wbxx_hal_i2c.h"
-#endif /* HAL_I2C_MODULE_ENABLED */
-
-#ifdef HAL_IPCC_MODULE_ENABLED
-#include "stm32wbxx_hal_ipcc.h"
-#endif /* HAL_IPCC_MODULE_ENABLED */
-
-#ifdef HAL_IRDA_MODULE_ENABLED
-#include "stm32wbxx_hal_irda.h"
-#endif /* HAL_IRDA_MODULE_ENABLED */
-
-#ifdef HAL_IWDG_MODULE_ENABLED
-#include "stm32wbxx_hal_iwdg.h"
-#endif /* HAL_IWDG_MODULE_ENABLED */
-
-#ifdef HAL_LCD_MODULE_ENABLED
-#include "stm32wbxx_hal_lcd.h"
-#endif /* HAL_LCD_MODULE_ENABLED */
-
-#ifdef HAL_LPTIM_MODULE_ENABLED
-#include "stm32wbxx_hal_lptim.h"
-#endif /* HAL_LPTIM_MODULE_ENABLED */
-
-#ifdef HAL_PCD_MODULE_ENABLED
-#include "stm32wbxx_hal_pcd.h"
-#endif /* HAL_PCD_MODULE_ENABLED */
-
-#ifdef HAL_PKA_MODULE_ENABLED
-#include "stm32wbxx_hal_pka.h"
-#endif /* HAL_PKA_MODULE_ENABLED */
-
-#ifdef HAL_PWR_MODULE_ENABLED
-#include "stm32wbxx_hal_pwr.h"
-#endif /* HAL_PWR_MODULE_ENABLED */
-
-#ifdef HAL_QSPI_MODULE_ENABLED
-#include "stm32wbxx_hal_qspi.h"
-#endif /* HAL_QSPI_MODULE_ENABLED */
-
-#ifdef HAL_RCC_MODULE_ENABLED
-#include "stm32wbxx_hal_rcc.h"
-#endif /* HAL_RCC_MODULE_ENABLED */
-
-#ifdef HAL_RNG_MODULE_ENABLED
-#include "stm32wbxx_hal_rng.h"
-#endif /* HAL_RNG_MODULE_ENABLED */
-
-#ifdef HAL_RTC_MODULE_ENABLED
-#include "stm32wbxx_hal_rtc.h"
-#endif /* HAL_RTC_MODULE_ENABLED */
-
-#ifdef HAL_SAI_MODULE_ENABLED
-#include "stm32wbxx_hal_sai.h"
-#endif /* HAL_SAI_MODULE_ENABLED */
-
-#ifdef HAL_SMARTCARD_MODULE_ENABLED
-#include "stm32wbxx_hal_smartcard.h"
-#endif /* HAL_SMARTCARD_MODULE_ENABLED */
-
-#ifdef HAL_SMBUS_MODULE_ENABLED
-#include "stm32wbxx_hal_smbus.h"
-#endif /* HAL_SMBUS_MODULE_ENABLED */
-
-#ifdef HAL_SPI_MODULE_ENABLED
-#include "stm32wbxx_hal_spi.h"
-#endif /* HAL_SPI_MODULE_ENABLED */
-
-#ifdef HAL_TIM_MODULE_ENABLED
-#include "stm32wbxx_hal_tim.h"
-#endif /* HAL_TIM_MODULE_ENABLED */
-
-#ifdef HAL_TSC_MODULE_ENABLED
-#include "stm32wbxx_hal_tsc.h"
-#endif /* HAL_TSC_MODULE_ENABLED */
-
-#ifdef HAL_UART_MODULE_ENABLED
-#include "stm32wbxx_hal_uart.h"
-#endif /* HAL_UART_MODULE_ENABLED */
-
-#ifdef HAL_USART_MODULE_ENABLED
-#include "stm32wbxx_hal_usart.h"
-#endif /* HAL_USART_MODULE_ENABLED */
-
-#ifdef HAL_WWDG_MODULE_ENABLED
-#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();
-#else
-#define assert_param(expr) ((void)0U)
-#endif /* USE_FULL_ASSERT */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32WBxx_HAL_CONF_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 69
firmware/targets/f6/Inc/stm32wbxx_it.h

@@ -1,69 +0,0 @@
-/* USER CODE BEGIN Header */
-/**
-  ******************************************************************************
-  * @file    stm32wbxx_it.h
-  * @brief   This file contains the headers of the interrupt handlers.
-  ******************************************************************************
-  * @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 */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32WBxx_IT_H
-#define __STM32WBxx_IT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Private includes ----------------------------------------------------------*/
-/* USER CODE BEGIN Includes */
-
-/* USER CODE END Includes */
-
-/* Exported types ------------------------------------------------------------*/
-/* USER CODE BEGIN ET */
-
-/* USER CODE END ET */
-
-/* Exported constants --------------------------------------------------------*/
-/* USER CODE BEGIN EC */
-
-/* USER CODE END EC */
-
-/* Exported macro ------------------------------------------------------------*/
-/* USER CODE BEGIN EM */
-
-/* USER CODE END EM */
-
-/* Exported functions prototypes ---------------------------------------------*/
-void SysTick_Handler(void);
-void ADC1_IRQHandler(void);
-void USB_LP_IRQHandler(void);
-void COMP_IRQHandler(void);
-void TIM1_UP_TIM16_IRQHandler(void);
-void TIM1_TRG_COM_TIM17_IRQHandler(void);
-void TIM1_CC_IRQHandler(void);
-void TIM2_IRQHandler(void);
-void HSEM_IRQHandler(void);
-/* USER CODE BEGIN EFP */
-
-/* USER CODE END EFP */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32WBxx_IT_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 58
firmware/targets/f6/Inc/tim.h

@@ -1,58 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    tim.h
-  * @brief   This file contains all the function prototypes for
-  *          the tim.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 __TIM_H__
-#define __TIM_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "main.h"
-
-/* USER CODE BEGIN Includes */
-
-/* USER CODE END Includes */
-
-extern TIM_HandleTypeDef htim1;
-extern TIM_HandleTypeDef htim2;
-extern TIM_HandleTypeDef htim16;
-
-/* USER CODE BEGIN Private defines */
-
-/* USER CODE END Private defines */
-
-void MX_TIM1_Init(void);
-void MX_TIM2_Init(void);
-void MX_TIM16_Init(void);
-
-void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim);
-
-/* USER CODE BEGIN Prototypes */
-
-/* USER CODE END Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __TIM_H__ */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 93
firmware/targets/f6/Src/comp.c

@@ -1,93 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    comp.c
-  * @brief   This file provides code for the configuration
-  *          of the COMP instances.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 "comp.h"
-
-/* USER CODE BEGIN 0 */
-
-/* USER CODE END 0 */
-
-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 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 */
-
-        __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 */
-    }
-}
-
-void HAL_COMP_MspDeInit(COMP_HandleTypeDef* compHandle) {
-    if(compHandle->Instance == COMP1) {
-        /* USER CODE BEGIN COMP1_MspDeInit 0 */
-
-        /* USER CODE END COMP1_MspDeInit 0 */
-
-        /**COMP1 GPIO Configuration
-    PC5     ------> COMP1_INP
-    */
-        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 */
-
-        /* USER CODE END COMP1_MspDeInit 1 */
-    }
-}
-
-/* USER CODE BEGIN 1 */
-
-/* USER CODE END 1 */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 139
firmware/targets/f6/Src/gpio.c

@@ -1,139 +0,0 @@
-#include "gpio.h"
-
-void MX_GPIO_Init(void) {
-    GPIO_InitTypeDef GPIO_InitStruct = {0};
-
-    /* GPIO Ports Clock Enable */
-    __HAL_RCC_GPIOA_CLK_ENABLE();
-    __HAL_RCC_GPIOB_CLK_ENABLE();
-    __HAL_RCC_GPIOC_CLK_ENABLE();
-    __HAL_RCC_GPIOD_CLK_ENABLE();
-    __HAL_RCC_GPIOE_CLK_ENABLE();
-    __HAL_RCC_GPIOH_CLK_ENABLE();
-
-    /*Configure GPIO pin : PtPin */
-    GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
-    GPIO_InitStruct.Pull = GPIO_PULLUP;
-    GPIO_InitStruct.Pin = BUTTON_BACK_Pin;
-    HAL_GPIO_Init(BUTTON_BACK_GPIO_Port, &GPIO_InitStruct);
-
-    /*Configure GPIO pin : PtPin */
-    GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
-    GPIO_InitStruct.Pull = GPIO_NOPULL;
-    GPIO_InitStruct.Pin = BUTTON_OK_Pin;
-    HAL_GPIO_Init(BUTTON_OK_GPIO_Port, &GPIO_InitStruct);
-
-    /*Configure GPIO pins : PCPin PCPin PCPin PCPin */
-    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
-    GPIO_InitStruct.Pull = GPIO_NOPULL;
-    GPIO_InitStruct.Pin = PC0_Pin;
-    HAL_GPIO_Init(PC0_GPIO_Port, &GPIO_InitStruct);
-    GPIO_InitStruct.Pin = PC1_Pin;
-    HAL_GPIO_Init(PC1_GPIO_Port, &GPIO_InitStruct);
-    GPIO_InitStruct.Pin = PC3_Pin;
-    HAL_GPIO_Init(PC3_GPIO_Port, &GPIO_InitStruct);
-    GPIO_InitStruct.Pin = VIBRO_Pin;
-    HAL_GPIO_Init(VIBRO_GPIO_Port, &GPIO_InitStruct);
-
-    /* RF_SW_0 */
-    HAL_GPIO_WritePin(RF_SW_0_GPIO_Port, RF_SW_0_Pin, GPIO_PIN_RESET);
-    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
-    GPIO_InitStruct.Pull = GPIO_NOPULL;
-    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
-    GPIO_InitStruct.Pin = RF_SW_0_Pin;
-    HAL_GPIO_Init(RF_SW_0_GPIO_Port, &GPIO_InitStruct);
-
-    /* PERIPH_POWER */
-    HAL_GPIO_WritePin(PERIPH_POWER_GPIO_Port, PERIPH_POWER_Pin, GPIO_PIN_SET);
-    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
-    GPIO_InitStruct.Pull = GPIO_NOPULL;
-    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
-    GPIO_InitStruct.Pin = PERIPH_POWER_Pin;
-    HAL_GPIO_Init(PERIPH_POWER_GPIO_Port, &GPIO_InitStruct);
-
-    /*Configure GPIO pins : PAPin PAPin PAPin */
-    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
-    GPIO_InitStruct.Pull = GPIO_NOPULL;
-    GPIO_InitStruct.Pin = PA4_Pin;
-    HAL_GPIO_Init(PA4_GPIO_Port, &GPIO_InitStruct);
-    GPIO_InitStruct.Pin = PA6_Pin;
-    HAL_GPIO_Init(PA6_GPIO_Port, &GPIO_InitStruct);
-    GPIO_InitStruct.Pin = PA7_Pin;
-    HAL_GPIO_Init(PA7_GPIO_Port, &GPIO_InitStruct);
-
-    /*Configure GPIO pin : PtPin */
-    GPIO_InitStruct.Pin = RFID_PULL_Pin;
-    GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
-    GPIO_InitStruct.Pull = GPIO_NOPULL;
-    HAL_GPIO_Init(RFID_PULL_GPIO_Port, &GPIO_InitStruct);
-
-    /*Configure GPIO pins : PBPin PBPin PBPin */
-    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
-    GPIO_InitStruct.Pull = GPIO_NOPULL;
-    GPIO_InitStruct.Pin = PB2_Pin;
-    HAL_GPIO_Init(PB2_GPIO_Port, &GPIO_InitStruct);
-    GPIO_InitStruct.Pin = iBTN_Pin;
-    HAL_GPIO_Init(iBTN_GPIO_Port, &GPIO_InitStruct);
-    GPIO_InitStruct.Pin = PB3_Pin;
-    HAL_GPIO_Init(PB3_GPIO_Port, &GPIO_InitStruct);
-
-    /*Configure GPIO pins : PBPin PBPin PBPin PBPin */
-    GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
-    GPIO_InitStruct.Pull = GPIO_PULLUP;
-    GPIO_InitStruct.Pin = BUTTON_UP_Pin;
-    HAL_GPIO_Init(BUTTON_UP_GPIO_Port, &GPIO_InitStruct);
-    GPIO_InitStruct.Pin = BUTTON_LEFT_Pin;
-    HAL_GPIO_Init(BUTTON_LEFT_GPIO_Port, &GPIO_InitStruct);
-    GPIO_InitStruct.Pin = BUTTON_RIGHT_Pin;
-    HAL_GPIO_Init(BUTTON_RIGHT_GPIO_Port, &GPIO_InitStruct);
-
-    /*Configure GPIO pins : PBPin PBPin PBPin PBPin */
-    GPIO_InitStruct.Pin = BUTTON_DOWN_Pin;
-    GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
-    GPIO_InitStruct.Pull = GPIO_PULLUP;
-    HAL_GPIO_Init(BUTTON_DOWN_GPIO_Port, &GPIO_InitStruct);
-
-    /* DISPLAY_RST */
-    HAL_GPIO_WritePin(DISPLAY_RST_GPIO_Port, DISPLAY_RST_Pin, GPIO_PIN_RESET);
-    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
-    GPIO_InitStruct.Pull = GPIO_NOPULL;
-    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
-    GPIO_InitStruct.Pin = DISPLAY_RST_Pin;
-    HAL_GPIO_Init(DISPLAY_RST_GPIO_Port, &GPIO_InitStruct);
-
-    /* DISPLAY_DI */
-    HAL_GPIO_WritePin(DISPLAY_DI_GPIO_Port, DISPLAY_DI_Pin, GPIO_PIN_RESET);
-    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
-    GPIO_InitStruct.Pull = GPIO_NOPULL;
-    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
-    GPIO_InitStruct.Pin = DISPLAY_DI_Pin;
-    HAL_GPIO_Init(DISPLAY_DI_GPIO_Port, &GPIO_InitStruct);
-
-    /* SD_CD */
-    GPIO_InitStruct.Pin = SD_CD_Pin;
-    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
-    GPIO_InitStruct.Pull = GPIO_NOPULL;
-    HAL_GPIO_Init(SD_CD_GPIO_Port, &GPIO_InitStruct);
-
-    /* Enable all NVIC lines related to gpio */
-    HAL_NVIC_SetPriority(EXTI0_IRQn, 5, 0);
-    HAL_NVIC_EnableIRQ(EXTI0_IRQn);
-
-    HAL_NVIC_SetPriority(EXTI1_IRQn, 5, 0);
-    HAL_NVIC_EnableIRQ(EXTI1_IRQn);
-
-    HAL_NVIC_SetPriority(EXTI2_IRQn, 5, 0);
-    HAL_NVIC_EnableIRQ(EXTI2_IRQn);
-
-    HAL_NVIC_SetPriority(EXTI3_IRQn, 5, 0);
-    HAL_NVIC_EnableIRQ(EXTI3_IRQn);
-
-    HAL_NVIC_SetPriority(EXTI4_IRQn, 5, 0);
-    HAL_NVIC_EnableIRQ(EXTI4_IRQn);
-
-    HAL_NVIC_SetPriority(EXTI9_5_IRQn, 5, 0);
-    HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
-
-    HAL_NVIC_SetPriority(EXTI15_10_IRQn, 5, 0);
-    HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
-}

+ 0 - 51
firmware/targets/f6/Src/main.c

@@ -1,51 +0,0 @@
-#include "main.h"
-
-#include <furi.h>
-#include <furi_hal.h>
-#include <flipper.h>
-
-#define TAG "Main"
-
-int main(void) {
-    // Flipper critical FURI HAL
-    furi_hal_init_critical();
-
-    // Initialize FURI layer
-    furi_init();
-
-    // Initialize ST HAL
-    HAL_Init();
-
-    // Flipper FURI HAL
-    furi_hal_init();
-
-    // CMSIS initialization
-    osKernelInitialize();
-    FURI_LOG_I(TAG, "KERNEL OK");
-
-    // Init flipper
-    flipper_init();
-
-    // Start kernel
-    osKernelStart();
-
-    while(1) {
-    }
-}
-
-void Error_Handler(void) {
-    furi_crash("ErrorHandler");
-}
-
-#ifdef USE_FULL_ASSERT
-/**
-    * @brief  Reports the name of the source file and the source line number
-    *         where the assert_param error has occurred.
-    * @param  file: pointer to the source file name
-    * @param  line: assert_param error line source number
-    * @retval None
-    */
-void assert_failed(uint8_t* file, uint32_t line) {
-    furi_crash("HAL assert failed");
-}
-#endif /* USE_FULL_ASSERT */

+ 0 - 92
firmware/targets/f6/Src/stm32wbxx_hal_msp.c

@@ -1,92 +0,0 @@
-/* USER CODE BEGIN Header */
-/**
-  ******************************************************************************
-  * File Name          : stm32wbxx_hal_msp.c
-  * Description        : This file provides code for the MSP Initialization
-  *                      and de-Initialization codes.
-  ******************************************************************************
-  * @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 ------------------------------------------------------------------*/
-#include "main.h"
-/* USER CODE BEGIN Includes */
-
-/* USER CODE END Includes */
-
-/* Private typedef -----------------------------------------------------------*/
-/* USER CODE BEGIN TD */
-
-/* USER CODE END TD */
-
-/* Private define ------------------------------------------------------------*/
-/* USER CODE BEGIN Define */
-
-/* USER CODE END Define */
-
-/* Private macro -------------------------------------------------------------*/
-/* USER CODE BEGIN Macro */
-
-/* USER CODE END Macro */
-
-/* Private variables ---------------------------------------------------------*/
-/* USER CODE BEGIN PV */
-
-/* USER CODE END PV */
-
-/* Private function prototypes -----------------------------------------------*/
-/* USER CODE BEGIN PFP */
-
-/* USER CODE END PFP */
-
-/* External functions --------------------------------------------------------*/
-/* USER CODE BEGIN ExternalFunctions */
-
-/* USER CODE END ExternalFunctions */
-
-/* USER CODE BEGIN 0 */
-
-/* USER CODE END 0 */
-/**
-  * Initializes the Global MSP.
-  */
-void HAL_MspInit(void) {
-    /* USER CODE BEGIN MspInit 0 */
-
-    /* USER CODE END MspInit 0 */
-
-    __HAL_RCC_HSEM_CLK_ENABLE();
-
-    /* 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);
-
-    /* USER CODE BEGIN MspInit 1 */
-
-    /* USER CODE END MspInit 1 */
-}
-
-/* USER CODE BEGIN 1 */
-
-/* USER CODE END 1 */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 48
firmware/targets/f6/Src/stm32wbxx_it.c

@@ -1,48 +0,0 @@
-#include "main.h"
-#include "stm32wbxx_it.h"
-#include "FreeRTOS.h"
-#include "task.h"
-#include "usbd_core.h"
-
-extern usbd_device udev;
-extern COMP_HandleTypeDef hcomp1;
-extern TIM_HandleTypeDef htim1;
-extern TIM_HandleTypeDef htim2;
-extern TIM_HandleTypeDef htim16;
-extern TIM_HandleTypeDef htim17;
-
-extern void HW_TS_RTC_Wakeup_Handler();
-extern void HW_IPCC_Tx_Handler();
-extern void HW_IPCC_Rx_Handler();
-
-void SysTick_Handler(void) {
-    HAL_IncTick();
-}
-
-void USB_LP_IRQHandler(void) {
-    usbd_poll(&udev);
-}
-
-void COMP_IRQHandler(void) {
-    HAL_COMP_IRQHandler(&hcomp1);
-}
-
-void TIM1_TRG_COM_TIM17_IRQHandler(void) {
-    HAL_TIM_IRQHandler(&htim1);
-}
-
-void TIM1_CC_IRQHandler(void) {
-    HAL_TIM_IRQHandler(&htim1);
-}
-
-void HSEM_IRQHandler(void) {
-    HAL_HSEM_IRQHandler();
-}
-
-void IPCC_C1_TX_IRQHandler(void) {
-    HW_IPCC_Tx_Handler();
-}
-
-void IPCC_C1_RX_IRQHandler(void) {
-    HW_IPCC_Rx_Handler();
-}

+ 0 - 371
firmware/targets/f6/Src/system_stm32wbxx.c

@@ -1,371 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    system_stm32wbxx.c
-  * @author  MCD Application Team
-  * @brief   CMSIS Cortex Device Peripheral Access Layer System Source File
-  *
-  *   This file provides two functions and one global variable to be called from
-  *   user application:
-  *      - SystemInit(): This function is called at startup just after reset and
-  *                      before branch to main program. This call is made inside
-  *                      the "startup_stm32wbxx.s" file.
-  *
-  *      - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
-  *                                  by the user application to setup the SysTick
-  *                                  timer or configure other parameters.
-  *
-  *      - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
-  *                                 be called whenever the core clock is changed
-  *                                 during program execution.
-  *
-  *   After each device reset the MSI (4 MHz) is used as system clock source.
-  *   Then SystemInit() function is called, in "startup_stm32wbxx.s" file, to
-  *   configure the system clock before to branch to main program.
-  *
-  *   This file configures the system clock as follows:
-  *=============================================================================
-  *-----------------------------------------------------------------------------
-  *        System Clock source                    | MSI
-  *-----------------------------------------------------------------------------
-  *        SYSCLK(Hz)                             | 4000000
-  *-----------------------------------------------------------------------------
-  *        HCLK(Hz)                               | 4000000
-  *-----------------------------------------------------------------------------
-  *        AHB Prescaler                          | 1
-  *-----------------------------------------------------------------------------
-  *        APB1 Prescaler                         | 1
-  *-----------------------------------------------------------------------------
-  *        APB2 Prescaler                         | 1
-  *-----------------------------------------------------------------------------
-  *        PLL_M                                  | 1
-  *-----------------------------------------------------------------------------
-  *        PLL_N                                  | 8
-  *-----------------------------------------------------------------------------
-  *        PLL_P                                  | 7
-  *-----------------------------------------------------------------------------
-  *        PLL_Q                                  | 2
-  *-----------------------------------------------------------------------------
-  *        PLL_R                                  | 2
-  *-----------------------------------------------------------------------------
-  *        PLLSAI1_P                              | NA
-  *-----------------------------------------------------------------------------
-  *        PLLSAI1_Q                              | NA
-  *-----------------------------------------------------------------------------
-  *        PLLSAI1_R                              | NA
-  *-----------------------------------------------------------------------------
-  *        Require 48MHz for USB OTG FS,          | Disabled
-  *        SDIO and RNG clock                     |
-  *-----------------------------------------------------------------------------
-  *=============================================================================
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics. 
-  * All rights reserved.</center></h2>
-  *
-  * This software component is licensed by ST under BSD 3-Clause license,
-  * the "License"; You may not use this file except in compliance with the 
-  * License. You may obtain a copy of the License at:
-  *                        opensource.org/licenses/BSD-3-Clause
-  *
-  ******************************************************************************
-  */
-
-/** @addtogroup CMSIS
-  * @{
-  */
-
-/** @addtogroup stm32WBxx_system
-  * @{
-  */
-
-/** @addtogroup stm32WBxx_System_Private_Includes
-  * @{
-  */
-
-#include "stm32wbxx.h"
-
-#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*/
-#endif /* MSI_VALUE */
-
-#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(LSE_VALUE)
-#define LSE_VALUE (32768UL) /*!< Value of LSE in Hz*/
-#endif /* LSE_VALUE */
-
-/**
-  * @}
-  */
-
-/** @addtogroup STM32WBxx_System_Private_TypesDefinitions
-  * @{
-  */
-
-/**
-  * @}
-  */
-
-/** @addtogroup STM32WBxx_System_Private_Defines
-  * @{
-  */
-
-/*!< 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.
-                                                     This value must be a multiple of 0x200. */
-
-#define VECT_TAB_BASE_ADDRESS \
-    SRAM1_BASE /*!< Vector Table base offset field.
-                                                     This value must be a multiple of 0x200. */
-/**
-  * @}
-  */
-
-/** @addtogroup STM32WBxx_System_Private_Macros
-  * @{
-  */
-
-/**
-  * @}
-  */
-
-/** @addtogroup STM32WBxx_System_Private_Variables
-  * @{
-  */
-/* 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
-         Note: If you use this function to configure the system clock; then there
-               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)
-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
-
-/**
-  * @}
-  */
-
-/** @addtogroup STM32WBxx_System_Private_FunctionPrototypes
-  * @{
-  */
-
-/**
-  * @}
-  */
-
-/** @addtogroup STM32WBxx_System_Private_Functions
-  * @{
-  */
-
-/**
-  * @brief  Setup the microcontroller system.
-  * @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 */
-#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;
-
-#if defined(STM32WB55xx) || defined(STM32WB5Mxx)
-    /* Reset PLLSAI1CFGR register */
-    RCC->PLLSAI1CFGR = 0x22041000U;
-#endif
-
-    /* Reset HSEBYP bit */
-    RCC->CR &= 0xFFFBFFFFU;
-
-    /* Disable all interrupts */
-    RCC->CIER = 0x00000000;
-}
-
-/**
-  * @brief  Update SystemCoreClock variable according to Clock Register Values.
-  *         The SystemCoreClock variable contains the core clock (HCLK), it can
-  *         be used by the user application to setup the SysTick timer or configure
-  *         other parameters.
-  *
-  * @note   Each time the core clock (HCLK) changes, this function must be called
-  *         to update SystemCoreClock variable value. Otherwise, any configuration
-  *         based on this variable will be incorrect.
-  *
-  * @note   - The system frequency computed by this function is not the real
-  *           frequency in the chip. It is calculated based on the predefined
-  *           constant and the selected clock source:
-  *
-  *           - If SYSCLK source is MSI, SystemCoreClock will contain the MSI_VALUE(*)
-  *
-  *           - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(**)
-  *
-  *           - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(***)
-  *
-  *           - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(***)
-  *             or HSI_VALUE(*) or MSI_VALUE(*) multiplied/divided by the PLL factors.
-  *
-  *         (*) MSI_VALUE is a constant defined in stm32wbxx_hal.h file (default value
-  *             4 MHz) but the real value may vary depending on the variations
-  *             in voltage and temperature.
-  *
-  *         (**) HSI_VALUE is a constant defined in stm32wbxx_hal_conf.h file (default value
-  *              16 MHz) but the real value may vary depending on the variations
-  *              in voltage and temperature.
-  *
-  *         (***) HSE_VALUE is a constant defined in stm32wbxx_hal_conf.h file (default value
-  *              32 MHz), user has to ensure that HSE_VALUE is same as the real
-  *              frequency of the crystal used. Otherwise, this function may
-  *              have wrong result.
-  *
-  *         - The result of this function could be not correct when using fractional
-  *           value for HSE crystal.
-  *
-  * @param  None
-  * @retval None
-  */
-void SystemCoreClockUpdate(void) {
-    uint32_t tmp, msirange, pllvco, pllr, pllsource, pllm;
-
-    /* Get MSI Range frequency--------------------------------------------------*/
-
-    /*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;
-
-    case 0x04: /* HSI used as system clock source */
-        /* HSI used as system clock source */
-        SystemCoreClock = HSI_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
-         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;
-
-    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;
-}
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 317
firmware/targets/f6/Src/tim.c

@@ -1,317 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    tim.c
-  * @brief   This file provides code for the configuration
-  *          of the TIM instances.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 "tim.h"
-
-/* USER CODE BEGIN 0 */
-
-/* USER CODE END 0 */
-
-TIM_HandleTypeDef htim1;
-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);
-}
-/* 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();
-    }
-}
-/* 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 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();
-
-        /* 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 TIM2_MspInit 0 */
-        /* TIM2 clock enable */
-        __HAL_RCC_TIM2_CLK_ENABLE();
-
-        __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 */
-    }
-}
-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);
-
-        /* 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 TIM16_MspPostInit 0 */
-
-        __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);
-
-        /* 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 */
-
-        /* 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 */
-
-        /* 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();
-
-        /**TIM2 GPIO Configuration
-    PA0     ------> TIM2_CH1
-    */
-        HAL_GPIO_DeInit(IR_RX_GPIO_Port, IR_RX_Pin);
-
-        /* 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 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 BEGIN 1 */
-
-/* USER CODE END 1 */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 39
firmware/targets/f6/ble_glue/app_common.h

@@ -1,39 +0,0 @@
-/* USER CODE BEGIN Header */
-/**
- ******************************************************************************
-  * File Name          : app_common.h
-  * Description        : App Common application configuration 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 */
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef APP_COMMON_H
-#define APP_COMMON_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdint.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-#include <furi/common_defines.h>
-
-#include "app_conf.h"
-
-#endif

+ 0 - 465
firmware/targets/f6/ble_glue/app_conf.h

@@ -1,465 +0,0 @@
-#pragma once
-
-#include "hw.h"
-#include "hw_conf.h"
-#include "hw_if.h"
-#include "ble_bufsize.h"
-
-#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 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 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_NO_INPUT_NO_OUTPUT (0x03)
-#define CFG_IO_CAPABILITY_KEYBOARD_DISPLAY (0x04)
-
-#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 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_SC_SUPPORT CFG_SECURE_OPTIONAL
-
-/**
- * Define Keypress Notification Support
- */
-#define CFG_KEYPRESS_NOT_SUPPORTED (0x00)
-#define CFG_KEYPRESS_SUPPORTED (0x01)
-
-#define CFG_KEYPRESS_NOTIFICATION_SUPPORT CFG_KEYPRESS_NOT_SUPPORTED
-
-/**
- * Numeric Comparison Answers
- */
-#define YES (0x01)
-#define NO (0x00)
-
-/**
- * Device name configuration for Generic Access Service
- */
-#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
-
-/**
-*   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                                                                                  \
-    }
-
-/**
-* 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                                                                                  \
-    }
-
-/* USER CODE BEGIN Generic_Parameters */
-/**
- * SMPS supply
- * SMPS not used when Set to 0
- * SMPS used when Set to 1
- */
-#define CFG_USE_SMPS 1
-/* USER CODE END Generic_Parameters */
-
-/**< specific parameters */
-/*****************************************************/
-
-/**
-* AD Element - Group B Feature
-*/
-/* LSB - Second Byte */
-#define CFG_FEATURE_OTA_REBOOT (0x20)
-
-/******************************************************************************
- * BLE Stack
- ******************************************************************************/
-/**
- * Maximum number of simultaneous connections that the device will support.
- * Valid values are from 1 to 8
- */
-#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
-
-/**
- * Maximum number of Attributes
- * (i.e. the number of characteristic + the number of characteristic values + the number of descriptors, excluding the services)
- * that can be stored in the GATT database.
- * Note that certain characteristics and relative descriptors are added automatically during device initialization
- * so this parameters should be 9 plus the number of user Attributes
- */
-#define CFG_BLE_NUM_GATT_ATTRIBUTES 68
-
-/**
- * Maximum supported ATT_MTU size
- */
-#define CFG_BLE_MAX_ATT_MTU (256 + 128 + 16 + 8 + 4 + 2)
-
-/**
- * Size of the storage area for Attribute values
- *  This value depends on the number of attributes used by application. In particular the sum of the following quantities (in octets) should be made for each attribute:
- *  - attribute value length
- *  - 5, if UUID is 16 bit; 19, if UUID is 128 bit
- *  - 2, if server configuration descriptor is used
- *  - 2*DTM_NUM_LINK, if client configuration descriptor is used
- *  - 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)
-
-/**
- * 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)
-
-/**
- * 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))
-
-/**
- * Enable or disable the Extended Packet length feature. Valid values are 0 or 1.
- */
-#define CFG_BLE_DATA_LENGTH_EXTENSION 1
-
-/**
- * Sleep clock accuracy in Slave mode (ppm value)
- */
-#define CFG_BLE_SLAVE_SCA 500
-
-/**
- * Sleep clock accuracy in Master mode
- * 0 : 251 ppm to 500 ppm
- * 1 : 151 ppm to 250 ppm
- * 2 : 101 ppm to 150 ppm
- * 3 : 76 ppm to 100 ppm
- * 4 : 51 ppm to 75 ppm
- * 5 : 31 ppm to 50 ppm
- * 6 : 21 ppm to 30 ppm
- * 7 : 0 ppm to 20 ppm
- */
-#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
-
-/**
- * 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
-
-/**
- * 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)
-
-/**
- * Viterbi Mode
- * 1 : enabled
- * 0 : disabled
- */
-#define CFG_BLE_VITERBI_MODE 1
-
-/**
- * BLE stack Options flags to be configured with:
- * - SHCI_C2_BLE_INIT_OPTIONS_LL_ONLY
- * - SHCI_C2_BLE_INIT_OPTIONS_LL_HOST
- * - SHCI_C2_BLE_INIT_OPTIONS_NO_SVC_CHANGE_DESC
- * - SHCI_C2_BLE_INIT_OPTIONS_WITH_SVC_CHANGE_DESC
- * - SHCI_C2_BLE_INIT_OPTIONS_DEVICE_NAME_RO
- * - SHCI_C2_BLE_INIT_OPTIONS_DEVICE_NAME_RW
- * - SHCI_C2_BLE_INIT_OPTIONS_EXT_ADV
- * - SHCI_C2_BLE_INIT_OPTIONS_NO_EXT_ADV
- * - SHCI_C2_BLE_INIT_OPTIONS_CS_ALGO2
- * - SHCI_C2_BLE_INIT_OPTIONS_NO_CS_ALGO2
- * - SHCI_C2_BLE_INIT_OPTIONS_POWER_CLASS_1
- * - SHCI_C2_BLE_INIT_OPTIONS_POWER_CLASS_2_3
- * which are used to set following configuration bits:
- * (bit 0): 1: LL only
- *          0: LL + host
- * (bit 1): 1: no service change desc.
- *          0: with service change desc.
- * (bit 2): 1: device name Read-Only
- *          0: device name R/W
- * (bit 3): 1: extended advertizing supported       [NOT SUPPORTED]
- *          0: extended advertizing not supported   [NOT SUPPORTED]
- * (bit 4): 1: CS Algo #2 supported
- *          0: CS Algo #2 not supported
- * (bit 7): 1: LE Power Class 1
- *          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)
-
-/**
- * Queue length of BLE Event
- * This parameter defines the number of asynchronous events that can be stored in the HCI layer before
- * being reported to the application. When a command is sent to the BLE core coprocessor, the HCI layer
- * is waiting for the event with the Num_HCI_Command_Packets set to 1. The receive queue shall be large
- * enough to store all asynchronous events received in between.
- * When CFG_TLBLE_MOST_EVENT_PAYLOAD_SIZE is set to 27, this allow to store three 255 bytes long asynchronous events
- * between the HCI command and its event.
- * This parameter depends on the value given to CFG_TLBLE_MOST_EVENT_PAYLOAD_SIZE. When the queue size is to small,
- * the system may hang if the queue is full with asynchronous events and the HCI layer is still waiting
- * for a CC/CS event, In that case, the notification TL_BLE_HCI_ToNot() is called to indicate
- * to the application a HCI command did not receive its command event within 30s (Default HCI Timeout).
- */
-#define CFG_TLBLE_EVT_QUEUE_LENGTH 5
-/**
- * This parameter should be set to fit most events received by the HCI layer. It defines the buffer size of each element
- * allocated in the queue of received events and can be used to optimize the amount of RAM allocated by the Memory Manager.
- * It should not exceed 255 which is the maximum HCI packet payload size (a greater value is a lost of memory as it will
- * never be used)
- * 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 TL_BLE_EVENT_FRAME_SIZE (TL_EVT_HDR_SIZE + CFG_TLBLE_MOST_EVENT_PAYLOAD_SIZE)
-/******************************************************************************
- * UART interfaces
- ******************************************************************************/
-
-/**
- * Select UART interfaces
- */
-#define CFG_DEBUG_TRACE_UART hw_uart1
-#define CFG_CONSOLE_MENU 0
-
-/******************************************************************************
- * Low Power
- ******************************************************************************/
-/**
- *  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
-
-/******************************************************************************
- * Timer Server
- ******************************************************************************/
-/**
- *  CFG_RTC_WUCKSEL_DIVIDER:  This sets the RTCCLK divider to the wakeup timer.
- *  The lower is the value, the better is the power consumption and the accuracy of the timerserver
- *  The higher is the value, the finest is the granularity
- *
- *  CFG_RTC_ASYNCH_PRESCALER: This sets the asynchronous prescaler of the RTC. It should as high as possible ( to ouput
- *  clock as low as possible) but the output clock should be equal or higher frequency compare to the clock feeding
- *  the wakeup timer. A lower clock speed would impact the accuracy of the timer server.
- *
- *  CFG_RTC_SYNCH_PRESCALER: This sets the synchronous prescaler of the RTC.
- *  When the 1Hz calendar clock is required, it shall be sets according to other settings
- *  When the 1Hz calendar clock is not needed, CFG_RTC_SYNCH_PRESCALER should be set to 0x7FFF (MAX VALUE)
- *
- *  CFG_RTCCLK_DIVIDER_CONF:
- *  Shall be set to either 0,2,4,8,16
- *  When set to either 2,4,8,16, the 1Hhz calendar is supported
- *  When set to 0, the user sets its own configuration
- *
- *  The following settings are computed with LSI as input to the RTC
- */
-#define 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_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)
-/**
- * It divides the RTC CLK by 2
- */
-#define CFG_RTC_WUCKSEL_DIVIDER (3)
-#endif
-
-#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)
-/**
- * It divides the RTC CLK by 8
- */
-#define CFG_RTC_WUCKSEL_DIVIDER (1)
-#endif
-
-#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)
-
-#endif
-
-/** tick timer value in us */
-#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 */
-
-    /* USER CODE END CFG_TimProcID_t */
-} CFG_TimProcID_t;
-
-/******************************************************************************
- * Debug
- ******************************************************************************/
-/**
- * When set, this resets some hw resources to set the device in the same state than the power up
- * The FW resets only register that may prevent the FW to run properly
- *
- * This shall be set to 0 in a final product
- *
- */
-#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
-
-/**
- * When set to 1, the traces are enabled in the BLE services
- */
-#define CFG_DEBUG_BLE_TRACE 0
-
-/**
- * Enable or Disable traces in application
- */
-#define CFG_DEBUG_APP_TRACE 0
-
-#if(CFG_DEBUG_APP_TRACE != 0)
-#define APP_DBG_MSG PRINT_MESG_DBG
-#else
-#define APP_DBG_MSG PRINT_NO_MESG
-#endif
-
-#if((CFG_DEBUG_BLE_TRACE != 0) || (CFG_DEBUG_APP_TRACE != 0))
-#define CFG_DEBUG_TRACE 1
-#endif
-
-#if(CFG_DEBUG_TRACE != 0)
-#undef CFG_LPM_SUPPORTED
-#undef CFG_DEBUGGER_SUPPORTED
-#define CFG_LPM_SUPPORTED 0
-#define CFG_DEBUGGER_SUPPORTED 1
-#endif
-
-/**
- * When CFG_DEBUG_TRACE_FULL is set to 1, the trace are output with the API name, the file name and the line number
- * When CFG_DEBUG_TRACE_LIGHT is set to 1, only the debug message is output
- *
- * 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
-
-#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
-#endif
-
-#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
-#endif
-
-/**
- * When not set, the traces is looping on sending the trace over UART
- */
-#define DBG_TRACE_USE_CIRCULAR_QUEUE 0
-
-/**
- * max buffer Size to queue data traces and max data trace allowed.
- * Only Used if DBG_TRACE_USE_CIRCULAR_QUEUE is defined
- */
-#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

+ 0 - 357
firmware/targets/f6/ble_glue/app_debug.c

@@ -1,357 +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****/

+ 0 - 38
firmware/targets/f6/ble_glue/app_debug.h

@@ -1,38 +0,0 @@
-/* USER CODE BEGIN Header */
-/**
- ******************************************************************************
-  * File Name          : app_debug.h
-  * Description        : Header for app_debug.c module
- ******************************************************************************
-  * @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 */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __APP_DEBUG_H
-#define __APP_DEBUG_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void APPD_Init(void);
-void APPD_EnableCPU2(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /*__APP_DEBUG_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 81
firmware/targets/f6/ble_glue/battery_service.c

@@ -1,81 +0,0 @@
-#include "battery_service.h"
-#include "app_common.h"
-#include "ble.h"
-
-#include <furi.h>
-
-#define TAG "BtBatterySvc"
-
-typedef struct {
-    uint16_t svc_handle;
-    uint16_t char_level_handle;
-} BatterySvc;
-
-static BatterySvc* battery_svc = NULL;
-
-static const uint16_t service_uuid = BATTERY_SERVICE_UUID;
-static const uint16_t char_battery_level_uuid = BATTERY_LEVEL_CHAR_UUID;
-
-void battery_svc_start() {
-    battery_svc = malloc(sizeof(BatterySvc));
-    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);
-    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);
-    if(status) {
-        FURI_LOG_E(TAG, "Failed to add Battery level characteristic: %d", status);
-    }
-}
-
-void battery_svc_stop() {
-    tBleStatus status;
-    if(battery_svc) {
-        // Delete Battery level characteristic
-        status = aci_gatt_del_char(battery_svc->svc_handle, battery_svc->char_level_handle);
-        if(status) {
-            FURI_LOG_E(TAG, "Failed to delete Battery level characteristic: %d", status);
-        }
-        // Delete Battery service
-        status = aci_gatt_del_service(battery_svc->svc_handle);
-        if(status) {
-            FURI_LOG_E(TAG, "Failed to delete Battery service: %d", status);
-        }
-        free(battery_svc);
-        battery_svc = NULL;
-    }
-}
-
-bool battery_svc_is_started() {
-    return battery_svc != NULL;
-}
-
-bool battery_svc_update_level(uint8_t battery_charge) {
-    // Check if service was started
-    if(battery_svc == NULL) {
-        return false;
-    }
-    // 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);
-    if(result) {
-        FURI_LOG_E(TAG, "Failed updating RX characteristic: %d", result);
-    }
-    return result != BLE_STATUS_SUCCESS;
-}

+ 0 - 20
firmware/targets/f6/ble_glue/battery_service.h

@@ -1,20 +0,0 @@
-#pragma once
-
-#include <stdint.h>
-#include <stdbool.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void battery_svc_start();
-
-void battery_svc_stop();
-
-bool battery_svc_is_started();
-
-bool battery_svc_update_level(uint8_t battery_level);
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 185
firmware/targets/f6/ble_glue/ble_app.c

@@ -1,185 +0,0 @@
-#include "ble_app.h"
-
-#include "hci_tl.h"
-#include "ble.h"
-#include "shci.h"
-#include "gap.h"
-
-#include <furi_hal.h>
-
-#define TAG "Bt"
-
-#define BLE_APP_FLAG_HCI_EVENT (1UL << 0)
-#define BLE_APP_FLAG_KILL_THREAD (1UL << 1)
-#define BLE_APP_FLAG_ALL (BLE_APP_FLAG_HCI_EVENT | BLE_APP_FLAG_KILL_THREAD)
-
-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");
-
-typedef struct {
-    osMutexId_t hci_mtx;
-    osSemaphoreId_t hci_sem;
-    FuriThread* thread;
-    osEventFlagsId_t event_flags;
-} BleApp;
-
-static BleApp* ble_app = NULL;
-
-static int32_t ble_app_hci_thread(void* context);
-static void ble_app_hci_event_handler(void* pPayload);
-static void ble_app_hci_status_not_handler(HCI_TL_CmdStatus_t status);
-
-bool ble_app_init() {
-    SHCI_CmdStatus_t status;
-    ble_app = malloc(sizeof(BleApp));
-    // Allocate semafore and mutex for ble command buffer access
-    ble_app->hci_mtx = osMutexNew(NULL);
-    ble_app->hci_sem = osSemaphoreNew(1, 0, NULL);
-    ble_app->event_flags = osEventFlagsNew(NULL);
-    // HCI transport layer thread to handle user asynch events
-    ble_app->thread = furi_thread_alloc();
-    furi_thread_set_name(ble_app->thread, "BleHciDriver");
-    furi_thread_set_stack_size(ble_app->thread, 1024);
-    furi_thread_set_context(ble_app->thread, ble_app);
-    furi_thread_set_callback(ble_app->thread, ble_app_hci_thread);
-    furi_thread_start(ble_app->thread);
-
-    // Initialize Ble Transport Layer
-    HCI_TL_HciInitConf_t hci_tl_config = {
-        .p_cmdbuffer = (uint8_t*)&ble_app_cmd_buffer,
-        .StatusNotCallBack = ble_app_hci_status_not_handler,
-    };
-    hci_init(ble_app_hci_event_handler, (void*)&hci_tl_config);
-
-    // 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,
-        .BleNvmRamAddress = (uint32_t)ble_app_nvm,
-        .EvtMask1 = SHCI_C2_CONFIG_EVTMASK1_BIT1_BLE_NVM_RAM_UPDATE_ENABLE,
-    };
-    status = SHCI_C2_Config(&config_param);
-    if(status) {
-        FURI_LOG_E(TAG, "Failed to configure 2nd core: %d", status);
-    }
-
-    // Start ble stack on 2nd core
-    SHCI_C2_Ble_Init_Cmd_Packet_t ble_init_cmd_packet = {
-        .Header = {{0, 0, 0}}, // Header unused
-        .Param = {
-            .pBleBufferAddress = 0, // pBleBufferAddress not used
-            .BleBufferSize = 0, // BleBufferSize not used
-            .NumAttrRecord = CFG_BLE_NUM_GATT_ATTRIBUTES,
-            .NumAttrServ = CFG_BLE_NUM_GATT_SERVICES,
-            .AttrValueArrSize = CFG_BLE_ATT_VALUE_ARRAY_SIZE,
-            .NumOfLinks = CFG_BLE_NUM_LINK,
-            .ExtendedPacketLengthEnable = CFG_BLE_DATA_LENGTH_EXTENSION,
-            .PrWriteListSize = CFG_BLE_PREPARE_WRITE_LIST_SIZE,
-            .MblockCount = CFG_BLE_MBLOCK_COUNT,
-            .AttMtu = CFG_BLE_MAX_ATT_MTU,
-            .SlaveSca = CFG_BLE_SLAVE_SCA,
-            .MasterSca = CFG_BLE_MASTER_SCA,
-            .LsSource = CFG_BLE_LSE_SOURCE,
-            .MaxConnEventLength = CFG_BLE_MAX_CONN_EVENT_LENGTH,
-            .HsStartupTime = CFG_BLE_HSE_STARTUP_TIME,
-            .ViterbiEnable = CFG_BLE_VITERBI_MODE,
-            .Options = CFG_BLE_OPTIONS,
-            .HwVersion = 0,
-            .max_coc_initiator_nbr = 32,
-            .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);
-    }
-    return status == SHCI_Success;
-}
-
-void ble_app_get_key_storage_buff(uint8_t** addr, uint16_t* size) {
-    *addr = (uint8_t*)ble_app_nvm;
-    *size = sizeof(ble_app_nvm);
-}
-
-void ble_app_thread_stop() {
-    if(ble_app) {
-        osEventFlagsSet(ble_app->event_flags, BLE_APP_FLAG_KILL_THREAD);
-        furi_thread_join(ble_app->thread);
-        furi_thread_free(ble_app->thread);
-        // Wait to make sure that EventFlags delivers pending events before memory free
-        osDelay(50);
-        // Free resources
-        osMutexDelete(ble_app->hci_mtx);
-        osSemaphoreDelete(ble_app->hci_sem);
-        osEventFlagsDelete(ble_app->event_flags);
-        free(ble_app);
-        ble_app = NULL;
-        memset(&ble_app_cmd_buffer, 0, sizeof(ble_app_cmd_buffer));
-    }
-}
-
-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);
-        if(flags & BLE_APP_FLAG_KILL_THREAD) {
-            break;
-        }
-        if(flags & BLE_APP_FLAG_HCI_EVENT) {
-            hci_user_evt_proc();
-        }
-    }
-
-    return 0;
-}
-
-// Called by WPAN lib
-void hci_notify_asynch_evt(void* pdata) {
-    if(ble_app) {
-        osEventFlagsSet(ble_app->event_flags, BLE_APP_FLAG_HCI_EVENT);
-    }
-}
-
-void hci_cmd_resp_release(uint32_t flag) {
-    if(ble_app) {
-        osSemaphoreRelease(ble_app->hci_sem);
-    }
-}
-
-void hci_cmd_resp_wait(uint32_t timeout) {
-    if(ble_app) {
-        osSemaphoreAcquire(ble_app->hci_sem, osWaitForever);
-    }
-}
-
-static void ble_app_hci_event_handler(void* pPayload) {
-    SVCCTL_UserEvtFlowStatus_t svctl_return_status;
-    tHCI_UserEvtRxParam* pParam = (tHCI_UserEvtRxParam*)pPayload;
-
-    if(ble_app) {
-        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;
-        }
-    }
-}
-
-static void ble_app_hci_status_not_handler(HCI_TL_CmdStatus_t status) {
-    if(status == HCI_TL_CmdBusy) {
-        osMutexAcquire(ble_app->hci_mtx, osWaitForever);
-    } else if(status == HCI_TL_CmdAvailable) {
-        osMutexRelease(ble_app->hci_mtx);
-    }
-}
-
-void SVCCTL_ResumeUserEventFlow(void) {
-    hci_resume_flow();
-}

+ 0 - 16
firmware/targets/f6/ble_glue/ble_app.h

@@ -1,16 +0,0 @@
-#pragma once
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdbool.h>
-#include <stdint.h>
-
-bool ble_app_init();
-void ble_app_get_key_storage_buff(uint8_t** addr, uint16_t* size);
-void ble_app_thread_stop();
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 69
firmware/targets/f6/ble_glue/ble_conf.h

@@ -1,69 +0,0 @@
-/**
- ******************************************************************************
-  * File Name          : App/ble_conf.h
-  * Description        : 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_CONF_H
-#define BLE_CONF_H
-
-#include "app_conf.h"
-
-/******************************************************************************
- *
- * BLE SERVICES CONFIGURATION
- * blesvc
- *
- ******************************************************************************/
-
-/**
- * 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
-
-/**
- * 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
-
-/**
- * There is one handler per service enabled
- * Note: There is no handler for the Device Information Service
- *
- * 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_CLT_MAX_NBR_CB 0
-
-/******************************************************************************
- * GAP Service - Apprearance
- ******************************************************************************/
-
-#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 */
-
-#endif /*BLE_CONF_H */
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 199
firmware/targets/f6/ble_glue/ble_dbg_conf.h

@@ -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****/

+ 0 - 312
firmware/targets/f6/ble_glue/ble_glue.c

@@ -1,312 +0,0 @@
-#include "ble_glue.h"
-#include "app_common.h"
-#include "main.h"
-#include "ble_app.h"
-#include "ble.h"
-#include "tl.h"
-#include "shci.h"
-#include "shci_tl.h"
-#include "app_debug.h"
-#include <furi_hal.h>
-
-#define TAG "Core2"
-
-#define BLE_GLUE_FLAG_SHCI_EVENT (1UL << 0)
-#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))
-
-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];
-
-typedef enum {
-    // Stage 1: core2 startup and FUS
-    BleGlueStatusStartup,
-    BleGlueStatusBroken,
-    BleGlueStatusFusStarted,
-    // Stage 2: radio stack
-    BleGlueStatusRadioStackStarted,
-    BleGlueStatusRadioStackMissing
-} BleGlueStatus;
-
-typedef struct {
-    osMutexId_t shci_mtx;
-    osSemaphoreId_t shci_sem;
-    osEventFlagsId_t event_flags;
-    FuriThread* thread;
-    BleGlueStatus status;
-    BleGlueKeyStorageChangedCallback callback;
-    void* context;
-} BleGlue;
-
-static BleGlue* ble_glue = NULL;
-
-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) {
-    furi_assert(ble_glue);
-    furi_assert(callback);
-    ble_glue->callback = callback;
-    ble_glue->context = context;
-}
-
-void ble_glue_init() {
-    ble_glue = malloc(sizeof(BleGlue));
-    ble_glue->status = BleGlueStatusStartup;
-
-    // Configure the system Power Mode
-    // Select HSI as system clock source after Wake Up from Stop mode
-    LL_RCC_SetClkAfterWakeFromStop(LL_RCC_STOP_WAKEUPCLOCK_HSI);
-    /* Initialize the CPU2 reset value before starting CPU2 with C2BOOT */
-    LL_C2_PWR_SetPowerMode(LL_PWR_MODE_SHUTDOWN);
-    furi_hal_power_insomnia_enter();
-
-    // APPD_Init();
-
-    // Initialize all transport layers
-    TL_MM_Config_t tl_mm_config;
-    SHCI_TL_HciInitConf_t SHci_Tl_Init_Conf;
-    // Reference table initialization
-    TL_Init();
-
-    ble_glue->shci_mtx = osMutexNew(NULL);
-    ble_glue->shci_sem = osSemaphoreNew(1, 0, NULL);
-    ble_glue->event_flags = osEventFlagsNew(NULL);
-
-    // FreeRTOS system task creation
-    ble_glue->thread = furi_thread_alloc();
-    furi_thread_set_name(ble_glue->thread, "BleShciDriver");
-    furi_thread_set_stack_size(ble_glue->thread, 1024);
-    furi_thread_set_context(ble_glue->thread, ble_glue);
-    furi_thread_set_callback(ble_glue->thread, ble_glue_shci_thread);
-    furi_thread_start(ble_glue->thread);
-
-    // 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);
-
-    /**< 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_Enable();
-
-    /*
-     * From now, the application is waiting for the ready event ( VS_HCI_C2_Ready )
-     * received on the system channel before starting the Stack
-     * This system event is received with ble_glue_sys_user_event_callback()
-     */
-}
-
-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) {
-            ret = true;
-            break;
-        }
-        countdown--;
-        osDelay(1);
-    }
-
-    if(ble_glue->status == BleGlueStatusFusStarted) {
-        SHCI_GetWirelessFwInfo(info);
-    } else {
-        FURI_LOG_E(TAG, "Failed to start FUS");
-        ble_glue->status = BleGlueStatusBroken;
-    }
-
-    return ret;
-}
-
-bool ble_glue_start() {
-    furi_assert(ble_glue);
-
-    if(ble_glue->status != BleGlueStatusFusStarted) {
-        return false;
-    }
-
-    bool ret = false;
-    furi_hal_power_insomnia_enter();
-    if(ble_app_init()) {
-        FURI_LOG_I(TAG, "Radio stack started");
-        ble_glue->status = BleGlueStatusRadioStackStarted;
-        ret = true;
-        if(SHCI_C2_SetFlashActivityControl(FLASH_ACTIVITY_CONTROL_SEM7) == SHCI_Success) {
-            FURI_LOG_I(TAG, "Flash activity control switched to SEM7");
-        } else {
-            FURI_LOG_E(TAG, "Failed to switch flash activity control to SEM7");
-        }
-    } else {
-        FURI_LOG_E(TAG, "Radio stack startup failed");
-        ble_glue->status = BleGlueStatusRadioStackMissing;
-        ble_app_thread_stop();
-    }
-    furi_hal_power_insomnia_exit();
-
-    return ret;
-}
-
-bool ble_glue_is_alive() {
-    if(!ble_glue) {
-        return false;
-    }
-
-    return ble_glue->status >= BleGlueStatusFusStarted;
-}
-
-bool ble_glue_is_radio_stack_ready() {
-    if(!ble_glue) {
-        return false;
-    }
-
-    return ble_glue->status == BleGlueStatusRadioStackStarted;
-}
-
-bool ble_glue_radio_stack_fw_launch_started() {
-    bool ret = false;
-    // Get FUS status
-    SHCI_FUS_GetState_ErrorCode_t err_code = 0;
-    uint8_t state = SHCI_C2_FUS_GetState(&err_code);
-    if(state == FUS_STATE_VALUE_IDLE) {
-        // When FUS is running we can't read radio stack version correctly
-        // Trying to start radio stack fw, which leads to reset
-        FURI_LOG_W(TAG, "FUS is running. Restart to launch Radio Stack");
-        SHCI_CmdStatus_t status = SHCI_C2_FUS_StartWs();
-        if(status) {
-            FURI_LOG_E(TAG, "Failed to start Radio Stack with status: %02X", status);
-        } else {
-            ret = true;
-        }
-    }
-    return ret;
-}
-
-static void ble_glue_sys_status_not_callback(SHCI_TL_CmdStatus_t status) {
-    switch(status) {
-    case SHCI_TL_CmdBusy:
-        osMutexAcquire(ble_glue->shci_mtx, osWaitForever);
-        break;
-    case SHCI_TL_CmdAvailable:
-        osMutexRelease(ble_glue->shci_mtx);
-        break;
-    default:
-        break;
-    }
-}
-
-/*
- * The type of the payload for a system user event is tSHCI_UserEvtRxParam
- * When the system event is both :
- *    - a ready event (subevtcode = SHCI_SUB_EVT_CODE_READY)
- *    - reported by the FUS (sysevt_ready_rsp == FUS_FW_RUNNING)
- * The buffer shall not be released
- * ( 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) {
-    UNUSED(pPayload);
-    /* Traces channel initialization */
-    // APPD_EnableCPU2( );
-
-    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;
-        furi_hal_power_insomnia_exit();
-    } else if(p_sys_event->subevtcode == SHCI_SUB_EVT_ERROR_NOTIF) {
-        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;
-        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);
-        }
-    }
-}
-
-static void ble_glue_clear_shared_memory() {
-    memset(ble_glue_event_pool, 0, sizeof(ble_glue_event_pool));
-    memset(&ble_glue_system_cmd_buff, 0, sizeof(ble_glue_system_cmd_buff));
-    memset(ble_glue_system_spare_event_buff, 0, sizeof(ble_glue_system_spare_event_buff));
-    memset(ble_glue_ble_spare_event_buff, 0, sizeof(ble_glue_ble_spare_event_buff));
-}
-
-void ble_glue_thread_stop() {
-    if(ble_glue) {
-        osEventFlagsSet(ble_glue->event_flags, BLE_GLUE_FLAG_KILL_THREAD);
-        furi_thread_join(ble_glue->thread);
-        furi_thread_free(ble_glue->thread);
-        // Wait to make sure that EventFlags delivers pending events before memory free
-        osDelay(50);
-        // Free resources
-        osMutexDelete(ble_glue->shci_mtx);
-        osSemaphoreDelete(ble_glue->shci_sem);
-        osEventFlagsDelete(ble_glue->event_flags);
-        ble_glue_clear_shared_memory();
-        free(ble_glue);
-        ble_glue = NULL;
-    }
-}
-
-// Wrap functions
-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);
-        if(flags & BLE_GLUE_FLAG_SHCI_EVENT) {
-            shci_user_evt_proc();
-        }
-        if(flags & BLE_GLUE_FLAG_KILL_THREAD) {
-            break;
-        }
-    }
-
-    return 0;
-}
-
-void shci_notify_asynch_evt(void* pdata) {
-    UNUSED(pdata);
-    if(ble_glue) {
-        osEventFlagsSet(ble_glue->event_flags, BLE_GLUE_FLAG_SHCI_EVENT);
-    }
-}
-
-void shci_cmd_resp_release(uint32_t flag) {
-    UNUSED(flag);
-    if(ble_glue) {
-        osSemaphoreRelease(ble_glue->shci_sem);
-    }
-}
-
-void shci_cmd_resp_wait(uint32_t timeout) {
-    UNUSED(timeout);
-    if(ble_glue) {
-        osSemaphoreAcquire(ble_glue->shci_sem, osWaitForever);
-    }
-}

+ 0 - 57
firmware/targets/f6/ble_glue/ble_glue.h

@@ -1,57 +0,0 @@
-#pragma once
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <shci/shci.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef void (
-    *BleGlueKeyStorageChangedCallback)(uint8_t* change_addr_start, uint16_t size, void* context);
-
-/** Initialize start core2 and initialize transport */
-void ble_glue_init();
-
-/** Start Core2 Radio stack
- *
- * @return     true on success
- */
-bool ble_glue_start();
-
-/** Is core2 alive and at least FUS is running
- * 
- * @return     true if core2 is alive
- */
-bool ble_glue_is_alive();
-
-bool ble_glue_wait_for_fus_start(WirelessFwInfo_t* info);
-
-/** Is core2 radio stack present and ready
- *
- * @return     true if present and ready
- */
-bool ble_glue_is_radio_stack_ready();
-
-/** Set callback for NVM in RAM changes
- *
- * @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);
-
-/** Stop SHCI thread */
-void ble_glue_thread_stop();
-
-/** Restart MCU to launch radio stack firmware if necessary
- *
- * @return      true on radio stack start command
- */
-bool ble_glue_radio_stack_fw_launch_started();
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 213
firmware/targets/f6/ble_glue/dev_info_service.c

@@ -1,213 +0,0 @@
-#include "dev_info_service.h"
-#include "app_common.h"
-#include "ble.h"
-
-#include <furi.h>
-#include <m-string.h>
-#include <protobuf_version.h>
-
-#define TAG "BtDevInfoSvc"
-
-#define DEV_INFO_RPC_VERSION_CHAR_MAX_SIZE (10)
-
-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;
-    uint16_t rpc_version_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;
-
-static const uint8_t dev_info_rpc_version_uuid[] =
-    {0x33, 0xa9, 0xb5, 0x3e, 0x87, 0x5d, 0x1a, 0x8e, 0xc8, 0x47, 0x5e, 0xae, 0x6d, 0x66, 0xf6, 0x03};
-
-void dev_info_svc_start() {
-    dev_info_svc = malloc(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, 11, &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);
-    }
-    status = aci_gatt_add_char(
-        dev_info_svc->service_handle,
-        UUID_TYPE_128,
-        (const Char_UUID_t*)dev_info_rpc_version_uuid,
-        DEV_INFO_RPC_VERSION_CHAR_MAX_SIZE,
-        CHAR_PROP_READ,
-        ATTR_PERMISSION_AUTHEN_READ,
-        GATT_DONT_NOTIFY_EVENTS,
-        10,
-        CHAR_VALUE_LEN_CONSTANT,
-        &dev_info_svc->rpc_version_char_handle);
-    if(status) {
-        FURI_LOG_E(TAG, "Failed to add rpc version characteristic: %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);
-    }
-    string_t rpc_version;
-    string_init_printf(rpc_version, "%d.%d", PROTOBUF_MAJOR_VERSION, PROTOBUF_MINOR_VERSION);
-    status = aci_gatt_update_char_value(
-        dev_info_svc->service_handle,
-        dev_info_svc->rpc_version_char_handle,
-        0,
-        strlen(string_get_cstr(rpc_version)),
-        (uint8_t*)string_get_cstr(rpc_version));
-    if(status) {
-        FURI_LOG_E(TAG, "Failed to update rpc version char: %d", status);
-    }
-    string_clear(rpc_version);
-}
-
-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);
-        }
-        status =
-            aci_gatt_del_char(dev_info_svc->service_handle, dev_info_svc->rpc_version_char_handle);
-        if(status) {
-            FURI_LOG_E(TAG, "Failed to delete rpc version 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;
-}

+ 0 - 24
firmware/targets/f6/ble_glue/dev_info_service.h

@@ -1,24 +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

+ 0 - 581
firmware/targets/f6/ble_glue/gap.c

@@ -1,581 +0,0 @@
-#include "gap.h"
-
-#include "ble.h"
-
-#include <furi_hal.h>
-#include <furi.h>
-
-#define TAG "BtGap"
-
-#define FAST_ADV_TIMEOUT 30000
-#define INITIAL_ADV_TIMEOUT 60000
-
-typedef struct {
-    uint16_t gap_svc_handle;
-    uint16_t dev_name_char_handle;
-    uint16_t appearance_char_handle;
-    uint16_t connection_handle;
-    uint8_t adv_svc_uuid_len;
-    uint8_t adv_svc_uuid[20];
-    char* adv_name;
-} GapSvc;
-
-typedef struct {
-    GapSvc service;
-    GapConfig* config;
-    GapState state;
-    osMutexId_t state_mutex;
-    GapEventCallback on_event_cb;
-    void* context;
-    osTimerId_t advertise_timer;
-    FuriThread* thread;
-    osMessageQueueId_t command_queue;
-    bool enable_adv;
-} Gap;
-
-typedef enum {
-    GapCommandAdvFast,
-    GapCommandAdvLowPower,
-    GapCommandAdvStop,
-    GapCommandKillThread,
-} GapCommand;
-
-typedef struct {
-    GapScanCallback callback;
-    void* context;
-} 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};
-// 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 Gap* gap = NULL;
-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) {
-    hci_event_pckt* event_pckt;
-    evt_le_meta_event* meta_evt;
-    evt_blue_aci* blue_evt;
-    hci_le_phy_update_complete_event_rp0* evt_le_phy_update_complete;
-    uint8_t tx_phy;
-    uint8_t rx_phy;
-    tBleStatus ret = BLE_STATUS_INVALID_PARAMS;
-
-    event_pckt = (hci_event_pckt*)((hci_uart_pckt*)pckt)->data;
-
-    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);
-        }
-        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: {
-            hci_le_connection_update_complete_event_rp0* event =
-                (hci_le_connection_update_complete_event_rp0*)meta_evt->data;
-            FURI_LOG_I(
-                TAG,
-                "Connection interval: %d, latency: %d, supervision timeout: %d",
-                event->Conn_Interval,
-                event->Conn_Latency,
-                event->Supervision_Timeout);
-            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;
-            GapConnectionParams* params = &gap->config->conn_param;
-            if(aci_l2cap_connection_parameter_update_req(
-                   gap->service.connection_handle,
-                   params->conn_int_min,
-                   params->conn_int_max,
-                   params->slave_latency,
-                   params->supervisor_timeout)) {
-                FURI_LOG_W(TAG, "Failed to request connection parameters update");
-            }
-
-            // 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;
-
-    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);
-            if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagLock)) {
-                FURI_LOG_I(TAG, "Pass key request event. Pin: ******");
-            } else {
-                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_D(TAG, "Authorization request event");
-            break;
-
-        case EVT_BLUE_GAP_SLAVE_SECURITY_INITIATED:
-            FURI_LOG_D(TAG, "Slave security initiated");
-            break;
-
-        case EVT_BLUE_GAP_BOND_LOST:
-            FURI_LOG_D(TAG, "Bond lost event. Start rebonding");
-            aci_gap_allow_rebond(gap->service.connection_handle);
-            break;
-
-        case EVT_BLUE_GAP_DEVICE_FOUND:
-            FURI_LOG_D(TAG, "Device found event");
-            break;
-
-        case EVT_BLUE_GAP_ADDR_NOT_RESOLVED:
-            FURI_LOG_D(TAG, "Address not resolved event");
-            break;
-
-        case EVT_BLUE_GAP_KEYPRESS_NOTIFICATION:
-            FURI_LOG_D(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);
-            }
-            break;
-
-        case EVT_BLUE_GAP_PROCEDURE_COMPLETE:
-            FURI_LOG_D(TAG, "Procedure complete event");
-            break;
-
-        case EVT_BLUE_L2CAP_CONNECTION_UPDATE_RESP: {
-            uint16_t result =
-                ((aci_l2cap_connection_update_resp_event_rp0*)(blue_evt->data))->Result;
-            if(result == 0) {
-                FURI_LOG_D(TAG, "Connection parameters accepted");
-            } else if(result == 1) {
-                FURI_LOG_D(TAG, "Connection parameters denied");
-            }
-            break;
-        }
-        }
-    default:
-        break;
-    }
-    if(gap) {
-        osMutexRelease(gap->state_mutex);
-    }
-    return SVCCTL_UserEvtFlowEnable;
-}
-
-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) {
-        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;
-    }
-    memcpy(&gap->service.adv_svc_uuid[gap->service.adv_svc_uuid_len], uid, uid_len);
-    gap->service.adv_svc_uuid_len += uid_len;
-}
-
-static void gap_init_svc(Gap* gap) {
-    tBleStatus status;
-    uint32_t srd_bd_addr[2];
-
-    // 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);
-
-    /* Static random Address
-     * The two upper bits shall be set to 1
-     * The lowest 32bits is read from the UDN to differentiate between devices
-     * The RNG may be used to provide a random number on each power on
-     */
-    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);
-    // 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);
-    // 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);
-    // 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);
-
-    // 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) {
-        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);
-    if(status) {
-        FURI_LOG_E(TAG, "Failed updating appearence characteristic: %d", status);
-    }
-    // Set default PHY
-    hci_le_set_default_phy(ALL_PHYS_PREFERENCE, TX_2M_PREFERRED, RX_2M_PREFERRED);
-    // Set I/O capability
-    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) {
-        aci_gap_set_io_capability(IO_CAP_DISPLAY_YES_NO);
-        keypress_supported = true;
-    }
-    // Setup  authentication
-    aci_gap_set_authentication_requirement(
-        gap->config->bonding_mode,
-        CFG_MITM_PROTECTION,
-        CFG_SC_SUPPORT,
-        keypress_supported,
-        CFG_ENCRYPTION_KEY_SIZE_MIN,
-        CFG_ENCRYPTION_KEY_SIZE_MAX,
-        CFG_USED_FIXED_PIN,
-        0,
-        PUBLIC_ADDR);
-    // Configure whitelist
-    aci_gap_configure_whitelist();
-}
-
-static void gap_advertise_start(GapState new_state) {
-    tBleStatus status;
-    uint16_t min_interval;
-    uint16_t max_interval;
-
-    if(new_state == GapStateAdvFast) {
-        min_interval = 0x80; // 80 ms
-        max_interval = 0xa0; // 100 ms
-    } else {
-        min_interval = 0x0640; // 1 s
-        max_interval = 0x0fa0; // 2.5 s
-    }
-    // Stop advertising timer
-    osTimerStop(gap->advertise_timer);
-
-    if((new_state == GapStateAdvLowPower) &&
-       ((gap->state == GapStateAdvFast) || (gap->state == GapStateAdvLowPower))) {
-        // Stop advertising
-        status = aci_gap_set_non_discoverable();
-        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);
-    if(status) {
-        FURI_LOG_E(TAG, "Set discoverable err: %d", status);
-    }
-    gap->state = new_state;
-    GapEvent event = {.type = GapEventTypeStartAdvertising};
-    gap->on_event_cb(event, gap->context);
-    osTimerStart(gap->advertise_timer, INITIAL_ADV_TIMEOUT);
-}
-
-static void gap_advertise_stop() {
-    if(gap->state > GapStateIdle) {
-        if(gap->state == GapStateConnected) {
-            // Terminate connection
-            aci_gap_terminate(gap->service.connection_handle, 0x13);
-        }
-        // Stop advertising
-        osTimerStop(gap->advertise_timer);
-        aci_gap_set_non_discoverable();
-        gap->state = GapStateIdle;
-    }
-    GapEvent event = {.type = GapEventTypeStopAdvertising};
-    gap->on_event_cb(event, gap->context);
-}
-
-void gap_start_advertising() {
-    osMutexAcquire(gap->state_mutex, osWaitForever);
-    if(gap->state == GapStateIdle) {
-        gap->state = GapStateStartingAdv;
-        FURI_LOG_I(TAG, "Start advertising");
-        gap->enable_adv = true;
-        GapCommand command = GapCommandAdvFast;
-        furi_check(osMessageQueuePut(gap->command_queue, &command, 0, 0) == osOK);
-    }
-    osMutexRelease(gap->state_mutex);
-}
-
-void gap_stop_advertising() {
-    osMutexAcquire(gap->state_mutex, osWaitForever);
-    if(gap->state > GapStateIdle) {
-        FURI_LOG_I(TAG, "Stop advertising");
-        gap->enable_adv = false;
-        GapCommand command = GapCommandAdvStop;
-        furi_check(osMessageQueuePut(gap->command_queue, &command, 0, 0) == osOK);
-    }
-    osMutexRelease(gap->state_mutex);
-}
-
-static void gap_advetise_timer_callback(void* context) {
-    GapCommand command = GapCommandAdvLowPower;
-    furi_check(osMessageQueuePut(gap->command_queue, &command, 0, 0) == osOK);
-}
-
-bool gap_init(GapConfig* config, GapEventCallback on_event_cb, void* context) {
-    if(!ble_glue_is_radio_stack_ready()) {
-        return false;
-    }
-
-    gap = malloc(sizeof(Gap));
-    gap->config = config;
-    srand(DWT->CYCCNT);
-    // Create advertising timer
-    gap->advertise_timer = osTimerNew(gap_advetise_timer_callback, osTimerOnce, NULL, NULL);
-    // Initialization of GATT & GAP layer
-    gap->service.adv_name = config->adv_name;
-    gap_init_svc(gap);
-    // Initialization of the BLE Services
-    SVCCTL_Init();
-    // Initialization of the GAP state
-    gap->state_mutex = osMutexNew(NULL);
-    gap->state = GapStateIdle;
-    gap->service.connection_handle = 0xFFFF;
-    gap->enable_adv = true;
-
-    // Thread configuration
-    gap->thread = furi_thread_alloc();
-    furi_thread_set_name(gap->thread, "BleGapDriver");
-    furi_thread_set_stack_size(gap->thread, 1024);
-    furi_thread_set_context(gap->thread, gap);
-    furi_thread_set_callback(gap->thread, gap_app);
-    furi_thread_start(gap->thread);
-
-    // Command queue allocation
-    gap->command_queue = osMessageQueueNew(8, sizeof(GapCommand), NULL);
-
-    uint8_t adv_service_uid[2];
-    gap->service.adv_svc_uuid_len = 1;
-    adv_service_uid[0] = gap->config->adv_service_uuid & 0xff;
-    adv_service_uid[1] = gap->config->adv_service_uuid >> 8;
-    set_advertisment_service_uid(adv_service_uid, sizeof(adv_service_uid));
-
-    // Set callback
-    gap->on_event_cb = on_event_cb;
-    gap->context = context;
-    return true;
-}
-
-GapState gap_get_state() {
-    GapState state;
-    if(gap) {
-        osMutexAcquire(gap->state_mutex, osWaitForever);
-        state = gap->state;
-        osMutexRelease(gap->state_mutex);
-    } else {
-        state = GapStateUninitialized;
-    }
-    return state;
-}
-
-void gap_start_scan(GapScanCallback callback, void* context) {
-    furi_assert(callback);
-    gap_scan = malloc(sizeof(GapScan));
-    gap_scan->callback = callback;
-    gap_scan->context = context;
-    // Scan interval 250 ms
-    hci_le_set_scan_parameters(1, 4000, 200, 0, 0);
-    hci_le_set_scan_enable(1, 1);
-}
-
-void gap_stop_scan() {
-    furi_assert(gap_scan);
-    hci_le_set_scan_enable(0, 1);
-    free(gap_scan);
-    gap_scan = NULL;
-}
-
-void gap_thread_stop() {
-    if(gap) {
-        osMutexAcquire(gap->state_mutex, osWaitForever);
-        gap->enable_adv = false;
-        GapCommand command = GapCommandKillThread;
-        osMessageQueuePut(gap->command_queue, &command, 0, osWaitForever);
-        osMutexRelease(gap->state_mutex);
-        furi_thread_join(gap->thread);
-        furi_thread_free(gap->thread);
-        // Free resources
-        osMutexDelete(gap->state_mutex);
-        osMessageQueueDelete(gap->command_queue);
-        osTimerStop(gap->advertise_timer);
-        while(xTimerIsTimerActive(gap->advertise_timer) == pdTRUE) osDelay(1);
-        furi_check(osTimerDelete(gap->advertise_timer) == osOK);
-        free(gap);
-        gap = NULL;
-    }
-}
-
-static int32_t gap_app(void* context) {
-    GapCommand command;
-    while(1) {
-        osStatus_t status = osMessageQueueGet(gap->command_queue, &command, NULL, osWaitForever);
-        if(status != osOK) {
-            FURI_LOG_E(TAG, "Message queue get error: %d", status);
-            continue;
-        }
-        osMutexAcquire(gap->state_mutex, osWaitForever);
-        if(command == GapCommandKillThread) {
-            break;
-        }
-        if(command == GapCommandAdvFast) {
-            gap_advertise_start(GapStateAdvFast);
-        } else if(command == GapCommandAdvLowPower) {
-            gap_advertise_start(GapStateAdvLowPower);
-        } else if(command == GapCommandAdvStop) {
-            gap_advertise_stop();
-        }
-        osMutexRelease(gap->state_mutex);
-    }
-
-    return 0;
-}

+ 0 - 91
firmware/targets/f6/ble_glue/gap.h

@@ -1,91 +0,0 @@
-#pragma once
-
-#include <stdint.h>
-#include <stdbool.h>
-
-#include <furi_hal_version.h>
-
-#define GAP_MAC_ADDR_SIZE (6)
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef enum {
-    GapEventTypeConnected,
-    GapEventTypeDisconnected,
-    GapEventTypeStartAdvertising,
-    GapEventTypeStopAdvertising,
-    GapEventTypePinCodeShow,
-    GapEventTypePinCodeVerify,
-    GapEventTypeUpdateMTU,
-} GapEventType;
-
-typedef union {
-    uint32_t pin_code;
-    uint16_t max_packet_size;
-} GapEventData;
-
-typedef struct {
-    GapEventType type;
-    GapEventData data;
-} GapEvent;
-
-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 enum {
-    GapStateUninitialized,
-    GapStateIdle,
-    GapStateStartingAdv,
-    GapStateAdvFast,
-    GapStateAdvLowPower,
-    GapStateConnected,
-} GapState;
-
-typedef enum {
-    GapPairingNone,
-    GapPairingPinCodeShow,
-    GapPairingPinCodeVerifyYesNo,
-} GapPairing;
-
-typedef struct {
-    uint16_t conn_int_min;
-    uint16_t conn_int_max;
-    uint16_t slave_latency;
-    uint16_t supervisor_timeout;
-} GapConnectionParams;
-
-typedef struct {
-    uint16_t adv_service_uuid;
-    uint16_t appearance_char;
-    bool bonding_mode;
-    GapPairing pairing_method;
-    uint8_t mac_address[GAP_MAC_ADDR_SIZE];
-    char adv_name[FURI_HAL_VERSION_DEVICE_NAME_LENGTH];
-    GapConnectionParams conn_param;
-} GapConfig;
-
-bool gap_init(GapConfig* config, GapEventCallback on_event_cb, void* context);
-
-void gap_start_advertising();
-
-void gap_stop_advertising();
-
-GapState gap_get_state();
-
-void gap_thread_stop();
-
-void gap_start_scan(GapScanCallback callback, void* context);
-
-void gap_stop_scan();
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 260
firmware/targets/f6/ble_glue/hid_service.c

@@ -1,260 +0,0 @@
-#include "hid_service.h"
-#include "app_common.h"
-#include "ble.h"
-
-#include <furi.h>
-
-#define TAG "BtHid"
-
-typedef struct {
-    uint16_t svc_handle;
-    uint16_t protocol_mode_char_handle;
-    uint16_t report_char_handle;
-    uint16_t report_ref_desc_handle;
-    uint16_t report_map_char_handle;
-    uint16_t keyboard_boot_char_handle;
-    uint16_t info_char_handle;
-    uint16_t ctrl_point_char_handle;
-} HIDSvc;
-
-static HIDSvc* hid_svc = NULL;
-
-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);
-    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) {
-        if(blecore_evt->ecode == ACI_GATT_ATTRIBUTE_MODIFIED_VSEVT_CODE) {
-            // Process modification events
-            ret = SVCCTL_EvtAckFlowEnable;
-        } else if(blecore_evt->ecode == ACI_GATT_SERVER_CONFIRMATION_VSEVT_CODE) {
-            // Process notification confirmation
-            ret = SVCCTL_EvtAckFlowEnable;
-        }
-    }
-    return ret;
-}
-
-void hid_svc_start() {
-    tBleStatus status;
-    hid_svc = malloc(sizeof(HIDSvc));
-    Service_UUID_t svc_uuid = {};
-    Char_Desc_Uuid_t desc_uuid = {};
-    Char_UUID_t char_uuid = {};
-
-    // Register event handler
-    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);
-    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);
-    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);
-    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);
-    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);
-    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);
-    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);
-    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);
-    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);
-    if(status) {
-        FURI_LOG_E(TAG, "Failed to add control point characteristic: %d", status);
-    }
-}
-
-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);
-    if(status) {
-        FURI_LOG_E(TAG, "Failed updating report map characteristic");
-        return false;
-    }
-    return true;
-}
-
-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);
-    if(status) {
-        FURI_LOG_E(TAG, "Failed updating report characteristic");
-        return false;
-    }
-    return true;
-}
-
-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);
-    if(status) {
-        FURI_LOG_E(TAG, "Failed updating info characteristic");
-        return false;
-    }
-    return true;
-}
-
-bool hid_svc_is_started() {
-    return hid_svc != NULL;
-}
-
-void hid_svc_stop() {
-    tBleStatus status;
-    if(hid_svc) {
-        // Delete characteristics
-        status = aci_gatt_del_char(hid_svc->svc_handle, hid_svc->report_map_char_handle);
-        if(status) {
-            FURI_LOG_E(TAG, "Failed to delete Report Map characteristic: %d", status);
-        }
-        status = aci_gatt_del_char(hid_svc->svc_handle, hid_svc->report_char_handle);
-        if(status) {
-            FURI_LOG_E(TAG, "Failed to delete Report characteristic: %d", status);
-        }
-        status = aci_gatt_del_char(hid_svc->svc_handle, hid_svc->protocol_mode_char_handle);
-        if(status) {
-            FURI_LOG_E(TAG, "Failed to delete Protocol Mode characteristic: %d", status);
-        }
-        status = aci_gatt_del_char(hid_svc->svc_handle, hid_svc->keyboard_boot_char_handle);
-        if(status) {
-            FURI_LOG_E(TAG, "Failed to delete Keyboard Boot characteristic: %d", status);
-        }
-        status = aci_gatt_del_char(hid_svc->svc_handle, hid_svc->info_char_handle);
-        if(status) {
-            FURI_LOG_E(TAG, "Failed to delete Information characteristic: %d", status);
-        }
-        status = aci_gatt_del_char(hid_svc->svc_handle, hid_svc->ctrl_point_char_handle);
-        if(status) {
-            FURI_LOG_E(TAG, "Failed to delete Control Point characteristic: %d", status);
-        }
-        // Delete service
-        status = aci_gatt_del_service(hid_svc->svc_handle);
-        if(status) {
-            FURI_LOG_E(TAG, "Failed to delete HID service: %d", status);
-        }
-        // Delete buffer size mutex
-        free(hid_svc);
-        hid_svc = NULL;
-    }
-}

+ 0 - 23
firmware/targets/f6/ble_glue/hid_service.h

@@ -1,23 +0,0 @@
-#pragma once
-
-#include <stdint.h>
-#include <stdbool.h>
-
-#define HID_SVC_REPORT_MAP_MAX_LEN (120)
-#define HID_SVC_REPORT_MAX_LEN (9)
-#define HID_SVC_BOOT_KEYBOARD_INPUT_REPORT_MAX_LEN (8)
-#define HID_SVC_REPORT_REF_LEN (2)
-#define HID_SVC_INFO_LEN (4)
-#define HID_SVC_CONTROL_POINT_LEN (1)
-
-void hid_svc_start();
-
-void hid_svc_stop();
-
-bool hid_svc_is_started();
-
-bool hid_svc_update_report_map(uint8_t* data, uint16_t len);
-
-bool hid_svc_update_input_report(uint8_t* data, uint16_t len);
-
-bool hid_svc_update_info(uint8_t* data, uint16_t len);

+ 0 - 231
firmware/targets/f6/ble_glue/hw_conf.h

@@ -1,231 +0,0 @@
-/* USER CODE BEGIN Header */
-/**
- ******************************************************************************
- * @file    hw_conf.h
- * @author  MCD Application Team
- * @brief   Configuration of hardware interface
-  ******************************************************************************
-  * @attention
-  *
- * <h2><center>&copy; Copyright (c) 2019 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 */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef HW_CONF_H
-#define HW_CONF_H
-
-#include "FreeRTOSConfig.h"
-
-/******************************************************************************
- * Semaphores
- * THIS SHALL NO BE CHANGED AS THESE SEMAPHORES ARE USED AS WELL ON THE CM0+
- *****************************************************************************/
-/**
-* 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
-/**
-*  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()
-*  When the CPU2 is requested to store persistent data in SRAM2, it can write data in this buffer at any time when needed.
-*  In order to read consistent data with the CPU1 from the SRAM2 buffer, the flow should be:
-*  + CPU1 takes CFG_HW_THREAD_NVM_SRAM_SEMID semaphore
-*  + CPU1 reads all persistent data from SRAM2 (most of the time, the goal is to write these data into an NVM managed by CPU1)
-*  + CPU1 releases CFG_HW_THREAD_NVM_SRAM_SEMID semaphore
-*  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
-
-/**
-*  The CPU2 may be configured to store the BLE 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()
-*  When the CPU2 is requested to store persistent data in SRAM2, it can write data in this buffer at any time when needed.
-*  In order to read consistent data with the CPU1 from the SRAM2 buffer, the flow should be:
-*  + CPU1 takes CFG_HW_BLE_NVM_SRAM_SEMID semaphore
-*  + CPU1 reads all persistent data from SRAM2 (most of the time, the goal is to write these data into an NVM managed by CPU1)
-*  + CPU1 releases CFG_HW_BLE_NVM_SRAM_SEMID semaphore
-*  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
-
-/**
-*  Index of the semaphore used by CPU2 to prevent the CPU1 to either write or erase data in flash
-*  The CPU1 shall not either write or erase in flash when this semaphore is taken by the CPU2
-*  When the CPU1 needs to either write or erase in flash, it shall first get the semaphore and release it just
-*  after writing a raw (64bits data) or erasing one sector.
-*  Once the Semaphore has been released, there shall be at least 1us before it can be taken again. This is required
-*  to give the opportunity to CPU2 to take it.
-*  On v1.4.0 and older CPU2 wireless firmware, this semaphore is unused and CPU2 is using PES bit.
-*  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
-
-/**
-*  Index of the semaphore used by CPU1 to prevent the CPU2 to either write or erase data in flash
-*  In order to protect its timing, the CPU1 may get this semaphore to prevent the  CPU2 to either
-*  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
-
-/**
-*  Index of the semaphore used to manage the CLK48 clock configuration
-*  When the USB is required, this semaphore shall be taken before configuring te CLK48 for USB
-*  and should be released after the application switch OFF the clock when the USB is not used anymore
-*  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
-
-/* Index of the semaphore used to manage the entry Stop Mode procedure */
-#define CFG_HW_ENTRY_STOP_MODE_SEMID 4
-
-/* Index of the semaphore used to access the RCC */
-#define CFG_HW_RCC_SEMID 3
-
-/* Index of the semaphore used to access the FLASH */
-#define CFG_HW_FLASH_SEMID 2
-
-/* Index of the semaphore used to access the PKA */
-#define CFG_HW_PKA_SEMID 1
-
-/* Index of the semaphore used to access the RNG */
-#define CFG_HW_RNG_SEMID 0
-
-/******************************************************************************
- * HW TIMER SERVER
- *****************************************************************************/
-/**
- * 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
-
-/**
- * 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 */
-
-/**
- * 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 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 a critical section in the Timer server
- *  The Timer server does not support the API to be nested
- *  The  Application shall either:
- *    a) Ensure this will never happen
- *    b) Define the critical section
- *  The default implementations is masking all interrupts using the PRIMASK bit
- *  The TimerServer driver uses critical sections to avoid context corruption. This is achieved with the macro
- *  TIMER_ENTER_CRITICAL_SECTION and TIMER_EXIT_CRITICAL_SECTION. When CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION is set
- *  to 1, all STM32 interrupts are masked with the PRIMASK bit of the CortexM CPU. It is possible to use the BASEPRI
- *  register of the CortexM CPU to keep allowed some interrupts with high priority. In that case, the user shall
- *  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
-
-/**
-   * This value shall reflect the maximum delay there could be in the application between the time the RTC interrupt
-   * is generated by the Hardware and the time when the  RTC interrupt handler is called. This time is measured in
-   * number of RTCCLK ticks.
-   * A relaxed timing would be 10ms
-   * When the value is too short, the timerserver will not be able to count properly and all timeout may be random.
-   * When the value is too long, the device may wake up more often than the most optimal configuration. However, the
-   * impact on power consumption would be marginal (unless the value selected is extremely too long). It is strongly
-   * 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))
-
-/**
-   * 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
-
-/******************************************************************************
- * HW UART
- *****************************************************************************/
-#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
-
-/**
- * UART1
- */
-#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
-
-#endif /*HW_CONF_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 102
firmware/targets/f6/ble_glue/hw_if.h

@@ -1,102 +0,0 @@
-/* USER CODE BEGIN Header */
-/**
-  ******************************************************************************
-  * @file    hw_if.h
-  * @author  MCD Application Team
-  * @brief   Hardware Interface
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2019 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 */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef HW_IF_H
-#define HW_IF_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32wbxx.h"
-#include "stm32wbxx_ll_exti.h"
-#include "stm32wbxx_ll_system.h"
-#include "stm32wbxx_ll_rcc.h"
-#include "stm32wbxx_ll_ipcc.h"
-#include "stm32wbxx_ll_bus.h"
-#include "stm32wbxx_ll_pwr.h"
-#include "stm32wbxx_ll_cortex.h"
-#include "stm32wbxx_ll_utils.h"
-#include "stm32wbxx_ll_hsem.h"
-#include "stm32wbxx_ll_gpio.h"
-#include "stm32wbxx_ll_rtc.h"
-
-#ifdef USE_STM32WBXX_USB_DONGLE
-#include "stm32wbxx_usb_dongle.h"
-#endif
-#ifdef USE_STM32WBXX_NUCLEO
-#include "stm32wbxx_nucleo.h"
-#endif
-#ifdef USE_X_NUCLEO_EPD
-#include "x_nucleo_epd.h"
-#endif
-
-/* Private includes ----------------------------------------------------------*/
-/* USER CODE BEGIN Includes */
-
-/* USER CODE END Includes */
-
-/******************************************************************************
-   * HW UART
-   ******************************************************************************/
-typedef enum {
-    hw_uart1,
-    hw_uart2,
-    hw_lpuart1,
-} hw_uart_id_t;
-
-typedef enum {
-    hw_uart_ok,
-    hw_uart_error,
-    hw_uart_busy,
-    hw_uart_to,
-} 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);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /*HW_IF_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 597
firmware/targets/f6/ble_glue/hw_ipcc.c

@@ -1,597 +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****/

+ 0 - 242
firmware/targets/f6/ble_glue/serial_service.c

@@ -1,242 +0,0 @@
-#include "serial_service.h"
-#include "app_common.h"
-#include "ble.h"
-
-#include <furi.h>
-
-#define TAG "BtSerialSvc"
-
-typedef struct {
-    uint16_t svc_handle;
-    uint16_t rx_char_handle;
-    uint16_t tx_char_handle;
-    uint16_t flow_ctrl_char_handle;
-    osMutexId_t buff_size_mtx;
-    uint32_t buff_size;
-    uint16_t bytes_ready_to_receive;
-    SerialServiceEventCallback callback;
-    void* context;
-} SerialSvc;
-
-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) {
-    SVCCTL_EvtAckStatus_t ret = SVCCTL_EvtNotAck;
-    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) {
-        if(blecore_evt->ecode == ACI_GATT_ATTRIBUTE_MODIFIED_VSEVT_CODE) {
-            attribute_modified = (aci_gatt_attribute_modified_event_rp0*)blecore_evt->data;
-            if(attribute_modified->Attr_Handle == serial_svc->rx_char_handle + 2) {
-                // Descriptor handle
-                ret = SVCCTL_EvtAckFlowEnable;
-                FURI_LOG_D(TAG, "RX descriptor event");
-            } else if(attribute_modified->Attr_Handle == serial_svc->rx_char_handle + 1) {
-                FURI_LOG_D(TAG, "Received %d bytes", attribute_modified->Attr_Data_Length);
-                if(serial_svc->callback) {
-                    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);
-                    }
-                    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);
-                    FURI_LOG_D(TAG, "Available buff size: %d", buff_free_size);
-                    furi_check(osMutexRelease(serial_svc->buff_size_mtx) == osOK);
-                }
-                ret = SVCCTL_EvtAckFlowEnable;
-            }
-        } else if(blecore_evt->ecode == ACI_GATT_SERVER_CONFIRMATION_VSEVT_CODE) {
-            FURI_LOG_T(TAG, "Ack received", blecore_evt->ecode);
-            if(serial_svc->callback) {
-                SerialServiceEvent event = {
-                    .event = SerialServiceEventTypeDataSent,
-                };
-                serial_svc->callback(event, serial_svc->context);
-            }
-            ret = SVCCTL_EvtAckFlowEnable;
-        }
-    }
-    return ret;
-}
-
-void serial_svc_start() {
-    tBleStatus status;
-    serial_svc = malloc(sizeof(SerialSvc));
-    // Register event handler
-    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);
-    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);
-    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);
-    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);
-    if(status) {
-        FURI_LOG_E(TAG, "Failed to add Flow Control characteristic: %d", status);
-    }
-    // Allocate buffer size mutex
-    serial_svc->buff_size_mtx = osMutexNew(NULL);
-}
-
-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);
-}
-
-void serial_svc_notify_buffer_is_empty() {
-    furi_assert(serial_svc);
-    furi_assert(serial_svc->buff_size_mtx);
-
-    furi_check(osMutexAcquire(serial_svc->buff_size_mtx, osWaitForever) == osOK);
-    if(serial_svc->bytes_ready_to_receive == 0) {
-        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);
-    }
-    furi_check(osMutexRelease(serial_svc->buff_size_mtx) == osOK);
-}
-
-void serial_svc_stop() {
-    tBleStatus status;
-    if(serial_svc) {
-        // Delete characteristics
-        status = aci_gatt_del_char(serial_svc->svc_handle, serial_svc->tx_char_handle);
-        if(status) {
-            FURI_LOG_E(TAG, "Failed to delete TX characteristic: %d", status);
-        }
-        status = aci_gatt_del_char(serial_svc->svc_handle, serial_svc->rx_char_handle);
-        if(status) {
-            FURI_LOG_E(TAG, "Failed to delete RX characteristic: %d", status);
-        }
-        status = aci_gatt_del_char(serial_svc->svc_handle, serial_svc->flow_ctrl_char_handle);
-        if(status) {
-            FURI_LOG_E(TAG, "Failed to delete Flow Control characteristic: %d", status);
-        }
-        // Delete service
-        status = aci_gatt_del_service(serial_svc->svc_handle);
-        if(status) {
-            FURI_LOG_E(TAG, "Failed to delete Serial service: %d", status);
-        }
-        // Delete buffer size mutex
-        osMutexDelete(serial_svc->buff_size_mtx);
-        free(serial_svc);
-        serial_svc = NULL;
-    }
-}
-
-bool serial_svc_is_started() {
-    return serial_svc != NULL;
-}
-
-bool serial_svc_update_tx(uint8_t* data, uint16_t data_len) {
-    if(data_len > SERIAL_SVC_DATA_LEN_MAX) {
-        return false;
-    }
-
-    for(uint16_t remained = data_len; remained > 0;) {
-        uint8_t value_len = MIN(SERIAL_SVC_CHAR_VALUE_LEN_MAX, remained);
-        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);
-
-        if(result) {
-            FURI_LOG_E(TAG, "Failed updating TX characteristic: %d", result);
-            return false;
-        }
-    }
-
-    return true;
-}

+ 0 - 47
firmware/targets/f6/ble_glue/serial_service.h

@@ -1,47 +0,0 @@
-#pragma once
-
-#include <stdint.h>
-#include <stdbool.h>
-
-#define SERIAL_SVC_DATA_LEN_MAX (486)
-#define SERIAL_SVC_CHAR_VALUE_LEN_MAX (243)
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef enum {
-    SerialServiceEventTypeDataReceived,
-    SerialServiceEventTypeDataSent,
-} SerialServiceEventType;
-
-typedef struct {
-    uint8_t* buffer;
-    uint16_t size;
-} SerialServiceData;
-
-typedef struct {
-    SerialServiceEventType event;
-    SerialServiceData data;
-} SerialServiceEvent;
-
-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_notify_buffer_is_empty();
-
-void serial_svc_stop();
-
-bool serial_svc_is_started();
-
-bool serial_svc_update_tx(uint8_t* data, uint16_t data_len);
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 136
firmware/targets/f6/ble_glue/tl_dbg_conf.h

@@ -1,136 +0,0 @@
-/* USER CODE BEGIN Header */
-/**
- ******************************************************************************
-  * File Name          : App/tl_dbg_conf.h
-  * Description        : Debug configuration file for stm32wpan transport layer interface.
-  *
-  ******************************************************************************
-  * @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 */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __TL_DBG_CONF_H
-#define __TL_DBG_CONF_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* USER CODE BEGIN Tl_Conf */
-
-/* Includes ------------------------------------------------------------------*/
-#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>
-
-/**
- * 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_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 */
-
-/**
- * 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
-#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_)
-#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
-#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_)
-#else
-#define TL_SHCI_EVT_DBG_RAW(...)
-#endif
-
-/**
- * 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
-#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_)
-#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
-#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_)
-#else
-#define TL_HCI_EVT_DBG_RAW(...)
-#endif
-
-/**
- * Memory Manager - Released buffer tracing
- */
-#if(TL_MM_DBG_EN != 0)
-#define TL_MM_DBG_MSG PRINT_MESG_DBG
-#else
-#define TL_MM_DBG_MSG(...)
-#endif
-
-/* USER CODE END Tl_Conf */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /*__TL_DBG_CONF_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 69
firmware/targets/f6/ble_glue/utilities_conf.h

@@ -1,69 +0,0 @@
-/* USER CODE BEGIN Header */
-/**
- ******************************************************************************
-  * File Name          : utilities_conf.h
-  * Description        : Configuration file for STM32 Utilities.
-  *
- ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
-  * All rights reserved.</center></h2>
-  *
-  * This software component is licensed by ST under BSD 3-Clause license,
-  * the "License"; You may not use this file except in compliance with the
-  * License. You may obtain a copy of the License at:
-  *                        opensource.org/licenses/BSD-3-Clause
-  *
-  ******************************************************************************
-  */
-/* USER CODE END Header */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef UTILITIES_CONF_H
-#define UTILITIES_CONF_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "cmsis_compiler.h"
-#include "string.h"
-
-/******************************************************************************
- * common
- ******************************************************************************/
-#define UTILS_ENTER_CRITICAL_SECTION()      \
-    uint32_t primask_bit = __get_PRIMASK(); \
-    __disable_irq()
-
-#define UTILS_EXIT_CRITICAL_SECTION() __set_PRIMASK(primask_bit)
-
-#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()
-
-/******************************************************************************
- * 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)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /*UTILITIES_CONF_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 193
firmware/targets/f6/cube/Inc/FreeRTOSConfig.h

@@ -1,193 +0,0 @@
-/* USER CODE BEGIN Header */
-/*
- * FreeRTOS Kernel V10.3.1
- * Portion Copyright (C) 2017 Amazon.com, Inc. or its affiliates.  All Rights Reserved.
- * Portion Copyright (C) 2019 StMicroelectronics, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * http://www.FreeRTOS.org
- * http://aws.amazon.com/freertos
- *
- * 1 tab == 4 spaces!
- */
-/* USER CODE END Header */
-
-#ifndef FREERTOS_CONFIG_H
-#define FREERTOS_CONFIG_H
-
-/*-----------------------------------------------------------
- * Application specific definitions.
- *
- * These definitions should be adjusted for your particular hardware and
- * application requirements.
- *
- * These parameters and more are described within the 'configuration' section of the
- * FreeRTOS API documentation available on the FreeRTOS.org web site.
- *
- * See http://www.freertos.org/a00110.html
- *----------------------------------------------------------*/
-
-/* USER CODE BEGIN Includes */
-/* Section where include file can be added */
-/* USER CODE END Includes */
-
-/* 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);
-/* USER CODE BEGIN 0 */
-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
-/* 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
-/* USER CODE END MESSAGE_BUFFER_LENGTH_TYPE */
-
-/* Co-routine definitions. */
-#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
-
-/* 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
-
-/* 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
-
-/*
- * The CMSIS-RTOS V2 FreeRTOS wrapper is dependent on the heap implementation used
- * by the application thus the correct define need to be enabled below
- */
-#define USE_FreeRTOS_HEAP_4
-
-/* 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
-#else
-#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
-
-/* 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
-INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER
-PRIORITY THAN THIS! (higher priorities are lower numeric values. */
-#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5
-
-/* 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))
-/* !!!! 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))
-
-/* 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(;;)                   \
-            ;                     \
-    }
-/* USER CODE END 1 */
-
-/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
-standard names. */
-#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 */
-
-#define USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION 1
-
-/* USER CODE BEGIN 2 */
-/* Definitions needed when configGENERATE_RUN_TIME_STATS is on */
-#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS configureTimerForRunTimeStats
-#define portGET_RUN_TIME_COUNTER_VALUE getRunTimeCounterValue
-/* USER CODE END 2 */
-
-/* USER CODE BEGIN Defines */
-/* Section where parameter definitions can be added (for instance, to override default ones in FreeRTOS.h) */
-/* USER CODE END Defines */
-
-#endif /* FREERTOS_CONFIG_H */

+ 0 - 52
firmware/targets/f6/cube/Inc/adc.h

@@ -1,52 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    adc.h
-  * @brief   This file contains all the function prototypes for
-  *          the adc.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 __ADC_H__
-#define __ADC_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "main.h"
-
-/* USER CODE BEGIN Includes */
-
-/* USER CODE END Includes */
-
-extern ADC_HandleTypeDef hadc1;
-
-/* USER CODE BEGIN Private defines */
-
-/* USER CODE END Private defines */
-
-void MX_ADC1_Init(void);
-
-/* USER CODE BEGIN Prototypes */
-
-/* USER CODE END Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __ADC_H__ */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 54
firmware/targets/f6/cube/Inc/aes.h

@@ -1,54 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    aes.h
-  * @brief   This file contains all the function prototypes for
-  *          the aes.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 __AES_H__
-#define __AES_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "main.h"
-
-/* USER CODE BEGIN Includes */
-
-/* USER CODE END Includes */
-
-extern CRYP_HandleTypeDef hcryp1;
-extern CRYP_HandleTypeDef hcryp2;
-
-/* USER CODE BEGIN Private defines */
-
-/* USER CODE END Private defines */
-
-void MX_AES1_Init(void);
-void MX_AES2_Init(void);
-
-/* USER CODE BEGIN Prototypes */
-
-/* USER CODE END Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __AES_H__ */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 52
firmware/targets/f6/cube/Inc/comp.h

@@ -1,52 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    comp.h
-  * @brief   This file contains all the function prototypes for
-  *          the comp.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 __COMP_H__
-#define __COMP_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "main.h"
-
-/* USER CODE BEGIN Includes */
-
-/* USER CODE END Includes */
-
-extern COMP_HandleTypeDef hcomp1;
-
-/* USER CODE BEGIN Private defines */
-
-/* USER CODE END Private defines */
-
-void MX_COMP1_Init(void);
-
-/* USER CODE BEGIN Prototypes */
-
-/* USER CODE END Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __COMP_H__ */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 52
firmware/targets/f6/cube/Inc/crc.h

@@ -1,52 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    crc.h
-  * @brief   This file contains all the function prototypes for
-  *          the crc.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 __CRC_H__
-#define __CRC_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "main.h"
-
-/* USER CODE BEGIN Includes */
-
-/* USER CODE END Includes */
-
-extern CRC_HandleTypeDef hcrc;
-
-/* USER CODE BEGIN Private defines */
-
-/* USER CODE END Private defines */
-
-void MX_CRC_Init(void);
-
-/* USER CODE BEGIN Prototypes */
-
-/* USER CODE END Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __CRC_H__ */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 49
firmware/targets/f6/cube/Inc/gpio.h

@@ -1,49 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    gpio.h
-  * @brief   This file contains all the function prototypes for
-  *          the gpio.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 __GPIO_H__
-#define __GPIO_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "main.h"
-
-/* USER CODE BEGIN Includes */
-
-/* USER CODE END Includes */
-
-/* USER CODE BEGIN Private defines */
-
-/* USER CODE END Private defines */
-
-void MX_GPIO_Init(void);
-
-/* USER CODE BEGIN Prototypes */
-
-/* USER CODE END Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-#endif /*__ GPIO_H__ */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 50
firmware/targets/f6/cube/Inc/i2c.h

@@ -1,50 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    i2c.h
-  * @brief   This file contains all the function prototypes for
-  *          the i2c.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 __I2C_H__
-#define __I2C_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "main.h"
-
-/* USER CODE BEGIN Includes */
-
-/* USER CODE END Includes */
-
-/* USER CODE BEGIN Private defines */
-
-/* USER CODE END Private defines */
-
-void MX_I2C1_Init(void);
-
-/* USER CODE BEGIN Prototypes */
-
-/* USER CODE END Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __I2C_H__ */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 175
firmware/targets/f6/cube/Inc/main.h

@@ -1,175 +0,0 @@
-/* USER CODE BEGIN Header */
-/**
-  ******************************************************************************
-  * @file           : main.h
-  * @brief          : Header for main.c file.
-  *                   This file contains the common defines of the application.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __MAIN_H
-#define __MAIN_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32wbxx_hal.h"
-
-#include "stm32wbxx_ll_i2c.h"
-#include "stm32wbxx_ll_crs.h"
-#include "stm32wbxx_ll_rcc.h"
-#include "stm32wbxx_ll_bus.h"
-#include "stm32wbxx_ll_system.h"
-#include "stm32wbxx_ll_exti.h"
-#include "stm32wbxx_ll_cortex.h"
-#include "stm32wbxx_ll_utils.h"
-#include "stm32wbxx_ll_pwr.h"
-#include "stm32wbxx_ll_dma.h"
-#include "stm32wbxx_ll_usart.h"
-#include "stm32wbxx_ll_gpio.h"
-
-/* Private includes ----------------------------------------------------------*/
-/* USER CODE BEGIN Includes */
-
-/* USER CODE END Includes */
-
-/* Exported types ------------------------------------------------------------*/
-/* USER CODE BEGIN ET */
-
-/* USER CODE END ET */
-
-/* Exported constants --------------------------------------------------------*/
-/* USER CODE BEGIN EC */
-
-/* USER CODE END EC */
-
-/* Exported macro ------------------------------------------------------------*/
-/* USER CODE BEGIN EM */
-
-/* USER CODE END EM */
-
-/* Exported functions prototypes ---------------------------------------------*/
-void Error_Handler(void);
-
-/* USER CODE BEGIN EFP */
-
-/* USER CODE END EFP */
-
-/* Private defines -----------------------------------------------------------*/
-#define BUTTON_BACK_Pin GPIO_PIN_13
-#define BUTTON_BACK_GPIO_Port GPIOC
-#define BUTTON_BACK_EXTI_IRQn EXTI15_10_IRQn
-#define QUARTZ_32MHZ_IN_Pin GPIO_PIN_14
-#define QUARTZ_32MHZ_IN_GPIO_Port GPIOC
-#define QUARTZ_32MHZ_OUT_Pin GPIO_PIN_15
-#define QUARTZ_32MHZ_OUT_GPIO_Port GPIOC
-#define BUTTON_OK_Pin GPIO_PIN_3
-#define BUTTON_OK_GPIO_Port GPIOH
-#define BUTTON_OK_EXTI_IRQn EXTI3_IRQn
-#define SPEAKER_Pin GPIO_PIN_8
-#define SPEAKER_GPIO_Port GPIOB
-#define IR_TX_Pin GPIO_PIN_9
-#define IR_TX_GPIO_Port GPIOB
-#define PC0_Pin GPIO_PIN_0
-#define PC0_GPIO_Port GPIOC
-#define PC1_Pin GPIO_PIN_1
-#define PC1_GPIO_Port GPIOC
-#define SPI_D_MISO_Pin GPIO_PIN_2
-#define SPI_D_MISO_GPIO_Port GPIOC
-#define PC3_Pin GPIO_PIN_3
-#define PC3_GPIO_Port GPIOC
-#define IR_RX_Pin GPIO_PIN_0
-#define IR_RX_GPIO_Port GPIOA
-#define CC1101_G0_Pin GPIO_PIN_1
-#define CC1101_G0_GPIO_Port GPIOA
-#define RFID_PULL_Pin GPIO_PIN_2
-#define RFID_PULL_GPIO_Port GPIOA
-#define PERIPH_POWER_Pin GPIO_PIN_3
-#define PERIPH_POWER_GPIO_Port GPIOA
-#define PA4_Pin GPIO_PIN_4
-#define PA4_GPIO_Port GPIOA
-#define SPI_R_SCK_Pin GPIO_PIN_5
-#define SPI_R_SCK_GPIO_Port GPIOA
-#define PA6_Pin GPIO_PIN_6
-#define PA6_GPIO_Port GPIOA
-#define PA7_Pin GPIO_PIN_7
-#define PA7_GPIO_Port GPIOA
-#define RFID_TUNE_Pin GPIO_PIN_8
-#define RFID_TUNE_GPIO_Port GPIOA
-#define I2C_SCL_Pin GPIO_PIN_9
-#define I2C_SCL_GPIO_Port GPIOA
-#define RF_SW_0_Pin GPIO_PIN_4
-#define RF_SW_0_GPIO_Port GPIOC
-#define RFID_RF_IN_Pin GPIO_PIN_5
-#define RFID_RF_IN_GPIO_Port GPIOC
-#define PB2_Pin GPIO_PIN_2
-#define PB2_GPIO_Port GPIOB
-#define BUTTON_UP_Pin GPIO_PIN_10
-#define BUTTON_UP_GPIO_Port GPIOB
-#define BUTTON_UP_EXTI_IRQn EXTI15_10_IRQn
-#define BUTTON_LEFT_Pin GPIO_PIN_11
-#define BUTTON_LEFT_GPIO_Port GPIOB
-#define BUTTON_LEFT_EXTI_IRQn EXTI15_10_IRQn
-#define DISPLAY_RST_Pin GPIO_PIN_0
-#define DISPLAY_RST_GPIO_Port GPIOB
-#define DISPLAY_DI_Pin GPIO_PIN_1
-#define DISPLAY_DI_GPIO_Port GPIOB
-#define NFC_CS_Pin GPIO_PIN_4
-#define NFC_CS_GPIO_Port GPIOE
-#define BUTTON_RIGHT_Pin GPIO_PIN_12
-#define BUTTON_RIGHT_GPIO_Port GPIOB
-#define BUTTON_RIGHT_EXTI_IRQn EXTI15_10_IRQn
-#define RFID_OUT_Pin GPIO_PIN_13
-#define RFID_OUT_GPIO_Port GPIOB
-#define iBTN_Pin GPIO_PIN_14
-#define iBTN_GPIO_Port GPIOB
-#define SPI_D_MOSI_Pin GPIO_PIN_15
-#define SPI_D_MOSI_GPIO_Port GPIOB
-#define BUTTON_DOWN_Pin GPIO_PIN_6
-#define BUTTON_DOWN_GPIO_Port GPIOC
-#define I2C_SDA_Pin GPIO_PIN_10
-#define I2C_SDA_GPIO_Port GPIOA
-#define VIBRO_Pin GPIO_PIN_15
-#define VIBRO_GPIO_Port GPIOA
-#define SD_CD_Pin GPIO_PIN_10
-#define SD_CD_GPIO_Port GPIOC
-#define DISPLAY_CS_Pin GPIO_PIN_11
-#define DISPLAY_CS_GPIO_Port GPIOC
-#define SD_CS_Pin GPIO_PIN_12
-#define SD_CS_GPIO_Port GPIOC
-#define CC1101_CS_Pin GPIO_PIN_0
-#define CC1101_CS_GPIO_Port GPIOD
-#define SPI_D_SCK_Pin GPIO_PIN_1
-#define SPI_D_SCK_GPIO_Port GPIOD
-#define PB3_Pin GPIO_PIN_3
-#define PB3_GPIO_Port GPIOB
-#define SPI_R_MISO_Pin GPIO_PIN_4
-#define SPI_R_MISO_GPIO_Port GPIOB
-#define SPI_R_MOSI_Pin GPIO_PIN_5
-#define SPI_R_MOSI_GPIO_Port GPIOB
-/* USER CODE BEGIN Private defines */
-
-/* USER CODE END Private defines */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __MAIN_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 52
firmware/targets/f6/cube/Inc/pka.h

@@ -1,52 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    pka.h
-  * @brief   This file contains all the function prototypes for
-  *          the pka.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 __PKA_H__
-#define __PKA_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "main.h"
-
-/* USER CODE BEGIN Includes */
-
-/* USER CODE END Includes */
-
-extern PKA_HandleTypeDef hpka;
-
-/* USER CODE BEGIN Private defines */
-
-/* USER CODE END Private defines */
-
-void MX_PKA_Init(void);
-
-/* USER CODE BEGIN Prototypes */
-
-/* USER CODE END Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __PKA_H__ */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 50
firmware/targets/f6/cube/Inc/rf.h

@@ -1,50 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    rf.h
-  * @brief   This file contains all the function prototypes for
-  *          the rf.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 __RF_H__
-#define __RF_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "main.h"
-
-/* USER CODE BEGIN Includes */
-
-/* USER CODE END Includes */
-
-/* USER CODE BEGIN Private defines */
-
-/* USER CODE END Private defines */
-
-void MX_RF_Init(void);
-
-/* USER CODE BEGIN Prototypes */
-
-/* USER CODE END Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __RF_H__ */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 52
firmware/targets/f6/cube/Inc/rng.h

@@ -1,52 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    rng.h
-  * @brief   This file contains all the function prototypes for
-  *          the rng.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 __RNG_H__
-#define __RNG_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "main.h"
-
-/* USER CODE BEGIN Includes */
-
-/* USER CODE END Includes */
-
-extern RNG_HandleTypeDef hrng;
-
-/* USER CODE BEGIN Private defines */
-
-/* USER CODE END Private defines */
-
-void MX_RNG_Init(void);
-
-/* USER CODE BEGIN Prototypes */
-
-/* USER CODE END Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __RNG_H__ */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 52
firmware/targets/f6/cube/Inc/rtc.h

@@ -1,52 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    rtc.h
-  * @brief   This file contains all the function prototypes for
-  *          the rtc.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 __RTC_H__
-#define __RTC_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "main.h"
-
-/* USER CODE BEGIN Includes */
-
-/* USER CODE END Includes */
-
-extern RTC_HandleTypeDef hrtc;
-
-/* USER CODE BEGIN Private defines */
-
-/* USER CODE END Private defines */
-
-void MX_RTC_Init(void);
-
-/* USER CODE BEGIN Prototypes */
-
-/* USER CODE END Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __RTC_H__ */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 54
firmware/targets/f6/cube/Inc/spi.h

@@ -1,54 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    spi.h
-  * @brief   This file contains all the function prototypes for
-  *          the spi.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 __SPI_H__
-#define __SPI_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "main.h"
-
-/* USER CODE BEGIN Includes */
-
-/* USER CODE END Includes */
-
-extern SPI_HandleTypeDef hspi1;
-extern SPI_HandleTypeDef hspi2;
-
-/* USER CODE BEGIN Private defines */
-
-/* USER CODE END Private defines */
-
-void MX_SPI1_Init(void);
-void MX_SPI2_Init(void);
-
-/* USER CODE BEGIN Prototypes */
-
-/* USER CODE END Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __SPI_H__ */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 53
firmware/targets/f6/cube/Inc/stm32_assert.h

@@ -1,53 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32_assert.h
-  * @brief   STM32 assert file.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
-  * All rights reserved.</center></h2>
-  *
-  * This software component is licensed by ST under BSD 3-Clause license,
-  * the "License"; You may not use this file except in compliance with the
-  * License. You may obtain a copy of the License at:
-  *                        opensource.org/licenses/BSD-3-Clause
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32_ASSERT_H
-#define __STM32_ASSERT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-/* Includes ------------------------------------------------------------------*/
-/* Exported macro ------------------------------------------------------------*/
-#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
-  *         which reports the name of the source file and the source
-  *         line number of the call that failed.
-  *         If expr is true, it returns no value.
-  * @retval None
-  */
-#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t*)__FILE__, __LINE__))
-/* Exported functions ------------------------------------------------------- */
-void assert_failed(uint8_t* file, uint32_t line);
-#else
-#define assert_param(expr) ((void)0U)
-#endif /* USE_FULL_ASSERT */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32_ASSERT_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 354
firmware/targets/f6/cube/Inc/stm32wbxx_hal_conf.h

@@ -1,354 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32wbxx_hal_conf.h
-  * @author  MCD Application Team
-  * @brief   HAL configuration file.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
-  * All rights reserved.</center></h2>
-  *
-  * This software component is licensed by ST under BSD 3-Clause license,
-  * the "License"; You may not use this file except in compliance with the
-  * License. You may obtain a copy of the License at:
-  *                        opensource.org/licenses/BSD-3-Clause
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32WBxx_HAL_CONF_H
-#define __STM32WBxx_HAL_CONF_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-
-/* ########################## Module Selection ############################## */
-/**
-  * @brief This is the list of modules to be used in the HAL driver
-  */
-#define HAL_MODULE_ENABLED
-#define HAL_ADC_MODULE_ENABLED
-#define HAL_CRYP_MODULE_ENABLED
-#define HAL_COMP_MODULE_ENABLED
-#define HAL_CRC_MODULE_ENABLED
-#define HAL_HSEM_MODULE_ENABLED
-/*#define HAL_I2C_MODULE_ENABLED   */
-/*#define HAL_IPCC_MODULE_ENABLED   */
-/*#define HAL_IRDA_MODULE_ENABLED   */
-/*#define HAL_IWDG_MODULE_ENABLED   */
-/*#define HAL_LCD_MODULE_ENABLED   */
-/*#define HAL_LPTIM_MODULE_ENABLED   */
-#define HAL_PCD_MODULE_ENABLED
-#define HAL_PKA_MODULE_ENABLED
-/*#define HAL_QSPI_MODULE_ENABLED   */
-#define HAL_RNG_MODULE_ENABLED
-#define HAL_RTC_MODULE_ENABLED
-/*#define HAL_SAI_MODULE_ENABLED   */
-/*#define HAL_SMBUS_MODULE_ENABLED   */
-/*#define HAL_SMARTCARD_MODULE_ENABLED   */
-#define HAL_SPI_MODULE_ENABLED
-#define HAL_TIM_MODULE_ENABLED
-/*#define HAL_TSC_MODULE_ENABLED   */
-/*#define HAL_UART_MODULE_ENABLED   */
-/*#define HAL_USART_MODULE_ENABLED   */
-/*#define HAL_WWDG_MODULE_ENABLED   */
-#define HAL_EXTI_MODULE_ENABLED
-#define HAL_CORTEX_MODULE_ENABLED
-#define HAL_DMA_MODULE_ENABLED
-#define HAL_FLASH_MODULE_ENABLED
-#define HAL_GPIO_MODULE_ENABLED
-#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_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
-
-/* ########################## Oscillator Values adaptation ####################*/
-/**
-  * @brief Adjust the value of External High Speed oscillator (HSE) used in your application.
-  *        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 */
-#endif /* HSE_VALUE */
-
-#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*/
-#endif /* MSI_VALUE */
-
-/**
-  * @brief Internal High Speed oscillator (HSI) value.
-  *        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*/
-#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
-                                             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
-                                             The real value may vary depending on the variations
-                                             in voltage and temperature.*/
-
-/**
-  * @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*/
-#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*/
-#endif /* HSI48_VALUE */
-
-#if !defined(LSE_STARTUP_TIMEOUT)
-#define LSE_STARTUP_TIMEOUT 1000U /*!< Time out for LSE start up, in ms */
-#endif /* HSE_STARTUP_TIMEOUT */
-
-/**
-  * @brief External clock source for SAI1 peripheral
-  *        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*/
-#endif /* EXTERNAL_SAI1_CLOCK_VALUE */
-
-/* Tip: To avoid modifying this file each time you need to use different HSE,
-   ===  you can define the HSE value in your toolchain compiler preprocessor. */
-
-/* ########################### System Configuration ######################### */
-/**
-  * @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
-
-/* ########################## Assert Selection ############################## */
-/**
-  * @brief Uncomment the line below to expanse the "assert_param" macro in the
-  *        HAL drivers code
-  */
-/* #define USE_FULL_ASSERT    1U */
-
-/* ################## SPI peripheral configuration ########################## */
-
-/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver
- * Activated: CRC code is present inside driver
- * Deactivated: CRC code cleaned from driver
- */
-
-#define USE_SPI_CRC 0U
-
-/* Includes ------------------------------------------------------------------*/
-/**
-  * @brief Include module's header file
-  */
-#ifdef HAL_DMA_MODULE_ENABLED
-#include "stm32wbxx_hal_dma.h"
-#endif /* HAL_DMA_MODULE_ENABLED */
-
-#ifdef HAL_ADC_MODULE_ENABLED
-#include "stm32wbxx_hal_adc.h"
-#endif /* HAL_ADC_MODULE_ENABLED */
-
-#ifdef HAL_COMP_MODULE_ENABLED
-#include "stm32wbxx_hal_comp.h"
-#endif /* HAL_COMP_MODULE_ENABLED */
-
-#ifdef HAL_CORTEX_MODULE_ENABLED
-#include "stm32wbxx_hal_cortex.h"
-#endif /* HAL_CORTEX_MODULE_ENABLED */
-
-#ifdef HAL_CRC_MODULE_ENABLED
-#include "stm32wbxx_hal_crc.h"
-#endif /* HAL_CRC_MODULE_ENABLED */
-
-#ifdef HAL_CRYP_MODULE_ENABLED
-#include "stm32wbxx_hal_cryp.h"
-#endif /* HAL_CRYP_MODULE_ENABLED */
-
-#ifdef HAL_EXTI_MODULE_ENABLED
-#include "stm32wbxx_hal_exti.h"
-#endif /* HAL_EXTI_MODULE_ENABLED */
-
-#ifdef HAL_FLASH_MODULE_ENABLED
-#include "stm32wbxx_hal_flash.h"
-#endif /* HAL_FLASH_MODULE_ENABLED */
-
-#ifdef HAL_GPIO_MODULE_ENABLED
-#include "stm32wbxx_hal_gpio.h"
-#endif /* HAL_GPIO_MODULE_ENABLED */
-
-#ifdef HAL_HSEM_MODULE_ENABLED
-#include "stm32wbxx_hal_hsem.h"
-#endif /* HAL_HSEM_MODULE_ENABLED */
-
-#ifdef HAL_I2C_MODULE_ENABLED
-#include "stm32wbxx_hal_i2c.h"
-#endif /* HAL_I2C_MODULE_ENABLED */
-
-#ifdef HAL_IPCC_MODULE_ENABLED
-#include "stm32wbxx_hal_ipcc.h"
-#endif /* HAL_IPCC_MODULE_ENABLED */
-
-#ifdef HAL_IRDA_MODULE_ENABLED
-#include "stm32wbxx_hal_irda.h"
-#endif /* HAL_IRDA_MODULE_ENABLED */
-
-#ifdef HAL_IWDG_MODULE_ENABLED
-#include "stm32wbxx_hal_iwdg.h"
-#endif /* HAL_IWDG_MODULE_ENABLED */
-
-#ifdef HAL_LCD_MODULE_ENABLED
-#include "stm32wbxx_hal_lcd.h"
-#endif /* HAL_LCD_MODULE_ENABLED */
-
-#ifdef HAL_LPTIM_MODULE_ENABLED
-#include "stm32wbxx_hal_lptim.h"
-#endif /* HAL_LPTIM_MODULE_ENABLED */
-
-#ifdef HAL_PCD_MODULE_ENABLED
-#include "stm32wbxx_hal_pcd.h"
-#endif /* HAL_PCD_MODULE_ENABLED */
-
-#ifdef HAL_PKA_MODULE_ENABLED
-#include "stm32wbxx_hal_pka.h"
-#endif /* HAL_PKA_MODULE_ENABLED */
-
-#ifdef HAL_PWR_MODULE_ENABLED
-#include "stm32wbxx_hal_pwr.h"
-#endif /* HAL_PWR_MODULE_ENABLED */
-
-#ifdef HAL_QSPI_MODULE_ENABLED
-#include "stm32wbxx_hal_qspi.h"
-#endif /* HAL_QSPI_MODULE_ENABLED */
-
-#ifdef HAL_RCC_MODULE_ENABLED
-#include "stm32wbxx_hal_rcc.h"
-#endif /* HAL_RCC_MODULE_ENABLED */
-
-#ifdef HAL_RNG_MODULE_ENABLED
-#include "stm32wbxx_hal_rng.h"
-#endif /* HAL_RNG_MODULE_ENABLED */
-
-#ifdef HAL_RTC_MODULE_ENABLED
-#include "stm32wbxx_hal_rtc.h"
-#endif /* HAL_RTC_MODULE_ENABLED */
-
-#ifdef HAL_SAI_MODULE_ENABLED
-#include "stm32wbxx_hal_sai.h"
-#endif /* HAL_SAI_MODULE_ENABLED */
-
-#ifdef HAL_SMARTCARD_MODULE_ENABLED
-#include "stm32wbxx_hal_smartcard.h"
-#endif /* HAL_SMARTCARD_MODULE_ENABLED */
-
-#ifdef HAL_SMBUS_MODULE_ENABLED
-#include "stm32wbxx_hal_smbus.h"
-#endif /* HAL_SMBUS_MODULE_ENABLED */
-
-#ifdef HAL_SPI_MODULE_ENABLED
-#include "stm32wbxx_hal_spi.h"
-#endif /* HAL_SPI_MODULE_ENABLED */
-
-#ifdef HAL_TIM_MODULE_ENABLED
-#include "stm32wbxx_hal_tim.h"
-#endif /* HAL_TIM_MODULE_ENABLED */
-
-#ifdef HAL_TSC_MODULE_ENABLED
-#include "stm32wbxx_hal_tsc.h"
-#endif /* HAL_TSC_MODULE_ENABLED */
-
-#ifdef HAL_UART_MODULE_ENABLED
-#include "stm32wbxx_hal_uart.h"
-#endif /* HAL_UART_MODULE_ENABLED */
-
-#ifdef HAL_USART_MODULE_ENABLED
-#include "stm32wbxx_hal_usart.h"
-#endif /* HAL_USART_MODULE_ENABLED */
-
-#ifdef HAL_WWDG_MODULE_ENABLED
-#include "stm32wbxx_hal_wwdg.h"
-#endif /* HAL_WWDG_MODULE_ENABLED */
-
-/* Exported macro ------------------------------------------------------------*/
-#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
-  *         which reports the name of the source file and the source
-  *         line number of the call that failed.
-  *         If expr is true, it returns no value.
-  * @retval None
-  */
-#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t*)__FILE__, __LINE__))
-/* Exported functions ------------------------------------------------------- */
-void assert_failed(uint8_t* file, uint32_t line);
-#else
-#define assert_param(expr) ((void)0U)
-#endif /* USE_FULL_ASSERT */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32WBxx_HAL_CONF_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 77
firmware/targets/f6/cube/Inc/stm32wbxx_it.h

@@ -1,77 +0,0 @@
-/* USER CODE BEGIN Header */
-/**
-  ******************************************************************************
-  * @file    stm32wbxx_it.h
-  * @brief   This file contains the headers of the interrupt handlers.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32WBxx_IT_H
-#define __STM32WBxx_IT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Private includes ----------------------------------------------------------*/
-/* USER CODE BEGIN Includes */
-
-/* USER CODE END Includes */
-
-/* Exported types ------------------------------------------------------------*/
-/* USER CODE BEGIN ET */
-
-/* USER CODE END ET */
-
-/* Exported constants --------------------------------------------------------*/
-/* USER CODE BEGIN EC */
-
-/* USER CODE END EC */
-
-/* Exported macro ------------------------------------------------------------*/
-/* USER CODE BEGIN EM */
-
-/* USER CODE END EM */
-
-/* Exported functions prototypes ---------------------------------------------*/
-void NMI_Handler(void);
-void HardFault_Handler(void);
-void MemManage_Handler(void);
-void BusFault_Handler(void);
-void UsageFault_Handler(void);
-void DebugMon_Handler(void);
-void SysTick_Handler(void);
-void TAMP_STAMP_LSECSS_IRQHandler(void);
-void RCC_IRQHandler(void);
-void EXTI3_IRQHandler(void);
-void ADC1_IRQHandler(void);
-void USB_LP_IRQHandler(void);
-void COMP_IRQHandler(void);
-void TIM1_TRG_COM_TIM17_IRQHandler(void);
-void TIM2_IRQHandler(void);
-void EXTI15_10_IRQHandler(void);
-void HSEM_IRQHandler(void);
-/* USER CODE BEGIN EFP */
-
-/* USER CODE END EFP */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32WBxx_IT_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 58
firmware/targets/f6/cube/Inc/tim.h

@@ -1,58 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    tim.h
-  * @brief   This file contains all the function prototypes for
-  *          the tim.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 __TIM_H__
-#define __TIM_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "main.h"
-
-/* USER CODE BEGIN Includes */
-
-/* USER CODE END Includes */
-
-extern TIM_HandleTypeDef htim1;
-extern TIM_HandleTypeDef htim2;
-extern TIM_HandleTypeDef htim16;
-
-/* USER CODE BEGIN Private defines */
-
-/* USER CODE END Private defines */
-
-void MX_TIM1_Init(void);
-void MX_TIM2_Init(void);
-void MX_TIM16_Init(void);
-
-void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim);
-
-/* USER CODE BEGIN Prototypes */
-
-/* USER CODE END Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __TIM_H__ */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 50
firmware/targets/f6/cube/Inc/usart.h

@@ -1,50 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usart.h
-  * @brief   This file contains all the function prototypes for
-  *          the usart.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 __USART_H__
-#define __USART_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "main.h"
-
-/* USER CODE BEGIN Includes */
-
-/* USER CODE END Includes */
-
-/* USER CODE BEGIN Private defines */
-
-/* USER CODE END Private defines */
-
-void MX_USART1_UART_Init(void);
-
-/* USER CODE BEGIN Prototypes */
-
-/* USER CODE END Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USART_H__ */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 105
firmware/targets/f6/cube/Inc/usb_device.h

@@ -1,105 +0,0 @@
-/* USER CODE BEGIN Header */
-/**
-  ******************************************************************************
-  * @file           : usb_device.h
-  * @version        : v3.0_Cube
-  * @brief          : Header for usb_device.c file.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_DEVICE__H__
-#define __USB_DEVICE__H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32wbxx.h"
-#include "stm32wbxx_hal.h"
-#include "usbd_def.h"
-
-/* USER CODE BEGIN INCLUDE */
-
-/* USER CODE END INCLUDE */
-
-/** @addtogroup USBD_OTG_DRIVER
-  * @{
-  */
-
-/** @defgroup USBD_DEVICE USBD_DEVICE
-  * @brief Device file for Usb otg low level driver.
-  * @{
-  */
-
-/** @defgroup USBD_DEVICE_Exported_Variables USBD_DEVICE_Exported_Variables
-  * @brief Public variables.
-  * @{
-  */
-
-/* Private variables ---------------------------------------------------------*/
-/* USER CODE BEGIN PV */
-
-/* USER CODE END PV */
-
-/* Private function prototypes -----------------------------------------------*/
-/* USER CODE BEGIN PFP */
-
-/* USER CODE END PFP */
-
-/*
- * -- Insert your variables declaration here --
- */
-/* USER CODE BEGIN VARIABLES */
-
-/* USER CODE END VARIABLES */
-/**
-  * @}
-  */
-
-/** @defgroup USBD_DEVICE_Exported_FunctionsPrototype USBD_DEVICE_Exported_FunctionsPrototype
-  * @brief Declaration of public functions for Usb device.
-  * @{
-  */
-
-/** USB Device initialization function. */
-void MX_USB_Device_Init(void);
-
-/*
- * -- Insert functions declaration here --
- */
-/* USER CODE BEGIN FD */
-
-/* USER CODE END FD */
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USB_DEVICE__H__ */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 133
firmware/targets/f6/cube/Inc/usbd_cdc_if.h

@@ -1,133 +0,0 @@
-/* USER CODE BEGIN Header */
-/**
-  ******************************************************************************
-  * @file           : usbd_cdc_if.h
-  * @version        : v3.0_Cube
-  * @brief          : Header for usbd_cdc_if.c file.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_CDC_IF_H__
-#define __USBD_CDC_IF_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_cdc.h"
-
-/* USER CODE BEGIN INCLUDE */
-
-/* USER CODE END INCLUDE */
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @brief For Usb device.
-  * @{
-  */
-
-/** @defgroup USBD_CDC_IF USBD_CDC_IF
-  * @brief Usb VCP device module
-  * @{
-  */
-
-/** @defgroup USBD_CDC_IF_Exported_Defines USBD_CDC_IF_Exported_Defines
-  * @brief Defines.
-  * @{
-  */
-/* Define size for the receive and transmit buffer over CDC */
-#define APP_RX_DATA_SIZE 512
-#define APP_TX_DATA_SIZE 512
-/* USER CODE BEGIN EXPORTED_DEFINES */
-
-/* USER CODE END EXPORTED_DEFINES */
-
-/**
-  * @}
-  */
-
-/** @defgroup USBD_CDC_IF_Exported_Types USBD_CDC_IF_Exported_Types
-  * @brief Types.
-  * @{
-  */
-
-/* USER CODE BEGIN EXPORTED_TYPES */
-
-/* USER CODE END EXPORTED_TYPES */
-
-/**
-  * @}
-  */
-
-/** @defgroup USBD_CDC_IF_Exported_Macros USBD_CDC_IF_Exported_Macros
-  * @brief Aliases.
-  * @{
-  */
-
-/* USER CODE BEGIN EXPORTED_MACRO */
-
-/* USER CODE END EXPORTED_MACRO */
-
-/**
-  * @}
-  */
-
-/** @defgroup USBD_CDC_IF_Exported_Variables USBD_CDC_IF_Exported_Variables
-  * @brief Public variables.
-  * @{
-  */
-
-/** CDC Interface callback. */
-extern USBD_CDC_ItfTypeDef USBD_Interface_fops_FS;
-
-/* USER CODE BEGIN EXPORTED_VARIABLES */
-
-/* USER CODE END EXPORTED_VARIABLES */
-
-/**
-  * @}
-  */
-
-/** @defgroup USBD_CDC_IF_Exported_FunctionsPrototype USBD_CDC_IF_Exported_FunctionsPrototype
-  * @brief Public functions declaration.
-  * @{
-  */
-
-uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len);
-
-/* USER CODE BEGIN EXPORTED_FUNCTIONS */
-
-/* USER CODE END EXPORTED_FUNCTIONS */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USBD_CDC_IF_H__ */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 179
firmware/targets/f6/cube/Inc/usbd_conf.h

@@ -1,179 +0,0 @@
-/* USER CODE BEGIN Header */
-/**
-  ******************************************************************************
-  * @file           : usbd_conf.h
-  * @version        : v3.0_Cube
-  * @brief          : Header for usbd_conf.c file.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_CONF__H__
-#define __USBD_CONF__H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "stm32wbxx.h"
-#include "stm32wbxx_hal.h"
-
-/* USER CODE BEGIN INCLUDE */
-
-/* USER CODE END INCLUDE */
-
-/** @addtogroup USBD_OTG_DRIVER
-  * @brief Driver for Usb device.
-  * @{
-  */
-
-/** @defgroup USBD_CONF USBD_CONF
-  * @brief Configuration file for Usb otg low level driver.
-  * @{
-  */
-
-/** @defgroup USBD_CONF_Exported_Variables USBD_CONF_Exported_Variables
-  * @brief Public variables.
-  * @{
-  */
-
-/* Private variables ---------------------------------------------------------*/
-/* USER CODE BEGIN PV */
-/* USER CODE END PV */
-/**
-  * @}
-  */
-
-/** @defgroup USBD_CONF_Exported_Defines USBD_CONF_Exported_Defines
-  * @brief Defines for configuration of the Usb device.
-  * @{
-  */
-
-/*---------- -----------*/
-#define USBD_MAX_NUM_INTERFACES 1U
-/*---------- -----------*/
-#define USBD_MAX_NUM_CONFIGURATION 1U
-/*---------- -----------*/
-#define USBD_MAX_STR_DESC_SIZ 512U
-/*---------- -----------*/
-#define USBD_DEBUG_LEVEL 0U
-/*---------- -----------*/
-#define USBD_LPM_ENABLED 1U
-/*---------- -----------*/
-#define USBD_SELF_POWERED 1U
-
-/****************************************/
-/* #define for FS and HS identification */
-#define DEVICE_FS 0
-
-/**
-  * @}
-  */
-
-/** @defgroup USBD_CONF_Exported_Macros USBD_CONF_Exported_Macros
-  * @brief Aliases.
-  * @{
-  */
-
-/* Memory management macros */
-
-/** Alias for memory allocation. */
-#define USBD_malloc (void*)USBD_static_malloc
-
-/** Alias for memory release. */
-#define USBD_free USBD_static_free
-
-/** Alias for memory set. */
-#define USBD_memset memset
-
-/** Alias for memory copy. */
-#define USBD_memcpy memcpy
-
-/** Alias for delay. */
-#define USBD_Delay HAL_Delay
-/* DEBUG macros */
-
-#if(USBD_DEBUG_LEVEL > 0)
-#define USBD_UsrLog(...) \
-    printf(__VA_ARGS__); \
-    printf("\n");
-#else
-#define USBD_UsrLog(...)
-#endif
-
-#if(USBD_DEBUG_LEVEL > 1)
-
-#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");
-#else
-#define USBD_DbgLog(...)
-#endif
-
-/**
-  * @}
-  */
-
-/** @defgroup USBD_CONF_Exported_Types USBD_CONF_Exported_Types
-  * @brief Types.
-  * @{
-  */
-
-/**
-  * @}
-  */
-
-/** @defgroup USBD_CONF_Exported_FunctionsPrototype USBD_CONF_Exported_FunctionsPrototype
-  * @brief Declaration of public functions for Usb device.
-  * @{
-  */
-
-/* Exported functions -------------------------------------------------------*/
-void* USBD_static_malloc(uint32_t size);
-void USBD_static_free(void* p);
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USBD_CONF__H__ */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 145
firmware/targets/f6/cube/Inc/usbd_desc.h

@@ -1,145 +0,0 @@
-/* USER CODE BEGIN Header */
-/**
-  ******************************************************************************
-  * @file           : usbd_desc.c
-  * @version        : v3.0_Cube
-  * @brief          : Header for usbd_conf.c file.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2021 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 */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_DESC__C__
-#define __USBD_DESC__C__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_def.h"
-
-/* USER CODE BEGIN INCLUDE */
-
-/* USER CODE END INCLUDE */
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-
-/** @defgroup USBD_DESC USBD_DESC
-  * @brief Usb device descriptors module.
-  * @{
-  */
-
-/** @defgroup USBD_DESC_Exported_Constants USBD_DESC_Exported_Constants
-  * @brief Constants.
-  * @{
-  */
-#define DEVICE_ID1 (UID_BASE)
-#define DEVICE_ID2 (UID_BASE + 0x4)
-#define DEVICE_ID3 (UID_BASE + 0x8)
-
-#define USB_SIZ_STRING_SERIAL 0x1A
-
-/* USER CODE BEGIN EXPORTED_CONSTANTS */
-
-/* USER CODE END EXPORTED_CONSTANTS */
-
-/**
-  * @}
-  */
-
-/** @defgroup USBD_DESC_Exported_Defines USBD_DESC_Exported_Defines
-  * @brief Defines.
-  * @{
-  */
-
-/* USER CODE BEGIN EXPORTED_DEFINES */
-
-/* USER CODE END EXPORTED_DEFINES */
-
-/**
-  * @}
-  */
-
-/** @defgroup USBD_DESC_Exported_TypesDefinitions USBD_DESC_Exported_TypesDefinitions
-  * @brief Types.
-  * @{
-  */
-
-/* USER CODE BEGIN EXPORTED_TYPES */
-
-/* USER CODE END EXPORTED_TYPES */
-
-/**
-  * @}
-  */
-
-/** @defgroup USBD_DESC_Exported_Macros USBD_DESC_Exported_Macros
-  * @brief Aliases.
-  * @{
-  */
-
-/* USER CODE BEGIN EXPORTED_MACRO */
-
-/* USER CODE END EXPORTED_MACRO */
-
-/**
-  * @}
-  */
-
-/** @defgroup USBD_DESC_Exported_Variables USBD_DESC_Exported_Variables
-  * @brief Public variables.
-  * @{
-  */
-
-extern USBD_DescriptorsTypeDef CDC_Desc;
-
-/* USER CODE BEGIN EXPORTED_VARIABLES */
-
-/* USER CODE END EXPORTED_VARIABLES */
-
-/**
-  * @}
-  */
-
-/** @defgroup USBD_DESC_Exported_FunctionsPrototype USBD_DESC_Exported_FunctionsPrototype
-  * @brief Public functions declaration.
-  * @{
-  */
-
-/* USER CODE BEGIN EXPORTED_FUNCTIONS */
-
-/* USER CODE END EXPORTED_FUNCTIONS */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USBD_DESC__C__ */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 0 - 253
firmware/targets/f6/cube/Makefile

@@ -1,253 +0,0 @@
-##########################################################################################################################
-# File automatically-generated by tool: [projectgenerator] version: [3.14.1] date: [Fri Sep 10 04:51:15 MSK 2021]
-##########################################################################################################################
-
-# ------------------------------------------------
-# Generic Makefile (based on gcc)
-#
-# ChangeLog :
-#	2017-02-10 - Several enhancements + project update mode
-#   2015-07-22 - first version
-# ------------------------------------------------
-
-######################################
-# target
-######################################
-TARGET = f6
-
-
-######################################
-# building variables
-######################################
-# debug build?
-DEBUG = 1
-# optimization
-OPT = -Og
-
-
-#######################################
-# paths
-#######################################
-# Build path
-BUILD_DIR = build
-
-######################################
-# source
-######################################
-# C sources
-C_SOURCES =  \
-Src/main.c \
-Src/gpio.c \
-Src/app_freertos.c \
-Src/adc.c \
-Src/aes.c \
-Src/comp.c \
-Src/crc.c \
-Src/i2c.c \
-Src/pka.c \
-Src/rf.c \
-Src/rng.c \
-Src/rtc.c \
-Src/spi.c \
-Src/tim.c \
-Src/usart.c \
-Src/usb_device.c \
-Src/usbd_conf.c \
-Src/usbd_desc.c \
-Src/usbd_cdc_if.c \
-Src/stm32wbxx_it.c \
-Src/stm32wbxx_hal_msp.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_utils.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_exti.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pcd.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pcd_ex.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_usb.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc_ex.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash_ex.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_gpio.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_hsem.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma_ex.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr_ex.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_cortex.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_exti.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_adc.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_adc_ex.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_adc.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_cryp.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_cryp_ex.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_comp.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_crc.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_crc_ex.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_i2c.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_gpio.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_dma.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pka.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rng.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rtc.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rtc_ex.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_spi.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_spi_ex.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim_ex.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_usart.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_rcc.c \
-Src/system_stm32wbxx.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/croutine.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/event_groups.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/list.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/queue.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/tasks.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/timers.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c \
-/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c  
-
-# ASM sources
-ASM_SOURCES =  \
-startup_stm32wb55xx_cm4.s
-
-
-#######################################
-# binaries
-#######################################
-PREFIX = arm-none-eabi-
-# The gcc compiler bin path can be either defined in make command via GCC_PATH variable (> make GCC_PATH=xxx)
-# either it can be added to the PATH environment variable.
-ifdef GCC_PATH
-CC = $(GCC_PATH)/$(PREFIX)gcc
-AS = $(GCC_PATH)/$(PREFIX)gcc -x assembler-with-cpp
-CP = $(GCC_PATH)/$(PREFIX)objcopy
-SZ = $(GCC_PATH)/$(PREFIX)size
-else
-CC = $(PREFIX)gcc
-AS = $(PREFIX)gcc -x assembler-with-cpp
-CP = $(PREFIX)objcopy
-SZ = $(PREFIX)size
-endif
-HEX = $(CP) -O ihex
-BIN = $(CP) -O binary -S
- 
-#######################################
-# CFLAGS
-#######################################
-# cpu
-CPU = -mcpu=cortex-m4
-
-# fpu
-FPU = -mfpu=fpv4-sp-d16
-
-# float-abi
-FLOAT-ABI = -mfloat-abi=hard
-
-# mcu
-MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)
-
-# macros for gcc
-# AS defines
-AS_DEFS = 
-
-# C defines
-C_DEFS =  \
--DUSE_FULL_LL_DRIVER \
--DUSE_HAL_DRIVER \
--DSTM32WB55xx
-
-
-# AS includes
-AS_INCLUDES =  \
--IInc
-
-# C includes
-C_INCLUDES =  \
--IInc \
--I/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Inc \
--I/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Inc/Legacy \
--I/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/include \
--I/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 \
--I/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F \
--I/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Middlewares/ST/STM32_USB_Device_Library/Core/Inc \
--I/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc \
--I/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/CMSIS/Device/ST/STM32WBxx/Include \
--I/Users/aku/Work/flipper/flipperzero-firmware/lib/STM32CubeWB/Drivers/CMSIS/Include
-
-
-# compile gcc flags
-ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
-
-CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
-
-ifeq ($(DEBUG), 1)
-CFLAGS += -g -gdwarf-2
-endif
-
-
-# Generate dependency information
-CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"
-
-
-#######################################
-# LDFLAGS
-#######################################
-# link script
-LDSCRIPT = stm32wb55xx_flash_cm4.ld
-
-# libraries
-LIBS = -lc -lm -lnosys 
-LIBDIR = 
-LDFLAGS = $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections
-
-# default action: build all
-all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin
-
-
-#######################################
-# build the application
-#######################################
-# list of objects
-OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o)))
-vpath %.c $(sort $(dir $(C_SOURCES)))
-# list of ASM program objects
-OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o)))
-vpath %.s $(sort $(dir $(ASM_SOURCES)))
-
-$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) 
-	$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@
-
-$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR)
-	$(AS) -c $(CFLAGS) $< -o $@
-
-$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
-	$(CC) $(OBJECTS) $(LDFLAGS) -o $@
-	$(SZ) $@
-
-$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
-	$(HEX) $< $@
-	
-$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
-	$(BIN) $< $@	
-	
-$(BUILD_DIR):
-	mkdir $@		
-
-#######################################
-# clean up
-#######################################
-clean:
-	-rm -fR $(BUILD_DIR)
-  
-#######################################
-# dependencies
-#######################################
--include $(wildcard $(BUILD_DIR)/*.d)
-
-# *** EOF ***

Некоторые файлы не были показаны из-за большого количества измененных файлов