From c12a6ce0ec09cdd16f37a59511183de9e5249e3a Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Tue, 1 Oct 2024 17:00:38 +0200 Subject: [PATCH] Added BLE connection toggle to RNode hardware config --- sbapp/main.py | 32 +++++++++++++++++++++++++++----- sbapp/sideband/core.py | 13 +++++++------ sbapp/ui/layouts.py | 15 +++++++++++++++ 3 files changed, 49 insertions(+), 11 deletions(-) diff --git a/sbapp/main.py b/sbapp/main.py index 8534e40..216ea54 100644 --- a/sbapp/main.py +++ b/sbapp/main.py @@ -1,6 +1,6 @@ __debug_build__ = False __disable_shaders__ = False -__version__ = "1.0.1" +__version__ = "1.1.0" __variant__ = "" import sys @@ -722,7 +722,18 @@ class SidebandApp(MDApp): if check_permission(bt_permission_name): RNS.log("Have bluetooth connect permissions", RNS.LOG_DEBUG) - self.sideband.setpersistent("permissions.bluetooth", True) + + if android_api_version > 30: + if check_permission("android.permission.BLUETOOTH_SCAN"): + RNS.log("Have bluetooth scan permissions", RNS.LOG_DEBUG) + self.sideband.setpersistent("permissions.bluetooth", True) + + else: + RNS.log("Do not have bluetooth scan permissions") + self.sideband.setpersistent("permissions.bluetooth", False) + + else: + self.sideband.setpersistent("permissions.bluetooth", True) else: RNS.log("Do not have bluetooth connect permissions") self.sideband.setpersistent("permissions.bluetooth", False) @@ -813,9 +824,9 @@ class SidebandApp(MDApp): def request_bluetooth_permissions(self): if RNS.vendor.platformutils.get_platform() == "android": - if not check_permission("android.permission.BLUETOOTH_CONNECT"): - RNS.log("Requesting bluetooth permission", RNS.LOG_DEBUG) - request_permissions(["android.permission.BLUETOOTH_CONNECT"]) + if not check_permission("android.permission.BLUETOOTH_CONNECT") or not check_permission("android.permission.BLUETOOTH_SCAN"): + RNS.log("Requesting Bluetooth permissions", RNS.LOG_DEBUG) + request_permissions(["android.permission.BLUETOOTH_CONNECT", "android.permission.BLUETOOTH_SCAN"]) self.check_bluetooth_permissions() @@ -3710,6 +3721,15 @@ class SidebandApp(MDApp): self.sideband.save_configuration() + def hardware_rnode_ble_toggle_action(self, sender=None, event=None): + if sender.active: + self.sideband.config["hw_rnode_ble"] = True + self.request_bluetooth_permissions() + else: + self.sideband.config["hw_rnode_ble"] = False + + self.sideband.save_configuration() + def hardware_rnode_framebuffer_toggle_action(self, sender=None, event=None): if sender.active: self.sideband.config["hw_rnode_enable_framebuffer"] = True @@ -3777,6 +3797,7 @@ class SidebandApp(MDApp): t_atl = "" self.hardware_rnode_screen.ids.hardware_rnode_bluetooth.active = self.sideband.config["hw_rnode_bluetooth"] + self.hardware_rnode_screen.ids.hardware_rnode_ble.active = self.sideband.config["hw_rnode_ble"] self.hardware_rnode_screen.ids.hardware_rnode_framebuffer.active = self.sideband.config["hw_rnode_enable_framebuffer"] self.hardware_rnode_screen.ids.hardware_rnode_frequency.text = t_freq self.hardware_rnode_screen.ids.hardware_rnode_bandwidth.text = t_bw @@ -3806,6 +3827,7 @@ class SidebandApp(MDApp): self.hardware_rnode_screen.ids.hardware_rnode_atl_short.bind(on_text_validate=save_connectivity) self.hardware_rnode_screen.ids.hardware_rnode_atl_long.bind(on_text_validate=save_connectivity) self.hardware_rnode_screen.ids.hardware_rnode_bluetooth.bind(active=self.hardware_rnode_bt_toggle_action) + self.hardware_rnode_screen.ids.hardware_rnode_ble.bind(active=self.hardware_rnode_ble_toggle_action) self.hardware_rnode_screen.ids.hardware_rnode_framebuffer.bind(active=self.hardware_rnode_framebuffer_toggle_action) self.hardware_rnode_ready = True diff --git a/sbapp/sideband/core.py b/sbapp/sideband/core.py index 0f68a29..fc7dd4d 100644 --- a/sbapp/sideband/core.py +++ b/sbapp/sideband/core.py @@ -1580,8 +1580,9 @@ class SidebandCore(): return response except Exception as e: - RNS.log(f"An error occurred while executing the service RPC request: {request}", RNS.LOG_ERROR) - RNS.log(f"The contained exception was: {e}", RNS.LOG_ERROR) + if not type(e) == ConnectionRefusedError: + RNS.log(f"An error occurred while executing the service RPC request: {request}", RNS.LOG_ERROR) + RNS.log(f"The contained exception was: {e}", RNS.LOG_ERROR) def getstate(self, prop, allow_cache=False): with self.state_lock: @@ -3613,12 +3614,12 @@ class SidebandCore(): RNS.log("Disallowing RNode bluetooth since config is disabled", RNS.LOG_DEBUG) rnode_allow_bluetooth = False - if self.config["hw_rnode_ble"] and self.getpersistent("permissions.ble"): + if self.config["hw_rnode_ble"] and self.getpersistent("permissions.bluetooth"): RNS.log("Allowing RNode BLE", RNS.LOG_DEBUG) - # rnode_allow_ble = True + rnode_allow_ble = True else: - RNS.log("Disallowing RNode BLE due to missing permission", RNS.LOG_DEBUG) - # rnode_allow_ble = False + RNS.log("Disallowing RNode BLE", RNS.LOG_DEBUG) + rnode_allow_ble = False else: RNS.log("Disallowing RNode bluetooth due to missing permission", RNS.LOG_DEBUG) diff --git a/sbapp/ui/layouts.py b/sbapp/ui/layouts.py index e9d41c2..7160441 100644 --- a/sbapp/ui/layouts.py +++ b/sbapp/ui/layouts.py @@ -2391,6 +2391,21 @@ MDScreen: pos_hint: {"center_y": 0.3} active: False + MDBoxLayout: + orientation: "horizontal" + size_hint_y: None + padding: [0,0,dp(24),dp(0)] + height: dp(48) + + MDLabel: + text: "Device requires BLE" + font_style: "H6" + + MDSwitch: + id: hardware_rnode_ble + pos_hint: {"center_y": 0.3} + active: False + MDLabel: id: hardware_rnode_info markup: True