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