27 ru_desc=None) -> App:
28 '''
29 Here an entire application controlling one physical FLX card is generated.
30 '''
31
32 if ru_desc.kind != 'flx':
33 raise ValueError(f"Felix controller app creation requrested for RU of kinf {ru_desc.kind}")
34
35
36 slrs = {}
37 for stream in ru_desc.streams:
38 if not stream.parameters.slr in slrs:
39 slrs[stream.parameters.slr] = []
40 slrs[stream.parameters.slr].append(stream.parameters.link)
41
42
43 for slr in slrs:
44 slrs[slr].sort()
45
46
47
48
49
50
51 modules = []
52 lus = []
53
54
55 for slr in slrs:
56 elinks = []
57 for l in slrs[slr]:
58 elinks.append(flx.Link(link_id=l, enabled=True, dma_desc=0, superchunk_factor=12))
59
60
61 lus.append(flx.LogicalUnit(log_unit_id=slr, emu_fanout=emulator_mode, links=elinks, ignore_alignment_mask=ignore_alignment_mask[slr]))
62
63
64 modules += [DAQModule(name = nickname,
65 plugin = 'FelixCardControllerModule',
66 conf = flx.Conf(card_id = card_id, logical_units = lus)
67 )]
68
69 mgraph = ModuleGraph(modules)
70 flx_app = App(modulegraph=mgraph, host=host, name=nickname)
71
72 return flx_app
73