annotate telemetrix_local.py @ 6:ca63391a2214

redo lots of serial calls
author drewp@bigasterisk.com
date Sun, 05 Feb 2023 14:28:57 -0800
parents 696a46a1b239
children 25f0c04e1654
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2 Copyright (c) 2020-2021 Alan Yorinks All rights reserved.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
4 This program is free software; you can redistribute it and/or
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
5 modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
6 Version 3 as published by the Free Software Foundation; either
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
7 or (at your option) any later version.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
8 This library is distributed in the hope that it will be useful,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
11 General Public License for more details.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
12
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
13 You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
14 along with this library; if not, write to the Free Software
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
15 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
16 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
17
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
18 import asyncio
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
19 # import socket
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
20 # import struct
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
21 import sys
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
22 import time
5
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
23 import logging
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
24 log = logging.getLogger('tele')
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
25
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
26 # noinspection PyPackageRequirementscd
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
27 from serial.serialutil import SerialException
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
28 # noinspection PyPackageRequirements
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
29 from serial.tools import list_ports
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
30
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
31 # noinspection PyUnresolvedReferences
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
32 from telemetrix_aio.private_constants import PrivateConstants
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
33 # noinspection PyUnresolvedReferences
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
34 from telemetrix_aio.telemetrix_aio_socket import TelemetrixAioSocket
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
35 # noinspection PyUnresolvedReferences
5
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
36 from telemetrix_local_serial import TelemetrixAioSerial
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
37
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
38 # for debug logging. Should move to private_constants.py
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
39 CommandName = {
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
40 0: 'LOOP_COMMAND',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
41 1: 'SET_PIN_MODE',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
42 2: 'DIGITAL_WRITE',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
43 3: 'ANALOG_WRITE',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
44 4: 'MODIFY_REPORTING',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
45 5: 'GET_FIRMWARE_VERSION',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
46 6: 'ARE_U_THERE',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
47 7: 'SERVO_ATTACH',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
48 8: 'SERVO_WRITE',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
49 9: 'SERVO_DETACH',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
50 10: 'I2C_BEGIN',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
51 11: 'I2C_READ',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
52 12: 'I2C_WRITE',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
53 13: 'SONAR_NEW',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
54 14: 'DHT_NEW',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
55 15: 'STOP_ALL_REPORTS',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
56 16: 'SET_ANALOG_SCANNING_INTERVAL',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
57 17: 'ENABLE_ALL_REPORTS',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
58 18: 'RESET',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
59 19: 'SPI_INIT',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
60 20: 'SPI_WRITE_BLOCKING',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
61 21: 'SPI_READ_BLOCKING',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
62 22: 'SPI_SET_FORMAT',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
63 23: 'SPI_CS_CONTROL',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
64 24: 'ONE_WIRE_INIT',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
65 25: 'ONE_WIRE_RESET',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
66 26: 'ONE_WIRE_SELECT',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
67 27: 'ONE_WIRE_SKIP',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
68 28: 'ONE_WIRE_WRITE',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
69 29: 'ONE_WIRE_READ',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
70 30: 'ONE_WIRE_RESET_SEARCH',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
71 31: 'ONE_WIRE_SEARCH',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
72 32: 'ONE_WIRE_CRC8',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
73 33: 'SET_PIN_MODE_STEPPER',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
74 34: 'STEPPER_MOVE_TO',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
75 35: 'STEPPER_MOVE',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
76 36: 'STEPPER_RUN',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
77 37: 'STEPPER_RUN_SPEED',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
78 38: 'STEPPER_SET_MAX_SPEED',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
79 39: 'STEPPER_SET_ACCELERATION',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
80 40: 'STEPPER_SET_SPEED',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
81 41: 'STEPPER_SET_CURRENT_POSITION',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
82 42: 'STEPPER_RUN_SPEED_TO_POSITION',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
83 43: 'STEPPER_STOP',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
84 44: 'STEPPER_DISABLE_OUTPUTS',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
85 45: 'STEPPER_ENABLE_OUTPUTS',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
86 46: 'STEPPER_SET_MINIMUM_PULSE_WIDTH',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
87 47: 'STEPPER_SET_ENABLE_PIN',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
88 48: 'STEPPER_SET_3_PINS_INVERTED',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
89 49: 'STEPPER_SET_4_PINS_INVERTED',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
90 50: 'STEPPER_IS_RUNNING',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
91 51: 'STEPPER_GET_CURRENT_POSITION',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
92 52: 'STEPPER_GET_DISTANCE_TO_GO',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
93 53: 'STEPPER_GET_TARGET_POSITION',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
94 54: 'GET_FEATURES',
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
95 }
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
96
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
97 # noinspection GrazieInspection,PyArgumentList,PyMethodMayBeStatic,PyRedundantParentheses
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
98 class TelemetrixAIO:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
99 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
100 This class exposes and implements the TelemetrixAIO API.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
101 It includes the public API methods as well as
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
102 a set of private methods. This is an asyncio API.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
103
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
104 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
105
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
106 # noinspection PyPep8,PyPep8
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
107 def __init__(self, com_port=None,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
108 arduino_instance_id=1, arduino_wait=4,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
109 sleep_tune=0.0001, autostart=True,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
110 loop=None, shutdown_on_exception=True,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
111 close_loop_on_shutdown=True,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
112 ip_address=None, ip_port=31335):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
113
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
114 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
115 If you have a single Arduino connected to your computer,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
116 then you may accept all the default values.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
117
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
118 Otherwise, specify a unique arduino_instance id for each board in use.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
119
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
120 :param com_port: e.g. COM3 or /dev/ttyACM0.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
121
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
122 :param arduino_instance_id: Must match value in the Telemetrix4Arduino sketch
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
123
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
124 :param arduino_wait: Amount of time to wait for an Arduino to
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
125 fully reset itself.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
126
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
127 :param sleep_tune: A tuning parameter (typically not changed by user)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
128
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
129 :param autostart: If you wish to call the start method within
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
130 your application, then set this to False.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
131
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
132 :param loop: optional user provided event loop
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
133
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
134 :param shutdown_on_exception: call shutdown before raising
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
135 a RunTimeError exception, or
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
136 receiving a KeyboardInterrupt exception
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
137
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
138 :param close_loop_on_shutdown: stop and close the event loop loop
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
139 when a shutdown is called or a serial
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
140 error occurs
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
141
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
142 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
143 # check to make sure that Python interpreter is version 3.8.3 or greater
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
144 python_version = sys.version_info
5
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
145 if python_version[:3] < (3, 8, 3):
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
146 raise RuntimeError("ERROR: Python 3.8.3 or greater is "
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
147 "required for use of this program.")
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
148
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
149 # save input parameters
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
150 self.com_port = com_port
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
151 self.arduino_instance_id = arduino_instance_id
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
152 self.arduino_wait = arduino_wait
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
153 self.sleep_tune = sleep_tune
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
154 self.autostart = autostart
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
155 self.ip_address = ip_address
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
156 self.ip_port = ip_port
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
157
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
158 # if tcp, this variable is set to the connected socket
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
159 self.sock = None
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
160
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
161 # set the event loop
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
162 if loop is None:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
163 self.loop = asyncio.get_event_loop()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
164 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
165 self.loop = loop
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
166
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
167 self.shutdown_on_exception = shutdown_on_exception
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
168 self.close_loop_on_shutdown = close_loop_on_shutdown
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
169
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
170 # dictionaries to store the callbacks for each pin
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
171 self.analog_callbacks = {}
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
172
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
173 self.digital_callbacks = {}
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
174
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
175 self.i2c_callback = None
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
176 self.i2c_callback2 = None
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
177
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
178 self.i2c_1_active = False
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
179 self.i2c_2_active = False
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
180
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
181 self.spi_callback = None
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
182
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
183 self.onewire_callback = None
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
184
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
185 # debug loopback callback method
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
186 self.loop_back_callback = None
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
187
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
188 # the trigger pin will be the key to retrieve
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
189 # the callback for a specific HC-SR04
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
190 self.sonar_callbacks = {}
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
191
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
192 self.sonar_count = 0
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
193
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
194 self.dht_callbacks = {}
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
195
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
196 self.dht_count = 0
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
197
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
198 # serial port in use
5
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
199 self.serial_port: Optional[TelemetrixAioSerial] = None
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
200
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
201 self.the_task = None
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
202
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
203 # flag to indicate we are in shutdown mode
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
204 self.shutdown_flag = False
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
205
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
206 # reported features
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
207 self.reported_features = 0
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
208
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
209 # To add a command to the command dispatch table, append here.
5
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
210 self.report_dispatch = {
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
211 PrivateConstants.LOOP_COMMAND: self._report_loop_data,
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
212 PrivateConstants.DEBUG_PRINT: self._report_debug_data,
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
213 PrivateConstants.DIGITAL_REPORT: self._digital_message,
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
214 PrivateConstants.ANALOG_REPORT: self._analog_message,
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
215 PrivateConstants.SERVO_UNAVAILABLE: self._servo_unavailable,
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
216 PrivateConstants.I2C_READ_REPORT: self._i2c_read_report,
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
217 PrivateConstants.I2C_TOO_FEW_BYTES_RCVD: self._i2c_too_few,
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
218 PrivateConstants.I2C_TOO_MANY_BYTES_RCVD: self._i2c_too_many,
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
219 PrivateConstants.SONAR_DISTANCE: self._sonar_distance_report,
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
220 PrivateConstants.DHT_REPORT: self._dht_report,
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
221 PrivateConstants.SPI_REPORT: self._spi_report,
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
222 PrivateConstants.ONE_WIRE_REPORT: self._onewire_report,
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
223 PrivateConstants.STEPPER_DISTANCE_TO_GO: self._stepper_distance_to_go_report,
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
224 PrivateConstants.STEPPER_TARGET_POSITION: self._stepper_target_position_report,
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
225 PrivateConstants.STEPPER_CURRENT_POSITION: self._stepper_current_position_report,
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
226 PrivateConstants.STEPPER_RUNNING_REPORT: self._stepper_is_running_report,
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
227 PrivateConstants.STEPPER_RUN_COMPLETE_REPORT: self._stepper_run_complete_report,
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
228 PrivateConstants.STEPPER_DISTANCE_TO_GO: self._stepper_distance_to_go_report,
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
229 PrivateConstants.STEPPER_TARGET_POSITION: self._stepper_target_position_report,
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
230 PrivateConstants.FEATURES: self._features_report,
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
231 }
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
232
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
233 # dictionaries to store the callbacks for each pin
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
234 self.analog_callbacks = {}
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
235
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
236 self.digital_callbacks = {}
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
237
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
238 self.i2c_callback = None
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
239 self.i2c_callback2 = None
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
240
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
241 self.i2c_1_active = False
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
242 self.i2c_2_active = False
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
243
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
244 self.spi_callback = None
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
245
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
246 self.onewire_callback = None
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
247
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
248 self.cs_pins_enabled = []
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
249
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
250 # flag to indicate if spi is initialized
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
251 self.spi_enabled = False
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
252
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
253 # flag to indicate if onewire is initialized
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
254 self.onewire_enabled = False
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
255
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
256 # the trigger pin will be the key to retrieve
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
257 # the callback for a specific HC-SR04
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
258 self.sonar_callbacks = {}
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
259
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
260 self.sonar_count = 0
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
261
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
262 self.dht_callbacks = {}
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
263
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
264 # stepper motor variables
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
265
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
266 # updated when a new motor is added
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
267 self.next_stepper_assigned = 0
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
268
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
269 # valid list of stepper motor interface types
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
270 self.valid_stepper_interfaces = [1, 2, 3, 4, 6, 8]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
271
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
272 # maximum number of steppers supported
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
273 self.max_number_of_steppers = 4
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
274
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
275 # number of steppers created - not to exceed the maximum
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
276 self.number_of_steppers = 0
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
277
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
278 # dictionary to hold stepper motor information
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
279 self.stepper_info = {'instance': False, 'is_running': None,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
280 'maximum_speed': 1, 'speed': 0, 'acceleration': 0,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
281 'distance_to_go_callback': None,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
282 'target_position_callback': None,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
283 'current_position_callback': None,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
284 'is_running_callback': None,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
285 'motion_complete_callback': None,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
286 'acceleration_callback': None}
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
287
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
288 # build a list of stepper motor info items
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
289 self.stepper_info_list = []
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
290 # a list of dictionaries to hold stepper information
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
291 for motor in range(self.max_number_of_steppers):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
292 self.stepper_info_list.append(self.stepper_info)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
293
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
294 print(f'TelemetrixAIO Version: {PrivateConstants.TELEMETRIX_AIO_VERSION}')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
295 print(f'Copyright (c) 2018-2021 Alan Yorinks All rights reserved.\n')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
296
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
297 if autostart:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
298 self.loop.run_until_complete(self.start_aio())
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
299
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
300 async def start_aio(self):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
301 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
302 This method may be called directly, if the autostart
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
303 parameter in __init__ is set to false.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
304
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
305 This method instantiates the serial interface and then performs auto pin
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
306 discovery if using a serial interface, or creates and connects to
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
307 a TCP/IP enabled device running StandardFirmataWiFi.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
308
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
309 Use this method if you wish to start TelemetrixAIO manually from
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
310 an asyncio function.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
311 """
5
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
312 log.debug('start_aio')
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
313 if not self.ip_address:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
314 if not self.com_port:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
315 # user did not specify a com_port
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
316 try:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
317 await self._find_arduino()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
318 except KeyboardInterrupt:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
319 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
320 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
321 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
322 # com_port specified - set com_port and baud rate
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
323 try:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
324 await self._manual_open()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
325 except KeyboardInterrupt:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
326 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
327 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
328
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
329 if self.com_port:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
330 print(f'Telemetrix4AIO found and connected to {self.com_port}')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
331
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
332 # no com_port found - raise a runtime exception
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
333 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
334 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
335 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
336 raise RuntimeError('No Arduino Found or User Aborted Program')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
337 # using tcp/ip
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
338 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
339 self.sock = TelemetrixAioSocket(self.ip_address, self.ip_port, self.loop)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
340 await self.sock.start()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
341 # self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
342 # self.sock.connect((self.ip_address, self.ip_port))
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
343 # print(f'Successfully connected to: {self.ip_address}:{self.ip_port}')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
344
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
345 # get arduino firmware version and print it
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
346 firmware_version = await self._get_firmware_version()
5
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
347 log.debug(f'start_aio p2 {firmware_version=}')
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
348 if not firmware_version:
5
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
349 log.info('*** Firmware Version retrieval timed out. ***')
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
350 log.info('\nDo you have Arduino connectivity and do you have the ')
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
351 log.info('Telemetrix4Arduino sketch uploaded to the board and are connected')
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
352 log.info('to the correct serial port.\n')
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
353 log.info('To see a list of serial ports, type: '
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
354 '"list_serial_ports" in your console.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
355 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
356 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
357 raise RuntimeError
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
358 else:
5
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
359 log.debug(f'p3')
6
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
360 if firmware_version[1] < 5:
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
361 raise RuntimeError('Please upgrade the server firmware to version 5.0.0 or greater')
5
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
362 log.info(f'Telemetrix4Arduino Version Number: {firmware_version[1]}.'
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
363 f'{firmware_version[2]}.{firmware_version[3]}')
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
364 # start the command dispatcher loop
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
365 command = [PrivateConstants.ENABLE_ALL_REPORTS]
5
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
366 log.debug('start_aio send ENABLE_ALL_REPORTS')
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
367 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
368 if not self.loop:
5
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
369 log.debug('start_aio new loop')
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
370 self.loop = asyncio.get_event_loop()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
371 self.the_task = self.loop.create_task(self._arduino_report_dispatcher())
5
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
372 log.debug('create task for _arduino_report_dispatcher')
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
373 log.debug(f'create task for _arduino_report_dispatcher done: {self.the_task}')
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
374
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
375 # get the features list
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
376 command = [PrivateConstants.GET_FEATURES]
5
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
377 log.debug('send get_features')
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
378 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
379 time.sleep(.5)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
380
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
381 # Have the server reset its data structures
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
382 command = [PrivateConstants.RESET]
5
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
383 log.debug('send reset')
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
384 await self._send_command(command)
5
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
385 log.debug(f'start_aio bye\n')
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
386
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
387 async def get_event_loop(self):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
388 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
389 Return the currently active asyncio event loop
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
390
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
391 :return: Active event loop
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
392
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
393 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
394 return self.loop
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
395
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
396 async def _find_arduino(self):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
397 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
398 This method will search all potential serial ports for an Arduino
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
399 containing a sketch that has a matching arduino_instance_id as
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
400 specified in the input parameters of this class.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
401
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
402 This is used explicitly with the FirmataExpress sketch.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
403 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
404
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
405 # a list of serial ports to be checked
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
406 serial_ports = []
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
407
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
408 print('Opening all potential serial ports...')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
409 the_ports_list = list_ports.comports()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
410 for port in the_ports_list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
411 if port.pid is None:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
412 continue
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
413 print('\nChecking {}'.format(port.device))
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
414 try:
6
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
415 self.serial_port = TelemetrixAioSerial(port.device, 115200)
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
416 await self.serial_port.open()
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
417 except SerialException:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
418 continue
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
419 # create a list of serial ports that we opened
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
420 serial_ports.append(self.serial_port)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
421
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
422 # display to the user
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
423 print('\t' + port.device)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
424
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
425 # wait for arduino to reset
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
426 print('\nWaiting {} seconds(arduino_wait) for Arduino devices to '
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
427 'reset...'.format(self.arduino_wait))
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
428 await asyncio.sleep(self.arduino_wait)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
429
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
430 print('\nSearching for an Arduino configured with an arduino_instance = ',
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
431 self.arduino_instance_id)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
432
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
433 for serial_port in serial_ports:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
434 self.serial_port = serial_port
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
435
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
436 command = [PrivateConstants.ARE_U_THERE]
6
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
437 try:
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
438 i_am_here = await asyncio.wait_for(self._send_command(command, has_response=True), timeout=0.5)
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
439 except asyncio.TimeoutError:
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
440 log.info(f'no answer- retrying')
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
441 continue
6
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
442
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
443 # got an I am here message - is it the correct ID?
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
444 if i_am_here[2] == self.arduino_instance_id:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
445 self.com_port = serial_port.com_port
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
446 return
6
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
447 raise ValueError("not found")
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
448
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
449 async def _manual_open(self):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
450 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
451 Com port was specified by the user - try to open up that port
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
452
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
453 """
6
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
454 log.info(f'Searching for correct arduino_instance_id: {self.arduino_instance_id}')
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
455 while True:
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
456 # if port is not found, a serial exception will be thrown
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
457 log.info('Opening {} ...'.format(self.com_port))
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
458 self.serial_port = TelemetrixAioSerial(self.com_port, 115200)
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
459 # log.debug('await open')
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
460 await self.serial_port.open()
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
461
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
462 # print('Waiting {} seconds for the Arduino To Reset.'
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
463 # .format(self.arduino_wait))
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
464 # await asyncio.sleep(self.arduino_wait)
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
465 command = [PrivateConstants.ARE_U_THERE]
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
466 try:
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
467 i_am_here = await asyncio.wait_for(self._send_command(command, has_response=True), timeout=0.5)
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
468 except asyncio.TimeoutError:
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
469 log.info(f'no answer- retrying')
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
470 continue
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
471 break
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
472
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
473 if not i_am_here:
6
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
474 log.warning(f'ERROR: correct arduino_instance_id not found')
5
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
475
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
476 log.info('Correct arduino_instance_id found\n')
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
477
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
478 async def _get_firmware_version(self):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
479 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
480 This method retrieves the Arduino4Telemetrix firmware version
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
481
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
482 :returns: Firmata firmware version
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
483 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
484 command = [PrivateConstants.GET_FIRMWARE_VERSION]
6
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
485 log.debug('GET_FIRMWARE_VERSION')
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
486 firmware_version = await self._send_command(command, has_response=True)
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
487 log.debug(f'{firmware_version=}\n')
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
488
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
489 return firmware_version
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
490
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
491 async def analog_write(self, pin, value):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
492 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
493 Set the specified pin to the specified value.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
494
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
495 :param pin: arduino pin number
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
496
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
497 :param value: pin value (maximum 16 bits)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
498
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
499 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
500 value_msb = value >> 8
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
501 value_lsb = value & 0xff
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
502 command = [PrivateConstants.ANALOG_WRITE, pin, value_msb, value_lsb]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
503 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
504
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
505 async def digital_write(self, pin, value):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
506 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
507 Set the specified pin to the specified value.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
508
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
509 :param pin: arduino pin number
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
510
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
511 :param value: pin value (1 or 0)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
512
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
513 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
514 command = [PrivateConstants.DIGITAL_WRITE, pin, value]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
515 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
516
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
517 async def i2c_read(self, address, register, number_of_bytes,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
518 callback, i2c_port=0,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
519 write_register=True):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
520 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
521 Read the specified number of bytes from the specified register for
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
522 the i2c device.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
523
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
524
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
525 :param address: i2c device address
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
526
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
527 :param register: i2c register (or None if no register selection is needed)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
528
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
529 :param number_of_bytes: number of bytes to be read
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
530
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
531 :param callback: Required callback function to report i2c data as a
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
532 result of read command
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
533
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
534 :param i2c_port: select the default port (0) or secondary port (1)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
535
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
536 :param write_register: If True, the register is written
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
537 before read
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
538 Else, the write is suppressed
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
539
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
540
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
541 callback returns a data list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
542
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
543 [I2C_READ_REPORT, address, register, count of data bytes,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
544 data bytes, time-stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
545
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
546 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
547 if not callback:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
548 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
549 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
550 raise RuntimeError('i2c_read: A Callback must be specified')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
551
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
552 await self._i2c_read_request(address, register, number_of_bytes,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
553 callback=callback, i2c_port=i2c_port,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
554 write_register=write_register)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
555
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
556 async def i2c_read_restart_transmission(self, address, register,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
557 number_of_bytes,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
558 callback, i2c_port=0,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
559 write_register=True):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
560 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
561 Read the specified number of bytes from the specified register for
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
562 the i2c device. This restarts the transmission after the read. It is
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
563 required for some i2c devices such as the MMA8452Q accelerometer.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
564
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
565
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
566 :param address: i2c device address
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
567
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
568 :param register: i2c register (or None if no register
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
569 selection is needed)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
570
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
571 :param number_of_bytes: number of bytes to be read
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
572
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
573 :param callback: Required callback function to report i2c data as a
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
574 result of read command
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
575
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
576 :param i2c_port: select the default port (0) or secondary port (1)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
577
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
578 :param write_register: If True, the register is written
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
579 before read
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
580 Else, the write is suppressed
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
581
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
582 callback returns a data list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
583
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
584 [I2C_READ_REPORT, address, register, count of data bytes,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
585 data bytes, time-stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
586
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
587 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
588 if not callback:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
589 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
590 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
591 raise RuntimeError(
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
592 'i2c_read_restart_transmission: A Callback must be specified')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
593
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
594 await self._i2c_read_request(address, register, number_of_bytes,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
595 stop_transmission=False,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
596 callback=callback, i2c_port=i2c_port,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
597 write_register=write_register)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
598
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
599 async def _i2c_read_request(self, address, register, number_of_bytes,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
600 stop_transmission=True, callback=None,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
601 i2c_port=0, write_register=True):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
602 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
603 This method requests the read of an i2c device. Results are retrieved
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
604 via callback.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
605
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
606 :param address: i2c device address
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
607
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
608 :param register: register number (or None if no register selection is needed)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
609
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
610 :param number_of_bytes: number of bytes expected to be returned
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
611
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
612 :param stop_transmission: stop transmission after read
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
613
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
614 :param callback: Required callback function to report i2c data as a
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
615 result of read command.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
616
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
617 :param i2c_port: select the default port (0) or secondary port (1)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
618
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
619 :param write_register: If True, the register is written
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
620 before read
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
621 Else, the write is suppressed
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
622
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
623 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
624 if not i2c_port:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
625 if not self.i2c_1_active:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
626 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
627 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
628 raise RuntimeError(
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
629 'I2C Read: set_pin_mode i2c never called for i2c port 1.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
630
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
631 if i2c_port:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
632 if not self.i2c_2_active:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
633 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
634 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
635 raise RuntimeError(
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
636 'I2C Read: set_pin_mode i2c never called for i2c port 2.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
637
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
638 if not callback:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
639 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
640 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
641 raise RuntimeError('I2C Read: A callback function must be specified.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
642
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
643 if not i2c_port:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
644 self.i2c_callback = callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
645 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
646 self.i2c_callback2 = callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
647
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
648 if not register:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
649 register = 0
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
650
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
651 if write_register:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
652 write_register = 1
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
653 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
654 write_register = 0
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
655
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
656 # message contains:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
657 # 1. address
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
658 # 2. register
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
659 # 3. number of bytes
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
660 # 4. restart_transmission - True or False
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
661 # 5. i2c port
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
662 # 6. suppress write flag
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
663
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
664 command = [PrivateConstants.I2C_READ, address, register, number_of_bytes,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
665 stop_transmission, i2c_port, write_register]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
666 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
667
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
668 async def i2c_write(self, address, args, i2c_port=0):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
669 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
670 Write data to an i2c device.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
671
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
672 :param address: i2c device address
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
673
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
674 :param i2c_port: 0= port 1, 1 = port 2
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
675
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
676 :param args: A variable number of bytes to be sent to the device
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
677 passed in as a list
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
678
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
679 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
680 if not i2c_port:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
681 if not self.i2c_1_active:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
682 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
683 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
684 raise RuntimeError(
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
685 'I2C Write: set_pin_mode i2c never called for i2c port 1.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
686
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
687 if i2c_port:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
688 if not self.i2c_2_active:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
689 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
690 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
691 raise RuntimeError(
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
692 'I2C Write: set_pin_mode i2c never called for i2c port 2.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
693
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
694 command = [PrivateConstants.I2C_WRITE, len(args), address, i2c_port]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
695
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
696 for item in args:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
697 command.append(item)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
698
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
699 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
700
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
701 async def loop_back(self, start_character, callback):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
702 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
703 This is a debugging method to send a character to the
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
704 Arduino device, and have the device loop it back.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
705
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
706 :param start_character: The character to loop back. It should be
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
707 an integer.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
708
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
709 :param callback: Looped back character will appear in the callback method
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
710
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
711 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
712
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
713 if not callback:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
714 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
715 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
716 raise RuntimeError('loop_back: A callback function must be specified.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
717 command = [PrivateConstants.LOOP_COMMAND, ord(start_character)]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
718 self.loop_back_callback = callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
719 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
720
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
721 async def set_analog_scan_interval(self, interval):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
722 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
723 Set the analog scanning interval.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
724
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
725 :param interval: value of 0 - 255 - milliseconds
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
726 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
727
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
728 if 0 <= interval <= 255:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
729 command = [PrivateConstants.SET_ANALOG_SCANNING_INTERVAL, interval]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
730 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
731 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
732 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
733 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
734 raise RuntimeError('Analog interval must be between 0 and 255')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
735
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
736 async def set_pin_mode_analog_input(self, pin_number, differential=0, callback=None):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
737 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
738 Set a pin as an analog input.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
739
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
740 :param pin_number: arduino pin number
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
741
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
742 :param callback: async callback function
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
743
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
744 :param differential: difference in previous to current value before
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
745 report will be generated
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
746
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
747 callback returns a data list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
748
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
749 [pin_type, pin_number, pin_value, raw_time_stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
750
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
751 The pin_type for analog input pins = 2
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
752
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
753 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
754
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
755 if not callback:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
756 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
757 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
758 raise RuntimeError(
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
759 'set_pin_mode_analog_input: A callback function must be specified.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
760
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
761 await self._set_pin_mode(pin_number, PrivateConstants.AT_ANALOG,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
762 differential, callback=callback)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
763
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
764 async def set_pin_mode_analog_output(self, pin_number):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
765 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
766
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
767 Set a pin as a pwm (analog output) pin.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
768
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
769 :param pin_number:arduino pin number
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
770
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
771 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
772
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
773 await self._set_pin_mode(pin_number, PrivateConstants.AT_OUTPUT, differential=0,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
774 callback=None)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
775
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
776 async def set_pin_mode_digital_input(self, pin_number, callback):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
777 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
778 Set a pin as a digital input.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
779
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
780 :param pin_number: arduino pin number
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
781
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
782 :param callback: async callback function
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
783
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
784 callback returns a data list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
785
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
786 [pin_type, pin_number, pin_value, raw_time_stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
787
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
788 The pin_type for digital input pins = 0
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
789
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
790 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
791 await self._set_pin_mode(pin_number, PrivateConstants.AT_INPUT, differential=0,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
792 callback=callback)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
793
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
794 async def set_pin_mode_digital_input_pullup(self, pin_number, callback):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
795 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
796 Set a pin as a digital input with pullup enabled.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
797
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
798 :param pin_number: arduino pin number
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
799
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
800 :param callback: async callback function
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
801
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
802 callback returns a data list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
803
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
804 [pin_type, pin_number, pin_value, raw_time_stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
805
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
806 The pin_type for digital input pins with pullups enabled = 11
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
807
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
808 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
809 if not callback:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
810 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
811 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
812 raise RuntimeError(
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
813 'set_pin_mode_digital_input_pullup: A callback function must be specified.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
814
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
815 await self._set_pin_mode(pin_number, PrivateConstants.AT_INPUT_PULLUP,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
816 differential=0, callback=callback)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
817
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
818 async def set_pin_mode_digital_output(self, pin_number):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
819 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
820 Set a pin as a digital output pin.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
821
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
822 :param pin_number: arduino pin number
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
823 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
824
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
825 await self._set_pin_mode(pin_number, PrivateConstants.AT_OUTPUT, differential=0,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
826 callback=None)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
827
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
828 # noinspection PyIncorrectDocstring
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
829 async def set_pin_mode_i2c(self, i2c_port=0):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
830 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
831 Establish the standard Arduino i2c pins for i2c utilization.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
832
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
833 :param i2c_port: 0 = i2c1, 1 = i2c2
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
834
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
835 NOTES: 1. THIS METHOD MUST BE CALLED BEFORE ANY I2C REQUEST IS MADE
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
836 2. Callbacks are set within the individual i2c read methods of this
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
837 API.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
838
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
839 See i2c_read, or i2c_read_restart_transmission.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
840
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
841 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
842 # test for i2c port 2
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
843 if i2c_port:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
844 # if not previously activated set it to activated
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
845 # and the send a begin message for this port
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
846 if not self.i2c_2_active:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
847 self.i2c_2_active = True
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
848 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
849 return
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
850 # port 1
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
851 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
852 if not self.i2c_1_active:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
853 self.i2c_1_active = True
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
854 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
855 return
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
856
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
857 command = [PrivateConstants.I2C_BEGIN, i2c_port]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
858 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
859
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
860 async def set_pin_mode_dht(self, pin, callback=None, dht_type=22):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
861 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
862
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
863 :param pin: connection pin
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
864
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
865 :param callback: callback function
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
866
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
867 :param dht_type: either 22 for DHT22 or 11 for DHT11
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
868
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
869 Error Callback: [DHT REPORT Type, DHT_ERROR_NUMBER, PIN, DHT_TYPE, Time]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
870
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
871 Valid Data Callback: DHT REPORT Type, DHT_DATA=, PIN, DHT_TYPE, Humidity,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
872 Temperature,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
873 Time]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
874
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
875 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
876 if self.reported_features & PrivateConstants.DHT_FEATURE:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
877
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
878 if not callback:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
879 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
880 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
881 raise RuntimeError('set_pin_mode_dht: A Callback must be specified')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
882
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
883 if self.dht_count < PrivateConstants.MAX_DHTS - 1:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
884 self.dht_callbacks[pin] = callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
885 self.dht_count += 1
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
886
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
887 if dht_type != 22 and dht_type != 11:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
888 dht_type = 22
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
889
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
890 command = [PrivateConstants.DHT_NEW, pin, dht_type]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
891 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
892 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
893 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
894 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
895 raise RuntimeError(
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
896 f'Maximum Number Of DHTs Exceeded - set_pin_mode_dht fails for pin {pin}')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
897
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
898 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
899 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
900 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
901 raise RuntimeError(f'The DHT feature is disabled in the server.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
902
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
903 async def set_pin_mode_servo(self, pin_number, min_pulse=544, max_pulse=2400):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
904 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
905
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
906 Attach a pin to a servo motor
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
907
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
908 :param pin_number: pin
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
909
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
910 :param min_pulse: minimum pulse width
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
911
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
912 :param max_pulse: maximum pulse width
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
913
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
914 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
915 if self.reported_features & PrivateConstants.SERVO_FEATURE:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
916
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
917 minv = (min_pulse).to_bytes(2, byteorder="big")
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
918 maxv = (max_pulse).to_bytes(2, byteorder="big")
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
919
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
920 command = [PrivateConstants.SERVO_ATTACH, pin_number,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
921 minv[0], minv[1], maxv[0], maxv[1]]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
922 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
923 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
924 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
925 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
926 raise RuntimeError(f'The SERVO feature is disabled in the server.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
927
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
928 async def set_pin_mode_sonar(self, trigger_pin, echo_pin,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
929 callback):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
930 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
931
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
932 :param trigger_pin:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
933
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
934 :param echo_pin:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
935
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
936 :param callback: callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
937
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
938 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
939 if self.reported_features & PrivateConstants.SONAR_FEATURE:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
940
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
941 if not callback:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
942 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
943 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
944 raise RuntimeError('set_pin_mode_sonar: A Callback must be specified')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
945
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
946 if self.sonar_count < PrivateConstants.MAX_SONARS - 1:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
947 self.sonar_callbacks[trigger_pin] = callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
948 self.sonar_count += 1
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
949
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
950 command = [PrivateConstants.SONAR_NEW, trigger_pin, echo_pin]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
951 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
952 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
953 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
954 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
955 raise RuntimeError(
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
956 f'Maximum Number Of Sonars Exceeded - set_pin_mode_sonar fails for pin {trigger_pin}')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
957 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
958 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
959 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
960 raise RuntimeError(f'The SONAR feature is disabled in the server.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
961
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
962 async def set_pin_mode_spi(self, chip_select_list=None):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
963 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
964 Specify the list of chip select pins.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
965
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
966 Standard Arduino MISO, MOSI and CLK pins are used for the board in use.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
967
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
968 Chip Select is any digital output capable pin.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
969
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
970 :param chip_select_list: this is a list of pins to be used for chip select.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
971 The pins will be configured as output, and set to high
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
972 ready to be used for chip select.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
973 NOTE: You must specify the chips select pins here!
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
974
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
975
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
976 command message: [command, number of cs pins, [cs pins...]]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
977 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
978 if self.reported_features & PrivateConstants.SPI_FEATURE:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
979
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
980 if type(chip_select_list) != list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
981 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
982 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
983 raise RuntimeError('chip_select_list must be in the form of a list')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
984 if not chip_select_list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
985 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
986 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
987 raise RuntimeError('Chip select pins were not specified')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
988
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
989 self.spi_enabled = True
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
990
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
991 command = [PrivateConstants.SPI_INIT, len(chip_select_list)]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
992
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
993 for pin in chip_select_list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
994 command.append(pin)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
995 self.cs_pins_enabled.append(pin)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
996 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
997 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
998 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
999 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1000 raise RuntimeError(f'The SPI feature is disabled in the server.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1001
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1002 async def set_pin_mode_stepper(self, interface=1, pin1=2, pin2=3, pin3=4,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1003 pin4=5, enable=True):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1004 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1005 Stepper motor support is implemented as a proxy for the
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1006 the AccelStepper library for the Arduino.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1007
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1008 https://github.com/waspinator/AccelStepper
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1009
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1010 Instantiate a stepper motor.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1011
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1012 Initialize the interface and pins for a stepper motor.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1013
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1014 :param interface: Motor Interface Type:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1015
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1016 1 = Stepper Driver, 2 driver pins required
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1017
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1018 2 = FULL2WIRE 2 wire stepper, 2 motor pins required
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1019
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1020 3 = FULL3WIRE 3 wire stepper, such as HDD spindle,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1021 3 motor pins required
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1022
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1023 4 = FULL4WIRE, 4 wire full stepper, 4 motor pins
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1024 required
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1025
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1026 6 = HALF3WIRE, 3 wire half stepper, such as HDD spindle,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1027 3 motor pins required
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1028
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1029 8 = HALF4WIRE, 4 wire half stepper, 4 motor pins required
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1030
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1031 :param pin1: Arduino digital pin number for motor pin 1
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1032
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1033 :param pin2: Arduino digital pin number for motor pin 2
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1034
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1035 :param pin3: Arduino digital pin number for motor pin 3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1036
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1037 :param pin4: Arduino digital pin number for motor pin 4
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1038
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1039 :param enable: If this is true, the output pins at construction time.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1040
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1041 :return: Motor Reference number
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1042 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1043 if self.reported_features & PrivateConstants.STEPPERS_FEATURE:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1044
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1045 if self.number_of_steppers == self.max_number_of_steppers:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1046 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1047 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1048 raise RuntimeError('Maximum number of steppers has already been assigned')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1049
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1050 if interface not in self.valid_stepper_interfaces:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1051 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1052 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1053 raise RuntimeError('Invalid stepper interface')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1054
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1055 self.number_of_steppers += 1
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1056
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1057 motor_id = self.next_stepper_assigned
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1058 self.next_stepper_assigned += 1
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1059 self.stepper_info_list[motor_id]['instance'] = True
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1060
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1061 # build message and send message to server
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1062 command = [PrivateConstants.SET_PIN_MODE_STEPPER, motor_id, interface, pin1,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1063 pin2, pin3, pin4, enable]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1064 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1065
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1066 # return motor id
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1067 return motor_id
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1068 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1069 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1070 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1071 raise RuntimeError(f'The Stepper feature is disabled in the server.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1072
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1073 async def spi_cs_control(self, chip_select_pin, select):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1074 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1075 Control an SPI chip select line
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1076 :param chip_select_pin: pin connected to CS
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1077
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1078 :param select: 0=select, 1=deselect
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1079 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1080 if not self.spi_enabled:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1081 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1082 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1083 raise RuntimeError(f'spi_cs_control: SPI interface is not enabled.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1084
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1085 if chip_select_pin not in self.cs_pins_enabled:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1086 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1087 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1088 raise RuntimeError(f'spi_cs_control: chip select pin never enabled.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1089 command = [PrivateConstants.SPI_CS_CONTROL, chip_select_pin, select]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1090 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1091
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1092 async def spi_read_blocking(self, register_selection, number_of_bytes_to_read,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1093 call_back=None):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1094 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1095 Read the specified number of bytes from the specified SPI port and
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1096 call the callback function with the reported data.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1097
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1098 :param register_selection: Register to be selected for read.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1099
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1100 :param number_of_bytes_to_read: Number of bytes to read
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1101
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1102 :param call_back: Required callback function to report spi data as a
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1103 result of read command
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1104
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1105
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1106 callback returns a data list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1107 [SPI_READ_REPORT, count of data bytes read, data bytes, time-stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1108
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1109 SPI_READ_REPORT = 13
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1110
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1111 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1112
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1113 if not self.spi_enabled:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1114 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1115 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1116 raise RuntimeError(f'spi_read_blocking: SPI interface is not enabled.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1117
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1118 if not call_back:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1119 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1120 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1121 raise RuntimeError('spi_read_blocking: A Callback must be specified')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1122
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1123 self.spi_callback = call_back
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1124
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1125 command = [PrivateConstants.SPI_READ_BLOCKING, number_of_bytes_to_read,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1126 register_selection]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1127
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1128 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1129
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1130 async def spi_set_format(self, clock_divisor, bit_order, data_mode):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1131 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1132 Configure how the SPI serializes and de-serializes data on the wire.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1133
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1134 See Arduino SPI reference materials for details.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1135
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1136 :param clock_divisor:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1137
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1138 :param bit_order:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1139
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1140 LSBFIRST = 0
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1141
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1142 MSBFIRST = 1 (default)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1143
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1144 :param data_mode:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1145
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1146 SPI_MODE0 = 0x00 (default)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1147
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1148 SPI_MODE1 = 0x04
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1149
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1150 SPI_MODE2 = 0x08
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1151
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1152 SPI_MODE3 = 0x0C
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1153
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1154 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1155
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1156 if not self.spi_enabled:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1157 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1158 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1159 raise RuntimeError(f'spi_set_format: SPI interface is not enabled.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1160
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1161 command = [PrivateConstants.SPI_SET_FORMAT, clock_divisor, bit_order,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1162 data_mode]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1163 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1164
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1165 async def spi_write_blocking(self, bytes_to_write):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1166 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1167 Write a list of bytes to the SPI device.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1168
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1169 :param bytes_to_write: A list of bytes to write. This must
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1170 be in the form of a list.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1171
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1172 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1173
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1174 if not self.spi_enabled:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1175 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1176 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1177 raise RuntimeError(f'spi_write_blocking: SPI interface is not enabled.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1178
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1179 if type(bytes_to_write) is not list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1180 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1181 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1182 raise RuntimeError('spi_write_blocking: bytes_to_write must be a list.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1183
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1184 command = [PrivateConstants.SPI_WRITE_BLOCKING, len(bytes_to_write)]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1185
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1186 for data in bytes_to_write:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1187 command.append(data)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1188
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1189 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1190
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1191 async def set_pin_mode_one_wire(self, pin):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1192 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1193 Initialize the one wire serial bus.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1194
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1195 :param pin: Data pin connected to the OneWire device
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1196 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1197 self.onewire_enabled = True
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1198 command = [PrivateConstants.ONE_WIRE_INIT, pin]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1199 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1200
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1201 async def onewire_reset(self, callback=None):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1202 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1203 Reset the onewire device
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1204
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1205 :param callback: required function to report reset result
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1206
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1207 callback returns a list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1208 [ReportType = 14, Report Subtype = 25, reset result byte,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1209 timestamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1210 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1211 if not self.onewire_enabled:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1212 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1213 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1214 raise RuntimeError(f'onewire_reset: OneWire interface is not enabled.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1215 if not callback:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1216 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1217 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1218 raise RuntimeError('onewire_reset: A Callback must be specified')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1219
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1220 self.onewire_callback = callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1221
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1222 command = [PrivateConstants.ONE_WIRE_RESET]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1223 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1224
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1225 async def onewire_select(self, device_address):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1226 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1227 Select a device based on its address
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1228 :param device_address: A bytearray of 8 bytes
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1229 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1230 if not self.onewire_enabled:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1231 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1232 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1233 raise RuntimeError(f'onewire_select: OneWire interface is not enabled.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1234
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1235 if type(device_address) is not list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1236 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1237 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1238 raise RuntimeError('onewire_select: device address must be an array of 8 '
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1239 'bytes.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1240
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1241 if len(device_address) != 8:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1242 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1243 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1244 raise RuntimeError('onewire_select: device address must be an array of 8 '
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1245 'bytes.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1246 command = [PrivateConstants.ONE_WIRE_SELECT]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1247 for data in device_address:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1248 command.append(data)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1249 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1250
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1251 async def onewire_skip(self):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1252 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1253 Skip the device selection. This only works if you have a
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1254 single device, but you can avoid searching and use this to
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1255 immediately access your device.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1256 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1257 if not self.onewire_enabled:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1258 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1259 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1260 raise RuntimeError(f'onewire_skip: OneWire interface is not enabled.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1261
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1262 command = [PrivateConstants.ONE_WIRE_SKIP]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1263 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1264
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1265 async def onewire_write(self, data, power=0):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1266 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1267 Write a byte to the onewire device. If 'power' is one
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1268 then the wire is held high at the end for
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1269 parasitically powered devices. You
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1270 are responsible for eventually de-powering it by calling
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1271 another read or write.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1272
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1273 :param data: byte to write.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1274 :param power: power control (see above)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1275 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1276 if not self.onewire_enabled:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1277 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1278 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1279 raise RuntimeError(f'onewire_write: OneWire interface is not enabled.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1280 if 0 < data < 255:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1281 command = [PrivateConstants.ONE_WIRE_WRITE, data, power]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1282 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1283 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1284 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1285 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1286 raise RuntimeError('onewire_write: Data must be no larger than 255')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1287
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1288 async def onewire_read(self, callback=None):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1289 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1290 Read a byte from the onewire device
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1291 :param callback: required function to report onewire data as a
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1292 result of read command
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1293
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1294
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1295 callback returns a data list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1296 [ONEWIRE_REPORT, ONEWIRE_READ=29, data byte, time-stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1297
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1298 ONEWIRE_REPORT = 14
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1299 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1300 if not self.onewire_enabled:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1301 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1302 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1303 raise RuntimeError(f'onewire_read: OneWire interface is not enabled.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1304
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1305 if not callback:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1306 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1307 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1308 raise RuntimeError('onewire_read A Callback must be specified')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1309
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1310 self.onewire_callback = callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1311
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1312 command = [PrivateConstants.ONE_WIRE_READ]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1313 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1314
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1315 async def onewire_reset_search(self):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1316 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1317 Begin a new search. The next use of search will begin at the first device
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1318 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1319
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1320 if not self.onewire_enabled:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1321 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1322 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1323 raise RuntimeError(f'onewire_reset_search: OneWire interface is not '
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1324 f'enabled.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1325 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1326 command = [PrivateConstants.ONE_WIRE_RESET_SEARCH]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1327 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1328
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1329 async def onewire_search(self, callback=None):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1330 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1331 Search for the next device. The device address will returned in the callback.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1332 If a device is found, the 8 byte address is contained in the callback.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1333 If no more devices are found, the address returned contains all elements set
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1334 to 0xff.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1335
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1336 :param callback: required function to report a onewire device address
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1337
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1338 callback returns a data list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1339 [ONEWIRE_REPORT, ONEWIRE_SEARCH=31, 8 byte address, time-stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1340
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1341 ONEWIRE_REPORT = 14
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1342 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1343 if not self.onewire_enabled:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1344 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1345 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1346 raise RuntimeError(f'onewire_search: OneWire interface is not enabled.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1347
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1348 if not callback:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1349 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1350 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1351 raise RuntimeError('onewire_read A Callback must be specified')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1352
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1353 self.onewire_callback = callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1354
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1355 command = [PrivateConstants.ONE_WIRE_SEARCH]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1356 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1357
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1358 async def onewire_crc8(self, address_list, callback=None):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1359 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1360 Compute a CRC check on an array of data.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1361 :param address_list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1362
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1363 :param callback: required function to report a onewire device address
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1364
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1365 callback returns a data list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1366 [ONEWIRE_REPORT, ONEWIRE_CRC8=32, CRC, time-stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1367
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1368 ONEWIRE_REPORT = 14
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1369
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1370 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1371
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1372 if not self.onewire_enabled:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1373 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1374 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1375 raise RuntimeError(f'onewire_crc8: OneWire interface is not enabled.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1376
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1377 if not callback:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1378 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1379 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1380 raise RuntimeError('onewire_crc8 A Callback must be specified')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1381
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1382 if type(address_list) is not list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1383 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1384 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1385 raise RuntimeError('onewire_crc8: address list must be a list.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1386
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1387 self.onewire_callback = callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1388
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1389 address_length = len(address_list)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1390
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1391 command = [PrivateConstants.ONE_WIRE_CRC8, address_length - 1]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1392
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1393 for data in address_list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1394 command.append(data)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1395
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1396 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1397
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1398 async def _set_pin_mode(self, pin_number, pin_state, differential, callback):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1399 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1400 A private method to set the various pin modes.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1401
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1402 :param pin_number: arduino pin number
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1403
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1404 :param pin_state: INPUT/OUTPUT/ANALOG/PWM/PULLUP - for SERVO use
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1405 servo_config()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1406 For DHT use: set_pin_mode_dht
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1407
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1408 :param differential: for analog inputs - threshold
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1409 value to be achieved for report to
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1410 be generated
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1411
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1412 :param callback: A reference to an async call back function to be
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1413 called when pin data value changes
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1414
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1415 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1416 if not callback and pin_state != PrivateConstants.AT_OUTPUT:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1417 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1418 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1419 raise RuntimeError('_set_pin_mode: A Callback must be specified')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1420 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1421 if pin_state == PrivateConstants.AT_INPUT:
5
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
1422 command = [PrivateConstants.SET_PIN_MODE, pin_number, pin_state, 1]
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1423 self.digital_callbacks[pin_number] = callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1424 elif pin_state == PrivateConstants.AT_INPUT_PULLUP:
5
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
1425 command = [PrivateConstants.SET_PIN_MODE, pin_number, pin_state, 1]
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
1426 log.debug(f'saving yuor cb for {pin_number=} to {callback}')
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1427 self.digital_callbacks[pin_number] = callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1428 elif pin_state == PrivateConstants.AT_ANALOG:
5
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
1429 command = [PrivateConstants.SET_PIN_MODE, pin_number, pin_state, differential >> 8, differential & 0xff, 1]
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1430 self.analog_callbacks[pin_number] = callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1431 elif pin_state == PrivateConstants.AT_OUTPUT:
5
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
1432 command = [PrivateConstants.SET_PIN_MODE, pin_number, pin_state, 1]
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1433 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1434 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1435 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1436 raise RuntimeError('Unknown pin state')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1437
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1438
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1439 await asyncio.sleep(.05)
6
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
1440 await self._send_command(command)
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
1441
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1442
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1443 async def servo_detach(self, pin_number):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1444 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1445 Detach a servo for reuse
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1446 :param pin_number: attached pin
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1447 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1448 command = [PrivateConstants.SERVO_DETACH, pin_number]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1449 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1450
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1451 async def servo_write(self, pin_number, angle):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1452 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1453
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1454 Set a servo attached to a pin to a given angle.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1455
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1456 :param pin_number: pin
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1457
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1458 :param angle: angle (0-180)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1459
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1460 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1461 command = [PrivateConstants.SERVO_WRITE, pin_number, angle]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1462 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1463
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1464 async def stepper_move_to(self, motor_id, position):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1465 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1466 Set an absolution target position. If position is positive, the movement is
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1467 clockwise, else it is counter-clockwise.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1468
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1469 The run() function (below) will try to move the motor (at most one step per call)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1470 from the current position to the target position set by the most
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1471 recent call to this function. Caution: moveTo() also recalculates the
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1472 speed for the next step.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1473 If you are trying to use constant speed movements, you should call setSpeed()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1474 after calling moveTo().
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1475
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1476 :param motor_id: motor id: 0 - 3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1477
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1478 :param position: target position. Maximum value is 32 bits.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1479 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1480
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1481 if not self.stepper_info_list[motor_id]['instance']:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1482 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1483 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1484 raise RuntimeError('stepper_move_to: Invalid motor_id.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1485
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1486 if position < 0:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1487 polarity = 1
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1488 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1489 polarity = 0
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1490 position = abs(position)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1491
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1492 position_bytes = list(position.to_bytes(4, 'big', signed=True))
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1493
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1494 command = [PrivateConstants.STEPPER_MOVE_TO, motor_id]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1495 for value in position_bytes:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1496 command.append(value)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1497 command.append(polarity)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1498
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1499 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1500
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1501 async def stepper_move(self, motor_id, relative_position):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1502 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1503 Set the target position relative to the current position.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1504
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1505 :param motor_id: motor id: 0 - 3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1506
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1507 :param relative_position: The desired position relative to the current
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1508 position. Negative is anticlockwise from
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1509 the current position. Maximum value is 32 bits.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1510 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1511 if not self.stepper_info_list[motor_id]['instance']:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1512 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1513 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1514 raise RuntimeError('stepper_move: Invalid motor_id.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1515
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1516 if relative_position < 0:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1517 polarity = 1
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1518 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1519 polarity = 0
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1520 position = abs(relative_position)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1521
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1522 position_bytes = list(position.to_bytes(4, 'big', signed=True))
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1523
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1524 command = [PrivateConstants.STEPPER_MOVE, motor_id]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1525 for value in position_bytes:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1526 command.append(value)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1527 command.append(polarity)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1528 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1529
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1530 async def stepper_run(self, motor_id, completion_callback=None):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1531 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1532 This method steps the selected motor based on the current speed.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1533
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1534 Once called, the server will continuously attempt to step the motor.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1535
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1536 :param motor_id: 0 - 3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1537
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1538 :param completion_callback: call back function to receive motion complete
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1539 notification
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1540
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1541 callback returns a data list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1542
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1543 [report_type, motor_id, raw_time_stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1544
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1545 The report_type = 19
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1546 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1547 if not completion_callback:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1548 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1549 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1550 raise RuntimeError('stepper_run: A motion complete callback must be '
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1551 'specified.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1552
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1553 if not self.stepper_info_list[motor_id]['instance']:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1554 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1555 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1556 raise RuntimeError('stepper_run: Invalid motor_id.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1557
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1558 self.stepper_info_list[motor_id]['motion_complete_callback'] = completion_callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1559 command = [PrivateConstants.STEPPER_RUN, motor_id]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1560 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1561
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1562 async def stepper_run_speed(self, motor_id):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1563 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1564 This method steps the selected motor based at a constant speed as set by the most
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1565 recent call to stepper_set_max_speed(). The motor will run continuously.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1566
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1567 Once called, the server will continuously attempt to step the motor.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1568
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1569 :param motor_id: 0 - 3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1570
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1571 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1572 if not self.stepper_info_list[motor_id]['instance']:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1573 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1574 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1575 raise RuntimeError('stepper_run_speed: Invalid motor_id.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1576
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1577 command = [PrivateConstants.STEPPER_RUN_SPEED, motor_id]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1578 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1579
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1580 async def stepper_set_max_speed(self, motor_id, max_speed):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1581 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1582 Sets the maximum permitted speed. The stepper_run() function will accelerate
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1583 up to the speed set by this function.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1584
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1585 Caution: the maximum speed achievable depends on your processor and clock speed.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1586 The default maxSpeed is 1 step per second.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1587
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1588 Caution: Speeds that exceed the maximum speed supported by the processor may
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1589 result in non-linear accelerations and decelerations.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1590
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1591 :param motor_id: 0 - 3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1592
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1593 :param max_speed: 1 - 1000
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1594 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1595
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1596 if not self.stepper_info_list[motor_id]['instance']:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1597 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1598 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1599 raise RuntimeError('stepper_set_max_speed: Invalid motor_id.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1600
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1601 if not 1 < max_speed <= 1000:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1602 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1603 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1604 raise RuntimeError('stepper_set_max_speed: Speed range is 1 - 1000.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1605
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1606 self.stepper_info_list[motor_id]['max_speed'] = max_speed
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1607 max_speed_msb = (max_speed & 0xff00) >> 8
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1608 max_speed_lsb = max_speed & 0xff
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1609
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1610 command = [PrivateConstants.STEPPER_SET_MAX_SPEED, motor_id, max_speed_msb,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1611 max_speed_lsb]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1612 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1613
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1614 async def stepper_get_max_speed(self, motor_id):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1615 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1616 Returns the maximum speed configured for this stepper
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1617 that was previously set by stepper_set_max_speed()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1618
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1619 Value is stored in the client, so no callback is required.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1620
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1621 :param motor_id: 0 - 3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1622
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1623 :return: The currently configured maximum speed.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1624 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1625 if not self.stepper_info_list[motor_id]['instance']:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1626 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1627 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1628 raise RuntimeError('stepper_max_speed: Invalid motor_id.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1629
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1630 return self.stepper_info_list[motor_id]['max_speed']
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1631
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1632 async def stepper_set_acceleration(self, motor_id, acceleration):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1633 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1634 Sets the acceleration/deceleration rate.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1635
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1636 :param motor_id: 0 - 3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1637
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1638 :param acceleration: The desired acceleration in steps per second
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1639 per second. Must be > 0.0. This is an
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1640 expensive call since it requires a square
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1641 root to be calculated on the server.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1642 Dont call more often than needed.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1643
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1644 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1645 if not self.stepper_info_list[motor_id]['instance']:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1646 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1647 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1648 raise RuntimeError('stepper_set_acceleration: Invalid motor_id.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1649
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1650 if not 1 < acceleration <= 1000:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1651 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1652 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1653 raise RuntimeError('stepper_set_acceleration: Acceleration range is 1 - '
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1654 '1000.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1655
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1656 self.stepper_info_list[motor_id]['acceleration'] = acceleration
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1657
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1658 max_accel_msb = acceleration >> 8
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1659 max_accel_lsb = acceleration & 0xff
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1660
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1661 command = [PrivateConstants.STEPPER_SET_ACCELERATION, motor_id, max_accel_msb,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1662 max_accel_lsb]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1663 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1664
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1665 async def stepper_set_speed(self, motor_id, speed):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1666 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1667 Sets the desired constant speed for use with stepper_run_speed().
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1668
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1669 :param motor_id: 0 - 3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1670
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1671 :param speed: 0 - 1000 The desired constant speed in steps per
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1672 second. Positive is clockwise. Speeds of more than 1000 steps per
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1673 second are unreliable. Speed accuracy depends on the Arduino
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1674 crystal. Jitter depends on how frequently you call the
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1675 stepper_run_speed() method.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1676 The speed will be limited by the current value of
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1677 stepper_set_max_speed().
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1678 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1679 if not self.stepper_info_list[motor_id]['instance']:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1680 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1681 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1682 raise RuntimeError('stepper_set_speed: Invalid motor_id.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1683
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1684 if not 0 < speed <= 1000:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1685 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1686 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1687 raise RuntimeError('stepper_set_speed: Speed range is 0 - '
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1688 '1000.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1689
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1690 self.stepper_info_list[motor_id]['speed'] = speed
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1691
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1692 speed_msb = speed >> 8
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1693 speed_lsb = speed & 0xff
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1694
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1695 command = [PrivateConstants.STEPPER_SET_SPEED, motor_id, speed_msb, speed_lsb]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1696 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1697
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1698 async def stepper_get_speed(self, motor_id):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1699 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1700 Returns the most recently set speed.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1701 that was previously set by stepper_set_speed();
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1702
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1703 Value is stored in the client, so no callback is required.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1704
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1705 :param motor_id: 0 - 3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1706
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1707 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1708 if not self.stepper_info_list[motor_id]['instance']:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1709 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1710 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1711 raise RuntimeError('stepper_get_speed: Invalid motor_id.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1712
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1713 return self.stepper_info_list[motor_id]['speed']
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1714
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1715 async def stepper_get_distance_to_go(self, motor_id, distance_to_go_callback):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1716 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1717 Request the distance from the current position to the target position
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1718 from the server.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1719
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1720 :param motor_id: 0 - 3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1721
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1722 :param distance_to_go_callback: required callback function to receive report
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1723
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1724 :return: The distance to go is returned via the callback as a list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1725
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1726 [REPORT_TYPE=15, motor_id, distance in steps, time_stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1727
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1728 A positive distance is clockwise from the current position.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1729
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1730 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1731 if not distance_to_go_callback:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1732 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1733 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1734 raise RuntimeError('stepper_get_distance_to_go Read: A callback function must be specified.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1735
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1736 if not self.stepper_info_list[motor_id]['instance']:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1737 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1738 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1739 raise RuntimeError('stepper_get_distance_to_go: Invalid motor_id.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1740 self.stepper_info_list[motor_id][
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1741 'distance_to_go_callback'] = distance_to_go_callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1742 command = [PrivateConstants.STEPPER_GET_DISTANCE_TO_GO, motor_id]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1743 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1744
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1745 async def stepper_get_target_position(self, motor_id, target_callback):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1746 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1747 Request the most recently set target position from the server.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1748
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1749 :param motor_id: 0 - 3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1750
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1751 :param target_callback: required callback function to receive report
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1752
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1753 :return: The distance to go is returned via the callback as a list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1754
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1755 [REPORT_TYPE=16, motor_id, target position in steps, time_stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1756
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1757 Positive is clockwise from the 0 position.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1758
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1759 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1760 if not target_callback:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1761 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1762 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1763 raise RuntimeError(
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1764 'stepper_get_target_position Read: A callback function must be specified.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1765
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1766 if not self.stepper_info_list[motor_id]['instance']:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1767 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1768 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1769 raise RuntimeError('stepper_get_target_position: Invalid motor_id.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1770
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1771 self.stepper_info_list[motor_id][
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1772 'target_position_callback'] = target_callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1773
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1774 command = [PrivateConstants.STEPPER_GET_TARGET_POSITION, motor_id]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1775 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1776
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1777 async def stepper_get_current_position(self, motor_id, current_position_callback):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1778 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1779 Request the current motor position from the server.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1780
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1781 :param motor_id: 0 - 3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1782
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1783 :param current_position_callback: required callback function to receive report
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1784
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1785 :return: The current motor position returned via the callback as a list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1786
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1787 [REPORT_TYPE=17, motor_id, current position in steps, time_stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1788
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1789 Positive is clockwise from the 0 position.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1790 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1791 if not current_position_callback:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1792 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1793 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1794 raise RuntimeError(
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1795 'stepper_get_current_position Read: A callback function must be specified.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1796
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1797 if not self.stepper_info_list[motor_id]['instance']:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1798 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1799 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1800 raise RuntimeError('stepper_get_current_position: Invalid motor_id.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1801
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1802 self.stepper_info_list[motor_id]['current_position_callback'] = current_position_callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1803
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1804 command = [PrivateConstants.STEPPER_GET_CURRENT_POSITION, motor_id]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1805 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1806
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1807 async def stepper_set_current_position(self, motor_id, position):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1808 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1809 Resets the current position of the motor, so that wherever the motor
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1810 happens to be right now is considered to be the new 0 position. Useful
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1811 for setting a zero position on a stepper after an initial hardware
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1812 positioning move.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1813
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1814 Has the side effect of setting the current motor speed to 0.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1815
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1816 :param motor_id: 0 - 3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1817
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1818 :param position: Position in steps. This is a 32 bit value
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1819 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1820
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1821 if not self.stepper_info_list[motor_id]['instance']:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1822 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1823 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1824 raise RuntimeError('stepper_set_current_position: Invalid motor_id.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1825 position_bytes = list(position.to_bytes(4, 'big', signed=True))
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1826
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1827 command = [PrivateConstants.STEPPER_SET_CURRENT_POSITION, motor_id]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1828 for value in position_bytes:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1829 command.append(value)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1830 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1831
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1832 async def stepper_run_speed_to_position(self, motor_id, completion_callback=None):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1833 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1834 Runs the motor at the currently selected speed until the target position is
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1835 reached.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1836
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1837 Does not implement accelerations.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1838
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1839 :param motor_id: 0 - 3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1840
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1841 :param completion_callback: call back function to receive motion complete
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1842 notification
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1843
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1844 callback returns a data list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1845
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1846 [report_type, motor_id, raw_time_stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1847
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1848 The report_type = 19
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1849 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1850 if not completion_callback:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1851 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1852 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1853 raise RuntimeError('stepper_run_speed_to_position: A motion complete '
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1854 'callback must be '
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1855 'specified.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1856 if not self.stepper_info_list[motor_id]['instance']:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1857 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1858 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1859 raise RuntimeError('stepper_run_speed_to_position: Invalid motor_id.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1860
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1861 self.stepper_info_list[motor_id]['motion_complete_callback'] = completion_callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1862 command = [PrivateConstants.STEPPER_RUN_SPEED_TO_POSITION, motor_id]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1863 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1864
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1865 async def stepper_stop(self, motor_id):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1866 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1867 Sets a new target position that causes the stepper
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1868 to stop as quickly as possible, using the current speed and
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1869 acceleration parameters.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1870
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1871 :param motor_id: 0 - 3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1872 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1873 if not self.stepper_info_list[motor_id]['instance']:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1874 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1875 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1876 raise RuntimeError('stepper_stop: Invalid motor_id.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1877
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1878 command = [PrivateConstants.STEPPER_STOP, motor_id]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1879 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1880
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1881 async def stepper_disable_outputs(self, motor_id):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1882 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1883 Disable motor pin outputs by setting them all LOW.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1884
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1885 Depending on the design of your electronics this may turn off
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1886 the power to the motor coils, saving power.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1887
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1888 This is useful to support Arduino low power modes: disable the outputs
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1889 during sleep and then re-enable with enableOutputs() before stepping
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1890 again.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1891
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1892 If the enable Pin is defined, sets it to OUTPUT mode and clears
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1893 the pin to disabled.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1894
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1895 :param motor_id: 0 - 3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1896 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1897 if not self.stepper_info_list[motor_id]['instance']:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1898 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1899 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1900 raise RuntimeError('stepper_disable_outputs: Invalid motor_id.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1901
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1902 command = [PrivateConstants.STEPPER_DISABLE_OUTPUTS, motor_id]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1903 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1904
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1905 async def stepper_enable_outputs(self, motor_id):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1906 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1907 Enable motor pin outputs by setting the motor pins to OUTPUT
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1908 mode.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1909
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1910 If the enable Pin is defined, sets it to OUTPUT mode and sets
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1911 the pin to enabled.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1912
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1913 :param motor_id: 0 - 3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1914 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1915 if not self.stepper_info_list[motor_id]['instance']:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1916 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1917 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1918 raise RuntimeError('stepper_enable_outputs: Invalid motor_id.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1919
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1920 command = [PrivateConstants.STEPPER_ENABLE_OUTPUTS, motor_id]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1921 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1922
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1923 async def stepper_set_min_pulse_width(self, motor_id, minimum_width):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1924 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1925 Sets the minimum pulse width allowed by the stepper driver.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1926
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1927 The minimum practical pulse width is approximately 20 microseconds.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1928
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1929 Times less than 20 microseconds will usually result in 20 microseconds or so.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1930
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1931 :param motor_id: 0 -3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1932
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1933 :param minimum_width: A 16 bit unsigned value expressed in microseconds.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1934 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1935 if not self.stepper_info_list[motor_id]['instance']:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1936 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1937 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1938 raise RuntimeError('stepper_set_min_pulse_width: Invalid motor_id.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1939
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1940 if not 0 < minimum_width <= 0xff:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1941 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1942 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1943 raise RuntimeError('stepper_set_min_pulse_width: Pulse width range = '
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1944 '0-0xffff.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1945
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1946 width_msb = minimum_width >> 8
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1947 width_lsb = minimum_width & 0xff
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1948
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1949 command = [PrivateConstants.STEPPER_SET_MINIMUM_PULSE_WIDTH, motor_id, width_msb,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1950 width_lsb]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1951 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1952
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1953 async def stepper_set_enable_pin(self, motor_id, pin=0xff):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1954 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1955 Sets the enable pin number for stepper drivers.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1956 0xFF indicates unused (default).
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1957
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1958 Otherwise, if a pin is set, the pin will be turned on when
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1959 enableOutputs() is called and switched off when disableOutputs()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1960 is called.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1961
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1962 :param motor_id: 0 - 4
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1963 :param pin: 0-0xff
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1964 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1965 if not self.stepper_info_list[motor_id]['instance']:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1966 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1967 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1968 raise RuntimeError('stepper_set_enable_pin: Invalid motor_id.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1969
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1970 if not 0 < pin <= 0xff:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1971 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1972 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1973 raise RuntimeError('stepper_set_enable_pin: Pulse width range = '
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1974 '0-0xff.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1975 command = [PrivateConstants.STEPPER_SET_ENABLE_PIN, motor_id, pin]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1976
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1977 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1978
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1979 async def stepper_set_3_pins_inverted(self, motor_id, direction=False, step=False,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1980 enable=False):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1981 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1982 Sets the inversion for stepper driver pins.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1983
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1984 :param motor_id: 0 - 3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1985
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1986 :param direction: True=inverted or False
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1987
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1988 :param step: True=inverted or False
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1989
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1990 :param enable: True=inverted or False
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1991 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1992 if not self.stepper_info_list[motor_id]['instance']:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1993 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1994 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1995 raise RuntimeError('stepper_set_3_pins_inverted: Invalid motor_id.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1996
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1997 command = [PrivateConstants.STEPPER_SET_3_PINS_INVERTED, motor_id, direction,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1998 step, enable]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
1999
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2000 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2001
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2002 async def stepper_set_4_pins_inverted(self, motor_id, pin1_invert=False,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2003 pin2_invert=False,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2004 pin3_invert=False, pin4_invert=False, enable=False):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2005 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2006 Sets the inversion for 2, 3 and 4 wire stepper pins
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2007
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2008 :param motor_id: 0 - 3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2009
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2010 :param pin1_invert: True=inverted or False
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2011
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2012 :param pin2_invert: True=inverted or False
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2013
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2014 :param pin3_invert: True=inverted or False
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2015
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2016 :param pin4_invert: True=inverted or False
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2017
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2018 :param enable: True=inverted or False
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2019 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2020 if not self.stepper_info_list[motor_id]['instance']:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2021 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2022 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2023 raise RuntimeError('stepper_set_4_pins_inverted: Invalid motor_id.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2024
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2025 command = [PrivateConstants.STEPPER_SET_4_PINS_INVERTED, motor_id, pin1_invert,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2026 pin2_invert, pin3_invert, pin4_invert, enable]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2027
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2028 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2029
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2030 async def stepper_is_running(self, motor_id, callback):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2031 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2032 Checks to see if the motor is currently running to a target.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2033
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2034 Callback return True if the speed is not zero or not at the target position.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2035
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2036 :param motor_id: 0-4
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2037
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2038 :param callback: required callback function to receive report
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2039
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2040 :return: The current running state returned via the callback as a list:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2041
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2042 [REPORT_TYPE=18, motor_id, True or False for running state, time_stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2043 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2044 if not callback:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2045 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2046 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2047 raise RuntimeError(
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2048 'stepper_is_running: A callback function must be specified.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2049
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2050 if not self.stepper_info_list[motor_id]['instance']:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2051 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2052 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2053 raise RuntimeError('stepper_is_running: Invalid motor_id.')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2054
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2055 self.stepper_info_list[motor_id]['is_running_callback'] = callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2056
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2057 command = [PrivateConstants.STEPPER_IS_RUNNING, motor_id]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2058 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2059
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2060 async def shutdown(self):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2061 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2062 This method attempts an orderly shutdown
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2063 If any exceptions are thrown, they are ignored.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2064
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2065 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2066 self.shutdown_flag = True
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2067 # stop all reporting - both analog and digital
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2068 try:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2069 if self.serial_port:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2070 command = [PrivateConstants.STOP_ALL_REPORTS]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2071 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2072
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2073 time.sleep(.5)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2074
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2075 await self.serial_port.reset_input_buffer()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2076 await self.serial_port.close()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2077 if self.close_loop_on_shutdown:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2078 self.loop.stop()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2079 elif self.sock:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2080 command = [PrivateConstants.STOP_ALL_REPORTS]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2081 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2082 self.the_task.cancel()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2083 time.sleep(.5)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2084 if self.close_loop_on_shutdown:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2085 self.loop.stop()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2086 except (RuntimeError, SerialException):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2087 pass
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2088
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2089 async def disable_all_reporting(self):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2090 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2091 Disable reporting for all digital and analog input pins
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2092 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2093 command = [PrivateConstants.MODIFY_REPORTING,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2094 PrivateConstants.REPORTING_DISABLE_ALL, 0]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2095 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2096
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2097 async def disable_analog_reporting(self, pin):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2098 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2099 Disables analog reporting for a single analog pin.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2100
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2101 :param pin: Analog pin number. For example for A0, the number is 0.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2102
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2103 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2104 command = [PrivateConstants.MODIFY_REPORTING,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2105 PrivateConstants.REPORTING_ANALOG_DISABLE, pin]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2106 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2107
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2108 async def disable_digital_reporting(self, pin):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2109 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2110 Disables digital reporting for a single digital pin
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2111
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2112
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2113 :param pin: pin number
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2114
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2115 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2116 command = [PrivateConstants.MODIFY_REPORTING,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2117 PrivateConstants.REPORTING_DIGITAL_DISABLE, pin]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2118 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2119
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2120 async def enable_analog_reporting(self, pin):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2121 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2122 Enables analog reporting for the specified pin.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2123
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2124 :param pin: Analog pin number. For example for A0, the number is 0.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2125
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2126
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2127 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2128 command = [PrivateConstants.MODIFY_REPORTING,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2129 PrivateConstants.REPORTING_ANALOG_ENABLE, pin]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2130 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2131
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2132 async def enable_digital_reporting(self, pin):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2133 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2134 Enable reporting on the specified digital pin.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2135
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2136 :param pin: Pin number.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2137 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2138
5
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
2139 log.debug(f'enable_digital_reporting {pin=}')
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
2140 command = [PrivateConstants.MODIFY_REPORTING, PrivateConstants.REPORTING_DIGITAL_ENABLE, pin]
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2141 await self._send_command(command)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2142
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2143 async def _arduino_report_dispatcher(self):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2144 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2145 This is a private method.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2146 It continually accepts and interprets data coming from Telemetrix4Arduino,and then
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2147 dispatches the correct handler to process the data.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2148
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2149 It first receives the length of the packet, and then reads in the rest of the
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2150 packet. A packet consists of a length, report identifier and then the report data.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2151 Using the report identifier, the report handler is fetched from report_dispatch.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2152
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2153 :returns: This method never returns
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2154 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2155 while True:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2156 if self.shutdown_flag:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2157 break
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2158 try:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2159 if not self.ip_address:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2160 packet_length = await self.serial_port.read()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2161 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2162
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2163 packet_length = ord(await self.sock.read())
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2164
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2165 except TypeError:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2166 continue
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2167
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2168 # get the rest of the packet
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2169 if not self.ip_address:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2170 packet = await self.serial_port.read(packet_length)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2171 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2172 packet = list(await self.sock.read(packet_length))
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2173
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2174 report = packet[0]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2175 await self.report_dispatch[report](packet[1:])
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2176 await asyncio.sleep(self.sleep_tune)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2177
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2178 '''
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2179 Report message handlers
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2180 '''
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2181
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2182 async def _report_loop_data(self, data):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2183 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2184 Print data that was looped back
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2185
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2186 :param data: byte of loop back data
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2187 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2188 if self.loop_back_callback:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2189 await self.loop_back_callback(data)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2190
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2191 async def _spi_report(self, report):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2192
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2193 cb_list = [PrivateConstants.SPI_REPORT, report[0]] + report[1:]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2194
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2195 cb_list.append(time.time())
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2196
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2197 await self.spi_callback(cb_list)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2198
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2199 async def _onewire_report(self, report):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2200 cb_list = [PrivateConstants.ONE_WIRE_REPORT, report[0]] + report[1:]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2201 cb_list.append(time.time())
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2202 await self.onewire_callback(cb_list)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2203
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2204 async def _report_debug_data(self, data):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2205 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2206 Print debug data sent from Arduino
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2207
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2208 :param data: data[0] is a byte followed by 2
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2209 bytes that comprise an integer
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2210 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2211 value = (data[1] << 8) + data[2]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2212 print(f'DEBUG ID: {data[0]} Value: {value}')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2213
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2214 async def _analog_message(self, data):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2215 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2216 This is a private message handler method.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2217 It is a message handler for analog messages.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2218
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2219 :param data: message data
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2220
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2221 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2222 pin = data[0]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2223 value = (data[1] << 8) + data[2]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2224
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2225 time_stamp = time.time()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2226
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2227 # append pin number, pin value, and pin type to return value and return as a list
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2228 message = [PrivateConstants.AT_ANALOG, pin, value, time_stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2229
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2230 await self.analog_callbacks[pin](message)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2231
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2232 async def _dht_report(self, data):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2233 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2234 This is a private message handler for dht reports
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2235
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2236 :param data: data[0] = report error return
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2237 No Errors = 0
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2238
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2239 Checksum Error = 1
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2240
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2241 Timeout Error = 2
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2242
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2243 Invalid Value = 999
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2244
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2245 data[1] = pin number
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2246
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2247 data[2] = dht type 11 or 22
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2248
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2249 data[3] = humidity positivity flag
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2250
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2251 data[4] = temperature positivity value
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2252
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2253 data[5] = humidity integer
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2254
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2255 data[6] = humidity fractional value
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2256
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2257 data[7] = temperature integer
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2258
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2259 data[8] = temperature fractional value
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2260 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2261 if data[0]: # DHT_ERROR
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2262 # error report
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2263 # data[0] = report sub type, data[1] = pin, data[2] = error message
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2264 if self.dht_callbacks[data[1]]:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2265 # Callback 0=DHT REPORT, DHT_ERROR, PIN, Time
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2266 message = [PrivateConstants.DHT_REPORT, data[0], data[1], data[2],
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2267 time.time()]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2268 await self.dht_callbacks[data[1]](message)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2269 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2270 # got valid data DHT_DATA
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2271 f_humidity = float(data[5] + data[6] / 100)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2272 if data[3]:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2273 f_humidity *= -1.0
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2274 f_temperature = float(data[7] + data[8] / 100)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2275 if data[4]:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2276 f_temperature *= -1.0
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2277 message = [PrivateConstants.DHT_REPORT, data[0], data[1], data[2],
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2278 f_humidity, f_temperature, time.time()]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2279
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2280 await self.dht_callbacks[data[1]](message)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2281
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2282 async def _digital_message(self, data):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2283 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2284 This is a private message handler method.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2285 It is a message handler for Digital Messages.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2286
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2287 :param data: digital message
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2288
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2289 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2290 pin = data[0]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2291 value = data[1]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2292
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2293 time_stamp = time.time()
5
696a46a1b239 logging and minor refactors
drewp@bigasterisk.com
parents: 3
diff changeset
2294 log.debug(f'digital_callbacks[{pin}] is {self.digital_callbacks.get(pin)}')
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2295 if self.digital_callbacks[pin]:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2296 message = [PrivateConstants.DIGITAL_REPORT, pin, value, time_stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2297 await self.digital_callbacks[pin](message)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2298
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2299 async def _servo_unavailable(self, report):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2300 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2301 Message if no servos are available for use.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2302
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2303 :param report: pin number
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2304 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2305 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2306 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2307 raise RuntimeError(
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2308 f'Servo Attach For Pin {report[0]} Failed: No Available Servos')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2309
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2310 async def _i2c_read_report(self, data):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2311 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2312 Execute callback for i2c reads.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2313
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2314 :param data: [I2C_READ_REPORT, i2c_port, number of bytes read, address, register, bytes read..., time-stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2315 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2316
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2317 # we receive [# data bytes, address, register, data bytes]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2318 # number of bytes of data returned
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2319
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2320 # data[0] = number of bytes
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2321 # data[1] = i2c_port
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2322 # data[2] = number of bytes returned
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2323 # data[3] = address
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2324 # data[4] = register
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2325 # data[5] ... all the data bytes
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2326
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2327 cb_list = [PrivateConstants.I2C_READ_REPORT, data[0], data[1]] + data[2:]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2328 cb_list.append(time.time())
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2329
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2330 if cb_list[1]:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2331 await self.i2c_callback2(cb_list)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2332 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2333 await self.i2c_callback(cb_list)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2334
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2335 async def _i2c_too_few(self, data):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2336 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2337 I2c reports too few bytes received
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2338
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2339 :param data: data[0] = device address
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2340 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2341 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2342 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2343 raise RuntimeError(
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2344 f'i2c too few bytes received from i2c port {data[0]} i2c address {data[1]}')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2345
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2346 async def _i2c_too_many(self, data):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2347 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2348 I2c reports too few bytes received
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2349
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2350 :param data: data[0] = device address
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2351 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2352 if self.shutdown_on_exception:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2353 await self.shutdown()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2354 raise RuntimeError(
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2355 f'i2c too many bytes received from i2c port {data[0]} i2c address {data[1]}')
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2356
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2357 async def _sonar_distance_report(self, report):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2358 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2359
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2360 :param report: data[0] = trigger pin, data[1] and data[2] = distance
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2361
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2362 callback report format: [PrivateConstants.SONAR_DISTANCE, trigger_pin, distance_value, time_stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2363 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2364
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2365 # get callback from pin number
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2366 cb = self.sonar_callbacks[report[0]]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2367
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2368 # build report data
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2369 cb_list = [PrivateConstants.SONAR_DISTANCE, report[0],
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2370 ((report[1] << 8) + report[2]), time.time()]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2371
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2372 await cb(cb_list)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2373
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2374 async def _stepper_distance_to_go_report(self, report):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2375 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2376 Report stepper distance to go.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2377
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2378 :param report: data[0] = motor_id, data[1] = steps MSB, data[2] = steps byte 1,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2379 data[3] = steps bytes 2, data[4] = steps LSB
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2380
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2381 callback report format: [PrivateConstants.STEPPER_DISTANCE_TO_GO, motor_id
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2382 steps, time_stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2383 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2384
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2385 # get callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2386 cb = self.stepper_info_list[report[0]]['distance_to_go_callback']
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2387
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2388 # isolate the steps bytes and covert list to bytes
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2389 steps = bytes(report[1:])
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2390
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2391 # get value from steps
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2392 num_steps = int.from_bytes(steps, byteorder='big', signed=True)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2393
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2394 cb_list = [PrivateConstants.STEPPER_DISTANCE_TO_GO, report[0], num_steps,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2395 time.time()]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2396
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2397 await cb(cb_list)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2398
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2399 async def _stepper_target_position_report(self, report):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2400 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2401 Report stepper target position to go.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2402
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2403 :param report: data[0] = motor_id, data[1] = target position MSB,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2404 data[2] = target position byte MSB+1
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2405 data[3] = target position byte MSB+2
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2406 data[4] = target position LSB
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2407
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2408 callback report format: [PrivateConstants.STEPPER_TARGET_POSITION, motor_id
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2409 target_position, time_stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2410 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2411
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2412 # get callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2413 cb = self.stepper_info_list[report[0]]['target_position_callback']
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2414
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2415 # isolate the steps bytes and covert list to bytes
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2416 target = bytes(report[1:])
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2417
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2418 # get value from steps
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2419 target_position = int.from_bytes(target, byteorder='big', signed=True)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2420
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2421 cb_list = [PrivateConstants.STEPPER_TARGET_POSITION, report[0], target_position,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2422 time.time()]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2423
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2424 await cb(cb_list)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2425
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2426 async def _stepper_current_position_report(self, report):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2427 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2428 Report stepper current position.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2429
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2430 :param report: data[0] = motor_id, data[1] = current position MSB,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2431 data[2] = current position byte MSB+1
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2432 data[3] = current position byte MSB+2
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2433 data[4] = current position LSB
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2434
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2435 callback report format: [PrivateConstants.STEPPER_CURRENT_POSITION, motor_id
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2436 current_position, time_stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2437 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2438
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2439 # get callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2440 cb = self.stepper_info_list[report[0]]['current_position_callback']
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2441
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2442 # isolate the steps bytes and covert list to bytes
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2443 position = bytes(report[1:])
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2444
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2445 # get value from steps
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2446 current_position = int.from_bytes(position, byteorder='big', signed=True)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2447
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2448 cb_list = [PrivateConstants.STEPPER_CURRENT_POSITION, report[0], current_position,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2449 time.time()]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2450
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2451 await cb(cb_list)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2452
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2453 async def _stepper_is_running_report(self, report):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2454 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2455 Report if the motor is currently running
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2456
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2457 :param report: data[0] = motor_id, True if motor is running or False if it is not.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2458
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2459 callback report format: [18, motor_id,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2460 running_state, time_stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2461 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2462
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2463 # get callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2464 cb = self.stepper_info_list[report[0]]['is_running_callback']
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2465
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2466 cb_list = [PrivateConstants.STEPPER_RUNNING_REPORT, report[0], time.time()]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2467
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2468 await cb(cb_list)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2469
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2470 async def _stepper_run_complete_report(self, report):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2471 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2472 The motor completed it motion
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2473
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2474 :param report: data[0] = motor_id
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2475
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2476 callback report format: [PrivateConstants.STEPPER_RUN_COMPLETE_REPORT, motor_id,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2477 time_stamp]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2478 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2479
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2480 # get callback
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2481 cb = self.stepper_info_list[report[0]]['motion_complete_callback']
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2482
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2483 cb_list = [PrivateConstants.STEPPER_RUN_COMPLETE_REPORT, report[0],
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2484 time.time()]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2485
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2486 await cb(cb_list)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2487
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2488 async def _features_report(self, report):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2489 self.reported_features = report[0]
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2490
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2491 async def _send_command(self, command):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2492 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2493 This is a private utility method.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2494
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2495
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2496 :param command: command data in the form of a list
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2497
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2498 :returns: number of bytes sent
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2499 """
6
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
2500 if self.serial_port is None:
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
2501 raise TypeError
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
2502 if command:
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
2503 # the length of the list is added at the head
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
2504 command.insert(0, len(command))
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
2505 # print(command)
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
2506 send_message = bytes(command)
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
2507 log.debug(f'sending {CommandName[command[1]]} {command[2:]}')
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
2508 if not self.ip_address:
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
2509 await self.serial_port.write(send_message)
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
2510 else:
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
2511 await self.sock.write(send_message)
ca63391a2214 redo lots of serial calls
drewp@bigasterisk.com
parents: 5
diff changeset
2512 # await asyncio.sleep(.1)
3
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2513 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2514 await self.sock.write(send_message)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2515 # await asyncio.sleep(.1)