annotate telemetrix_local_serial.py @ 3:67402d8b4e0d

copy from telemetrix repo
author drewp@bigasterisk.com
date Sun, 05 Feb 2023 14:06:45 -0800
parents
children 6182841fb92e
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 # -*- coding: utf-8 -*-
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
2 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
3 Copyright (c) 2015-2020 Alan Yorinks All rights reserved.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
4
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
5 This program is free software; you can redistribute it and/or
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
6 modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
7 Version 3 as published by the Free Software Foundation; either
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
8 or (at your option) any later version.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
9 This library is distributed in the hope that it will be useful,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
12 General Public License for more details.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
13
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
14 You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
15 along with this library; if not, write to the Free Software
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
16 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
17 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
18
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 sys
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
21 import serial
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
22 import time
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
23
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
24 LF = 0x0a
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
25
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
26
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
27 # noinspection PyStatementEffect,PyUnresolvedReferences,PyUnresolvedReferences
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
28 class TelemetrixAioSerial:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
29 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
30 This class encapsulates management of the serial port that communicates
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
31 with the Arduino Firmata
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
32 It provides a 'futures' interface to make Pyserial compatible with asyncio
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
33 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
34
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
35 def __init__(self, com_port='/dev/ttyACM0', baud_rate=115200, sleep_tune=.0001,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
36 telemetrix_aio_instance=None, close_loop_on_error=True):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
37
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
38 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
39 This is the constructor for the aio serial handler
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
40
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
41 :param com_port: Com port designator
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
42
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
43 :param baud_rate: UART baud rate
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
44
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
45 :param telemetrix_aio_instance: reference to caller
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
46
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
47 :return: None
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
48 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
49 # print('Initializing Arduino - Please wait...', end=" ")
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
50 sys.stdout.flush()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
51 self.my_serial = serial.Serial(com_port, baud_rate, timeout=1,
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
52 writeTimeout=1)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
53
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
54 self.com_port = com_port
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
55 self.sleep_tune = sleep_tune
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
56 self.telemetrix_aio_instance = telemetrix_aio_instance
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
57 self.close_loop_on_error = close_loop_on_error
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
58
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
59 # used by read_until
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
60 self.start_time = None
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
61
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
62 async def get_serial(self):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
63 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
64 This method returns a reference to the serial port in case the
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
65 user wants to call pyserial methods directly
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
66
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
67 :return: pyserial instance
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
68 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
69 return self.my_serial
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
70
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
71 async def write(self, data):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
72 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
73 This is an asyncio adapted version of pyserial write. It provides a
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
74 non-blocking write and returns the number of bytes written upon
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
75 completion
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
76
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
77 :param data: Data to be written
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
78 :return: Number of bytes written
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
79 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
80 # the secret sauce - it is in your future
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
81 future = asyncio.Future()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
82 result = None
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
83 try:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
84 # result = self.my_serial.write(bytes([ord(data)]))
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
85 result = self.my_serial.write(bytes(data))
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
86
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
87 except serial.SerialException:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
88 # noinspection PyBroadException
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
89 loop = None
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
90 await self.close()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
91 future.cancel()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
92 if self.close_loop_on_error:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
93 loop = asyncio.get_event_loop()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
94 loop.stop()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
95
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
96 if self.telemetrix_aio_instance.the_task:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
97 self.telemetrix_aio_instance.the_task.cancel()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
98 await asyncio.sleep(1)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
99 if self.close_loop_on_error:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
100 loop.close()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
101
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
102 if result:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
103 future.set_result(result)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
104 while True:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
105 if not future.done():
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
106 # spin our asyncio wheels until future completes
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
107 await asyncio.sleep(self.sleep_tune)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
108
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
109 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
110 return future.result()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
111
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
112 async def read(self, size=1):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
113 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
114 This is an asyncio adapted version of pyserial read
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
115 that provides non-blocking read.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
116
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
117 :return: One character
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
118 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
119
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
120 # create an asyncio Future
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
121 future = asyncio.Future()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
122
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
123 # create a flag to indicate when data becomes available
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
124 data_available = False
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
125
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
126 # wait for a character to become available and read from
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
127 # the serial port
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
128 while True:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
129 if not data_available:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
130 # test to see if a character is waiting to be read.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
131 # if not, relinquish control back to the event loop through the
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
132 # short sleep
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
133 if not self.my_serial.in_waiting:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
134 await asyncio.sleep(self.sleep_tune*2)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
135
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
136 # data is available.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
137 # set the flag to true so that the future can "wait" until the
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
138 # read is completed.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
139 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
140 data_available = True
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
141 data = self.my_serial.read(size)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
142 # set future result to make the character available
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
143 if size == 1:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
144 future.set_result(ord(data))
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
145 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
146 future.set_result(list(data))
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
147 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
148 # wait for the future to complete
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
149 if not future.done():
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
150 await asyncio.sleep(self.sleep_tune)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
151 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
152 # future is done, so return the character
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
153 return future.result()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
154
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
155 async def read_until(self, expected=LF, size=None, timeout=1):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
156 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
157 This is an asyncio adapted version of pyserial read
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
158 that provides non-blocking read.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
159
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
160 :return: Data delimited by expected
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
161 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
162
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
163 expected = str(expected).encode()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
164 # create an asyncio Future
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
165 future = asyncio.Future()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
166
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
167 # create a flag to indicate when data becomes available
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
168 data_available = False
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
169
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
170 if timeout:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
171 self.start_time = time.time()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
172
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
173 # wait for a character to become available and read from
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
174 # the serial port
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
175 while True:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
176 if not data_available:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
177 # test to see if a character is waiting to be read.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
178 # if not, relinquish control back to the event loop through the
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
179 # short sleep
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
180 if not self.my_serial.in_waiting:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
181 if timeout:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
182 elapsed_time = time.time() - self.start_time
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
183 if elapsed_time > timeout:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
184 return None
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
185 await asyncio.sleep(self.sleep_tune)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
186 # data is available.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
187 # set the flag to true so that the future can "wait" until the
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
188 # read is completed.
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
189 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
190 data_available = True
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
191 data = self.my_serial.read_until(expected, size)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
192 # set future result to make the character available
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
193 return_value = list(data)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
194 future.set_result(return_value)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
195 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
196 # wait for the future to complete
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
197 if not future.done():
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
198 await asyncio.sleep(self.sleep_tune)
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
199 else:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
200 # future is done, so return the character
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
201 return future.result()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
202
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
203 async def reset_input_buffer(self):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
204 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
205 Reset the input buffer
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
206 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
207 self.my_serial.reset_input_buffer()
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
208
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
209 async def close(self):
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
210 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
211 Close the serial port
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
212 """
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
213 if self.my_serial:
67402d8b4e0d copy from telemetrix repo
drewp@bigasterisk.com
parents:
diff changeset
214 self.my_serial.close()