Toolchain fixes (#3451)

toolchain: updated to v33 with debugging & other fixes
toolchain: better error handling during update/env configuration process
debugging: improved udev rules file, added readme on installation
firmware: bumped compiler C/C++ standards (stricter code checks)
firmware: fixed warnings emerging from newer standards
ufbt: FBT_NOENV is now also supported by ufbt
fbt: added ccache-related variables to env forward list on Windows
This commit is contained in:
hedger 2024-02-26 16:16:19 +04:00 committed by GitHub
parent 4e1089ec49
commit bc309cebe6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
27 changed files with 126 additions and 63 deletions

View file

@ -1,6 +1,6 @@
#include "accessor_view_manager.h" #include "accessor_view_manager.h"
#include "accessor_event.h" #include "accessor_event.h"
#include <callback-connector.h> #include "callback_connector.h"
AccessorAppViewManager::AccessorAppViewManager() { AccessorAppViewManager::AccessorAppViewManager() {
event_queue = furi_message_queue_alloc(10, sizeof(AccessorEvent)); event_queue = furi_message_queue_alloc(10, sizeof(AccessorEvent));

View file

@ -1,10 +1,13 @@
#ifndef CALLBACKCONNECTOR_H #ifndef CALLBACKCONNECTOR_H
#define CALLBACKCONNECTOR_H #define CALLBACKCONNECTOR_H
#ifdef __cplusplus
#include <functional> #include <functional>
namespace cbc { namespace cbc {
namespace Details { namespace Details {
template <std::size_t Tag, typename T, typename Ret, typename... Args> class FuncMemberWrapper { template <std::size_t Tag, typename T, typename Ret, typename... Args>
class FuncMemberWrapper {
public: public:
FuncMemberWrapper() = delete; FuncMemberWrapper() = delete;
using member_fun_t = Ret (T::*)(Args...); using member_fun_t = Ret (T::*)(Args...);
@ -43,7 +46,8 @@ template <std::size_t Tag, typename T, typename Ret, typename... Args>
typename FuncMemberWrapper<Tag, T, Ret, Args...>::const_member_fun_t typename FuncMemberWrapper<Tag, T, Ret, Args...>::const_member_fun_t
FuncMemberWrapper<Tag, T, Ret, Args...>::const_member{}; FuncMemberWrapper<Tag, T, Ret, Args...>::const_member{};
template <typename Functor, typename Ret, typename... Args> struct FunctorWrapper { template <typename Functor, typename Ret, typename... Args>
struct FunctorWrapper {
public: public:
static std::function<Ret(Args...)> functor; static std::function<Ret(Args...)> functor;
static auto instatiate(Functor fn) { static auto instatiate(Functor fn) {
@ -75,7 +79,8 @@ auto const_instantiate(T* t, Ret (T::*ptr)(Args...) const) {
return FuncMemberWrapper<tag, T, Ret, Args...>::instantiate(t, ptr); return FuncMemberWrapper<tag, T, Ret, Args...>::instantiate(t, ptr);
} }
template <std::size_t tag, typename T, typename Func> auto const_instantiate(T* t, Func ptr) { template <std::size_t tag, typename T, typename Func>
auto const_instantiate(T* t, Func ptr) {
return const_instantiate(t, ptr); return const_instantiate(t, ptr);
} }
@ -91,9 +96,11 @@ auto obtain_connector(T* t, Ret (T::*ptr)(Args...) const) {
return Details::FuncMemberWrapper<tag, T, Ret, Args...>::instantiate(t, ptr); return Details::FuncMemberWrapper<tag, T, Ret, Args...>::instantiate(t, ptr);
} }
template <typename Functor> auto obtain_connector(Functor functor) { template <typename Functor>
auto obtain_connector(Functor functor) {
return Details::deducer(std::move(functor), &Functor::operator()); return Details::deducer(std::move(functor), &Functor::operator());
} }
} //end of cbc scope } //end of cbc scope
#endif // __cplusplus
#endif // CALLBACKCONNECTOR_H #endif // CALLBACKCONNECTOR_H

View file

@ -2,12 +2,12 @@
#include <furi.h> #include <furi.h>
#include <furi_hal.h> #include <furi_hal.h>
volatile unsigned long WIEGAND::_cardTempHigh = 0; unsigned long WIEGAND::_cardTempHigh = 0;
volatile unsigned long WIEGAND::_cardTemp = 0; unsigned long WIEGAND::_cardTemp = 0;
volatile unsigned long WIEGAND::_lastWiegand = 0; unsigned long WIEGAND::_lastWiegand = 0;
unsigned long WIEGAND::_code = 0; unsigned long WIEGAND::_code = 0;
unsigned long WIEGAND::_codeHigh = 0; unsigned long WIEGAND::_codeHigh = 0;
volatile int WIEGAND::_bitCount = 0; int WIEGAND::_bitCount = 0;
int WIEGAND::_wiegandType = 0; int WIEGAND::_wiegandType = 0;
constexpr uint32_t clocks_in_ms = 64 * 1000; 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 _lastWiegand = DWT->CYCCNT; // Keep track of last wiegand bit received
} }
unsigned long WIEGAND::GetCardId( unsigned long WIEGAND::GetCardId(unsigned long* codehigh, unsigned long* codelow, char bitlength) {
volatile unsigned long* codehigh,
volatile unsigned long* codelow,
char bitlength) {
if(bitlength == 26) // EM tag if(bitlength == 26) // EM tag
return (*codelow & 0x1FFFFFE) >> 1; return (*codelow & 0x1FFFFFE) >> 1;

View file

@ -15,15 +15,13 @@ public:
private: private:
static bool DoWiegandConversion(); static bool DoWiegandConversion();
static unsigned long GetCardId( static unsigned long
volatile unsigned long* codehigh, GetCardId(unsigned long* codehigh, unsigned long* codelow, char bitlength);
volatile unsigned long* codelow,
char bitlength);
static volatile unsigned long _cardTempHigh; static unsigned long _cardTempHigh;
static volatile unsigned long _cardTemp; static unsigned long _cardTemp;
static volatile unsigned long _lastWiegand; static unsigned long _lastWiegand;
static volatile int _bitCount; static int _bitCount;
static int _wiegandType; static int _wiegandType;
static unsigned long _code; static unsigned long _code;
static unsigned long _codeHigh; static unsigned long _codeHigh;

View file

@ -1,7 +1,7 @@
#include "../accessor_app.h" #include "../accessor_app.h"
#include "../accessor_view_manager.h" #include "../accessor_view_manager.h"
#include "../accessor_event.h" #include "../accessor_event.h"
#include <callback-connector.h> #include "callback_connector.h"
#include "accessor_scene_start.h" #include "accessor_scene_start.h"
void AccessorSceneStart::on_enter(AccessorApp* app) { void AccessorSceneStart::on_enter(AccessorApp* app) {

View file

@ -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; return BatteryTestAppViewExitDialog;
} }

View file

@ -495,7 +495,8 @@ static bool subghz_device_cc1101_ext_stop_debug() {
return ret; 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(!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_rx.capture_callback) {
if(subghz_device_cc1101_ext->async_mirror_pin != NULL) if(subghz_device_cc1101_ext->async_mirror_pin != NULL)
@ -674,7 +675,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); furi_assert(subghz_device_cc1101_ext->state == SubGhzDeviceCC1101ExtStateAsyncTx);
#if SUBGHZ_DEVICE_CC1101_EXT_DMA_CH3_CHANNEL == LL_DMA_CHANNEL_3 #if SUBGHZ_DEVICE_CC1101_EXT_DMA_CH3_CHANNEL == LL_DMA_CHANNEL_3

View file

@ -18,8 +18,8 @@ constexpr HashtableApiInterface applicaton_hashtable_api_interface{
.resolver_callback = &elf_resolve_from_hashtable, .resolver_callback = &elf_resolve_from_hashtable,
}, },
/* pointers to application's API table boundaries */ /* pointers to application's API table boundaries */
.table_cbegin = app_api_table.cbegin(), app_api_table.cbegin(),
.table_cend = app_api_table.cend(), app_api_table.cend(),
}; };
/* Casting to generic resolver to use in Composite API resolver */ /* Casting to generic resolver to use in Composite API resolver */

View file

@ -18,8 +18,8 @@ constexpr HashtableApiInterface nfc_application_hashtable_api_interface{
.resolver_callback = &elf_resolve_from_hashtable, .resolver_callback = &elf_resolve_from_hashtable,
}, },
/* pointers to application's API table boundaries */ /* pointers to application's API table boundaries */
.table_cbegin = nfc_app_api_table.cbegin(), nfc_app_api_table.cbegin(),
.table_cend = nfc_app_api_table.cend(), nfc_app_api_table.cend(),
}; };
/* Casting to generic resolver to use in Composite API resolver */ /* Casting to generic resolver to use in Composite API resolver */

View file

@ -17,8 +17,8 @@ constexpr HashtableApiInterface mock_elf_api_interface{
.api_version_minor = 0, .api_version_minor = 0,
.resolver_callback = &elf_resolve_from_hashtable, .resolver_callback = &elf_resolve_from_hashtable,
}, },
.table_cbegin = nullptr, nullptr,
.table_cend = nullptr, nullptr,
}; };
const ElfApiInterface* const firmware_api_interface = &mock_elf_api_interface; 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), .api_version_minor = (elf_api_version & 0xFFFF),
.resolver_callback = &elf_resolve_from_hashtable, .resolver_callback = &elf_resolve_from_hashtable,
}, },
.table_cbegin = elf_api_table.cbegin(), elf_api_table.cbegin(),
.table_cend = elf_api_table.cend(), elf_api_table.cend(),
}; };
const ElfApiInterface* const firmware_api_interface = &elf_api_interface; const ElfApiInterface* const firmware_api_interface = &elf_api_interface;
#endif #endif

View file

@ -18,8 +18,8 @@ constexpr HashtableApiInterface applicaton_hashtable_api_interface{
.resolver_callback = &elf_resolve_from_hashtable, .resolver_callback = &elf_resolve_from_hashtable,
}, },
/* pointers to application's API table boundaries */ /* pointers to application's API table boundaries */
.table_cbegin = app_api_table.cbegin(), app_api_table.cbegin(),
.table_cend = app_api_table.cend(), app_api_table.cend(),
}; };
/* Casting to generic resolver to use in Composite API resolver */ /* Casting to generic resolver to use in Composite API resolver */

5
fbt
View file

@ -12,15 +12,12 @@ SCONS_DEFAULT_FLAGS="--warn=target-not-built";
SCONS_EP="python3 -m SCons"; SCONS_EP="python3 -m SCons";
# public variables # public variables
FBT_NOENV="${FBT_NOENV:-""}";
FBT_NO_SYNC="${FBT_NO_SYNC:-""}"; FBT_NO_SYNC="${FBT_NO_SYNC:-""}";
FBT_TOOLCHAIN_PATH="${FBT_TOOLCHAIN_PATH:-$SCRIPT_PATH}"; FBT_TOOLCHAIN_PATH="${FBT_TOOLCHAIN_PATH:-$SCRIPT_PATH}";
FBT_VERBOSE="${FBT_VERBOSE:-""}"; FBT_VERBOSE="${FBT_VERBOSE:-""}";
FBT_GIT_SUBMODULE_SHALLOW="${FBT_GIT_SUBMODULE_SHALLOW:-""}"; FBT_GIT_SUBMODULE_SHALLOW="${FBT_GIT_SUBMODULE_SHALLOW:-""}";
if [ -z "$FBT_NOENV" ]; then FBT_VERBOSE="$FBT_VERBOSE" . "$SCRIPT_PATH/scripts/toolchain/fbtenv.sh";
FBT_VERBOSE="$FBT_VERBOSE" . "$SCRIPT_PATH/scripts/toolchain/fbtenv.sh";
fi
if [ -z "$FBT_VERBOSE" ]; then if [ -z "$FBT_VERBOSE" ]; then
SCONS_DEFAULT_FLAGS="$SCONS_DEFAULT_FLAGS -Q"; SCONS_DEFAULT_FLAGS="$SCONS_DEFAULT_FLAGS -Q";

View file

@ -1,5 +1,5 @@
@echo off @echo off
call "%~dp0scripts\toolchain\fbtenv.cmd" env call "%~dp0scripts\toolchain\fbtenv.cmd" env || exit /b
set SCONS_EP=python -m SCons set SCONS_EP=python -m SCons

View file

@ -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" 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" 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" 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" 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" SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="37??", ATTRS{manufacturer}=="STMicroelectronics", TAG+="uaccess", GROUP="dialout"

19
scripts/debug/README.md Normal file
View file

@ -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.

View file

@ -23,6 +23,8 @@ FORWARDED_ENV_VARIABLES = [
"PYTHONNOUSERSITE", "PYTHONNOUSERSITE",
"TMP", "TMP",
"TEMP", "TEMP",
"USERPROFILE",
"LOCALAPPDATA",
# ccache # ccache
"CCACHE_DISABLE", "CCACHE_DISABLE",
# Colors for tools # Colors for tools

View file

@ -13,7 +13,7 @@ if not ["%FBT_NOENV%"] == [""] (
exit /b 0 exit /b 0
) )
set "FLIPPER_TOOLCHAIN_VERSION=28" set "FLIPPER_TOOLCHAIN_VERSION=33"
if ["%FBT_TOOLCHAIN_PATH%"] == [""] ( if ["%FBT_TOOLCHAIN_PATH%"] == [""] (
set "FBT_TOOLCHAIN_PATH=%FBT_ROOT%" set "FBT_TOOLCHAIN_PATH=%FBT_ROOT%"
@ -58,3 +58,5 @@ if not "%1" == "env" (
cd "%FBT_ROOT%" cd "%FBT_ROOT%"
cmd /k cmd /k
) )
exit /b 0

View file

@ -4,7 +4,7 @@
# public variables # public variables
DEFAULT_SCRIPT_PATH="$(pwd -P)"; DEFAULT_SCRIPT_PATH="$(pwd -P)";
FBT_TOOLCHAIN_VERSION="${FBT_TOOLCHAIN_VERSION:-"28"}"; FBT_TOOLCHAIN_VERSION="${FBT_TOOLCHAIN_VERSION:-"33"}";
if [ -z ${FBT_TOOLCHAIN_PATH+x} ] ; then if [ -z ${FBT_TOOLCHAIN_PATH+x} ] ; then
FBT_TOOLCHAIN_PATH_WAS_SET=0; FBT_TOOLCHAIN_PATH_WAS_SET=0;
@ -76,6 +76,14 @@ fbtenv_restore_env()
unset FBT_TOOLCHAIN_PATH; unset FBT_TOOLCHAIN_PATH;
} }
fbtenv_check_if_noenv_set()
{
if [ -n "${FBT_NOENV:-""}" ]; then
return 1;
fi
return 0;
}
fbtenv_check_sourced() fbtenv_check_sourced()
{ {
if [ -n "${FBT_SKIP_CHECK_SOURCED:-""}" ]; then if [ -n "${FBT_SKIP_CHECK_SOURCED:-""}" ]; then
@ -203,7 +211,9 @@ fbtenv_show_unpack_percentage()
fbtenv_unpack_toolchain() fbtenv_unpack_toolchain()
{ {
echo "Unpacking toolchain to '$FBT_TOOLCHAIN_PATH/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; 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; mkdir -p "$FBT_TOOLCHAIN_PATH/toolchain" || return 1;
mv "$FBT_TOOLCHAIN_PATH/toolchain/$TOOLCHAIN_DIR" "$TOOLCHAIN_ARCH_DIR" || return 1; mv "$FBT_TOOLCHAIN_PATH/toolchain/$TOOLCHAIN_DIR" "$TOOLCHAIN_ARCH_DIR" || return 1;
@ -296,6 +306,9 @@ fbtenv_print_config()
fbtenv_main() fbtenv_main()
{ {
if ! fbtenv_check_if_noenv_set; then
return 0;
fi
fbtenv_check_sourced || return 1; fbtenv_check_sourced || return 1;
fbtenv_get_kernel_type || return 1; fbtenv_get_kernel_type || return 1;
if [ "$1" = "--restore" ]; then if [ "$1" = "--restore" ]; then

View file

@ -13,19 +13,21 @@ $toolchain_zip = "$toolchain_dist_folder-$toolchain_version.zip"
$toolchain_zip_temp_path = "$download_dir\$toolchain_zip" $toolchain_zip_temp_path = "$download_dir\$toolchain_zip"
$toolchain_dist_temp_path = "$download_dir\$toolchain_dist_folder" $toolchain_dist_temp_path = "$download_dir\$toolchain_dist_folder"
try {
if (Test-Path -LiteralPath "$toolchain_target_path") { if (Test-Path -LiteralPath "$toolchain_target_path") {
Write-Host -NoNewline "Removing old Windows toolchain.." Write-Host -NoNewline "Removing old Windows toolchain.."
Remove-Item -LiteralPath "$toolchain_target_path" -Force -Recurse Remove-Item -LiteralPath "$toolchain_target_path" -Force -Recurse
Write-Host "done!" Write-Host "done!"
} }
if (Test-path -Path "$toolchain_target_path\..\current") { if (Test-path -LiteralPath "$toolchain_target_path\..\current") {
Write-Host -NoNewline "Unlinking 'current'.." Write-Host -NoNewline "Unlinking 'current'.."
Remove-Item -LiteralPath "$toolchain_target_path\..\current" -Force Remove-Item -LiteralPath "$toolchain_target_path\..\current" -Force
Write-Host "done!" 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.." Write-Host -NoNewline "Downloading Windows toolchain.."
$wc = New-Object net.webclient $wc = New-Object net.webclient
$wc.Downloadfile("$toolchain_url", "$toolchain_zip_temp_path") $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 Remove-Item -LiteralPath "$toolchain_zip_temp_path" -Force
Write-Host "done!" 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
}

View file

@ -3,10 +3,10 @@ Import("ENV")
ENV.AppendUnique( ENV.AppendUnique(
CFLAGS=[ CFLAGS=[
"-std=gnu17", "-std=gnu2x",
], ],
CXXFLAGS=[ CXXFLAGS=[
"-std=c++17", "-std=c++20",
"-fno-rtti", "-fno-rtti",
"-fno-use-cxa-atexit", "-fno-use-cxa-atexit",
"-fno-exceptions", "-fno-exceptions",

View file

@ -25,7 +25,8 @@ typedef struct {
FuriHalIbutton* furi_hal_ibutton = NULL; 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)) { if(LL_TIM_IsActiveFlag_UPDATE(FURI_HAL_IBUTTON_TIMER)) {
LL_TIM_ClearFlag_UPDATE(FURI_HAL_IBUTTON_TIMER); LL_TIM_ClearFlag_UPDATE(FURI_HAL_IBUTTON_TIMER);
furi_hal_ibutton->callback(furi_hal_ibutton->context); furi_hal_ibutton->callback(furi_hal_ibutton->context);

View file

@ -94,7 +94,9 @@ static uint8_t furi_hal_infrared_get_current_dma_tx_buffer(void);
static void furi_hal_infrared_tx_dma_polarity_isr(); static void furi_hal_infrared_tx_dma_polarity_isr();
static void furi_hal_infrared_tx_dma_isr(); static void furi_hal_infrared_tx_dma_isr();
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; static uint32_t previous_captured_ch2 = 0;
/* Timeout */ /* Timeout */
@ -259,7 +261,8 @@ static uint8_t furi_hal_infrared_get_current_dma_tx_buffer(void) {
return buf_num; 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 INFRARED_DMA_CH1_CHANNEL == LL_DMA_CHANNEL_1
if(LL_DMA_IsActiveFlag_TE1(INFRARED_DMA)) { if(LL_DMA_IsActiveFlag_TE1(INFRARED_DMA)) {
LL_DMA_ClearFlag_TE1(INFRARED_DMA); LL_DMA_ClearFlag_TE1(INFRARED_DMA);
@ -281,7 +284,8 @@ static void furi_hal_infrared_tx_dma_polarity_isr() {
#endif #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 INFRARED_DMA_CH2_CHANNEL == LL_DMA_CHANNEL_2
if(LL_DMA_IsActiveFlag_TE2(INFRARED_DMA)) { if(LL_DMA_IsActiveFlag_TE2(INFRARED_DMA)) {
LL_DMA_ClearFlag_TE2(INFRARED_DMA); LL_DMA_ClearFlag_TE2(INFRARED_DMA);

View file

@ -3,7 +3,8 @@
#include <lib/drivers/st25r3916.h> #include <lib/drivers/st25r3916.h>
#include <furi_hal_resources.h> #include <furi_hal_resources.h>
static void furi_hal_nfc_int_callback() { static void furi_hal_nfc_int_callback(void* context) {
UNUSED(context);
furi_hal_nfc_event_set(FuriHalNfcEventInternalTypeIrq); furi_hal_nfc_event_set(FuriHalNfcEventInternalTypeIrq);
} }

View file

@ -315,7 +315,8 @@ void furi_hal_rfid_tim_read_capture_stop() {
furi_hal_bus_disable(RFID_CAPTURE_TIM_BUS); 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 RFID_DMA_CH1_CHANNEL == LL_DMA_CHANNEL_1
if(LL_DMA_IsActiveFlag_HT1(RFID_DMA)) { if(LL_DMA_IsActiveFlag_HT1(RFID_DMA)) {
LL_DMA_ClearFlag_HT1(RFID_DMA); LL_DMA_ClearFlag_HT1(RFID_DMA);

View file

@ -169,7 +169,8 @@ bool furi_hal_spi_bus_trx(
return ret; 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 SPI_DMA_RX_CHANNEL == LL_DMA_CHANNEL_6
if(LL_DMA_IsActiveFlag_TC6(SPI_DMA) && LL_DMA_IsEnabledIT_TC(SPI_DMA_RX_DEF)) { if(LL_DMA_IsActiveFlag_TC6(SPI_DMA) && LL_DMA_IsEnabledIT_TC(SPI_DMA_RX_DEF)) {
LL_DMA_ClearFlag_TC6(SPI_DMA); LL_DMA_ClearFlag_TC6(SPI_DMA);

View file

@ -413,7 +413,8 @@ volatile uint32_t furi_hal_subghz_capture_delta_duration = 0;
volatile FuriHalSubGhzCaptureCallback furi_hal_subghz_capture_callback = NULL; volatile FuriHalSubGhzCaptureCallback furi_hal_subghz_capture_callback = NULL;
volatile void* furi_hal_subghz_capture_callback_context = 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 // Channel 1
if(LL_TIM_IsActiveFlag_CC1(TIM2)) { if(LL_TIM_IsActiveFlag_CC1(TIM2)) {
LL_TIM_ClearFlag_CC1(TIM2); LL_TIM_ClearFlag_CC1(TIM2);
@ -647,7 +648,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); furi_assert(furi_hal_subghz.state == SubGhzStateAsyncTx);
#if SUBGHZ_DMA_CH1_CHANNEL == LL_DMA_CHANNEL_1 #if SUBGHZ_DMA_CH1_CHANNEL == LL_DMA_CHANNEL_1

View file

@ -18,7 +18,7 @@ static FATFS* pfs = NULL;
#define CHECK_FRESULT(result) \ #define CHECK_FRESULT(result) \
{ \ { \
if((result) != FR_OK) { \ if((result) != FR_OK) { \
return false; \ return 0; \
} \ } \
} }