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.')
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