Re-arranged trigger source configuration
This commit is contained in:
@@ -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
@@ -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]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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),
|
||||
|
||||
+1
-2072
File diff suppressed because one or more lines are too long
+1
-604
File diff suppressed because one or more lines are too long
+27
-42
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -1571,7 +1571,7 @@
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="choices">"1" "2" "3" "4" "E"</property>
|
||||
<property name="choices">"1" "2" "3" "4" "E" "X"</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>
|
||||
|
||||
@@ -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
@@ -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, ®, 2);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user