18 #define DEBUG_MTL_INSTRUMENT_PT2026 1
19 #define DEBUG_MTL_INSTRUMENT_PT2026_ERRORS_ONLY 1
20 #if (defined(_DEBUG) && defined(DEBUG_MTL_INSTRUMENT_PT2026) && DEBUG_MTL_INSTRUMENT_PT2026)
21 #if (defined(DEBUG_MTL_INSTRUMENT_PT2026_ERRORS_ONLY) && DEBUG_MTL_INSTRUMENT_PT2026_ERRORS_ONLY)
22 #define MTL_INSTRUMENT_PT2026_DEBUG_COUT(__X__)
24 #define MTL_INSTRUMENT_PT2026_DEBUG_COUT(__X__) COUT(__X__)
26 #define MTL_INSTRUMENT_PT2026_DEBUG_CERR(__X__) CERR(__X__)
28 #define MTL_INSTRUMENT_PT2026_DEBUG_COUT(__X__)
29 #define MTL_INSTRUMENT_PT2026_DEBUG_CERR(__X__)
32 #define MTL_WRITE_AND_READ_STB_POLLING_PERIOD_MS 50
33 #define MTL_ERROR_LIST_HISTORY_LEN 20
34 #define MTL_ERROR_BUFFER_LEN 4096
36 #define MTL_F64_CONVERSION_LOCALE "en-US"
37 #elif defined(__APPLE__)
38 #define MTL_F64_CONVERSION_LOCALE "en_US"
40 #error "Selecting the locale format: unknown OS environment"
42 #define MTL_F64_CONVERSION_PRECISION 15
59 size_t l_Coma = rErrStr.find_first_of(
',');
60 rError.
Code = std::stoi(rErrStr.substr(0, l_Coma));
62 size_t l_OpenQuote = rErrStr.find_first_of(
'"', l_Coma + 1);
63 size_t l_CloseQuote = rErrStr.find_last_of(
'"');
64 rError.
Description = rErrStr.substr(l_OpenQuote + 1, l_CloseQuote - (l_OpenQuote + 1));
69 return std::to_string(Addr.
Member.
A) +
'.' +
70 std::to_string(Addr.
Member.
B) +
'.' +
71 std::to_string(Addr.
Member.
C) +
'.' +
76 std::ostringstream l_oss;
78 l_oss.imbue(std::locale(locale));
79 l_oss << std::scientific << std::setprecision(precision);
84 bool CPT2026Instrument::l_GetErrorList(
const std::string & rContext)
91 if (!ReadSTB(l_STB.
RawSTB))
99 enum eRetry { kRetryErrorRetrieving };
101 if (!Write(
":SYST:ERR?"))
102 throw kRetryErrorRetrieving;
104 throw kRetryErrorRetrieving;
106 catch (eRetry & rRetry)
108 if (rRetry == kRetryErrorRetrieving)
114 if (!Write(
":SYST:ERR?"))
121 std::string l_ErrStr = std::string(l_Error.data(), l_Error.size());
124 #if (defined(_DEBUG))
128 m_ErrorList.push(l_Err);
132 if (!ReadSTB(l_STB.
RawSTB))
145 bool CPT2026Instrument::l_WriteAndRead(
const std::string & rWriteStr,
CVISABuffer & rReadBuffer,
bool WaitForMAV)
155 if (!LockExclusive(m_Timeout_ms))
160 bool l_OPCAppended = !std::regex_match(rWriteStr, std::regex(
"\\*IDN\\?"));
163 l_Query = rWriteStr +
";*OPC?";
168 if (!Write(
reinterpret_cast<ViBuf
>(
const_cast<char *
>(l_Query.data())),
static_cast<ViUInt32
>(l_Query.size())))
173 if (!ReadSTB(l_STB.
RawSTB))
184 if (!ReadSTB(l_STB.
RawSTB))
197 if (!Read(rReadBuffer,
true))
200 if (!ReadSTB(l_STB.
RawSTB))
209 size_t l_MaxSizeToMatch =
sizeof(
";1\n") - 1;
210 std::match_results<std::vector<char>::iterator> m;
212 if (std::regex_match((rReadBuffer.
size() <= l_MaxSizeToMatch) ? rReadBuffer.
begin() : rReadBuffer.
end() -
static_cast<std::vector<char>::difference_type
>(l_MaxSizeToMatch), rReadBuffer.
end(), m, std::regex(
";?1\\n?$")))
213 rReadBuffer.
resize(rReadBuffer.
size() -
static_cast<size_t>(m.length()));
228 Read(rReadBuffer,
true);
231 l_GetErrorList(rWriteStr);
263 std::vector<sError> l_ErrList;
264 while (!m_ErrorList.empty())
266 l_ErrList.push_back(m_ErrorList.front());
281 m_Timeout_ms = InitialTimeout;
288 if (!l_WriteAndRead(
"*CLS", m_ReadBuffer))
319 if (!l_WriteAndRead(
":SYST:LOCK:REQ?", m_ReadBuffer))
321 if (m_ReadBuffer[0] !=
'1')
339 if (!l_WriteAndRead(
":SYST:LOCK:REL", m_ReadBuffer))
360 if (!l_WriteAndRead(
":ROUT:PROB:SCAN?", m_ReadBuffer,
true))
363 size_t l_Start, l_Len;
384 if (!l_WriteAndRead(
":ROUT:ESCAN?", m_ReadBuffer,
true))
405 if (!l_WriteAndRead(
":ROUT:CLOS:STAT?;ACT?", m_ReadBuffer))
408 size_t l_Start, l_Len;
412 std::vector<char>::iterator Separator = std::find(m_ReadBuffer.
begin(), m_ReadBuffer.
end(),
';');
419 if (l_Tokens.size() != 2)
440 std::string l_Command =
":ROUT:CLOS:LLIS";
441 l_Command += (State ?
" 1" :
" 0");
442 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
460 if (!l_WriteAndRead(
":ROUT:CLOS:LLIS?", m_ReadBuffer))
463 std::string l_Answer(m_ReadBuffer.
begin(), m_ReadBuffer.
end());
466 else if (l_Answer ==
"0")
486 std::string l_ChanList;
488 std::string l_Command =
":ROUT:CLOS " + l_ChanList;
489 if (!l_WriteAndRead(l_Command, m_ReadBuffer,
true))
509 std::string l_ChanList;
511 std::string l_Command =
":ROUT:PROB:MOD? " + l_ChanList +
512 ";SER? " + l_ChanList +
513 ";DES? " + l_ChanList +
514 ";FWV? " + l_ChanList;
515 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
520 if (l_Tokens.size() != 4)
524 std::vector<std::string> l_Models;
525 SplitString(std::string(l_Tokens[0].begin, l_Tokens[0].end), l_Models,
',');
526 if (l_Models.size() != rChanList.size())
529 std::vector<std::string> l_SNs;
530 SplitString(std::string(l_Tokens[1].begin, l_Tokens[1].end), l_SNs,
',');
531 if (l_SNs.size() != rChanList.size())
534 std::vector<std::string> l_Des;
535 SplitString(std::string(l_Tokens[2].begin, l_Tokens[2].end), l_Des,
',');
536 if (l_Des.size() != rChanList.size())
539 std::vector<std::string> l_FWVs;
540 SplitString(std::string(l_Tokens[3].begin, l_Tokens[3].end), l_FWVs,
',');
541 if (l_FWVs.size() != rChanList.size())
545 for (
size_t l_ChanNo = 0; l_ChanNo < rChanList.size(); l_ChanNo++)
548 rChanInfo.push_back(ChanInfo);
564 rLowLimit_UNITS.clear();
565 rHighLimit_UNITS.clear();
568 std::string l_ChanList;
570 std::string l_Command =
":ROUT:PROB:MIN? " + l_ChanList +
571 ";MAX? " + l_ChanList;
572 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
577 if (l_Tokens.size() != 2)
581 std::vector<std::string> l_LowLimits;
582 SplitString(std::string(l_Tokens[0].begin, l_Tokens[0].end), l_LowLimits,
',');
583 if (l_LowLimits.size() != rChanList.size())
586 std::vector<std::string> l_HighLimits;
587 SplitString(std::string(l_Tokens[1].begin, l_Tokens[1].end), l_HighLimits,
',');
588 if (l_HighLimits.size() != rChanList.size())
592 for (
size_t l_ChanNo = 0; l_ChanNo < rChanList.size(); l_ChanNo++)
594 rLowLimit_UNITS.push_back(std::stod(l_LowLimits[l_ChanNo]));
595 rHighLimit_UNITS.push_back(std::stod(l_HighLimits[l_ChanNo]));
614 if (!l_WriteAndRead(
":ROUT:PROB:HALL:RAW?", m_ReadBuffer,
true))
619 if (l_Tokens.size() != 4)
622 rRawHall.
Bx =
static_cast<U8
>(std::stoul(std::string(l_Tokens[0].begin, l_Tokens[0].end)));
623 rRawHall.
Bz =
static_cast<U8
>(std::stoul(std::string(l_Tokens[2].begin, l_Tokens[2].end)));
624 rRawHall.
By =
static_cast<U8
>(std::stoul(std::string(l_Tokens[1].begin, l_Tokens[1].end)));
625 rRawHall.
T =
static_cast<U8
>(std::stoul(std::string(l_Tokens[3].begin, l_Tokens[3].end)));
643 if (!l_WriteAndRead(
":ROUT:PROB:HALL:CAL?", m_ReadBuffer,
true))
648 if (l_Tokens.size() != 4)
651 rHall.
Bx = std::stod(std::string(l_Tokens[0].begin, l_Tokens[0].end));
652 rHall.
By = std::stod(std::string(l_Tokens[1].begin, l_Tokens[1].end));
653 rHall.
Bz = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
654 rHall.
B = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
670 if (!l_WriteAndRead(
":ROUT:PROB:REM:LEDM?", m_ReadBuffer))
673 U8 l_ModeNumber =
static_cast<U8
>(std::stoul(std::string(m_ReadBuffer.
begin(), m_ReadBuffer.
end())));
692 std::string l_Command =
":ROUT:PROB:REM:LEDM " + std::to_string(Mode);
693 return l_WriteAndRead(l_Command, m_ReadBuffer);
704 std::string l_Command;
705 switch (rSearch.
Mode)
708 l_Command =
":CONF:SEAR:MODE AUTO";
711 l_Command =
":CONF:SEAR:MODE CUST";
716 l_Command =
":CONF:SEAR:MODE MAN";
727 return l_WriteAndRead(l_Command, m_ReadBuffer);
735 if (!l_WriteAndRead(
":CONF:SEAR:MODE?"
746 if (l_Tokens.size() != 6)
750 std::string l_Mode(l_Tokens[0].begin, l_Tokens[0].end);
751 if (l_Mode ==
"AUTO")
753 else if (l_Mode ==
"CUSTom")
755 else if (l_Mode ==
"MANual")
760 rSearch.
DetectionLevel_V = std::stod(std::string(l_Tokens[1].begin, l_Tokens[1].end));
762 rSearch.
FrequencyStep_Hz = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
764 rSearch.
HighLimit_UNITS = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
766 rSearch.
LowLimit_UNITS = std::stod(std::string(l_Tokens[4].begin, l_Tokens[4].end));
768 rSearch.
ManualValue_UNITS = std::stod(std::string(l_Tokens[5].begin, l_Tokens[5].end));
784 if (!l_WriteAndRead(
":CONF:SEAR:MODE?"
785 ";LEV?;LEV? MIN;LEV? MAX;LEV? DEF"
786 ";FSTE?;FSTE? MIN;FSTE? MAX;FSTE? DEF"
787 ";HIGH?;HIGH? MIN;HIGH? MAX;HIGH? DEF"
788 ";LOW?;LOW? MIN;LOW? MAX;LOW? DEF"
789 ";VAL?;VAL? MIN;VAL? MAX;VAL? DEF",
795 if (l_Tokens.size() != 21)
799 std::string l_Mode(l_Tokens[0].begin, l_Tokens[0].end);
800 if (l_Mode ==
"AUTO")
802 else if (l_Mode ==
"CUSTom")
804 else if (l_Mode ==
"MANual")
809 rSearch.
DetectionLevel_V.Val = std::stod(std::string(l_Tokens[1].begin, l_Tokens[1].end));
810 rSearch.
DetectionLevel_V.Min = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
811 rSearch.
DetectionLevel_V.Max = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
812 rSearch.
DetectionLevel_V.Def = std::stod(std::string(l_Tokens[4].begin, l_Tokens[4].end));
814 rSearch.
FrequencyStep_Hz.Val = std::stod(std::string(l_Tokens[5].begin, l_Tokens[5].end));
815 rSearch.
FrequencyStep_Hz.Min = std::stod(std::string(l_Tokens[6].begin, l_Tokens[6].end));
816 rSearch.
FrequencyStep_Hz.Max = std::stod(std::string(l_Tokens[7].begin, l_Tokens[7].end));
817 rSearch.
FrequencyStep_Hz.Def = std::stod(std::string(l_Tokens[8].begin, l_Tokens[8].end));
819 rSearch.
HighLimit_UNITS.Val = std::stod(std::string(l_Tokens[9].begin, l_Tokens[9].end));
820 rSearch.
HighLimit_UNITS.Min = std::stod(std::string(l_Tokens[10].begin, l_Tokens[10].end));
821 rSearch.
HighLimit_UNITS.Max = std::stod(std::string(l_Tokens[11].begin, l_Tokens[11].end));
822 rSearch.
HighLimit_UNITS.Def = std::stod(std::string(l_Tokens[12].begin, l_Tokens[12].end));
824 rSearch.
LowLimit_UNITS.Val = std::stod(std::string(l_Tokens[13].begin, l_Tokens[13].end));
825 rSearch.
LowLimit_UNITS.Min = std::stod(std::string(l_Tokens[14].begin, l_Tokens[14].end));
826 rSearch.
LowLimit_UNITS.Max = std::stod(std::string(l_Tokens[15].begin, l_Tokens[15].end));
827 rSearch.
LowLimit_UNITS.Def = std::stod(std::string(l_Tokens[16].begin, l_Tokens[16].end));
829 rSearch.
ManualValue_UNITS.Val = std::stod(std::string(l_Tokens[17].begin, l_Tokens[17].end));
830 rSearch.
ManualValue_UNITS.Min = std::stod(std::string(l_Tokens[18].begin, l_Tokens[18].end));
831 rSearch.
ManualValue_UNITS.Max = std::stod(std::string(l_Tokens[19].begin, l_Tokens[19].end));
832 rSearch.
ManualValue_UNITS.Def = std::stod(std::string(l_Tokens[20].begin, l_Tokens[20].end));
847 std::string l_Command =
":CONF:SEAR:VAL " +
l_ToString(ManualValue_UNITS);
849 return l_WriteAndRead(l_Command, m_ReadBuffer);
856 std::string l_Command =
":CONF:SEAR:LIM";
857 l_Command +=
":LOW " +
l_ToString(LowLimit_UNITS);
858 l_Command +=
";HIGH " +
l_ToString(HighLimit_UNITS);
860 return l_WriteAndRead(l_Command, m_ReadBuffer);
867 std::string l_Command = std::string(
":CONF:SEAR:HALL ") + (Enabled ?
"1" :
"0");
869 return l_WriteAndRead(l_Command, m_ReadBuffer);
877 if (!l_WriteAndRead(
":CONF:SEAR:HALL?", m_ReadBuffer))
880 std::string l_Answer(m_ReadBuffer.
begin(), m_ReadBuffer.
end());
883 else if (l_Answer ==
"0")
901 std::string l_Command;
902 switch (rMeasure.
Mode)
905 l_Command =
":CONF:MEAS:MODE AUTO";
908 l_Command =
":CONF:MEAS:MODE MAN";
911 l_Command += rMeasure.
Reject ?
";REJ ON" :
";REJ OFF";
913 l_Command +=
";POIN " + std::to_string(rMeasure.
NoFitPoints);
914 l_Command +=
";:CONF:TRAC:HYST " + std::to_string(rMeasure.
Tracking.AllowedMissMeas);
923 return l_WriteAndRead(l_Command, m_ReadBuffer);
931 if (!l_WriteAndRead(
":CONF:MEAS:MODE?"
945 if (l_Tokens.size() != 9)
949 std::string l_Mode(l_Tokens[0].begin, l_Tokens[0].end);
950 if (l_Mode ==
"AUTO")
952 else if (l_Mode ==
"MANual")
957 std::string l_Rejection(l_Tokens[1].begin, l_Tokens[1].end);
958 if (l_Rejection ==
"1")
960 else if (l_Rejection ==
"0")
965 rMeasure.
DetectionLevel_V = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
967 rMeasure.
Bandwidth_Hz = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
969 rMeasure.
NoFitPoints =
static_cast<U32
>(std::stol(std::string(l_Tokens[4].begin, l_Tokens[4].end)));
971 rMeasure.
AllowedMissMeas =
static_cast<U32
>(std::stol(std::string(l_Tokens[5].begin, l_Tokens[5].end)));
973 rMeasure.
Tracking.AllowedMissMeas =
static_cast<U32
>(std::stol(std::string(l_Tokens[6].begin, l_Tokens[6].end)));
975 rMeasure.
Tracking.MinIF_Hz = std::stod(std::string(l_Tokens[7].begin, l_Tokens[7].end));
977 rMeasure.
Tracking.MaxIF_Hz = std::stod(std::string(l_Tokens[8].begin, l_Tokens[8].end));
993 if (!l_WriteAndRead(
":CONF:MEAS:MODE?"
995 ";LEV?;LEV? MIN;LEV? MAX;LEV? DEF"
996 ";BAND?;BAND? MIN;BAND? MAX;BAND? DEF"
997 ";POIN?;POIN? MIN;POIN? MAX;POIN? DEF"
998 ";HYST?;HYST? MIN;HYST? MAX;HYST? DEF"
999 ";:CONF:TRAC:HYST?;HYST? MIN;HYST? MAX;HYST? DEF"
1000 ";LOW?;LOW? MIN;LOW? MAX;LOW? DEF"
1001 ";HIGH?;HIGH? MIN;HIGH? MAX;HIGH? DEF",
1007 if (l_Tokens.size() != 30)
1011 std::string l_Mode(l_Tokens[0].begin, l_Tokens[0].end);
1012 if (l_Mode ==
"AUTO")
1014 else if (l_Mode ==
"MANual")
1019 std::string l_Rejection(l_Tokens[1].begin, l_Tokens[1].end);
1020 if (l_Rejection ==
"1")
1022 else if (l_Rejection ==
"0")
1027 rMeasure.
DetectionLevel_V.Val = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
1028 rMeasure.
DetectionLevel_V.Min = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
1029 rMeasure.
DetectionLevel_V.Max = std::stod(std::string(l_Tokens[4].begin, l_Tokens[4].end));
1030 rMeasure.
DetectionLevel_V.Def = std::stod(std::string(l_Tokens[5].begin, l_Tokens[5].end));
1032 rMeasure.
Bandwidth_Hz.Val = std::stod(std::string(l_Tokens[6].begin, l_Tokens[6].end));
1033 rMeasure.
Bandwidth_Hz.Min = std::stod(std::string(l_Tokens[7].begin, l_Tokens[7].end));
1034 rMeasure.
Bandwidth_Hz.Max = std::stod(std::string(l_Tokens[8].begin, l_Tokens[8].end));
1035 rMeasure.
Bandwidth_Hz.Def = std::stod(std::string(l_Tokens[9].begin, l_Tokens[9].end));
1037 rMeasure.
NoFitPoints.Val =
static_cast<U32
>(std::stol(std::string(l_Tokens[10].begin, l_Tokens[10].end)));
1038 rMeasure.
NoFitPoints.Min =
static_cast<U32
>(std::stol(std::string(l_Tokens[11].begin, l_Tokens[11].end)));
1039 rMeasure.
NoFitPoints.Max =
static_cast<U32
>(std::stol(std::string(l_Tokens[12].begin, l_Tokens[12].end)));
1040 rMeasure.
NoFitPoints.Def =
static_cast<U32
>(std::stol(std::string(l_Tokens[13].begin, l_Tokens[13].end)));
1042 rMeasure.
AllowedMissMeas.Val =
static_cast<U32
>(std::stol(std::string(l_Tokens[14].begin, l_Tokens[14].end)));
1043 rMeasure.
AllowedMissMeas.Min =
static_cast<U32
>(std::stol(std::string(l_Tokens[15].begin, l_Tokens[15].end)));
1044 rMeasure.
AllowedMissMeas.Max =
static_cast<U32
>(std::stol(std::string(l_Tokens[16].begin, l_Tokens[16].end)));
1045 rMeasure.
AllowedMissMeas.Def =
static_cast<U32
>(std::stol(std::string(l_Tokens[17].begin, l_Tokens[17].end)));
1047 rMeasure.
Tracking.AllowedMissMeas.Val =
static_cast<U32
>(std::stol(std::string(l_Tokens[18].begin, l_Tokens[18].end)));
1048 rMeasure.
Tracking.AllowedMissMeas.Min =
static_cast<U32
>(std::stol(std::string(l_Tokens[19].begin, l_Tokens[19].end)));
1049 rMeasure.
Tracking.AllowedMissMeas.Max =
static_cast<U32
>(std::stol(std::string(l_Tokens[20].begin, l_Tokens[20].end)));
1050 rMeasure.
Tracking.AllowedMissMeas.Def =
static_cast<U32
>(std::stol(std::string(l_Tokens[21].begin, l_Tokens[21].end)));
1052 rMeasure.
Tracking.MinIF_Hz.Val = std::stod(std::string(l_Tokens[22].begin, l_Tokens[22].end));
1053 rMeasure.
Tracking.MinIF_Hz.Min = std::stod(std::string(l_Tokens[23].begin, l_Tokens[23].end));
1054 rMeasure.
Tracking.MinIF_Hz.Max = std::stod(std::string(l_Tokens[24].begin, l_Tokens[24].end));
1055 rMeasure.
Tracking.MinIF_Hz.Def = std::stod(std::string(l_Tokens[25].begin, l_Tokens[25].end));
1057 rMeasure.
Tracking.MaxIF_Hz.Val = std::stod(std::string(l_Tokens[26].begin, l_Tokens[26].end));
1058 rMeasure.
Tracking.MaxIF_Hz.Min = std::stod(std::string(l_Tokens[27].begin, l_Tokens[27].end));
1059 rMeasure.
Tracking.MaxIF_Hz.Max = std::stod(std::string(l_Tokens[28].begin, l_Tokens[28].end));
1060 rMeasure.
Tracking.MaxIF_Hz.Def = std::stod(std::string(l_Tokens[29].begin, l_Tokens[29].end));
1075 std::string l_Command =
":AVERage1:STAT ";
1076 switch (rSigAvg.
Type)
1082 l_Command +=
"ON" ";:AVERage1:TCON EXP";
1083 l_Command +=
";:AVERage1:COUN " + std::to_string(rSigAvg.
NoPoints);
1086 l_Command +=
"ON" ";:AVERage1:TCON REP";
1087 l_Command +=
";:AVERage1:COUN " + std::to_string(rSigAvg.
NoPoints);
1094 return l_WriteAndRead(l_Command, m_ReadBuffer);
1102 if (!l_WriteAndRead(
":AVERage1:STAT?"
1110 if (l_Tokens.size() != 3)
1114 std::string l_State(l_Tokens[0].begin, l_Tokens[0].end);
1115 enum { kInactive, kActive } l_eState;
1117 l_eState = kInactive;
1118 else if (l_State ==
"1")
1123 std::string l_Type(l_Tokens[1].begin, l_Tokens[1].end);
1124 enum { kExponential, kRepeat } l_eType;
1125 if (l_Type ==
"EXPonential")
1126 l_eType = kExponential;
1127 else if (l_Type ==
"REPeat")
1132 if (l_eState == kInactive)
1134 else if (l_eState == kActive)
1136 if (l_eType == kExponential)
1138 else if (l_eType == kRepeat)
1146 rSigAvg.
NoPoints =
static_cast<U32
>(std::stoi(std::string(l_Tokens[2].begin, l_Tokens[2].end)));
1162 if (!l_WriteAndRead(
":AVERage1:STAT?"
1164 ";:AVERage1:COUN?;:AVERage1:COUN? MIN;:AVERage1:COUN? MAX;:AVERage1:COUN? DEF",
1170 if (l_Tokens.size() != 6)
1174 std::string l_State(l_Tokens[0].begin, l_Tokens[0].end);
1175 enum { kInactive, kActive } l_eState;
1177 l_eState = kInactive;
1178 else if (l_State ==
"1")
1183 std::string l_Type(l_Tokens[1].begin, l_Tokens[1].end);
1184 enum { kExponential, kRepeat } l_eType;
1185 if (l_Type ==
"EXPonential")
1186 l_eType = kExponential;
1187 else if (l_Type ==
"REPeat")
1192 if (l_eState == kInactive)
1194 else if (l_eState == kActive)
1196 if (l_eType == kExponential)
1198 else if (l_eType == kRepeat)
1206 rSigAvg.
NoPoints.Val =
static_cast<U32
>(std::stoi(std::string(l_Tokens[2].begin, l_Tokens[2].end)));
1207 rSigAvg.
NoPoints.Min =
static_cast<U32
>(std::stoi(std::string(l_Tokens[3].begin, l_Tokens[3].end)));
1208 rSigAvg.
NoPoints.Max =
static_cast<U32
>(std::stoi(std::string(l_Tokens[4].begin, l_Tokens[4].end)));
1209 rSigAvg.
NoPoints.Def =
static_cast<U32
>(std::stoi(std::string(l_Tokens[5].begin, l_Tokens[5].end)));
1224 std::string l_Command =
":AVERage2:STAT ";
1225 switch (rMeasAvg.
Type)
1231 l_Command +=
"ON" ";:AVERage2:TCON EXP";
1232 l_Command +=
";:AVERage2:COUN " + std::to_string(rMeasAvg.
NoPoints);
1235 l_Command +=
"ON" ";:AVERage2:TCON EXP";
1236 l_Command +=
";:AVERage2:COUN " + std::to_string(rMeasAvg.
NoPoints);
1239 l_Command +=
"ON" ";:AVERage2:TCON REP";
1240 l_Command +=
";:AVERage2:COUN " + std::to_string(rMeasAvg.
NoPoints);
1247 return l_WriteAndRead(l_Command, m_ReadBuffer);
1255 if (!l_WriteAndRead(
":AVERage2:STAT?"
1264 if (l_Tokens.size() != 3)
1268 std::string l_State(l_Tokens[0].begin, l_Tokens[0].end);
1269 enum { kInactive, kActive } l_eState;
1271 l_eState = kInactive;
1272 else if (l_State ==
"1")
1277 std::string l_Type(l_Tokens[1].begin, l_Tokens[1].end);
1278 enum { kExponential, kMoving, kRepeat } l_eType;
1279 if (l_Type ==
"EXPonential")
1280 l_eType = kExponential;
1281 else if (l_Type ==
"MOVing")
1283 else if (l_Type ==
"REPeat")
1288 if (l_eState == kInactive)
1290 else if (l_eState == kActive)
1292 if (l_eType == kExponential)
1294 else if (l_eType == kMoving)
1296 else if (l_eType == kRepeat)
1304 rMeasAvg.
NoPoints = std::stoi(std::string(l_Tokens[2].begin, l_Tokens[2].end));
1320 if (!l_WriteAndRead(
":AVERage2:STAT?"
1322 ";:AVERage2:COUN?;:AVERage2:COUN? MIN;:AVERage2:COUN? MAX;:AVERage2:COUN? DEF",
1328 if (l_Tokens.size() != 6)
1332 std::string l_State(l_Tokens[0].begin, l_Tokens[0].end);
1333 enum { kInactive, kActive } l_eState;
1335 l_eState = kInactive;
1336 else if (l_State ==
"1")
1341 std::string l_Type(l_Tokens[1].begin, l_Tokens[1].end);
1342 enum { kExponential, kMoving, kRepeat } l_eType;
1343 if (l_Type ==
"EXPonential")
1344 l_eType = kExponential;
1345 else if (l_Type ==
"MOVing")
1347 else if (l_Type ==
"REPeat")
1352 if (l_eState == kInactive)
1354 else if (l_eState == kActive)
1356 if (l_eType == kExponential)
1358 else if (l_eType == kMoving)
1360 else if (l_eType == kRepeat)
1368 rMeasAvg.
NoPoints.Val = std::stoi(std::string(l_Tokens[2].begin, l_Tokens[2].end));
1369 rMeasAvg.
NoPoints.Min = std::stoi(std::string(l_Tokens[3].begin, l_Tokens[3].end));
1370 rMeasAvg.
NoPoints.Max = std::stoi(std::string(l_Tokens[4].begin, l_Tokens[4].end));
1371 rMeasAvg.
NoPoints.Def = std::stoi(std::string(l_Tokens[5].begin, l_Tokens[5].end));
1386 std::string l_Command =
":TRIG:SEQuence1:SOUR ";
1387 switch (rInputTrig.
Source)
1391 l_Command +=
";COUN " + std::to_string(rInputTrig.
Count);
1395 l_Command +=
";COUN " + std::to_string(rInputTrig.
Count);
1400 l_Command +=
";COUN " + std::to_string(rInputTrig.
Count);
1404 l_Command +=
";COUN " + std::to_string(rInputTrig.
Count);
1405 switch (rInputTrig.
Edge)
1408 l_Command +=
";SLOP POS";
1411 l_Command +=
";SLOP NEG";
1414 l_Command +=
";SLOP EITH";
1426 return l_WriteAndRead(l_Command, m_ReadBuffer);
1434 if (!l_WriteAndRead(
":TRIG:SEQuence1:SOUR?"
1443 if (l_Tokens.size() != 4)
1447 std::string l_Source(l_Tokens[0].begin, l_Tokens[0].end);
1448 if (l_Source ==
"IMMediate")
1450 else if (l_Source ==
"TIMer")
1452 else if (l_Source ==
"BUS")
1454 else if (l_Source ==
"EXTernal")
1459 rInputTrig.
Period_s = std::stod(std::string(l_Tokens[1].begin, l_Tokens[1].end));
1461 rInputTrig.
Count = std::stoi(std::string(l_Tokens[2].begin, l_Tokens[2].end));
1463 std::string l_Slope(l_Tokens[3].begin, l_Tokens[3].end);
1464 if (l_Slope ==
"POSitive")
1466 else if (l_Slope ==
"NEGative")
1468 else if (l_Slope ==
"EITHer")
1487 if (!l_WriteAndRead(
":TRIG:SEQuence1:SOUR?"
1488 ";TIM?;TIM? MIN;TIM? MAX;TIM? DEF"
1489 ";COUN?;COUN? MIN;COUN? MAX;COUN? DEF"
1496 if (l_Tokens.size() != 10)
1500 std::string l_Source(l_Tokens[0].begin, l_Tokens[0].end);
1501 if (l_Source ==
"IMMediate")
1503 else if (l_Source ==
"TIMer")
1505 else if (l_Source ==
"BUS")
1507 else if (l_Source ==
"EXTernal")
1512 rInputTrig.
Period_s.Val = std::stod(std::string(l_Tokens[1].begin, l_Tokens[1].end));
1513 rInputTrig.
Period_s.Min = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
1514 rInputTrig.
Period_s.Max = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
1515 rInputTrig.
Period_s.Def = std::stod(std::string(l_Tokens[4].begin, l_Tokens[4].end));
1517 rInputTrig.
Count.Val = std::stoi(std::string(l_Tokens[5].begin, l_Tokens[5].end));
1518 rInputTrig.
Count.Min = std::stoi(std::string(l_Tokens[6].begin, l_Tokens[6].end));
1519 rInputTrig.
Count.Max = std::stoi(std::string(l_Tokens[7].begin, l_Tokens[7].end));
1520 rInputTrig.
Count.Def = std::stoi(std::string(l_Tokens[8].begin, l_Tokens[8].end));
1522 std::string l_Slope(l_Tokens[9].begin, l_Tokens[9].end);
1523 if (l_Slope ==
"POSitive")
1525 else if (l_Slope ==
"NEGative")
1527 else if (l_Slope ==
"EITHer")
1545 std::string l_Command;
1546 switch (rOutputTrig.
Mode)
1549 l_Command =
":OUTP:TRIG:STAT OFF";
1554 l_Command +=
";:SLOP POS";
1556 l_Command +=
";:OUTP:TRIG:STAT ON";
1557 l_Command +=
";SHAP DC";
1565 l_Command +=
";:SLOP NEG";
1567 l_Command +=
";:OUTP:TRIG:STAT ON";
1568 l_Command +=
";SHAP DC";
1576 l_Command +=
";:SLOP POS";
1578 l_Command +=
";:OUTP:TRIG:STAT ON";
1579 l_Command +=
";SHAP PULS";
1587 l_Command +=
";:SLOP NEG";
1589 l_Command +=
";:OUTP:TRIG:STAT ON";
1590 l_Command +=
";SHAP PULS";
1598 l_Command +=
";:SLOP EITH";
1600 l_Command +=
";:OUTP:TRIG:STAT ON";
1601 l_Command +=
";SHAP PULS";
1611 return l_WriteAndRead(l_Command, m_ReadBuffer);
1619 if (!l_WriteAndRead(
":OUTP:TRIG:STAT?"
1624 ";:TRIG:SEQuence2:SLOP?"
1631 if (l_Tokens.size() != 7)
1635 std::string l_State(l_Tokens[0].begin, l_Tokens[0].end);
1636 enum {kInactive, kActive} l_eActive;
1638 l_eActive = kInactive;
1639 else if (l_State ==
"1")
1640 l_eActive = kActive;
1644 std::string l_Polarity(l_Tokens[1].begin, l_Tokens[1].end);
1645 if (l_Polarity ==
"INVerted")
1647 else if (l_Polarity ==
"NORMal")
1652 rOutputTrig.
PulseWidth_s = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
1654 rOutputTrig.
OutputDelay_s = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
1656 std::string l_Shape(l_Tokens[4].begin, l_Tokens[4].end);
1657 enum { kDC, kPulse } l_eShape;
1658 if (l_Shape ==
"DC")
1660 else if (l_Shape ==
"PULSe")
1665 std::string l_Slope(l_Tokens[5].begin, l_Tokens[5].end);
1666 enum { kRising, kFalling, kEither } l_eSlope;
1667 if (l_Slope ==
"POSitive")
1669 else if (l_Slope ==
"NEGative")
1670 l_eSlope = kFalling;
1671 else if (l_Slope ==
"EITHer")
1676 rOutputTrig.
Level_UNITS = std::stod(std::string(l_Tokens[6].begin, l_Tokens[6].end));
1678 if (l_eActive == kActive)
1680 if (l_eShape == kDC)
1682 if (l_eSlope == kRising || l_eSlope == kEither)
1689 if (l_eSlope == kRising)
1691 else if (l_eSlope == kFalling)
1714 if (!l_WriteAndRead(
":OUTP:TRIG:STAT?"
1716 ";WIDT?;WIDT? MIN;WIDT? MAX;WIDT? DEF"
1717 ";DEL?;DEL? MIN;DEL? MAX;DEL? DEF"
1719 ";:TRIG:SEQuence2:SLOP?"
1720 ";LEV?;LEV? MIN ;LEV? MAX;LEV? DEF",
1726 if (l_Tokens.size() != 16)
1730 std::string l_State(l_Tokens[0].begin, l_Tokens[0].end);
1731 enum { kInactive, kActive } l_eActive;
1733 l_eActive = kInactive;
1734 else if (l_State ==
"1")
1735 l_eActive = kActive;
1739 std::string l_Polarity(l_Tokens[1].begin, l_Tokens[1].end);
1740 if (l_Polarity ==
"INVerted")
1742 else if (l_Polarity ==
"NORMal")
1747 rOutputTrig.
PulseWidth_s.Val = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
1748 rOutputTrig.
PulseWidth_s.Min = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
1749 rOutputTrig.
PulseWidth_s.Max = std::stod(std::string(l_Tokens[4].begin, l_Tokens[4].end));
1750 rOutputTrig.
PulseWidth_s.Def = std::stod(std::string(l_Tokens[5].begin, l_Tokens[5].end));
1752 rOutputTrig.
OutputDelay_s.Val = std::stod(std::string(l_Tokens[6].begin, l_Tokens[6].end));
1753 rOutputTrig.
OutputDelay_s.Min = std::stod(std::string(l_Tokens[7].begin, l_Tokens[7].end));
1754 rOutputTrig.
OutputDelay_s.Max = std::stod(std::string(l_Tokens[8].begin, l_Tokens[8].end));
1755 rOutputTrig.
OutputDelay_s.Def = std::stod(std::string(l_Tokens[9].begin, l_Tokens[9].end));
1757 std::string l_Shape(l_Tokens[10].begin, l_Tokens[10].end);
1758 enum { kDC, kPulse } l_eShape;
1759 if (l_Shape ==
"DC")
1761 else if (l_Shape ==
"PULSe")
1766 std::string l_Slope(l_Tokens[11].begin, l_Tokens[11].end);
1767 enum { kRising, kFalling, kEither } l_eSlope;
1768 if (l_Slope ==
"POSitive")
1770 else if (l_Slope ==
"NEGative")
1771 l_eSlope = kFalling;
1772 else if (l_Slope ==
"EITHer")
1777 rOutputTrig.
Level_UNITS.Val = std::stod(std::string(l_Tokens[12].begin, l_Tokens[12].end));
1778 rOutputTrig.
Level_UNITS.Min = std::stod(std::string(l_Tokens[13].begin, l_Tokens[13].end));
1779 rOutputTrig.
Level_UNITS.Max = std::stod(std::string(l_Tokens[14].begin, l_Tokens[14].end));
1780 rOutputTrig.
Level_UNITS.Def = std::stod(std::string(l_Tokens[15].begin, l_Tokens[15].end));
1782 if (l_eActive == kActive)
1784 if (l_eShape == kDC)
1786 if (l_eSlope == kRising || l_eSlope == kEither)
1793 if (l_eSlope == kRising)
1795 else if (l_eSlope == kFalling)
1817 std::string l_Command;
1818 switch (rPulse.
Mode)
1821 l_Command =
":SOUR:PULS:MODE AUTO";
1824 l_Command =
":SOUR:PULS:MODE MAN";
1833 return l_WriteAndRead(l_Command, m_ReadBuffer);
1841 if (!l_WriteAndRead(
":SOUR:PULS:MODE?"
1849 if (l_Tokens.size() != 3)
1853 std::string l_Mode(l_Tokens[0].begin, l_Tokens[0].end);
1854 if (l_Mode ==
"AUTO")
1856 else if (l_Mode ==
"MANual")
1861 rPulse.
Period_s = std::stod(std::string(l_Tokens[1].begin, l_Tokens[1].end));
1863 rPulse.
Width_s = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
1879 if (!l_WriteAndRead(
":SOUR:PULS:MODE?"
1880 ";PER?;PER? MIN;PER? MAX;PER? DEF"
1881 ";WIDT?;WIDT? MIN;WIDT? MAX;WIDT? DEF",
1887 if (l_Tokens.size() != 9)
1891 std::string l_Mode(l_Tokens[0].begin, l_Tokens[0].end);
1892 if (l_Mode ==
"AUTO")
1894 else if (l_Mode ==
"MANual")
1899 rPulse.
Period_s.Val = std::stod(std::string(l_Tokens[1].begin, l_Tokens[1].end));
1900 rPulse.
Period_s.Min = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
1901 rPulse.
Period_s.Max = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
1902 rPulse.
Period_s.Def = std::stod(std::string(l_Tokens[4].begin, l_Tokens[4].end));
1904 rPulse.
Width_s.Val = std::stod(std::string(l_Tokens[5].begin, l_Tokens[5].end));
1905 rPulse.
Width_s.Min = std::stod(std::string(l_Tokens[6].begin, l_Tokens[6].end));
1906 rPulse.
Width_s.Max = std::stod(std::string(l_Tokens[7].begin, l_Tokens[7].end));
1907 rPulse.
Width_s.Def = std::stod(std::string(l_Tokens[8].begin, l_Tokens[8].end));
1922 std::string l_Command;
1923 switch (rDigitization.
Mode)
1926 l_Command =
":SENS:SWE:MODE AUTO";
1929 l_Command =
":SENS:SWE:MODE MAN";
1939 return l_WriteAndRead(l_Command, m_ReadBuffer);
1947 if (!l_WriteAndRead(
":SENS:SWE:MODE?"
1956 if (l_Tokens.size() != 4)
1960 std::string l_Mode(l_Tokens[0].begin, l_Tokens[0].end);
1961 if (l_Mode ==
"AUTO")
1963 else if (l_Mode ==
"MANual")
1968 rDigitization.
SweepTime_s = std::stod(std::string(l_Tokens[1].begin, l_Tokens[1].end));
1970 rDigitization.
Rate_Hz = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
1972 rDigitization.
DeadTime_s = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
1988 if (!l_WriteAndRead(
":SENS:SWE:MODE?"
1989 ";TIME?;TIME? MIN;TIME? MAX;TIME? DEF"
1990 ";FREQ?;FREQ? MIN;FREQ? MAX;FREQ? DEF"
1991 ";OFFS:TIME?;TIME? MIN;TIME? MAX;TIME? DEF",
1997 if (l_Tokens.size() != 13)
2001 std::string l_Mode(l_Tokens[0].begin, l_Tokens[0].end);
2002 if (l_Mode ==
"AUTO")
2004 else if (l_Mode ==
"MANual")
2009 rDigitization.
SweepTime_s.Val = std::stod(std::string(l_Tokens[1].begin, l_Tokens[1].end));
2010 rDigitization.
SweepTime_s.Min = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
2011 rDigitization.
SweepTime_s.Max = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
2012 rDigitization.
SweepTime_s.Def = std::stod(std::string(l_Tokens[4].begin, l_Tokens[4].end));
2014 rDigitization.
Rate_Hz.Val = std::stod(std::string(l_Tokens[5].begin, l_Tokens[5].end));
2015 rDigitization.
Rate_Hz.Min = std::stod(std::string(l_Tokens[6].begin, l_Tokens[6].end));
2016 rDigitization.
Rate_Hz.Max = std::stod(std::string(l_Tokens[7].begin, l_Tokens[7].end));
2017 rDigitization.
Rate_Hz.Def = std::stod(std::string(l_Tokens[8].begin, l_Tokens[8].end));
2019 rDigitization.
DeadTime_s.Val = std::stod(std::string(l_Tokens[9].begin, l_Tokens[9].end));
2020 rDigitization.
DeadTime_s.Min = std::stod(std::string(l_Tokens[10].begin, l_Tokens[10].end));
2021 rDigitization.
DeadTime_s.Max = std::stod(std::string(l_Tokens[11].begin, l_Tokens[11].end));
2022 rDigitization.
DeadTime_s.Def = std::stod(std::string(l_Tokens[12].begin, l_Tokens[12].end));
2037 std::string l_Command =
":CONF:PROB:MODE ";
2038 switch (rMatchingTuning.
Mode)
2041 l_Command +=
"AUTO";
2051 return l_WriteAndRead(l_Command, m_ReadBuffer);
2059 if (!l_WriteAndRead(
":CONF:PROB:MODE?"
2067 if (l_Tokens.size() != 3)
2071 std::string l_Mode(l_Tokens[0].begin, l_Tokens[0].end);
2072 if (l_Mode ==
"AUTO")
2074 else if (l_Mode ==
"MANual")
2079 rMatchingTuning.
Matching = std::stod(std::string(l_Tokens[1].begin, l_Tokens[1].end));
2081 rMatchingTuning.
Tuning = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
2097 if (!l_WriteAndRead(
":CONF:PROB:MODE?"
2098 ";MATC?;MATC? MIN;MATC? MAX;MATC? DEF"
2099 ";TUN?;TUN? MIN;TUN? MAX;TUN? DEF",
2105 if (l_Tokens.size() != 9)
2109 std::string l_Mode(l_Tokens[0].begin, l_Tokens[0].end);
2110 if (l_Mode ==
"AUTO")
2112 else if (l_Mode ==
"MANual")
2117 rMatchingTuning.
Matching.Val = std::stod(std::string(l_Tokens[1].begin, l_Tokens[1].end));
2118 rMatchingTuning.
Matching.Min = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
2119 rMatchingTuning.
Matching.Max = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
2120 rMatchingTuning.
Matching.Def = std::stod(std::string(l_Tokens[4].begin, l_Tokens[4].end));
2122 rMatchingTuning.
Tuning.Val = std::stod(std::string(l_Tokens[5].begin, l_Tokens[5].end));
2123 rMatchingTuning.
Tuning.Min = std::stod(std::string(l_Tokens[6].begin, l_Tokens[6].end));
2124 rMatchingTuning.
Tuning.Max = std::stod(std::string(l_Tokens[7].begin, l_Tokens[7].end));
2125 rMatchingTuning.
Tuning.Def = std::stod(std::string(l_Tokens[8].begin, l_Tokens[8].end));
2142 return l_WriteAndRead(l_Command, m_ReadBuffer);
2149 std::string l_Command =
":UNIT:PPMR " +
l_ToString(Ref);
2151 return l_WriteAndRead(l_Command, m_ReadBuffer);
2159 if (!l_WriteAndRead(
":UNIT?;:UNIT:PPMR?", m_ReadBuffer))
2163 std::vector<char>::const_iterator l_tokenbeg, l_tokenend;
2165 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2167 std::string l_Answer(l_tokenbeg, l_tokenend);
2171 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2173 l_Answer.assign(l_tokenbeg, l_tokenend);
2174 rRef = std::stod(l_Answer);
2189 std::string l_Command =
":INP:CLOC ";
2203 return l_WriteAndRead(l_Command, m_ReadBuffer);
2211 if (!l_WriteAndRead(
":INP:CLOC:SOUR?",m_ReadBuffer))
2215 std::string l_Answer(m_ReadBuffer.
begin(), m_ReadBuffer.
end());
2216 if (l_Answer ==
"INTernal")
2218 else if (l_Answer ==
"EXTernal")
2237 std::string l_Command = std::string(
":SYST:COMM:USBT:ENAB ") + (Enabled ?
"1" :
"0");
2238 if (!l_WriteAndRead(l_Command , m_ReadBuffer))
2255 if (!l_WriteAndRead(
":SYST:COMM:USBT:ENAB?", m_ReadBuffer))
2258 std::string l_Answer(m_ReadBuffer.
begin(), m_ReadBuffer.
end());
2259 if (l_Answer.empty())
2261 else if (l_Answer[0] ==
'0')
2263 else if (l_Answer[0] ==
'1')
2282 std::string l_Command(
":SYST:COMM:ETH");
2283 l_Command += rSettings.
Enabled ?
":ENAB 1" :
":ENAB 0";
2286 l_Command +=
";DOM " + rSettings.
Domain;
2290 l_Command += std::string(
";NBNS ") + (rSettings.
NBNSEnabled ?
"1" :
"0");
2291 l_Command +=
";IDEN " + rSettings.
Identifier;
2293 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
2310 if (!l_WriteAndRead(
":SYST:COMM:ETH:ENAB?"
2323 std::vector<char>::const_iterator l_tokenbeg, l_tokenend;
2325 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2327 std::string l_Enable(l_tokenbeg, l_tokenend);
2328 if (l_Enable.empty())
2330 else if (l_Enable[0] ==
'0')
2332 else if (l_Enable[0] ==
'1')
2337 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2339 std::string l_IPAddress(l_tokenbeg, l_tokenend);
2340 std::match_results<std::string::const_iterator> l_IPmatch;
2341 if (!std::regex_match(l_IPAddress, l_IPmatch, std::regex(
"^([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})")))
2343 rSettings.
IP.
Member.
A =
static_cast<U8
>(std::stoul(l_IPmatch[1]));
2344 rSettings.
IP.
Member.
B =
static_cast<U8
>(std::stoul(l_IPmatch[2]));
2345 rSettings.
IP.
Member.
C =
static_cast<U8
>(std::stoul(l_IPmatch[3]));
2346 rSettings.
IP.
Member.
D =
static_cast<U8
>(std::stoul(l_IPmatch[4]));
2348 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2350 std::string l_Mask(l_tokenbeg, l_tokenend);
2351 std::match_results<std::string::const_iterator> l_Maskmatch;
2352 if (!std::regex_match(l_Mask, l_Maskmatch, std::regex(
"^([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})")))
2354 rSettings.
Mask.
Member.
A =
static_cast<U8
>(std::stoul(l_Maskmatch[1]));
2355 rSettings.
Mask.
Member.
B =
static_cast<U8
>(std::stoul(l_Maskmatch[2]));
2356 rSettings.
Mask.
Member.
C =
static_cast<U8
>(std::stoul(l_Maskmatch[3]));
2357 rSettings.
Mask.
Member.
D =
static_cast<U8
>(std::stoul(l_Maskmatch[4]));
2359 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2361 rSettings.
Domain = std::string(l_tokenbeg, l_tokenend);
2363 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2365 std::string l_Broadcast(l_tokenbeg, l_tokenend);
2366 std::match_results<std::string::const_iterator> l_Broadcastmatch;
2367 if (!std::regex_match(l_Broadcast, l_Broadcastmatch, std::regex(
"^([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})")))
2369 rSettings.
Broadcast.
Member.
A =
static_cast<U8
>(std::stoul(l_Broadcastmatch[1]));
2370 rSettings.
Broadcast.
Member.
B =
static_cast<U8
>(std::stoul(l_Broadcastmatch[2]));
2371 rSettings.
Broadcast.
Member.
C =
static_cast<U8
>(std::stoul(l_Broadcastmatch[3]));
2372 rSettings.
Broadcast.
Member.
D =
static_cast<U8
>(std::stoul(l_Broadcastmatch[4]));
2374 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2376 std::string l_Gateway(l_tokenbeg, l_tokenend);
2377 std::match_results<std::string::const_iterator> l_Gatewaymatch;
2378 if (!std::regex_match(l_Gateway, l_Gatewaymatch, std::regex(
"^([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})")))
2380 rSettings.
Gateway.
Member.
A =
static_cast<U8
>(std::stoul(l_Gatewaymatch[1]));
2381 rSettings.
Gateway.
Member.
B =
static_cast<U8
>(std::stoul(l_Gatewaymatch[2]));
2382 rSettings.
Gateway.
Member.
C =
static_cast<U8
>(std::stoul(l_Gatewaymatch[3]));
2383 rSettings.
Gateway.
Member.
D =
static_cast<U8
>(std::stoul(l_Gatewaymatch[4]));
2385 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2387 std::string l_DNS(l_tokenbeg, l_tokenend);
2388 std::match_results<std::string::const_iterator> l_DNSmatch;
2389 if (!std::regex_match(l_DNS, l_DNSmatch, std::regex(
"^([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})")))
2396 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2398 std::string l_NBNSEnab(l_tokenbeg, l_tokenend);
2399 if (l_NBNSEnab.empty())
2401 else if (l_NBNSEnab[0] ==
'0')
2403 else if (l_NBNSEnab[0] ==
'1')
2408 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2410 rSettings.
Identifier = std::string(l_tokenbeg, l_tokenend);
2426 std::string l_Command = std::string(
":SYST:COMM:VXI11:ENAB ") + (Enabled ?
"1" :
"0");
2427 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
2444 if (!l_WriteAndRead(
":SYST:COMM:VXI11:ENAB?", m_ReadBuffer))
2447 std::string l_Answer(m_ReadBuffer.
begin(), m_ReadBuffer.
end());
2448 if (l_Answer.empty())
2450 else if (l_Answer[0] ==
'0')
2452 else if (l_Answer[0] ==
'1')
2477 if (!l_WriteAndRead(
":MMEM:CAT?", m_ReadBuffer))
2482 std::vector<char>::const_iterator l_tokenbeg, l_tokenend;
2485 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
','))
2487 rUsedBytes =
static_cast<U32
>(std::stoul(std::string(l_tokenbeg, l_tokenend)));
2489 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
','))
2491 rAvailableBytes =
static_cast<U32
>(std::stoul(std::string(l_tokenbeg, l_tokenend)));
2493 while (l_BP.
GetNext(l_tokenbeg, l_tokenend,
','))
2497 l_File.
Path = std::string(l_tokenbeg, l_tokenend);
2499 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
','))
2501 l_File.
Type = std::string(l_tokenbeg, l_tokenend);
2503 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
','))
2505 l_File.
Size = std::stoul(std::string(l_tokenbeg, l_tokenend));
2507 rFileList.push_back(l_File);
2524 std::string l_Command;
2525 l_Command =
":MMEM:DATA? " "\"" + Path +
"\"";
2526 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
2529 rContent = std::string(m_ReadBuffer.
begin(), m_ReadBuffer.
end());
2545 std::string l_BinaryFileContent;
2547 std::string l_Command;
2548 l_Command =
":MMEM:DATA " "\"" + Path +
"\"" "," + l_BinaryFileContent;
2549 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
2566 std::string l_Command;
2567 l_Command =
":MMEM:DEL " "\"" + Path +
"\"";
2568 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
2584 rSettingFileList.clear();
2592 for (tFileList::const_iterator it = l_FileList.begin(); it != l_FileList.end(); it++)
2595 if (std::regex_match(it->Path, std::regex(
"^/yaffs/settings/.+")))
2596 rSettingFileList.push_back(it->Path);
2613 std::string l_Command;
2614 l_Command =
":MMEM:STOR 0" ",\"" + Name +
"\"";
2618 l_Command +=
",ALL";
2621 l_Command +=
",COMM";
2624 l_Command +=
",MEAS";
2627 l_Command +=
",TRIG";
2630 l_Command +=
",REFC";
2633 l_Command +=
",UNIT";
2640 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
2657 std::string l_Command;
2658 l_Command =
":MMEM:LOAD 0," "\"" + Name +
"\"";
2659 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
2679 std::string l_Command = Continuous ?
":INIT:CONT 1" :
":INIT:CONT 0;:INIT";
2680 return l_WriteAndRead(l_Command, m_ReadBuffer);
2688 std::string l_Command = CancelContinuous ?
":INIT:CONT 0;:ABOR" :
":ABOR";
2689 return l_WriteAndRead(l_Command, m_ReadBuffer);
2705 std::string l_Command =
":OUTP:TRIG:IMM";
2706 return l_WriteAndRead(l_Command, m_ReadBuffer);
2718 std::string l_Command =
":UNIT?;:FETC:ARR:FLUX? " + std::to_string(NoMeasurements);
2719 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
2723 std::vector<char>::const_iterator l_tokenbeg, l_tokenend;
2725 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2727 if (!
StringToUnits(std::string(l_tokenbeg, l_tokenend), rUnits))
2730 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2732 size_t l_Start, l_Len;
2735 for (
auto l_it = l_tokenbeg + l_Start; l_it < l_tokenbeg + l_Start + l_Len; l_it +=
sizeof(F64))
2740 std::vector<char>::const_iterator fluxbeg, fluxend;
2743 for (l_GetNextRet = l_FluxParser.
GetNext(fluxbeg, fluxend,
','); l_GetNextRet && fluxbeg != l_tokenend; l_GetNextRet = l_FluxParser.
GetNext(fluxbeg, fluxend,
','))
2744 rFlux.push_back(std::stof(std::string(fluxbeg, fluxend)));
2747 if (rFlux.size() != NoMeasurements)
2768 std::string l_Command =
":UNIT?";
2769 if (ArbSelect.
Flux) l_Command +=
";:FETC:ARR:FLUX? " + std::to_string(NoMeasurements);
2770 if (ArbSelect.
Deviation) l_Command +=
";:FETC:ARR:SIGM? " + std::to_string(NoMeasurements);
2771 if (ArbSelect.
Uniformity) l_Command +=
";:FETC:ARR:UNIF? " + std::to_string(NoMeasurements);
2772 if (ArbSelect.
Channel) l_Command +=
";:FETC:ARR:CHAN? " + std::to_string(NoMeasurements);
2773 if (ArbSelect.
Timestamp) l_Command +=
";:FETC:ARR:TIM? " + std::to_string(NoMeasurements);
2774 if (ArbSelect.
Status) l_Command +=
";:FETC:ARR:STAT? " + std::to_string(NoMeasurements);
2775 if (ArbSelect.
NbValidMeas) l_Command +=
";:FETC:ARR:VLM? " + std::to_string(NoMeasurements);
2776 if (ArbSelect.
IF) l_Command +=
";:FETC:SCAL:IFR?";
2784 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
2789 std::vector<char>::const_iterator l_tokenbeg, l_tokenend;
2791 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2793 if (!
StringToUnits(std::string(l_tokenbeg, l_tokenend), rUnits))
2797 if (ArbSelect.
Flux ||
2809 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2815 for (
size_t index = 0; Len >=
sizeof(F64); Len -=
sizeof(F64), Start +=
sizeof(F64), index++)
2820 std::vector<char>::const_iterator fluxbeg, fluxend;
2822 if (!l_FluxParser.
GetNext(fluxbeg, fluxend,
','))
2824 bool l_GetNextRet =
true;
2825 for (
size_t index = 0; l_GetNextRet && fluxbeg != l_tokenend; l_GetNextRet = l_FluxParser.
GetNext(fluxbeg, fluxend,
','), index++)
2826 rMeas.
AdvMeas.
Basic[index].Flux_UNITS = std::stod(std::string(fluxbeg, fluxend));
2831 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2837 for (
size_t index = 0; Len >=
sizeof(F32); Len -=
sizeof(F32), Start +=
sizeof(F32), index++)
2842 std::vector<char>::const_iterator devbeg, devend;
2844 if (!l_DevParser.
GetNext(devbeg, devend,
','))
2846 bool l_GetNextRet =
true;
2847 for (
size_t index = 0; l_GetNextRet && devbeg != l_tokenend; l_GetNextRet = l_DevParser.
GetNext(devbeg, devend,
','), index++)
2848 rMeas.
AdvMeas.
Basic[index].Deviation_ppm = std::stof(std::string(devbeg, devend));
2853 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2859 for (
size_t index = 0; Len >=
sizeof(F32); Len -=
sizeof(F32), Start +=
sizeof(F32), index++)
2864 std::vector<char>::const_iterator unifbeg, unifend;
2866 if (!l_UnifParser.
GetNext(unifbeg, unifend,
','))
2868 bool l_GetNextRet =
true;
2869 for (
size_t index = 0; l_GetNextRet && unifbeg != l_tokenend; l_GetNextRet = l_UnifParser.
GetNext(unifbeg, unifend,
','), index++)
2870 rMeas.
AdvMeas.
Basic[index].Uniformity = std::stof(std::string(unifbeg, unifend));
2876 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2885 for (
size_t index = 0; index < l_ChanList.size() && index < rMeas.
AdvMeas.
Basic.size(); index++)
2886 rMeas.
AdvMeas.
Basic[index].Channel = l_ChanList[index];
2890 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2896 for (
size_t index = 0; Len >=
sizeof(U64); Len -=
sizeof(U64), Start +=
sizeof(U64), index++)
2901 std::vector<char>::const_iterator timbeg, timend;
2903 if (!l_TimParser.
GetNext(timbeg, timend,
','))
2905 bool l_GetNextRet =
true;
2906 for (
size_t index = 0; l_GetNextRet && timbeg != l_tokenend; l_GetNextRet = l_TimParser.
GetNext(timbeg, timend,
','), index++)
2907 rMeas.
AdvMeas.
Basic[index].Timestamp = std::stoull(std::string(timbeg, timend));
2912 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2918 for (
size_t index = 0; Len >=
sizeof(U8); Len -=
sizeof(U8), Start +=
sizeof(U8), index++)
2919 rMeas.
AdvMeas.
Basic[index].Status.StatusByte = *(&*l_tokenbeg + Start);
2923 std::vector<char>::const_iterator statbeg, statend;
2925 if (!l_StatParser.
GetNext(statbeg, statend,
','))
2927 bool l_GetNextRet =
true;
2928 for (
size_t index = 0; l_GetNextRet && statbeg != l_tokenend; l_GetNextRet = l_StatParser.
GetNext(statbeg, statend,
','), index++)
2929 rMeas.
AdvMeas.
Basic[index].Status.StatusByte =
static_cast<U8
>(std::stoul(std::string(statbeg, statend)));
2934 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2940 for (
size_t index = 0; Len >=
sizeof(U32); Len -=
sizeof(U32), Start +=
sizeof(U32), index++)
2945 std::vector<char>::const_iterator timbeg, timend;
2947 if (!l_NbValidParser.
GetNext(timbeg, timend,
','))
2949 bool l_GetNextRet =
true;
2950 for (
size_t index = 0; l_GetNextRet && timbeg != l_tokenend; l_GetNextRet = l_NbValidParser.
GetNext(timbeg, timend,
','), index++)
2951 rMeas.
AdvMeas.
Basic[index].NbValidMeas = std::stoul(std::string(timbeg, timend));
2956 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2971 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2986 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
3001 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
3009 std::vector<char>::const_iterator NmrSampbeg = l_tokenbeg + Start +
sizeof(rMeas.
NMR.
SamplePeriod_s);
3011 size_t NmrSampStart = 0;
3013 for (
size_t index = 0; NmrSampLen >=
sizeof(F32); NmrSampLen -=
sizeof(F32), NmrSampStart +=
sizeof(F32), index++)
3018 std::vector<char>::const_iterator nmrbeg, nmrend;
3020 if (!l_NmrParser.
GetNext(nmrbeg, nmrend,
','))
3022 bool l_GetNextRes =
true;
3023 for (
size_t index = 0; l_GetNextRes && nmrbeg != l_tokenend; l_GetNextRes = l_NmrParser.
GetNext(nmrbeg, nmrend,
','), index++)
3024 rMeas.
NMR.
Samples_V.push_back(std::stof(std::string(nmrbeg, nmrend)));
3029 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
3039 size_t FFTSampStart = 0;
3041 for (
size_t index = 0; FFTSampLen >=
sizeof(F32); FFTSampLen -=
sizeof(F32), FFTSampStart +=
sizeof(F32), index++)
3046 std::vector<char>::const_iterator fftbeg, fftend;
3048 if (!l_FftParser.
GetNext(fftbeg, fftend,
','))
3050 bool l_GetNextRes =
true;
3051 for (
size_t index = 0; l_GetNextRes && fftbeg != l_tokenend; l_GetNextRes = l_FftParser.
GetNext(fftbeg, fftend,
','), index++)
3052 rMeas.
FFT.
Samples_V.push_back(std::stof(std::string(fftbeg, fftend)));
3057 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
3068 size_t SpecSampStart = 0;
3070 for (
size_t index = 0; SpecSampLen >=
sizeof(F32); SpecSampLen -=
sizeof(F32), SpecSampStart +=
sizeof(F32), index++)
3075 std::vector<char>::const_iterator specbeg, specend;
3077 if (!l_SpecParser.
GetNext(specbeg, specend,
','))
3079 bool l_GetNextRes =
true;
3080 for (
size_t index = 0; l_GetNextRes && specbeg != l_tokenend; l_GetNextRes = l_SpecParser.
GetNext(specbeg, specend,
','), index++)
3086 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
3094 std::vector<char>::const_iterator PolyCoefbeg = l_tokenbeg + Start +
sizeof(rMeas.
FitPolynom.
Residue);
3096 size_t PolyCoefStart = 0;
3098 for (
size_t index = 0; PolyCoefLen >=
sizeof(F32); PolyCoefLen -=
sizeof(F32), PolyCoefStart +=
sizeof(F32), index++)
3103 std::vector<char>::const_iterator polybeg, polyend;
3105 if (!l_PolyParser.
GetNext(polybeg, polyend,
','))
3108 if (!l_PolyParser.
GetNext(polybeg, polyend,
','))
3110 bool l_GetNextRes =
true;
3111 for (
size_t index = 0; l_GetNextRes && polybeg != l_tokenend; l_GetNextRes = l_PolyParser.
GetNext(polybeg, polyend,
','), index++)
3112 rMeas.
FitPolynom.
Coeffs.push_back(std::stof(std::string(polybeg, polyend)));
3131 if (!l_WriteAndRead(
":FETC:SPR?", m_ReadBuffer))
3134 size_t l_Start, l_Len;
3137 rSPR = *(m_ReadBuffer.
data() + l_Start);
3138 rHallMeasurement_UNITS =
BinaryToF64(m_ReadBuffer.
data() + l_Start + 1);
3144 std::vector<char>::const_iterator l_tokenbeg, l_tokenend;
3146 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
','))
3148 rSPR = std::stoi(std::string(l_tokenbeg, l_tokenend));
3150 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
','))
3152 rHallMeasurement_UNITS = std::stod(std::string(l_tokenbeg, l_tokenend));
3169 std::string l_Command;
3174 l_Command +=
":FORM:DATA ASC";
3177 l_Command +=
":FORM:DATA INT";
3183 return l_WriteAndRead(l_Command, m_ReadBuffer);
3194 return l_WriteAndRead(
":STAT:PRES", m_ReadBuffer);
3202 std::string l_Command;
3208 l_Command +=
":STAT:QUES";
3211 l_Command +=
":STAT:OPER";
3214 l_Command +=
":STAT:OPER:BIT11";
3217 l_Command +=
":STAT:OPER:BIT12";
3220 l_Command +=
":STAT:QUES:BIT12";
3230 l_Command +=
":EVEN?";
3233 l_Command +=
":COND?";
3236 l_Command +=
":ENAB?";
3244 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
3247 rStatus = std::stoi(std::string(m_ReadBuffer.
begin(), m_ReadBuffer.
end()));
3265 std::string l_Command;
3267 for (std::vector<sStatusRegister>::const_iterator it = Regs.begin(); it != Regs.end(); it++)
3269 if (it != Regs.begin())
3274 l_Command +=
":STAT:QUES";
3277 l_Command +=
":STAT:OPER";
3280 l_Command +=
":STAT:OPER:BIT11";
3283 l_Command +=
":STAT:OPER:BIT12";
3286 l_Command +=
":STAT:QUES:BIT12";
3295 l_Command +=
":EVEN?";
3298 l_Command +=
":COND?";
3301 l_Command +=
":ENAB?";
3310 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
3315 std::vector<char>::const_iterator l_tokenbeg, l_tokenend;
3317 for (
size_t i = Regs.size(); i > 0; i--)
3319 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
3321 rStatus.push_back(std::stoi(std::string(l_tokenbeg, l_tokenend)));
3338 std::string l_RegSet, l_Command;
3343 l_RegSet +=
":STAT:QUES";
3346 l_RegSet +=
":STAT:OPER";
3349 l_RegSet +=
":STAT:OPER:BIT11";
3352 l_RegSet +=
":STAT:OPER:BIT12";
3355 l_RegSet +=
":STAT:QUES:BIT12";
3364 l_Command = l_RegSet +
":ENAB?";
3365 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
3368 U16 l_StatusEnab =
static_cast<U16
>(std::stoi(std::string(m_ReadBuffer.
begin(), m_ReadBuffer.
end())));
3371 l_StatusEnab |= EnableMask;
3372 l_StatusEnab &= ~DisableMask;
3375 l_Command = l_RegSet +
":ENAB" +
" " + std::to_string(l_StatusEnab);
3376 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
3391 FUNCTION_NAME__ << std::endl);
3394 std::string l_RegSet, l_Command;
3399 l_RegSet +=
":STAT:QUES";
3402 l_RegSet +=
":STAT:OPER";
3405 l_RegSet +=
":STAT:OPER:BIT11";
3408 l_RegSet +=
":STAT:OPER:BIT12";
3411 l_RegSet +=
":STAT:QUES:BIT12";
3423 l_Command = l_RegSet +
":PTR?";
3426 l_Command = l_RegSet +
":NTR?";
3432 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
3435 U16 l_TransFilter = std::stoi(std::string(m_ReadBuffer.
begin(), m_ReadBuffer.
end()));
3438 l_TransFilter |= SetMask;
3439 l_TransFilter &= ~ClearMask;
3445 l_Command = l_RegSet +
":PTR";
3448 l_Command = l_RegSet +
":NTR";
3454 l_Command +=
" " + std::to_string(l_TransFilter);
3455 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
3472 std::string l_Command;
3477 l_Command +=
"*ESE";
3480 l_Command +=
"*SRE";
3489 if (!l_WriteAndRead(l_Command +
"?", m_ReadBuffer))
3492 U16 l_StatusEnab = std::stoi(std::string(m_ReadBuffer.
begin(), m_ReadBuffer.
end()));
3495 l_StatusEnab |= EnableMask;
3496 l_StatusEnab &= ~DisableMask;
3499 l_Command +=
" " + std::to_string(l_StatusEnab);
3500 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
3521 if (!l_WriteAndRead(
"*IDN?", m_ReadBuffer))
3524 rIdentification = std::string(m_ReadBuffer.
begin(), m_ReadBuffer.
end());
3530 rIdentification.clear();
3540 std::string l_Command(
":SYST:POFF ");
3541 l_Command += (Reboot ?
"1" :
"0");
3543 return l_WriteAndRead(l_Command, m_ReadBuffer);
3550 return Write(
"*RST");
3558 if (!l_WriteAndRead(
":SYST:TEMP?", m_ReadBuffer,
true))
3561 rTemperatureDegC = std::stof(std::string(m_ReadBuffer.
begin(), m_ReadBuffer.
end()));
3567 rTemperatureDegC = SPqNaN;
3577 return Write(
":DIAG:UPGR");
3586 if (!l_WriteAndRead(
":DIAG:LOG?", m_ReadBuffer))
3589 rDebugLog = std::string(m_ReadBuffer.
begin(), m_ReadBuffer.
end());
3605 if (!l_WriteAndRead(
":SYST:MDAT?;CDAT?", m_ReadBuffer))
3610 std::vector<char>::const_iterator l_tokenbeg, l_tokenend;
3613 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
3615 rSManufacturingDate = std::string(l_tokenbeg, l_tokenend);
3616 std::match_results<std::string::const_iterator> l_Mm;
3618 if (!std::regex_match(rSManufacturingDate, l_Mm, std::regex(
"^([0-9]{2})([0-9]{2})([0-9]{2})")))
3620 std::stringstream l_DateStream;
3621 std::chrono::system_clock::time_point l_TimePointUTC;
3623 l_DateStream <<
"20" + l_Mm[1].str() +
"-" + l_Mm[2].str() +
"-" + l_Mm[3].str() +
" 00:00:00";
3624 l_DateStream >>
date::parse(
"%F %T", l_TimePointUTC);
3625 rManufacturingDate = std::chrono::system_clock::to_time_t(l_TimePointUTC);
3628 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
3630 rSCalibrationDate = std::string(l_tokenbeg, l_tokenend);
3631 std::match_results<std::string::const_iterator> l_Cm;
3633 if (!std::regex_match(rSCalibrationDate, l_Cm, std::regex(
"^([0-9]{2})([0-9]{2})([0-9]{2})")))
3636 l_DateStream.clear();
3637 std::chrono::system_clock::time_point l_TimePointCalUTC;
3638 l_DateStream <<
"20" + l_Cm[1].str() +
"-" + l_Cm[2].str() +
"-" + l_Cm[3].str() +
" 00:00:00";
3639 l_DateStream >>
date::parse(
"%F %T", l_TimePointCalUTC);
3640 rCalibrationDate = std::chrono::system_clock::to_time_t(l_TimePointCalUTC);
3646 rSManufacturingDate.clear();
3647 rManufacturingDate = -1;
3648 rSCalibrationDate.clear();
3649 rCalibrationDate = -1;
3665 l_SingleChannelList.push_back(rChannel);
3666 std::string l_StrChannelList;
3669 std::string l_Command =
":ROUT:MMEM:DATA? " + l_StrChannelList;
3672 if (!l_WriteAndRead(l_Command, m_ReadBuffer,
true))
3675 size_t l_Start, l_Len;
3679 rROMContent.assign(m_ReadBuffer.
data() + l_Start, m_ReadBuffer.
data() + l_Start + l_Len);
3696 l_SingleChannelList.push_back(rChannel);
3697 std::string l_StrChannelList;
3700 std::string l_StrROMContent;
3701 l_StrROMContent.assign(rROMContent.begin(), rROMContent.end());
3702 std::string l_StrROMArbBlock;
3705 std::string l_Command =
":ROUT:MMEM:DATA " + l_StrChannelList +
"," + l_StrROMArbBlock;
3707 return l_WriteAndRead(l_Command, m_ReadBuffer,
true);
3716 l_SingleChannelList.push_back(rChannel);
3717 std::string l_StrChannelList;
3720 std::string l_Command =
":ROUT:MMEM:NORM? " + l_StrChannelList;
3723 if (!l_WriteAndRead(l_Command, m_ReadBuffer,
true))
3726 size_t l_Start, l_Len;
3731 rNormalizationTable.push_back(
BinaryToF32(&*l_it));
3748 l_SingleChannelList.push_back(rChannel);
3749 std::string l_StrChannelList;
3752 std::vector<U8> l_RawNormalizationTable;
3754 std::memcpy(l_RawNormalizationTable.data(), rNormalizationTable.data(), l_RawNormalizationTable.size());
3755 std::string l_StrNormTableArbBlock;
3756 ToArbitraryBlock(std::string(l_RawNormalizationTable.begin(), l_RawNormalizationTable.end()), l_StrNormTableArbBlock);
3758 std::string l_Command =
":ROUT:MMEM:NORM " + l_StrChannelList +
"," + l_StrNormTableArbBlock;
3760 return l_WriteAndRead(l_Command, m_ReadBuffer,
true);
3767 std::string l_Command =
":ROUT:LOWL? ";
3768 std::string l_DataToSend;
3769 l_DataToSend.assign(rDataToSend.begin(), rDataToSend.end());
3770 l_Command += l_DataToSend;
3773 if (!l_WriteAndRead(l_Command, m_ReadBuffer,
true))
3776 size_t l_Start, l_Len;
3780 rReturnedStatus = *(m_ReadBuffer.
data() + l_Start);
3781 rRcvdData.assign(m_ReadBuffer.
data() + l_Start + 1, m_ReadBuffer.
data() + l_Start + l_Len);
3787 rReturnedStatus = 0;
3798 return l_WriteAndRead(rWriteStr, m_ReadBuffer,
true);