class Controller: def __init__(self): self.login = MainApp() self.cpuThread = QThread() self.scannerThread = QThread() self.open_admin = False self.open_user = False self.open_stats = False self.cpu = SerialPort('CPU') self.scanner = SerialPort('Scanner') self.cpu.moveToThread(self.cpuThread) self.scanner.moveToThread(self.scannerThread) def showLogin(self): if self.cpu.ComPort is None: self.cpu.portConnect() try: self.cpu.close() except Exception as e: print("Error Port :", e) if self.scanner.ComPort is None: self.scanner.portConnect() try: self.scanner.close() except Exception as e: print("Error Port:", e) self.login.QTxtLogin.setText('') self.login.QTxtPass.setText('') if not self.login.loaded: self.login.switchWindow.connect(self.showUser) self.login.loaded = True if self.open_admin: self.admin.close() if self.open_user: self.user.close() self.login.show() def showUser(self, text): try: self.cpuThread.started.disconnect() self.cpuThread.terminate() self.scannerThread.started.disconnect() self.scannerThread.terminate() except Exception as e: print(e) users = pd.read_csv(home_path[:-4] + '/files/users.csv') res = users[(users['username'] == text)] if res['username'].item() == "admin": if not self.open_admin: self.admin = Admin('') self.open_admin = True self.admin.login = text self.admin.handleHeaders() if not self.admin.loaded: self.admin.switchWindow.connect(self.showLogin) self.admin.switchWindow2.connect(self.showStats) self.admin.loaded = True if self.open_stats: self.stats.close() self.login.close() self.admin.show() else: if not self.open_user: self.user = User('') self.open_user = True self.user.QTxtRef.setText('') self.user.login = text self.user.handleHeaders() self.user.handleUI() if not self.user.loaded: self.user.switchWindow.connect(self.showLogin) self.user.switchWindow2.connect(self.showStats) self.user.sendsignal.connect(self.sendToOutput) self.user.loaded = True self.cpu.open() self.scanner.open() if not self.cpu.is_connected: self.cpu.signal.connect(self.user.recieveData) self.cpu.is_connected = True if not self.scanner.is_connected: self.scanner.signal.connect(self.user.recieveData) self.scanner.is_connected = True self.cpuThread.started.connect(self.cpu.readSerialPort) self.scannerThread.started.connect(self.scanner.readSerialPort) self.cpuThread.setTerminationEnabled(True) self.cpuThread.start() self.scannerThread.setTerminationEnabled(True) self.scannerThread.start() self.login.close() if self.open_stats: self.stats.close() self.user.show() def sendToOutput(self, data): print('[+]Sending', data, 'to serial port') self.cpu.writeSerialPort(data) def showScan(self, text): if not self.open_scan: self.scan = Scan('') self.open_scan = True self.scan.login = text.split(';')[0] self.scan.reference = text.split(';')[1] self.scan.quantity = int(text.split(';')[2]) self.scan.processed = 0 self.scan.handleHeaders() self.scan.handel_progressBar() if not self.scan.loaded: self.scan.switchWindow.connect(self.showUser) self.scan.loaded = True self.cpu.moveToThread(self.cpuThread) self.cpu.signal.connect(self.scan.recieveData) self.cpuThread.started.connect(self.cpu.readSerialPort) self.cpuThread.setTerminationEnabled(True) self.cpuThread.start() self.scanner.moveToThread(self.scannerThread) self.scanner.signal.connect(self.scan.recieveData) self.scannerThread.started.connect(self.scanner.readSerialPort) self.scannerThread.setTerminationEnabled(True) self.scannerThread.start() self.user.close() time.sleep(0.5) self.scan.show() def showStats(self, text): try: self.serialPort.close() except Exception as e: print("error PORT :", e) if not self.open_stats: self.stats = Statistics('') self.open_stats = True self.stats.login = text self.stats.handleHeaders() if not self.stats.loaded: self.stats.switchWindow.connect(self.showUser) self.stats.loaded = True self.stats.show() if self.open_admin: self.admin.close() if self.open_user: self.user.close()
class WindowUtama(QMainWindow): def __init__(self): super().__init__() self.__serverSuccessFlag = False self.__firstmessagefound = False self.__printfirstmessage = False self.pause = False self.count = 0 self.x_data = np.arange(DATA_LENGTH) self.freqs = FFTmodule.fftfreq(DATA_LENGTH, SAMPLE_INTERVAL)[:DATA_LENGTH // 2] self.magnitude = [0] * len(self.freqs) self.y_data = [0] * np.size(self.x_data) self.initServer() if self.__serverSuccessFlag: print(f"Server at {PORT}, {BAUDRATE} bps") self.initUi() self.resize(1000, 700) self.show() self.setTimer() else: exit(1) def initServer(self): self.UART = SerialPort(PORT, BAUDRATE) if self.UART.SUCCESS_OPEN: self.__serverSuccessFlag = True else: self.__serverSuccessFlag = False def initUi(self): self.setWindowTitle("Elektro - (Serial) Data Pysualization") # config main widget self.MainWidget = QWidget() self.MainWidgetLayout = QGridLayout() self.MainWidget.setLayout(self.MainWidgetLayout) # place the main widget in main window self.setCentralWidget(self.MainWidget) # INIT PLOTS ------------------------------------------------- self.List_of_Plots = [] self.TimePlot = FigureWidget(title=f"Time Domain", color=20, yRange=Y_LIMIT) self.FreqPlot = FigureWidget(title=f"Frequency Domain", color=40, yRange=[-20, 120]) self.List_of_Plots.append(self.TimePlot) self.List_of_Plots.append(self.FreqPlot) # INIT CHANNEL INFO ------------------------------------------ self.List_of_channels = [] #for n in range(2): # self.channel_n = ChannelWidget(title="Channel", num=n+1) # self.List_of_channels.append(self.channel_n) # ADD WIDGETS TO LAYOUT -------------------------------------- self.MainWidgetLayout.addWidget(self.List_of_Plots[0], 0, 0) self.MainWidgetLayout.addWidget(self.List_of_Plots[1], 1, 0) #self.MainWidgetLayout.addWidget(self.List_of_channels[0], 0, 2) #self.MainWidgetLayout.addWidget(self.List_of_channels[1], 1, 2) def setTimer(self): self.timer = QTimer() self.timer.timeout.connect(self.updateAll) self.timer.start(0) def updateAll(self): #self.start_time = time.time() try: data = self.UART.getNewData() if data.find(FIRST_MESSAGE): self.__firstmessagefound = True if not self.__printfirstmessage: print("Found first message!") self.__printfirstmessage = True if self.__firstmessagefound: data = float(data) * 5 / 1024 self.y_data.append(data) self.y_data.pop(0) self.magnitude = FFTmodule.fft(self.y_data) self.magnitude = 20 * np.log( np.abs(self.magnitude[:DATA_LENGTH // 2])) if not self.pause: self.List_of_Plots[0].PlotData(self.x_data, self.y_data) self.List_of_Plots[1].PlotData(self.freqs, self.magnitude) else: print("Paused!") except KeyboardInterrupt: print("\nKeyboard Interrupted!") try: self.UART.close() except: print("Serial port already closed") exit(1) except ValueError: pass