30 DEVICE: uhal device identifier
31 IDS: id(s) of the target endpoint(s).
34 lDevice = obj.mConnectionManager.getDevice(str(device))
36 lDevice.setTimeoutPeriod(obj.mTimeout)
39 echo(
'Created HSI device')
40 lTopDesign = lDevice.getNode(
'')
41 lBoardInfo = toolbox.readSubNodes(lDevice.getNode(
'io.config'),
False)
44 if lBoardInfo[
'board_type'].value()
in kLibrarySupportedBoards
and lBoardInfo[
'design_type'].value()
in kLibrarySupportedDesigns:
45 lTopDesign.validate_firmware_version()
47 echo(lDevice.getNode(
'io').get_hardware_info())
49 secho(
"Failed to retrieve hardware information! I2C issue? Initial board reset needed?", fg=
'yellow')
51 secho(
"Error: {}".format(e), fg=
'red')
54 obj.mEndpoint = lDevice.getNode(
'endpoint0')
55 obj.mTopDesign = lDevice.getNode(
'')
56 obj.mHSI = obj.mTopDesign.get_hsi_node()
86def configure(ctx, obj, src, re_mask, fe_mask, inv_mask, rate):
88 Configure the hsi in the hsi wrapper block.
93 lTopDesign = obj.mTopDesign
96 lTopDesign.configure_hsi(src, re_mask, fe_mask, inv_mask, rate)
98 secho(
"HSI configured", fg=
'green')
106@hsi.command('start', short_help='Start the hsi triggering and the writing events into buffer.')
151def read(ctx, obj, readall, continuous, print_out, read_period, save, file_name):
153 Read the content of the endpoint master readout buffer.
155 lDevice = obj.mDevice
160 secho(
"[INFO] Starting HSI data readout", fg=
'green')
161 if not (save
or print_out):
162 secho(
'[WARNING] you have chosen to neither save or print the HSI data', fg=
'yellow')
165 h5_file_name = datetime.now().strftime(
"hsi_data_%d_%m_%Y_%H_%M_%S.hdf5")
166 if file_name
is not None:
167 h5_file_name=file_name
169 f = h5py.File(h5_file_name,
"w")
170 hsi_dataset = f.create_dataset(
"hsi_frames", (0,7), maxshape=(
None, 7), chunks=
True, dtype=
'u4')
172 if file_name
is not None:
173 secho(
'[WARNING] You have provided a file name but chosen not to save the readout data', fg=
'yellow')
178 hsi_words = lHSI.read_data_buffer(n_words,
False,
False)
179 n_hsi_events = len(hsi_words) // kHSIWordsNumber
182 hsi_dataset_start_index=hsi_dataset.shape[0]
183 hsi_dataset.resize(hsi_dataset_start_index+n_hsi_events, axis=0)
185 if (len(hsi_words) % kHSIWordsNumber == 0
and hsi_words.size() > 0):
187 for i
in range(0,n_hsi_events):
188 start_index = i * kHSIWordsNumber
189 end_index = start_index + kHSIWordsNumber
190 raw_event=hsi_words[start_index:end_index]
192 header = raw_event[0]
193 ts_low = raw_event[1]
194 ts_high = raw_event[2]
196 trigger = raw_event[4]
198 ts = ts_low | (ts_high << 32)
201 counter = header & 0x0000ffff
203 if (header >> 16) != 0xaa00:
204 secho(
"[ERROR] Invalid HSIEventHeader", fg=
'red')
208 secho(
"[ERROR] Invalid HSIEvent timestamp", fg=
'red')
211 delta_ticks=ts-last_ts
217 print(f
"[INFO] got event: {counter} ts: {ts} signals: {data} delta ts: {delta_ticks}")
219 read_events=read_events+1
221 hsi_dataset[hsi_dataset_start_index+i,0]=(0x1 << 6) | 0x1
222 hsi_dataset[hsi_dataset_start_index+i,1]=ts_low
223 hsi_dataset[hsi_dataset_start_index+i,2]=ts_high
224 hsi_dataset[hsi_dataset_start_index+i,3]=data
225 hsi_dataset[hsi_dataset_start_index+i,4]=0x0
226 hsi_dataset[hsi_dataset_start_index+i,5]=trigger
227 hsi_dataset[hsi_dataset_start_index+i,6]=counter
229 elif len(hsi_words) != 0:
230 secho(f
"[ERROR] unexpected n words {len(hsi_words)}", fg=
'red')
232 secho(f
"[INFO] Stopping HSI data readout after {read_events} events", fg=
'green')
234 time.sleep(read_period*1e-3)
238 echo(lHSI.get_data_buffer_table(readall,
False))
read(ctx, obj, readall, continuous, print_out, read_period, save, file_name)