"""
Autogenerated python message buffer code.
Source: clad/types/robotStatusAndActions.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/robotStatusAndActions.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()
Anki.Vector.RobotInterface = msgbuffers.Namespace()

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

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

class RobotStatusFlag(object):
  "Automatically-generated uint_32 enumeration."
  NoneRobotStatusFlag     = 0
  IS_MOVING               = 0x1
  IS_CARRYING_BLOCK       = 0x2
  IS_PICKING_OR_PLACING   = 0x4
  IS_PICKED_UP            = 0x8
  IS_BUTTON_PRESSED       = 0x10
  IS_FALLING              = 0x20
  IS_ANIMATING            = 0x40
  IS_PATHING              = 0x80
  LIFT_IN_POS             = 0x100
  HEAD_IN_POS             = 0x200
  CALM_POWER_MODE         = 0x400
  IS_BATTERY_DISCONNECTED = 0x800
  IS_ON_CHARGER           = 0x1000
  IS_CHARGING             = 0x2000
  CLIFF_DETECTED          = 0x4000
  ARE_WHEELS_MOVING       = 0x8000
  IS_BEING_HELD           = 0x10000
  IS_MOTION_DETECTED      = 0x20000
  IS_BATTERY_OVERHEATED   = 0x40000
  ENCODERS_DISABLED       = 0x100000
  ENCODER_HEAD_INVALID    = 0x200000
  ENCODER_LIFT_INVALID    = 0x400000
  IS_BATTERY_LOW          = 0x1000000
  IS_SHUTDOWN_IMMINENT    = 0x2000000

Anki.Vector.RobotStatusFlag = RobotStatusFlag
del RobotStatusFlag


class DockAction(object):
  "Automatically-generated uint_8 enumeration."
  DA_PICKUP_LOW                    = 0
  DA_PICKUP_HIGH                   = 1
  DA_PLACE_HIGH                    = 2
  DA_PLACE_LOW                     = 3
  DA_PLACE_LOW_BLIND               = 4
  DA_ROLL_LOW                      = 5
  DA_DEEP_ROLL_LOW                 = 6
  DA_POST_DOCK_ROLL                = 7
  DA_FACE_PLANT                    = 8
  DA_POP_A_WHEELIE                 = 9
  DA_ALIGN                         = 10
  DA_ALIGN_SPECIAL                 = 11
  DA_BACKUP_ONTO_CHARGER           = 12
  DA_BACKUP_ONTO_CHARGER_USE_CLIFF = 13
  DA_CLIFF_ALIGN_TO_WHITE          = 14

Anki.Vector.DockAction = DockAction
del DockAction


def ExpectDockObjectToMove(dockAction, defaultValue):
  return {
    DockAction.DA_PICKUP_LOW: 1,
    DockAction.DA_PICKUP_HIGH: 1,
    DockAction.DA_PLACE_HIGH: 1,
    DockAction.DA_PLACE_LOW: 1,
    DockAction.DA_PLACE_LOW_BLIND: 1,
    DockAction.DA_ROLL_LOW: 1,
    DockAction.DA_DEEP_ROLL_LOW: 1,
    DockAction.DA_POST_DOCK_ROLL: 1,
    DockAction.DA_FACE_PLANT: 1,
    DockAction.DA_POP_A_WHEELIE: 1,
    DockAction.DA_ALIGN: 0,
    DockAction.DA_ALIGN_SPECIAL: 1,
    DockAction.DA_BACKUP_ONTO_CHARGER: 0,
    DockAction.DA_BACKUP_ONTO_CHARGER_USE_CLIFF: 0,
    DockAction.DA_CLIFF_ALIGN_TO_WHITE: 0,
    }.get(dockAction, defaultValue)
Anki.Vector.ExpectDockObjectToMove = ExpectDockObjectToMove
del ExpectDockObjectToMove


class CarryState(object):
  "Automatically-generated uint_8 enumeration."
  CARRY_NONE       = 0
  CARRY_1_BLOCK    = 1
  CARRY_2_BLOCK    = 2
  NUM_CARRY_STATES = 3

Anki.Vector.CarryState = CarryState
del CarryState


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

  __slots__ = (
    '_state', # Anki.Vector.CarryState
  )

  @property
  def state(self):
    "Anki.Vector.CarryState state struct property."
    return self._state

  @state.setter
  def state(self, value):
    self._state = msgbuffers.validate_integer(
      'CarryStateUpdate.state', value, 0, 255)

  def __init__(self, state=Anki.Vector.CarryState.CARRY_NONE):
    self.state = state

  @classmethod
  def unpack(cls, buffer):
    "Reads a new CarryStateUpdate from the given buffer."
    reader = msgbuffers.BinaryReader(buffer)
    value = cls.unpack_from(reader)
    if reader.tell() != len(reader):
      raise msgbuffers.ReadError(
        ('CarryStateUpdate.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 CarryStateUpdate from the given BinaryReader."
    _state = reader.read('B')
    return cls(_state)

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

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

  def __eq__(self, other):
    if type(self) is type(other):
      return self._state == other._state
    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._state, 'B'))

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

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

Anki.Vector.CarryStateUpdate = CarryStateUpdate
del CarryStateUpdate


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

  __slots__ = (
    '_x',           # float_32
    '_y',           # float_32
    '_z',           # float_32
    '_angle',       # float_32
    '_pitch_angle', # float_32
    '_roll_angle',  # float_32
  )

  @property
  def x(self):
    "float_32 x struct property."
    return self._x

  @x.setter
  def x(self, value):
    self._x = msgbuffers.validate_float(
      'RobotPose.x', value, 'f')

  @property
  def y(self):
    "float_32 y struct property."
    return self._y

  @y.setter
  def y(self, value):
    self._y = msgbuffers.validate_float(
      'RobotPose.y', value, 'f')

  @property
  def z(self):
    "float_32 z struct property."
    return self._z

  @z.setter
  def z(self, value):
    self._z = msgbuffers.validate_float(
      'RobotPose.z', value, 'f')

  @property
  def angle(self):
    "float_32 angle struct property."
    return self._angle

  @angle.setter
  def angle(self, value):
    self._angle = msgbuffers.validate_float(
      'RobotPose.angle', value, 'f')

  @property
  def pitch_angle(self):
    "float_32 pitch_angle struct property."
    return self._pitch_angle

  @pitch_angle.setter
  def pitch_angle(self, value):
    self._pitch_angle = msgbuffers.validate_float(
      'RobotPose.pitch_angle', value, 'f')

  @property
  def roll_angle(self):
    "float_32 roll_angle struct property."
    return self._roll_angle

  @roll_angle.setter
  def roll_angle(self, value):
    self._roll_angle = msgbuffers.validate_float(
      'RobotPose.roll_angle', value, 'f')

  def __init__(self, x=0.0, y=0.0, z=0.0, angle=0.0, pitch_angle=0.0, roll_angle=0.0):
    self.x = x
    self.y = y
    self.z = z
    self.angle = angle
    self.pitch_angle = pitch_angle
    self.roll_angle = roll_angle

  @classmethod
  def unpack(cls, buffer):
    "Reads a new RobotPose from the given buffer."
    reader = msgbuffers.BinaryReader(buffer)
    value = cls.unpack_from(reader)
    if reader.tell() != len(reader):
      raise msgbuffers.ReadError(
        ('RobotPose.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 RobotPose from the given BinaryReader."
    _x = reader.read('f')
    _y = reader.read('f')
    _z = reader.read('f')
    _angle = reader.read('f')
    _pitch_angle = reader.read('f')
    _roll_angle = reader.read('f')
    return cls(_x, _y, _z, _angle, _pitch_angle, _roll_angle)

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

  def pack_to(self, writer):
    "Writes the current RobotPose to the given BinaryWriter."
    writer.write(self._x, 'f')
    writer.write(self._y, 'f')
    writer.write(self._z, 'f')
    writer.write(self._angle, 'f')
    writer.write(self._pitch_angle, 'f')
    writer.write(self._roll_angle, 'f')

  def __eq__(self, other):
    if type(self) is type(other):
      return (self._x == other._x and
        self._y == other._y and
        self._z == other._z and
        self._angle == other._angle and
        self._pitch_angle == other._pitch_angle and
        self._roll_angle == other._roll_angle)
    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._x, 'f') +
      msgbuffers.size(self._y, 'f') +
      msgbuffers.size(self._z, 'f') +
      msgbuffers.size(self._angle, 'f') +
      msgbuffers.size(self._pitch_angle, 'f') +
      msgbuffers.size(self._roll_angle, 'f'))

  def __str__(self):
    return '{type}(x={x}, y={y}, z={z}, angle={angle}, pitch_angle={pitch_angle}, roll_angle={roll_angle})'.format(
      type=type(self).__name__,
      x=self._x,
      y=self._y,
      z=self._z,
      angle=self._angle,
      pitch_angle=self._pitch_angle,
      roll_angle=self._roll_angle)

  def __repr__(self):
    return '{type}(x={x}, y={y}, z={z}, angle={angle}, pitch_angle={pitch_angle}, roll_angle={roll_angle})'.format(
      type=type(self).__name__,
      x=repr(self._x),
      y=repr(self._y),
      z=repr(self._z),
      angle=repr(self._angle),
      pitch_angle=repr(self._pitch_angle),
      roll_angle=repr(self._roll_angle))

Anki.Vector.RobotPose = RobotPose
del RobotPose


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

  __slots__ = (
    '_timestamp',              # uint_32
    '_pose_frame_id',          # uint_32
    '_pose_origin_id',         # uint_32
    '_pose',                   # Anki.Vector.RobotPose
    '_lwheel_speed_mmps',      # float_32
    '_rwheel_speed_mmps',      # float_32
    '_headAngle',              # float_32
    '_liftAngle',              # float_32
    '_accel',                  # Anki.Vector.AccelData
    '_gyro',                   # Anki.Vector.GyroData
    '_imuData',                # IMUDataFrame[6]
    '_batteryVoltage',         # float_32
    '_chargerVoltage',         # float_32
    '_status',                 # uint_32
    '_cliffDataRaw',           # uint_16[4]
    '_proxData',               # Anki.Vector.ProxSensorDataRaw
    '_backpackTouchSensorRaw', # uint_16
    '_cliffDetectedFlags',     # uint_8
    '_whiteDetectedFlags',     # uint_8
    '_battTemp_C',             # uint_8
    '_currPathSegment',        # int_8
  )

  @property
  def timestamp(self):
    "uint_32 timestamp struct property."
    return self._timestamp

  @timestamp.setter
  def timestamp(self, value):
    self._timestamp = msgbuffers.validate_integer(
      'RobotState.timestamp', value, 0, 4294967295)

  @property
  def pose_frame_id(self):
    "uint_32 pose_frame_id struct property."
    return self._pose_frame_id

  @pose_frame_id.setter
  def pose_frame_id(self, value):
    self._pose_frame_id = msgbuffers.validate_integer(
      'RobotState.pose_frame_id', value, 0, 4294967295)

  @property
  def pose_origin_id(self):
    "uint_32 pose_origin_id struct property."
    return self._pose_origin_id

  @pose_origin_id.setter
  def pose_origin_id(self, value):
    self._pose_origin_id = msgbuffers.validate_integer(
      'RobotState.pose_origin_id', value, 0, 4294967295)

  @property
  def pose(self):
    "Anki.Vector.RobotPose pose struct property."
    return self._pose

  @pose.setter
  def pose(self, value):
    self._pose = msgbuffers.validate_object(
      'RobotState.pose', value, Anki.Vector.RobotPose)

  @property
  def lwheel_speed_mmps(self):
    "float_32 lwheel_speed_mmps struct property."
    return self._lwheel_speed_mmps

  @lwheel_speed_mmps.setter
  def lwheel_speed_mmps(self, value):
    self._lwheel_speed_mmps = msgbuffers.validate_float(
      'RobotState.lwheel_speed_mmps', value, 'f')

  @property
  def rwheel_speed_mmps(self):
    "float_32 rwheel_speed_mmps struct property."
    return self._rwheel_speed_mmps

  @rwheel_speed_mmps.setter
  def rwheel_speed_mmps(self, value):
    self._rwheel_speed_mmps = msgbuffers.validate_float(
      'RobotState.rwheel_speed_mmps', value, 'f')

  @property
  def headAngle(self):
    "float_32 headAngle struct property."
    return self._headAngle

  @headAngle.setter
  def headAngle(self, value):
    self._headAngle = msgbuffers.validate_float(
      'RobotState.headAngle', value, 'f')

  @property
  def liftAngle(self):
    "float_32 liftAngle struct property."
    return self._liftAngle

  @liftAngle.setter
  def liftAngle(self, value):
    self._liftAngle = msgbuffers.validate_float(
      'RobotState.liftAngle', value, 'f')

  @property
  def accel(self):
    "Anki.Vector.AccelData accel struct property."
    return self._accel

  @accel.setter
  def accel(self, value):
    self._accel = msgbuffers.validate_object(
      'RobotState.accel', value, Anki.Vector.AccelData)

  @property
  def gyro(self):
    "Anki.Vector.GyroData gyro struct property."
    return self._gyro

  @gyro.setter
  def gyro(self, value):
    self._gyro = msgbuffers.validate_object(
      'RobotState.gyro', value, Anki.Vector.GyroData)

  @property
  def imuData(self):
    "IMUDataFrame[6] imuData struct property."
    return self._imuData

  @imuData.setter
  def imuData(self, value):
    self._imuData = msgbuffers.validate_farray(
      'RobotState.imuData', value, 6,
      lambda name, value_inner: msgbuffers.validate_object(
        name, value_inner, Anki.Vector.IMUDataFrame))

  @property
  def batteryVoltage(self):
    "float_32 batteryVoltage struct property."
    return self._batteryVoltage

  @batteryVoltage.setter
  def batteryVoltage(self, value):
    self._batteryVoltage = msgbuffers.validate_float(
      'RobotState.batteryVoltage', value, 'f')

  @property
  def chargerVoltage(self):
    "float_32 chargerVoltage struct property."
    return self._chargerVoltage

  @chargerVoltage.setter
  def chargerVoltage(self, value):
    self._chargerVoltage = msgbuffers.validate_float(
      'RobotState.chargerVoltage', value, 'f')

  @property
  def status(self):
    "uint_32 status struct property."
    return self._status

  @status.setter
  def status(self, value):
    self._status = msgbuffers.validate_integer(
      'RobotState.status', value, 0, 4294967295)

  @property
  def cliffDataRaw(self):
    "uint_16[4] cliffDataRaw struct property."
    return self._cliffDataRaw

  @cliffDataRaw.setter
  def cliffDataRaw(self, value):
    self._cliffDataRaw = msgbuffers.validate_farray(
      'RobotState.cliffDataRaw', value, 4,
      lambda name, value_inner: msgbuffers.validate_integer(
        name, value_inner, 0, 65535))

  @property
  def proxData(self):
    "Anki.Vector.ProxSensorDataRaw proxData struct property."
    return self._proxData

  @proxData.setter
  def proxData(self, value):
    self._proxData = msgbuffers.validate_object(
      'RobotState.proxData', value, Anki.Vector.ProxSensorDataRaw)

  @property
  def backpackTouchSensorRaw(self):
    "uint_16 backpackTouchSensorRaw struct property."
    return self._backpackTouchSensorRaw

  @backpackTouchSensorRaw.setter
  def backpackTouchSensorRaw(self, value):
    self._backpackTouchSensorRaw = msgbuffers.validate_integer(
      'RobotState.backpackTouchSensorRaw', value, 0, 65535)

  @property
  def cliffDetectedFlags(self):
    "uint_8 cliffDetectedFlags struct property."
    return self._cliffDetectedFlags

  @cliffDetectedFlags.setter
  def cliffDetectedFlags(self, value):
    self._cliffDetectedFlags = msgbuffers.validate_integer(
      'RobotState.cliffDetectedFlags', value, 0, 255)

  @property
  def whiteDetectedFlags(self):
    "uint_8 whiteDetectedFlags struct property."
    return self._whiteDetectedFlags

  @whiteDetectedFlags.setter
  def whiteDetectedFlags(self, value):
    self._whiteDetectedFlags = msgbuffers.validate_integer(
      'RobotState.whiteDetectedFlags', value, 0, 255)

  @property
  def battTemp_C(self):
    "uint_8 battTemp_C struct property."
    return self._battTemp_C

  @battTemp_C.setter
  def battTemp_C(self, value):
    self._battTemp_C = msgbuffers.validate_integer(
      'RobotState.battTemp_C', value, 0, 255)

  @property
  def currPathSegment(self):
    "int_8 currPathSegment struct property."
    return self._currPathSegment

  @currPathSegment.setter
  def currPathSegment(self, value):
    self._currPathSegment = msgbuffers.validate_integer(
      'RobotState.currPathSegment', value, -128, 127)

  def __init__(self, timestamp=0, pose_frame_id=0, pose_origin_id=0, pose=Anki.Vector.RobotPose(), lwheel_speed_mmps=0.0, rwheel_speed_mmps=0.0, headAngle=0.0, liftAngle=0.0, accel=Anki.Vector.AccelData(), gyro=Anki.Vector.GyroData(), imuData=(Anki.Vector.IMUDataFrame(),) * 6, batteryVoltage=0.0, chargerVoltage=0.0, status=0, cliffDataRaw=(0,) * 4, proxData=Anki.Vector.ProxSensorDataRaw(), backpackTouchSensorRaw=0, cliffDetectedFlags=0, whiteDetectedFlags=0, battTemp_C=0, currPathSegment=0):
    self.timestamp = timestamp
    self.pose_frame_id = pose_frame_id
    self.pose_origin_id = pose_origin_id
    self.pose = pose
    self.lwheel_speed_mmps = lwheel_speed_mmps
    self.rwheel_speed_mmps = rwheel_speed_mmps
    self.headAngle = headAngle
    self.liftAngle = liftAngle
    self.accel = accel
    self.gyro = gyro
    self.imuData = imuData
    self.batteryVoltage = batteryVoltage
    self.chargerVoltage = chargerVoltage
    self.status = status
    self.cliffDataRaw = cliffDataRaw
    self.proxData = proxData
    self.backpackTouchSensorRaw = backpackTouchSensorRaw
    self.cliffDetectedFlags = cliffDetectedFlags
    self.whiteDetectedFlags = whiteDetectedFlags
    self.battTemp_C = battTemp_C
    self.currPathSegment = currPathSegment

  @classmethod
  def unpack(cls, buffer):
    "Reads a new RobotState from the given buffer."
    reader = msgbuffers.BinaryReader(buffer)
    value = cls.unpack_from(reader)
    if reader.tell() != len(reader):
      raise msgbuffers.ReadError(
        ('RobotState.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 RobotState from the given BinaryReader."
    _timestamp = reader.read('I')
    _pose_frame_id = reader.read('I')
    _pose_origin_id = reader.read('I')
    _pose = reader.read_object(Anki.Vector.RobotPose.unpack_from)
    _lwheel_speed_mmps = reader.read('f')
    _rwheel_speed_mmps = reader.read('f')
    _headAngle = reader.read('f')
    _liftAngle = reader.read('f')
    _accel = reader.read_object(Anki.Vector.AccelData.unpack_from)
    _gyro = reader.read_object(Anki.Vector.GyroData.unpack_from)
    _imuData = reader.read_object_farray(Anki.Vector.IMUDataFrame.unpack_from, 6)
    _batteryVoltage = reader.read('f')
    _chargerVoltage = reader.read('f')
    _status = reader.read('I')
    _cliffDataRaw = reader.read_farray('H', 4)
    _proxData = reader.read_object(Anki.Vector.ProxSensorDataRaw.unpack_from)
    _backpackTouchSensorRaw = reader.read('H')
    _cliffDetectedFlags = reader.read('B')
    _whiteDetectedFlags = reader.read('B')
    _battTemp_C = reader.read('B')
    _currPathSegment = reader.read('b')
    return cls(_timestamp, _pose_frame_id, _pose_origin_id, _pose, _lwheel_speed_mmps, _rwheel_speed_mmps, _headAngle, _liftAngle, _accel, _gyro, _imuData, _batteryVoltage, _chargerVoltage, _status, _cliffDataRaw, _proxData, _backpackTouchSensorRaw, _cliffDetectedFlags, _whiteDetectedFlags, _battTemp_C, _currPathSegment)

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

  def pack_to(self, writer):
    "Writes the current RobotState to the given BinaryWriter."
    writer.write(self._timestamp, 'I')
    writer.write(self._pose_frame_id, 'I')
    writer.write(self._pose_origin_id, 'I')
    writer.write_object(self._pose)
    writer.write(self._lwheel_speed_mmps, 'f')
    writer.write(self._rwheel_speed_mmps, 'f')
    writer.write(self._headAngle, 'f')
    writer.write(self._liftAngle, 'f')
    writer.write_object(self._accel)
    writer.write_object(self._gyro)
    writer.write_object_farray(self._imuData, 6)
    writer.write(self._batteryVoltage, 'f')
    writer.write(self._chargerVoltage, 'f')
    writer.write(self._status, 'I')
    writer.write_farray(self._cliffDataRaw, 'H', 4)
    writer.write_object(self._proxData)
    writer.write(self._backpackTouchSensorRaw, 'H')
    writer.write(self._cliffDetectedFlags, 'B')
    writer.write(self._whiteDetectedFlags, 'B')
    writer.write(self._battTemp_C, 'B')
    writer.write(self._currPathSegment, 'b')

  def __eq__(self, other):
    if type(self) is type(other):
      return (self._timestamp == other._timestamp and
        self._pose_frame_id == other._pose_frame_id and
        self._pose_origin_id == other._pose_origin_id and
        self._pose == other._pose and
        self._lwheel_speed_mmps == other._lwheel_speed_mmps and
        self._rwheel_speed_mmps == other._rwheel_speed_mmps and
        self._headAngle == other._headAngle and
        self._liftAngle == other._liftAngle and
        self._accel == other._accel and
        self._gyro == other._gyro and
        self._imuData == other._imuData and
        self._batteryVoltage == other._batteryVoltage and
        self._chargerVoltage == other._chargerVoltage and
        self._status == other._status and
        self._cliffDataRaw == other._cliffDataRaw and
        self._proxData == other._proxData and
        self._backpackTouchSensorRaw == other._backpackTouchSensorRaw and
        self._cliffDetectedFlags == other._cliffDetectedFlags and
        self._whiteDetectedFlags == other._whiteDetectedFlags and
        self._battTemp_C == other._battTemp_C and
        self._currPathSegment == other._currPathSegment)
    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._timestamp, 'I') +
      msgbuffers.size(self._pose_frame_id, 'I') +
      msgbuffers.size(self._pose_origin_id, 'I') +
      msgbuffers.size_object(self._pose) +
      msgbuffers.size(self._lwheel_speed_mmps, 'f') +
      msgbuffers.size(self._rwheel_speed_mmps, 'f') +
      msgbuffers.size(self._headAngle, 'f') +
      msgbuffers.size(self._liftAngle, 'f') +
      msgbuffers.size_object(self._accel) +
      msgbuffers.size_object(self._gyro) +
      msgbuffers.size_object_farray(self._imuData, 6) +
      msgbuffers.size(self._batteryVoltage, 'f') +
      msgbuffers.size(self._chargerVoltage, 'f') +
      msgbuffers.size(self._status, 'I') +
      msgbuffers.size_farray(self._cliffDataRaw, 'H', 4) +
      msgbuffers.size_object(self._proxData) +
      msgbuffers.size(self._backpackTouchSensorRaw, 'H') +
      msgbuffers.size(self._cliffDetectedFlags, 'B') +
      msgbuffers.size(self._whiteDetectedFlags, 'B') +
      msgbuffers.size(self._battTemp_C, 'B') +
      msgbuffers.size(self._currPathSegment, 'b'))

  def __str__(self):
    return '{type}(timestamp={timestamp}, pose_frame_id={pose_frame_id}, pose_origin_id={pose_origin_id}, pose={pose}, lwheel_speed_mmps={lwheel_speed_mmps}, rwheel_speed_mmps={rwheel_speed_mmps}, headAngle={headAngle}, liftAngle={liftAngle}, accel={accel}, gyro={gyro}, imuData={imuData}, batteryVoltage={batteryVoltage}, chargerVoltage={chargerVoltage}, status={status}, cliffDataRaw={cliffDataRaw}, proxData={proxData}, backpackTouchSensorRaw={backpackTouchSensorRaw}, cliffDetectedFlags={cliffDetectedFlags}, whiteDetectedFlags={whiteDetectedFlags}, battTemp_C={battTemp_C}, currPathSegment={currPathSegment})'.format(
      type=type(self).__name__,
      timestamp=self._timestamp,
      pose_frame_id=self._pose_frame_id,
      pose_origin_id=self._pose_origin_id,
      pose=self._pose,
      lwheel_speed_mmps=self._lwheel_speed_mmps,
      rwheel_speed_mmps=self._rwheel_speed_mmps,
      headAngle=self._headAngle,
      liftAngle=self._liftAngle,
      accel=self._accel,
      gyro=self._gyro,
      imuData=msgbuffers.shorten_sequence(self._imuData),
      batteryVoltage=self._batteryVoltage,
      chargerVoltage=self._chargerVoltage,
      status=self._status,
      cliffDataRaw=msgbuffers.shorten_sequence(self._cliffDataRaw),
      proxData=self._proxData,
      backpackTouchSensorRaw=self._backpackTouchSensorRaw,
      cliffDetectedFlags=self._cliffDetectedFlags,
      whiteDetectedFlags=self._whiteDetectedFlags,
      battTemp_C=self._battTemp_C,
      currPathSegment=self._currPathSegment)

  def __repr__(self):
    return '{type}(timestamp={timestamp}, pose_frame_id={pose_frame_id}, pose_origin_id={pose_origin_id}, pose={pose}, lwheel_speed_mmps={lwheel_speed_mmps}, rwheel_speed_mmps={rwheel_speed_mmps}, headAngle={headAngle}, liftAngle={liftAngle}, accel={accel}, gyro={gyro}, imuData={imuData}, batteryVoltage={batteryVoltage}, chargerVoltage={chargerVoltage}, status={status}, cliffDataRaw={cliffDataRaw}, proxData={proxData}, backpackTouchSensorRaw={backpackTouchSensorRaw}, cliffDetectedFlags={cliffDetectedFlags}, whiteDetectedFlags={whiteDetectedFlags}, battTemp_C={battTemp_C}, currPathSegment={currPathSegment})'.format(
      type=type(self).__name__,
      timestamp=repr(self._timestamp),
      pose_frame_id=repr(self._pose_frame_id),
      pose_origin_id=repr(self._pose_origin_id),
      pose=repr(self._pose),
      lwheel_speed_mmps=repr(self._lwheel_speed_mmps),
      rwheel_speed_mmps=repr(self._rwheel_speed_mmps),
      headAngle=repr(self._headAngle),
      liftAngle=repr(self._liftAngle),
      accel=repr(self._accel),
      gyro=repr(self._gyro),
      imuData=repr(self._imuData),
      batteryVoltage=repr(self._batteryVoltage),
      chargerVoltage=repr(self._chargerVoltage),
      status=repr(self._status),
      cliffDataRaw=repr(self._cliffDataRaw),
      proxData=repr(self._proxData),
      backpackTouchSensorRaw=repr(self._backpackTouchSensorRaw),
      cliffDetectedFlags=repr(self._cliffDetectedFlags),
      whiteDetectedFlags=repr(self._whiteDetectedFlags),
      battTemp_C=repr(self._battTemp_C),
      currPathSegment=repr(self._currPathSegment))

Anki.Vector.RobotState = RobotState
del RobotState


class ShutdownReason(object):
  "Automatically-generated uint_8 enumeration."
  SHUTDOWN_UNKNOWN               = 0
  SHUTDOWN_BUTTON                = 1
  SHUTDOWN_BATTERY_CRITICAL_VOLT = 2
  SHUTDOWN_BATTERY_CRITICAL_TEMP = 3
  SHUTDOWN_GYRO_NOT_CALIBRATING  = 4

Anki.Vector.ShutdownReason = ShutdownReason
del ShutdownReason


