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")),
|
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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user