From 2a52d2d6201e46cceaa9f610792be20bbec9bb09 Mon Sep 17 00:00:00 2001 From: Nikolay Minaylov Date: Thu, 10 Feb 2022 16:01:49 +0300 Subject: [FL-2216, FL-2233] Archive fixes (#987) * archive: badusb, u2f and various fixes * archive: delete confirmation * badusb: removed empty string check * string pointer check * FuriHal: insomnia overflow assert, fix double insomnia exit in ble. BadUsb: fix uncommitted model. * view update fixes in gpio, badusb, u2f Co-authored-by: Aleksandr Kutuzov --- firmware/targets/f6/ble_glue/ble_glue.c | 4 +++- firmware/targets/f6/furi_hal/furi_hal_power.c | 2 ++ firmware/targets/f7/ble_glue/ble_glue.c | 4 +++- firmware/targets/f7/furi_hal/furi_hal_power.c | 2 ++ 4 files changed, 10 insertions(+), 2 deletions(-) (limited to 'firmware') diff --git a/firmware/targets/f6/ble_glue/ble_glue.c b/firmware/targets/f6/ble_glue/ble_glue.c index c38c0731..6e55b368 100644 --- a/firmware/targets/f6/ble_glue/ble_glue.c +++ b/firmware/targets/f6/ble_glue/ble_glue.c @@ -116,6 +116,7 @@ void ble_glue_init() { bool ble_glue_wait_for_fus_start(WirelessFwInfo_t* info) { bool ret = false; + size_t countdown = 1000; while(countdown > 0) { if(ble_glue->status == BleGlueStatusFusStarted) { @@ -125,13 +126,14 @@ bool ble_glue_wait_for_fus_start(WirelessFwInfo_t* info) { countdown--; osDelay(1); } + if(ble_glue->status == BleGlueStatusFusStarted) { SHCI_GetWirelessFwInfo(info); } else { FURI_LOG_E(TAG, "Failed to start FUS"); ble_glue->status = BleGlueStatusBroken; } - furi_hal_power_insomnia_exit(); + return ret; } diff --git a/firmware/targets/f6/furi_hal/furi_hal_power.c b/firmware/targets/f6/furi_hal/furi_hal_power.c index 1dbdb3dd..a211b8c5 100644 --- a/firmware/targets/f6/furi_hal/furi_hal_power.c +++ b/firmware/targets/f6/furi_hal/furi_hal_power.c @@ -90,12 +90,14 @@ uint16_t furi_hal_power_insomnia_level() { void furi_hal_power_insomnia_enter() { vTaskSuspendAll(); + furi_assert(furi_hal_power.insomnia < UINT8_MAX); furi_hal_power.insomnia++; xTaskResumeAll(); } void furi_hal_power_insomnia_exit() { vTaskSuspendAll(); + furi_assert(furi_hal_power.insomnia > 0); furi_hal_power.insomnia--; xTaskResumeAll(); } diff --git a/firmware/targets/f7/ble_glue/ble_glue.c b/firmware/targets/f7/ble_glue/ble_glue.c index c38c0731..6e55b368 100644 --- a/firmware/targets/f7/ble_glue/ble_glue.c +++ b/firmware/targets/f7/ble_glue/ble_glue.c @@ -116,6 +116,7 @@ void ble_glue_init() { bool ble_glue_wait_for_fus_start(WirelessFwInfo_t* info) { bool ret = false; + size_t countdown = 1000; while(countdown > 0) { if(ble_glue->status == BleGlueStatusFusStarted) { @@ -125,13 +126,14 @@ bool ble_glue_wait_for_fus_start(WirelessFwInfo_t* info) { countdown--; osDelay(1); } + if(ble_glue->status == BleGlueStatusFusStarted) { SHCI_GetWirelessFwInfo(info); } else { FURI_LOG_E(TAG, "Failed to start FUS"); ble_glue->status = BleGlueStatusBroken; } - furi_hal_power_insomnia_exit(); + return ret; } diff --git a/firmware/targets/f7/furi_hal/furi_hal_power.c b/firmware/targets/f7/furi_hal/furi_hal_power.c index 1dbdb3dd..a211b8c5 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_power.c +++ b/firmware/targets/f7/furi_hal/furi_hal_power.c @@ -90,12 +90,14 @@ uint16_t furi_hal_power_insomnia_level() { void furi_hal_power_insomnia_enter() { vTaskSuspendAll(); + furi_assert(furi_hal_power.insomnia < UINT8_MAX); furi_hal_power.insomnia++; xTaskResumeAll(); } void furi_hal_power_insomnia_exit() { vTaskSuspendAll(); + furi_assert(furi_hal_power.insomnia > 0); furi_hal_power.insomnia--; xTaskResumeAll(); } -- cgit v1.2.3