Continued fixes
This commit is contained in:
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
import glob
|
import glob
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
@ -181,14 +182,14 @@ class ControllerInterface:
|
|||||||
"currents set": (0xBE, 0xEE),
|
"currents set": (0xBE, 0xEE),
|
||||||
"currents get": (0xBE, 0xEF),
|
"currents get": (0xBE, 0xEF),
|
||||||
"powers": (0xBE, 0x10),
|
"powers": (0xBE, 0x10),
|
||||||
# "address": (0xBF, 0x20),
|
"address": (0xBF, 0x20),
|
||||||
# "device info": (0xBF, 0x00),
|
"device info": (0xBF, 0x00),
|
||||||
# "device mode set": (0xBF, 0x10),
|
"device mode set": (0xBF, 0x10),
|
||||||
# "device mode get": (0xBF, 0x11),
|
"device mode get": (0xBF, 0x11),
|
||||||
"address": (0x00, 0xF0),
|
# "address": (0x00, 0xF0),
|
||||||
"device info": (0x00, 0x60),
|
# "device info": (0x00, 0x60),
|
||||||
"device mode set": (0x00, 0xE0),
|
# "device mode set": (0x00, 0xE0),
|
||||||
"device mode get": (0x00, 0xE1),
|
# "device mode get": (0x00, 0xE1),
|
||||||
}
|
}
|
||||||
|
|
||||||
# Currents #
|
# Currents #
|
||||||
@ -302,3 +303,4 @@ class ControllerInterface:
|
|||||||
except (OSError, SerialException):
|
except (OSError, SerialException):
|
||||||
pass
|
pass
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
@ -388,8 +388,7 @@ def finish():
|
|||||||
win.destroy()
|
win.destroy()
|
||||||
controller.close()
|
controller.close()
|
||||||
|
|
||||||
|
def power_test() -> None:
|
||||||
if __name__ == "__main__":
|
|
||||||
controller.connect("/dev/ttyUSB0")
|
controller.connect("/dev/ttyUSB0")
|
||||||
|
|
||||||
pws = controller.readPowers()
|
pws = controller.readPowers()
|
||||||
@ -401,6 +400,9 @@ if __name__ == "__main__":
|
|||||||
pws = controller.readPowers()
|
pws = controller.readPowers()
|
||||||
print(pws)
|
print(pws)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
win.configure(width=270, height=350)
|
win.configure(width=270, height=350)
|
||||||
win.resizable(False, False)
|
win.resizable(False, False)
|
||||||
win.title("Controllers")
|
win.title("Controllers")
|
||||||
|
166
main.py
166
main.py
@ -1,4 +1,5 @@
|
|||||||
import time
|
import time
|
||||||
|
from threading import Timer
|
||||||
|
|
||||||
from PyQt6 import QtCore, QtGui, QtWidgets
|
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||||
from ui import Ui_Controller
|
from ui import Ui_Controller
|
||||||
@ -22,6 +23,11 @@ class Window(QtWidgets.QMainWindow):
|
|||||||
self.redLineEdit = "QLineEdit { background: rgb(255, 0, 0); selection-background-color: rgb(111, 136, 222); }"
|
self.redLineEdit = "QLineEdit { background: rgb(255, 0, 0); selection-background-color: rgb(111, 136, 222); }"
|
||||||
self.defLineEdit = "QLineEdit { }"
|
self.defLineEdit = "QLineEdit { }"
|
||||||
|
|
||||||
|
# button click times
|
||||||
|
self.last_click_time = 0
|
||||||
|
|
||||||
|
self.savedStatus = ""
|
||||||
|
|
||||||
# object containers
|
# object containers
|
||||||
self.currentFields = [
|
self.currentFields = [
|
||||||
self.ui.Current1Field,
|
self.ui.Current1Field,
|
||||||
@ -36,21 +42,6 @@ class Window(QtWidgets.QMainWindow):
|
|||||||
# connect signals
|
# connect signals
|
||||||
self.connectMethods()
|
self.connectMethods()
|
||||||
|
|
||||||
class ComboBoxHoverEventFilter(QtCore.QObject):
|
|
||||||
def __init__(self, parent, onEnter):
|
|
||||||
super().__init__(parent)
|
|
||||||
self.parent = parent
|
|
||||||
self.onEnter = onEnter
|
|
||||||
|
|
||||||
def eventFilter(self, obj, event):
|
|
||||||
if event.type() == QtCore.QEvent.Type.Enter:
|
|
||||||
self.onEnter()
|
|
||||||
return super().eventFilter(obj, event)
|
|
||||||
|
|
||||||
def connectMethods(self):
|
|
||||||
self.ui.DeviceSelection.activated.connect(self.deviceSelected)
|
|
||||||
self.ui.DeviceSelection.installEventFilter(self.hoverFilter)
|
|
||||||
|
|
||||||
def resetAllStyles(self) -> None:
|
def resetAllStyles(self) -> None:
|
||||||
for f in self.currentFields:
|
for f in self.currentFields:
|
||||||
f.setStyleSheet(self.defLineEdit)
|
f.setStyleSheet(self.defLineEdit)
|
||||||
@ -59,11 +50,21 @@ class Window(QtWidgets.QMainWindow):
|
|||||||
for f in self.currentFields:
|
for f in self.currentFields:
|
||||||
f.setText("")
|
f.setText("")
|
||||||
|
|
||||||
|
|
||||||
|
def resetStatus(self) -> None:
|
||||||
|
self.setStatus(self.savedStatus)
|
||||||
|
|
||||||
def setStatus(self, text: str) -> None :
|
def setStatus(self, text: str) -> None :
|
||||||
print(text)
|
print(text)
|
||||||
self.ui.Status.setText(text)
|
self.ui.Status.setText(text)
|
||||||
self.repaint()
|
self.repaint()
|
||||||
|
|
||||||
|
def setTempStatus(self, new_status: str, reset_time: float) -> None:
|
||||||
|
if self.ui.Status.text() != new_status:
|
||||||
|
self.savedStatus = self.ui.Status.text()
|
||||||
|
self.setStatus(new_status)
|
||||||
|
Timer(reset_time, self.resetStatus).start()
|
||||||
|
|
||||||
def deviceSelected(self, deviceIndex: int):
|
def deviceSelected(self, deviceIndex: int):
|
||||||
device = self.ui.DeviceSelection.itemText(deviceIndex)
|
device = self.ui.DeviceSelection.itemText(deviceIndex)
|
||||||
self.connected = False
|
self.connected = False
|
||||||
@ -86,6 +87,14 @@ class Window(QtWidgets.QMainWindow):
|
|||||||
self.connected = False
|
self.connected = False
|
||||||
self.controller.close()
|
self.controller.close()
|
||||||
|
|
||||||
|
def connectionLost(self) -> None:
|
||||||
|
self.controller.close()
|
||||||
|
self.setStatus('Пожалуйста, выберите порт')
|
||||||
|
self.setTempStatus(f'Подключение к {self.controller.controller.ser.port} потеряно!', 2)
|
||||||
|
self.resetAllStyles()
|
||||||
|
self.ui.DeviceSelection.clear()
|
||||||
|
self.clearAllFields()
|
||||||
|
|
||||||
def readControllerCurrentsAndData(self) -> bool:
|
def readControllerCurrentsAndData(self) -> bool:
|
||||||
self.setStatus(f'Чтение токов {self.controller.controller.ser.port}...')
|
self.setStatus(f'Чтение токов {self.controller.controller.ser.port}...')
|
||||||
values = self.controller.readCurrents()
|
values = self.controller.readCurrents()
|
||||||
@ -141,10 +150,137 @@ class Window(QtWidgets.QMainWindow):
|
|||||||
|
|
||||||
return values or address != -1 or self.modes
|
return values or address != -1 or self.modes
|
||||||
|
|
||||||
|
def writeCurrentsAddressAndMode(self) -> None:
|
||||||
|
toWrite = []
|
||||||
|
for f in self.currentFields:
|
||||||
|
x = f.text()
|
||||||
|
if x != "":
|
||||||
|
toWrite.append(int(x) // 10)
|
||||||
|
else:
|
||||||
|
toWrite.append(0)
|
||||||
|
|
||||||
|
(self.
|
||||||
|
setStatus(f'Запись токов в {self.controller.controller.ser.port}...'))
|
||||||
|
print(f'Writing... {toWrite}')
|
||||||
|
if not self.controller.writeCurrents(toWrite):
|
||||||
|
self.connectionLost()
|
||||||
|
return
|
||||||
|
|
||||||
|
self.setStatus(f'Запись адреса в {self.controller.controller.ser.port}...')
|
||||||
|
if self.ui.DmxAddressField.text() != "" and not self.controller.writeAddress(int(self.ui.DmxAddressField.text())):
|
||||||
|
self.connectionLost()
|
||||||
|
return
|
||||||
|
|
||||||
|
# TODO Mode is not being written
|
||||||
|
self.setStatus(f'Запись режима в {self.controller.controller.ser.port}...')
|
||||||
|
if not self.controller.writeMode(self.ui.ModeSelection.currentIndex() + 1):
|
||||||
|
self.connectionLost()
|
||||||
|
return
|
||||||
|
|
||||||
|
if not self.ui.Check.isChecked():
|
||||||
|
self.setStatus(f'Выбранный порт: {self.controller.controller.ser.port}')
|
||||||
|
self.setTempStatus(f'Данные были записаны в {self.controller.controller.ser.port}', 1)
|
||||||
|
else:
|
||||||
|
time.sleep(0.5)
|
||||||
|
dmx_save = self.ui.DmxAddressField.text()
|
||||||
|
pers_save = self.ui.Personality.text()
|
||||||
|
currents_save = []
|
||||||
|
for entry in self.currentFields:
|
||||||
|
currents_save.append(entry.text())
|
||||||
|
|
||||||
|
self.setStatus(f'Чтение адреса: {self.controller.controller.ser.port}...')
|
||||||
|
dmx_real = self.controller.readAddress()
|
||||||
|
|
||||||
|
self.setStatus(f'Чтение режима: {self.controller.controller.ser.port}...')
|
||||||
|
dev_info = self.controller.readDeviceInfo()
|
||||||
|
|
||||||
|
self.setStatus(f'Чтение токов: {self.controller.controller.ser.port}...')
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
currents_real = self.controller.readCurrents()
|
||||||
|
|
||||||
|
if dmx_real == -1 or not dev_info or not currents_real:
|
||||||
|
self.connectionLost()
|
||||||
|
return
|
||||||
|
|
||||||
|
pers_real = f'{dev_info[1]}:{self.modes[dev_info[1] - 1][1]}'
|
||||||
|
failed = False
|
||||||
|
if dmx_save == "" or int(dmx_save) != dmx_real:
|
||||||
|
failed = True
|
||||||
|
# TODO self.dmx_address_field.configure(style='failedToRead.TEntry')
|
||||||
|
else:
|
||||||
|
...
|
||||||
|
# TODO dmx_address_field.configure(style='TEntry')
|
||||||
|
|
||||||
|
if pers_save != pers_real:
|
||||||
|
failed = True
|
||||||
|
# TODO personality_combobox.set('ERROR')
|
||||||
|
else:
|
||||||
|
...
|
||||||
|
# TODOpersonality_combobox.configure(style='TCombobox')
|
||||||
|
|
||||||
|
for index in range(4):
|
||||||
|
if currents_save[index] == "" or int(currents_save[index]) != currents_real[index] * 10:
|
||||||
|
failed = True
|
||||||
|
# TODO current_entries[index].configure(style='failedToRead.TEntry')
|
||||||
|
else:
|
||||||
|
...
|
||||||
|
# TODO current_entries[index].configure(style='TEntry')
|
||||||
|
|
||||||
|
self.setStatus(f'Выбранный порт: {self.controller.controller.ser.port}')
|
||||||
|
if failed:
|
||||||
|
self.setTempStatus('Обнаружены ошибки, повторите запись', 1)
|
||||||
|
else:
|
||||||
|
self.setTempStatus('Проверка прошла успешно', 1)
|
||||||
|
|
||||||
def refreshDeviceList(self):
|
def refreshDeviceList(self):
|
||||||
self.ui.DeviceSelection.clear()
|
self.ui.DeviceSelection.clear()
|
||||||
self.ui.DeviceSelection.addItems(self.controller.readComPorts())
|
self.ui.DeviceSelection.addItems(self.controller.readComPorts())
|
||||||
|
|
||||||
|
def readCallback(self) -> None:
|
||||||
|
if time.time() - self.last_click_time < 1:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.last_click_time = time.time()
|
||||||
|
|
||||||
|
if self.connected:
|
||||||
|
if not self.readControllerCurrentsAndData():
|
||||||
|
self.connectionLost()
|
||||||
|
return
|
||||||
|
|
||||||
|
self.setStatus(f'Выбранный порт: {self.controller.controller.ser.port}')
|
||||||
|
self.setTempStatus(f'Токи прочитаны, порт: {self.controller.controller.ser.port}', 1)
|
||||||
|
else:
|
||||||
|
self.setTempStatus('Порт не выбран!', 1)
|
||||||
|
|
||||||
|
def writeCallback(self) -> None:
|
||||||
|
if time.time() - self.last_click_time < 2:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.last_click_time = time.time()
|
||||||
|
|
||||||
|
if self.connected:
|
||||||
|
self.writeCurrentsAddressAndMode()
|
||||||
|
else:
|
||||||
|
self.setTempStatus('Порт не выбран!', 1)
|
||||||
|
|
||||||
|
def connectMethods(self):
|
||||||
|
self.ui.DeviceSelection.activated.connect(self.deviceSelected)
|
||||||
|
self.ui.DeviceSelection.installEventFilter(self.hoverFilter)
|
||||||
|
self.ui.Read.clicked.connect(self.readCallback)
|
||||||
|
self.ui.Write.clicked.connect(self.writeCallback)
|
||||||
|
|
||||||
|
class ComboBoxHoverEventFilter(QtCore.QObject):
|
||||||
|
def __init__(self, parent, onEnter):
|
||||||
|
super().__init__(parent)
|
||||||
|
self.parent = parent
|
||||||
|
self.onEnter = onEnter
|
||||||
|
|
||||||
|
def eventFilter(self, obj, event):
|
||||||
|
if event.type() == QtCore.QEvent.Type.Enter:
|
||||||
|
self.onEnter()
|
||||||
|
return super().eventFilter(obj, event)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
import sys
|
import sys
|
||||||
app = QtWidgets.QApplication(sys.argv)
|
app = QtWidgets.QApplication(sys.argv)
|
||||||
|
Reference in New Issue
Block a user