Re-arranged trigger source configuration

This commit is contained in:
2016-11-30 17:14:46 +01:00
parent 5ab32c3921
commit 51134fb2db
12 changed files with 126 additions and 2824 deletions
+5 -5
View File
@@ -170,7 +170,7 @@ void ConfigDialog::OnBoardSelect( wxCommandEvent& event )
m_osci->SetMultiBoard(true);
for (int i=1 ; i<m_osci->GetNumberOfBoards() ; i++) {
DRSBoard *b = m_frame->GetOsci()->GetBoard(i);
m_frame->SetTriggerSource(i, 4); // select external trigger
m_frame->SetTriggerConfig(i, (1<<4)); // select external trigger
m_frame->SetTriggerPolarity(i, false); // positive trigger
if (b->GetFirmwareVersion() < 21260) {
@@ -377,7 +377,7 @@ void ConfigDialog::OnButtonCalVolt( wxCommandEvent& event )
int tcalSource = b->GetTcalSource();
int flag1 = b->GetTriggerEnable(0);
int flag2 = b->GetTriggerEnable(1);
int trgSource = b->GetTriggerSource();
int trgConfig = b->GetTriggerConfig();
int trgDelay = b->GetTriggerDelay();
double range = b->GetInputRange();
int config = b->GetReadoutChannelConfig();
@@ -391,7 +391,7 @@ void ConfigDialog::OnButtonCalVolt( wxCommandEvent& event )
b->EnableTcal(tcalFreq, tcalLevel);
b->SelectClockSource(tcalSource);
b->EnableTrigger(flag1, flag2);
b->SetTriggerSource(trgSource);
b->SetTriggerConfig(trgConfig);
b->SetTriggerDelayPercent(trgDelay);
b->SetInputRange(range);
if (casc == 2)
@@ -437,7 +437,7 @@ void ConfigDialog::OnButtonCalTime( wxCommandEvent& event )
int tcalSource = b->GetTcalSource();
int flag1 = b->GetTriggerEnable(0);
int flag2 = b->GetTriggerEnable(1);
int trgSource = b->GetTriggerSource();
int trgConfig = b->GetTriggerConfig();
int trgDelay = b->GetTriggerDelay();
double range = b->GetInputRange();
int config = b->GetReadoutChannelConfig();
@@ -461,7 +461,7 @@ void ConfigDialog::OnButtonCalTime( wxCommandEvent& event )
b->EnableTcal(tcalFreq, tcalLevel);
b->SelectClockSource(tcalSource);
b->EnableTrigger(flag1, flag2);
b->SetTriggerSource(trgSource);
b->SetTriggerConfig(trgConfig);
b->SetTriggerDelayPercent(trgDelay);
b->SetInputRange(range);
b->SetChannelConfig(config, 8, 8);
+43 -42
View File
@@ -52,6 +52,7 @@ DOFrame_fb( parent )
m_color[2] = wxColor(255, 150, 150); // light red
m_color[3] = wxColor(150, 255, 150); // light green
m_color[4] = wxColor(170, 170, 170); // grey for ext trigger
m_color[5] = wxColor(170, 170, 170); // grey for combinatorial trigger
// colors for printing
m_pcolor[0] = wxColor(128, 128, 0); // dark yellow
@@ -59,6 +60,7 @@ DOFrame_fb( parent )
m_pcolor[2] = wxColor(255, 0, 0); // red
m_pcolor[3] = wxColor( 0, 255, 0); // green
m_pcolor[4] = wxColor(128, 128, 128); // grey for ext trigger
m_pcolor[5] = wxColor(128, 128, 128); // grey for combinatorial trigger
// initialize variables
m_acqPerSecond = 0;
@@ -104,7 +106,7 @@ DOFrame_fb( parent )
m_HOffset[b] = 0;
m_trgMode[b] = TM_AUTO;
m_trgSource[b] = 0; // CH1
m_trgConfig[b] = (1<<0); // CH1
m_trgLevel[b][0] = m_trgLevel[b][1] = m_trgLevel[b][2] = m_trgLevel[b][3] = 0.25;
m_trgDelay[b] = 0;
m_trgDelayNs[b] = 0;
@@ -240,10 +242,7 @@ DOFrame_fb( parent )
m_trgDelayNs[i] = m_osci->GetTriggerDelayNs();
m_osci->SetInputRange(m_range[i]);
m_osci->SetTriggerMode(m_trgMode[i]);
if (m_trgConfig[i])
m_osci->SetTriggerConfig(m_trgConfig[i]);
else
m_osci->SetTriggerSource(m_trgSource[i]);
m_osci->SetTriggerConfig(m_trgConfig[i]);
m_osci->SetTriggerLevel(m_trgLevel[0][i]);
m_osci->SetTriggerPolarity(m_trgNegative[i]);
m_osci->SetTriggerDelay(m_trgDelay[i]);
@@ -260,7 +259,7 @@ DOFrame_fb( parent )
if (m_multiBoard) {
m_osci->SetMultiBoard(true);
for (int i=1 ; i<m_osci->GetNumberOfBoards() ; i++) {
SetTriggerSource(i, 4); // select external trigger
SetTriggerConfig(i, (1<<4)); // select external trigger
SetTriggerPolarity(i, false); // positive trigger
}
m_osci->SelectBoard(m_board);
@@ -363,13 +362,11 @@ void DOFrame::UpdateControls()
m_rbAuto->Enable(false);
m_rbNormal->Enable(false);
m_bpPolarity->Enable(false);
m_rbSource->Enable(false);
} else {
m_slTrgLevel->Enable(true);
m_rbAuto->Enable(true);
m_rbNormal->Enable(true);
m_bpPolarity->Enable(true);
m_rbSource->Enable(true);
m_btTrgCfg->Enable();
}
@@ -382,10 +379,10 @@ void DOFrame::UpdateControls()
m_bpPolarity->SetBitmapLabel(wxBitmap(neg_xpm));
else
m_bpPolarity->SetBitmapLabel(wxBitmap(pos_xpm));
m_rbSource->SetSelection(m_trgSource[m_board]);
m_rbSource->Enable(5, false); // disable "X" button
m_rbSource->SetSelection(GetTriggerChannel(m_board));
m_slTrgDelay->SetValue(100-m_trgDelay[m_board]);
if (m_trgConfig[m_board])
m_rbSource->Enable(false);
m_btCh1->SetValue(m_chnOn[m_board][0]);
m_btCh2->SetValue(m_chnOn[m_board][1]);
@@ -549,8 +546,6 @@ void DOFrame::SaveConfig()
mxml_write_element(xml, "TrgMode", str);
sprintf(str, "%d", m_trgNegative[b]);
mxml_write_element(xml, "TrgNegative", str);
sprintf(str, "%d", m_trgSource[b]);
mxml_write_element(xml, "TrgSource", str);
sprintf(str, "%d", m_trgDelay[b]);
mxml_write_element(xml, "TrgDelay", str);
sprintf(str, "%d", m_trgConfig[b]);
@@ -676,8 +671,6 @@ void DOFrame::LoadConfig(char *error, int size)
if (node) m_trgMode[idx] = atoi(mxml_get_value(node));
node = mxml_find_node(b, "TrgNegative");
if (node) m_trgNegative[idx] = atoi(mxml_get_value(node)) == 1;
node = mxml_find_node(b, "TrgSource");
if (node) m_trgSource[idx] = atoi(mxml_get_value(node));
node = mxml_find_node(b, "TrgDelay");
if (node) m_trgDelay[idx] = atoi(mxml_get_value(node));
node = mxml_find_node(b, "TrgConfig");
@@ -864,7 +857,9 @@ void DOFrame::OnTrgLevelChange(wxScrollEvent& event)
double f = (-m_slTrgLevel->GetValue()) / 1000.0; // -0.5 ... 0.5
/* convert to voltage according to screen settings */
int chn = m_trgSource[m_board];
int chn = GetTriggerChannel(m_board);
if (chn > 3)
chn = 0;
m_trgLevel[m_board][0] = m_screen->GetScale(m_board, chn)*10*f/1000 + m_screen->GetOffset(m_board, chn);
m_trgLevel[m_board][1] = m_trgLevel[m_board][0];
m_trgLevel[m_board][2] = m_trgLevel[m_board][0];
@@ -968,14 +963,12 @@ void DOFrame::OnTrgButton(wxCommandEvent& event)
else
m_bpPolarity->SetBitmapLabel(wxBitmap(pos_xpm));
} else if (event.GetId() == ID_TR_SOURCE) {
m_trgSource[m_board] = m_rbSource->GetSelection();
m_trgConfig[m_board] = (1<<m_rbSource->GetSelection());
m_triggerDialog->SelectBoard(m_board);
}
m_osci->SetTriggerMode(m_trgMode[m_board]);
if (m_trgConfig[m_board])
m_osci->SetTriggerConfig(m_trgConfig[m_board]);
else
m_osci->SetTriggerSource(m_trgSource[m_board]);
m_osci->SetTriggerConfig(m_trgConfig[m_board]);
m_osci->SetTriggerPolarity(m_trgNegative[m_board]);
m_osci->SetTriggerDelay(m_trgDelay[m_board]);
m_lastTriggerUpdate = time(NULL);
@@ -984,15 +977,38 @@ void DOFrame::OnTrgButton(wxCommandEvent& event)
/*------------------------------------------------------------------*/
void DOFrame::SetTriggerSource(int b, int source)
void DOFrame::SetTriggerConfig(int b, int config)
{
m_trgSource[b] = source;
m_trgConfig[b] = config;
m_rbSource->SetSelection(GetTriggerChannel(b));
m_osci->SelectBoard(b);
m_osci->SetTriggerSource(source);
m_osci->SetTriggerConfig(config);
}
/*------------------------------------------------------------------*/
int DOFrame::GetTriggerChannel(int b)
{
int chn = -1;
int cfg = m_trgConfig[b];
for (int i=0 ; i<5 ; i++)
if (cfg & (1<<i)) {
if (chn != -1)
return 5; // return 5 if several channels set (display "X" in tigger channel)
chn = i;
cfg &= ~ (1<<i);
}
if (chn == -1)
return 5; // return 5 if no trigger selected
return chn;
}
/*------------------------------------------------------------------*/
void DOFrame::SetTriggerPolarity(int b, bool negative)
{
m_trgNegative[b] = negative;
@@ -1676,7 +1692,7 @@ void DOFrame::EnableTriggerConfig(bool flag)
/*------------------------------------------------------------------*/
void DOFrame::SetTriggerConfig(int id, bool flag)
void DOFrame::OnSetTriggerConfig(int id, bool flag)
{
int chn;
@@ -1729,29 +1745,14 @@ void DOFrame::SetTriggerConfig(int id, bool flag)
}
if ((m_trgConfig[m_board] & 0x7FFF) > 0) {
m_rbSource->Enable(false);
m_rbSource->SetSelection(GetTriggerChannel(m_board));
if (m_multiBoard) {
int b = m_board;
for (int i=0 ; i<m_osci->GetNumberOfBoards() ; i++) {
m_board = i;
m_osci->SetTriggerConfig(m_trgConfig[i]);
m_osci->GetBoard(i)->SetTriggerConfig(m_trgConfig[i]);
}
m_board = b;
} else {
m_osci->SetTriggerConfig(m_trgConfig[m_board]);
}
} else {
m_rbSource->Enable(true);
if (m_multiBoard) {
int b = m_board;
for (int i=0 ; i<m_osci->GetNumberOfBoards() ; i++) {
m_board = i;
m_osci->SetTriggerSource(m_trgSource[i]);
}
m_board = b;
} else {
m_osci->SetTriggerSource(m_trgSource[m_board]);
}
}
}
+6 -6
View File
@@ -51,10 +51,11 @@ public:
double GetTrgLevel(int i) { return m_trgLevel[m_board][i]; }
bool IsTrgConfigEnabled() { return m_trgConfigEnabled[m_board]; }
int GetTrgMode() { return m_trgMode[m_board]; }
int GetTrgSource(int b) { return m_trgSource[b]; }
int GetTrgPolarity() { return m_trgNegative[m_board]; }
double GetTrgDelay() { return m_trgDelayNs[m_board]; }
int GetTriggerConfig() { return m_trgConfig[m_board]; }
int GetTriggerConfig(int b) { return m_trgConfig[b]; }
int GetTriggerChannel(int b);
double GetTrgPosition(int board);
time_t GetLastTriggerUpdate() { return m_lastTriggerUpdate; }
bool IsIdle();
@@ -91,8 +92,8 @@ public:
void ToggleControls();
void SetMeasurement(int id, bool flag);
void SetMathDisplay(int id, bool flag);
void SetTriggerConfig(int id, bool flag);
void SetTriggerSource(int b, int source);
void OnSetTriggerConfig(int id, bool flag);
void SetTriggerConfig(int id, int config);
void SetTriggerPolarity(int b, bool negative);
bool IsTranspTrigger() { return m_transpTrigger; }
void SetStat(bool flag);
@@ -179,7 +180,6 @@ private:
double m_trgLevel[MAX_N_BOARDS][4];
int m_trgMode[MAX_N_BOARDS];
bool m_trgNegative[MAX_N_BOARDS];
int m_trgSource[MAX_N_BOARDS];
int m_trgDelay[MAX_N_BOARDS];
double m_trgDelayNs[MAX_N_BOARDS];
int m_trgConfig[MAX_N_BOARDS];
@@ -198,8 +198,8 @@ private:
bool m_spikeRemoval;
bool m_displayScalers;
wxColour m_color[5];
wxColour m_pcolor[5];
wxColour m_color[6];
wxColour m_pcolor[6];
int m_acquisitions;
wxStopWatch m_stopWatch;
+21 -30
View File
@@ -309,13 +309,13 @@ void DOScreen::DrawScopeBottom(wxDC& dc, int board, int x1, int y1, int width, b
dc.DrawRoundedRectangle(x_start-20-w-20, y1+3, w+10+20, 15, 2);
dc.DrawText(wxst, x_start-15-w, y1+3);
} else {
if (m_frame->GetTrgSource(board) == 4)
if (m_frame->GetTriggerChannel(board) == 4)
wxst.Printf(wxT("EXT %1.0lf ns"), m_frame->GetTrgDelay());
else
wxst.Printf(wxT("%1.3lf V %1.0lf ns"), m_frame->GetTrgLevel(m_frame->GetTrgSource(board)), m_frame->GetTrgDelay());
wxst.Printf(wxT("%1.3lf V %1.0lf ns"), m_frame->GetTrgLevel(m_frame->GetTriggerChannel(board)), m_frame->GetTrgDelay());
dc.GetTextExtent(wxst, &w, &h);
dc.SetPen(wxPen(*wxLIGHT_GREY, 1, wxSOLID));
dc.SetBrush(m_frame->GetColor(m_frame->GetTrgSource(board), printing));
dc.SetBrush(m_frame->GetColor(m_frame->GetTriggerChannel(board), printing));
dc.DrawRoundedRectangle(x_start-20-w-20, y1+3, w+10+20, 15, 2);
dc.DrawText(wxst, x_start-15-w, y1+3);
}
@@ -486,30 +486,21 @@ void DOScreen::DrawWaveforms(wxDC& dc, int wfIndex, bool printing)
// draw trigger level
for (int channel=0 ; channel<4 ; channel++) {
if (!m_frame->GetTriggerConfig() && m_frame->GetTrgSource(m_board) < 4 && channel != m_frame->GetTrgSource(m_board))
continue;
if (!m_frame->GetTriggerConfig() && m_frame->GetTrgSource(m_board) == 4)
continue;
double v = (m_frame->GetTrgLevel(channel) - m_offset[m_board][channel])*1000;
y = (int) ((m_y1[m_board]+m_y2[m_board])/2-(v/10.0/m_scaleTable[m_scale[m_board][channel]]*(m_y2[m_board]-m_y1[m_board]) + 0.5));
p[0] = wxPoint(-8, 0);
p[1] = wxPoint( 0, -5);
p[2] = wxPoint( 0, 5);
if (m_frame->GetTriggerConfig() &&
(m_frame->GetTrgLevel(channel) == m_frame->GetTrgLevel((channel+1) % 4) ||
m_frame->GetTrgLevel(channel) == m_frame->GetTrgLevel((channel+2) % 4) ||
m_frame->GetTrgLevel(channel) == m_frame->GetTrgLevel((channel+3) % 4))) {
dc.SetBrush(m_frame->GetColor(4, printing)); // gray if two levels overlap
dc.SetPen(m_frame->GetColor(4, printing));
} else {
dc.SetBrush(m_frame->GetColor(channel, printing));
dc.SetPen(m_frame->GetColor(channel, printing));
}
dc.DrawPolygon(3, p, m_x2[m_board]-2, y);
if (time(NULL) - m_frame->GetLastTriggerUpdate() < 2 && !m_frame->IsFirst()) {
dc.DrawLine(m_x1[m_board], y, m_x2[m_board]-2, y);
if ((m_frame->GetTriggerConfig() & (1 << channel)) ||
(m_frame->GetTriggerConfig() & (1 << (channel+8)))) {
double v = (m_frame->GetTrgLevel(channel) - m_offset[m_board][channel])*1000;
y = (int) ((m_y1[m_board]+m_y2[m_board])/2-(v/10.0/m_scaleTable[m_scale[m_board][channel]]*(m_y2[m_board]-m_y1[m_board]) + 0.5));
p[0] = wxPoint(-8, 0);
p[1] = wxPoint( 0, -5);
p[2] = wxPoint( 0, 5);
dc.SetBrush(m_frame->GetColor(channel, printing));
dc.SetPen(m_frame->GetColor(channel, printing));
dc.DrawPolygon(3, p, m_x2[m_board]-2, y);
if (time(NULL) - m_frame->GetLastTriggerUpdate() < 2 && !m_frame->IsFirst()) {
dc.DrawLine(m_x1[m_board], y, m_x2[m_board]-2, y);
}
}
}
@@ -520,14 +511,14 @@ void DOScreen::DrawWaveforms(wxDC& dc, int wfIndex, bool printing)
p[3] = wxPoint( 0, 11);
p[4] = wxPoint( -1, 11);
p[5] = wxPoint(-5, 7);
dc.SetBrush(m_frame->GetColor(m_frame->GetTrgSource(m_board), printing));
dc.SetPen(m_frame->GetColor(m_frame->GetTrgSource(m_board), printing));
dc.SetBrush(m_frame->GetColor(m_frame->GetTriggerChannel(m_board), printing));
dc.SetPen(m_frame->GetColor(m_frame->GetTriggerChannel(m_board), printing));
dc.DrawPolygon(6, p, (wxCoord)((m_frame->GetTrgPosition(m_board)-GetScreenOffset(m_board)) / GetScreenSize(m_board) * (m_x2[m_board]-m_x1[m_board]) + m_x1[m_board]),
(wxCoord)m_y1[m_board]);
wxst = wxT("T");
dc.SetPen(wxPen(*wxLIGHT_GREY, 1, wxSOLID));
dc.SetBrush(m_frame->GetColor(m_frame->GetTrgSource(m_board), printing));
dc.SetBrush(m_frame->GetColor(m_frame->GetTriggerChannel(m_board), printing));
dc.SetTextForeground(*wxBLACK);
dc.GetTextExtent(wxst, &w, &h);
dc.DrawText(wxst, (wxCoord)((m_frame->GetTrgPosition(m_board)-GetScreenOffset(m_board)) / GetScreenSize(m_board) * (m_x2[m_board]-m_x1[m_board]) + m_x1[m_board] - w/2 - 1),
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+27 -42
View File
@@ -30,13 +30,13 @@ Osci::Osci(double samplingSpeed, bool mthread)
m_triggerCell[0] = 0;
m_writeSR[0] = 0;
m_waveDepth = 1024;
m_trgMode = TM_AUTO;
m_trgNegative = false;
m_trgDelay = 0;
for (int i=0 ; i<4 ; i++)
m_trgLevel[i] = 0;
for (int b=0 ; b<MAX_N_BOARDS ; b++) {
m_trgSource[b] = 0;
m_trgNegative[b] = false;
m_trgMode[b] = TM_AUTO;
m_trgConfig[b] = 0;
m_refClk[b] = false;
for (int i=0 ; i<4 ; i++)
m_chnOn[b][i] = false;
@@ -203,12 +203,12 @@ int Osci::ScanBoards()
b->SetReadoutMode(1);
b->SetDominoActive(1);
if (b->GetBoardType() == 5 || b->GetBoardType() == 7 || b->GetBoardType() == 8 || b->GetBoardType() == 9) {
b->SetTranspMode(1); // Evaluation board with build-in trigger
b->EnableTrigger(0, 1); // Enable analog trigger
b->SetTriggerSource(0); // on CH0
b->SetTranspMode(1); // Evaluation board with build-in trigger
b->EnableTrigger(0, 1); // Enable analog trigger
b->SetTriggerConfig(1<<0); // on CH0
} else if (b->GetBoardType() == 6) {
b->SetTranspMode(0); // VPC Mezzanine board
b->EnableTrigger(0, 0); // Disable analog trigger
b->SetTranspMode(0); // VPC Mezzanine board
b->EnableTrigger(0, 0); // Disable analog trigger
}
b->SetRefclk(0);
b->SetFrequency(m_samplingSpeed, true);
@@ -1170,7 +1170,7 @@ void Osci::SetTriggerLevel(double level)
void Osci::SetTriggerPolarity(bool negative)
{
m_trgNegative = negative;
m_trgNegative[m_board] = negative;
if (m_drs->GetNumberOfBoards() > 0)
m_drs->GetBoard(m_board)->SetTriggerPolarity(negative);
@@ -1218,32 +1218,11 @@ double Osci::GetTriggerDelayNs()
/*------------------------------------------------------------------*/
void Osci::SetTriggerSource(int source)
{
m_trgSource[m_board] = source;
if (m_drs->GetNumberOfBoards() > 0) {
if (m_drs->GetBoard(m_board)->GetBoardType() == 8 || m_drs->GetBoard(m_board)->GetBoardType() == 9) {
m_drs->GetBoard(m_board)->EnableTrigger(1, 0); // enable trigger
m_drs->GetBoard(m_board)->SetTriggerSource(1 << source); // simple or of single channel
} else {
if (source == 4)
m_drs->GetBoard(m_board)->EnableTrigger(1, 0); // external trigger
else {
m_drs->GetBoard(m_board)->EnableTrigger(0, 1); // analog trigger
m_drs->GetBoard(m_board)->SetTriggerSource(source);
}
}
}
}
/*------------------------------------------------------------------*/
void Osci::SetTriggerConfig(int tc)
{
if (m_drs->GetBoard(m_board)->GetBoardType() == 8 || m_drs->GetBoard(m_board)->GetBoardType() == 9) {
m_drs->GetBoard(m_board)->EnableTrigger(1, 0); // enable trigger
m_drs->GetBoard(m_board)->SetTriggerSource(tc);
m_drs->GetBoard(m_board)->SetTriggerConfig(tc);
}
}
@@ -1319,34 +1298,40 @@ unsigned int Osci::GetScaler(int channel)
void Osci::CorrectTriggerPoint(double t)
{
int i, n, min_i;
int i, n, min_i, trgChn;
double min_dt, dt, t0, t1, trigPoint[2*kNumberOfBins];
float *pt;
/*---- shift first channel according to trigger point ----*/
if (m_trgSource[0] == 3 && m_clkOn)
for (i=trgChn=0 ; i<5 ; i++)
if (m_trgConfig[0] & (1<<i)) {
trgChn = i;
break;
}
if (trgChn == 3 && m_clkOn)
pt = m_timeClk[0];
else
pt = m_time[0][m_trgSource[0]];
pt = m_time[0][trgChn];
if (m_trgSource[0] < 4) {
if (trgChn < 4) {
// search and store all points
for (i = n = 0 ; i<m_waveDepth-1 ; i++) {
if (m_trgNegative) {
if (m_waveform[0][m_trgSource[0]][i] >= m_trgLevel[m_trgSource[0]]*1000 &&
m_waveform[0][m_trgSource[0]][i+1] < m_trgLevel[m_trgSource[0]]*1000) {
if (m_trgNegative[m_board]) {
if (m_waveform[0][trgChn][i] >= m_trgLevel[trgChn]*1000 &&
m_waveform[0][trgChn][i+1] < m_trgLevel[trgChn]*1000) {
dt = pt[i+1] - pt[i];
dt = dt * 1 / (1 + (m_trgLevel[m_trgSource[0]]*1000-m_waveform[0][m_trgSource[0]][i+1])/(m_waveform[0][m_trgSource[0]][i]-m_trgLevel[m_trgSource[0]]*1000));
dt = dt * 1 / (1 + (m_trgLevel[trgChn]*1000-m_waveform[0][trgChn][i+1])/(m_waveform[0][trgChn][i]-m_trgLevel[trgChn]*1000));
trigPoint[n++] = pt[i] + dt;
}
} else {
if (m_waveform[0][m_trgSource[0]][i] <= m_trgLevel[m_trgSource[0]]*1000 &&
m_waveform[0][m_trgSource[0]][i+1] > m_trgLevel[m_trgSource[0]]*1000) {
if (m_waveform[0][trgChn][i] <= m_trgLevel[trgChn]*1000 &&
m_waveform[0][trgChn][i+1] > m_trgLevel[trgChn]*1000) {
dt = pt[i+1] - pt[i];
dt = dt * 1 / (1 + (m_waveform[0][m_trgSource[0]][i+1]-m_trgLevel[m_trgSource[0]]*1000)/(m_trgLevel[m_trgSource[0]]*1000-m_waveform[0][m_trgSource[0]][i]));
dt = dt * 1 / (1 + (m_waveform[0][trgChn][i+1]-m_trgLevel[trgChn]*1000)/(m_trgLevel[trgChn]*1000-m_waveform[0][trgChn][i]));
trigPoint[n++] = pt[i] + dt;
}
}
+6 -7
View File
@@ -96,10 +96,9 @@ public:
void SetTriggerDelay(int delay);
int GetTriggerDelay();
double GetTriggerDelayNs();
void SetTriggerMode(int mode) { m_trgMode = mode; }
int GetTriggerMode() { return m_trgMode; }
void SetTriggerSource(int source);
int GetTriggerSource() { return m_trgSource[m_board]; }
void SetTriggerMode(int mode) { m_trgMode[m_board] = mode; }
int GetTriggerMode() { return m_trgMode[m_board]; }
int GetTriggerConfig() { return m_trgConfig[m_board]; }
void SetTriggerConfig(int tc);
void SetRefclk(int board, bool flag);
void SetChnOn(int board, int chn, bool flag);
@@ -140,9 +139,9 @@ private:
int m_writeSR[MAX_N_BOARDS];
int m_boardSerial[MAX_N_BOARDS];
int m_waveDepth;
int m_trgMode;
int m_trgSource[MAX_N_BOARDS];
bool m_trgNegative;
int m_trgMode[MAX_N_BOARDS];
int m_trgConfig[MAX_N_BOARDS];
bool m_trgNegative[MAX_N_BOARDS];
int m_trgDelay;
double m_trgLevel[4];
bool m_chnOn[MAX_N_BOARDS][4];
+1 -1
View File
@@ -109,7 +109,7 @@ void TriggerDialog::OnButton( wxCommandEvent& event )
m_cbANDEXT->Enable();
}
}
m_frame->SetTriggerConfig(event.GetId(), event.IsChecked());
m_frame->OnSetTriggerConfig(event.GetId(), event.IsChecked());
}
void TriggerDialog::OnTriggerLevel( wxCommandEvent& event )
+2 -2
View File
@@ -1571,7 +1571,7 @@
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="choices">&quot;1&quot; &quot;2&quot; &quot;3&quot; &quot;4&quot; &quot;E&quot;</property>
<property name="choices">&quot;1&quot; &quot;2&quot; &quot;3&quot; &quot;4&quot; &quot;E&quot; &quot;X&quot;</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
@@ -1603,7 +1603,7 @@
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">1</property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxRA_SPECIFY_ROWS</property>
+3 -3
View File
@@ -510,7 +510,7 @@ protected:
int fNMultiBuffer;
int fTriggerEnable1;
int fTriggerEnable2;
int fTriggerSource;
int fTriggerConfig;
int fTriggerDelay;
double fTriggerDelayNs;
int fSyncDelay;
@@ -645,8 +645,8 @@ public:
int SetTriggerLevel(double value);
int SetIndividualTriggerLevel(int channel, double voltage);
int SetTriggerPolarity(bool negative);
int SetTriggerSource(int source);
int GetTriggerSource() { return fTriggerSource; }
int SetTriggerConfig(int source);
int GetTriggerConfig() { return fTriggerConfig; }
int SetDelayedStart(int flag);
int SetTranspMode(int flag);
int SetStandbyMode(int flag);
+10 -10
View File
@@ -474,7 +474,7 @@ DRSBoard::DRSBoard(MUSB_INTERFACE * musb_interface, int usb_slot)
, fNMultiBuffer(0)
, fTriggerEnable1(0)
, fTriggerEnable2(0)
, fTriggerSource(0)
, fTriggerConfig(0)
, fTriggerDelay(0)
, fTriggerDelayNs(0)
, fSyncDelay(0)
@@ -566,7 +566,7 @@ DRSBoard::DRSBoard(MVME_INTERFACE * mvme_interface, mvme_addr_t base_address, in
, fNMultiBuffer(0)
, fTriggerEnable1(0)
, fTriggerEnable2(0)
, fTriggerSource(0)
, fTriggerConfig(0)
, fTriggerDelay(0)
, fTriggerDelayNs(0)
, fSyncDelay(0)
@@ -662,7 +662,7 @@ void DRSBoard::ConstructBoard()
}
fTriggerEnable1 = (bits & BIT_ENABLE_TRIGGER1) > 0;
fTriggerEnable2 = (bits & BIT_ENABLE_TRIGGER2) > 0;
fTriggerSource = ((bits & BIT_TR_SOURCE1) > 0) | (((bits & BIT_TR_SOURCE2) > 0) << 1);
fTriggerConfig = ((bits & BIT_TR_SOURCE1) > 0) | (((bits & BIT_TR_SOURCE2) > 0) << 1);
fReadoutMode = (bits & BIT_READOUT_MODE) > 0;
Read(T_CTRL, &fReadPointer, REG_READ_POINTER, 2);
fADCClkInvert = (bits & BIT_ADCCLK_INVERT) > 0;
@@ -1979,7 +1979,7 @@ int DRSBoard::Init()
fReadPointer = 0;
fTriggerEnable1 = 0;
fTriggerEnable2 = 0;
fTriggerSource = 0;
fTriggerConfig = 0;
fTriggerDelay = 0;
fTriggerDelayNs = 0;
fSyncDelay = 0;
@@ -2005,7 +2005,7 @@ int DRSBoard::Init()
SetDominoMode(fDominoMode);
SetReadoutMode(fReadoutMode);
EnableTrigger(fTriggerEnable1, fTriggerEnable2);
SetTriggerSource(fTriggerSource);
SetTriggerConfig(fTriggerConfig);
SetTriggerDelayPercent(0);
SetSyncDelay(fSyncDelay);
SetDominoActive(fDominoActive);
@@ -2333,19 +2333,19 @@ int DRSBoard::SetReadoutDelay(int ticks)
/*------------------------------------------------------------------*/
int DRSBoard::SetTriggerSource(int source)
int DRSBoard::SetTriggerConfig(int config)
{
short int reg;
fTriggerSource = source;
fTriggerConfig = config;
if (fBoardType == 5 || fBoardType == 7) {
// Set trigger source
// 0=CH1, 1=CH2, 2=CH3, 3=CH4
if (source & 1)
if (config & 1)
fCtrlBits |= BIT_TR_SOURCE1;
else
fCtrlBits &= ~BIT_TR_SOURCE1;
if (source & 2)
if (config & 2)
fCtrlBits |= BIT_TR_SOURCE2;
else
fCtrlBits &= ~BIT_TR_SOURCE2;
@@ -2356,7 +2356,7 @@ int DRSBoard::SetTriggerSource(int source)
// OR Bit0=CH1, Bit1=CH2, Bit2=CH3, Bit3=CH4, Bit4=EXT
// AND Bit8=CH1, Bit9=CH2, Bit10=CH3, Bit11=CH4, Bit12=EXT
// TRANSP Bit15
reg = (unsigned short) source;
reg = (unsigned short) config;
Write(T_CTRL, REG_TRG_CONFIG, &reg, 2);
}