fbt: add fap_deploy
target to build and copy all .fap apps to flipper (#2146)
* fbt: add `faps_copy` target to build and copy all .fap apps to flipper * fbt: restore default runfap.py invocation behavior, use -n for copy only * fbt: proper implementation of fap_deploy target Co-authored-by: hedger <hedger@nanode.su>
This commit is contained in:
parent
8d2143add5
commit
d2df35a35b
16
.vscode/example/tasks.json
vendored
16
.vscode/example/tasks.json
vendored
@ -138,6 +138,18 @@
|
|||||||
"Serial Console"
|
"Serial Console"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"label": "[Debug] Build and upload all FAPs to Flipper over USB",
|
||||||
|
"group": "build",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "./fbt fap_deploy"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "[Release] Build and upload all FAPs to Flipper over USB",
|
||||||
|
"group": "build",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "./fbt COMPACT=1 DEBUG=0 fap_deploy"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
// Press Ctrl+] to quit
|
// Press Ctrl+] to quit
|
||||||
"label": "Serial Console",
|
"label": "Serial Console",
|
||||||
@ -145,7 +157,7 @@
|
|||||||
"command": "./fbt cli",
|
"command": "./fbt cli",
|
||||||
"group": "none",
|
"group": "none",
|
||||||
"isBackground": true,
|
"isBackground": true,
|
||||||
"options": {
|
"options": {
|
||||||
"env": {
|
"env": {
|
||||||
"FBT_NO_SYNC": "0"
|
"FBT_NO_SYNC": "0"
|
||||||
}
|
}
|
||||||
@ -162,4 +174,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
@ -165,6 +165,14 @@ Alias("fap_dist", fap_dist)
|
|||||||
|
|
||||||
distenv.Depends(firmware_env["FW_RESOURCES"], firmware_env["FW_EXTAPPS"].resources_dist)
|
distenv.Depends(firmware_env["FW_RESOURCES"], firmware_env["FW_EXTAPPS"].resources_dist)
|
||||||
|
|
||||||
|
# Copy all faps to device
|
||||||
|
|
||||||
|
fap_deploy = distenv.PhonyTarget(
|
||||||
|
"fap_deploy",
|
||||||
|
"${PYTHON3} ${ROOT_DIR}/scripts/storage.py send ${SOURCE} /ext/apps",
|
||||||
|
source=Dir("#/assets/resources/apps"),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# Target for bundling core2 package for qFlipper
|
# Target for bundling core2 package for qFlipper
|
||||||
copro_dist = distenv.CoproBuilder(
|
copro_dist = distenv.CoproBuilder(
|
||||||
|
@ -11,6 +11,8 @@ Building:
|
|||||||
Build all FAP apps
|
Build all FAP apps
|
||||||
fap_{APPID}, launch_app APPSRC={APPID}:
|
fap_{APPID}, launch_app APPSRC={APPID}:
|
||||||
Build FAP app with appid={APPID}; upload & start it over USB
|
Build FAP app with appid={APPID}; upload & start it over USB
|
||||||
|
fap_deploy:
|
||||||
|
Build and upload all FAP apps over USB
|
||||||
|
|
||||||
Flashing & debugging:
|
Flashing & debugging:
|
||||||
flash, flash_blackmagic, jflash:
|
flash, flash_blackmagic, jflash:
|
||||||
|
@ -15,6 +15,13 @@ import serial.tools.list_ports as list_ports
|
|||||||
class Main(App):
|
class Main(App):
|
||||||
def init(self):
|
def init(self):
|
||||||
self.parser.add_argument("-p", "--port", help="CDC Port", default="auto")
|
self.parser.add_argument("-p", "--port", help="CDC Port", default="auto")
|
||||||
|
self.parser.add_argument(
|
||||||
|
"-n",
|
||||||
|
"--no-launch",
|
||||||
|
dest="launch_app",
|
||||||
|
action="store_false",
|
||||||
|
help="Don't launch app",
|
||||||
|
)
|
||||||
|
|
||||||
self.parser.add_argument("fap_src_path", help="App file to upload")
|
self.parser.add_argument("fap_src_path", help="App file to upload")
|
||||||
self.parser.add_argument(
|
self.parser.add_argument(
|
||||||
@ -84,11 +91,14 @@ class Main(App):
|
|||||||
self.logger.error(f"Error: upload failed: {storage.last_error}")
|
self.logger.error(f"Error: upload failed: {storage.last_error}")
|
||||||
return -3
|
return -3
|
||||||
|
|
||||||
storage.send_and_wait_eol(f'loader open "Applications" {fap_dst_path}\r')
|
if self.args.launch_app:
|
||||||
result = storage.read.until(storage.CLI_EOL)
|
storage.send_and_wait_eol(
|
||||||
if len(result):
|
f'loader open "Applications" {fap_dst_path}\r'
|
||||||
self.logger.error(f"Unexpected response: {result.decode('ascii')}")
|
)
|
||||||
return -4
|
result = storage.read.until(storage.CLI_EOL)
|
||||||
|
if len(result):
|
||||||
|
self.logger.error(f"Unexpected response: {result.decode('ascii')}")
|
||||||
|
return -4
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
finally:
|
finally:
|
||||||
|
Loading…
Reference in New Issue
Block a user