1
1
# TODO: Measure time between calls/
2
2
import os
3
3
import json
4
+ from saleae .analyzers import HighLevelAnalyzer , AnalyzerFrame , StringSetting , NumberSetting , ChoicesSetting
5
+
4
6
5
7
class Transaction :
6
8
"""A class representing a complete read or write transaction between an I2C Master and a slave device with addressable registers"""
@@ -64,8 +66,17 @@ def __str__(self):
64
66
MODE_AUTO_INCREMENT_ADDR_MSB_HIGH = 0
65
67
MODE_AUTO_INCREMENT_DEFAULT = 1
66
68
67
- class I2CRegisterTransactions ():
68
-
69
+ class I2CRegisterTransactions (HighLevelAnalyzer ):
70
+ # # List of settings that a user can set for this High Level Analyzer.
71
+ # my_string_setting = StringSetting()
72
+ # my_number_setting = NumberSetting(min_value=0, max_value=100)
73
+ # my_choices_setting = ChoicesSetting(choices=('A', 'B'))
74
+
75
+ # class MyHla(HighLevelAnalyzer):
76
+ # my_string_setting = StringSetting(label='Register map (JSON)')
77
+ # my_number_setting = NumberSetting(label='My Number', min_value=0, max_value=100)
78
+ # my_choices_setting = ChoicesSetting(label='My Choice', ['A', 'B'])
79
+ #
69
80
def __init__ (self ):
70
81
'''
71
82
Initialize this HLA.
@@ -83,6 +94,8 @@ def __init__(self):
83
94
self .register_map_file = None
84
95
self .current_bank = 0
85
96
self .current_map = {}
97
+ self .register_map_file = '/Users/bs/dev/tooling/i2c_txns/maps/register_map_v1.json'
98
+ self ._load_register_map ()
86
99
87
100
def get_capabilities (self ):
88
101
'''
@@ -117,42 +130,42 @@ def _load_register_map(self):
117
130
118
131
self .current_map = self .register_map [0 ]
119
132
120
- def set_settings (self , settings ):
121
- '''
122
- Handle the settings values chosen by the user, and return information about how to display the results that `decode` will return.
123
-
124
- This method will be called second, after `get_capbilities` and before `decode`.
125
- '''
126
- if 'Register map (json)' in settings and settings ['Register map (json)' ]:
127
- self .register_map_file = settings ['Register map (json)' ]
128
- print ("File is '%s'" % self .register_map_file )
129
- else :
130
- print ("No register map provided..." , end = "" )
131
- self .register_map_file = '/Users/bs/dev/logic_hlas/i2c_txns/register_map_v1.json'
132
- self ._load_register_map ()
133
-
134
- if 'Multi-byte auto-increment mode' in settings :
135
- mode_setting = settings ['Multi-byte auto-increment mode' ]
136
- if mode_setting == 'MODE_AUTO_INCREMENT_DEFAULT' :
137
- self .mode = MODE_AUTO_INCREMENT_DEFAULT
138
- elif mode_setting == 'MODE_AUTO_INCREMENT_DEFAULT' :
139
- self .mode = MODE_AUTO_INCREMENT_DEFAULT
140
-
141
- if 'Debug Print' in settings :
142
- print ("debug in settings:" , settings ['Debug Print' ])
143
- self ._debug = settings ['Debug Print' ] == 'True'
144
- print ("self._debug:" , self ._debug )
145
-
146
- return {
147
- 'result_types' : {
148
- 'i2c_frame ' : {
149
- 'format' : '{{data.out_str}}'
150
- },
151
- 'transaction' : {
152
- 'format' : '{{data.transaction_string}}'
153
- }
154
- }
155
- }
133
+ # def set_settings(self, settings):
134
+ # '''
135
+ # Handle the settings values chosen by the user, and return information about how to display the results that `decode` will return.
136
+
137
+ # This method will be called second, after `get_capbilities` and before `decode`.
138
+ # '''
139
+ # if 'Register map (json)' in settings and settings['Register map (json)']:
140
+ # self.register_map_file = settings['Register map (json)']
141
+ # print("File is '%s'"%self.register_map_file)
142
+ # else:
143
+ # print("No register map provided...", end="")
144
+ # self.register_map_file = '/Users/bs/dev/logic_hlas/i2c_txns/register_map_v1.json'
145
+ # self._load_register_map()
146
+
147
+ # if 'Multi-byte auto-increment mode' in settings:
148
+ # mode_setting = settings['Multi-byte auto-increment mode']
149
+ # if mode_setting == 'MODE_AUTO_INCREMENT_DEFAULT':
150
+ # self.mode = MODE_AUTO_INCREMENT_DEFAULT
151
+ # elif mode_setting == 'MODE_AUTO_INCREMENT_DEFAULT':
152
+ # self.mode = MODE_AUTO_INCREMENT_DEFAULT
153
+
154
+ # if 'Debug Print' in settings:
155
+ # print("debug in settings:", settings['Debug Print'])
156
+ # self._debug = settings['Debug Print'] == 'True'
157
+ # print("self._debug:", self._debug)
158
+
159
+ # return {
160
+ # 'result_types': {
161
+ # 'i2c_frame ': {
162
+ # 'format': '{{data.out_str}}'
163
+ # },
164
+ # 'transaction': {
165
+ # 'format': '{{data.transaction_string}}'
166
+ # }
167
+ # }
168
+ # }
156
169
157
170
def process_transaction (self ):
158
171
txn = self .current_transaction
@@ -189,26 +202,30 @@ def process_transaction(self):
189
202
'transaction_string' : transaction_string
190
203
}
191
204
}
205
+ new_frame = AnalyzerFrame ('transaction' ,
206
+ self .current_transaction .start_time , self .current_transaction .end_time , {
207
+ 'input_type' : self .current_frame .type
208
+ })
192
209
193
210
return new_frame
194
211
195
212
def _process_data_frame (self , frame ):
196
- byte = frame [ ' data' ] ['data' ][0 ]
213
+ byte = frame . data ['data' ][0 ]
197
214
198
215
199
216
self .current_transaction .data .append (byte )
200
217
201
218
def _process_address_frame (self , frame ):
202
- address_frame_data = frame [ ' data' ] ['address' ][0 ]
219
+ address_frame_data = frame . data ['address' ][0 ]
203
220
self .current_transaction .last_address_frame = address_frame_data
204
221
205
222
def _process_start_frame (self , frame ):
206
223
if self .current_transaction : # repeated start
207
224
return
208
- self .current_transaction = Transaction (frame [ ' start_time' ] )
225
+ self .current_transaction = Transaction (frame . start_time )
209
226
210
227
def _process_stop_frame (self , frame ):
211
- self .current_transaction .end_time = frame [ ' end_time' ]
228
+ self .current_transaction .end_time = frame . end_time
212
229
new_frame = self .process_transaction ()
213
230
self .current_transaction = None
214
231
@@ -217,7 +234,7 @@ def _process_stop_frame(self, frame):
217
234
def decode (self , frame ):
218
235
self .current_frame = frame
219
236
new_frame = None
220
- frame_type = frame [ ' type' ]
237
+ frame_type = frame . type
221
238
222
239
if self ._debug : print (frame_type .upper ())
223
240
@@ -245,5 +262,9 @@ def decode(self, frame):
245
262
246
263
return new_frame
247
264
265
+ # return AnalyzerFrame('mytype', frame.start_time, frame.end_time, {
266
+ # 'input_type': frame.type
267
+ # })
268
+
248
269
if self .current_transaction and self ._debug :
249
270
print (self .current_transaction )
0 commit comments