Example #1
0
    def fixSettings(self, settings):
        warnings = []

        if len(settings) > self.servoCount:
            warnings.append('The settings loaded include settings for %s channels, '
                            'but this device has only %s channels. The extra channel settings will be ignored.'
                            % (len(settings), self.servoCount))
            del settings.channelSettings[self.servoCount:]

        if len(settings) < self.servoCount:
            warnings.append('The settings loaded include settings for only %s channels, '
                            'but this device has %s channels. '
                            'The other channels will be initialized with default settings.'
                            % (len(settings), self.servoCount))
            while len(settings) < self.servoCount:
                cs = ChannelSetting()
                if not self.isMiniMaestro and settings.servosAvailable <= len(settings):
                    cs.mode = ChannelMode.Input
                settings.channelSettings.append(cs)

        for cs in settings.channelSettings:
            if cs.mode == ChannelMode.Input:
                cs.homeMode = HomeMode.Ignore
                cs.minimum = 0
                cs.maximum = 1024
                cs.speed = 0
                cs.acceleration = 0
                cs.neutral = 1024
                cs.range = 1905
            elif cs.mode == ChannelMode.Output:
                cs.minimum = 3986
                cs.maximum = 8000
                cs.speed = 0
                cs.acceleration = 0
                cs.neutral = 6000
                cs.range = 1905

        if settings.serialDeviceNumber >= 128:
            settings.serialDeviceNumber = 12
            warnings.append('The serial device number must be less than 128. It will be changed to 12.')
Example #2
0
    def getUscSettings(self):
        settings = UscSettings()

        settings.serialMode = self.getRawParameter(uscParameter.PARAMETER_SERIAL_MODE)
        settings.fixedBaudRate = self.convertSpbrgToBps(
            self.getRawParameter(uscParameter.PARAMETER_SERIAL_FIXED_BAUD_RATE))
        settings.enableCrc = self.getRawParameter(uscParameter.PARAMETER_SERIAL_ENABLE_CRC) != 0
        settings.neverSuspend = self.getRawParameter(uscParameter.PARAMETER_SERIAL_NEVER_SUSPEND) != 0
        settings.serialDeviceNumber = self.getRawParameter(uscParameter.PARAMETER_SERIAL_DEVICE_NUMBER)
        settings.miniSscOffset = self.getRawParameter(uscParameter.PARAMETER_SERIAL_MINI_SSC_OFFSET)
        settings.serialTimeout = self.getRawParameter(uscParameter.PARAMETER_SERIAL_TIMEOUT)
        settings.scriptDone = self.getRawParameter(uscParameter.PARAMETER_SCRIPT_DONE) != 0

        if not self.isMiniMaestro:
            settings.servosAvailable = self.getRawParameter(uscParameter.PARAMETER_SERVOS_AVAILABLE)
            settings.servoPeriod = self.getRawParameter(uscParameter.PARAMETER_SERVO_PERIOD)
        else:
            tmp = self.getRawParameter(uscParameter.PARAMETER_MINI_MAESTRO_SERVO_PERIOD_HU) << 8
            tmp |= self.getRawParameter(uscParameter.PARAMETER_MINI_MAESTRO_SERVO_PERIOD_L)
            settings.miniMaestroServoPeriod = tmp

            settings.servoMultiplier = self.getRawParameter(uscParameter.PARAMETER_SERVO_MULTIPLIER) + 1

        if self.servoCount > 18:
            settings.enablePullups = self.getRawParameter(uscParameter.PARAMETER_ENABLE_PULLUPS) != 0

        ioMask = 0
        outputMask = 0
        channelModeBytes = []

        if not self.isMiniMaestro:
            ioMask = self.getRawParameter(uscParameter.PARAMETER_IO_MASK_C)
            outputMask = self.getRawParameter(uscParameter.PARAMETER_OUTPUT_MASK_C)
        else:
            for i in range(6):
                channelModeBytes.append(self.getRawParameter(uscParameter.PARAMETER_CHANNEL_MODES_0_3 + i))

        for i in range(self.servoCount):
            setting = ChannelSetting()

            if not self.isMiniMaestro:
                bitmask = 1 << Usc.channelToPort(i)
                if (ioMask & bitmask) == 0:
                    setting.mode = ChannelMode.Servo
                elif (outputMask & bitmask) == 0:
                    setting.mode = ChannelMode.Input
                else:
                    setting.mode = ChannelMode.Output
            else:
                setting.mode = (channelModeBytes[i >> 2] >> ((i & 3) << 1)) & 3

            home = self.getRawParameter(self.specifyServo(uscParameter.PARAMETER_SERVO0_HOME, i))

            if home == 0:
                setting.homeMode = HomeMode.Off
                setting.home = 0
            elif home == 1:
                setting.homeMode = HomeMode.Ignore
                setting.home = 0
            else:
                setting.homeMode = HomeMode.Goto
                setting.home = home

            setting.minimum = 64 * self.getRawParameter(self.specifyServo(uscParameter.PARAMETER_SERVO0_MIN, i))
            setting.maximum = 64 * self.getRawParameter(self.specifyServo(uscParameter.PARAMETER_SERVO0_MAX, i))
            setting.neutral = self.getRawParameter(self.specifyServo(uscParameter.PARAMETER_SERVO0_NEUTRAL, i))
            setting.range = 127 * self.getRawParameter(self.specifyServo(uscParameter.PARAMETER_SERVO0_RANGE, i))
            setting.speed = self.exponentialSpeedToNormalSpeed(
                self.getRawParameter(self.specifyServo(uscParameter.PARAMETER_SERVO0_SPEED, i)))
            setting.acceleration = self.getRawParameter(
                self.specifyServo(uscParameter.PARAMETER_SERVO0_ACCELERATION, i))

            settings.channelSettings.append(setting)

        return settings