| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- commit 1ef70c0bb4db8c4b7f537b39195fcba419af023b
- Author: hedger <hedger@users.noreply.github.com>
- Date: Mon Apr 24 11:19:36 2023 +0400
- [FL-3280] cubewb: downgraded to v1.15.0 (#2605)
-
- * cubewb: downgraded to v1.15.0
- * hal: updated f18 symbols to match LL
- * hal: flash: use furi_hal_cortex_timer for timeouts
- * scripts: fixed cube version validation from config file
- * hal: flash: added 3 seconds timeout when waiting for C2 to unlock flash controller. On timeout, triggers furi_check
- * nfc: fixed missing interrupt setup on multiple platformSetIrqCallback() invocations
- * hal: gpio: don't trigger furi_check on furi_hal_gpio_add_int_callback() with same parameters
- * Reverted NFC fixes - will be in a separate PR
- * scripts: storage: fixed exception handler for paths
- diff --git a/fbt_options.py b/fbt_options.py
- index 25e84afde..4fd7ef496 100644
- --- a/fbt_options.py
- +++ b/fbt_options.py
- @@ -20,7 +20,7 @@ DIST_SUFFIX = "local"
- COPRO_OB_DATA = "scripts/ob.data"
-
- # Must match lib/STM32CubeWB version
- -COPRO_CUBE_VERSION = "1.16.0"
- +COPRO_CUBE_VERSION = "1.15.0"
-
- COPRO_CUBE_DIR = "lib/STM32CubeWB"
-
- diff --git a/firmware/targets/f18/api_symbols.csv b/firmware/targets/f18/api_symbols.csv
- index 4ee3d8636..eb2d6f43f 100644
- --- a/firmware/targets/f18/api_symbols.csv
- +++ b/firmware/targets/f18/api_symbols.csv
- @@ -199,8 +199,8 @@ Function,-,LL_EXTI_StructInit,void,LL_EXTI_InitTypeDef*
- Function,-,LL_GPIO_DeInit,ErrorStatus,GPIO_TypeDef*
- Function,+,LL_GPIO_Init,ErrorStatus,"GPIO_TypeDef*, LL_GPIO_InitTypeDef*"
- Function,-,LL_GPIO_StructInit,void,LL_GPIO_InitTypeDef*
- -Function,-,LL_I2C_DeInit,ErrorStatus,const I2C_TypeDef*
- -Function,+,LL_I2C_Init,ErrorStatus,"I2C_TypeDef*, const LL_I2C_InitTypeDef*"
- +Function,-,LL_I2C_DeInit,ErrorStatus,I2C_TypeDef*
- +Function,+,LL_I2C_Init,ErrorStatus,"I2C_TypeDef*, LL_I2C_InitTypeDef*"
- Function,-,LL_I2C_StructInit,void,LL_I2C_InitTypeDef*
- Function,-,LL_Init1msTick,void,uint32_t
- Function,+,LL_LPTIM_DeInit,ErrorStatus,LPTIM_TypeDef*
- diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv
- index a2d70e7f8..d0c6b36ad 100644
- --- a/firmware/targets/f7/api_symbols.csv
- +++ b/firmware/targets/f7/api_symbols.csv
- @@ -231,8 +231,8 @@ Function,-,LL_EXTI_StructInit,void,LL_EXTI_InitTypeDef*
- Function,-,LL_GPIO_DeInit,ErrorStatus,GPIO_TypeDef*
- Function,+,LL_GPIO_Init,ErrorStatus,"GPIO_TypeDef*, LL_GPIO_InitTypeDef*"
- Function,-,LL_GPIO_StructInit,void,LL_GPIO_InitTypeDef*
- -Function,-,LL_I2C_DeInit,ErrorStatus,const I2C_TypeDef*
- -Function,+,LL_I2C_Init,ErrorStatus,"I2C_TypeDef*, const LL_I2C_InitTypeDef*"
- +Function,-,LL_I2C_DeInit,ErrorStatus,I2C_TypeDef*
- +Function,+,LL_I2C_Init,ErrorStatus,"I2C_TypeDef*, LL_I2C_InitTypeDef*"
- Function,-,LL_I2C_StructInit,void,LL_I2C_InitTypeDef*
- Function,-,LL_Init1msTick,void,uint32_t
- Function,+,LL_LPTIM_DeInit,ErrorStatus,LPTIM_TypeDef*
- diff --git a/firmware/targets/f7/ble_glue/ble_app.c b/firmware/targets/f7/ble_glue/ble_app.c
- index cc6065b97..a325830cf 100644
- --- a/firmware/targets/f7/ble_glue/ble_app.c
- +++ b/firmware/targets/f7/ble_glue/ble_app.c
- @@ -18,8 +18,8 @@ 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) == 58,
- - "Ble stack config structure size mismatch (check new config options - last updated for v.1.16.0)");
- + sizeof(SHCI_C2_Ble_Init_Cmd_Packet_t) == 57,
- + "Ble stack config structure size mismatch (check new config options - last updated for v.1.15.0)");
-
- typedef struct {
- FuriMutex* hci_mtx;
- diff --git a/firmware/targets/f7/furi_hal/furi_hal_flash.c b/firmware/targets/f7/furi_hal/furi_hal_flash.c
- index d2dbff55f..464d88d95 100644
- --- a/firmware/targets/f7/furi_hal/furi_hal_flash.c
- +++ b/firmware/targets/f7/furi_hal/furi_hal_flash.c
- @@ -1,6 +1,7 @@
- #include <furi_hal_flash.h>
- #include <furi_hal_bt.h>
- #include <furi_hal_power.h>
- +#include <furi_hal_cortex.h>
- #include <furi.h>
- #include <ble/ble.h>
- #include <interface/patterns/ble_thread/shci/shci.h>
- @@ -26,6 +27,16 @@
- #define FURI_HAL_FLASH_OPT_KEY2 0x4C5D6E7F
- #define FURI_HAL_FLASH_OB_TOTAL_WORDS (0x80 / (sizeof(uint32_t) * 2))
-
- +/* lib/STM32CubeWB/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_RfWithFlash/Core/Src/flash_driver.c
- + * ProcessSingleFlashOperation, quote:
- + > In most BLE application, the flash should not be blocked by the CPU2 longer than FLASH_TIMEOUT_VALUE (1000ms)
- + > However, it could be that for some marginal application, this time is longer.
- + > ... there is no other way than waiting the operation to be completed.
- + > If for any reason this test is never passed, this means there is a failure in the system and there is no other
- + > way to recover than applying a device reset.
- + */
- +#define FURI_HAL_FLASH_C2_LOCK_TIMEOUT_MS 3000u /* 3 seconds */
- +
- #define IS_ADDR_ALIGNED_64BITS(__VALUE__) (((__VALUE__)&0x7U) == (0x00UL))
- #define IS_FLASH_PROGRAM_ADDRESS(__VALUE__) \
- (((__VALUE__) >= FLASH_BASE) && ((__VALUE__) <= (FLASH_BASE + FLASH_SIZE - 8UL)) && \
- @@ -131,9 +142,11 @@ static void furi_hal_flash_begin_with_core2(bool erase_flag) {
- for(volatile uint32_t i = 0; i < 35; i++)
- ;
-
- + FuriHalCortexTimer timer = furi_hal_cortex_timer_get(FURI_HAL_FLASH_C2_LOCK_TIMEOUT_MS * 1000);
- while(true) {
- /* Wait till flash controller become usable */
- while(LL_FLASH_IsActiveFlag_OperationSuspended()) {
- + furi_check(!furi_hal_cortex_timer_is_expired(timer));
- furi_thread_yield();
- };
-
- @@ -143,6 +156,7 @@ static void furi_hal_flash_begin_with_core2(bool erase_flag) {
- /* Actually we already have mutex for it, but specification is specification */
- if(LL_HSEM_IsSemaphoreLocked(HSEM, CFG_HW_BLOCK_FLASH_REQ_BY_CPU1_SEMID)) {
- taskEXIT_CRITICAL();
- + furi_check(!furi_hal_cortex_timer_is_expired(timer));
- furi_thread_yield();
- continue;
- }
- @@ -150,6 +164,7 @@ static void furi_hal_flash_begin_with_core2(bool erase_flag) {
- /* Take sempahopre and prevent core2 from anything funky */
- if(LL_HSEM_1StepLock(HSEM, CFG_HW_BLOCK_FLASH_REQ_BY_CPU2_SEMID) != 0) {
- taskEXIT_CRITICAL();
- + furi_check(!furi_hal_cortex_timer_is_expired(timer));
- furi_thread_yield();
- continue;
- }
- @@ -231,17 +246,13 @@ static void furi_hal_flush_cache(void) {
-
- bool furi_hal_flash_wait_last_operation(uint32_t timeout) {
- uint32_t error = 0;
- - uint32_t countdown = 0;
-
- /* Wait for the FLASH operation to complete by polling on BUSY flag to be reset.
- Even if the FLASH operation fails, the BUSY flag will be reset and an error
- flag will be set */
- - countdown = timeout;
- + FuriHalCortexTimer timer = furi_hal_cortex_timer_get(timeout * 1000);
- while(READ_BIT(FLASH->SR, FLASH_SR_BSY)) {
- - if(LL_SYSTICK_IsActiveCounterFlag()) {
- - countdown--;
- - }
- - if(countdown == 0) {
- + if(furi_hal_cortex_timer_is_expired(timer)) {
- return false;
- }
- }
- @@ -264,12 +275,9 @@ bool furi_hal_flash_wait_last_operation(uint32_t timeout) {
- CLEAR_BIT(FLASH->SR, error);
-
- /* Wait for control register to be written */
- - countdown = timeout;
- + timer = furi_hal_cortex_timer_get(timeout * 1000);
- while(READ_BIT(FLASH->SR, FLASH_SR_CFGBSY)) {
- - if(LL_SYSTICK_IsActiveCounterFlag()) {
- - countdown--;
- - }
- - if(countdown == 0) {
- + if(furi_hal_cortex_timer_is_expired(timer)) {
- return false;
- }
- }
- diff --git a/lib/STM32CubeWB b/lib/STM32CubeWB
- index 06b8133fa..c4cec8ae5 160000
- --- a/lib/STM32CubeWB
- +++ b/lib/STM32CubeWB
- @@ -1 +1 @@
- -Subproject commit 06b8133fa295474507b55b1a5695d4b8bf804ed6
- +Subproject commit c4cec8ae57a79e949a184cd0b4117a008a0a25a7
- diff --git a/scripts/fbt_tools/fbt_dist.py b/scripts/fbt_tools/fbt_dist.py
- index f0b443486..d2808419c 100644
- --- a/scripts/fbt_tools/fbt_dist.py
- +++ b/scripts/fbt_tools/fbt_dist.py
- @@ -112,6 +112,8 @@ def DistCommand(env, name, source, **kw):
-
-
- def generate(env):
- + if not env["VERBOSE"]:
- + env.SetDefault(COPROCOMSTR="\tCOPRO\t${TARGET}")
- env.AddMethod(AddFwProject)
- env.AddMethod(DistCommand)
- env.AddMethod(AddOpenOCDFlashTarget)
- @@ -147,7 +149,7 @@ def generate(env):
- '--stack_file="${COPRO_STACK_BIN}" '
- "--stack_addr=${COPRO_STACK_ADDR} ",
- ],
- - "\tCOPRO\t${TARGET}",
- + "$COPROCOMSTR",
- )
- ),
- }
- diff --git a/scripts/flipper/assets/copro.py b/scripts/flipper/assets/copro.py
- index b61ac0329..e0375b51f 100644
- --- a/scripts/flipper/assets/copro.py
- +++ b/scripts/flipper/assets/copro.py
- @@ -34,7 +34,7 @@ class Copro:
- self.mcu_copro = None
- self.logger = logging.getLogger(self.__class__.__name__)
-
- - def loadCubeInfo(self, cube_dir, cube_version):
- + def loadCubeInfo(self, cube_dir, reference_cube_version):
- if not os.path.isdir(cube_dir):
- raise Exception(f'"{cube_dir}" doesn\'t exists')
- self.cube_dir = cube_dir
- @@ -50,7 +50,7 @@ class Copro:
- if not cube_version or not cube_version.startswith("FW.WB"):
- raise Exception(f"Incorrect Cube package or version info")
- cube_version = cube_version.replace("FW.WB.", "", 1)
- - if cube_version != cube_version:
- + if cube_version != reference_cube_version:
- raise Exception(f"Unsupported cube version")
- self.version = cube_version
-
- diff --git a/scripts/flipper/storage.py b/scripts/flipper/storage.py
- index 7b56ee0d0..cff32ceb1 100644
- --- a/scripts/flipper/storage.py
- +++ b/scripts/flipper/storage.py
- @@ -335,7 +335,9 @@ class FlipperStorage:
-
- def _check_no_error(self, response, path=None):
- if self.has_error(response):
- - raise FlipperStorageException.from_error_code(self.get_error(response))
- + raise FlipperStorageException.from_error_code(
- + path, self.get_error(response)
- + )
-
- def size(self, path: str):
- """file size on Flipper"""
|