mirror of
https://github.com/DarkFlippers/unleashed-firmware.git
synced 2025-12-12 12:42:30 +04:00
Merge branch 'ofw_dev' into nfcrefactoring
This commit is contained in:
@@ -185,6 +185,7 @@ fap_deploy = distenv.PhonyTarget(
|
||||
],
|
||||
source=firmware_env.Dir(("${RESOURCES_ROOT}/apps")),
|
||||
)
|
||||
Depends(fap_deploy, firmware_env["FW_RESOURCES_MANIFEST"])
|
||||
|
||||
|
||||
# Target for bundling core2 package for qFlipper
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
enum iButtonCustomEvent {
|
||||
typedef enum {
|
||||
// Reserve first 100 events for button types and indexes, starting from 0
|
||||
iButtonCustomEventReserved = 100,
|
||||
|
||||
@@ -10,8 +10,12 @@ enum iButtonCustomEvent {
|
||||
iButtonCustomEventByteEditResult,
|
||||
iButtonCustomEventWorkerEmulated,
|
||||
iButtonCustomEventWorkerRead,
|
||||
iButtonCustomEventWorkerWriteOK,
|
||||
iButtonCustomEventWorkerWriteSameKey,
|
||||
iButtonCustomEventWorkerWriteNoDetect,
|
||||
iButtonCustomEventWorkerWriteCannotWrite,
|
||||
|
||||
iButtonCustomEventRpcLoad,
|
||||
iButtonCustomEventRpcExit,
|
||||
iButtonCustomEventRpcSessionClose,
|
||||
};
|
||||
} iButtonCustomEvent;
|
||||
|
||||
@@ -5,9 +5,26 @@ typedef enum {
|
||||
iButtonSceneWriteStateBlinkYellow,
|
||||
} iButtonSceneWriteState;
|
||||
|
||||
static inline iButtonCustomEvent
|
||||
ibutton_scene_write_to_custom_event(iButtonWorkerWriteResult result) {
|
||||
switch(result) {
|
||||
case iButtonWorkerWriteOK:
|
||||
return iButtonCustomEventWorkerWriteOK;
|
||||
case iButtonWorkerWriteSameKey:
|
||||
return iButtonCustomEventWorkerWriteSameKey;
|
||||
case iButtonWorkerWriteNoDetect:
|
||||
return iButtonCustomEventWorkerWriteNoDetect;
|
||||
case iButtonWorkerWriteCannotWrite:
|
||||
return iButtonCustomEventWorkerWriteCannotWrite;
|
||||
default:
|
||||
furi_crash();
|
||||
}
|
||||
}
|
||||
|
||||
static void ibutton_scene_write_callback(void* context, iButtonWorkerWriteResult result) {
|
||||
iButton* ibutton = context;
|
||||
view_dispatcher_send_custom_event(ibutton->view_dispatcher, result);
|
||||
view_dispatcher_send_custom_event(
|
||||
ibutton->view_dispatcher, ibutton_scene_write_to_custom_event(result));
|
||||
}
|
||||
|
||||
void ibutton_scene_write_on_enter(void* context) {
|
||||
@@ -61,16 +78,14 @@ bool ibutton_scene_write_on_event(void* context, SceneManagerEvent event) {
|
||||
|
||||
if(event.type == SceneManagerEventTypeCustom) {
|
||||
consumed = true;
|
||||
if((event.event == iButtonWorkerWriteOK) || (event.event == iButtonWorkerWriteSameKey)) {
|
||||
if((event.event == iButtonCustomEventWorkerWriteOK) ||
|
||||
(event.event == iButtonCustomEventWorkerWriteSameKey)) {
|
||||
scene_manager_next_scene(scene_manager, iButtonSceneWriteSuccess);
|
||||
} else if(event.event == iButtonWorkerWriteNoDetect) {
|
||||
} else if(event.event == iButtonCustomEventWorkerWriteNoDetect) {
|
||||
ibutton_notification_message(ibutton, iButtonNotificationMessageEmulateBlink);
|
||||
} else if(event.event == iButtonWorkerWriteCannotWrite) {
|
||||
} else if(event.event == iButtonCustomEventWorkerWriteCannotWrite) {
|
||||
ibutton_notification_message(ibutton, iButtonNotificationMessageYellowBlink);
|
||||
}
|
||||
|
||||
} else if(event.type == SceneManagerEventTypeTick) {
|
||||
consumed = true;
|
||||
}
|
||||
|
||||
return consumed;
|
||||
|
||||
@@ -240,12 +240,12 @@ class AppBuildset:
|
||||
FlipperAppType.SETTINGS,
|
||||
FlipperAppType.STARTUP,
|
||||
)
|
||||
EXTERNAL_APP_TYPES = (
|
||||
FlipperAppType.EXTERNAL,
|
||||
FlipperAppType.MENUEXTERNAL,
|
||||
FlipperAppType.PLUGIN,
|
||||
FlipperAppType.DEBUG,
|
||||
)
|
||||
EXTERNAL_APP_TYPES_MAP = {
|
||||
FlipperAppType.EXTERNAL: True,
|
||||
FlipperAppType.PLUGIN: True,
|
||||
FlipperAppType.DEBUG: True,
|
||||
FlipperAppType.MENUEXTERNAL: False,
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
def print_writer(message):
|
||||
@@ -318,8 +318,8 @@ class AppBuildset:
|
||||
def _process_ext_apps(self):
|
||||
extapps = [
|
||||
app
|
||||
for apptype in self.EXTERNAL_APP_TYPES
|
||||
for app in self.get_apps_of_type(apptype, True)
|
||||
for (apptype, global_lookup) in self.EXTERNAL_APP_TYPES_MAP.items()
|
||||
for app in self.get_apps_of_type(apptype, global_lookup)
|
||||
]
|
||||
extapps.extend(map(self.appmgr.get, self._extra_ext_appnames))
|
||||
|
||||
@@ -407,10 +407,14 @@ class AppBuildset:
|
||||
return sdk_headers
|
||||
|
||||
def get_apps_of_type(self, apptype: FlipperAppType, all_known: bool = False):
|
||||
"""Looks up apps of given type in current app set. If all_known is true,
|
||||
ignores app set and checks all loaded apps' manifests."""
|
||||
return sorted(
|
||||
filter(
|
||||
lambda app: app.apptype == apptype,
|
||||
self.appmgr.known_apps.values() if all_known else self._apps,
|
||||
self.appmgr.known_apps.values()
|
||||
if all_known
|
||||
else map(self.appmgr.get, self.appnames),
|
||||
),
|
||||
key=lambda app: app.order,
|
||||
)
|
||||
|
||||
@@ -21,8 +21,13 @@ def LoadAppManifest(env, entry):
|
||||
APP_MANIFEST_NAME = "application.fam"
|
||||
manifest_glob = entry.glob(APP_MANIFEST_NAME)
|
||||
if len(manifest_glob) == 0:
|
||||
try:
|
||||
disk_node = next(filter(lambda d: d.exists(), entry.get_all_rdirs()))
|
||||
except Exception:
|
||||
disk_node = entry
|
||||
|
||||
raise FlipperManifestException(
|
||||
f"Folder {entry}: manifest {APP_MANIFEST_NAME} is missing"
|
||||
f"App folder '{disk_node.abspath}': missing manifest ({APP_MANIFEST_NAME})"
|
||||
)
|
||||
|
||||
app_manifest_file_path = manifest_glob[0].rfile().abspath
|
||||
|
||||
@@ -53,7 +53,7 @@ class GitVersion:
|
||||
)
|
||||
else:
|
||||
commit_date = datetime.strptime(
|
||||
self._exec_git("log -1 --format=%cd").strip(),
|
||||
self._exec_git("log -1 --format=%cd --date=default").strip(),
|
||||
"%a %b %d %H:%M:%S %Y %z",
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user