annotate telemetrix_local.py @ 9:7e19dffb767b default tip

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