dotbot.protocol module#

Module for the Dotbot protocol API.

exception dotbot.protocol.ProtocolPayloadParserException[source]#

Bases: Exception

Exception raised on invalid or unsupported payload.

class dotbot.protocol.ApplicationType(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]#

Bases: IntEnum

Types of DotBot applications.

DotBot = 0#
Freebot = 2#
LH2_mini_mote = 4#
SailBot = 1#
XGO = 3#
class dotbot.protocol.ControlModeType(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]#

Bases: IntEnum

Types of DotBot control modes.

AUTO = 1#
MANUAL = 0#
class dotbot.protocol.Frame(header=None, payload=None)[source]#

Bases: object

Data class that holds a payload packet.

Parameters:
from_bytes(bytes_)[source]#
to_bytes(byteorder='little')[source]#
Return type:

bytes

header: Header = None#
payload: Packet = None#
property payload_type: int#
class dotbot.protocol.Header(metadata=<factory>, version=1, type_=PacketType.DATA, destination=18446744073709551615, source=0)[source]#

Bases: Packet

Dataclass that holds MAC header fields.

Parameters:
  • metadata (list[PacketFieldMetadata])

  • version (int)

  • type_ (int)

  • destination (int)

  • source (int)

destination: int = 18446744073709551615#
metadata: list[PacketFieldMetadata]#
source: int = 0#
type_: int = 16#
version: int = 1#
class dotbot.protocol.Packet[source]#

Bases: ABC

Base class for packet classes.

from_bytes(bytes_)[source]#
to_bytes(byteorder='little')[source]#
Return type:

bytes

property size: int#
class dotbot.protocol.PacketFieldMetadata(name='', disp='', length=1, signed=False, type_=<class 'int'>)[source]#

Bases: object

Data class that describes a packet field metadata.

Parameters:
  • name (str)

  • disp (str)

  • length (int)

  • signed (bool)

  • type_ (Any)

type_#

alias of int

disp: str = ''#
length: int = 1#
name: str = ''#
signed: bool = False#
class dotbot.protocol.PacketType(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]#

Bases: IntEnum

Types of MAC layer packet.

BEACON = 1#
DATA = 16#
JOIN_REQUEST = 2#
JOIN_RESPONSE = 4#
KEEP_ALIVE = 8#
class dotbot.protocol.PayloadAdvertisement(metadata=<factory>, application=ApplicationType.DotBot)[source]#

Bases: Packet

Dataclass that holds an advertisement (emtpy).

Parameters:
application: ApplicationType = 0#
metadata: list[PacketFieldMetadata]#
class dotbot.protocol.PayloadCommandMoveRaw(metadata=<factory>, left_x=0, left_y=0, right_x=0, right_y=0)[source]#

Bases: Packet

Dataclass that holds move raw command data fields.

Parameters:
left_x: int = 0#
left_y: int = 0#
metadata: list[PacketFieldMetadata]#
right_x: int = 0#
right_y: int = 0#
class dotbot.protocol.PayloadCommandRgbLed(metadata=<factory>, red=0, green=0, blue=0)[source]#

Bases: Packet

Dataclass that holds a complete rgb led command fields.

Parameters:
blue: int = 0#
green: int = 0#
metadata: list[PacketFieldMetadata]#
red: int = 0#
class dotbot.protocol.PayloadCommandXgoAction(metadata=<factory>, action=0)[source]#

Bases: Packet

Dataclass that holds an XGO action.

Parameters:
action: int = 0#
metadata: list[PacketFieldMetadata]#
class dotbot.protocol.PayloadControlMode(metadata=<factory>, mode=ControlModeType.MANUAL)[source]#

Bases: Packet

Dataclass that holds a control mode message.

Parameters:
metadata: list[PacketFieldMetadata]#
mode: ControlModeType = 0#
class dotbot.protocol.PayloadDotBotData(metadata=<factory>, direction=65535, count=0, locations=<factory>)[source]#

Bases: Packet

Dataclass that holds direction and LH2 raw data from DotBot application.

Parameters:
count: int = 0#
direction: int = 65535#
locations: List[PayloadLh2RawLocation]#
metadata: list[PacketFieldMetadata]#
class dotbot.protocol.PayloadDotBotSimulatorData(metadata=<factory>, theta=65535, pos_x=0, pos_y=0)[source]#

Bases: Packet

Dataclass that holds direction and GPS data and heading from SailBot application.

Parameters:
metadata: list[PacketFieldMetadata]#
pos_x: int = 0#
pos_y: int = 0#
theta: int = 65535#
class dotbot.protocol.PayloadGPSPosition(metadata=<factory>, latitude=0, longitude=0)[source]#

Bases: Packet

Dataclass that holds GPS positions.

Parameters:
latitude: int = 0#
longitude: int = 0#
metadata: list[PacketFieldMetadata]#
class dotbot.protocol.PayloadGPSWaypoints(metadata=<factory>, threshold=0, count=0, waypoints=<factory>)[source]#

Bases: Packet

Dataclass that holds a list of GPS waypoints.

Parameters:
count: int = 0#
metadata: list[PacketFieldMetadata]#
threshold: int = 0#
waypoints: list[PayloadGPSPosition]#
class dotbot.protocol.PayloadLH2Location(metadata=<factory>, pos_x=0, pos_y=0, pos_z=0)[source]#

Bases: Packet

Dataclass that holds LH2 computed location data.

Parameters:
metadata: list[PacketFieldMetadata]#
pos_x: int = 0#
pos_y: int = 0#
pos_z: int = 0#
class dotbot.protocol.PayloadLH2Waypoints(metadata=<factory>, threshold=0, count=0, waypoints=<factory>)[source]#

Bases: Packet

Dataclass that holds a list of LH2 waypoints.

Parameters:
count: int = 0#
metadata: list[PacketFieldMetadata]#
threshold: int = 0#
waypoints: list[PayloadLH2Location]#
class dotbot.protocol.PayloadLh2ProcessedLocation(metadata=<factory>, polynomial_index=0, lfsr_index=0, timestamp_us=0)[source]#

Bases: Packet

Dataclass that holds LH2 processed location data.

Parameters:
  • metadata (list[PacketFieldMetadata])

  • polynomial_index (int)

  • lfsr_index (int)

  • timestamp_us (int)

lfsr_index: int = 0#
metadata: list[PacketFieldMetadata]#
polynomial_index: int = 0#
timestamp_us: int = 0#
class dotbot.protocol.PayloadLh2RawData(metadata=<factory>, count=0, locations=<factory>)[source]#

Bases: Packet

Dataclass that holds LH2 raw data.

Parameters:
count: int = 0#
locations: list[PayloadLh2RawLocation]#
metadata: list[PacketFieldMetadata]#
class dotbot.protocol.PayloadLh2RawLocation(metadata=<factory>, bits=0, polynomial_index=0, offset=0)[source]#

Bases: Packet

Dataclass that holds LH2 raw location data.

Parameters:
bits: int = 0#
metadata: list[PacketFieldMetadata]#
offset: int = 0#
polynomial_index: int = 0#
class dotbot.protocol.PayloadRawData(metadata=<factory>, count=0, data=<factory>)[source]#

Bases: Packet

Dataclass that holds raw bytes data.

Parameters:
count: int = 0#
data: bytes#
metadata: list[PacketFieldMetadata]#
class dotbot.protocol.PayloadSailBotData(metadata=<factory>, direction=65535, latitude=0, longitude=0, wind_angle=65535, rudder_angle=0, sail_angle=0)[source]#

Bases: Packet

Dataclass that holds SailBot data from SailBot application.

Parameters:
  • metadata (list[PacketFieldMetadata])

  • direction (int)

  • latitude (int)

  • longitude (int)

  • wind_angle (int)

  • rudder_angle (int)

  • sail_angle (int)

direction: int = 65535#
latitude: int = 0#
longitude: int = 0#
metadata: list[PacketFieldMetadata]#
rudder_angle: int = 0#
sail_angle: int = 0#
wind_angle: int = 65535#
class dotbot.protocol.PayloadType(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]#

Bases: IntEnum

Types of DotBot payload types.

ADVERTISEMENT = 4#
CMD_MOVE_RAW = 0#
CMD_RGB_LED = 1#
CMD_XGO_ACTION = 11#
CONTROL_MODE = 7#
DOTBOT_DATA = 6#
DOTBOT_SIMULATOR_DATA = 250#
GPS_POSITION = 5#
GPS_WAYPOINTS = 9#
LH2_LOCATION = 3#
LH2_PROCESSED_DATA = 12#
LH2_RAW_DATA = 13#
LH2_RAW_LOCATION = 2#
LH2_WAYPOINTS = 8#
RAW_DATA = 16#
SAILBOT_DATA = 10#
dotbot.protocol.register_parser(payload_type, parser)[source]#

Register a new payload parser.

Parameters:
  • payload_type (int)

  • parser (Packet)