diff --git a/applications/debug/accessor/helpers/wiegand.cpp b/applications/debug/accessor/helpers/wiegand.cpp index 10b284eaa..f20b09120 100644 --- a/applications/debug/accessor/helpers/wiegand.cpp +++ b/applications/debug/accessor/helpers/wiegand.cpp @@ -2,12 +2,12 @@ #include #include -volatile unsigned long WIEGAND::_cardTempHigh = 0; -volatile unsigned long WIEGAND::_cardTemp = 0; -volatile unsigned long WIEGAND::_lastWiegand = 0; +unsigned long WIEGAND::_cardTempHigh = 0; +unsigned long WIEGAND::_cardTemp = 0; +unsigned long WIEGAND::_lastWiegand = 0; unsigned long WIEGAND::_code = 0; unsigned long WIEGAND::_codeHigh = 0; -volatile int WIEGAND::_bitCount = 0; +int WIEGAND::_bitCount = 0; int WIEGAND::_wiegandType = 0; constexpr uint32_t clocks_in_ms = 64 * 1000; @@ -98,10 +98,7 @@ void WIEGAND::ReadD1() { _lastWiegand = DWT->CYCCNT; // Keep track of last wiegand bit received } -unsigned long WIEGAND::GetCardId( - volatile unsigned long* codehigh, - volatile unsigned long* codelow, - char bitlength) { +unsigned long WIEGAND::GetCardId(unsigned long* codehigh, unsigned long* codelow, char bitlength) { if(bitlength == 26) // EM tag return (*codelow & 0x1FFFFFE) >> 1; diff --git a/applications/debug/accessor/helpers/wiegand.h b/applications/debug/accessor/helpers/wiegand.h index 8127f4286..be80f94cd 100644 --- a/applications/debug/accessor/helpers/wiegand.h +++ b/applications/debug/accessor/helpers/wiegand.h @@ -15,15 +15,13 @@ public: private: static bool DoWiegandConversion(); - static unsigned long GetCardId( - volatile unsigned long* codehigh, - volatile unsigned long* codelow, - char bitlength); + static unsigned long + GetCardId(unsigned long* codehigh, unsigned long* codelow, char bitlength); - static volatile unsigned long _cardTempHigh; - static volatile unsigned long _cardTemp; - static volatile unsigned long _lastWiegand; - static volatile int _bitCount; + static unsigned long _cardTempHigh; + static unsigned long _cardTemp; + static unsigned long _lastWiegand; + static int _bitCount; static int _wiegandType; static unsigned long _code; static unsigned long _codeHigh; diff --git a/applications/debug/battery_test_app/battery_test_app.c b/applications/debug/battery_test_app/battery_test_app.c index eabf3c04b..82c814ef4 100644 --- a/applications/debug/battery_test_app/battery_test_app.c +++ b/applications/debug/battery_test_app/battery_test_app.c @@ -12,7 +12,8 @@ void battery_test_dialog_callback(DialogExResult result, void* context) { } } -uint32_t battery_test_exit_confirm_view() { +uint32_t battery_test_exit_confirm_view(void* context) { + UNUSED(context); return BatteryTestAppViewExitDialog; } diff --git a/applications/drivers/subghz/cc1101_ext/cc1101_ext.c b/applications/drivers/subghz/cc1101_ext/cc1101_ext.c index 5bbfc9f95..5c67579cc 100644 --- a/applications/drivers/subghz/cc1101_ext/cc1101_ext.c +++ b/applications/drivers/subghz/cc1101_ext/cc1101_ext.c @@ -548,7 +548,8 @@ static bool subghz_device_cc1101_ext_stop_debug() { return ret; } -static void subghz_device_cc1101_ext_capture_ISR() { +static void subghz_device_cc1101_ext_capture_ISR(void* context) { + UNUSED(context); if(!furi_hal_gpio_read(subghz_device_cc1101_ext->g0_pin)) { if(subghz_device_cc1101_ext->async_rx.capture_callback) { if(subghz_device_cc1101_ext->async_mirror_pin != NULL) @@ -727,7 +728,8 @@ static void subghz_device_cc1101_ext_async_tx_refill(uint32_t* buffer, size_t sa } } -static void subghz_device_cc1101_ext_async_tx_dma_isr() { +static void subghz_device_cc1101_ext_async_tx_dma_isr(void* context) { + UNUSED(context); furi_assert(subghz_device_cc1101_ext->state == SubGhzDeviceCC1101ExtStateAsyncTx); #if SUBGHZ_DEVICE_CC1101_EXT_DMA_CH3_CHANNEL == LL_DMA_CHANNEL_3 diff --git a/applications/examples/example_plugins_advanced/app_api_table.cpp b/applications/examples/example_plugins_advanced/app_api_table.cpp index aacfb8c18..db15c84d1 100644 --- a/applications/examples/example_plugins_advanced/app_api_table.cpp +++ b/applications/examples/example_plugins_advanced/app_api_table.cpp @@ -18,8 +18,8 @@ constexpr HashtableApiInterface applicaton_hashtable_api_interface{ .resolver_callback = &elf_resolve_from_hashtable, }, /* pointers to application's API table boundaries */ - .table_cbegin = app_api_table.cbegin(), - .table_cend = app_api_table.cend(), + app_api_table.cbegin(), + app_api_table.cend(), }; /* Casting to generic resolver to use in Composite API resolver */ diff --git a/applications/main/nfc/api/nfc_app_api_table.cpp b/applications/main/nfc/api/nfc_app_api_table.cpp index ca190665b..6a769c9eb 100644 --- a/applications/main/nfc/api/nfc_app_api_table.cpp +++ b/applications/main/nfc/api/nfc_app_api_table.cpp @@ -18,8 +18,8 @@ constexpr HashtableApiInterface nfc_application_hashtable_api_interface{ .resolver_callback = &elf_resolve_from_hashtable, }, /* pointers to application's API table boundaries */ - .table_cbegin = nfc_app_api_table.cbegin(), - .table_cend = nfc_app_api_table.cend(), + nfc_app_api_table.cbegin(), + nfc_app_api_table.cend(), }; /* Casting to generic resolver to use in Composite API resolver */ diff --git a/applications/services/loader/firmware_api/firmware_api.cpp b/applications/services/loader/firmware_api/firmware_api.cpp index 47554f628..833f99abe 100644 --- a/applications/services/loader/firmware_api/firmware_api.cpp +++ b/applications/services/loader/firmware_api/firmware_api.cpp @@ -17,8 +17,8 @@ constexpr HashtableApiInterface mock_elf_api_interface{ .api_version_minor = 0, .resolver_callback = &elf_resolve_from_hashtable, }, - .table_cbegin = nullptr, - .table_cend = nullptr, + nullptr, + nullptr, }; const ElfApiInterface* const firmware_api_interface = &mock_elf_api_interface; @@ -29,8 +29,8 @@ constexpr HashtableApiInterface elf_api_interface{ .api_version_minor = (elf_api_version & 0xFFFF), .resolver_callback = &elf_resolve_from_hashtable, }, - .table_cbegin = elf_api_table.cbegin(), - .table_cend = elf_api_table.cend(), + elf_api_table.cbegin(), + elf_api_table.cend(), }; const ElfApiInterface* const firmware_api_interface = &elf_api_interface; #endif diff --git a/applications/system/js_app/plugin_api/app_api_table.cpp b/applications/system/js_app/plugin_api/app_api_table.cpp index aacfb8c18..db15c84d1 100644 --- a/applications/system/js_app/plugin_api/app_api_table.cpp +++ b/applications/system/js_app/plugin_api/app_api_table.cpp @@ -18,8 +18,8 @@ constexpr HashtableApiInterface applicaton_hashtable_api_interface{ .resolver_callback = &elf_resolve_from_hashtable, }, /* pointers to application's API table boundaries */ - .table_cbegin = app_api_table.cbegin(), - .table_cend = app_api_table.cend(), + app_api_table.cbegin(), + app_api_table.cend(), }; /* Casting to generic resolver to use in Composite API resolver */ diff --git a/fbt.cmd b/fbt.cmd index 20432be1c..d8e42f80c 100644 --- a/fbt.cmd +++ b/fbt.cmd @@ -1,5 +1,5 @@ @echo off -call "%~dp0scripts\toolchain\fbtenv.cmd" env +call "%~dp0scripts\toolchain\fbtenv.cmd" env || exit /b set SCONS_EP=python -m SCons diff --git a/lib/SConscript b/lib/SConscript index 812573932..0767dc0b2 100644 --- a/lib/SConscript +++ b/lib/SConscript @@ -48,4 +48,6 @@ libs = env.BuildModules( ], ) +env.Append(SDK_HEADERS=[File("#/lib/callback-connector/callback-connector.h")]) + Return("libs") diff --git a/lib/callback-connector/callback-connector.h b/lib/callback-connector/callback-connector.h index 10fec3e2d..dd99c5b26 100644 --- a/lib/callback-connector/callback-connector.h +++ b/lib/callback-connector/callback-connector.h @@ -1,10 +1,13 @@ #ifndef CALLBACKCONNECTOR_H #define CALLBACKCONNECTOR_H + +#ifdef __cplusplus #include namespace cbc { namespace Details { -template class FuncMemberWrapper { +template +class FuncMemberWrapper { public: FuncMemberWrapper() = delete; using member_fun_t = Ret (T::*)(Args...); @@ -43,7 +46,8 @@ template typename FuncMemberWrapper::const_member_fun_t FuncMemberWrapper::const_member{}; -template struct FunctorWrapper { +template +struct FunctorWrapper { public: static std::function functor; static auto instatiate(Functor fn) { @@ -75,7 +79,8 @@ auto const_instantiate(T* t, Ret (T::*ptr)(Args...) const) { return FuncMemberWrapper::instantiate(t, ptr); } -template auto const_instantiate(T* t, Func ptr) { +template +auto const_instantiate(T* t, Func ptr) { return const_instantiate(t, ptr); } @@ -91,9 +96,11 @@ auto obtain_connector(T* t, Ret (T::*ptr)(Args...) const) { return Details::FuncMemberWrapper::instantiate(t, ptr); } -template auto obtain_connector(Functor functor) { +template +auto obtain_connector(Functor functor) { return Details::deducer(std::move(functor), &Functor::operator()); } } //end of cbc scope +#endif // __cplusplus #endif // CALLBACKCONNECTOR_H diff --git a/scripts/debug/41-udev.rules b/scripts/debug/41-flipper.rules similarity index 72% rename from scripts/debug/41-udev.rules rename to scripts/debug/41-flipper.rules index 6b4b37b92..8663e99ab 100644 --- a/scripts/debug/41-udev.rules +++ b/scripts/debug/41-flipper.rules @@ -1,10 +1,17 @@ -#Flipper Zero serial port +# Flipper Zero serial port SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ATTRS{manufacturer}=="Flipper Devices Inc.", TAG+="uaccess", GROUP="dialout" -#Flipper Zero DFU + +# Flipper Zero DFU SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", ATTRS{manufacturer}=="STMicroelectronics", TAG+="uaccess", GROUP="dialout" -#Flipper ESP32s2 BlackMagic + +# Flipper ESP32s2 BlackMagic SUBSYSTEMS=="usb", ATTRS{idVendor}=="303a", ATTRS{idProduct}=="40??", ATTRS{manufacturer}=="Flipper Devices Inc.", TAG+="uaccess", GROUP="dialout" -#Flipper U2F + +# Flipper ESP32s2 in DAP mode +SUBSYSTEMS=="usb", ATTRS{idVendor}=="303a", ATTRS{idProduct}=="40??", ATTRS{manufacturer}=="CMSIS-DAP", TAG+="uaccess", GROUP="dialout" + +# Flipper U2F SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5741", ATTRS{manufacturer}=="Flipper Devices Inc.", ENV{ID_SECURITY_TOKEN}="1" -#ST-Link-V3 + +# ST-Link-V3 SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="37??", ATTRS{manufacturer}=="STMicroelectronics", TAG+="uaccess", GROUP="dialout" diff --git a/scripts/debug/README.md b/scripts/debug/README.md new file mode 100644 index 000000000..59f2bf0c1 --- /dev/null +++ b/scripts/debug/README.md @@ -0,0 +1,19 @@ +## Installing udev rules + +On Linux, unprivileged users need to be in the `dialout` group to access serial ports and other USB devices. + +To add your user to the `dialout` group, run the following command: + +```bash +sudo usermod -a -G dialout $USER +``` + +To install the udev rules needed for debugging & CLI access to Flipper, run the following command: + +```bash +sudo cp 41-flipper.rules /etc/udev/rules.d/ +sudo udevadm control --reload-rules +sudo udevadm trigger +``` + +Note that not all possible debug interfaces are listed the `41-flipper.rules` file. If your interface is not supported out of the box, you may need to add a a rule for it. You can do so by adding a new line to the file according to udev rules syntax. Use `lsusb -v` to find the vendor and product IDs of your device. \ No newline at end of file diff --git a/scripts/toolchain/fbtenv.cmd b/scripts/toolchain/fbtenv.cmd index 446f04aa7..dff8269f3 100644 --- a/scripts/toolchain/fbtenv.cmd +++ b/scripts/toolchain/fbtenv.cmd @@ -13,7 +13,7 @@ if not ["%FBT_NOENV%"] == [""] ( exit /b 0 ) -set "FLIPPER_TOOLCHAIN_VERSION=28" +set "FLIPPER_TOOLCHAIN_VERSION=32" if ["%FBT_TOOLCHAIN_PATH%"] == [""] ( set "FBT_TOOLCHAIN_PATH=%FBT_ROOT%" diff --git a/scripts/toolchain/fbtenv.sh b/scripts/toolchain/fbtenv.sh index 51cdfcb9c..14ad3644b 100755 --- a/scripts/toolchain/fbtenv.sh +++ b/scripts/toolchain/fbtenv.sh @@ -4,7 +4,7 @@ # public variables DEFAULT_SCRIPT_PATH="$(pwd -P)"; -FBT_TOOLCHAIN_VERSION="${FBT_TOOLCHAIN_VERSION:-"28"}"; +FBT_TOOLCHAIN_VERSION="${FBT_TOOLCHAIN_VERSION:-"32"}"; if [ -z ${FBT_TOOLCHAIN_PATH+x} ] ; then FBT_TOOLCHAIN_PATH_WAS_SET=0; @@ -208,7 +208,9 @@ fbtenv_show_unpack_percentage() fbtenv_unpack_toolchain() { echo "Unpacking toolchain to '$FBT_TOOLCHAIN_PATH/toolchain':"; - rm "$FBT_TOOLCHAIN_PATH/toolchain/current" || true; + if [ -L "$FBT_TOOLCHAIN_PATH/toolchain/current" ]; then + rm "$FBT_TOOLCHAIN_PATH/toolchain/current"; + fi tar -xvf "$FBT_TOOLCHAIN_PATH/toolchain/$TOOLCHAIN_TAR" -C "$FBT_TOOLCHAIN_PATH/toolchain" 2>&1 | fbtenv_show_unpack_percentage; mkdir -p "$FBT_TOOLCHAIN_PATH/toolchain" || return 1; mv "$FBT_TOOLCHAIN_PATH/toolchain/$TOOLCHAIN_DIR" "$TOOLCHAIN_ARCH_DIR" || return 1; diff --git a/scripts/toolchain/windows-toolchain-download.ps1 b/scripts/toolchain/windows-toolchain-download.ps1 index 11d8a564d..025f8341f 100644 --- a/scripts/toolchain/windows-toolchain-download.ps1 +++ b/scripts/toolchain/windows-toolchain-download.ps1 @@ -13,19 +13,21 @@ $toolchain_zip = "$toolchain_dist_folder-$toolchain_version.zip" $toolchain_zip_temp_path = "$download_dir\$toolchain_zip" $toolchain_dist_temp_path = "$download_dir\$toolchain_dist_folder" +try { + if (Test-Path -LiteralPath "$toolchain_target_path") { Write-Host -NoNewline "Removing old Windows toolchain.." Remove-Item -LiteralPath "$toolchain_target_path" -Force -Recurse Write-Host "done!" } -if (Test-path -Path "$toolchain_target_path\..\current") { +if (Test-path -LiteralPath "$toolchain_target_path\..\current") { Write-Host -NoNewline "Unlinking 'current'.." Remove-Item -LiteralPath "$toolchain_target_path\..\current" -Force Write-Host "done!" } -if (!(Test-Path -Path "$toolchain_zip_temp_path" -PathType Leaf)) { +if (!(Test-Path -LiteralPath "$toolchain_zip_temp_path" -PathType Leaf)) { Write-Host -NoNewline "Downloading Windows toolchain.." $wc = New-Object net.webclient $wc.Downloadfile("$toolchain_url", "$toolchain_zip_temp_path") @@ -57,4 +59,10 @@ Write-Host -NoNewline "Cleaning up temporary files.." Remove-Item -LiteralPath "$toolchain_zip_temp_path" -Force Write-Host "done!" -# dasdasd +} catch { + Write-Host "An error occurred" + Write-Host $_ + Write-Host "Please close VSCode and any other programs that may be using the toolchain and try again." + $host.SetShouldExit(1) + Exit 1 +} diff --git a/site_scons/cc.scons b/site_scons/cc.scons index 029f9d415..507cd2d12 100644 --- a/site_scons/cc.scons +++ b/site_scons/cc.scons @@ -3,10 +3,10 @@ Import("ENV") ENV.AppendUnique( CFLAGS=[ - "-std=gnu17", + "-std=gnu2x", ], CXXFLAGS=[ - "-std=c++17", + "-std=c++20", "-fno-rtti", "-fno-use-cxa-atexit", "-fno-exceptions", diff --git a/targets/f18/api_symbols.csv b/targets/f18/api_symbols.csv index bdfa8c7a4..f2190e43f 100644 --- a/targets/f18/api_symbols.csv +++ b/targets/f18/api_symbols.csv @@ -40,6 +40,7 @@ Header,+,applications/services/storage/storage.h,, Header,+,lib/bit_lib/bit_lib.h,, Header,+,lib/ble_profile/extra_profiles/hid_profile.h,, Header,+,lib/ble_profile/extra_services/hid_service.h,, +Header,+,lib/callback-connector/callback-connector.h,, Header,+,lib/datetime/datetime.h,, Header,+,lib/digital_signal/digital_sequence.h,, Header,+,lib/digital_signal/digital_signal.h,, diff --git a/targets/f7/api_symbols.csv b/targets/f7/api_symbols.csv index 03c12a66b..0a6cf8c36 100644 --- a/targets/f7/api_symbols.csv +++ b/targets/f7/api_symbols.csv @@ -41,6 +41,7 @@ Header,+,applications/services/storage/storage.h,, Header,+,lib/bit_lib/bit_lib.h,, Header,+,lib/ble_profile/extra_profiles/hid_profile.h,, Header,+,lib/ble_profile/extra_services/hid_service.h,, +Header,+,lib/callback-connector/callback-connector.h,, Header,+,lib/datetime/datetime.h,, Header,+,lib/digital_signal/digital_sequence.h,, Header,+,lib/digital_signal/digital_signal.h,, diff --git a/targets/f7/furi_hal/furi_hal_ibutton.c b/targets/f7/furi_hal/furi_hal_ibutton.c index f8f7e4966..bf1127a85 100644 --- a/targets/f7/furi_hal/furi_hal_ibutton.c +++ b/targets/f7/furi_hal/furi_hal_ibutton.c @@ -25,7 +25,8 @@ typedef struct { FuriHalIbutton* furi_hal_ibutton = NULL; -static void furi_hal_ibutton_emulate_isr() { +static void furi_hal_ibutton_emulate_isr(void* context) { + UNUSED(context); if(LL_TIM_IsActiveFlag_UPDATE(FURI_HAL_IBUTTON_TIMER)) { LL_TIM_ClearFlag_UPDATE(FURI_HAL_IBUTTON_TIMER); furi_hal_ibutton->callback(furi_hal_ibutton->context); diff --git a/targets/f7/furi_hal/furi_hal_infrared.c b/targets/f7/furi_hal/furi_hal_infrared.c index 03a16b70f..3cacc083d 100644 --- a/targets/f7/furi_hal/furi_hal_infrared.c +++ b/targets/f7/furi_hal/furi_hal_infrared.c @@ -97,7 +97,9 @@ bool furi_hal_infrared_get_debug_out_status(void) { return infrared_external_output; } -static void furi_hal_infrared_tim_rx_isr() { +static void furi_hal_infrared_tim_rx_isr(void* context) { + UNUSED(context); + static uint32_t previous_captured_ch2 = 0; /* Timeout */ @@ -262,7 +264,8 @@ static uint8_t furi_hal_infrared_get_current_dma_tx_buffer(void) { return buf_num; } -static void furi_hal_infrared_tx_dma_polarity_isr() { +static void furi_hal_infrared_tx_dma_polarity_isr(void* context) { + UNUSED(context); #if INFRARED_DMA_CH1_CHANNEL == LL_DMA_CHANNEL_1 if(LL_DMA_IsActiveFlag_TE1(INFRARED_DMA)) { LL_DMA_ClearFlag_TE1(INFRARED_DMA); @@ -284,7 +287,8 @@ static void furi_hal_infrared_tx_dma_polarity_isr() { #endif } -static void furi_hal_infrared_tx_dma_isr() { +static void furi_hal_infrared_tx_dma_isr(void* context) { + UNUSED(context); #if INFRARED_DMA_CH2_CHANNEL == LL_DMA_CHANNEL_2 if(LL_DMA_IsActiveFlag_TE2(INFRARED_DMA)) { LL_DMA_ClearFlag_TE2(INFRARED_DMA); diff --git a/targets/f7/furi_hal/furi_hal_nfc_irq.c b/targets/f7/furi_hal/furi_hal_nfc_irq.c index 170d8dee6..edacc52bf 100644 --- a/targets/f7/furi_hal/furi_hal_nfc_irq.c +++ b/targets/f7/furi_hal/furi_hal_nfc_irq.c @@ -3,7 +3,8 @@ #include #include -static void furi_hal_nfc_int_callback() { +static void furi_hal_nfc_int_callback(void* context) { + UNUSED(context); furi_hal_nfc_event_set(FuriHalNfcEventInternalTypeIrq); } diff --git a/targets/f7/furi_hal/furi_hal_rfid.c b/targets/f7/furi_hal/furi_hal_rfid.c index 67f11d6ff..c40932922 100644 --- a/targets/f7/furi_hal/furi_hal_rfid.c +++ b/targets/f7/furi_hal/furi_hal_rfid.c @@ -315,7 +315,8 @@ void furi_hal_rfid_tim_read_capture_stop() { furi_hal_bus_disable(RFID_CAPTURE_TIM_BUS); } -static void furi_hal_rfid_dma_isr() { +static void furi_hal_rfid_dma_isr(void* context) { + UNUSED(context); #if RFID_DMA_CH1_CHANNEL == LL_DMA_CHANNEL_1 if(LL_DMA_IsActiveFlag_HT1(RFID_DMA)) { LL_DMA_ClearFlag_HT1(RFID_DMA); diff --git a/targets/f7/furi_hal/furi_hal_spi.c b/targets/f7/furi_hal/furi_hal_spi.c index 98ca71af3..d295ad196 100644 --- a/targets/f7/furi_hal/furi_hal_spi.c +++ b/targets/f7/furi_hal/furi_hal_spi.c @@ -169,7 +169,8 @@ bool furi_hal_spi_bus_trx( return ret; } -static void spi_dma_isr() { +static void spi_dma_isr(void* context) { + UNUSED(context); #if SPI_DMA_RX_CHANNEL == LL_DMA_CHANNEL_6 if(LL_DMA_IsActiveFlag_TC6(SPI_DMA) && LL_DMA_IsEnabledIT_TC(SPI_DMA_RX_DEF)) { LL_DMA_ClearFlag_TC6(SPI_DMA); diff --git a/targets/f7/furi_hal/furi_hal_subghz.c b/targets/f7/furi_hal/furi_hal_subghz.c index 7c4af4411..6ebaaf2b0 100644 --- a/targets/f7/furi_hal/furi_hal_subghz.c +++ b/targets/f7/furi_hal/furi_hal_subghz.c @@ -466,7 +466,8 @@ volatile uint32_t furi_hal_subghz_capture_delta_duration = 0; volatile FuriHalSubGhzCaptureCallback furi_hal_subghz_capture_callback = NULL; volatile void* furi_hal_subghz_capture_callback_context = NULL; -static void furi_hal_subghz_capture_ISR() { +static void furi_hal_subghz_capture_ISR(void* context) { + UNUSED(context); // Channel 1 if(LL_TIM_IsActiveFlag_CC1(TIM2)) { LL_TIM_ClearFlag_CC1(TIM2); @@ -701,7 +702,8 @@ static void furi_hal_subghz_async_tx_refill(uint32_t* buffer, size_t samples) { } } -static void furi_hal_subghz_async_tx_dma_isr() { +static void furi_hal_subghz_async_tx_dma_isr(void* context) { + UNUSED(context); furi_assert(furi_hal_subghz.state == SubGhzStateAsyncTx); #if SUBGHZ_DMA_CH1_CHANNEL == LL_DMA_CHANNEL_1 diff --git a/targets/f7/src/update.c b/targets/f7/src/update.c index e9228a6e9..42ac90e7b 100644 --- a/targets/f7/src/update.c +++ b/targets/f7/src/update.c @@ -18,7 +18,7 @@ static FATFS* pfs = NULL; #define CHECK_FRESULT(result) \ { \ if((result) != FR_OK) { \ - return false; \ + return 0; \ } \ }