OpenSolo/artoo/tools/artoo.py

94 lines
2.6 KiB
Python
Executable File

#!/usr/bin/env python
# common defs for artoo
BAUD = 115200
# host protocol msg id's
MSGID_NOP = chr(0x0)
MSGID_DSM_CHANNELS = chr(0x1)
MSGID_CALIBRATE = chr(0x2)
MSGID_SYS_INFO = chr(0x3)
MSGID_MAVLINK = chr(0x4)
MSGID_SET_RAW_IO = chr(0x5)
MSGID_RAW_IO_REPORT = chr(0x6)
MSGID_PAIR_REQUEST = chr(0x7)
MSGID_PAIR_CONFIRM = chr(0x8)
MSGID_PAIR_RESULT = chr(0x9)
MSGID_SHUTDOWN_REQUEST = chr(0xa)
MSGID_PARAM_STORED_VALS = chr(0xb)
MSGID_OUTPUT_TEST = chr(0xc)
MSGID_BUTTON_EVENT = chr(0xd)
MSGID_INPUT_REPORT = chr(0xe)
MSGID_CONFIG_STICK_AXES = chr(0xf)
MSGID_BUTTON_FUNCTION_CFG = chr(0x10)
MSGID_SET_SHOT_INFO = chr(0x11)
MSGID_UPDATER = chr(0x12)
MSGID_LOCKOUT_STATE = chr(0x13)
MSGID_SELF_TEST = chr(0x14)
MSGID_SWEEP_TIME_CFG = chr(0x15)
MSGID_GPIO_TEST = chr(0x16)
MSGID_TEST_EVENT = chr(0x17)
MSGID_SET_TELEM_UNITS = chr(0x18)
MSGID_INVALID_STICK_INPUTS = chr(0x19)
MSGID_SOLO_APP_CONNECTION = chr(0x1a)
# button IDs
BtnPower = 0
BtnFly = 1
BtnRTL = 2
BtnLoiter = 3
BtnA = 4
BtnB = 5
BtnPreset1 = 6
BtnPreset2 = 7
BtnCameraClick = 8
# button names
BtnName = ["Power", "Fly", "RTL", "Loiter", "A", "B",
"Preset1", "Preset2", "CameraClick"]
# button events
BtnEvtPress = 0
BtnEvtRelease = 1
BtnEvtClickRelease = 2
BtnEvtHold = 3
BtnEvtLongHold = 4
BtnEvtDoubleClick = 5
# GPIO test
GPIO_TEST_LED_BACKLIGHT = 0
GPIO_TEST_CHG_ENABLE = 1
# units
UNITS_USE_METRIC = 1
UNITS_USE_IMPERIAL = 0
class Artoo:
def __init__(self, slip_dev):
self.slip_dev = slip_dev
def read(self):
return self.slip_dev.read()
def set_lockout_state(self, locked):
lck = chr(1) if locked else chr(0)
self.slip_dev.write([MSGID_LOCKOUT_STATE, lck])
def request_sys_info(self):
self.slip_dev.write([MSGID_SYS_INFO])
def begin_self_test(self):
self.slip_dev.write([MSGID_SELF_TEST, 0x74, 0x73, 0x65, 0x74, 0x66, 0x6c, 0x65, 0x73])
def gpio_test(self, pin, state):
self.slip_dev.write([MSGID_GPIO_TEST, pin, state])
def set_telem_units(self, units):
self.slip_dev.write([MSGID_SET_TELEM_UNITS, units])
def output_test(self, bg_btnmask, fg_btnmask, freq, haptic_secs):
self.slip_dev.write([MSGID_OUTPUT_TEST, bg_btnmask, fg_btnmask, freq & 0xff, (freq >> 8) & 0xff, haptic_secs])