Skip to content

Commit e3f758b

Browse files
committed
Added 8bits/16bits data transfert mode selection for all E11 models.
Fixed setChannelVoltageRange() when LA is activated. Reduced command rate limitting to 5ms for newer models.
1 parent d57d0e0 commit e3f758b

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

scopehal/SiglentSCPIOscilloscope.cpp

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -134,10 +134,6 @@ SiglentSCPIOscilloscope::SiglentSCPIOscilloscope(SCPITransport* transport)
134134
, m_digitalAcqPointsValid(false)
135135
, m_highDefinition(false)
136136
{
137-
//Enable command rate limiting
138-
//TODO: only for some firmware versions or instrument SKUs?
139-
transport->EnableRateLimiting(chrono::milliseconds(50));
140-
141137
//standard initialization
142138
FlushConfigCache();
143139
IdentifyHardware();
@@ -416,6 +412,15 @@ void SiglentSCPIOscilloscope::IdentifyHardware()
416412
LogWarning("Model \"%s\" is unknown, available sample rates/memory depths may not be properly detected\n",
417413
m_model.c_str());
418414
}
415+
if(m_protocolId != PROTOCOL_E11 || m_modelid == MODEL_SIGLENT_SDS2000XP)
416+
{ // Enable command rate limiting => 50ms for older models
417+
m_transport->EnableRateLimiting(chrono::milliseconds(50));
418+
}
419+
else
420+
{ // Only 5 ms for newer models
421+
m_transport->EnableRateLimiting(chrono::milliseconds(5));
422+
}
423+
419424
}
420425
else
421426
{
@@ -2114,7 +2119,8 @@ bool SiglentSCPIOscilloscope::AcquireData()
21142119
analogWaveformData[i] = new char[acqBytes];
21152120
if(!paginated)
21162121
{ // All data fits one page
2117-
m_transport->SendCommand(":WAVEFORM:SOURCE C" + to_string(i + 1) + ";:WAVEFORM:DATA?");
2122+
m_transport->SendCommand(":WAVEFORM:SOURCE C" + to_string(i + 1));
2123+
m_transport->SendCommand(":WAVEFORM:DATA?");
21182124
analogWaveformDataSize[i] = ReadWaveformBlock(acqBytes, analogWaveformData[i], hdWorkaround);
21192125
// This is the 0x0a0a at the end
21202126
m_transport->ReadRawData(2, (unsigned char*)tmp);
@@ -2124,7 +2130,8 @@ bool SiglentSCPIOscilloscope::AcquireData()
21242130
m_transport->SendCommand(":WAVEFORM:SOURCE C" + to_string(i + 1));
21252131
for(uint64_t page = 0; page < pages; page++)
21262132
{
2127-
m_transport->SendCommand(":WAVEFORM:START "+ to_string(page*pageSize) + ";:WAVEFORM:DATA?");
2133+
m_transport->SendCommand(":WAVEFORM:START "+ to_string(page*pageSize));
2134+
m_transport->SendCommand(":WAVEFORM:DATA?");
21282135
analogWaveformDataSize[i] += ReadWaveformBlock(acqBytes-analogWaveformDataSize[i], analogWaveformData[i]+analogWaveformDataSize[i], hdWorkaround);
21292136
// This is the 0x0a0a at the end
21302137
m_transport->ReadRawData(2, (unsigned char*)tmp);
@@ -2530,6 +2537,10 @@ float SiglentSCPIOscilloscope::GetChannelVoltageRange(size_t i, size_t /*stream*
25302537

25312538
void SiglentSCPIOscilloscope::SetChannelVoltageRange(size_t i, size_t /*stream*/, float range)
25322539
{
2540+
// Only for analog channels
2541+
if(i >= m_analogChannelCount)
2542+
return;
2543+
25332544
float vdiv = range / 8;
25342545
m_channelVoltageRanges[i] = range;
25352546

@@ -5497,7 +5508,7 @@ void SiglentSCPIOscilloscope::SetFunctionChannelOutputImpedance(int chan, Functi
54975508
*/
54985509
void SiglentSCPIOscilloscope::ForceHDMode(bool mode)
54995510
{
5500-
if((m_modelid == MODEL_SIGLENT_SDS800X_HD || m_modelid == MODEL_SIGLENT_SDS2000X_HD) && mode != m_highDefinition)
5511+
if((m_protocolId == PROTOCOL_E11) && (mode != m_highDefinition))
55015512
{
55025513
m_highDefinition = mode;
55035514
sendOnly(":WAVEFORM:WIDTH %s", m_highDefinition ? "WORD" : "BYTE");

0 commit comments

Comments
 (0)