|
50 | 50 | https://github.com/adafruit/circuitpython/releases |
51 | 51 |
|
52 | 52 | """ |
53 | | - |
54 | 53 | import array |
| 54 | +from collections import namedtuple |
55 | 55 | import time |
56 | 56 |
|
57 | 57 | __version__ = "0.0.0-auto.0" |
@@ -96,7 +96,7 @@ def decode_bits(pulses): |
96 | 96 | # TODO The name pulses is redefined several times below, so we'll stash the |
97 | 97 | # original in a separate variable for now. It might be worth refactoring to |
98 | 98 | # avoid redefining pulses, for the sake of readability. |
99 | | - input_pulses = pulses |
| 99 | + input_pulses = tuple(pulses) |
100 | 100 | pulses = list(pulses) # Copy to avoid mutating input. |
101 | 101 |
|
102 | 102 | # special exception for NEC repeat code! |
@@ -170,52 +170,17 @@ def decode_bits(pulses): |
170 | 170 | output[i // 8] = output[i // 8] << 1 |
171 | 171 | if pulse_length: |
172 | 172 | output[i // 8] |= 1 |
173 | | - return IRMessage(input_pulses, code=output) |
174 | | - |
175 | | - |
176 | | -class BaseIRMessage: |
177 | | - "Contains the pulses that were parsed as one message." |
178 | | - |
179 | | - def __init__(self, pulses): |
180 | | - # Stash an immutable copy of pulses. |
181 | | - self.pulses = tuple(pulses) |
182 | | - |
183 | | - def __repr__(self): |
184 | | - return f"{self.__class__.__name__}({self.pulses})" |
185 | | - |
186 | | - |
187 | | -class IRMessage(BaseIRMessage): |
188 | | - """ |
189 | | - Message interpreted as bytes. |
190 | | -
|
191 | | - >>> m.code # the output of interest (the parsed bytes) |
192 | | - >>> m.pulses # the original pulses |
193 | | - """ |
194 | | - |
195 | | - def __init__(self, pulses, *, code): |
196 | | - super().__init__(pulses) |
197 | | - self.code = code |
198 | | - |
199 | | - def __repr__(self): |
200 | | - return f"{self.__class__.__name__}" f"(pulses={self.pulses}, code={self.code})" |
201 | | - |
202 | | - |
203 | | -class UnparseableIRMessage(BaseIRMessage): |
204 | | - "Message that could not be interpreted." |
| 173 | + return IRMessage(tuple(input_pulses), code=tuple(output)) |
205 | 174 |
|
206 | | - def __init__(self, pulses, *, reason): |
207 | | - super().__init__(pulses) |
208 | | - self.reason = reason |
209 | 175 |
|
210 | | - def __repr__(self): |
211 | | - return ( |
212 | | - f"{self.__class__.__name__}" f"(pulses={self.pulses}, reason={self.reason})" |
213 | | - ) |
| 176 | +IRMessage = namedtuple("IRMessage", ("pulses", "code")) |
| 177 | +"Pulses and the code they were parsed into" |
214 | 178 |
|
| 179 | +UnparseableIRMessage = namedtuple("IRMessage", ("pulses", "reason")) |
| 180 | +"Pulses and the reason that they could not be parsed into a code" |
215 | 181 |
|
216 | | -class NECRepeatIRMessage(BaseIRMessage): |
217 | | - "Message interpreted as an NEC repeat code." |
218 | | - pass |
| 182 | +NECRepeatIRMessage = namedtuple("NECRepeatIRMessage", ("pulses",)) |
| 183 | +"Pulses interpreted as an NEC repeat code" |
219 | 184 |
|
220 | 185 |
|
221 | 186 | class NonblockingGenericDecode: |
|
0 commit comments