@@ -86,15 +86,8 @@ def __init__(self, register_map=None):
86
86
AttributeError ("you must provide a register map" )
87
87
self .prev_single_byte_write = None
88
88
self .current_bank = 0
89
- # if len(self.register_map) is 1 and self.current_bank is -1:
90
- # self.current_bank = 0
91
- # print("reg map length:", len(self.register_map))
92
- # print("********* REG MAP?!*************")
93
- # pretty(self.register_map)
94
- # print("*************************************")
95
- def decode (self , row_num , row ):
96
-
97
89
90
+ def decode (self , row_num , row ):
98
91
adjusted_row_num = row_num + ROW_NUMBER_OFFSET
99
92
b0 = None
100
93
b1 = None
@@ -138,44 +131,45 @@ def decode(self, row_num, row):
138
131
print (self .decode_bytes (rw , b0 , b1 ))
139
132
140
133
def decode_transaction (self , reg_txn ):
134
+ # decoder should be able to use these but I think it's currently
135
+ # fguring out what register_address is
141
136
# reg_txn.is_read
142
137
# reg_txn.i2c_node_addr #sensor/outgoing address
143
138
# reg_txn.register_address #destination of write, source of read
144
139
# reg_txn.data # ints/non-string list
140
+ out_str = "CAN'T DECODE: %s" % reg_txn
141
+ if reg_txn .is_read :
142
+ rw = "READ"
143
+ else :
144
+ rw = "WRITE"
145
+ if len (reg_txn .data )> 2 :
146
+ return "[UNDER CONSTRUCTION: len(dat)>2]"
147
+ if reg_txn .is_read and len (reg_txn .data ) > 2 :
148
+ return "READ %s" % reg_txn .data
149
+
150
+ try :
151
+ out_str = self .decode_bytes (rw , * reg_txn .data )
152
+ except RuntimeError as e :
153
+ print ("Error Decoding:" )
154
+ print (type (e ))
155
+ print (e .args )
156
+ print (e )
145
157
146
-
147
-
148
-
149
- # if reg_txn.is_read:
150
- # rw = "READ"
151
- # else:
152
- # rw= "WRITE"
153
- # if len(reg_txn.data)>2:
154
- # return ""
155
- # out_str = "+>%s"%reg_txn
156
- # out_str = self.decode_bytes(rw, *reg_txn.data)
157
- out_str = str (reg_txn )
158
158
return out_str
159
159
160
160
# TODO: Take bool, for rw
161
161
# TODO: Return string, print from caller
162
+ # TODO: Take a bytearray
162
163
def decode_bytes (self , rw , b0 = None , b1 = None ):
163
- if DEBUG >= 2 :
164
- if not b0 :
165
- b0s = " "
166
- else :
167
- b0s = hex (b0 )
168
- if not b1 :
169
- b1s = " "
170
- else :
171
- b1s = hex (b1 )
172
- print ("[%s : %s : %s]" % (rw , b0s , b1s ))
173
- if b1 is None :
164
+
165
+ if b1 is None : # single byte
174
166
return self .single_byte_decode (rw , b0 )
175
167
elif rw == "WRITE" :
168
+ if b0 not in self .register_map [self .current_bank ]:
169
+ return "UNKNOWN REG: %s" % hex (b0 )
176
170
return self .decode_set_value (rw , b0 , b1 )
177
171
else :
178
- # raise RuntimeError("Multi-byte reads not supported")
172
+ raise RuntimeError ("Multi-byte reads not supported" )
179
173
return
180
174
181
175
def single_byte_decode (self , rw , b0 ):
@@ -209,14 +203,18 @@ def single_byte_decode(self, rw, b0):
209
203
# self._h(b0),
210
204
# )
211
205
# )
212
-
206
+
213
207
# isn't this going to do nothing because it's a local?
214
208
current_register ['last_read_value' ] = b0
215
209
self .prev_single_byte_write = None # shouldn't be needed
216
210
# else:
217
211
# raise ("UNEXPECTED READ WITHOUT PRECEDING WRITE")
218
212
219
213
def decode_set_value (self , rw , reg_addr , value_byte ):
214
+
215
+ print ("\t bank:" , self .current_bank )
216
+ print ('reg_addr' , reg_addr )
217
+
220
218
current_register = self .register_map [self .current_bank ][reg_addr ]
221
219
bitfields = self .load_bitfields (current_register )
222
220
0 commit comments