From 8f4281a10fd6a8f2ab8cd83bf782acefc4765112 Mon Sep 17 00:00:00 2001 From: dragonpilot Date: Wed, 21 Aug 2019 12:18:17 +1000 Subject: [PATCH 1/5] =?UTF-8?q?=E5=8A=A0=E5=85=A5=20mixplorer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From a1e0ba73c91417453d830aeefd9234508c4875d5 Mon Sep 17 00:00:00 2001 From: dragonpilot Date: Wed, 21 Aug 2019 12:32:42 +1000 Subject: [PATCH 2/5] =?UTF-8?q?=E8=BB=8A=E5=AD=90=E5=95=9F=E5=8B=95?= =?UTF-8?q?=E5=BE=8C=E5=BC=B7=E8=BF=AB=E9=97=9C=E9=96=89=20mixplorer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- selfdrive/manager.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/selfdrive/manager.py b/selfdrive/manager.py index 7b2ae233c..b933e0f25 100755 --- a/selfdrive/manager.py +++ b/selfdrive/manager.py @@ -381,13 +381,14 @@ def manager_thread(): tomtom_started = False autonavi_started = False + mixplorer_started = False dp_last_check = 0. dragon_boot_tomtom = False dragon_boot_autonavi = False while 1: ts = sec_since_boot() - if ts - dp_last_check > 3.: + if ts - dp_last_check > 5.: dragon_boot_tomtom = False if params.get("DragonBootTomTom") == "0" else True try: tomtom_started = False if subprocess.check_output(['pidof', 'com.tomtom.speedcams.android.map']) == "" else True @@ -400,6 +401,11 @@ def manager_thread(): except subprocess.CalledProcessError as e: autonavi_started = False + try: + mixplorer_started = False if subprocess.check_output(['pidof', 'com.mixplorer']) == "" else True + except subprocess.CalledProcessError as e: + mixplorer_started = False + msg = messaging.recv_sock(thermal_sock, wait=True) # uploader is gated based on the phone temperature @@ -430,6 +436,8 @@ def manager_thread(): system("pkill com.tomtom.speedcams.android.map") if dragon_boot_autonavi and autonavi_started: system("pkill com.autonavi.amapauto") + if mixplorer_started: + system("pkill com.mixplorer") else: logger_dead = False From 1fdf2d59b750f5df7f7c4b15c707866f41b43a45 Mon Sep 17 00:00:00 2001 From: dragonpilot Date: Wed, 21 Aug 2019 12:35:38 +1000 Subject: [PATCH 3/5] =?UTF-8?q?=E6=9B=B4=E6=96=B0APK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 46f4e0ac0a21e56b196db4fe3713531c15362b99 Mon Sep 17 00:00:00 2001 From: dragonpilot Date: Wed, 21 Aug 2019 13:01:27 +1000 Subject: [PATCH 4/5] =?UTF-8?q?=E8=AE=93=E7=AC=AC=E4=B8=89=E6=96=B9APK=20?= =?UTF-8?q?=E4=B8=8D=E8=A6=81=E6=AF=8F=E6=AC=A1=E9=96=8B=E6=A9=9F=E9=83=BD?= =?UTF-8?q?=E9=87=8D=E6=96=B0=E5=AE=89=E8=A3=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dragonpilot/apk_versions.md | 3 +++ selfdrive/manager.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 dragonpilot/apk_versions.md diff --git a/dragonpilot/apk_versions.md b/dragonpilot/apk_versions.md new file mode 100644 index 000000000..07c3d8a99 --- /dev/null +++ b/dragonpilot/apk_versions.md @@ -0,0 +1,3 @@ +com.autonavi.amapauto: v4.1.0.20047 +com.mixplorer: v6.39.2 +com.tomtom.speedcams.android.map: v1.16.2 \ No newline at end of file diff --git a/selfdrive/manager.py b/selfdrive/manager.py index b933e0f25..03340ea45 100755 --- a/selfdrive/manager.py +++ b/selfdrive/manager.py @@ -126,7 +126,7 @@ managed_processes = { daemon_processes = { "athenad": "selfdrive.athena.athenad", } -android_packages = ("ai.comma.plus.offroad", "ai.comma.plus.frame") +android_packages = ("com.autonavi.amapauto", "com.mixplorer", "com.tomtom.speedcams.android.map", "ai.comma.plus.offroad", "ai.comma.plus.frame") running = {} def get_running(): From d022449502b2a376e1127b32a28e8b945c4437ec Mon Sep 17 00:00:00 2001 From: dragonpilot Date: Wed, 21 Aug 2019 17:42:40 +1000 Subject: [PATCH 5/5] =?UTF-8?q?=E6=9B=B4=E6=96=B03rd=20Party=20APP=20?= =?UTF-8?q?=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/params.py | 6 + dragonpilot/apk_versions.md | 3 - selfdrive/dragonpilot/appd/__init__.py | 0 selfdrive/dragonpilot/appd/appd.py | 141 +++++++++++++++++++ selfdrive/dragonpilot/dragonconf/__init__.py | 7 + selfdrive/manager.py | 50 +------ 6 files changed, 156 insertions(+), 51 deletions(-) delete mode 100644 dragonpilot/apk_versions.md create mode 100644 selfdrive/dragonpilot/appd/__init__.py create mode 100644 selfdrive/dragonpilot/appd/appd.py diff --git a/common/params.py b/common/params.py index 8a4bbf202..becddc5eb 100755 --- a/common/params.py +++ b/common/params.py @@ -107,8 +107,14 @@ keys = { "DragonUIFace": [TxType.PERSISTENT], "DragonUIDev": [TxType.PERSISTENT], "DragonUIDevMini": [TxType.PERSISTENT], + "DragonEnableTomTom": [TxType.PERSISTENT], "DragonBootTomTom": [TxType.PERSISTENT], + "DragonRunTomTom": [TxType.PERSISTENT], + "DragonEnableAutonavi": [TxType.PERSISTENT], "DragonBootAutonavi": [TxType.PERSISTENT], + "DragonRunAutonavi": [TxType.PERSISTENT], + "DragonEnableMixplorer": [TxType.PERSISTENT], + "DragonRunMixplorer": [TxType.PERSISTENT], "DragonSteeringMonitorTimer": [TxType.PERSISTENT], } diff --git a/dragonpilot/apk_versions.md b/dragonpilot/apk_versions.md deleted file mode 100644 index 07c3d8a99..000000000 --- a/dragonpilot/apk_versions.md +++ /dev/null @@ -1,3 +0,0 @@ -com.autonavi.amapauto: v4.1.0.20047 -com.mixplorer: v6.39.2 -com.tomtom.speedcams.android.map: v1.16.2 \ No newline at end of file diff --git a/selfdrive/dragonpilot/appd/__init__.py b/selfdrive/dragonpilot/appd/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/selfdrive/dragonpilot/appd/appd.py b/selfdrive/dragonpilot/appd/appd.py new file mode 100644 index 000000000..76eec1b91 --- /dev/null +++ b/selfdrive/dragonpilot/appd/appd.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python2.7 + +import os +import time +import selfdrive.messaging as messaging +from selfdrive.services import service_list +import subprocess +import cereal +ThermalStatus = cereal.log.ThermalData.ThermalStatus +from selfdrive.swaglog import cloudlog +from common.params import Params +params = Params() + +# v1.16.2 +tomtom = "com.tomtom.speedcams.android.map" +tomtom_main = "com.tomtom.speedcams.android.activities.SpeedCamActivity" + +# v4.1.0.20047 +autonavi = "com.autonavi.amapauto" +autonavi_main = "com.autonavi.amapauto.MainMapActivity" + +# v6.39.2 +mixplorer = "com.mixplorer" +mixplorer_main = "com.mixplorer.activities.BrowseActivity" + +def main(gctx=None): + + dragon_enable_tomtom = False if params.get('DragonEnableTomTom') == "0" else True + dragon_enable_autonavi = False if params.get('DragonEnableAutonavi') == "0" else True + dragon_enable_mixplorer = False if params.get('DragonEnableMixplorer') == "0" else True + dragon_boot_tomtom = False if params.get("DragonBootTomTom") == "0" else True + dragon_boot_autonavi = False if params.get("DragonBootAutonavi") == "0" else True + tomtom_enabled = False + autonavi_enabled = False + mixplorer_enabled = False + + params.put('DragonRunTomTom', '0') + params.put('DragonRunAutonavi', '0') + params.put('DragonRunMixplorer', '0') + + # make sure packages are enabled/disabled + if dragon_enable_tomtom == "1": + system("pm enable %s" % tomtom) + else: + system("pm disable %s" % tomtom) + + if dragon_enable_autonavi == "1": + system("pm enable %s" % autonavi) + else: + system("pm disable %s" % autonavi) + + if dragon_enable_mixplorer == "1": + system("pm enable %s" % mixplorer) + else: + system("pm disable %s" % mixplorer) + + thermal_sock = messaging.sub_sock(service_list['thermal'].port) + + while 1: + msg = messaging.recv_sock(thermal_sock, wait=True) + dragon_run_tomtom = params.get('DragonRunTomTom') + dragon_run_autonavi = params.get('DragonRunAutonavi') + dragon_run_mixplorer = params.get('DragonRunMixplorer') + + if dragon_enable_tomtom: + if dragon_run_tomtom == "1": + system("pm enable %s" % tomtom) + system("am start -n %s/%s" % (tomtom, tomtom_main)) + params.put('DragonRunTomTom', '0') + tomtom_enabled = True + elif dragon_run_tomtom == "-1": + system("pm disable %s" % tomtom) + system("pm enable %s" % tomtom) + params.put('DragonRunTomTom', '0') + tomtom_enabled = False + + if dragon_enable_autonavi: + if dragon_run_autonavi == "1": + system("pm enable %s" % autonavi) + system("am start -n %s/%s" % (autonavi, autonavi_main)) + params.put('DragonRunAutonavi', '0') + autonavi_enabled = True + elif dragon_run_autonavi == "-1": + system("pm disable %s" % autonavi) + params.put('DragonRunAutonavi', '0') + autonavi_enabled = False + + if dragon_enable_mixplorer: + if dragon_run_mixplorer == "1": + system("pm enable %s" % mixplorer) + system("am start -n %s/%s" % (mixplorer, mixplorer_main)) + params.put('DragonRunMixplorer', '0') + mixplorer_enabled = True + elif dragon_run_mixplorer == "-1": + system("pm disable %s" % mixplorer) + params.put('DragonRunMixplorer', '0') + mixplorer_enabled = False + + # car on + if msg.thermal.started: + # dragonpilot, handle tomtom/autonavi + # do not allow tomtom / autonavi when it's hot + if msg.thermal.thermalStatus < ThermalStatus.red: + if dragon_boot_tomtom and not tomtom_enabled: + system("pm enable %s" % tomtom) + system("am start -n %s/%s" % (tomtom, tomtom_main)) + tomtom_enabled = True + if dragon_boot_autonavi and not autonavi_enabled: + system("pm enable %s" % autonavi) + system("am start -n %s/%s" % (autonavi, autonavi_main)) + autonavi_enabled = True + + # kill mixplorer when car started + if mixplorer_enabled: + system("pm disable %s" % mixplorer) + mixplorer_enabled = False + + # car off + else: + if dragon_boot_tomtom and tomtom_enabled: + system("pm disable %s" % tomtom) + tomtom_enabled = False + if dragon_boot_autonavi and autonavi_enabled: + system("pm disable %s" % autonavi) + autonavi_enabled = False + + # every 3 seconds, we re-check status + time.sleep(3) + +def system(cmd): + try: + cloudlog.info("running %s" % cmd) + subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True) + except subprocess.CalledProcessError as e: + cloudlog.event("running failed", + cmd=e.cmd, + output=e.output[-1024:], + returncode=e.returncode) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/selfdrive/dragonpilot/dragonconf/__init__.py b/selfdrive/dragonpilot/dragonconf/__init__.py index a0d6edd31..d9a67fdc3 100644 --- a/selfdrive/dragonpilot/dragonconf/__init__.py +++ b/selfdrive/dragonpilot/dragonconf/__init__.py @@ -26,8 +26,15 @@ default_conf = { 'DragonUIFace': '0', 'DragonUIDev': '0', 'DragonUIDevMini': '1', + # 3rd party app + 'DragonEnableTomTom': '0', 'DragonBootTomTom': '0', + 'DragonRunTomTom': '0', + 'DragonEnableAutonavi': '0', 'DragonBootAutonavi': '0', + 'DragonRunAutonavi': '0', + 'DragonEnableMixplorer': '0', + 'DragonRunMixplorer': '0', 'DragonSteeringMonitorTimer': '3', } diff --git a/selfdrive/manager.py b/selfdrive/manager.py index 03340ea45..77df540c4 100755 --- a/selfdrive/manager.py +++ b/selfdrive/manager.py @@ -122,6 +122,7 @@ managed_processes = { #"updated": "selfdrive.updated", "dashcamd": "selfdrive.dragonpilot.dashcamd.dashcamd", "shutdownd": "selfdrive.dragonpilot.shutdownd.shutdownd", + "appd": "selfdrive.dragonpilot.appd.appd", } daemon_processes = { "athenad": "selfdrive.athena.athenad", @@ -150,6 +151,7 @@ persistent_processes = [ 'ui', #'updated', 'shutdownd', + 'appd', ] car_started_processes = [ @@ -379,33 +381,7 @@ def manager_thread(): logger_dead = False - tomtom_started = False - autonavi_started = False - mixplorer_started = False - dp_last_check = 0. - dragon_boot_tomtom = False - dragon_boot_autonavi = False - while 1: - ts = sec_since_boot() - if ts - dp_last_check > 5.: - dragon_boot_tomtom = False if params.get("DragonBootTomTom") == "0" else True - try: - tomtom_started = False if subprocess.check_output(['pidof', 'com.tomtom.speedcams.android.map']) == "" else True - except subprocess.CalledProcessError as e: - tomtom_started = False - - dragon_boot_autonavi = False if params.get("DragonBootAutonavi") == "0" else True - try: - autonavi_started = False if subprocess.check_output(['pidof', 'com.autonavi.amapauto']) == "" else True - except subprocess.CalledProcessError as e: - autonavi_started = False - - try: - mixplorer_started = False if subprocess.check_output(['pidof', 'com.mixplorer']) == "" else True - except subprocess.CalledProcessError as e: - mixplorer_started = False - msg = messaging.recv_sock(thermal_sock, wait=True) # uploader is gated based on the phone temperature @@ -423,33 +399,11 @@ def manager_thread(): kill_managed_process(p) else: start_managed_process(p) - - # dragonpilot, handle tomtom/autonavi - # do not allow tomtom / autonavi when it's hot - if msg.thermal.thermalStatus < ThermalStatus.red: - if dragon_boot_tomtom and not tomtom_started: - system("am start -n com.tomtom.speedcams.android.map/com.tomtom.speedcams.android.activities.SpeedCamActivity") - if dragon_boot_autonavi and not autonavi_started: - system("am start -n com.autonavi.amapauto/.MainMapActivity") - else: - if dragon_boot_tomtom and tomtom_started: - system("pkill com.tomtom.speedcams.android.map") - if dragon_boot_autonavi and autonavi_started: - system("pkill com.autonavi.amapauto") - if mixplorer_started: - system("pkill com.mixplorer") - else: logger_dead = False for p in car_started_processes: kill_managed_process(p) - # dragonpilot, handle tomtom/autonavi - if dragon_boot_tomtom and tomtom_started: - system("pkill com.tomtom.speedcams.android.map") - if dragon_boot_autonavi and autonavi_started: - system("pkill com.autonavi.amapauto") - # check the status of all processes, did any of them die? running_list = [" running %s %s" % (p, running[p]) for p in running] cloudlog.debug('\n'.join(running_list))