Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

- control-roc-read over the fiber seems to work #50

Merged
merged 1 commit into from
Oct 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 28 additions & 23 deletions otsdaq-mu2e-tracker/Ui/ControlRoc_Read_Par_t.hh
Original file line number Diff line number Diff line change
Expand Up @@ -9,31 +9,36 @@
// read -a 8 -t 8 -s 1 -l8 - T 10 -m 3 -p 1 -C FFFFFFFF -D FFFFFFFF -E FFFFFFFF
//-----------------------------------------------------------------------------
namespace trkdaq {
struct ControlRoc_Read_Par_t {
uint16_t adc_mode; // -a 8 (defailt: 0)
uint16_t tdc_mode; // -t 8 (default: 0)
uint16_t lookback; // -l 8 (default: 8)
uint16_t samples; // -s 1 (default: 16)
int triggers; // -T 10 (default: 0)
uint16_t chan_mask[6]; // FFFF FFFF FFFF FFFF FFFF FFFF
int pulser; // -p 1 (default: 0)
int delay; // -d ??? (default: 1)
int mode; // -m 3 ??? )default: 0)
//-----------------------------------------------------------------------------
// output parameters
//-----------------------------------------------------------------------------
uint16_t hvcal_mask1;
uint16_t hvcal_mask2;
uint16_t hvcal_mask3;
uint16_t hvcal_enable_pulser;
uint16_t output_mode;
uint16_t return_code;
struct ControlRoc_Read_Input_t {
uint16_t adc_mode; // -a 8 (defailt: 0) [0]
uint16_t tdc_mode; // -t 8 (default: 0) [1]
uint16_t num_lookback; // -l 8 (default: 8) [2]
uint16_t num_samples; // -s 1 (default: 16) [3] if>63, set to 63
uint16_t num_triggers[2]; // -T 10 (default: 0) [4-5]
uint16_t ch_mask[6]; // FFFF FFFF FFFF FFFF FFFF FFFF [6:11]
uint16_t enable_pulser; // -p 1 (default: 0) [12]
uint16_t marker_clock; // -m 3 ??? )default: 0) [13]
uint16_t mode; // [14] need to set mode=0
uint16_t clock; // [15] need to set clock=99
};
//-----------------------------------------------------------------------------
// the ones below are not passed to python readData
// output parameters : same as input , plus four words
//-----------------------------------------------------------------------------
int clock; // = 99 and not used by Monica (?)
int channel; // -c
std::string message; // -M
struct ControlRoc_Read_Output_t {
uint16_t adc_mode; // [0]
uint16_t tdc_mode; // [1]
uint16_t num_lookback; // [2]
uint16_t num_samples; // [3]
uint16_t num_triggers[2]; // [4-5]
uint16_t ch_mask[6]; // [6--11]
uint16_t enable_pulser; // [13]
uint16_t marker_clock; // [12]
uint16_t mode; // [14] returned 0
uint16_t clock; // [15] returned 99,
uint16_t digi_read_0xb; // [16]
uint16_t digi_read_0xe; // [17]
uint16_t digi_read_0xd; // [18]
uint16_t digi_read_0xc; // [19]
};
};

Expand Down
8 changes: 4 additions & 4 deletions otsdaq-mu2e-tracker/Ui/DtcInterface.hh
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,10 @@ namespace trkdaq {
//-----------------------------------------------------------------------------
int ControlRoc(const char* Command, void* Parameters);

int ControlRoc_Read(ControlRoc_Read_Par_t* Par,
int LinkMask = -1 ,
bool UpdateMask = false,
int PrintLevel = 0 );
int ControlRoc_Read(ControlRoc_Read_Input_t* Par,
int LinkMask = 0 ,
bool UpdateMask = false,
int PrintLevel = 0 );

int EmulateCfo() { return fEmulateCfo; }

Expand Down
59 changes: 40 additions & 19 deletions otsdaq-mu2e-tracker/Ui/DtcInterface_ControlRoc.cc
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ namespace trkdaq {
//-----------------------------------------------------------------------------
// what should it return ? - for now, return 0
//-----------------------------------------------------------------------------
int DtcInterface::ControlRoc_Read(ControlRoc_Read_Par_t* Par, int LinkMask, bool UpdateMask, int PrintLevel) {
int DtcInterface::ControlRoc_Read(ControlRoc_Read_Input_t* Par, int LinkMask, bool UpdateMask, int PrintLevel) {
//-----------------------------------------------------------------------------
// write parameters into reg 266 (via block write), sleep for some time,
// then wait till reg 128 returns 0x8000
Expand All @@ -29,27 +29,33 @@ namespace trkdaq {

vec.push_back(Par->adc_mode);
vec.push_back(Par->tdc_mode);
vec.push_back(Par->lookback);
vec.push_back(Par->num_lookback);

if (Par->num_samples > 63) {
printf("WARNING: num_samples = %i > 63, truncate to 63\n",Par->num_samples);
Par->num_samples = 63;
}
vec.push_back(Par->num_samples);

uint16_t w1 = ((Par->triggers ) & 0xffff);
uint16_t w2 = ((Par->triggers >> 16) & 0xffff);
uint16_t w1 = Par->num_triggers[0];
uint16_t w2 = Par->num_triggers[1];

vec.push_back(w1);
vec.push_back(w2);

for (int i=0; i<6; i++) vec.push_back(Par->chan_mask[i]);
for (int i=0; i<6; i++) vec.push_back(Par->ch_mask[i]);

vec.push_back(Par->samples);
vec.push_back(Par->pulser );
vec.push_back(Par->delay );
vec.push_back(Par->mode );
vec.push_back(Par->enable_pulser);
vec.push_back(Par->marker_clock );
vec.push_back(0 );
vec.push_back(99);

bool increment_address(false);

if (UpdateMask) fLinkMask = LinkMask;
if (UpdateMask and (LinkMask != 0)) fLinkMask = LinkMask;

for (int i=0; i<6; i++) {
int used = (LinkMask >> 4*i) & 0x1;
int used = (fLinkMask >> 4*i) & 0x1;
if (not used) continue;
auto roc = DTC_Link_ID(i);
fDtc->WriteROCBlock (roc,265,vec,false,increment_address,100);
Expand All @@ -68,15 +74,30 @@ namespace trkdaq {
nw = nw-4;
std::vector<uint16_t> v2;
fDtc->ReadROCBlock(v2,roc,265,nw,false,100);

if (PrintLevel > 0) {
PrintBuffer(v2.data(),nw);
if (PrintLevel > 1) {
trkdaq::ControlRoc_Read_Output_t* o = (trkdaq::ControlRoc_Read_Output_t*) v2.data();

printf("adc_mode : %i\n",o->adc_mode);
printf("tdc_mode : %i\n",o->tdc_mode);
printf("num_lookback : %i\n",o->num_lookback);
printf("num_samples : %i\n",o->num_samples);
printf("num_triggers : %5i %5i\n",o->num_triggers[0],o->num_triggers[1]);
printf("ch_mask : 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n",
o->ch_mask[0],o->ch_mask[1],o->ch_mask[2],o->ch_mask[3],o->ch_mask[4],o->ch_mask[5]);
printf("enable_pulser : %i\n",o->enable_pulser);
printf("marker_clock : %i\n",o->marker_clock);
printf("mode : %i\n",o->mode);
printf("clock : %i\n",o->clock);
printf("digi_read_0xb : 0x%04x\n",o->digi_read_0xb);
printf("digi_read_0xe : 0x%04x\n",o->digi_read_0xe);
printf("digi_read_0xd : 0x%04x\n",o->digi_read_0xd);
printf("digi_read_0xc : 0x%04x\n",o->digi_read_0xc);
}
}

PrintBuffer(v2.data(),nw);

Par->hvcal_mask1 = v2[13];
Par->hvcal_mask2 = v2[14];
Par->hvcal_mask3 = v2[15];
Par->hvcal_enable_pulser = v2[16];
Par->output_mode = v2[17];
Par->return_code = 0; // TBD
}
//-----------------------------------------------------------------------------
//
Expand Down
29 changes: 17 additions & 12 deletions scripts/daq_scripts.C
Original file line number Diff line number Diff line change
Expand Up @@ -138,25 +138,30 @@ int dtc_configure_ja(int Clock, int Reset, int PcieAddress = -1) {
}


//-----------------------------------------------------------------------------
// test of the 'READ' command implementation over the fiber
//-----------------------------------------------------------------------------
int dtc_control_roc_read(int PcieAddr = -1) {
DtcInterface* dtc_i = DtcInterface::Instance(PcieAddr);

ControlRoc_Read_Par_t par;
ControlRoc_Read_Input_t par;

par.adc_mode = 8;
par.tdc_mode = 0;
par.lookback = 8;
par.samples = 1;
par.triggers = 10;
par.adc_mode = 8;
par.tdc_mode = 0;
par.num_lookback = 8;
par.num_samples = 1;
par.num_triggers[0] = 10;
par.num_triggers[1] = 0;

for (int i=0; i<6; i++) par.chan_mask[i] = 0xffff;
for (int i=0; i<6; i++) par.ch_mask[i] = 0xffff;

par.pulser = 1;
par.delay = 1;
par.mode = 3; // marker_clock in Monica's code

dtc_i->ControlRoc_Read(&par);
par.enable_pulser = 1;
par.marker_clock = 3;
par.mode = 0; //
par.clock = 99; //

printf("dtc_i->fLinkMask: 0x%04x\n",dtc_i->fLinkMask);
dtc_i->ControlRoc_Read(&par,0,false,2);
return 0;
}

Expand Down