diff --git a/software/ros_packages/ground_station/src/Framework/MiscSystems/BashConsoleCore.py b/software/ros_packages/ground_station/src/Framework/MiscSystems/BashConsoleCore.py
index 1af9476..c21efff 100644
--- a/software/ros_packages/ground_station/src/Framework/MiscSystems/BashConsoleCore.py
+++ b/software/ros_packages/ground_station/src/Framework/MiscSystems/BashConsoleCore.py
@@ -6,6 +6,7 @@
from PyQt5 import QtCore, QtWidgets, QtGui
import logging
from time import time
+import paramiko
#####################################
@@ -13,11 +14,18 @@ from time import time
#####################################
THREAD_HERTZ = 5
+IP = "192.168.1.10"
+USER = "nvidia"
+PASS = "nvidia"
+
#####################################
-# UbiquitiRadioSettings Class Definition
+# BashConsole Class Definition
#####################################
class BashConsole(QtCore.QThread):
+
+ text_update_ready__signal = QtCore.pyqtSignal(str)
+
def __init__(self, shared_objects):
super(BashConsole, self).__init__()
@@ -25,7 +33,19 @@ class BashConsole(QtCore.QThread):
self.shared_objects = shared_objects
self.left_screen = self.shared_objects["screens"]["left_screen"]
- self.ssh_widget = self.left_screen.ssh_console_widget # type: QtWidgets.QSpinBox
+ self.console_text_edit = self.left_screen.console_line_edit # type: QtWidgets.QTextEdit
+ self.ssh_console_command_line_edit = self.left_screen.ssh_console_command_line_edit # type:QtWidgets.QLineEdit
+
+ self.ssh_list_wifi_button = self.left_screen.ssh_list_wifi_button # type: QtWidgets.QPushButton
+ self.ssh_equipment_login_button = self.left_screen.ssh_equipment_login_button # type: QtWidgets.QPushButton
+ self.ssh_equipment_logout_button = self.left_screen.ssh_equipment_logout_button # type: QtWidgets.QPushButton
+ self.ssh_equipment_status_button = self.left_screen.ssh_equipment_status_button # type: QtWidgets.QPushButton
+ self.ssh_equipment_start_button = self.left_screen.ssh_equipment_start_button # type: QtWidgets.QPushButton
+ self.ssh_equipment_stop_button = self.left_screen.ssh_equipment_stop_button # type: QtWidgets.QPushButton
+
+ self.ssh_ssid_line_edit = self.left_screen.ssh_ssid_line_edit # type:QtWidgets.QLineEdit
+ self.ssh_connect_ssid_push_button = self.left_screen.ssh_ssid_push_button # type: QtWidgets.QPushButton
+ self.ssh_disconnect_wifi_button = self.left_screen.ssh_disconnect_wifi_button # type: QtWidgets.QPushButton
# ########## Get the settings instance ##########
self.settings = QtCore.QSettings()
@@ -37,18 +57,114 @@ class BashConsole(QtCore.QThread):
self.run_thread_flag = True
# ########## Class Variables ##########
+ self.bash_process = None
+ self.new_widget = None
+ self.window = None
+
self.wait_time = 1.0 / THREAD_HERTZ
+ self.ssh_client = None
+
+ self.set_text_contents = ""
+
+ self.new_command_text = ""
+ self.new_command = False
+
def run(self):
+ while not self.ssh_client:
+ try:
+ self.ssh_client = paramiko.SSHClient()
+ self.ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+ self.ssh_client.connect(IP, username=USER, password=PASS, compress=True)
+ except:
+ print "No connection"
+ self.ssh_client = None
+ self.msleep(1000)
+
while self.run_thread_flag:
start_time = time()
+ if self.new_command:
+ _, ssh_stdout, ssh_stderr = self.ssh_client.exec_command(self.new_command_text)
+
+ stdout_read = ssh_stdout.read()
+ stderr_read = ssh_stderr.read()
+
+ output = ""
+ output += "\n%s@%s:$" % (USER, IP)
+ output += self.new_command_text + "\n"
+ output += stdout_read.decode("utf-8") if stdout_read else ""
+ output += stderr_read.decode("utf-8") if stderr_read else ""
+
+ self.set_text_contents += output
+ self.text_update_ready__signal.emit(self.set_text_contents)
+ self.new_command = False
+
time_diff = time() - start_time
self.msleep(max(int(self.wait_time - time_diff), 0))
+ del self.bash_process
+
+ def on_text_readout_updated__slot(self):
+ self.console_text_edit.moveCursor(QtGui.QTextCursor.End)
+
+ def on_text_editing_finished__slot(self):
+ self.new_command_text = self.ssh_console_command_line_edit.text()
+ self.new_command = True
+
+ def on_list_wifi_button_pressed__slot(self):
+ self.new_command_text = "nmcli dev wifi list"
+ self.new_command = True
+
+ def on_login_button_pressed__slot(self):
+ self.new_command_text = "python equipment_servicing_interface.py 'task.cstag.ca' 'LOGIN MTECH GITRDONE' HELP"
+ self.new_command = True
+
+ def on_logout_button_pressed__slot(self):
+ self.new_command_text = "python equipment_servicing_interface.py 'task.cstag.ca' LOGOUT"
+ self.new_command = True
+
+ def on_status_button_pressed__slot(self):
+ self.new_command_text = "python equipment_servicing_interface.py 'task.cstag.ca' STATUS"
+ self.new_command = True
+
+ def on_start_button_pressed__slot(self):
+ self.new_command_text = "python equipment_servicing_interface.py 'task.cstag.ca' START"
+ self.new_command = True
+
+ def on_stop_button_pressed__slot(self):
+ self.new_command_text = "python equipment_servicing_interface.py 'task.cstag.ca' STOP"
+ self.new_command = True
+
+ def on_connect_ssid_button_pressed__slot(self):
+ ssid_text = self.ssh_ssid_line_edit.text()
+
+ self.new_command_text = "sudo nmcli dev wifi connect %s" % ssid_text
+
+ self.new_command = True
+
+ def on_disconnect_ssid_button_pressed__slot(self):
+ ssid_text = self.ssh_ssid_line_edit.text()
+
+ self.new_command_text = "sudo nmcli con down id %s ; sudo nmcli connection delete %s" % (ssid_text, ssid_text)
+
+ self.new_command = True
+
def connect_signals_and_slots(self):
- pass
+ self.text_update_ready__signal.connect(self.console_text_edit.setText)
+ self.ssh_console_command_line_edit.editingFinished.connect(self.on_text_editing_finished__slot)
+ self.console_text_edit.textChanged.connect(self.on_text_readout_updated__slot)
+
+ self.ssh_equipment_login_button.clicked.connect(self.on_login_button_pressed__slot)
+ self.ssh_equipment_logout_button.clicked.connect(self.on_logout_button_pressed__slot)
+ self.ssh_equipment_status_button.clicked.connect(self.on_status_button_pressed__slot)
+ self.ssh_equipment_start_button.clicked.connect(self.on_start_button_pressed__slot)
+ self.ssh_equipment_stop_button.clicked.connect(self.on_stop_button_pressed__slot)
+
+ self.ssh_list_wifi_button.clicked.connect(self.on_list_wifi_button_pressed__slot)
+ self.ssh_connect_ssid_push_button.clicked.connect(self.on_connect_ssid_button_pressed__slot)
+ self.ssh_disconnect_wifi_button.clicked.connect(self.on_disconnect_ssid_button_pressed__slot)
def setup_signals(self, start_signal, signals_and_slots_signal, kill_signal):
start_signal.connect(self.start)
diff --git a/software/ros_packages/ground_station/src/Resources/Ui/left_screen.ui b/software/ros_packages/ground_station/src/Resources/Ui/left_screen.ui
index c713d9b..000069b 100644
--- a/software/ros_packages/ground_station/src/Resources/Ui/left_screen.ui
+++ b/software/ros_packages/ground_station/src/Resources/Ui/left_screen.ui
@@ -1390,7 +1390,7 @@ N/A
- 2
+ 3
@@ -2194,7 +2194,118 @@ Permittivity
-
-
+
+
+ -
+
+
-
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+
+ 75
+ true
+
+
+
+ Preset Commands
+
+
+
+ -
+
+
-
+
+
+ List Wifi
+
+
+
+ -
+
+
+ Equipment Logout
+
+
+
+ -
+
+
+ Equipment Login and Help
+
+
+
+ -
+
+
+ Equipment Status
+
+
+
+ -
+
+
+ Equipment Start
+
+
+
+ -
+
+
+ Equipment Stop
+
+
+
+
+
+
+
+ -
+
+
-
+
+
+
+ 75
+ true
+
+
+
+ Command
+
+
+
+ -
+
+
+
+
+ -
+
+
-
+
+
+ -
+
+
+ Connect SSID
+
+
+
+ -
+
+
+ Disconnect SSID
+
+
+
+
diff --git a/software/scripts/equipment_servicing_interface.py b/software/scripts/equipment_servicing_interface.py
new file mode 100644
index 0000000..c021a42
--- /dev/null
+++ b/software/scripts/equipment_servicing_interface.py
@@ -0,0 +1,40 @@
+import socket
+import sys
+
+# Create a UDP socket
+messages = ["HELP", "LOGIN MTECH GITRDONE", "STATUS", "START", "STOP", "LOGOUT"]
+
+sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+
+server_address = (sys.argv[1], 4547)
+
+commands = []
+commands.append(sys.argv[2])
+
+if len(sys.argv) > 3:
+ commands.append(sys.argv[3])
+
+for command in commands:
+ if command in messages:
+ sent = sock.sendto(command, server_address)
+
+ data, server = sock.recvfrom(4096)
+ print data
+
+# while True:
+# try:
+# # Send data
+# message = raw_input()
+# # print type(message)
+# if message not in messages:
+# print "Invalid command. Please try again."
+# continue
+#
+# sent = sock.sendto(message, server_address)
+#
+# # Receive response
+# # print 'waiting to receive'
+# data, server = sock.recvfrom(4096)
+# print data
+# except:
+# pass
\ No newline at end of file