1
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:
MX
2023-11-08 15:14:30 +04:00
6 changed files with 49 additions and 20 deletions

View File

@@ -185,6 +185,7 @@ fap_deploy = distenv.PhonyTarget(
], ],
source=firmware_env.Dir(("${RESOURCES_ROOT}/apps")), source=firmware_env.Dir(("${RESOURCES_ROOT}/apps")),
) )
Depends(fap_deploy, firmware_env["FW_RESOURCES_MANIFEST"])
# Target for bundling core2 package for qFlipper # Target for bundling core2 package for qFlipper

View File

@@ -1,6 +1,6 @@
#pragma once #pragma once
enum iButtonCustomEvent { typedef enum {
// Reserve first 100 events for button types and indexes, starting from 0 // Reserve first 100 events for button types and indexes, starting from 0
iButtonCustomEventReserved = 100, iButtonCustomEventReserved = 100,
@@ -10,8 +10,12 @@ enum iButtonCustomEvent {
iButtonCustomEventByteEditResult, iButtonCustomEventByteEditResult,
iButtonCustomEventWorkerEmulated, iButtonCustomEventWorkerEmulated,
iButtonCustomEventWorkerRead, iButtonCustomEventWorkerRead,
iButtonCustomEventWorkerWriteOK,
iButtonCustomEventWorkerWriteSameKey,
iButtonCustomEventWorkerWriteNoDetect,
iButtonCustomEventWorkerWriteCannotWrite,
iButtonCustomEventRpcLoad, iButtonCustomEventRpcLoad,
iButtonCustomEventRpcExit, iButtonCustomEventRpcExit,
iButtonCustomEventRpcSessionClose, iButtonCustomEventRpcSessionClose,
}; } iButtonCustomEvent;

View File

@@ -5,9 +5,26 @@ typedef enum {
iButtonSceneWriteStateBlinkYellow, iButtonSceneWriteStateBlinkYellow,
} iButtonSceneWriteState; } 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) { static void ibutton_scene_write_callback(void* context, iButtonWorkerWriteResult result) {
iButton* ibutton = context; 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) { 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) { if(event.type == SceneManagerEventTypeCustom) {
consumed = true; consumed = true;
if((event.event == iButtonWorkerWriteOK) || (event.event == iButtonWorkerWriteSameKey)) { if((event.event == iButtonCustomEventWorkerWriteOK) ||
(event.event == iButtonCustomEventWorkerWriteSameKey)) {
scene_manager_next_scene(scene_manager, iButtonSceneWriteSuccess); scene_manager_next_scene(scene_manager, iButtonSceneWriteSuccess);
} else if(event.event == iButtonWorkerWriteNoDetect) { } else if(event.event == iButtonCustomEventWorkerWriteNoDetect) {
ibutton_notification_message(ibutton, iButtonNotificationMessageEmulateBlink); ibutton_notification_message(ibutton, iButtonNotificationMessageEmulateBlink);
} else if(event.event == iButtonWorkerWriteCannotWrite) { } else if(event.event == iButtonCustomEventWorkerWriteCannotWrite) {
ibutton_notification_message(ibutton, iButtonNotificationMessageYellowBlink); ibutton_notification_message(ibutton, iButtonNotificationMessageYellowBlink);
} }
} else if(event.type == SceneManagerEventTypeTick) {
consumed = true;
} }
return consumed; return consumed;

View File

@@ -240,12 +240,12 @@ class AppBuildset:
FlipperAppType.SETTINGS, FlipperAppType.SETTINGS,
FlipperAppType.STARTUP, FlipperAppType.STARTUP,
) )
EXTERNAL_APP_TYPES = ( EXTERNAL_APP_TYPES_MAP = {
FlipperAppType.EXTERNAL, FlipperAppType.EXTERNAL: True,
FlipperAppType.MENUEXTERNAL, FlipperAppType.PLUGIN: True,
FlipperAppType.PLUGIN, FlipperAppType.DEBUG: True,
FlipperAppType.DEBUG, FlipperAppType.MENUEXTERNAL: False,
) }
@staticmethod @staticmethod
def print_writer(message): def print_writer(message):
@@ -318,8 +318,8 @@ class AppBuildset:
def _process_ext_apps(self): def _process_ext_apps(self):
extapps = [ extapps = [
app app
for apptype in self.EXTERNAL_APP_TYPES for (apptype, global_lookup) in self.EXTERNAL_APP_TYPES_MAP.items()
for app in self.get_apps_of_type(apptype, True) for app in self.get_apps_of_type(apptype, global_lookup)
] ]
extapps.extend(map(self.appmgr.get, self._extra_ext_appnames)) extapps.extend(map(self.appmgr.get, self._extra_ext_appnames))
@@ -407,10 +407,14 @@ class AppBuildset:
return sdk_headers return sdk_headers
def get_apps_of_type(self, apptype: FlipperAppType, all_known: bool = False): 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( return sorted(
filter( filter(
lambda app: app.apptype == apptype, 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, key=lambda app: app.order,
) )

View File

@@ -21,8 +21,13 @@ def LoadAppManifest(env, entry):
APP_MANIFEST_NAME = "application.fam" APP_MANIFEST_NAME = "application.fam"
manifest_glob = entry.glob(APP_MANIFEST_NAME) manifest_glob = entry.glob(APP_MANIFEST_NAME)
if len(manifest_glob) == 0: 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( 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 app_manifest_file_path = manifest_glob[0].rfile().abspath

View File

@@ -53,7 +53,7 @@ class GitVersion:
) )
else: else:
commit_date = datetime.strptime( 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", "%a %b %d %H:%M:%S %Y %z",
) )