src/eric7/MicroPython/BluetoothDialogs/BluetoothController.py

Tue, 07 Mar 2023 16:22:07 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 07 Mar 2023 16:22:07 +0100
branch
mpy_network
changeset 9855
c9244db5566a
child 9857
0122ae72618d
permissions
-rw-r--r--

MicroPython
- Added support for Bluetooth enabled boards.

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
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2023 Detlev Offenbach <detlev@die-offenbachs.de>
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()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 btMenu.addSeparator()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 btMenu.addAction(
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 self.tr("Activate Bluetooth Interface"),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 lambda: self.__activateInterface(),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 )
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 btMenu.addAction(
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 self.tr("Deactivate Bluetooth Interface"),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 lambda: self.__deactivateInterface(),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 )
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 # add device specific entries (if there are any)
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 self.__mpy.getDevice().addDeviceBluetoothEntries(btMenu)
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 return btMenu
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 @pyqtSlot()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 def __showBtStatus(self):
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 Private slot to show the status and some parameters of the Bluetooth interface.
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 from .BluetoothStatusDialog import BluetoothStatusDialog
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 try:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 status = self.__mpy.getDevice().getBluetoothStatus()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 # status is a list of user labels and associated values
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 dlg = BluetoothStatusDialog(status, self.__mpy)
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 dlg.exec()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 except Exception as exc:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 self.__mpy.showError("getBluetoothStatus()", str(exc))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 @pyqtSlot()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 def __activateInterface(self):
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 Private slot to activate the Bluetooth interface.
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 try:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 status = self.__mpy.getDevice().activateBluetoothInterface()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 if status:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 EricMessageBox.information(
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 None,
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 self.tr("Activate Bluetooth Interface"),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 self.tr("""Bluetooth was activated successfully."""),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 )
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 else:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 EricMessageBox.warning(
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 None,
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 self.tr("Activate Bluetooth Interface"),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 self.tr("""Bluetooth could not be activated."""),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 )
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 except Exception as exc:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 self.__mpy.showError("activateBluetoothInterface()", str(exc))
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 @pyqtSlot()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 def __deactivateInterface(self):
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 Private slot to deactivate the Bluetooth interface.
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 """
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 try:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 status = self.__mpy.getDevice().deactivateBluetoothInterface()
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 if not status:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 EricMessageBox.information(
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 None,
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 self.tr("Deactivate Bluetooth Interface"),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 self.tr("""Bluetooth was deactivated successfully."""),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 )
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 else:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 EricMessageBox.warning(
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 None,
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 self.tr("Deactivate Bluetooth Interface"),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 self.tr("""Bluetooth could not be deactivated."""),
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 )
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 except Exception as exc:
c9244db5566a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 self.__mpy.showError("deactivateBluetoothInterface()", str(exc))

eric ide

mercurial