Skip to content

Commit 71fdc3b

Browse files
committed
working with 2.3.x HLA format
1 parent f767d95 commit 71fdc3b

File tree

1 file changed

+64
-43
lines changed

1 file changed

+64
-43
lines changed

i2c_transactions.py

Lines changed: 64 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# TODO: Measure time between calls/
22
import os
33
import json
4+
from saleae.analyzers import HighLevelAnalyzer, AnalyzerFrame, StringSetting, NumberSetting, ChoicesSetting
5+
46

57
class Transaction:
68
"""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):
6466
MODE_AUTO_INCREMENT_ADDR_MSB_HIGH = 0
6567
MODE_AUTO_INCREMENT_DEFAULT = 1
6668

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+
#
6980
def __init__(self):
7081
'''
7182
Initialize this HLA.
@@ -83,6 +94,8 @@ def __init__(self):
8394
self.register_map_file = None
8495
self.current_bank = 0
8596
self.current_map = {}
97+
self.register_map_file = '/Users/bs/dev/tooling/i2c_txns/maps/register_map_v1.json'
98+
self._load_register_map()
8699

87100
def get_capabilities(self):
88101
'''
@@ -117,42 +130,42 @@ def _load_register_map(self):
117130

118131
self.current_map = self.register_map[0]
119132

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+
# }
156169

157170
def process_transaction(self):
158171
txn = self.current_transaction
@@ -189,26 +202,30 @@ def process_transaction(self):
189202
'transaction_string' : transaction_string
190203
}
191204
}
205+
new_frame = AnalyzerFrame('transaction',
206+
self.current_transaction.start_time, self.current_transaction.end_time, {
207+
'input_type': self.current_frame.type
208+
})
192209

193210
return new_frame
194211

195212
def _process_data_frame(self, frame):
196-
byte = frame['data']['data'][0]
213+
byte = frame.data['data'][0]
197214

198215

199216
self.current_transaction.data.append(byte)
200217

201218
def _process_address_frame(self, frame):
202-
address_frame_data = frame['data']['address'][0]
219+
address_frame_data = frame.data['address'][0]
203220
self.current_transaction.last_address_frame = address_frame_data
204221

205222
def _process_start_frame(self, frame):
206223
if self.current_transaction: # repeated start
207224
return
208-
self.current_transaction = Transaction(frame['start_time'])
225+
self.current_transaction = Transaction(frame.start_time)
209226

210227
def _process_stop_frame(self, frame):
211-
self.current_transaction.end_time = frame['end_time']
228+
self.current_transaction.end_time = frame.end_time
212229
new_frame = self.process_transaction()
213230
self.current_transaction = None
214231

@@ -217,7 +234,7 @@ def _process_stop_frame(self, frame):
217234
def decode(self, frame):
218235
self.current_frame = frame
219236
new_frame = None
220-
frame_type = frame['type']
237+
frame_type = frame.type
221238

222239
if self._debug: print(frame_type.upper())
223240

@@ -245,5 +262,9 @@ def decode(self, frame):
245262

246263
return new_frame
247264

265+
# return AnalyzerFrame('mytype', frame.start_time, frame.end_time, {
266+
# 'input_type': frame.type
267+
# })
268+
248269
if self.current_transaction and self._debug:
249270
print(self.current_transaction)

0 commit comments

Comments
 (0)