mirror of
https://github.com/DarkFlippers/unleashed-firmware.git
synced 2024-12-24 13:52:38 +03:00
Merge remote-tracking branch 'OFW/hedger/toochain_29' into new_c_version
This commit is contained in:
commit
16d1e71d6e
@ -2,12 +2,12 @@
|
||||
#include <furi.h>
|
||||
#include <furi_hal.h>
|
||||
|
||||
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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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 */
|
||||
|
@ -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 */
|
||||
|
@ -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
|
||||
|
@ -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 */
|
||||
|
2
fbt.cmd
2
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
|
||||
|
||||
|
@ -48,4 +48,6 @@ libs = env.BuildModules(
|
||||
],
|
||||
)
|
||||
|
||||
env.Append(SDK_HEADERS=[File("#/lib/callback-connector/callback-connector.h")])
|
||||
|
||||
Return("libs")
|
||||
|
@ -1,10 +1,13 @@
|
||||
#ifndef CALLBACKCONNECTOR_H
|
||||
#define CALLBACKCONNECTOR_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
#include <functional>
|
||||
namespace cbc {
|
||||
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:
|
||||
FuncMemberWrapper() = delete;
|
||||
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
|
||||
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:
|
||||
static std::function<Ret(Args...)> functor;
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@ -91,9 +96,11 @@ auto obtain_connector(T* t, Ret (T::*ptr)(Args...) const) {
|
||||
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());
|
||||
}
|
||||
} //end of cbc scope
|
||||
|
||||
#endif // __cplusplus
|
||||
#endif // CALLBACKCONNECTOR_H
|
||||
|
@ -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"
|
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.
|
@ -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%"
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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",
|
||||
|
@ -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,,
|
||||
|
|
@ -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,,
|
||||
|
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -3,7 +3,8 @@
|
||||
#include <lib/drivers/st25r3916.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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -18,7 +18,7 @@ static FATFS* pfs = NULL;
|
||||
#define CHECK_FRESULT(result) \
|
||||
{ \
|
||||
if((result) != FR_OK) { \
|
||||
return false; \
|
||||
return 0; \
|
||||
} \
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user