mirror of
https://github.com/flipperdevices/flipperzero-firmware.git
synced 2025-12-12 04:41:26 +04: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:
@@ -1,6 +1,6 @@
|
||||
#include "accessor_view_manager.h"
|
||||
#include "accessor_event.h"
|
||||
#include <callback-connector.h>
|
||||
#include "callback_connector.h"
|
||||
|
||||
AccessorAppViewManager::AccessorAppViewManager() {
|
||||
event_queue = furi_message_queue_alloc(10, sizeof(AccessorEvent));
|
||||
|
||||
106
applications/debug/accessor/callback_connector.h
Normal file
106
applications/debug/accessor/callback_connector.h
Normal file
@@ -0,0 +1,106 @@
|
||||
#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 {
|
||||
public:
|
||||
FuncMemberWrapper() = delete;
|
||||
using member_fun_t = Ret (T::*)(Args...);
|
||||
using const_member_fun_t = Ret (T::*)(Args...) const;
|
||||
static auto instantiate(T* t, member_fun_t ptr) {
|
||||
obj = t;
|
||||
member = ptr;
|
||||
return MetaCall;
|
||||
}
|
||||
|
||||
static auto instantiate(T* t, const_member_fun_t ptr) {
|
||||
obj = t;
|
||||
const_member = ptr;
|
||||
return ConstMetaCall;
|
||||
}
|
||||
|
||||
private:
|
||||
static auto MetaCall(Args... args) {
|
||||
return (*obj.*member)(args...);
|
||||
}
|
||||
static auto ConstMetaCall(Args... args) {
|
||||
return (*obj.*const_member)(args...);
|
||||
}
|
||||
static T* obj;
|
||||
static member_fun_t member;
|
||||
static const_member_fun_t const_member;
|
||||
};
|
||||
template <std::size_t Tag, typename T, typename Ret, typename... Args>
|
||||
T* FuncMemberWrapper<Tag, T, Ret, Args...>::obj{};
|
||||
|
||||
template <std::size_t Tag, typename T, typename Ret, typename... Args>
|
||||
typename FuncMemberWrapper<Tag, T, Ret, Args...>::member_fun_t
|
||||
FuncMemberWrapper<Tag, T, Ret, Args...>::member{};
|
||||
|
||||
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 {
|
||||
public:
|
||||
static std::function<Ret(Args...)> functor;
|
||||
static auto instatiate(Functor fn) {
|
||||
functor = std::move(fn);
|
||||
return MetaCall;
|
||||
}
|
||||
|
||||
private:
|
||||
static auto MetaCall(Args... args) {
|
||||
return functor(args...);
|
||||
}
|
||||
};
|
||||
|
||||
template <typename Functor, typename Ret, typename... Args>
|
||||
std::function<Ret(Args...)> FunctorWrapper<Functor, Ret, Args...>::functor;
|
||||
|
||||
template <typename Functor, typename Ret, typename T, typename... Args>
|
||||
auto deducer(Functor obj, Ret (T::*)(Args...) const) {
|
||||
return FunctorWrapper<Functor, Ret, Args...>::instatiate(std::move(obj));
|
||||
}
|
||||
|
||||
template <typename Functor, typename Ret, typename T, typename... Args>
|
||||
auto deducer(Functor obj, Ret (T::*)(Args...)) {
|
||||
return FunctorWrapper<Functor, Ret, Args...>::instatiate(std::move(obj));
|
||||
}
|
||||
|
||||
template <std::size_t tag, typename T, typename Ret, typename... Args>
|
||||
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) {
|
||||
return const_instantiate(t, ptr);
|
||||
}
|
||||
|
||||
} //end of Details scope
|
||||
|
||||
template <std::size_t tag = 0, typename T, typename Ret, typename... Args>
|
||||
auto obtain_connector(T* t, Ret (T::*ptr)(Args...)) {
|
||||
return Details::FuncMemberWrapper<tag, T, Ret, Args...>::instantiate(t, ptr);
|
||||
}
|
||||
|
||||
template <std::size_t tag = 0, typename T, typename Ret, typename... Args>
|
||||
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) {
|
||||
return Details::deducer(std::move(functor), &Functor::operator());
|
||||
}
|
||||
} //end of cbc scope
|
||||
|
||||
#endif // __cplusplus
|
||||
#endif // CALLBACKCONNECTOR_H
|
||||
@@ -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;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#include "../accessor_app.h"
|
||||
#include "../accessor_view_manager.h"
|
||||
#include "../accessor_event.h"
|
||||
#include <callback-connector.h>
|
||||
#include "callback_connector.h"
|
||||
#include "accessor_scene_start.h"
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user