mirror of
https://github.com/DarkFlippers/unleashed-firmware
synced 2024-11-10 06:54:19 +00:00
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:
parent
4e1089ec49
commit
bc309cebe6
27 changed files with 126 additions and 63 deletions
|
@ -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));
|
||||||
|
|
|
@ -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
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
5
fbt
|
@ -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";
|
||||||
|
|
2
fbt.cmd
2
fbt.cmd
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
19
scripts/debug/README.md
Normal 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.
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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; \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue