src/eric7/MicroPython/BluetoothDialogs/BluetoothController.py

Tue, 10 Dec 2024 15:46:34 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 10 Dec 2024 15:46:34 +0100
branch
eric7
changeset 11090
f5f5f5803935
parent 11005
b918c6c2736b
child 11166
fd914f897dcf
permissions
-rw-r--r--

Updated copyright for 2025.

9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
11090
f5f5f5803935 Updated copyright for 2025.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11005
diff changeset
3 # Copyright (c) 2023 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the Bluetooth related functionality.
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 from PyQt6.QtCore import QObject, pyqtSlot
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 from PyQt6.QtWidgets import QMenu
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 from eric7.EricWidgets import EricMessageBox
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 class BluetoothController(QObject):
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 Class implementing the Bluetooth related functionality.
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 def __init__(self, microPython, parent=None):
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 Constructor
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 @param microPython reference to the MicroPython widget
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 @type MicroPythonWidgep
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 @param parent reference to the parent object (defaults to None)
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 @type QObject (optional)
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 super().__init__(parent)
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 self.__mpy = microPython
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 def createMenu(self, menu):
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 Public method to create the Bluetooth submenu.
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 @param menu reference to the parent menu
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 @type QMenu
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 @return reference to the created menu
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 @rtype QMenu
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 btMenu = QMenu(self.tr("Bluetooth Functions"), menu)
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 btMenu.setTearOffEnabled(True)
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 btMenu.addAction(self.tr("Show Bluetooth Status"), self.__showBtStatus)
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 btMenu.addSeparator()
9857
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
47 btMenu.addAction(self.tr("Perform Scan"), self.__scan)
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 btMenu.addSeparator()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 btMenu.addAction(
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 self.tr("Activate Bluetooth Interface"),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 lambda: self.__activateInterface(),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 )
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 btMenu.addAction(
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 self.tr("Deactivate Bluetooth Interface"),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 lambda: self.__deactivateInterface(),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 )
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 # add device specific entries (if there are any)
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 self.__mpy.getDevice().addDeviceBluetoothEntries(btMenu)
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 return btMenu
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 @pyqtSlot()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 def __showBtStatus(self):
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 Private slot to show the status and some parameters of the Bluetooth interface.
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 from .BluetoothStatusDialog import BluetoothStatusDialog
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 try:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 status = self.__mpy.getDevice().getBluetoothStatus()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 # status is a list of user labels and associated values
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73
11005
b918c6c2736b MicroPython Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
74 dlg = BluetoothStatusDialog(status, parent=self.__mpy)
9855
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 dlg.exec()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 except Exception as exc:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 self.__mpy.showError("getBluetoothStatus()", str(exc))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 @pyqtSlot()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 def __activateInterface(self):
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 Private slot to activate the Bluetooth interface.
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 try:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 status = self.__mpy.getDevice().activateBluetoothInterface()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 if status:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 EricMessageBox.information(
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 None,
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 self.tr("Activate Bluetooth Interface"),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 self.tr("""Bluetooth was activated successfully."""),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 )
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 else:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 EricMessageBox.warning(
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 None,
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 self.tr("Activate Bluetooth Interface"),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 self.tr("""Bluetooth could not be activated."""),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 )
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 except Exception as exc:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 self.__mpy.showError("activateBluetoothInterface()", str(exc))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 @pyqtSlot()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 def __deactivateInterface(self):
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 Private slot to deactivate the Bluetooth interface.
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 try:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 status = self.__mpy.getDevice().deactivateBluetoothInterface()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 if not status:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 EricMessageBox.information(
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 None,
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 self.tr("Deactivate Bluetooth Interface"),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 self.tr("""Bluetooth was deactivated successfully."""),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 )
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 else:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 EricMessageBox.warning(
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 None,
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 self.tr("Deactivate Bluetooth Interface"),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 self.tr("""Bluetooth could not be deactivated."""),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 )
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 except Exception as exc:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 self.__mpy.showError("deactivateBluetoothInterface()", str(exc))
9857
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
122
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
123 @pyqtSlot()
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
124 def __scan(self):
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
125 """
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
126 Private slot to scan for Bluetooth devices.
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
127 """
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
128 from .BluetoothScanWindow import BluetoothScanWindow
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
129
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
130 win = BluetoothScanWindow(self.__mpy.getDevice(), self.__mpy)
0122ae72618d MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9855
diff changeset
131 win.show()

eric ide

mercurial