DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
tmc_gen.py
Go to the documentation of this file.
1# testapp_noreadout_two_process.py
2
3# This python configuration produces *two* json configuration files
4# that together form a MiniDAQApp with the same functionality as
5# MiniDAQApp v1, but in two processes. One process contains the
6# TriggerDecisionEmulator, while the other process contains everything
7# else.
8#
9# As with testapp_noreadout_confgen.py
10# in this directory, no modules from the readout package are used: the
11# fragments are provided by the FakeDataProdModule module from dfmodules
12
13import math
14from rich.console import Console
15console = Console()
16
17# Set moo schema search path
18from dunedaq.env import get_moo_model_path
19import moo.io
20moo.io.default_load_path = get_moo_model_path()
21
22# Load configuration types
23import moo.otypes
24moo.otypes.load_types('timinglibs/timingmastercontroller.jsonnet')
25import dunedaq.timinglibs.timingmastercontroller as tmc
26
27from daqconf.core.app import App, ModuleGraph
28from daqconf.core.daqmodule import DAQModule
29from daqconf.core.conf_utils import Direction
30
31#===============================================================================
32def get_tmc_app(FIRMWARE_TYPE='pdii',
33 MASTER_DEVICE_NAME="",
34 MASTER_ENDPOINT_SCAN_PERIOD=0,
35 MASTER_CLOCK_FILE="",
36 MASTER_CLOCK_SOURCE=255,
37 MONITORED_ENDPOINTS=[],
38 TIMING_SESSION="",
39 HARDWARE_STATE_RECOVERY_ENABLED=True,
40 HOST="localhost",
41 DEBUG=False):
42
43 modules = {}
44
45 if FIRMWARE_TYPE == 'pdi':
46 tmc_class='TimingMasterControllerPDI'
47 elif FIRMWARE_TYPE == 'pdii':
48 tmc_class='TimingMasterControllerPDII'
49 else:
50 raise Exception(f"'Unexpected firmware type: {FIRMWARE_TYPE}")
51
52
53 modules = [DAQModule(name = "tmc",
54 plugin = tmc_class,
55 conf = tmc.ConfParams(
56 device=MASTER_DEVICE_NAME,
57 hardware_state_recovery_enabled=HARDWARE_STATE_RECOVERY_ENABLED,
58 timing_session_name=TIMING_SESSION,
59 endpoint_scan_period=MASTER_ENDPOINT_SCAN_PERIOD,
60 clock_config=MASTER_CLOCK_FILE,
61 clock_source=MASTER_CLOCK_SOURCE,
62 monitored_endpoints=MONITORED_ENDPOINTS,
63 ))]
64
65 mgraph = ModuleGraph(modules)
66 mgraph.add_endpoint("timing_cmds", "tmc.timing_cmds", "TimingHwCmd", Direction.OUT)
67 mgraph.add_endpoint(MASTER_DEVICE_NAME+"_info", "tmc."+MASTER_DEVICE_NAME+"_info", "JSON", Direction.IN, is_pubsub=True)
68
69 tmc_app = App(modulegraph=mgraph, host=HOST, name="TMCApp")
70
71 if DEBUG:
72 tmc_app.export("tmc_app.dot")
73
74 return tmc_app
get_tmc_app(FIRMWARE_TYPE='pdii', MASTER_DEVICE_NAME="", MASTER_ENDPOINT_SCAN_PERIOD=0, MASTER_CLOCK_FILE="", MASTER_CLOCK_SOURCE=255, MONITORED_ENDPOINTS=[], TIMING_SESSION="", HARDWARE_STATE_RECOVERY_ENABLED=True, HOST="localhost", DEBUG=False)
Definition tmc_gen.py:41