Source code for spherov2.toy.sphero

from collections import OrderedDict
from functools import partialmethod, lru_cache

from spherov2.commands.async_ import Async
from spherov2.commands.bootloader import Bootloader
from spherov2.commands.core import Core
from spherov2.commands.sphero import Sphero as SpheroCmd
from spherov2.controls.v1 import DriveControl, SensorControl, StatsControl, FirmwareUpdateControl
from spherov2.toy import ToySensor, Toy
from spherov2.types import ToyType


[docs]class Sphero(Toy): toy_type = ToyType('SPRK/2.0', None, 'Sphero', .06) sensors = OrderedDict( attitude=OrderedDict( pitch=ToySensor(0x40000, -179., 180.), roll=ToySensor(0x20000, -179., 180.), yaw=ToySensor(0x10000, -179., 180.) ), accelerometer=OrderedDict( x=ToySensor(0x8000, -32768., 32767., lambda x: x / 4096), y=ToySensor(0x4000, -32768., 32767., lambda x: x / 4096), z=ToySensor(0x2000, -32768., 32767., lambda x: x / 4096) ), gyroscope=OrderedDict( x=ToySensor(0x1000, -20000., 20000., lambda x: x * .1), y=ToySensor(0x800, -20000., 20000., lambda x: x * .1), z=ToySensor(0x400, -20000., 20000., lambda x: x * .1) ), back_emf=OrderedDict( left=ToySensor(0x40, -32768., 32767.), right=ToySensor(0x20, -32768., 32767.), ) ) extended_sensors = OrderedDict( quaternion=OrderedDict( x=ToySensor(0x80000000, -10000., 10000., lambda x: x / 10000), y=ToySensor(0x40000000, -10000., 10000., lambda x: x / 10000), z=ToySensor(0x20000000, -10000., 10000., lambda x: x / 10000), w=ToySensor(0x10000000, -10000., 10000., lambda x: x / 10000) ), locator=OrderedDict( x=ToySensor(0x8000000, -32768., 32767.), y=ToySensor(0x4000000, -32768., 32767.), ), accel_one=OrderedDict(accel_one=ToySensor(0x2000000, 0., 8000.)), velocity=OrderedDict( x=ToySensor(0x1000000, -32768., 32767., lambda x: x * .1), y=ToySensor(0x800000, -32768., 32767., lambda x: x * .1), ), speed=OrderedDict(speed=ToySensor(0x400000, 0., 32767.)), )
[docs] def wake(self): self._Toy__adapter.write('22bb746f-2bbf-7554-2d6f-726568705327', bytearray([1]))
# Async add_battery_state_changed_notify_listener = partialmethod(Toy._add_listener, Async.battery_state_changed_notify) remove_battery_state_changed_notify_listener = partialmethod(Toy._remove_listener, Async.battery_state_changed_notify) add_collision_detected_notify_listener = partialmethod(Toy._add_listener, Async.collision_detected_notify) remove_collision_detected_notify_listener = partialmethod(Toy._remove_listener, Async.collision_detected_notify) add_did_sleep_notify_listener = partialmethod(Toy._add_listener, Async.did_sleep_notify) remove_did_sleep_notify_listener = partialmethod(Toy._remove_listener, Async.did_sleep_notify) add_gyro_max_notify_listener = partialmethod(Toy._add_listener, Async.gyro_max_notify) remove_gyro_max_notify_listener = partialmethod(Toy._remove_listener, Async.gyro_max_notify) add_sensor_streaming_data_notify_listener = partialmethod(Toy._add_listener, Async.sensor_streaming_data_notify) remove_sensor_streaming_data_notify_listener = partialmethod(Toy._remove_listener, Async.sensor_streaming_data_notify) add_will_sleep_notify_listener = partialmethod(Toy._add_listener, Async.will_sleep_notify) remove_will_sleep_notify_listener = partialmethod(Toy._remove_listener, Async.will_sleep_notify) # Bootloader begin_reflash = Bootloader.begin_reflash here_is_page = Bootloader.here_is_page jump_to_main = Bootloader.jump_to_main # Core enable_battery_state_changed_notify = Core.enable_battery_state_changed_notify get_bluetooth_info = Core.get_bluetooth_info get_charger_state = Core.get_charger_state get_power_state = Core.get_power_state get_versions = Core.get_versions jump_to_bootloader = Core.jump_to_bootloader ping = Core.ping set_bluetooth_name = Core.set_bluetooth_name set_inactivity_timeout = Core.set_inactivity_timeout sleep = Core.sleep # Sphero boost = SpheroCmd.boost configure_collision_detection = SpheroCmd.configure_collision_detection configure_locator = SpheroCmd.configure_locator get_chassis_id = SpheroCmd.get_chassis_id get_persistent_options = SpheroCmd.get_persistent_options get_temperature = SpheroCmd.get_temperature set_temporary_options = SpheroCmd.set_temporary_options roll = SpheroCmd.roll self_level = SpheroCmd.self_level set_back_led_brightness = SpheroCmd.set_back_led_brightness set_data_streaming = SpheroCmd.set_data_streaming set_heading = SpheroCmd.set_heading set_main_led = SpheroCmd.set_main_led set_motion_timeout = SpheroCmd.set_motion_timeout set_persistent_options = SpheroCmd.set_persistent_options set_raw_motors = SpheroCmd.set_raw_motors set_rotation_rate = SpheroCmd.set_rotation_rate set_stabilization = SpheroCmd.set_stabilization # Controls - V1 @property @lru_cache(None) def drive_control(self): return DriveControl(self) # The way utils.py is implemented this doesn't need to be present # @property # @lru_cache(None) # def multi_led_control(self): # return LedControl(self) @property @lru_cache(None) def sensor_control(self): return SensorControl(self) @property @lru_cache(None) def stats_control(self): return StatsControl(self) @property @lru_cache(None) def firmware_update_control(self): return FirmwareUpdateControl(self)