@@ -53,27 +53,28 @@ class IRNECRepeatException(Exception):
53
53
54
54
class GenericDecode :
55
55
def bin_data (self , pulses ):
56
- bins = [[pulses [0 ],0 ]]
57
-
58
- for i in range (len (pulses )):
59
- p = pulses [i ]
60
- matchedbin = False
61
- #print(p, end=": ")
62
- for b in range (len (bins )):
63
- bin = bins [b ]
64
- if bin [0 ]* 0.75 <= p <= bin [0 ]* 1.25 :
65
- #print("matches bin")
66
- bins [b ][0 ] = (bin [0 ] + p ) // 2 # avg em
67
- bins [b ][1 ] += 1 # track it
68
- matchedbin = True
69
- break
70
- if not matchedbin :
71
- bins .append ([p , 1 ])
72
- #print(bins)
73
- return bins
56
+ bins = [[pulses [0 ],0 ]]
57
+
58
+ for i in range (len (pulses )):
59
+ p = pulses [i ]
60
+ matchedbin = False
61
+ #print(p, end=": ")
62
+ for b in range (len (bins )):
63
+ bin = bins [b ]
64
+ if bin [0 ]* 0.75 <= p <= bin [0 ]* 1.25 :
65
+ #print("matches bin")
66
+ bins [b ][0 ] = (bin [0 ] + p ) // 2 # avg em
67
+ bins [b ][1 ] += 1 # track it
68
+ matchedbin = True
69
+ break
70
+ if not matchedbin :
71
+ bins .append ([p , 1 ])
72
+ #print(bins)
73
+ return bins
74
74
75
75
def decode_bits (self , pulses , debug = False ):
76
- print ("length: " , len (pulses )) if debug
76
+ if debug :
77
+ print ("length: " , len (pulses ))
77
78
78
79
# special exception for NEC repeat code!
79
80
if (len (pulses ) == 3 ) and (8000 <= pulses [0 ] <= 10000 ) and (2000 <= pulses [1 ] <= 3000 ) and (450 <= pulses [2 ] <= 700 ):
@@ -86,19 +87,21 @@ def decode_bits(self, pulses, debug=False):
86
87
del pulses [0 ]
87
88
if (len (pulses ) % 2 ):
88
89
del pulses [0 ]
89
- print ("new length: " , len (pulses )) if debug
90
+ if debug :
91
+ print ("new length: " , len (pulses ))
90
92
91
93
evens = pulses [0 ::2 ]
92
94
odds = pulses [1 ::2 ]
93
95
# bin both halves
94
96
even_bins = self .bin_data (evens )
95
97
odd_bins = self .bin_data (odds )
96
- print ("evenbins: " , even_bins , "oddbins:" , odd_bins ) if debug
98
+ if debug : print ("evenbins: " , even_bins , "oddbins:" , odd_bins )
97
99
98
100
outliers = [b [0 ] for b in (even_bins + odd_bins ) if b [1 ] == 1 ]
99
101
even_bins = [b for b in even_bins if (b [1 ] > 1 )]
100
102
odd_bins = [b for b in odd_bins if (b [1 ] > 1 )]
101
- print ("evenbins: " , even_bins , "oddbins:" , odd_bins , "outliers:" , outliers ) if debug
103
+ if debug :
104
+ print ("evenbins: " , even_bins , "oddbins:" , odd_bins , "outliers:" , outliers )
102
105
103
106
if not even_bins or not odd_bins :
104
107
raise IRDecodeException ("Not enough data" )
@@ -112,15 +115,17 @@ def decode_bits(self, pulses, debug=False):
112
115
else :
113
116
raise IRDecodeException ("Both even/odd pulses differ" )
114
117
115
- print ("Pulses:" , pulses , "& Bins:" , pulse_bins ) if debug
118
+ if debug :
119
+ print ("Pulses:" , pulses , "& Bins:" , pulse_bins )
116
120
if len (pulse_bins ) == 1 :
117
121
raise IRDecodeException ("Pulses do not differ" )
118
122
elif len (pulse_bins ) > 2 :
119
123
raise IRDecodeException ("Only mark & space handled" )
120
124
121
125
mark = min (pulse_bins [0 ][0 ], pulse_bins [1 ][0 ])
122
126
space = max (pulse_bins [0 ][0 ], pulse_bins [1 ][0 ])
123
- print ("Space:" ,space ,"Mark:" ,mark ) if debug
127
+ if debug :
128
+ print ("Space:" ,space ,"Mark:" ,mark )
124
129
125
130
if outliers :
126
131
pulses = [p for p in pulses if not (outliers [0 ]* 0.75 ) <= p <= (outliers [0 ]* 1.25 )] # skip outliers
@@ -132,7 +137,8 @@ def decode_bits(self, pulses, debug=False):
132
137
pulses [i ] = True
133
138
else :
134
139
raise IRDecodeException ("Pulses outside mark/space" )
135
- print (len (pulses ), pulses ) if debug
140
+ if debug :
141
+ print (len (pulses ), pulses )
136
142
137
143
# convert bits to bytes!
138
144
output = [0 ] * ((len (pulses )+ 7 )// 8 )
0 commit comments