26from timing.common.definitions import kDesignMaster, kDesignOuroboros, kDesignOuroborosSim, kDesignEndpoint, kDesignFanout, kDesignOverlord, kDesignGaia, kDesignBoreas, kDesignKerberos, kDesignChronos, kDesignFanout
27from timing.common.definitions import kBoardNameMap, kCarrierNameMap, kDesignNameMap, TimestampTimebase, TimestampSource, ClockSource, kFreeRun, kInput0, kInput1, kInput2, kInput3, kUpstream, kSoftware
42def design(obj, device):
44 Timing master commands.
46 DEVICE: uhal device identifier
48 lDevice = obj.mConnectionManager.getDevice(str(device))
50 lDevice.setTimeoutPeriod(obj.mTimeout)
52 echo(
'Created device ' + click.style(lDevice.id(), fg=
'blue'))
54 lTopDesign = lDevice.getNode(
'')
56 lBoardInfo = toolbox.readSubNodes(lDevice.getNode(
'io.config'),
False)
59 echo(
"Design '{}' on board '{}' on carrier '{}' with frequency {} MHz".format(
60 style(kDesignNameMap[lBoardInfo[
'design_type'].value()], fg=
'blue'),
61 style(kBoardNameMap[lBoardInfo[
'board_type'].value()], fg=
'blue'),
62 style(kCarrierNameMap[lBoardInfo[
'carrier_type'].value()], fg=
'blue'),
63 style(str(lBoardInfo[
'clock_frequency'].value()/1e6), fg=
'blue')
66 if lBoardInfo[
'board_type'].value()
in kLibrarySupportedBoards
and lBoardInfo[
'design_type'].value()
in kLibrarySupportedDesigns:
67 lVersion = lTopDesign.read_firmware_version()
68 lTopDesign.validate_firmware_version()
71 echo(lDevice.getNode(
'io').get_hardware_info())
73 secho(
"Failed to retrieve hardware information! I2C issue? Initial board reset needed?", fg=
'yellow')
75 secho(
"Error: {}".format(e), fg=
'red')
77 echo(
"FW rev: {}".format(
78 style(format_firmware_version(lVersion), fg=
'cyan'),
82 obj.mTopDesign = lTopDesign
84 obj.mBoardType = lBoardInfo[
'board_type'].value()
85 obj.mCarrierType = lBoardInfo[
'carrier_type'].value()
86 obj.mDesignType = lBoardInfo[
'design_type'].value()
90@design.command('status', short_help="Print master status")
177 lTopDesign = obj.mTopDesign
178 lDesignType = obj.mDesignType
179 lDesignName=kDesignNameMap[lDesignType]
182 if clock_source
is None:
183 if lDesignType
in [kDesignMaster, kDesignBoreas, kDesignOuroboros, kDesignOuroborosSim]:
184 lClockSource=kFreeRun
185 lTimestampSource=kSoftware
186 elif lDesignType
in [kDesignEndpoint, kDesignChronos, kDesignFanout]:
188 elif lDesignType
in [kDesignGaia, kDesignKerberos]:
190 lTimestampSource=kUpstream
192 secho(
"Unable to match a default clock source for design {}.\nConfigure failed!".format(lDesignName), fg=
'red')
195 lClockSource=ClockSource.__members__[clock_source]
197 if ts_source
is None:
198 if lDesignType
in [kDesignMaster, kDesignBoreas, kDesignOuroboros, kDesignOuroborosSim]:
199 lTimestampSource=kSoftware
200 elif lDesignType
in [kDesignGaia, kDesignKerberos]:
201 lTimestampSource=kUpstream
202 elif lDesignType
not in [kDesignEndpoint, kDesignChronos, kDesignFanout]:
203 secho(
"Unable to match a default timestamp source for design {}.\nConfigure failed!".format(lDesignName), fg=
'red')
206 lTimestampSource=TimestampSource.__members__[ts_source]
208 if lDesignType
in [kDesignMaster, kDesignBoreas, kDesignGaia, kDesignKerberos]:
209 if lDesignType == kDesignGaia:
210 if timebase
is not None:
211 lTimebase=TimestampTimebase.__members__[timebase]
212 lTopDesign.configure(lClockSource, lTimestampSource, lTimebase)
214 secho(
"Supply ts timebase option for design Gaia!", fg=
'red')
216 lTopDesign.configure(lClockSource, lTimestampSource)
217 elif lDesignType
in [kDesignEndpoint, kDesignChronos, kDesignFanout]:
218 lTopDesign.configure(lClockSource)
220 secho(
"Configure not supported for design {}.\nConfigure failed!".format(lDesignName), fg=
'red')