@@ -39,11 +39,9 @@ CruDmaChannel::CruDmaChannel(const Parameters& parameters)
3939 }
4040 }
4141
42- if (auto enabled = parameters.getGeneratorEnabled ()) {
43- if (enabled.get () == false ) {
44- BOOST_THROW_EXCEPTION (CruException ()
45- << ErrorInfo::Message (" CRU currently only supports operation with data generator" ));
46- }
42+ if (mLoopbackMode == LoopbackMode::Diu || mLoopbackMode == LoopbackMode::Siu) {
43+ BOOST_THROW_EXCEPTION (CruException () << ErrorInfo::Message (" CRU does not support given loopback mode" )
44+ << ErrorInfo::LoopbackMode (mLoopbackMode ));
4745 }
4846
4947 if (mFeatures .standalone ) {
@@ -89,9 +87,28 @@ void CruDmaChannel::deviceStartDma()
8987 initCru ();
9088 setBufferReady ();
9189
92- if ((mLoopbackMode == LoopbackMode::Internal) && mFeatures .dataSelection ) {
93- // Something with selecting the data source... [insert link to documentation here]
94- getBar ().setDataSource (Cru::Registers::DATA_SOURCE_SELECT_INTERNAL);
90+ if (mGeneratorEnabled ) {
91+ if (mLoopbackMode == LoopbackMode::Internal) {
92+ if (mFeatures .dataSelection ) {
93+ getBar ().setDataSource (Cru::Registers::DATA_SOURCE_SELECT_INTERNAL);
94+ } else {
95+ log (" Did not set internal data source, feature not supported by firmware" , InfoLogger::InfoLogger::Warning);
96+ }
97+ } else {
98+ BOOST_THROW_EXCEPTION (CruException ()
99+ << ErrorInfo::Message (" CRU only supports 'Internal' loopback for data generator" ));
100+ }
101+ } else {
102+ if (mLoopbackMode == LoopbackMode::None) {
103+ if (mFeatures .dataSelection ) {
104+ getBar ().setDataSource (Cru::Registers::DATA_SOURCE_SELECT_GBT);
105+ } else {
106+ log (" Did not set GBT data source, feature not supported by firmware" , InfoLogger::InfoLogger::Warning);
107+ }
108+ } else {
109+ BOOST_THROW_EXCEPTION (CruException ()
110+ << ErrorInfo::Message (" CRU only supports 'None' loopback when operating without data generator" ));
111+ }
95112 }
96113
97114 for (auto &link : mLinks ) {
0 commit comments