"""
Autogenerated python message buffer code.
Source: clad/types/factoryTestTypes.clad
Full command line: victor-clad/tools/message-buffers/emitters/Python_emitter.py -C src -I clad/src lib/util/source/anki/clad robot/clad/src coretech/vision/clad_src coretech/common/clad_src -o generated/cladPython clad/types/factoryTestTypes.clad
"""

from __future__ import absolute_import
from __future__ import print_function

def _modify_path():
  import inspect, os, sys
  search_paths = [
    '../..',
    '../../../../victor-clad/tools/message-buffers/support/python',
  ]
  currentpath = os.path.abspath(os.path.dirname(inspect.getfile(inspect.currentframe())))
  for search_path in search_paths:
    search_path = os.path.normpath(os.path.abspath(os.path.realpath(os.path.join(currentpath, search_path))))
    if search_path not in sys.path:
      sys.path.insert(0, search_path)
_modify_path()

import msgbuffers

Anki = msgbuffers.Namespace()
Anki.Vector = msgbuffers.Namespace()

from clad.types.birthCertificate import Anki as _Anki
Anki.update(_Anki.deep_clone())

from clad.types.proxMessages import Anki as _Anki
Anki.update(_Anki.deep_clone())

from clad.types.tofTypes import Anki as _Anki
Anki.update(_Anki.deep_clone())

class FactoryTestState(object):
  "Automatically-generated uint_8 enumeration."
  GetPrevTestResults         = 0
  InitRobot                  = 1
  WaitingForMotorCalibration = 2
  ChargerAndIMUCheck         = 3
  DriveToSlot                = 4
  GotoCalibrationPose        = 5
  TakeCalibrationImages      = 6
  ComputeCameraCalibration   = 7
  WaitForCameraCalibration   = 8
  GotoPickupPose             = 9
  StartPickup                = 10
  PickingUpBlock             = 11
  PlacingBlock               = 12
  BackAndForth               = 13
  WaitingForWritesToRobot    = 14

Anki.Vector.FactoryTestState = FactoryTestState
del FactoryTestState


class FactoryTestResultCode(object):
  "Automatically-generated uint_8 enumeration."
  UNKNOWN                                   = 0
  SUCCESS                                   = 1
  MISMATCHED_CLAD                           = 2
  INIT_LIFT_OR_HEAD_FAILED                  = 3
  CHARGER_UNDETECTED                        = 4
  CHARGER_UNAVAILABLE                       = 5
  CHARGER_UNCONNECTED                       = 6
  IMU_DRIFTING                              = 7
  STILL_ON_CHARGER                          = 8
  GOTO_CALIB_POSE_ACTION_FAILED             = 9
  CLIFF_UNDETECTED                          = 10
  CLIFF_UNEXPECTED                          = 11
  NOT_IN_CALIBRATION_POSE                   = 12
  CALIBRATION_TIMED_OUT                     = 13
  CALIBRATION_VALUES_OOR                    = 14
  CAMERA_CALIB_WRITE_FAILED                 = 15
  CALIB_IMAGES_WRITE_FAILED                 = 16
  CALIB_POSE_WRITE_FAILED                   = 17
  TOO_MANY_CALIB_IMAGES                     = 18
  CALIB_POSE_GET_FAILED                     = 19
  READ_TOOL_CODE_FAILED                     = 20
  TOOL_CODE_POSITIONS_OOR                   = 21
  TOOL_CODE_WRITE_FAILED                    = 22
  GOTO_PRE_PICKUP_POSE_ACTION_FAILED        = 23
  NOT_IN_PRE_PICKUP_POSE                    = 24
  CUBE_NOT_FOUND                            = 25
  CUBE_NOT_WHERE_EXPECTED                   = 26
  PICKUP_FAILED                             = 27
  PLACEMENT_FAILED                          = 28
  UNEXPECTED_OBSERVED_OBJECT                = 29
  GOTO_PRE_MOUNT_CHARGER_POSE_ACTION_FAILED = 30
  CHARGER_NOT_FOUND                         = 31
  CHARGER_DOCK_FAILED                       = 32
  QUEUE_ACTION_FAILED                       = 33
  MOTOR_CALIB_UNEXPECTED                    = 34
  TEST_RESULT_WRITE_FAILED                  = 35
  TEST_TIMED_OUT                            = 36
  TEST_CANCELLED                            = 37
  ROBOT_PICKUP                              = 38
  TOOL_CODE_IMAGES_WRITE_FAILED             = 39
  NOISY_TOUCH_SENSOR                        = 40
  CUBE_POSE_WRITE_FAILED                    = 41
  LIFT_MOTOR_CALIB_UNEXPECTED               = 42
  HEAD_MOTOR_CALIB_UNEXPECTED               = 43
  BACKPACK_ELECTRICAL_ERROR                 = 44
  ROBOT_FAILED_PREPLAYPEN_TESTS             = 45
  ROBOT_NOT_TESTED                          = 46
  MOTORS_UNCALIBRATED                       = 47
  BIRTH_CERTIFICATE_WRITE_FAILED            = 48
  NVSTORAGE_WRITE_FAILED                    = 49
  NVSTORAGE_SEND_FAILED                     = 50
  TOO_MANY_TOOL_CODE_IMAGES                 = 51
  RAMPOST_ERROR                             = 52
  IMU_INFO_WRITE_FAILED                     = 53
  NO_ACTIVE_OBJECTS_DISCOVERED              = 54
  UNEXPECTED_TOUCH_DETECTED                 = 55
  COMPUTE_CAM_POSE_FAILED                   = 56
  CAM_POSE_OOR                              = 57
  PLAY_SOUND_FAILED                         = 58
  PREV_TEST_RESULTS_READ_FAILED             = 59
  START_TOF_FAILED                          = 60
  CLIFF_VALUE_TOO_HIGH                      = 61
  CLIFF_VALUE_TOO_LOW                       = 62
  BACKUP_NOT_STRAIGHT                       = 63
  BATTERY_TOO_LOW                           = 64
  NO_IMU_DATA                               = 65
  BACK_AND_FORTH_NOT_STRAIGHT               = 66
  CALIBRATE_TOF_FAILED                      = 67
  STOP_TOF_FAILED                           = 68
  NVSTORAGE_ERASE_FAILED                    = 69
  SETUP_TOF_FAILED                          = 70
  NO_WIFI_APS_DISCOVERED                    = 71
  UNKNOWN_BODY_COLOR                        = 72
  WRITE_TO_LOG_FAILED                       = 73
  BEHAVIOR_NOT_RUNNABLE                     = 74
  NOT_SEEING_CALIB_TARGET_TIMEOUT           = 75
  UNEXPECTED_ON_CHARGER                     = 76
  HEAD_MOTOR_DISABLED                       = 77
  LIFT_MOTOR_DISABLED                       = 78
  MOTOR_DISABLED                            = 79
  UNEXPECTED_MOVEMENT_DETECTED              = 80
  ACTION_FAILED                             = 81
  FRONT_CLIFFS_NOT_DETECTED                 = 82
  BACK_CLIFFS_NOT_DETECTED                  = 83
  FRONT_CLIFFS_NOT_UNDETECTED               = 84
  BACK_CLIFFS_NOT_UNDETECTED                = 85
  CUBE_HEIGHT_TOO_LOW                       = 86
  CUBE_HEIGHT_TOO_HIGH                      = 87
  DISTORTION_VALUES_OOR                     = 88
  DISTANCE_MARKER_NOT_FOUND                 = 89
  DISTANCE_MARKER_OOR                       = 90
  MIC_FR_NOT_WORKING                        = 91
  MIC_FL_NOT_WORKING                        = 92
  MIC_BR_NOT_WORKING                        = 93
  MIC_BL_NOT_WORKING                        = 94
  SPEAKER_NOT_WORKING                       = 95
  NO_FFT_RESULT                             = 96
  TOUCH_VALUES_OOR                          = 97
  DISTANCE_SENSOR_OOR                       = 98
  CERT_CHECK_FAILED                         = 99

Anki.Vector.FactoryTestResultCode = FactoryTestResultCode
del FactoryTestResultCode


class FactoryTestResultEntry(object):
  "Generated message-passing message."

  __slots__ = (
    '_utcTime',    # uint_64
    '_engineSHA1', # uint_32
    '_timestamps', # uint_32[18]
    '_stationID',  # int_32
    '_result',     # Anki.Vector.FactoryTestResultCode
  )

  @property
  def utcTime(self):
    "uint_64 utcTime struct property."
    return self._utcTime

  @utcTime.setter
  def utcTime(self, value):
    self._utcTime = msgbuffers.validate_integer(
      'FactoryTestResultEntry.utcTime', value, 0, 18446744073709551615)

  @property
  def engineSHA1(self):
    "uint_32 engineSHA1 struct property."
    return self._engineSHA1

  @engineSHA1.setter
  def engineSHA1(self, value):
    self._engineSHA1 = msgbuffers.validate_integer(
      'FactoryTestResultEntry.engineSHA1', value, 0, 4294967295)

  @property
  def timestamps(self):
    "uint_32[18] timestamps struct property."
    return self._timestamps

  @timestamps.setter
  def timestamps(self, value):
    self._timestamps = msgbuffers.validate_farray(
      'FactoryTestResultEntry.timestamps', value, 18,
      lambda name, value_inner: msgbuffers.validate_integer(
        name, value_inner, 0, 4294967295))

  @property
  def stationID(self):
    "int_32 stationID struct property."
    return self._stationID

  @stationID.setter
  def stationID(self, value):
    self._stationID = msgbuffers.validate_integer(
      'FactoryTestResultEntry.stationID', value, -2147483648, 2147483647)

  @property
  def result(self):
    "Anki.Vector.FactoryTestResultCode result struct property."
    return self._result

  @result.setter
  def result(self, value):
    self._result = msgbuffers.validate_integer(
      'FactoryTestResultEntry.result', value, 0, 255)

  def __init__(self, utcTime=0, engineSHA1=0, timestamps=(0,) * 18, stationID=0, result=Anki.Vector.FactoryTestResultCode.UNKNOWN):
    self.utcTime = utcTime
    self.engineSHA1 = engineSHA1
    self.timestamps = timestamps
    self.stationID = stationID
    self.result = result

  @classmethod
  def unpack(cls, buffer):
    "Reads a new FactoryTestResultEntry from the given buffer."
    reader = msgbuffers.BinaryReader(buffer)
    value = cls.unpack_from(reader)
    if reader.tell() != len(reader):
      raise msgbuffers.ReadError(
        ('FactoryTestResultEntry.unpack received a buffer of length {length}, ' +
        'but only {position} bytes were read.').format(
        length=len(reader), position=reader.tell()))
    return value

  @classmethod
  def unpack_from(cls, reader):
    "Reads a new FactoryTestResultEntry from the given BinaryReader."
    _utcTime = reader.read('Q')
    _engineSHA1 = reader.read('I')
    _timestamps = reader.read_farray('I', 18)
    _stationID = reader.read('i')
    _result = reader.read('B')
    return cls(_utcTime, _engineSHA1, _timestamps, _stationID, _result)

  def pack(self):
    "Writes the current FactoryTestResultEntry, returning bytes."
    writer = msgbuffers.BinaryWriter()
    self.pack_to(writer)
    return writer.dumps()

  def pack_to(self, writer):
    "Writes the current FactoryTestResultEntry to the given BinaryWriter."
    writer.write(self._utcTime, 'Q')
    writer.write(self._engineSHA1, 'I')
    writer.write_farray(self._timestamps, 'I', 18)
    writer.write(self._stationID, 'i')
    writer.write(self._result, 'B')

  def __eq__(self, other):
    if type(self) is type(other):
      return (self._utcTime == other._utcTime and
        self._engineSHA1 == other._engineSHA1 and
        self._timestamps == other._timestamps and
        self._stationID == other._stationID and
        self._result == other._result)
    else:
      return NotImplemented

  def __ne__(self, other):
    if type(self) is type(other):
      return not self.__eq__(other)
    else:
      return NotImplemented

  def __len__(self):
    return (msgbuffers.size(self._utcTime, 'Q') +
      msgbuffers.size(self._engineSHA1, 'I') +
      msgbuffers.size_farray(self._timestamps, 'I', 18) +
      msgbuffers.size(self._stationID, 'i') +
      msgbuffers.size(self._result, 'B'))

  def __str__(self):
    return '{type}(utcTime={utcTime}, engineSHA1={engineSHA1}, timestamps={timestamps}, stationID={stationID}, result={result})'.format(
      type=type(self).__name__,
      utcTime=self._utcTime,
      engineSHA1=self._engineSHA1,
      timestamps=msgbuffers.shorten_sequence(self._timestamps),
      stationID=self._stationID,
      result=self._result)

  def __repr__(self):
    return '{type}(utcTime={utcTime}, engineSHA1={engineSHA1}, timestamps={timestamps}, stationID={stationID}, result={result})'.format(
      type=type(self).__name__,
      utcTime=repr(self._utcTime),
      engineSHA1=repr(self._engineSHA1),
      timestamps=repr(self._timestamps),
      stationID=repr(self._stationID),
      result=repr(self._result))

Anki.Vector.FactoryTestResultEntry = FactoryTestResultEntry
del FactoryTestResultEntry


class CalibMetaInfo(object):
  "Generated message-passing structure."

  __slots__ = (
    '_dotsFoundMask', # uint_8
  )

  @property
  def dotsFoundMask(self):
    "uint_8 dotsFoundMask struct property."
    return self._dotsFoundMask

  @dotsFoundMask.setter
  def dotsFoundMask(self, value):
    self._dotsFoundMask = msgbuffers.validate_integer(
      'CalibMetaInfo.dotsFoundMask', value, 0, 255)

  def __init__(self, dotsFoundMask=0):
    self.dotsFoundMask = dotsFoundMask

  @classmethod
  def unpack(cls, buffer):
    "Reads a new CalibMetaInfo from the given buffer."
    reader = msgbuffers.BinaryReader(buffer)
    value = cls.unpack_from(reader)
    if reader.tell() != len(reader):
      raise msgbuffers.ReadError(
        ('CalibMetaInfo.unpack received a buffer of length {length}, ' +
        'but only {position} bytes were read.').format(
        length=len(reader), position=reader.tell()))
    return value

  @classmethod
  def unpack_from(cls, reader):
    "Reads a new CalibMetaInfo from the given BinaryReader."
    _dotsFoundMask = reader.read('B')
    return cls(_dotsFoundMask)

  def pack(self):
    "Writes the current CalibMetaInfo, returning bytes."
    writer = msgbuffers.BinaryWriter()
    self.pack_to(writer)
    return writer.dumps()

  def pack_to(self, writer):
    "Writes the current CalibMetaInfo to the given BinaryWriter."
    writer.write(self._dotsFoundMask, 'B')

  def __eq__(self, other):
    if type(self) is type(other):
      return self._dotsFoundMask == other._dotsFoundMask
    else:
      return NotImplemented

  def __ne__(self, other):
    if type(self) is type(other):
      return not self.__eq__(other)
    else:
      return NotImplemented

  def __len__(self):
    return (msgbuffers.size(self._dotsFoundMask, 'B'))

  def __str__(self):
    return '{type}(dotsFoundMask={dotsFoundMask})'.format(
      type=type(self).__name__,
      dotsFoundMask=self._dotsFoundMask)

  def __repr__(self):
    return '{type}(dotsFoundMask={dotsFoundMask})'.format(
      type=type(self).__name__,
      dotsFoundMask=repr(self._dotsFoundMask))

Anki.Vector.CalibMetaInfo = CalibMetaInfo
del CalibMetaInfo


class IMUTempDuration(object):
  "Generated message-passing structure."

  __slots__ = (
    '_tempStart_c', # float_32
    '_tempEnd_c',   # float_32
    '_duration_ms', # uint_32
  )

  @property
  def tempStart_c(self):
    "float_32 tempStart_c struct property."
    return self._tempStart_c

  @tempStart_c.setter
  def tempStart_c(self, value):
    self._tempStart_c = msgbuffers.validate_float(
      'IMUTempDuration.tempStart_c', value, 'f')

  @property
  def tempEnd_c(self):
    "float_32 tempEnd_c struct property."
    return self._tempEnd_c

  @tempEnd_c.setter
  def tempEnd_c(self, value):
    self._tempEnd_c = msgbuffers.validate_float(
      'IMUTempDuration.tempEnd_c', value, 'f')

  @property
  def duration_ms(self):
    "uint_32 duration_ms struct property."
    return self._duration_ms

  @duration_ms.setter
  def duration_ms(self, value):
    self._duration_ms = msgbuffers.validate_integer(
      'IMUTempDuration.duration_ms', value, 0, 4294967295)

  def __init__(self, tempStart_c=0.0, tempEnd_c=0.0, duration_ms=0):
    self.tempStart_c = tempStart_c
    self.tempEnd_c = tempEnd_c
    self.duration_ms = duration_ms

  @classmethod
  def unpack(cls, buffer):
    "Reads a new IMUTempDuration from the given buffer."
    reader = msgbuffers.BinaryReader(buffer)
    value = cls.unpack_from(reader)
    if reader.tell() != len(reader):
      raise msgbuffers.ReadError(
        ('IMUTempDuration.unpack received a buffer of length {length}, ' +
        'but only {position} bytes were read.').format(
        length=len(reader), position=reader.tell()))
    return value

  @classmethod
  def unpack_from(cls, reader):
    "Reads a new IMUTempDuration from the given BinaryReader."
    _tempStart_c = reader.read('f')
    _tempEnd_c = reader.read('f')
    _duration_ms = reader.read('I')
    return cls(_tempStart_c, _tempEnd_c, _duration_ms)

  def pack(self):
    "Writes the current IMUTempDuration, returning bytes."
    writer = msgbuffers.BinaryWriter()
    self.pack_to(writer)
    return writer.dumps()

  def pack_to(self, writer):
    "Writes the current IMUTempDuration to the given BinaryWriter."
    writer.write(self._tempStart_c, 'f')
    writer.write(self._tempEnd_c, 'f')
    writer.write(self._duration_ms, 'I')

  def __eq__(self, other):
    if type(self) is type(other):
      return (self._tempStart_c == other._tempStart_c and
        self._tempEnd_c == other._tempEnd_c and
        self._duration_ms == other._duration_ms)
    else:
      return NotImplemented

  def __ne__(self, other):
    if type(self) is type(other):
      return not self.__eq__(other)
    else:
      return NotImplemented

  def __len__(self):
    return (msgbuffers.size(self._tempStart_c, 'f') +
      msgbuffers.size(self._tempEnd_c, 'f') +
      msgbuffers.size(self._duration_ms, 'I'))

  def __str__(self):
    return '{type}(tempStart_c={tempStart_c}, tempEnd_c={tempEnd_c}, duration_ms={duration_ms})'.format(
      type=type(self).__name__,
      tempStart_c=self._tempStart_c,
      tempEnd_c=self._tempEnd_c,
      duration_ms=self._duration_ms)

  def __repr__(self):
    return '{type}(tempStart_c={tempStart_c}, tempEnd_c={tempEnd_c}, duration_ms={duration_ms})'.format(
      type=type(self).__name__,
      tempStart_c=repr(self._tempStart_c),
      tempEnd_c=repr(self._tempEnd_c),
      duration_ms=repr(self._duration_ms))

Anki.Vector.IMUTempDuration = IMUTempDuration
del IMUTempDuration


class IMUInfo(object):
  "Generated message-passing structure."

  __slots__ = (
    '_driftRate_degPerSec', # float_32
    '_tempDuration',        # Anki.Vector.IMUTempDuration
  )

  @property
  def driftRate_degPerSec(self):
    "float_32 driftRate_degPerSec struct property."
    return self._driftRate_degPerSec

  @driftRate_degPerSec.setter
  def driftRate_degPerSec(self, value):
    self._driftRate_degPerSec = msgbuffers.validate_float(
      'IMUInfo.driftRate_degPerSec', value, 'f')

  @property
  def tempDuration(self):
    "Anki.Vector.IMUTempDuration tempDuration struct property."
    return self._tempDuration

  @tempDuration.setter
  def tempDuration(self, value):
    self._tempDuration = msgbuffers.validate_object(
      'IMUInfo.tempDuration', value, Anki.Vector.IMUTempDuration)

  def __init__(self, driftRate_degPerSec=0.0, tempDuration=Anki.Vector.IMUTempDuration()):
    self.driftRate_degPerSec = driftRate_degPerSec
    self.tempDuration = tempDuration

  @classmethod
  def unpack(cls, buffer):
    "Reads a new IMUInfo from the given buffer."
    reader = msgbuffers.BinaryReader(buffer)
    value = cls.unpack_from(reader)
    if reader.tell() != len(reader):
      raise msgbuffers.ReadError(
        ('IMUInfo.unpack received a buffer of length {length}, ' +
        'but only {position} bytes were read.').format(
        length=len(reader), position=reader.tell()))
    return value

  @classmethod
  def unpack_from(cls, reader):
    "Reads a new IMUInfo from the given BinaryReader."
    _driftRate_degPerSec = reader.read('f')
    _tempDuration = reader.read_object(Anki.Vector.IMUTempDuration.unpack_from)
    return cls(_driftRate_degPerSec, _tempDuration)

  def pack(self):
    "Writes the current IMUInfo, returning bytes."
    writer = msgbuffers.BinaryWriter()
    self.pack_to(writer)
    return writer.dumps()

  def pack_to(self, writer):
    "Writes the current IMUInfo to the given BinaryWriter."
    writer.write(self._driftRate_degPerSec, 'f')
    writer.write_object(self._tempDuration)

  def __eq__(self, other):
    if type(self) is type(other):
      return (self._driftRate_degPerSec == other._driftRate_degPerSec and
        self._tempDuration == other._tempDuration)
    else:
      return NotImplemented

  def __ne__(self, other):
    if type(self) is type(other):
      return not self.__eq__(other)
    else:
      return NotImplemented

  def __len__(self):
    return (msgbuffers.size(self._driftRate_degPerSec, 'f') +
      msgbuffers.size_object(self._tempDuration))

  def __str__(self):
    return '{type}(driftRate_degPerSec={driftRate_degPerSec}, tempDuration={tempDuration})'.format(
      type=type(self).__name__,
      driftRate_degPerSec=self._driftRate_degPerSec,
      tempDuration=self._tempDuration)

  def __repr__(self):
    return '{type}(driftRate_degPerSec={driftRate_degPerSec}, tempDuration={tempDuration})'.format(
      type=type(self).__name__,
      driftRate_degPerSec=repr(self._driftRate_degPerSec),
      tempDuration=repr(self._tempDuration))

Anki.Vector.IMUInfo = IMUInfo
del IMUInfo


class CliffSensorValue(object):
  "Generated message-passing structure."

  __slots__ = (
    '_val', # uint_16
  )

  @property
  def val(self):
    "uint_16 val struct property."
    return self._val

  @val.setter
  def val(self, value):
    self._val = msgbuffers.validate_integer(
      'CliffSensorValue.val', value, 0, 65535)

  def __init__(self, val=0):
    self.val = val

  @classmethod
  def unpack(cls, buffer):
    "Reads a new CliffSensorValue from the given buffer."
    reader = msgbuffers.BinaryReader(buffer)
    value = cls.unpack_from(reader)
    if reader.tell() != len(reader):
      raise msgbuffers.ReadError(
        ('CliffSensorValue.unpack received a buffer of length {length}, ' +
        'but only {position} bytes were read.').format(
        length=len(reader), position=reader.tell()))
    return value

  @classmethod
  def unpack_from(cls, reader):
    "Reads a new CliffSensorValue from the given BinaryReader."
    _val = reader.read('H')
    return cls(_val)

  def pack(self):
    "Writes the current CliffSensorValue, returning bytes."
    writer = msgbuffers.BinaryWriter()
    self.pack_to(writer)
    return writer.dumps()

  def pack_to(self, writer):
    "Writes the current CliffSensorValue to the given BinaryWriter."
    writer.write(self._val, 'H')

  def __eq__(self, other):
    if type(self) is type(other):
      return self._val == other._val
    else:
      return NotImplemented

  def __ne__(self, other):
    if type(self) is type(other):
      return not self.__eq__(other)
    else:
      return NotImplemented

  def __len__(self):
    return (msgbuffers.size(self._val, 'H'))

  def __str__(self):
    return '{type}(val={val})'.format(
      type=type(self).__name__,
      val=self._val)

  def __repr__(self):
    return '{type}(val={val})'.format(
      type=type(self).__name__,
      val=repr(self._val))

Anki.Vector.CliffSensorValue = CliffSensorValue
del CliffSensorValue


class CliffSensorValues(object):
  "Generated message-passing structure."

  __slots__ = (
    '_FR', # uint_16
    '_FL', # uint_16
    '_BR', # uint_16
    '_BL', # uint_16
  )

  @property
  def FR(self):
    "uint_16 FR struct property."
    return self._FR

  @FR.setter
  def FR(self, value):
    self._FR = msgbuffers.validate_integer(
      'CliffSensorValues.FR', value, 0, 65535)

  @property
  def FL(self):
    "uint_16 FL struct property."
    return self._FL

  @FL.setter
  def FL(self, value):
    self._FL = msgbuffers.validate_integer(
      'CliffSensorValues.FL', value, 0, 65535)

  @property
  def BR(self):
    "uint_16 BR struct property."
    return self._BR

  @BR.setter
  def BR(self, value):
    self._BR = msgbuffers.validate_integer(
      'CliffSensorValues.BR', value, 0, 65535)

  @property
  def BL(self):
    "uint_16 BL struct property."
    return self._BL

  @BL.setter
  def BL(self, value):
    self._BL = msgbuffers.validate_integer(
      'CliffSensorValues.BL', value, 0, 65535)

  def __init__(self, FR=0, FL=0, BR=0, BL=0):
    self.FR = FR
    self.FL = FL
    self.BR = BR
    self.BL = BL

  @classmethod
  def unpack(cls, buffer):
    "Reads a new CliffSensorValues from the given buffer."
    reader = msgbuffers.BinaryReader(buffer)
    value = cls.unpack_from(reader)
    if reader.tell() != len(reader):
      raise msgbuffers.ReadError(
        ('CliffSensorValues.unpack received a buffer of length {length}, ' +
        'but only {position} bytes were read.').format(
        length=len(reader), position=reader.tell()))
    return value

  @classmethod
  def unpack_from(cls, reader):
    "Reads a new CliffSensorValues from the given BinaryReader."
    _FR = reader.read('H')
    _FL = reader.read('H')
    _BR = reader.read('H')
    _BL = reader.read('H')
    return cls(_FR, _FL, _BR, _BL)

  def pack(self):
    "Writes the current CliffSensorValues, returning bytes."
    writer = msgbuffers.BinaryWriter()
    self.pack_to(writer)
    return writer.dumps()

  def pack_to(self, writer):
    "Writes the current CliffSensorValues to the given BinaryWriter."
    writer.write(self._FR, 'H')
    writer.write(self._FL, 'H')
    writer.write(self._BR, 'H')
    writer.write(self._BL, 'H')

  def __eq__(self, other):
    if type(self) is type(other):
      return (self._FR == other._FR and
        self._FL == other._FL and
        self._BR == other._BR and
        self._BL == other._BL)
    else:
      return NotImplemented

  def __ne__(self, other):
    if type(self) is type(other):
      return not self.__eq__(other)
    else:
      return NotImplemented

  def __len__(self):
    return (msgbuffers.size(self._FR, 'H') +
      msgbuffers.size(self._FL, 'H') +
      msgbuffers.size(self._BR, 'H') +
      msgbuffers.size(self._BL, 'H'))

  def __str__(self):
    return '{type}(FR={FR}, FL={FL}, BR={BR}, BL={BL})'.format(
      type=type(self).__name__,
      FR=self._FR,
      FL=self._FL,
      BR=self._BR,
      BL=self._BL)

  def __repr__(self):
    return '{type}(FR={FR}, FL={FL}, BR={BR}, BL={BL})'.format(
      type=type(self).__name__,
      FR=repr(self._FR),
      FL=repr(self._FL),
      BR=repr(self._BR),
      BL=repr(self._BL))

Anki.Vector.CliffSensorValues = CliffSensorValues
del CliffSensorValues


class PoseData(object):
  "Generated message-passing structure."

  __slots__ = (
    '_angleX_rad', # float_32
    '_angleY_rad', # float_32
    '_angleZ_rad', # float_32
    '_transX_mm',  # float_32
    '_transY_mm',  # float_32
    '_transZ_mm',  # float_32
  )

  @property
  def angleX_rad(self):
    "float_32 angleX_rad struct property."
    return self._angleX_rad

  @angleX_rad.setter
  def angleX_rad(self, value):
    self._angleX_rad = msgbuffers.validate_float(
      'PoseData.angleX_rad', value, 'f')

  @property
  def angleY_rad(self):
    "float_32 angleY_rad struct property."
    return self._angleY_rad

  @angleY_rad.setter
  def angleY_rad(self, value):
    self._angleY_rad = msgbuffers.validate_float(
      'PoseData.angleY_rad', value, 'f')

  @property
  def angleZ_rad(self):
    "float_32 angleZ_rad struct property."
    return self._angleZ_rad

  @angleZ_rad.setter
  def angleZ_rad(self, value):
    self._angleZ_rad = msgbuffers.validate_float(
      'PoseData.angleZ_rad', value, 'f')

  @property
  def transX_mm(self):
    "float_32 transX_mm struct property."
    return self._transX_mm

  @transX_mm.setter
  def transX_mm(self, value):
    self._transX_mm = msgbuffers.validate_float(
      'PoseData.transX_mm', value, 'f')

  @property
  def transY_mm(self):
    "float_32 transY_mm struct property."
    return self._transY_mm

  @transY_mm.setter
  def transY_mm(self, value):
    self._transY_mm = msgbuffers.validate_float(
      'PoseData.transY_mm', value, 'f')

  @property
  def transZ_mm(self):
    "float_32 transZ_mm struct property."
    return self._transZ_mm

  @transZ_mm.setter
  def transZ_mm(self, value):
    self._transZ_mm = msgbuffers.validate_float(
      'PoseData.transZ_mm', value, 'f')

  def __init__(self, angleX_rad=0.0, angleY_rad=0.0, angleZ_rad=0.0, transX_mm=0.0, transY_mm=0.0, transZ_mm=0.0):
    self.angleX_rad = angleX_rad
    self.angleY_rad = angleY_rad
    self.angleZ_rad = angleZ_rad
    self.transX_mm = transX_mm
    self.transY_mm = transY_mm
    self.transZ_mm = transZ_mm

  @classmethod
  def unpack(cls, buffer):
    "Reads a new PoseData from the given buffer."
    reader = msgbuffers.BinaryReader(buffer)
    value = cls.unpack_from(reader)
    if reader.tell() != len(reader):
      raise msgbuffers.ReadError(
        ('PoseData.unpack received a buffer of length {length}, ' +
        'but only {position} bytes were read.').format(
        length=len(reader), position=reader.tell()))
    return value

  @classmethod
  def unpack_from(cls, reader):
    "Reads a new PoseData from the given BinaryReader."
    _angleX_rad = reader.read('f')
    _angleY_rad = reader.read('f')
    _angleZ_rad = reader.read('f')
    _transX_mm = reader.read('f')
    _transY_mm = reader.read('f')
    _transZ_mm = reader.read('f')
    return cls(_angleX_rad, _angleY_rad, _angleZ_rad, _transX_mm, _transY_mm, _transZ_mm)

  def pack(self):
    "Writes the current PoseData, returning bytes."
    writer = msgbuffers.BinaryWriter()
    self.pack_to(writer)
    return writer.dumps()

  def pack_to(self, writer):
    "Writes the current PoseData to the given BinaryWriter."
    writer.write(self._angleX_rad, 'f')
    writer.write(self._angleY_rad, 'f')
    writer.write(self._angleZ_rad, 'f')
    writer.write(self._transX_mm, 'f')
    writer.write(self._transY_mm, 'f')
    writer.write(self._transZ_mm, 'f')

  def __eq__(self, other):
    if type(self) is type(other):
      return (self._angleX_rad == other._angleX_rad and
        self._angleY_rad == other._angleY_rad and
        self._angleZ_rad == other._angleZ_rad and
        self._transX_mm == other._transX_mm and
        self._transY_mm == other._transY_mm and
        self._transZ_mm == other._transZ_mm)
    else:
      return NotImplemented

  def __ne__(self, other):
    if type(self) is type(other):
      return not self.__eq__(other)
    else:
      return NotImplemented

  def __len__(self):
    return (msgbuffers.size(self._angleX_rad, 'f') +
      msgbuffers.size(self._angleY_rad, 'f') +
      msgbuffers.size(self._angleZ_rad, 'f') +
      msgbuffers.size(self._transX_mm, 'f') +
      msgbuffers.size(self._transY_mm, 'f') +
      msgbuffers.size(self._transZ_mm, 'f'))

  def __str__(self):
    return '{type}(angleX_rad={angleX_rad}, angleY_rad={angleY_rad}, angleZ_rad={angleZ_rad}, transX_mm={transX_mm}, transY_mm={transY_mm}, transZ_mm={transZ_mm})'.format(
      type=type(self).__name__,
      angleX_rad=self._angleX_rad,
      angleY_rad=self._angleY_rad,
      angleZ_rad=self._angleZ_rad,
      transX_mm=self._transX_mm,
      transY_mm=self._transY_mm,
      transZ_mm=self._transZ_mm)

  def __repr__(self):
    return '{type}(angleX_rad={angleX_rad}, angleY_rad={angleY_rad}, angleZ_rad={angleZ_rad}, transX_mm={transX_mm}, transY_mm={transY_mm}, transZ_mm={transZ_mm})'.format(
      type=type(self).__name__,
      angleX_rad=repr(self._angleX_rad),
      angleY_rad=repr(self._angleY_rad),
      angleZ_rad=repr(self._angleZ_rad),
      transX_mm=repr(self._transX_mm),
      transY_mm=repr(self._transY_mm),
      transZ_mm=repr(self._transZ_mm))

Anki.Vector.PoseData = PoseData
del PoseData


class DistanceSensorData(object):
  "Generated message-passing structure."

  __slots__ = (
    '_proxDistanceToTarget_mm',       # float_32
    '_visualDistanceToTarget_mm',     # float_32
    '_visualAngleAwayFromTarget_rad', # float_32
  )

  @property
  def proxDistanceToTarget_mm(self):
    "float_32 proxDistanceToTarget_mm struct property."
    return self._proxDistanceToTarget_mm

  @proxDistanceToTarget_mm.setter
  def proxDistanceToTarget_mm(self, value):
    self._proxDistanceToTarget_mm = msgbuffers.validate_float(
      'DistanceSensorData.proxDistanceToTarget_mm', value, 'f')

  @property
  def visualDistanceToTarget_mm(self):
    "float_32 visualDistanceToTarget_mm struct property."
    return self._visualDistanceToTarget_mm

  @visualDistanceToTarget_mm.setter
  def visualDistanceToTarget_mm(self, value):
    self._visualDistanceToTarget_mm = msgbuffers.validate_float(
      'DistanceSensorData.visualDistanceToTarget_mm', value, 'f')

  @property
  def visualAngleAwayFromTarget_rad(self):
    "float_32 visualAngleAwayFromTarget_rad struct property."
    return self._visualAngleAwayFromTarget_rad

  @visualAngleAwayFromTarget_rad.setter
  def visualAngleAwayFromTarget_rad(self, value):
    self._visualAngleAwayFromTarget_rad = msgbuffers.validate_float(
      'DistanceSensorData.visualAngleAwayFromTarget_rad', value, 'f')

  def __init__(self, proxDistanceToTarget_mm=0.0, visualDistanceToTarget_mm=0.0, visualAngleAwayFromTarget_rad=0.0):
    self.proxDistanceToTarget_mm = proxDistanceToTarget_mm
    self.visualDistanceToTarget_mm = visualDistanceToTarget_mm
    self.visualAngleAwayFromTarget_rad = visualAngleAwayFromTarget_rad

  @classmethod
  def unpack(cls, buffer):
    "Reads a new DistanceSensorData from the given buffer."
    reader = msgbuffers.BinaryReader(buffer)
    value = cls.unpack_from(reader)
    if reader.tell() != len(reader):
      raise msgbuffers.ReadError(
        ('DistanceSensorData.unpack received a buffer of length {length}, ' +
        'but only {position} bytes were read.').format(
        length=len(reader), position=reader.tell()))
    return value

  @classmethod
  def unpack_from(cls, reader):
    "Reads a new DistanceSensorData from the given BinaryReader."
    _proxDistanceToTarget_mm = reader.read('f')
    _visualDistanceToTarget_mm = reader.read('f')
    _visualAngleAwayFromTarget_rad = reader.read('f')
    return cls(_proxDistanceToTarget_mm, _visualDistanceToTarget_mm, _visualAngleAwayFromTarget_rad)

  def pack(self):
    "Writes the current DistanceSensorData, returning bytes."
    writer = msgbuffers.BinaryWriter()
    self.pack_to(writer)
    return writer.dumps()

  def pack_to(self, writer):
    "Writes the current DistanceSensorData to the given BinaryWriter."
    writer.write(self._proxDistanceToTarget_mm, 'f')
    writer.write(self._visualDistanceToTarget_mm, 'f')
    writer.write(self._visualAngleAwayFromTarget_rad, 'f')

  def __eq__(self, other):
    if type(self) is type(other):
      return (self._proxDistanceToTarget_mm == other._proxDistanceToTarget_mm and
        self._visualDistanceToTarget_mm == other._visualDistanceToTarget_mm and
        self._visualAngleAwayFromTarget_rad == other._visualAngleAwayFromTarget_rad)
    else:
      return NotImplemented

  def __ne__(self, other):
    if type(self) is type(other):
      return not self.__eq__(other)
    else:
      return NotImplemented

  def __len__(self):
    return (msgbuffers.size(self._proxDistanceToTarget_mm, 'f') +
      msgbuffers.size(self._visualDistanceToTarget_mm, 'f') +
      msgbuffers.size(self._visualAngleAwayFromTarget_rad, 'f'))

  def __str__(self):
    return '{type}(proxDistanceToTarget_mm={proxDistanceToTarget_mm}, visualDistanceToTarget_mm={visualDistanceToTarget_mm}, visualAngleAwayFromTarget_rad={visualAngleAwayFromTarget_rad})'.format(
      type=type(self).__name__,
      proxDistanceToTarget_mm=self._proxDistanceToTarget_mm,
      visualDistanceToTarget_mm=self._visualDistanceToTarget_mm,
      visualAngleAwayFromTarget_rad=self._visualAngleAwayFromTarget_rad)

  def __repr__(self):
    return '{type}(proxDistanceToTarget_mm={proxDistanceToTarget_mm}, visualDistanceToTarget_mm={visualDistanceToTarget_mm}, visualAngleAwayFromTarget_rad={visualAngleAwayFromTarget_rad})'.format(
      type=type(self).__name__,
      proxDistanceToTarget_mm=repr(self._proxDistanceToTarget_mm),
      visualDistanceToTarget_mm=repr(self._visualDistanceToTarget_mm),
      visualAngleAwayFromTarget_rad=repr(self._visualAngleAwayFromTarget_rad))

Anki.Vector.DistanceSensorData = DistanceSensorData
del DistanceSensorData


class RangeSensorData(object):
  "Generated message-passing structure."

  __slots__ = (
    '_rangeData',                     # Anki.Vector.RangeDataRaw
    '_visualDistanceToTarget_mm',     # float_32
    '_visualAngleAwayFromTarget_rad', # float_32
    '_headAngle_rad',                 # float_32
  )

  @property
  def rangeData(self):
    "Anki.Vector.RangeDataRaw rangeData struct property."
    return self._rangeData

  @rangeData.setter
  def rangeData(self, value):
    self._rangeData = msgbuffers.validate_object(
      'RangeSensorData.rangeData', value, Anki.Vector.RangeDataRaw)

  @property
  def visualDistanceToTarget_mm(self):
    "float_32 visualDistanceToTarget_mm struct property."
    return self._visualDistanceToTarget_mm

  @visualDistanceToTarget_mm.setter
  def visualDistanceToTarget_mm(self, value):
    self._visualDistanceToTarget_mm = msgbuffers.validate_float(
      'RangeSensorData.visualDistanceToTarget_mm', value, 'f')

  @property
  def visualAngleAwayFromTarget_rad(self):
    "float_32 visualAngleAwayFromTarget_rad struct property."
    return self._visualAngleAwayFromTarget_rad

  @visualAngleAwayFromTarget_rad.setter
  def visualAngleAwayFromTarget_rad(self, value):
    self._visualAngleAwayFromTarget_rad = msgbuffers.validate_float(
      'RangeSensorData.visualAngleAwayFromTarget_rad', value, 'f')

  @property
  def headAngle_rad(self):
    "float_32 headAngle_rad struct property."
    return self._headAngle_rad

  @headAngle_rad.setter
  def headAngle_rad(self, value):
    self._headAngle_rad = msgbuffers.validate_float(
      'RangeSensorData.headAngle_rad', value, 'f')

  def __init__(self, rangeData=Anki.Vector.RangeDataRaw(), visualDistanceToTarget_mm=0.0, visualAngleAwayFromTarget_rad=0.0, headAngle_rad=0.0):
    self.rangeData = rangeData
    self.visualDistanceToTarget_mm = visualDistanceToTarget_mm
    self.visualAngleAwayFromTarget_rad = visualAngleAwayFromTarget_rad
    self.headAngle_rad = headAngle_rad

  @classmethod
  def unpack(cls, buffer):
    "Reads a new RangeSensorData from the given buffer."
    reader = msgbuffers.BinaryReader(buffer)
    value = cls.unpack_from(reader)
    if reader.tell() != len(reader):
      raise msgbuffers.ReadError(
        ('RangeSensorData.unpack received a buffer of length {length}, ' +
        'but only {position} bytes were read.').format(
        length=len(reader), position=reader.tell()))
    return value

  @classmethod
  def unpack_from(cls, reader):
    "Reads a new RangeSensorData from the given BinaryReader."
    _rangeData = reader.read_object(Anki.Vector.RangeDataRaw.unpack_from)
    _visualDistanceToTarget_mm = reader.read('f')
    _visualAngleAwayFromTarget_rad = reader.read('f')
    _headAngle_rad = reader.read('f')
    return cls(_rangeData, _visualDistanceToTarget_mm, _visualAngleAwayFromTarget_rad, _headAngle_rad)

  def pack(self):
    "Writes the current RangeSensorData, returning bytes."
    writer = msgbuffers.BinaryWriter()
    self.pack_to(writer)
    return writer.dumps()

  def pack_to(self, writer):
    "Writes the current RangeSensorData to the given BinaryWriter."
    writer.write_object(self._rangeData)
    writer.write(self._visualDistanceToTarget_mm, 'f')
    writer.write(self._visualAngleAwayFromTarget_rad, 'f')
    writer.write(self._headAngle_rad, 'f')

  def __eq__(self, other):
    if type(self) is type(other):
      return (self._rangeData == other._rangeData and
        self._visualDistanceToTarget_mm == other._visualDistanceToTarget_mm and
        self._visualAngleAwayFromTarget_rad == other._visualAngleAwayFromTarget_rad and
        self._headAngle_rad == other._headAngle_rad)
    else:
      return NotImplemented

  def __ne__(self, other):
    if type(self) is type(other):
      return not self.__eq__(other)
    else:
      return NotImplemented

  def __len__(self):
    return (msgbuffers.size_object(self._rangeData) +
      msgbuffers.size(self._visualDistanceToTarget_mm, 'f') +
      msgbuffers.size(self._visualAngleAwayFromTarget_rad, 'f') +
      msgbuffers.size(self._headAngle_rad, 'f'))

  def __str__(self):
    return '{type}(rangeData={rangeData}, visualDistanceToTarget_mm={visualDistanceToTarget_mm}, visualAngleAwayFromTarget_rad={visualAngleAwayFromTarget_rad}, headAngle_rad={headAngle_rad})'.format(
      type=type(self).__name__,
      rangeData=self._rangeData,
      visualDistanceToTarget_mm=self._visualDistanceToTarget_mm,
      visualAngleAwayFromTarget_rad=self._visualAngleAwayFromTarget_rad,
      headAngle_rad=self._headAngle_rad)

  def __repr__(self):
    return '{type}(rangeData={rangeData}, visualDistanceToTarget_mm={visualDistanceToTarget_mm}, visualAngleAwayFromTarget_rad={visualAngleAwayFromTarget_rad}, headAngle_rad={headAngle_rad})'.format(
      type=type(self).__name__,
      rangeData=repr(self._rangeData),
      visualDistanceToTarget_mm=repr(self._visualDistanceToTarget_mm),
      visualAngleAwayFromTarget_rad=repr(self._visualAngleAwayFromTarget_rad),
      headAngle_rad=repr(self._headAngle_rad))

Anki.Vector.RangeSensorData = RangeSensorData
del RangeSensorData


class TouchSensorValues(object):
  "Generated message-passing structure."

  __slots__ = (
    '_data', # uint_16[uint_16]
  )

  @property
  def data(self):
    "uint_16[uint_16] data struct property."
    return self._data

  @data.setter
  def data(self, value):
    self._data = msgbuffers.validate_varray(
      'TouchSensorValues.data', value, 65535,
      lambda name, value_inner: msgbuffers.validate_integer(
        name, value_inner, 0, 65535))

  def __init__(self, data=()):
    self.data = data

  @classmethod
  def unpack(cls, buffer):
    "Reads a new TouchSensorValues from the given buffer."
    reader = msgbuffers.BinaryReader(buffer)
    value = cls.unpack_from(reader)
    if reader.tell() != len(reader):
      raise msgbuffers.ReadError(
        ('TouchSensorValues.unpack received a buffer of length {length}, ' +
        'but only {position} bytes were read.').format(
        length=len(reader), position=reader.tell()))
    return value

  @classmethod
  def unpack_from(cls, reader):
    "Reads a new TouchSensorValues from the given BinaryReader."
    _data = reader.read_varray('H', 'H')
    return cls(_data)

  def pack(self):
    "Writes the current TouchSensorValues, returning bytes."
    writer = msgbuffers.BinaryWriter()
    self.pack_to(writer)
    return writer.dumps()

  def pack_to(self, writer):
    "Writes the current TouchSensorValues to the given BinaryWriter."
    writer.write_varray(self._data, 'H', 'H')

  def __eq__(self, other):
    if type(self) is type(other):
      return self._data == other._data
    else:
      return NotImplemented

  def __ne__(self, other):
    if type(self) is type(other):
      return not self.__eq__(other)
    else:
      return NotImplemented

  def __len__(self):
    return (msgbuffers.size_varray(self._data, 'H', 'H'))

  def __str__(self):
    return '{type}(data={data})'.format(
      type=type(self).__name__,
      data=msgbuffers.shorten_sequence(self._data))

  def __repr__(self):
    return '{type}(data={data})'.format(
      type=type(self).__name__,
      data=repr(self._data))

Anki.Vector.TouchSensorValues = TouchSensorValues
del TouchSensorValues


class TouchSensorFilt(object):
  "Generated message-passing structure."

  __slots__ = (
    '_min',    # float_32
    '_max',    # float_32
    '_stddev', # float_32
  )

  @property
  def min(self):
    "float_32 min struct property."
    return self._min

  @min.setter
  def min(self, value):
    self._min = msgbuffers.validate_float(
      'TouchSensorFilt.min', value, 'f')

  @property
  def max(self):
    "float_32 max struct property."
    return self._max

  @max.setter
  def max(self, value):
    self._max = msgbuffers.validate_float(
      'TouchSensorFilt.max', value, 'f')

  @property
  def stddev(self):
    "float_32 stddev struct property."
    return self._stddev

  @stddev.setter
  def stddev(self, value):
    self._stddev = msgbuffers.validate_float(
      'TouchSensorFilt.stddev', value, 'f')

  def __init__(self, min=0.0, max=0.0, stddev=0.0):
    self.min = min
    self.max = max
    self.stddev = stddev

  @classmethod
  def unpack(cls, buffer):
    "Reads a new TouchSensorFilt from the given buffer."
    reader = msgbuffers.BinaryReader(buffer)
    value = cls.unpack_from(reader)
    if reader.tell() != len(reader):
      raise msgbuffers.ReadError(
        ('TouchSensorFilt.unpack received a buffer of length {length}, ' +
        'but only {position} bytes were read.').format(
        length=len(reader), position=reader.tell()))
    return value

  @classmethod
  def unpack_from(cls, reader):
    "Reads a new TouchSensorFilt from the given BinaryReader."
    _min = reader.read('f')
    _max = reader.read('f')
    _stddev = reader.read('f')
    return cls(_min, _max, _stddev)

  def pack(self):
    "Writes the current TouchSensorFilt, returning bytes."
    writer = msgbuffers.BinaryWriter()
    self.pack_to(writer)
    return writer.dumps()

  def pack_to(self, writer):
    "Writes the current TouchSensorFilt to the given BinaryWriter."
    writer.write(self._min, 'f')
    writer.write(self._max, 'f')
    writer.write(self._stddev, 'f')

  def __eq__(self, other):
    if type(self) is type(other):
      return (self._min == other._min and
        self._max == other._max and
        self._stddev == other._stddev)
    else:
      return NotImplemented

  def __ne__(self, other):
    if type(self) is type(other):
      return not self.__eq__(other)
    else:
      return NotImplemented

  def __len__(self):
    return (msgbuffers.size(self._min, 'f') +
      msgbuffers.size(self._max, 'f') +
      msgbuffers.size(self._stddev, 'f'))

  def __str__(self):
    return '{type}(min={min}, max={max}, stddev={stddev})'.format(
      type=type(self).__name__,
      min=self._min,
      max=self._max,
      stddev=self._stddev)

  def __repr__(self):
    return '{type}(min={min}, max={max}, stddev={stddev})'.format(
      type=type(self).__name__,
      min=repr(self._min),
      max=repr(self._max),
      stddev=repr(self._stddev))

Anki.Vector.TouchSensorFilt = TouchSensorFilt
del TouchSensorFilt


class PlaypenTestMask(object):
  "Automatically-generated uint_32 enumeration."
  BackpackElectricalError      = 0x1
  UnexpectedTouchDetectedError = 0x2
  NoisyTouchSensorError        = 0x4
  CubeRadioError               = 0x8
  WifiScanError                = 0x10

Anki.Vector.PlaypenTestMask = PlaypenTestMask

