mirror of
https://github.com/CopterExpress/clever-show.git
synced 2026-06-09 21:44:32 +00:00
Merge branch 'master' into qt-gui-update
This commit is contained in:
@@ -101,6 +101,95 @@ def check_start_pos_status(item):
|
||||
def check_time_delta(item):
|
||||
return abs(item) < ModelChecks.time_delta_max
|
||||
|
||||
battery_min = config.getfloat('CHECKS', 'battery_percentage_min')
|
||||
start_pos_delta_max = config.getfloat('CHECKS', 'start_pos_delta_max')
|
||||
time_delta_max = config.getfloat('CHECKS', 'time_delta_max')
|
||||
|
||||
class ModelChecks:
|
||||
checks_dict = {}
|
||||
takeoff_checklist = (3, 4, 6, 7, 8)
|
||||
|
||||
@classmethod
|
||||
def col_check(cls, col):
|
||||
def inner(f):
|
||||
def wrapper(item):
|
||||
if item is not None:
|
||||
return f(item)
|
||||
return None
|
||||
|
||||
cls.checks_dict[col] = wrapper
|
||||
return wrapper
|
||||
|
||||
return inner
|
||||
|
||||
@classmethod
|
||||
def all_checks(cls, copter_item):
|
||||
for col, check in cls.checks_dict.items():
|
||||
if not check(copter_item[col]):
|
||||
return False
|
||||
return True
|
||||
|
||||
@classmethod
|
||||
def takeoff_checks(cls, copter_item):
|
||||
for col in cls.takeoff_checklist:
|
||||
if not cls.checks_dict[col](copter_item[col]):
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
@ModelChecks.col_check(1)
|
||||
def check_ver(item):
|
||||
return True # TODO git version!
|
||||
|
||||
|
||||
@ModelChecks.col_check(2)
|
||||
def check_anim(item):
|
||||
return str(item) != 'No animation'
|
||||
|
||||
|
||||
@ModelChecks.col_check(3)
|
||||
def check_bat(item):
|
||||
if item == "NO_INFO":
|
||||
return False
|
||||
return item[1]*100 > battery_min
|
||||
|
||||
|
||||
@ModelChecks.col_check(4)
|
||||
def check_sys_status(item):
|
||||
return item == "STANDBY"
|
||||
|
||||
|
||||
@ModelChecks.col_check(5)
|
||||
def check_cal_status(item):
|
||||
return item == "OK"
|
||||
|
||||
|
||||
@ModelChecks.col_check(6)
|
||||
def check_mode(item):
|
||||
return (item != "NO_FCU") and not ("CMODE" in item)
|
||||
|
||||
|
||||
@ModelChecks.col_check(7)
|
||||
def check_selfcheck(item):
|
||||
return item == "OK"
|
||||
|
||||
|
||||
@ModelChecks.col_check(8)
|
||||
def check_pos_status(item):
|
||||
if item == 'NO_POS':
|
||||
return False
|
||||
return not math.isnan(item[0])
|
||||
|
||||
|
||||
@ModelChecks.col_check(9)
|
||||
def check_start_pos_status(item):
|
||||
return item != 'NO_POS'
|
||||
|
||||
|
||||
@ModelChecks.col_check(10)
|
||||
def check_time_delta(item):
|
||||
return abs(item) < time_delta_max
|
||||
|
||||
|
||||
class CopterData:
|
||||
class_basic_attrs = indexed.IndexedOrderedDict([('copter_id', None), ('git_ver', None), ('anim_id', None),
|
||||
|
||||
@@ -174,6 +174,7 @@ class Server(messaging.Singleton):
|
||||
|
||||
if not any([client_addr == addr[0] for client_addr in Client.clients.keys()]):
|
||||
client = Client(addr[0])
|
||||
client.buffer_size = self.BUFFER_SIZE
|
||||
logging.info("New client")
|
||||
else:
|
||||
client = Client.clients[addr[0]]
|
||||
@@ -332,7 +333,7 @@ class Client(messaging.ConnectionManager):
|
||||
@requires_connect
|
||||
def _send(self, data):
|
||||
super()._send(data)
|
||||
logging.debug("Queued data to send: {}".format(data))
|
||||
logging.debug("Queued data to send (first 256 bytes): {}".format(data[:256]))
|
||||
|
||||
def send_config_options(self, *options: ConfigOption, reload_config=True):
|
||||
logging.info("Sending config options: {} to {}".format(options, self.addr))
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
# Form implementation generated from reading ui file 'server_gui.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.13.1
|
||||
# Created by: PyQt5 UI code generator 5.13.0
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -44,9 +44,17 @@ class Ui_MainWindow(object):
|
||||
self.verticalLayout.setSizeConstraint(QtWidgets.QLayout.SetMaximumSize)
|
||||
self.verticalLayout.setObjectName("verticalLayout")
|
||||
self.formLayout = QtWidgets.QFormLayout()
|
||||
self.formLayout.setLabelAlignment(QtCore.Qt.AlignCenter)
|
||||
self.formLayout.setFormAlignment(QtCore.Qt.AlignCenter)
|
||||
self.formLayout.setLabelAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)
|
||||
self.formLayout.setFormAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)
|
||||
self.formLayout.setObjectName("formLayout")
|
||||
self.start_text = QtWidgets.QLabel(self.centralwidget)
|
||||
self.start_text.setLayoutDirection(QtCore.Qt.RightToLeft)
|
||||
self.start_text.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.start_text.setObjectName("start_text")
|
||||
self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.start_text)
|
||||
self.start_delay_spin = QtWidgets.QSpinBox(self.centralwidget)
|
||||
self.start_delay_spin.setObjectName("start_delay_spin")
|
||||
self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.start_delay_spin)
|
||||
self.music_text = QtWidgets.QLabel(self.centralwidget)
|
||||
self.music_text.setLayoutDirection(QtCore.Qt.RightToLeft)
|
||||
self.music_text.setObjectName("music_text")
|
||||
@@ -56,6 +64,10 @@ class Ui_MainWindow(object):
|
||||
self.music_delay_spin.setMaximum(1000.0)
|
||||
self.music_delay_spin.setObjectName("music_delay_spin")
|
||||
self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.music_delay_spin)
|
||||
self.music_play_text = QtWidgets.QLabel(self.centralwidget)
|
||||
self.music_play_text.setLayoutDirection(QtCore.Qt.RightToLeft)
|
||||
self.music_play_text.setObjectName("music_play_text")
|
||||
self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.music_play_text)
|
||||
self.music_checkbox = QtWidgets.QCheckBox(self.centralwidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
@@ -70,18 +82,6 @@ class Ui_MainWindow(object):
|
||||
self.music_checkbox.setChecked(False)
|
||||
self.music_checkbox.setObjectName("music_checkbox")
|
||||
self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.music_checkbox)
|
||||
self.music_play_text = QtWidgets.QLabel(self.centralwidget)
|
||||
self.music_play_text.setLayoutDirection(QtCore.Qt.RightToLeft)
|
||||
self.music_play_text.setObjectName("music_play_text")
|
||||
self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.music_play_text)
|
||||
self.start_delay_spin = QtWidgets.QSpinBox(self.centralwidget)
|
||||
self.start_delay_spin.setObjectName("start_delay_spin")
|
||||
self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.start_delay_spin)
|
||||
self.start_text = QtWidgets.QLabel(self.centralwidget)
|
||||
self.start_text.setLayoutDirection(QtCore.Qt.RightToLeft)
|
||||
self.start_text.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.start_text.setObjectName("start_text")
|
||||
self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.start_text)
|
||||
self.verticalLayout.addLayout(self.formLayout)
|
||||
self.line = QtWidgets.QFrame(self.centralwidget)
|
||||
self.line.setFrameShape(QtWidgets.QFrame.HLine)
|
||||
@@ -89,42 +89,71 @@ class Ui_MainWindow(object):
|
||||
self.line.setObjectName("line")
|
||||
self.verticalLayout.addWidget(self.line)
|
||||
self.formLayout_2 = QtWidgets.QFormLayout()
|
||||
self.formLayout_2.setFormAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
|
||||
self.formLayout_2.setLabelAlignment(QtCore.Qt.AlignCenter)
|
||||
self.formLayout_2.setFormAlignment(QtCore.Qt.AlignCenter)
|
||||
self.formLayout_2.setObjectName("formLayout_2")
|
||||
self.stop_button = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.stop_button.setObjectName("stop_button")
|
||||
self.formLayout_2.setWidget(10, QtWidgets.QFormLayout.FieldRole, self.stop_button)
|
||||
self.pause_button = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.pause_button.setObjectName("pause_button")
|
||||
self.formLayout_2.setWidget(9, QtWidgets.QFormLayout.FieldRole, self.pause_button)
|
||||
self.check_button = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.check_button.setEnabled(True)
|
||||
self.check_button.setObjectName("check_button")
|
||||
self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.check_button)
|
||||
self.start_button = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.start_button.setEnabled(True)
|
||||
self.start_button.setFlat(False)
|
||||
self.start_button.setObjectName("start_button")
|
||||
self.formLayout_2.setWidget(8, QtWidgets.QFormLayout.FieldRole, self.start_button)
|
||||
self.check_button = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.check_button.setEnabled(True)
|
||||
self.check_button.setObjectName("check_button")
|
||||
self.formLayout_2.setWidget(7, QtWidgets.QFormLayout.FieldRole, self.check_button)
|
||||
self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.start_button)
|
||||
self.pause_button = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.pause_button.setObjectName("pause_button")
|
||||
self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.pause_button)
|
||||
self.verticalLayout.addLayout(self.formLayout_2)
|
||||
self.line_5 = QtWidgets.QFrame(self.centralwidget)
|
||||
self.line_5.setFrameShape(QtWidgets.QFrame.HLine)
|
||||
self.line_5.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||
self.line_5.setObjectName("line_5")
|
||||
self.verticalLayout.addWidget(self.line_5)
|
||||
self.formLayout_5 = QtWidgets.QFormLayout()
|
||||
self.formLayout_5.setLabelAlignment(QtCore.Qt.AlignCenter)
|
||||
self.formLayout_5.setFormAlignment(QtCore.Qt.AlignCenter)
|
||||
self.formLayout_5.setContentsMargins(-1, 0, -1, -1)
|
||||
self.formLayout_5.setObjectName("formLayout_5")
|
||||
self.land_selected_button = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.land_selected_button.setObjectName("land_selected_button")
|
||||
self.formLayout_5.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.land_selected_button)
|
||||
self.land_all_button = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.land_all_button.setObjectName("land_all_button")
|
||||
self.formLayout_5.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.land_all_button)
|
||||
self.verticalLayout.addLayout(self.formLayout_5)
|
||||
self.line_6 = QtWidgets.QFrame(self.centralwidget)
|
||||
self.line_6.setFrameShape(QtWidgets.QFrame.HLine)
|
||||
self.line_6.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||
self.line_6.setObjectName("line_6")
|
||||
self.verticalLayout.addWidget(self.line_6)
|
||||
self.formLayout_7 = QtWidgets.QFormLayout()
|
||||
self.formLayout_7.setFormAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
|
||||
self.formLayout_7.setContentsMargins(-1, 0, -1, -1)
|
||||
self.formLayout_7.setObjectName("formLayout_7")
|
||||
self.visual_land_button = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.visual_land_button.setObjectName("visual_land_button")
|
||||
self.formLayout_7.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.visual_land_button)
|
||||
self.emergency_land_button = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.emergency_land_button.setObjectName("emergency_land_button")
|
||||
self.formLayout_7.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.emergency_land_button)
|
||||
self.verticalLayout.addLayout(self.formLayout_7)
|
||||
self.line_2 = QtWidgets.QFrame(self.centralwidget)
|
||||
self.line_2.setFrameShape(QtWidgets.QFrame.HLine)
|
||||
self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
|
||||
self.line_2.setObjectName("line_2")
|
||||
self.verticalLayout.addWidget(self.line_2)
|
||||
self.formLayout_3 = QtWidgets.QFormLayout()
|
||||
self.formLayout_3.setFormAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
|
||||
self.formLayout_3.setLabelAlignment(QtCore.Qt.AlignCenter)
|
||||
self.formLayout_3.setFormAlignment(QtCore.Qt.AlignCenter)
|
||||
self.formLayout_3.setVerticalSpacing(6)
|
||||
self.formLayout_3.setObjectName("formLayout_3")
|
||||
self.disarm_all_button = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.disarm_all_button.setObjectName("disarm_all_button")
|
||||
self.formLayout_3.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.disarm_all_button)
|
||||
self.disarm_button = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.disarm_button.setObjectName("disarm_button")
|
||||
self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.disarm_button)
|
||||
self.emergency_button = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.emergency_button.setObjectName("emergency_button")
|
||||
self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.emergency_button)
|
||||
self.disarm_selected_button = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.disarm_selected_button.setObjectName("disarm_selected_button")
|
||||
self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.disarm_selected_button)
|
||||
self.verticalLayout.addLayout(self.formLayout_3)
|
||||
self.line_3 = QtWidgets.QFrame(self.centralwidget)
|
||||
self.line_3.setFrameShape(QtWidgets.QFrame.HLine)
|
||||
@@ -132,11 +161,9 @@ class Ui_MainWindow(object):
|
||||
self.line_3.setObjectName("line_3")
|
||||
self.verticalLayout.addWidget(self.line_3)
|
||||
self.formLayout_4 = QtWidgets.QFormLayout()
|
||||
self.formLayout_4.setFormAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
|
||||
self.formLayout_4.setLabelAlignment(QtCore.Qt.AlignCenter)
|
||||
self.formLayout_4.setFormAlignment(QtCore.Qt.AlignCenter)
|
||||
self.formLayout_4.setObjectName("formLayout_4")
|
||||
self.land_button = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.land_button.setObjectName("land_button")
|
||||
self.formLayout_4.setWidget(8, QtWidgets.QFormLayout.FieldRole, self.land_button)
|
||||
self.flip_button = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.flip_button.setObjectName("flip_button")
|
||||
self.formLayout_4.setWidget(7, QtWidgets.QFormLayout.FieldRole, self.flip_button)
|
||||
@@ -170,7 +197,8 @@ class Ui_MainWindow(object):
|
||||
self.line_4.setObjectName("line_4")
|
||||
self.verticalLayout.addWidget(self.line_4)
|
||||
self.formLayout_6 = QtWidgets.QFormLayout()
|
||||
self.formLayout_6.setFormAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
|
||||
self.formLayout_6.setLabelAlignment(QtCore.Qt.AlignCenter)
|
||||
self.formLayout_6.setFormAlignment(QtCore.Qt.AlignBottom|QtCore.Qt.AlignHCenter)
|
||||
self.formLayout_6.setObjectName("formLayout_6")
|
||||
self.reboot_fcu = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.reboot_fcu.setObjectName("reboot_fcu")
|
||||
@@ -187,7 +215,7 @@ class Ui_MainWindow(object):
|
||||
self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1)
|
||||
MainWindow.setCentralWidget(self.centralwidget)
|
||||
self.menubar = QtWidgets.QMenuBar(MainWindow)
|
||||
self.menubar.setGeometry(QtCore.QRect(0, 0, 1360, 25))
|
||||
self.menubar.setGeometry(QtCore.QRect(0, 0, 1360, 22))
|
||||
self.menubar.setObjectName("menubar")
|
||||
self.menuOptions = QtWidgets.QMenu(self.menubar)
|
||||
self.menuOptions.setObjectName("menuOptions")
|
||||
@@ -292,19 +320,20 @@ class Ui_MainWindow(object):
|
||||
def retranslateUi(self, MainWindow):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
MainWindow.setWindowTitle(_translate("MainWindow", "Clever Drone Show"))
|
||||
self.start_text.setText(_translate("MainWindow", " Start after"))
|
||||
self.start_delay_spin.setSuffix(_translate("MainWindow", " s"))
|
||||
self.music_text.setText(_translate("MainWindow", " Music after"))
|
||||
self.music_delay_spin.setSuffix(_translate("MainWindow", " s"))
|
||||
self.music_play_text.setText(_translate("MainWindow", " Play music"))
|
||||
self.start_delay_spin.setSuffix(_translate("MainWindow", " s"))
|
||||
self.start_text.setText(_translate("MainWindow", " Start after"))
|
||||
self.stop_button.setText(_translate("MainWindow", "Stop and land all"))
|
||||
self.pause_button.setText(_translate("MainWindow", "Pause"))
|
||||
self.start_button.setText(_translate("MainWindow", "Start animation"))
|
||||
self.check_button.setText(_translate("MainWindow", "Preflight check"))
|
||||
self.start_button.setText(_translate("MainWindow", "Start animation"))
|
||||
self.pause_button.setText(_translate("MainWindow", "Pause"))
|
||||
self.land_selected_button.setText(_translate("MainWindow", "Land selected"))
|
||||
self.land_all_button.setText(_translate("MainWindow", "Land ALL"))
|
||||
self.visual_land_button.setText(_translate("MainWindow", "Visual land"))
|
||||
self.emergency_land_button.setText(_translate("MainWindow", "Emergency land"))
|
||||
self.disarm_all_button.setText(_translate("MainWindow", "Disarm ALL"))
|
||||
self.disarm_button.setText(_translate("MainWindow", "Disarm selected"))
|
||||
self.emergency_button.setText(_translate("MainWindow", "Emergency land"))
|
||||
self.land_button.setText(_translate("MainWindow", "Land"))
|
||||
self.disarm_selected_button.setText(_translate("MainWindow", "Disarm selected"))
|
||||
self.flip_button.setText(_translate("MainWindow", "Flip"))
|
||||
self.takeoff_button.setText(_translate("MainWindow", "Takeoff"))
|
||||
self.leds_button.setText(_translate("MainWindow", "Test leds"))
|
||||
|
||||
@@ -71,11 +71,31 @@
|
||||
<item>
|
||||
<layout class="QFormLayout" name="formLayout">
|
||||
<property name="labelAlignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
<set>Qt::AlignHCenter|Qt::AlignTop</set>
|
||||
</property>
|
||||
<property name="formAlignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
<set>Qt::AlignHCenter|Qt::AlignTop</set>
|
||||
</property>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="start_text">
|
||||
<property name="layoutDirection">
|
||||
<enum>Qt::RightToLeft</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string> Start after</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QSpinBox" name="start_delay_spin">
|
||||
<property name="suffix">
|
||||
<string> s</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="music_text">
|
||||
<property name="layoutDirection">
|
||||
@@ -99,6 +119,16 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="music_play_text">
|
||||
<property name="layoutDirection">
|
||||
<enum>Qt::RightToLeft</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string> Play music</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QCheckBox" name="music_checkbox">
|
||||
<property name="sizePolicy">
|
||||
@@ -127,36 +157,6 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="music_play_text">
|
||||
<property name="layoutDirection">
|
||||
<enum>Qt::RightToLeft</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string> Play music</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QSpinBox" name="start_delay_spin">
|
||||
<property name="suffix">
|
||||
<string> s</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="start_text">
|
||||
<property name="layoutDirection">
|
||||
<enum>Qt::RightToLeft</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string> Start after</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
@@ -168,24 +168,23 @@
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QFormLayout" name="formLayout_2">
|
||||
<property name="formAlignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
<property name="labelAlignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<item row="10" column="1">
|
||||
<widget class="QPushButton" name="stop_button">
|
||||
<property name="formAlignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<item row="0" column="1">
|
||||
<widget class="QPushButton" name="check_button">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Stop and land all</string>
|
||||
<string>Preflight check</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="1">
|
||||
<widget class="QPushButton" name="pause_button">
|
||||
<property name="text">
|
||||
<string>Pause</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="1">
|
||||
<item row="1" column="1">
|
||||
<widget class="QPushButton" name="start_button">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
@@ -198,13 +197,75 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<widget class="QPushButton" name="check_button">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<item row="2" column="1">
|
||||
<widget class="QPushButton" name="pause_button">
|
||||
<property name="text">
|
||||
<string>Preflight check</string>
|
||||
<string>Pause</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Line" name="line_5">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QFormLayout" name="formLayout_5">
|
||||
<property name="labelAlignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="formAlignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="1" column="1">
|
||||
<widget class="QPushButton" name="land_selected_button">
|
||||
<property name="text">
|
||||
<string>Land selected</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QPushButton" name="land_all_button">
|
||||
<property name="text">
|
||||
<string>Land ALL</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Line" name="line_6">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QFormLayout" name="formLayout_7">
|
||||
<property name="formAlignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="1" column="1">
|
||||
<widget class="QPushButton" name="visual_land_button">
|
||||
<property name="text">
|
||||
<string>Visual land</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QPushButton" name="emergency_land_button">
|
||||
<property name="text">
|
||||
<string>Emergency land</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -219,8 +280,11 @@
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QFormLayout" name="formLayout_3">
|
||||
<property name="labelAlignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="formAlignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="verticalSpacing">
|
||||
<number>6</number>
|
||||
@@ -233,19 +297,12 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QPushButton" name="disarm_button">
|
||||
<widget class="QPushButton" name="disarm_selected_button">
|
||||
<property name="text">
|
||||
<string>Disarm selected</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QPushButton" name="emergency_button">
|
||||
<property name="text">
|
||||
<string>Emergency land</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
@@ -257,16 +314,12 @@
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QFormLayout" name="formLayout_4">
|
||||
<property name="formAlignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
<property name="labelAlignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="formAlignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<item row="8" column="1">
|
||||
<widget class="QPushButton" name="land_button">
|
||||
<property name="text">
|
||||
<string>Land</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<widget class="QPushButton" name="flip_button">
|
||||
<property name="text">
|
||||
@@ -341,8 +394,11 @@
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QFormLayout" name="formLayout_6">
|
||||
<property name="labelAlignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="formAlignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
<set>Qt::AlignBottom|Qt::AlignHCenter</set>
|
||||
</property>
|
||||
<item row="0" column="1">
|
||||
<widget class="QPushButton" name="reboot_fcu">
|
||||
@@ -379,7 +435,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1360</width>
|
||||
<height>25</height>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<widget class="QMenu" name="menuOptions">
|
||||
|
||||
@@ -98,7 +98,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
self.ui.check_button.clicked.connect(self.selfcheck_selected)
|
||||
self.ui.start_button.clicked.connect(self.send_start_time_selected)
|
||||
self.ui.pause_button.clicked.connect(self.pause_resume_selected)
|
||||
self.ui.stop_button.clicked.connect(self.land_all)
|
||||
|
||||
self.ui.emergency_button.clicked.connect(self.emergency)
|
||||
self.ui.disarm_button.clicked.connect(partial(self.send_to_selected, "disarm"))
|
||||
@@ -273,6 +272,12 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
self.send_to_selected("resume", {"time": server.time_now() + time_gap})
|
||||
self.ui.pause_button.setText('Pause')
|
||||
|
||||
|
||||
@pyqtSlot()
|
||||
def land_selected(self):
|
||||
for copter in self.model.user_selected():
|
||||
copter.client.send_message("land")
|
||||
|
||||
@pyqtSlot()
|
||||
def land_all(self):
|
||||
Client.broadcast_message("land")
|
||||
@@ -281,6 +286,12 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
def disarm_all(self):
|
||||
Client.broadcast_message("disarm")
|
||||
|
||||
|
||||
@pyqtSlot()
|
||||
def test_leds_selected(self):
|
||||
for copter in self.model.user_selected():
|
||||
copter.client.send_message("led_test")
|
||||
|
||||
@pyqtSlot()
|
||||
@confirmation_required("This operation will takeoff copters immediately. Proceed?")
|
||||
def takeoff_selected(self):
|
||||
|
||||
@@ -1,36 +1,20 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'emergency.ui'
|
||||
# Form implementation generated from reading ui file 'visual_land.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.11.3
|
||||
# Created by: PyQt5 UI code generator 5.13.0
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
import os
|
||||
import glob
|
||||
|
||||
from PyQt5 import QtWidgets
|
||||
from PyQt5.QtGui import QStandardItemModel, QStandardItem
|
||||
from PyQt5.QtCore import Qt, pyqtSlot, pyqtSignal, QObject
|
||||
|
||||
from PyQt5.QtWidgets import QDialog
|
||||
|
||||
# Importing gui form
|
||||
from server_qt import *
|
||||
from server import *
|
||||
|
||||
class Ui_Dialog(object):
|
||||
|
||||
def __init__(self):
|
||||
self.Dialog = None
|
||||
def setupUi(self, Dialog):
|
||||
self.Dialog = Dialog
|
||||
Dialog.setObjectName("Dialog")
|
||||
Dialog.resize(746, 620)
|
||||
Dialog.setStyleSheet("QDialog{\n"
|
||||
"background-color: #fffdd0;\n"
|
||||
"}")
|
||||
Dialog.setStyleSheet("")
|
||||
self.two_button = QtWidgets.QPushButton(Dialog)
|
||||
self.two_button.setGeometry(QtCore.QRect(420, 120, 231, 171))
|
||||
self.two_button.setSizeIncrement(QtCore.QSize(16, 16))
|
||||
@@ -42,10 +26,12 @@ class Ui_Dialog(object):
|
||||
"}")
|
||||
self.two_button.setObjectName("two_button")
|
||||
self.label = QtWidgets.QLabel(Dialog)
|
||||
self.label.setGeometry(QtCore.QRect(90, 30, 561, 51))
|
||||
self.label.setGeometry(QtCore.QRect(60, 30, 631, 51))
|
||||
font = QtGui.QFont()
|
||||
font.setPointSize(16)
|
||||
font.setPointSize(20)
|
||||
self.label.setFont(font)
|
||||
self.label.setLayoutDirection(QtCore.Qt.LeftToRight)
|
||||
self.label.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.label.setObjectName("label")
|
||||
self.one_button = QtWidgets.QPushButton(Dialog)
|
||||
self.one_button.setGeometry(QtCore.QRect(90, 120, 231, 171))
|
||||
@@ -54,7 +40,7 @@ class Ui_Dialog(object):
|
||||
"color: white;\n"
|
||||
"font-weight: 600;\n"
|
||||
"font-size: 25pt;\n"
|
||||
"background-color: RGB(118, 255, 122);\n"
|
||||
"background-color: green;\n"
|
||||
"}")
|
||||
self.one_button.setObjectName("one_button")
|
||||
self.land_emergency_button = QtWidgets.QPushButton(Dialog)
|
||||
@@ -73,39 +59,15 @@ class Ui_Dialog(object):
|
||||
"background-color: white;\n"
|
||||
"}")
|
||||
self.disarm_emergency_button.setObjectName("disarm_emergency_button")
|
||||
self.one_button.clicked.connect(self.one_button_click)
|
||||
self.two_button.clicked.connect(self.two_button_click)
|
||||
self.land_emergency_button.clicked.connect(self.land_emergency_click)
|
||||
self.disarm_emergency_button.clicked.connect(self.disarm_emergency_click)
|
||||
|
||||
self.retranslateUi(Dialog)
|
||||
QtCore.QMetaObject.connectSlotsByName(Dialog)
|
||||
|
||||
def retranslateUi(self, Dialog):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
|
||||
Dialog.setWindowTitle(_translate("Dialog", "Visual land"))
|
||||
self.two_button.setText(_translate("Dialog", "2"))
|
||||
self.label.setText(_translate("Dialog", "\n"
|
||||
"Select a group in which the drone does not work correctly"))
|
||||
self.label.setText(_translate("Dialog", "Select the group with the defective copter"))
|
||||
self.one_button.setText(_translate("Dialog", "1"))
|
||||
self.land_emergency_button.setText(_translate("Dialog", "Land"))
|
||||
self.disarm_emergency_button.setText(_translate("Dialog", "Disarm"))
|
||||
def one_button_click(self):
|
||||
self.Dialog.done(1)
|
||||
def two_button_click(self):
|
||||
self.Dialog.done(2)
|
||||
def land_emergency_click(self):
|
||||
self.Dialog.done(3)
|
||||
def disarm_emergency_click(self):
|
||||
self.Dialog.done(4)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
Dialog = QtWidgets.QDialog()
|
||||
ui = Ui_Dialog()
|
||||
ui.setupUi(Dialog)
|
||||
Dialog.show()
|
||||
sys.exit(app.exec_())
|
||||
|
||||
self.disarm_emergency_button.setText(_translate("Dialog", "Disarm"))
|
||||
@@ -11,12 +11,10 @@
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
<string>Visual land</string>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QDialog{
|
||||
background-color: #fffdd0;
|
||||
}</string>
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<widget class="QPushButton" name="two_button">
|
||||
<property name="geometry">
|
||||
@@ -48,20 +46,25 @@ background-color: red;
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>90</x>
|
||||
<x>60</x>
|
||||
<y>30</y>
|
||||
<width>561</width>
|
||||
<width>631</width>
|
||||
<height>51</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>16</pointsize>
|
||||
<pointsize>20</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="layoutDirection">
|
||||
<enum>Qt::LeftToRight</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>
|
||||
Select a group in which the drone does not work correctly</string>
|
||||
<string>Select the group with the defective copter</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="one_button">
|
||||
@@ -84,7 +87,7 @@ Select a group in which the drone does not work correctly</string>
|
||||
color: white;
|
||||
font-weight: 600;
|
||||
font-size: 25pt;
|
||||
background-color: RGB(118, 255, 122);
|
||||
background-color: green;
|
||||
}</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
Reference in New Issue
Block a user