def __init__(self, vehicle_event_dispatcher, ui_event_dispatcher):
     QtGui.QWidget.__init__(self)
     BasePanelController.__init__(self)
     self.ui = Ui_ReceiverCalibrationPanel()
     self.ui.setupUi(self)
     self.ui.start_button.setEnabled(True)
     self.ui.cancel_button.setEnabled(False)
     
     leftStickScene = QtGui.QGraphicsScene()
     leftStickBackground = QtGui.QPixmap("./resources/TxDial.png")
     leftStickItem = QtGui.QGraphicsPixmapItem(leftStickBackground)
     leftStickScene.addItem(leftStickItem)
     self.leftStick = QtGui.QGraphicsEllipseItem(QtCore.QRectF(75, 75, 30, 30))
     self.leftStick.setPen(QtGui.QPen(QtGui.QBrush(QtCore.Qt.black, QtCore.Qt.SolidPattern), 2))
     self.leftStick.setBrush(QtGui.QBrush(QtCore.Qt.blue, QtCore.Qt.SolidPattern))
     leftStickScene.addItem(self.leftStick)
     self.ui.left_transmitter.setScene(leftStickScene)
     
     rightStickScene = QtGui.QGraphicsScene()
     rightStickBackground = QtGui.QPixmap("./resources/TxDial.png")
     rightStickItem = QtGui.QGraphicsPixmapItem(rightStickBackground)
     rightStickScene.addItem(rightStickItem)
     self.rightStick = QtGui.QGraphicsEllipseItem(QtCore.QRectF(75, 75, 30, 30))
     self.rightStick.setPen(QtGui.QPen(QtGui.QBrush(QtCore.Qt.black, QtCore.Qt.SolidPattern), 2))
     self.rightStick.setBrush(QtGui.QBrush(QtCore.Qt.blue, QtCore.Qt.SolidPattern))
     rightStickScene.addItem(self.rightStick)
     self.ui.right_transmitter.setScene(rightStickScene)   
     
     self._nb_channels = 12
     self._raw_receiver_min_values = [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500]
     self._raw_receiver_max_values = [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500]
     self.max_amount_channels = 12
     
     self._raw_roll = 1500
     self._raw_pitch = 1500
     self._raw_yaw = 1500
     self._raw_throttle = 1500
     
     self.ui.start_button.clicked.connect(self.start_RCcalibration)
     self.ui.cancel_button.clicked.connect(self._cancel_calibration)
     
     ui_event_dispatcher.register(self._protocol_handler_changed_event, UIEventDispatcher.PROTOCOL_HANDLER_EVENT)
     vehicle_event_dispatcher.register(self._receiver_channel_count_received, VehicleEventDispatcher.RECEIVER_NB_CHANNEL_EVENT)
     
     vehicle_event_dispatcher.register(self._receiver_raw_roll_received, VehicleEventDispatcher.RECEIVER_ROLL_PROPERTY_EVENT)
     vehicle_event_dispatcher.register(self._receiver_raw_pitch_received, VehicleEventDispatcher.RECEIVER_PITCH_PROPERTY_EVENT)
     vehicle_event_dispatcher.register(self._receiver_raw_yaw_received, VehicleEventDispatcher.RECEIVER_YAW_PROPERTY_EVENT)
     vehicle_event_dispatcher.register(self._receiver_raw_throttle_received, VehicleEventDispatcher.RECEIVER_THROTTLE_PROPERTY_EVENT)
     vehicle_event_dispatcher.register(self._receiver_raw_mode_received, VehicleEventDispatcher.RECEIVER_MODE_PROPERTY_EVENT)
     vehicle_event_dispatcher.register(self._receiver_raw_aux1_received, VehicleEventDispatcher.RECEIVER_AUX1_PROPERTY_EVENT)
     vehicle_event_dispatcher.register(self._receiver_raw_aux2_received, VehicleEventDispatcher.RECEIVER_AUX2_PROPERTY_EVENT)
     vehicle_event_dispatcher.register(self._receiver_raw_aux3_received, VehicleEventDispatcher.RECEIVER_AUX3_PROPERTY_EVENT)
     vehicle_event_dispatcher.register(self._receiver_raw_aux4_received, VehicleEventDispatcher.RECEIVER_AUX4_PROPERTY_EVENT)
     vehicle_event_dispatcher.register(self._receiver_raw_aux5_received, VehicleEventDispatcher.RECEIVER_AUX5_PROPERTY_EVENT)
     vehicle_event_dispatcher.register(self._receiver_raw_aux6_received, VehicleEventDispatcher.RECEIVER_AUX6_PROPERTY_EVENT)
     vehicle_event_dispatcher.register(self._receiver_raw_aux7_received, VehicleEventDispatcher.RECEIVER_AUX7_PROPERTY_EVENT)
 def __init__(self, vehicle_event_dispatcher, ui_event_dispatcher):
     QtGui.QWidget.__init__(self)
     BasePanelController.__init__(self)
     self.ui = Ui_ReceiverCalibrationPanel()
     self.ui.setupUi(self)
     self.ui.start.setEnabled(True)
     self.ui.cancel.setEnabled(False)
     
     leftStickScene = QtGui.QGraphicsScene()
     leftStickBackground = QtGui.QPixmap("./resources/TxDial.png")
     leftStickItem = QtGui.QGraphicsPixmapItem(leftStickBackground)
     leftStickScene.addItem(leftStickItem)
     self.leftStick = QtGui.QGraphicsEllipseItem(QtCore.QRectF(75, 75, 30, 30))
     self.leftStick.setPen(QtGui.QPen(QtGui.QBrush(QtCore.Qt.black, QtCore.Qt.SolidPattern), 2))
     self.leftStick.setBrush(QtGui.QBrush(QtCore.Qt.blue, QtCore.Qt.SolidPattern))
     leftStickScene.addItem(self.leftStick)
     self.ui.leftTransmitter.setScene(leftStickScene)
     
     rightStickScene = QtGui.QGraphicsScene()
     rightStickBackground = QtGui.QPixmap("./resources/TxDial.png")
     rightStickItem = QtGui.QGraphicsPixmapItem(rightStickBackground)
     rightStickScene.addItem(rightStickItem)
     self.rightStick = QtGui.QGraphicsEllipseItem(QtCore.QRectF(75, 75, 30, 30))
     self.rightStick.setPen(QtGui.QPen(QtGui.QBrush(QtCore.Qt.black, QtCore.Qt.SolidPattern), 2))
     self.rightStick.setBrush(QtGui.QBrush(QtCore.Qt.blue, QtCore.Qt.SolidPattern))
     rightStickScene.addItem(self.rightStick)
     self.ui.rightTransmitter.setScene(rightStickScene)   
     
     self.running = False
     self.amount_channels = 12
     self.RCmin = [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500]
     self.RCmax = [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500]
     self.max_amount_channels = 12
     
     self.ui.start.clicked.connect(self.start_RCcalibration)
     self.ui.cancel.clicked.connect(self.cancel_RCcalibration)
    def __init__(self, vehicle_model, message_sender):
        
        QtGui.QWidget.__init__(self)
        BasePanelController.__init__(self)
        
        self.vehicle_model = vehicle_model
        self.message_sender = message_sender

        
        self.ui = Ui_ReceiverCalibrationPanel()
        self.ui.setupUi(self)
        self.ui.start.setEnabled(True)
        self.ui.cancel.setEnabled(False)
        
        leftStickScene = QtGui.QGraphicsScene()
        leftStickBackground = QtGui.QPixmap("./resources/TxDial.png")
        leftStickItem = QtGui.QGraphicsPixmapItem(leftStickBackground)
        leftStickScene.addItem(leftStickItem)
        self.leftStick = QtGui.QGraphicsEllipseItem(QtCore.QRectF(75, 75, 30, 30))
        self.leftStick.setPen(QtGui.QPen(QtGui.QBrush(QtCore.Qt.black, QtCore.Qt.SolidPattern), 2))
        self.leftStick.setBrush(QtGui.QBrush(QtCore.Qt.blue, QtCore.Qt.SolidPattern))
        leftStickScene.addItem(self.leftStick)
        self.ui.leftTransmitter.setScene(leftStickScene)
        
        rightStickScene = QtGui.QGraphicsScene()
        rightStickBackground = QtGui.QPixmap("./resources/TxDial.png")
        rightStickItem = QtGui.QGraphicsPixmapItem(rightStickBackground)
        rightStickScene.addItem(rightStickItem)
        self.rightStick = QtGui.QGraphicsEllipseItem(QtCore.QRectF(75, 75, 30, 30))
        self.rightStick.setPen(QtGui.QPen(QtGui.QBrush(QtCore.Qt.black, QtCore.Qt.SolidPattern), 2))
        self.rightStick.setBrush(QtGui.QBrush(QtCore.Qt.blue, QtCore.Qt.SolidPattern))
        rightStickScene.addItem(self.rightStick)
        self.ui.rightTransmitter.setScene(rightStickScene)   
        
        self.running = False
        self.amount_channels = 12
        self.RCmin = [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500]
        self.RCmax = [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500]
        self.max_amount_channels = 12
        
        self.ui.start.clicked.connect(self.start_RCcalibration)
        self.ui.cancel.clicked.connect(self.cancel_RCcalibration)
class ReceiverCalibrationController(QtGui.QWidget, BasePanelController):

    def __init__(self, vehicle_event_dispatcher, ui_event_dispatcher):
        QtGui.QWidget.__init__(self)
        BasePanelController.__init__(self)
        self.ui = Ui_ReceiverCalibrationPanel()
        self.ui.setupUi(self)
        self.ui.start_button.setEnabled(True)
        self.ui.cancel_button.setEnabled(False)
        
        leftStickScene = QtGui.QGraphicsScene()
        leftStickBackground = QtGui.QPixmap("./resources/TxDial.png")
        leftStickItem = QtGui.QGraphicsPixmapItem(leftStickBackground)
        leftStickScene.addItem(leftStickItem)
        self.leftStick = QtGui.QGraphicsEllipseItem(QtCore.QRectF(75, 75, 30, 30))
        self.leftStick.setPen(QtGui.QPen(QtGui.QBrush(QtCore.Qt.black, QtCore.Qt.SolidPattern), 2))
        self.leftStick.setBrush(QtGui.QBrush(QtCore.Qt.blue, QtCore.Qt.SolidPattern))
        leftStickScene.addItem(self.leftStick)
        self.ui.left_transmitter.setScene(leftStickScene)
        
        rightStickScene = QtGui.QGraphicsScene()
        rightStickBackground = QtGui.QPixmap("./resources/TxDial.png")
        rightStickItem = QtGui.QGraphicsPixmapItem(rightStickBackground)
        rightStickScene.addItem(rightStickItem)
        self.rightStick = QtGui.QGraphicsEllipseItem(QtCore.QRectF(75, 75, 30, 30))
        self.rightStick.setPen(QtGui.QPen(QtGui.QBrush(QtCore.Qt.black, QtCore.Qt.SolidPattern), 2))
        self.rightStick.setBrush(QtGui.QBrush(QtCore.Qt.blue, QtCore.Qt.SolidPattern))
        rightStickScene.addItem(self.rightStick)
        self.ui.right_transmitter.setScene(rightStickScene)   
        
        self._nb_channels = 12
        self._raw_receiver_min_values = [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500]
        self._raw_receiver_max_values = [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500]
        self.max_amount_channels = 12
        
        self._raw_roll = 1500
        self._raw_pitch = 1500
        self._raw_yaw = 1500
        self._raw_throttle = 1500
        
        self.ui.start_button.clicked.connect(self.start_RCcalibration)
        self.ui.cancel_button.clicked.connect(self._cancel_calibration)
        
        ui_event_dispatcher.register(self._protocol_handler_changed_event, UIEventDispatcher.PROTOCOL_HANDLER_EVENT)
        vehicle_event_dispatcher.register(self._receiver_channel_count_received, VehicleEventDispatcher.RECEIVER_NB_CHANNEL_EVENT)
        
        vehicle_event_dispatcher.register(self._receiver_raw_roll_received, VehicleEventDispatcher.RECEIVER_ROLL_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(self._receiver_raw_pitch_received, VehicleEventDispatcher.RECEIVER_PITCH_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(self._receiver_raw_yaw_received, VehicleEventDispatcher.RECEIVER_YAW_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(self._receiver_raw_throttle_received, VehicleEventDispatcher.RECEIVER_THROTTLE_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(self._receiver_raw_mode_received, VehicleEventDispatcher.RECEIVER_MODE_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(self._receiver_raw_aux1_received, VehicleEventDispatcher.RECEIVER_AUX1_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(self._receiver_raw_aux2_received, VehicleEventDispatcher.RECEIVER_AUX2_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(self._receiver_raw_aux3_received, VehicleEventDispatcher.RECEIVER_AUX3_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(self._receiver_raw_aux4_received, VehicleEventDispatcher.RECEIVER_AUX4_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(self._receiver_raw_aux5_received, VehicleEventDispatcher.RECEIVER_AUX5_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(self._receiver_raw_aux6_received, VehicleEventDispatcher.RECEIVER_AUX6_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(self._receiver_raw_aux7_received, VehicleEventDispatcher.RECEIVER_AUX7_PROPERTY_EVENT)

    def _protocol_handler_changed_event(self, event, protocol_handler):
        self._protocol_handler = protocol_handler;
        
    def _receiver_channel_count_received(self, event, nb_channels):
        self._nb_channels = int(nb_channels)
        self._update_panel_display()
         
    def start_button(self):
        self._protocol_handler.unsubscribe_command()
    
    def stop(self):
        self._cancel_calibration()

    def start_RCcalibration(self):
        if self.ui.start_button.text() == 'Start' :
            self.ui.cancel_button.setEnabled(True)
            self.ui.start_button.setText("Finish")
            self._raw_receiver_min_values = [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500]
            self._raw_receiver_max_values = [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500]
            
            self._protocol_handler.reset_receiver_calibration_values(self._nb_channels)
            self._protocol_handler.subscribe_receiver_data()
        else :
            self._send_calibration_value()
            self._cancel_calibration()
        
    def _receiver_raw_roll_received(self, event, raw_roll):
        self._raw_roll = int(raw_roll)
        self._compute_min_max_value(self._raw_roll,0)
        self._update_right_stick(self._raw_roll, self._raw_pitch)

    def _receiver_raw_pitch_received(self, event, raw_pitch):
        self._raw_pitch = int(raw_pitch)
        self._compute_min_max_value(self._raw_pitch,1)
        self._update_right_stick(self._raw_roll, self._raw_pitch)

    def _receiver_raw_yaw_received(self, event, raw_yaw):
        self._raw_yaw = int(raw_yaw)
        self._compute_min_max_value(self._raw_yaw,2)
        self._update_left_stick(self._raw_throttle, self._raw_yaw)

    def _receiver_raw_throttle_received(self, event, raw_throttle):
        self._raw_throttle = int(raw_throttle)
        self._compute_min_max_value(self._raw_throttle,3)
        self._update_left_stick(self._raw_throttle, self._raw_yaw)

    def _receiver_raw_mode_received(self, event, raw_mode):
        self._compute_min_max_value(int(raw_mode),4)
        self.ui.mode_progress_bar.setValue(int(raw_mode))

    def _receiver_raw_aux1_received(self, event, raw_aux1):
        self._compute_min_max_value(int(raw_aux1),5)
        self.ui.aux1_progress_bar.setValue(int(raw_aux1))

    def _receiver_raw_aux2_received(self, event, raw_aux2):
        self._compute_min_max_value(int(raw_aux2),6)
        self.ui.aux2_progress_bar.setValue(int(raw_aux2))

    def _receiver_raw_aux3_received(self, event, raw_aux3):
        self._compute_min_max_value(int(raw_aux3),7)
        self.ui.aux3_progress_bar.setValue(int(raw_aux3))

    def _receiver_raw_aux4_received(self, event, raw_aux4):
        self._compute_min_max_value(int(raw_aux4),8)
        self.ui.aux4_progress_bar.setValue(int(raw_aux4))

    def _receiver_raw_aux5_received(self, event, raw_aux5):
        self._compute_min_max_value(int(raw_aux5),9)
        self.ui.aux5_progress_bar.setValue(int(raw_aux5))

    def _receiver_raw_aux6_received(self, event, raw_aux6):
        self._compute_min_max_value(int(raw_aux6),10)
        self.ui.aux6_progress_bar.setValue(int(raw_aux6))

    def _receiver_raw_aux7_received(self, event, raw_aux7):
        self._compute_min_max_value(int(raw_aux7),11)
        self.ui.aux7_progress_bar.setValue(int(raw_aux7))

    def _compute_min_max_value(self, value, channel):
        self._raw_receiver_min_values[channel] = min(self._raw_receiver_min_values[channel],value)
        self._raw_receiver_max_values[channel] = max(self._raw_receiver_max_values[channel],value)

    def _cancel_calibration(self):
        self._protocol_handler.unsubscribe_command()
        self.ui.cancel_button.setEnabled(False)
        self.ui.start_button.setText("Start")
    
    def _update_left_stick(self, throttle, yaw):
        throttlePosition = self._scale_stick_display_value(throttle, (1000.0, 2000.0), (58.0, -57.0))
        yawPosition = self._scale_stick_display_value(yaw, (1000.0, 2000.0), (-57.0, 55.0))
        self.leftStick.setPos(yawPosition, throttlePosition)
        
    def _update_right_stick(self, roll, pitch):
        rollPosition = self._scale_stick_display_value(roll, (1000.0, 2000.0), (-57.0, 55.0))
        pitchPosition = self._scale_stick_display_value(pitch, (1000.0, 2000.0), (58.0, -57.0))
        self.rightStick.setPos(rollPosition, pitchPosition)
    
    def _scale_stick_display_value(self, val, src, dst):
        return ((val - src[0]) / (src[1]-src[0])) * (dst[1]-dst[0]) + dst[0]
    
    def _update_panel_display(self):
        if self._nb_channels < 6: 
            self.ui.label_aux1.hide()
            self.ui.aux1_progress_bar.hide()
        if self._nb_channels < 7:
            self.ui.label_aux2.hide()
            self.ui.aux2_progress_bar.hide()
        if self._nb_channels < 8:
            self.ui.label_aux3.hide()
            self.ui.aux3_progress_bar.hide()
        if self._nb_channels < 9:
            self.ui.label_aux4.hide()
            self.ui.aux4_progress_bar.hide()
        if self._nb_channels < 10:
            self.ui.label_aux5.hide()
            self.ui.aux5_progress_bar.hide()
        if self._nb_channels < 11:
            self.ui.label_aux6.hide()
            self.ui.aux6_progress_bar.hide()
        if self._nb_channels < 12:
            self.ui.label_aux7.hide()
            self.ui.aux7_progress_bar.hide()
    
    def _send_calibration_value(self):
        self._protocol_handler.send_receiver_calibation_values(self._nb_channels,
                                                               self._raw_receiver_min_values,
                                                               self._raw_receiver_max_values)
        
class ReceiverCalibrationController(QtGui.QWidget, BasePanelController):

    def __init__(self, vehicle_model, message_sender):
        
        QtGui.QWidget.__init__(self)
        BasePanelController.__init__(self)
        
        self.vehicle_model = vehicle_model
        self.message_sender = message_sender

        
        self.ui = Ui_ReceiverCalibrationPanel()
        self.ui.setupUi(self)
        self.ui.start.setEnabled(True)
        self.ui.cancel.setEnabled(False)
        
        leftStickScene = QtGui.QGraphicsScene()
        leftStickBackground = QtGui.QPixmap("./resources/TxDial.png")
        leftStickItem = QtGui.QGraphicsPixmapItem(leftStickBackground)
        leftStickScene.addItem(leftStickItem)
        self.leftStick = QtGui.QGraphicsEllipseItem(QtCore.QRectF(75, 75, 30, 30))
        self.leftStick.setPen(QtGui.QPen(QtGui.QBrush(QtCore.Qt.black, QtCore.Qt.SolidPattern), 2))
        self.leftStick.setBrush(QtGui.QBrush(QtCore.Qt.blue, QtCore.Qt.SolidPattern))
        leftStickScene.addItem(self.leftStick)
        self.ui.leftTransmitter.setScene(leftStickScene)
        
        rightStickScene = QtGui.QGraphicsScene()
        rightStickBackground = QtGui.QPixmap("./resources/TxDial.png")
        rightStickItem = QtGui.QGraphicsPixmapItem(rightStickBackground)
        rightStickScene.addItem(rightStickItem)
        self.rightStick = QtGui.QGraphicsEllipseItem(QtCore.QRectF(75, 75, 30, 30))
        self.rightStick.setPen(QtGui.QPen(QtGui.QBrush(QtCore.Qt.black, QtCore.Qt.SolidPattern), 2))
        self.rightStick.setBrush(QtGui.QBrush(QtCore.Qt.blue, QtCore.Qt.SolidPattern))
        rightStickScene.addItem(self.rightStick)
        self.ui.rightTransmitter.setScene(rightStickScene)   
        
        self.running = False
        self.amount_channels = 12
        self.RCmin = [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500]
        self.RCmax = [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500]
        self.max_amount_channels = 12
        
        self.ui.start.clicked.connect(self.start_RCcalibration)
        self.ui.cancel.clicked.connect(self.cancel_RCcalibration)

    def start(self, xmlSubPanel, boardConfiguration):
        self.xmlSubPanel = xmlSubPanel
        self.boardConfiguration = boardConfiguration
        try:
            self.amount_channels = int(self.boardConfiguration["Receiver Nb Channels"])
        except:
            logging.warning("Can't read amount of channels from boardconfiguration!")
        self.enable_gui_attribute()

    def start_RCcalibration(self):
        if self.running:    
            self.ui.start.setText("Start")
            self.cancel_RCcalibration() #we can stop the calibration it's done
            self.timer.stop()
            self.send_calibration_value()
        
        elif not self.running:
            if self.comm.isConnected() == True:
                self.comm.write("H")
                self.comm.write("t")
                self.timer = QtCore.QTimer()
                self.timer.timeout.connect(self.read_continuousData)
                self.timer.start(50)
                self.startCommThread()
                self.running = True
                
                self.ui.cancel.setEnabled(True)
                self.ui.next.setEnabled(False)
                
                self.ui.start.setText("Finish")
                
                self.RCmin = [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500]
                self.RCmax = [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500]
                
    def cancel_RCcalibration(self):
        self.comm.write("x")
        self.timer.stop()
        self.comm.flushResponse()
        self.running = False
        self.ui.cancel.setEnabled(False)
        self.ui.next.setEnabled(True)
        self.ui.start.setText("Start")
        
    def read_continuousData(self):
        isConnected = self.comm.isConnected()
        if isConnected and not self.commData.empty():
            string = self.commData.get()
            string_out = string.split(',')
            if self.running:
                for i in range(0, self.amount_channels):
                    if int(string_out[i]) < self.RCmin[i]:  
                        self.RCmin[i] = int(string_out[i])
                    if int(string_out[i]) > self.RCmax[i]:  
                        self.RCmax[i] = int(string_out[i])
                    self.update_gui(i, string_out[i])                      
                    
            self.update_left_stick(int(string_out[3]), int(string_out[2]))
            self.update_right_stick(int(string_out[0]), int(string_out[1]))
            
    def update_gui(self, channel_number, value):
        if channel_number == 4:
            self.ui.progressBar_RCmode.setValue(int(value))
        if channel_number == 5:
            self.ui.progressBar_RCAux1.setValue(int(value))
        if channel_number == 6:
            self.ui.progressBar_RCAux2.setValue(int(value))
        if channel_number == 7:
            self.ui.progressBar_RCAux3.setValue(int(value))
        if channel_number == 8:
            self.ui.progressBar_RCAux4.setValue(int(value))
        if channel_number == 9:
            self.ui.progressBar_RCAux5.setValue(int(value))
        if channel_number == 10:
            self.ui.progressBar_RCAux6.setValue(int(value))
        if channel_number == 11:
            self.ui.progressBar_RCAux7.setValue(int(value))
    
    def update_left_stick(self, throttle, yaw):
        throttlePosition = self.scale(throttle, (1000.0, 2000.0), (58.0, -57.0))
        yawPosition = self.scale(yaw, (1000.0, 2000.0), (-57.0, 55.0))
        self.leftStick.setPos(yawPosition, throttlePosition)
        
    def update_right_stick(self, roll, pitch):
        rollPosition = self.scale(roll, (1000.0, 2000.0), (-57.0, 55.0))
        pitchPosition = self.scale(pitch, (1000.0, 2000.0), (58.0, -57.0))
        self.rightStick.setPos(rollPosition, pitchPosition)
    
    def scale(self, val, src, dst):
        return ((val - src[0]) / (src[1]-src[0])) * (dst[1]-dst[0]) + dst[0]
    
    def enable_gui_attribute(self):
        for i in range(0, self.max_amount_channels):
            if i > (self.amount_channels - 1) and i == 5:
                self.ui.label_aux1.setHidden(True)
                self.ui.progressBar_RCAux1.setHidden(True)
            elif i > (self.amount_channels - 1) and i == 6:
                self.ui.label_aux2.setHidden(True)
                self.ui.progressBar_RCAux2.setHidden(True)
            elif i > (self.amount_channels - 1) and i == 7:
                self.ui.label_aux3.setHidden(True)
                self.ui.progressBar_RCAux3.setHidden(True)
            elif i > (self.amount_channels - 1) and i == 8:
                self.ui.label_aux4.setHidden(True)
                self.ui.progressBar_RCAux4.setHidden(True)
            elif i > (self.amount_channels - 1) and i == 9:
                self.ui.label_aux5.setHidden(True)
                self.ui.progressBar_RCAux5.setHidden(True)
            elif i > (self.amount_channels - 1) and i == 10:
                self.ui.label_aux6.setHidden(True)
                self.ui.progressBar_RCAux6.setHidden(True)
            elif i > (self.amount_channels - 1) and i == 11:
                self.ui.label_aux7.setHidden(True)
                self.ui.progressBar_RCAux7.setHidden(True)
    
    def send_calibration_value(self):
        self.comm.write("X");
        command = "G "
        for i in range(0, self.amount_channels):
            command += str(self.RCmin[i])
            command += ";"
            command += str(self.RCmax[i])
            command += ";"
            
        self.comm.write(command)    
        
    def __init__(self, vehicle_event_dispatcher, ui_event_dispatcher):
        QtGui.QWidget.__init__(self)
        BasePanelController.__init__(self)
        self.ui = Ui_ReceiverCalibrationPanel()
        self.ui.setupUi(self)
        self.ui.start_button.setEnabled(True)
        self.ui.cancel_button.setEnabled(False)

        leftStickScene = QtGui.QGraphicsScene()
        leftStickBackground = QtGui.QPixmap("./resources/TxDial.png")
        leftStickItem = QtGui.QGraphicsPixmapItem(leftStickBackground)
        leftStickScene.addItem(leftStickItem)
        self.leftStick = QtGui.QGraphicsEllipseItem(
            QtCore.QRectF(75, 75, 30, 30))
        self.leftStick.setPen(
            QtGui.QPen(QtGui.QBrush(QtCore.Qt.black, QtCore.Qt.SolidPattern),
                       2))
        self.leftStick.setBrush(
            QtGui.QBrush(QtCore.Qt.blue, QtCore.Qt.SolidPattern))
        leftStickScene.addItem(self.leftStick)
        self.ui.left_transmitter.setScene(leftStickScene)

        rightStickScene = QtGui.QGraphicsScene()
        rightStickBackground = QtGui.QPixmap("./resources/TxDial.png")
        rightStickItem = QtGui.QGraphicsPixmapItem(rightStickBackground)
        rightStickScene.addItem(rightStickItem)
        self.rightStick = QtGui.QGraphicsEllipseItem(
            QtCore.QRectF(75, 75, 30, 30))
        self.rightStick.setPen(
            QtGui.QPen(QtGui.QBrush(QtCore.Qt.black, QtCore.Qt.SolidPattern),
                       2))
        self.rightStick.setBrush(
            QtGui.QBrush(QtCore.Qt.blue, QtCore.Qt.SolidPattern))
        rightStickScene.addItem(self.rightStick)
        self.ui.right_transmitter.setScene(rightStickScene)

        self._nb_channels = 12
        self._raw_receiver_min_values = [
            1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500,
            1500, 1500
        ]
        self._raw_receiver_max_values = [
            1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500,
            1500, 1500
        ]
        self.max_amount_channels = 12

        self._raw_roll = 1500
        self._raw_pitch = 1500
        self._raw_yaw = 1500
        self._raw_throttle = 1500

        self.ui.start_button.clicked.connect(self.start_RCcalibration)
        self.ui.cancel_button.clicked.connect(self._cancel_calibration)

        ui_event_dispatcher.register(self._protocol_handler_changed_event,
                                     UIEventDispatcher.PROTOCOL_HANDLER_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_channel_count_received,
            VehicleEventDispatcher.RECEIVER_NB_CHANNEL_EVENT)

        vehicle_event_dispatcher.register(
            self._receiver_raw_roll_received,
            VehicleEventDispatcher.RECEIVER_ROLL_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_raw_pitch_received,
            VehicleEventDispatcher.RECEIVER_PITCH_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_raw_yaw_received,
            VehicleEventDispatcher.RECEIVER_YAW_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_raw_throttle_received,
            VehicleEventDispatcher.RECEIVER_THROTTLE_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_raw_mode_received,
            VehicleEventDispatcher.RECEIVER_MODE_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_raw_aux1_received,
            VehicleEventDispatcher.RECEIVER_AUX1_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_raw_aux2_received,
            VehicleEventDispatcher.RECEIVER_AUX2_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_raw_aux3_received,
            VehicleEventDispatcher.RECEIVER_AUX3_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_raw_aux4_received,
            VehicleEventDispatcher.RECEIVER_AUX4_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_raw_aux5_received,
            VehicleEventDispatcher.RECEIVER_AUX5_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_raw_aux6_received,
            VehicleEventDispatcher.RECEIVER_AUX6_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_raw_aux7_received,
            VehicleEventDispatcher.RECEIVER_AUX7_PROPERTY_EVENT)
class ReceiverCalibrationController(QtGui.QWidget, BasePanelController):
    def __init__(self, vehicle_event_dispatcher, ui_event_dispatcher):
        QtGui.QWidget.__init__(self)
        BasePanelController.__init__(self)
        self.ui = Ui_ReceiverCalibrationPanel()
        self.ui.setupUi(self)
        self.ui.start_button.setEnabled(True)
        self.ui.cancel_button.setEnabled(False)

        leftStickScene = QtGui.QGraphicsScene()
        leftStickBackground = QtGui.QPixmap("./resources/TxDial.png")
        leftStickItem = QtGui.QGraphicsPixmapItem(leftStickBackground)
        leftStickScene.addItem(leftStickItem)
        self.leftStick = QtGui.QGraphicsEllipseItem(
            QtCore.QRectF(75, 75, 30, 30))
        self.leftStick.setPen(
            QtGui.QPen(QtGui.QBrush(QtCore.Qt.black, QtCore.Qt.SolidPattern),
                       2))
        self.leftStick.setBrush(
            QtGui.QBrush(QtCore.Qt.blue, QtCore.Qt.SolidPattern))
        leftStickScene.addItem(self.leftStick)
        self.ui.left_transmitter.setScene(leftStickScene)

        rightStickScene = QtGui.QGraphicsScene()
        rightStickBackground = QtGui.QPixmap("./resources/TxDial.png")
        rightStickItem = QtGui.QGraphicsPixmapItem(rightStickBackground)
        rightStickScene.addItem(rightStickItem)
        self.rightStick = QtGui.QGraphicsEllipseItem(
            QtCore.QRectF(75, 75, 30, 30))
        self.rightStick.setPen(
            QtGui.QPen(QtGui.QBrush(QtCore.Qt.black, QtCore.Qt.SolidPattern),
                       2))
        self.rightStick.setBrush(
            QtGui.QBrush(QtCore.Qt.blue, QtCore.Qt.SolidPattern))
        rightStickScene.addItem(self.rightStick)
        self.ui.right_transmitter.setScene(rightStickScene)

        self._nb_channels = 12
        self._raw_receiver_min_values = [
            1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500,
            1500, 1500
        ]
        self._raw_receiver_max_values = [
            1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500,
            1500, 1500
        ]
        self.max_amount_channels = 12

        self._raw_roll = 1500
        self._raw_pitch = 1500
        self._raw_yaw = 1500
        self._raw_throttle = 1500

        self.ui.start_button.clicked.connect(self.start_RCcalibration)
        self.ui.cancel_button.clicked.connect(self._cancel_calibration)

        ui_event_dispatcher.register(self._protocol_handler_changed_event,
                                     UIEventDispatcher.PROTOCOL_HANDLER_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_channel_count_received,
            VehicleEventDispatcher.RECEIVER_NB_CHANNEL_EVENT)

        vehicle_event_dispatcher.register(
            self._receiver_raw_roll_received,
            VehicleEventDispatcher.RECEIVER_ROLL_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_raw_pitch_received,
            VehicleEventDispatcher.RECEIVER_PITCH_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_raw_yaw_received,
            VehicleEventDispatcher.RECEIVER_YAW_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_raw_throttle_received,
            VehicleEventDispatcher.RECEIVER_THROTTLE_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_raw_mode_received,
            VehicleEventDispatcher.RECEIVER_MODE_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_raw_aux1_received,
            VehicleEventDispatcher.RECEIVER_AUX1_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_raw_aux2_received,
            VehicleEventDispatcher.RECEIVER_AUX2_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_raw_aux3_received,
            VehicleEventDispatcher.RECEIVER_AUX3_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_raw_aux4_received,
            VehicleEventDispatcher.RECEIVER_AUX4_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_raw_aux5_received,
            VehicleEventDispatcher.RECEIVER_AUX5_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_raw_aux6_received,
            VehicleEventDispatcher.RECEIVER_AUX6_PROPERTY_EVENT)
        vehicle_event_dispatcher.register(
            self._receiver_raw_aux7_received,
            VehicleEventDispatcher.RECEIVER_AUX7_PROPERTY_EVENT)

    def _protocol_handler_changed_event(self, event, protocol_handler):
        self._protocol_handler = protocol_handler

    def _receiver_channel_count_received(self, event, nb_channels):
        self._nb_channels = int(nb_channels)
        self._update_panel_display()

    def start_button(self):
        self._protocol_handler.unsubscribe_command()

    def stop(self):
        self._cancel_calibration()

    def start_RCcalibration(self):
        if self.ui.start_button.text() == 'Start':
            self.ui.cancel_button.setEnabled(True)
            self.ui.start_button.setText("Finish")
            self._raw_receiver_min_values = [
                1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500,
                1500, 1500
            ]
            self._raw_receiver_max_values = [
                1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500,
                1500, 1500
            ]

            self._protocol_handler.reset_receiver_calibration_values(
                self._nb_channels)
            self._protocol_handler.subscribe_receiver_data()
        else:
            self._send_calibration_value()
            self._cancel_calibration()

    def _receiver_raw_roll_received(self, event, raw_roll):
        self._raw_roll = int(raw_roll)
        self._compute_min_max_value(self._raw_roll, 0)
        self._update_right_stick(self._raw_roll, self._raw_pitch)

    def _receiver_raw_pitch_received(self, event, raw_pitch):
        self._raw_pitch = int(raw_pitch)
        self._compute_min_max_value(self._raw_pitch, 1)
        self._update_right_stick(self._raw_roll, self._raw_pitch)

    def _receiver_raw_yaw_received(self, event, raw_yaw):
        self._raw_yaw = int(raw_yaw)
        self._compute_min_max_value(self._raw_yaw, 2)
        self._update_left_stick(self._raw_throttle, self._raw_yaw)

    def _receiver_raw_throttle_received(self, event, raw_throttle):
        self._raw_throttle = int(raw_throttle)
        self._compute_min_max_value(self._raw_throttle, 3)
        self._update_left_stick(self._raw_throttle, self._raw_yaw)

    def _receiver_raw_mode_received(self, event, raw_mode):
        self._compute_min_max_value(int(raw_mode), 4)
        self.ui.mode_progress_bar.setValue(int(raw_mode))

    def _receiver_raw_aux1_received(self, event, raw_aux1):
        self._compute_min_max_value(int(raw_aux1), 5)
        self.ui.aux1_progress_bar.setValue(int(raw_aux1))

    def _receiver_raw_aux2_received(self, event, raw_aux2):
        self._compute_min_max_value(int(raw_aux2), 6)
        self.ui.aux2_progress_bar.setValue(int(raw_aux2))

    def _receiver_raw_aux3_received(self, event, raw_aux3):
        self._compute_min_max_value(int(raw_aux3), 7)
        self.ui.aux3_progress_bar.setValue(int(raw_aux3))

    def _receiver_raw_aux4_received(self, event, raw_aux4):
        self._compute_min_max_value(int(raw_aux4), 8)
        self.ui.aux4_progress_bar.setValue(int(raw_aux4))

    def _receiver_raw_aux5_received(self, event, raw_aux5):
        self._compute_min_max_value(int(raw_aux5), 9)
        self.ui.aux5_progress_bar.setValue(int(raw_aux5))

    def _receiver_raw_aux6_received(self, event, raw_aux6):
        self._compute_min_max_value(int(raw_aux6), 10)
        self.ui.aux6_progress_bar.setValue(int(raw_aux6))

    def _receiver_raw_aux7_received(self, event, raw_aux7):
        self._compute_min_max_value(int(raw_aux7), 11)
        self.ui.aux7_progress_bar.setValue(int(raw_aux7))

    def _compute_min_max_value(self, value, channel):
        self._raw_receiver_min_values[channel] = min(
            self._raw_receiver_min_values[channel], value)
        self._raw_receiver_max_values[channel] = max(
            self._raw_receiver_max_values[channel], value)

    def _cancel_calibration(self):
        self._protocol_handler.unsubscribe_command()
        self.ui.cancel_button.setEnabled(False)
        self.ui.start_button.setText("Start")

    def _update_left_stick(self, throttle, yaw):
        throttlePosition = self._scale_stick_display_value(
            throttle, (1000.0, 2000.0), (58.0, -57.0))
        yawPosition = self._scale_stick_display_value(yaw, (1000.0, 2000.0),
                                                      (-57.0, 55.0))
        self.leftStick.setPos(yawPosition, throttlePosition)

    def _update_right_stick(self, roll, pitch):
        rollPosition = self._scale_stick_display_value(roll, (1000.0, 2000.0),
                                                       (-57.0, 55.0))
        pitchPosition = self._scale_stick_display_value(
            pitch, (1000.0, 2000.0), (58.0, -57.0))
        self.rightStick.setPos(rollPosition, pitchPosition)

    def _scale_stick_display_value(self, val, src, dst):
        return ((val - src[0]) /
                (src[1] - src[0])) * (dst[1] - dst[0]) + dst[0]

    def _update_panel_display(self):
        if self._nb_channels < 6:
            self.ui.label_aux1.hide()
            self.ui.aux1_progress_bar.hide()
        if self._nb_channels < 7:
            self.ui.label_aux2.hide()
            self.ui.aux2_progress_bar.hide()
        if self._nb_channels < 8:
            self.ui.label_aux3.hide()
            self.ui.aux3_progress_bar.hide()
        if self._nb_channels < 9:
            self.ui.label_aux4.hide()
            self.ui.aux4_progress_bar.hide()
        if self._nb_channels < 10:
            self.ui.label_aux5.hide()
            self.ui.aux5_progress_bar.hide()
        if self._nb_channels < 11:
            self.ui.label_aux6.hide()
            self.ui.aux6_progress_bar.hide()
        if self._nb_channels < 12:
            self.ui.label_aux7.hide()
            self.ui.aux7_progress_bar.hide()

    def _send_calibration_value(self):
        self._protocol_handler.send_receiver_calibation_values(
            self._nb_channels, self._raw_receiver_min_values,
            self._raw_receiver_max_values)
class ReceiverCalibrationController(QtGui.QWidget, BasePanelController):

    def __init__(self, vehicle_event_dispatcher, ui_event_dispatcher):
        QtGui.QWidget.__init__(self)
        BasePanelController.__init__(self)
        self.ui = Ui_ReceiverCalibrationPanel()
        self.ui.setupUi(self)
        self.ui.start.setEnabled(True)
        self.ui.cancel.setEnabled(False)
        
        leftStickScene = QtGui.QGraphicsScene()
        leftStickBackground = QtGui.QPixmap("./resources/TxDial.png")
        leftStickItem = QtGui.QGraphicsPixmapItem(leftStickBackground)
        leftStickScene.addItem(leftStickItem)
        self.leftStick = QtGui.QGraphicsEllipseItem(QtCore.QRectF(75, 75, 30, 30))
        self.leftStick.setPen(QtGui.QPen(QtGui.QBrush(QtCore.Qt.black, QtCore.Qt.SolidPattern), 2))
        self.leftStick.setBrush(QtGui.QBrush(QtCore.Qt.blue, QtCore.Qt.SolidPattern))
        leftStickScene.addItem(self.leftStick)
        self.ui.leftTransmitter.setScene(leftStickScene)
        
        rightStickScene = QtGui.QGraphicsScene()
        rightStickBackground = QtGui.QPixmap("./resources/TxDial.png")
        rightStickItem = QtGui.QGraphicsPixmapItem(rightStickBackground)
        rightStickScene.addItem(rightStickItem)
        self.rightStick = QtGui.QGraphicsEllipseItem(QtCore.QRectF(75, 75, 30, 30))
        self.rightStick.setPen(QtGui.QPen(QtGui.QBrush(QtCore.Qt.black, QtCore.Qt.SolidPattern), 2))
        self.rightStick.setBrush(QtGui.QBrush(QtCore.Qt.blue, QtCore.Qt.SolidPattern))
        rightStickScene.addItem(self.rightStick)
        self.ui.rightTransmitter.setScene(rightStickScene)   
        
        self.running = False
        self.amount_channels = 12
        self.RCmin = [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500]
        self.RCmax = [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500]
        self.max_amount_channels = 12
        
        self.ui.start.clicked.connect(self.start_RCcalibration)
        self.ui.cancel.clicked.connect(self.cancel_RCcalibration)

    def start(self):
        pass
#        self.xmlSubPanel = xmlSubPanel
#        self.boardConfiguration = boardConfiguration
#        try:
#            self.amount_channels = int(self.boardConfiguration["Receiver Nb Channels"])
#        except:
#            logging.warning("Can't read amount of channels from boardconfiguration!")
#        self.enable_gui_attribute()

    def start_RCcalibration(self):
        if self.running:    
            self.ui.start.setText("Start")
            self.cancel_RCcalibration() #we can stop the calibration it's done
            self.timer.stop()
            self.send_calibration_value()
        
        elif not self.running:
            if self._communicator.isConnected() == True:
                self._communicator.write("H")
                self._communicator.write("t")
                self.timer = QtCore.QTimer()
                self.timer.timeout.connect(self.read_continuousData)
                self.timer.start(50)
                self.startCommThread()
                self.running = True
                
                self.ui.cancel.setEnabled(True)
                self.ui.next.setEnabled(False)
                
                self.ui.start.setText("Finish")
                
                self.RCmin = [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500]
                self.RCmax = [1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500]
                
    def cancel_RCcalibration(self):
        self._communicator.write("x")
        self.timer.stop()
        self._communicator.flushResponse()
        self.running = False
        self.ui.cancel.setEnabled(False)
        self.ui.next.setEnabled(True)
        self.ui.start.setText("Start")
        
    def read_continuousData(self):
        isConnected = self._communicator.isConnected()
        if isConnected and not self.commData.empty():
            string = self.commData.get()
            string_out = string.split(',')
            if self.running:
                for i in range(0, self.amount_channels):
                    if int(string_out[i]) < self.RCmin[i]:  
                        self.RCmin[i] = int(string_out[i])
                    if int(string_out[i]) > self.RCmax[i]:  
                        self.RCmax[i] = int(string_out[i])
                    self.update_gui(i, string_out[i])                      
                    
            self.update_left_stick(int(string_out[3]), int(string_out[2]))
            self.update_right_stick(int(string_out[0]), int(string_out[1]))
            
    def update_gui(self, channel_number, value):
        if channel_number == 4:
            self.ui.progressBar_RCmode.setValue(int(value))
        if channel_number == 5:
            self.ui.progressBar_RCAux1.setValue(int(value))
        if channel_number == 6:
            self.ui.progressBar_RCAux2.setValue(int(value))
        if channel_number == 7:
            self.ui.progressBar_RCAux3.setValue(int(value))
        if channel_number == 8:
            self.ui.progressBar_RCAux4.setValue(int(value))
        if channel_number == 9:
            self.ui.progressBar_RCAux5.setValue(int(value))
        if channel_number == 10:
            self.ui.progressBar_RCAux6.setValue(int(value))
        if channel_number == 11:
            self.ui.progressBar_RCAux7.setValue(int(value))
    
    def update_left_stick(self, throttle, yaw):
        throttlePosition = self.scale(throttle, (1000.0, 2000.0), (58.0, -57.0))
        yawPosition = self.scale(yaw, (1000.0, 2000.0), (-57.0, 55.0))
        self.leftStick.setPos(yawPosition, throttlePosition)
        
    def update_right_stick(self, roll, pitch):
        rollPosition = self.scale(roll, (1000.0, 2000.0), (-57.0, 55.0))
        pitchPosition = self.scale(pitch, (1000.0, 2000.0), (58.0, -57.0))
        self.rightStick.setPos(rollPosition, pitchPosition)
    
    def scale(self, val, src, dst):
        return ((val - src[0]) / (src[1]-src[0])) * (dst[1]-dst[0]) + dst[0]
    
    def enable_gui_attribute(self):
        for i in range(0, self.max_amount_channels):
            if i > (self.amount_channels - 1) and i == 5:
                self.ui.label_aux1.setHidden(True)
                self.ui.progressBar_RCAux1.setHidden(True)
            elif i > (self.amount_channels - 1) and i == 6:
                self.ui.label_aux2.setHidden(True)
                self.ui.progressBar_RCAux2.setHidden(True)
            elif i > (self.amount_channels - 1) and i == 7:
                self.ui.label_aux3.setHidden(True)
                self.ui.progressBar_RCAux3.setHidden(True)
            elif i > (self.amount_channels - 1) and i == 8:
                self.ui.label_aux4.setHidden(True)
                self.ui.progressBar_RCAux4.setHidden(True)
            elif i > (self.amount_channels - 1) and i == 9:
                self.ui.label_aux5.setHidden(True)
                self.ui.progressBar_RCAux5.setHidden(True)
            elif i > (self.amount_channels - 1) and i == 10:
                self.ui.label_aux6.setHidden(True)
                self.ui.progressBar_RCAux6.setHidden(True)
            elif i > (self.amount_channels - 1) and i == 11:
                self.ui.label_aux7.setHidden(True)
                self.ui.progressBar_RCAux7.setHidden(True)
    
    def send_calibration_value(self):
        self._communicator.write("X");
        command = "G "
        for i in range(0, self.amount_channels):
            command += str(self.RCmin[i])
            command += ";"
            command += str(self.RCmax[i])
            command += ";"
            
        self._communicator.write(command)