diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 84c85d0b..2847c284 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -136,6 +136,26 @@ jobs: >> artifacts/flipper-z-${TARGET}-full-${SUFFIX}.bin done + - name: 'Bundle core2 firmware' + run: | + test -d core2_firmware && rm -rf core2_firmware || true + mkdir core2_firmware + cp \ + lib/STM32CubeWB/package.xml \ + lib/STM32CubeWB/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_FUS_fw.bin \ + lib/STM32CubeWB/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_FUS_fw_for_fus_0_5_3.bin \ + lib/STM32CubeWB/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x/stm32wb5x_BLE_Stack_full_fw.bin \ + core2_firmware + tar czpf artifacts/flipper-z-core2_firmware-${SUFFIX}.tgz core2_firmware + + - name: 'Bundle scripts' + run: | + tar czpf artifacts/flipper-z-scripts-${SUFFIX}.tgz scripts + + - name: 'Bundle resources' + run: | + tar czpf artifacts/flipper-z-resources-${SUFFIX}.tgz -C assets resources + - name: 'Upload artifacts to update server' uses: burnett01/rsync-deployments@4.1 with: diff --git a/applications/dolphin/dolphin.c b/applications/dolphin/dolphin.c index 245746a5..51eed34b 100644 --- a/applications/dolphin/dolphin.c +++ b/applications/dolphin/dolphin.c @@ -117,7 +117,7 @@ bool dolphin_view_idle_main_input(InputEvent* event, void* context) { with_value_mutex( dolphin->menu_vm, (Menu * menu) { menu_ok(menu); }); } else if(event->key == InputKeyUp && event->type == InputTypeShort) { - osTimerStart(dolphin->timeout_timer, 40); + osTimerStart(dolphin->timeout_timer, 64); view_dispatcher_switch_to_view(dolphin->idle_view_dispatcher, DolphinViewLockMenu); } else if(event->key == InputKeyDown && event->type == InputTypeShort) { dolphin_switch_to_app(dolphin, &FLIPPER_ARCHIVE); diff --git a/applications/dolphin/dolphin_i.h b/applications/dolphin/dolphin_i.h index 3f47e2c3..cd562492 100644 --- a/applications/dolphin/dolphin_i.h +++ b/applications/dolphin/dolphin_i.h @@ -46,8 +46,6 @@ struct Dolphin { View* idle_view_first_start; View* idle_view_main; View* idle_view_dolphin_stats; - View* idle_view_down; - View* idle_view_meta; View* view_hw_mismatch; View* view_lockmenu; ViewPort* lock_viewport; diff --git a/assets/resources/irda/universal/tv.ir b/assets/resources/irda/universal/tv.ir new file mode 100755 index 00000000..6dbbf760 --- /dev/null +++ b/assets/resources/irda/universal/tv.ir @@ -0,0 +1,45 @@ +POWER Samsung32 A:07 C:02 +POWER NEC A:50 C:17 +POWER NEC A:40 C:12 +POWER NECext A:4931 C:63 +POWER NEC A:AA C:1C +POWER NEC A:AA C:1C +POWER NEC A:AA C:1C +POWER NEC A:AA C:1C +POWER NEC A:38 C:1C +POWER NECext A:7A83 C:08 +POWER NEC A:53 C:17 +POWER NECext A:1818 C:C0 +POWER NEC A:38 C:10 +POWER NEC A:AA C:C5 +POWER NEC A:04 C:08 +POWER NEC A:18 C:08 +POWER NEC A:71 C:08 +POWER NECext A:6F80 C:0A +POWER NEC A:48 C:00 +POWER NECext A:7B80 C:13 +#POWER Samsung32 A:0E C:14 +POWER NECext A:7E80 C:18 +POWER NEC A:50 C:08 + +VOL- NECext A:DF00 C:4F +CH+ NECext A:DF00 C:09 +CH- NECext A:DF00 C:05 +MUTE NECext A:DF00 C:08 + +// Microlab (Not TV) +POWER NEC A:00 C:00 +MUTE NEC A:00 C:02 +VOL+ NEC A:00 C:11 +VOL- NEC A:00 C:10 + +// Skyworth +POWER Samsung32 A:0E C:0C +MUTE Samsung32 A:0E C:0D +VOL+ Samsung32 A:0E C:14 +VOL- Samsung32 A:0E C:15 +CH- Samsung32 A:0E C:12 +CH+ Samsung32 A:0E C:13 + +// LG (Goldstar) +MUTE NEC A diff --git a/firmware/targets/f6/Inc/FreeRTOSConfig.h b/firmware/targets/f6/Inc/FreeRTOSConfig.h index 748fc7f6..5d2befde 100644 --- a/firmware/targets/f6/Inc/FreeRTOSConfig.h +++ b/firmware/targets/f6/Inc/FreeRTOSConfig.h @@ -51,17 +51,16 @@ #if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__) #include 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 1 #define configUSE_PREEMPTION 1 -#define configSUPPORT_STATIC_ALLOCATION 1 +#define configSUPPORT_STATIC_ALLOCATION 0 #define configSUPPORT_DYNAMIC_ALLOCATION 1 #define configUSE_IDLE_HOOK 0 #define configUSE_TICK_HOOK 0 @@ -100,22 +99,24 @@ /* Software timer definitions. */ #define configUSE_TIMERS 1 #define configTIMER_TASK_PRIORITY ( 2 ) -#define configTIMER_QUEUE_LENGTH 10 +#define configTIMER_QUEUE_LENGTH 32 #define configTIMER_TASK_STACK_DEPTH 256 /* Set the following definitions to 1 to include the API function, or zero to exclude the API function. */ -#define INCLUDE_vTaskPrioritySet 1 +#define INCLUDE_eTaskGetState 1 +#define INCLUDE_uxTaskGetStackHighWaterMark 1 #define INCLUDE_uxTaskPriorityGet 1 -#define INCLUDE_vTaskDelete 1 -#define INCLUDE_vTaskSuspend 1 -#define INCLUDE_vTaskDelayUntil 1 +#define INCLUDE_vTaskCleanUpResources 0 #define INCLUDE_vTaskDelay 1 +#define INCLUDE_vTaskDelayUntil 1 +#define INCLUDE_vTaskDelete 1 +#define INCLUDE_vTaskPrioritySet 1 +#define INCLUDE_vTaskSuspend 1 +#define INCLUDE_xQueueGetMutexHolder 1 +#define INCLUDE_xTaskGetCurrentTaskHandle 1 #define INCLUDE_xTaskGetSchedulerState 1 #define INCLUDE_xTimerPendFunctionCall 1 -#define INCLUDE_xQueueGetMutexHolder 1 -#define INCLUDE_uxTaskGetStackHighWaterMark 1 -#define INCLUDE_eTaskGetState 1 /* * The CMSIS-RTOS V2 FreeRTOS wrapper is dependent on the heap implementation used @@ -159,9 +160,13 @@ standard names. */ #define vPortSVCHandler SVC_Handler #define xPortPendSVHandler PendSV_Handler -/* IMPORTANT: This define is commented when used with STM32Cube firmware, when the timebase source is SysTick, - to prevent overwriting SysTick_Handler defined within STM32Cube HAL */ +/* IMPORTANT: After 10.3.1 update, Systick_Handler comes from NVIC (if SYS timebase = systick), otherwise from cmsis_os2.c */ -/* #define xPortSysTickHandler SysTick_Handler */ +#define USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION 1 + +/* USER CODE BEGIN Defines */ +/* Section where parameter definitions can be added (for instance, to override default ones in FreeRTOS.h) */ +#define configOVERRIDE_DEFAULT_TICK_CONFIGURATION 1 /* required only for Keil but does not hurt otherwise */ +/* USER CODE END Defines */ #endif /* FREERTOS_CONFIG_H */ diff --git a/firmware/targets/f6/Src/usbd_cdc_if.c b/firmware/targets/f6/Src/usbd_cdc_if.c index 8a7b5913..b18c5a56 100644 --- a/firmware/targets/f6/Src/usbd_cdc_if.c +++ b/firmware/targets/f6/Src/usbd_cdc_if.c @@ -241,7 +241,9 @@ static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length) static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len) { /* USER CODE BEGIN 6 */ - _furi_hal_vcp_rx_callback((char*)Buf, *Len); + if (*Len) { + _furi_hal_vcp_rx_callback((char*)Buf, *Len); + } USBD_CDC_ReceivePacket(&hUsbDeviceFS); return (USBD_OK); /* USER CODE END 6 */ diff --git a/firmware/targets/f6/ble-glue/app_debug.c b/firmware/targets/f6/ble-glue/app_debug.c index 0e09f44f..e1c29b46 100644 --- a/firmware/targets/f6/ble-glue/app_debug.c +++ b/firmware/targets/f6/ble-glue/app_debug.c @@ -52,12 +52,13 @@ typedef PACKED_STRUCT * THIS SHALL BE SET TO A VALUE DIFFERENT FROM 0 ONLY ON REQUEST FROM ST SUPPORT */ #define BLE_DTB_CFG 0 +#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, {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 diff --git a/firmware/targets/f6/furi-hal/furi-hal-flash.c b/firmware/targets/f6/furi-hal/furi-hal-flash.c index 0cd80313..5346965f 100644 --- a/firmware/targets/f6/furi-hal/furi-hal-flash.c +++ b/firmware/targets/f6/furi-hal/furi-hal-flash.c @@ -5,7 +5,6 @@ /* Free flash space borders, exported by linker */ extern const void __free_flash_start__; -extern const void __free_flash_end__; #define FURI_HAL_FLASH_READ_BLOCK 8 #define FURI_HAL_FLASH_WRITE_BLOCK 8 @@ -37,7 +36,9 @@ const void* furi_hal_flash_get_free_start_address() { } const void* furi_hal_flash_get_free_end_address() { - return &__free_flash_end__; + FLASH_OBProgramInitTypeDef pOBInit; + HAL_FLASHEx_OBGetConfig(&pOBInit); + return (const void *)pOBInit.SecureFlashStartAddr; } size_t furi_hal_flash_get_free_page_start_address() { diff --git a/firmware/targets/f6/furi-hal/furi-hal-os.c b/firmware/targets/f6/furi-hal/furi-hal-os.c index 0e55df53..eb1811b6 100644 --- a/firmware/targets/f6/furi-hal/furi-hal-os.c +++ b/firmware/targets/f6/furi-hal/furi-hal-os.c @@ -26,6 +26,8 @@ void furi_hal_os_timer_callback() { } #endif +extern void xPortSysTickHandler(); + volatile uint32_t furi_hal_os_skew = 0; void furi_hal_os_init() { @@ -122,9 +124,6 @@ void vPortSuppressTicksAndSleep(TickType_t expected_idle_ticks) { // Sleep and track how much ticks we spent sleeping uint32_t completed_ticks = furi_hal_os_sleep(expected_idle_ticks); - // Reenable IRQ - __enable_irq(); - // Notify system about time spent in sleep if (completed_ticks > 0) { if (completed_ticks > expected_idle_ticks) { @@ -133,6 +132,9 @@ void vPortSuppressTicksAndSleep(TickType_t expected_idle_ticks) { vTaskStepTick(completed_ticks); } } + + // Reenable IRQ + __enable_irq(); } void vApplicationStackOverflowHook(TaskHandle_t xTask, signed char *pcTaskName) { diff --git a/firmware/targets/f6/stm32wb55xx_flash_cm4_boot.ld b/firmware/targets/f6/stm32wb55xx_flash_cm4_boot.ld index faa4301b..f87127cc 100644 --- a/firmware/targets/f6/stm32wb55xx_flash_cm4_boot.ld +++ b/firmware/targets/f6/stm32wb55xx_flash_cm4_boot.ld @@ -55,7 +55,7 @@ _Min_Stack_Size = 0x1000; /* required amount of stack */ /* Specify the memory areas */ MEMORY { -FLASH (rx) : ORIGIN = 0x08008000, LENGTH = 780K +FLASH (rx) : ORIGIN = 0x08008000, LENGTH = 992K RAM1 (xrw) : ORIGIN = 0x20000004, LENGTH = 0x2FFFC RAM_SHARED (xrw) : ORIGIN = 0x20030000, LENGTH = 10K } @@ -173,7 +173,6 @@ SECTIONS { __free_flash_start__ = .; . = ORIGIN(FLASH) + LENGTH(FLASH); - __free_flash_end__ = .; } >FLASH /* Remove information from the standard libraries */ diff --git a/firmware/targets/f6/stm32wb55xx_flash_cm4_no_boot.ld b/firmware/targets/f6/stm32wb55xx_flash_cm4_no_boot.ld index 095f368b..ac7a1015 100644 --- a/firmware/targets/f6/stm32wb55xx_flash_cm4_no_boot.ld +++ b/firmware/targets/f6/stm32wb55xx_flash_cm4_no_boot.ld @@ -55,7 +55,7 @@ _Min_Stack_Size = 0x1000; /* required amount of stack */ /* Specify the memory areas */ MEMORY { -FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 812K +FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1024K RAM1 (xrw) : ORIGIN = 0x20000004, LENGTH = 0x2FFFC RAM_SHARED (xrw) : ORIGIN = 0x20030000, LENGTH = 10K } @@ -173,7 +173,6 @@ SECTIONS { __free_flash_start__ = .; . = ORIGIN(FLASH) + LENGTH(FLASH); - __free_flash_end__ = .; } >FLASH /* Remove information from the standard libraries */ diff --git a/lib/STM32CubeWB b/lib/STM32CubeWB index 1c15728a..9e2dd9db 160000 --- a/lib/STM32CubeWB +++ b/lib/STM32CubeWB @@ -1 +1 @@ -Subproject commit 1c15728a3c08e42919024e2a3781862f7d6c86d7 +Subproject commit 9e2dd9db125fa53e0ec59f807eb8a052ab922583 diff --git a/make/rules.mk b/make/rules.mk index 79a24db3..48454638 100644 --- a/make/rules.mk +++ b/make/rules.mk @@ -88,22 +88,16 @@ debug: flash -ex "compare-sections" \ $(OBJ_DIR)/$(PROJECT).elf; \ +debug_other: + arm-none-eabi-gdb-py \ + -ex 'target extended-remote | openocd -c "gdb_port pipe" $(OPENOCD_OPTS)' \ + -ex "set confirm off" \ + -ex "source ../debug/PyCortexMDebug/PyCortexMDebug.py" \ + -ex "svd_load $(SVD_FILE)" \ + openocd: openocd $(OPENOCD_OPTS) -bm_debug: flash - set -m; blackmagic & echo $$! > $(OBJ_DIR)/agent.PID - arm-none-eabi-gdb-py \ - -ex "target extended-remote 127.0.0.1:2000" \ - -ex "set confirm off" \ - -ex "monitor debug_bmp enable"\ - -ex "monitor swdp_scan"\ - -ex "attach 1"\ - -ex "source ../debug/FreeRTOS/FreeRTOS.py" \ - $(OBJ_DIR)/$(PROJECT).elf; \ - kill `cat $(OBJ_DIR)/agent.PID`; \ - rm $(OBJ_DIR)/agent.PID - clean: @echo "\tCLEAN\t" @$(RM) $(OBJ_DIR)/* diff --git a/scripts/flash_core2_ble_swd.sh b/scripts/flash_core2_ble_swd.sh index df3c741f..1f04ba81 100755 --- a/scripts/flash_core2_ble_swd.sh +++ b/scripts/flash_core2_ble_swd.sh @@ -6,7 +6,7 @@ SCRIPT_DIR="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" COPRO_DIR="$PROJECT_DIR/lib/STM32CubeWB/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x" -STM32_Programmer_CLI -c port=swd -fwupgrade $COPRO_DIR/stm32wb5x_FUS_fw_1_0_2.bin 0x080EC000 || true +STM32_Programmer_CLI -c port=swd -fwupgrade $COPRO_DIR/stm32wb5x_FUS_fw_for_fus_0_5_3.bin 0x080EC000 || true STM32_Programmer_CLI -c port=swd STM32_Programmer_CLI -c port=swd -fwupgrade $COPRO_DIR/stm32wb5x_FUS_fw.bin 0x080EC000 || true @@ -14,7 +14,7 @@ STM32_Programmer_CLI -c port=swd STM32_Programmer_CLI -c port=swd -fwdelete -STM32_Programmer_CLI -c port=swd -fwupgrade $COPRO_DIR/stm32wb5x_BLE_Stack_full_fw.bin 0x080CB000 firstinstall=0 +STM32_Programmer_CLI -c port=swd -fwupgrade $COPRO_DIR/stm32wb5x_BLE_Stack_full_fw.bin 0x080CA000 firstinstall=0 STM32_Programmer_CLI -c port=swd -ob nSWBOOT0=1 nBOOT0=1 diff --git a/scripts/ob.data b/scripts/ob.data index 25a852a5..2c2d7f6f 100644 --- a/scripts/ob.data +++ b/scripts/ob.data @@ -14,7 +14,7 @@ IWDGSTOP:0x1:rw IWDGSW:0x1:rw IPCCDBA:0x0:rw ESE:0x1:r -SFSA:0xCB:r +SFSA:0xCA:r FSD:0x0:r DDS:0x1:r C2OPT:0x1:r @@ -22,7 +22,7 @@ NBRSD:0x0:r SNBRSA:0xF:r BRSD:0x0:r SBRSA:0xA:r -SBRV:0x32C00:r +SBRV:0x32800:r PCROP1A_STRT:0x1FF:r PCROP1A_END:0x0:r PCROP_RDP:0x1:r