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)
159 if (!LockExclusive(m_Timeout_ms))
164 bool l_OPCAppended = !std::regex_match(rWriteStr, std::regex(
"\\*IDN\\?"));
167 l_Query = rWriteStr +
";*OPC?";
172 if (!Write(
reinterpret_cast<ViBuf
>(
const_cast<char *
>(l_Query.data())),
static_cast<ViUInt32
>(l_Query.size())))
182 if (!ReadSTB(l_STB.
RawSTB))
187 if (!ReadSTB(l_STB.
RawSTB))
195 if (!Read(rReadBuffer,
true))
201 size_t l_MaxSizeToMatch =
sizeof(
";1\n") - 1;
202 std::match_results<std::vector<char>::iterator> m;
204 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?$")))
205 rReadBuffer.
resize(rReadBuffer.
size() -
static_cast<size_t>(m.length()));
210 if (!ReadSTB(l_STB.
RawSTB))
227 Read(rReadBuffer,
true);
230 l_GetErrorList(rWriteStr);
262 std::vector<sError> l_ErrList;
263 while (!m_ErrorList.empty())
265 l_ErrList.push_back(m_ErrorList.front());
280 m_Timeout_ms = InitialTimeout;
287 if (!l_WriteAndRead(
"*CLS", m_ReadBuffer))
318 if (!l_WriteAndRead(
":SYST:LOCK:REQ?", m_ReadBuffer))
320 if (m_ReadBuffer[0] !=
'1')
338 if (!l_WriteAndRead(
":SYST:LOCK:REL", m_ReadBuffer))
359 if (!l_WriteAndRead(
":ROUT:PROB:SCAN?", m_ReadBuffer,
true))
362 size_t l_Start, l_Len;
383 if (!l_WriteAndRead(
":ROUT:ESCAN?", m_ReadBuffer,
true))
404 if (!l_WriteAndRead(
":ROUT:CLOS:STAT?;ACT?", m_ReadBuffer))
407 size_t l_Start, l_Len;
411 std::vector<char>::iterator Separator = std::find(m_ReadBuffer.
begin(), m_ReadBuffer.
end(),
';');
418 if (l_Tokens.size() != 2)
439 std::string l_Command =
":ROUT:CLOS:LLIS";
440 l_Command += (State ?
" 1" :
" 0");
441 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
459 if (!l_WriteAndRead(
":ROUT:CLOS:LLIS?", m_ReadBuffer))
462 std::string l_Answer(m_ReadBuffer.
begin(), m_ReadBuffer.
end());
465 else if (l_Answer ==
"0")
485 std::string l_ChanList;
487 std::string l_Command =
":ROUT:CLOS " + l_ChanList;
488 if (!l_WriteAndRead(l_Command, m_ReadBuffer,
true))
508 std::string l_ChanList;
510 std::string l_Command =
":ROUT:PROB:MOD? " + l_ChanList +
511 ";SER? " + l_ChanList +
512 ";DES? " + l_ChanList +
513 ";FWV? " + l_ChanList;
514 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
519 if (l_Tokens.size() != 4)
523 std::vector<std::string> l_Models;
524 SplitString(std::string(l_Tokens[0].begin, l_Tokens[0].end), l_Models,
',');
525 if (l_Models.size() != rChanList.size())
528 std::vector<std::string> l_SNs;
529 SplitString(std::string(l_Tokens[1].begin, l_Tokens[1].end), l_SNs,
',');
530 if (l_SNs.size() != rChanList.size())
533 std::vector<std::string> l_Des;
534 SplitString(std::string(l_Tokens[2].begin, l_Tokens[2].end), l_Des,
',');
535 if (l_Des.size() != rChanList.size())
538 std::vector<std::string> l_FWVs;
539 SplitString(std::string(l_Tokens[3].begin, l_Tokens[3].end), l_FWVs,
',');
540 if (l_FWVs.size() != rChanList.size())
544 for (
size_t l_ChanNo = 0; l_ChanNo < rChanList.size(); l_ChanNo++)
547 rChanInfo.push_back(ChanInfo);
563 rLowLimit_UNITS.clear();
564 rHighLimit_UNITS.clear();
567 std::string l_ChanList;
569 std::string l_Command =
":ROUT:PROB:MIN? " + l_ChanList +
570 ";MAX? " + l_ChanList;
571 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
576 if (l_Tokens.size() != 2)
580 std::vector<std::string> l_LowLimits;
581 SplitString(std::string(l_Tokens[0].begin, l_Tokens[0].end), l_LowLimits,
',');
582 if (l_LowLimits.size() != rChanList.size())
585 std::vector<std::string> l_HighLimits;
586 SplitString(std::string(l_Tokens[1].begin, l_Tokens[1].end), l_HighLimits,
',');
587 if (l_HighLimits.size() != rChanList.size())
591 for (
size_t l_ChanNo = 0; l_ChanNo < rChanList.size(); l_ChanNo++)
593 rLowLimit_UNITS.push_back(std::stod(l_LowLimits[l_ChanNo]));
594 rHighLimit_UNITS.push_back(std::stod(l_HighLimits[l_ChanNo]));
613 if (!l_WriteAndRead(
":ROUT:PROB:HALL:RAW?", m_ReadBuffer,
true))
618 if (l_Tokens.size() != 4)
621 rRawHall.
Bx =
static_cast<U8
>(std::stoul(std::string(l_Tokens[0].begin, l_Tokens[0].end)));
622 rRawHall.
Bz =
static_cast<U8
>(std::stoul(std::string(l_Tokens[2].begin, l_Tokens[2].end)));
623 rRawHall.
By =
static_cast<U8
>(std::stoul(std::string(l_Tokens[1].begin, l_Tokens[1].end)));
624 rRawHall.
T =
static_cast<U8
>(std::stoul(std::string(l_Tokens[3].begin, l_Tokens[3].end)));
642 if (!l_WriteAndRead(
":ROUT:PROB:HALL:CAL?", m_ReadBuffer,
true))
647 if (l_Tokens.size() != 4)
650 rHall.
Bx = std::stod(std::string(l_Tokens[0].begin, l_Tokens[0].end));
651 rHall.
By = std::stod(std::string(l_Tokens[1].begin, l_Tokens[1].end));
652 rHall.
Bz = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
653 rHall.
B = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
669 if (!l_WriteAndRead(
":ROUT:PROB:REM:LEDM?", m_ReadBuffer))
672 U8 l_ModeNumber =
static_cast<U8
>(std::stoul(std::string(m_ReadBuffer.
begin(), m_ReadBuffer.
end())));
691 std::string l_Command =
":ROUT:PROB:REM:LEDM " + std::to_string(Mode);
692 return l_WriteAndRead(l_Command, m_ReadBuffer);
703 std::string l_Command;
704 switch (rSearch.
Mode)
707 l_Command =
":CONF:SEAR:MODE AUTO";
710 l_Command =
":CONF:SEAR:MODE CUST";
715 l_Command =
":CONF:SEAR:MODE MAN";
726 return l_WriteAndRead(l_Command, m_ReadBuffer);
734 if (!l_WriteAndRead(
":CONF:SEAR:MODE?"
745 if (l_Tokens.size() != 6)
749 std::string l_Mode(l_Tokens[0].begin, l_Tokens[0].end);
750 if (l_Mode ==
"AUTO")
752 else if (l_Mode ==
"CUSTom")
754 else if (l_Mode ==
"MANual")
759 rSearch.
DetectionLevel_V = std::stod(std::string(l_Tokens[1].begin, l_Tokens[1].end));
761 rSearch.
FrequencyStep_Hz = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
763 rSearch.
HighLimit_UNITS = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
765 rSearch.
LowLimit_UNITS = std::stod(std::string(l_Tokens[4].begin, l_Tokens[4].end));
767 rSearch.
ManualValue_UNITS = std::stod(std::string(l_Tokens[5].begin, l_Tokens[5].end));
783 if (!l_WriteAndRead(
":CONF:SEAR:MODE?"
784 ";LEV?;LEV? MIN;LEV? MAX;LEV? DEF"
785 ";FSTE?;FSTE? MIN;FSTE? MAX;FSTE? DEF"
786 ";HIGH?;HIGH? MIN;HIGH? MAX;HIGH? DEF"
787 ";LOW?;LOW? MIN;LOW? MAX;LOW? DEF"
788 ";VAL?;VAL? MIN;VAL? MAX;VAL? DEF",
794 if (l_Tokens.size() != 21)
798 std::string l_Mode(l_Tokens[0].begin, l_Tokens[0].end);
799 if (l_Mode ==
"AUTO")
801 else if (l_Mode ==
"CUSTom")
803 else if (l_Mode ==
"MANual")
808 rSearch.
DetectionLevel_V.Val = std::stod(std::string(l_Tokens[1].begin, l_Tokens[1].end));
809 rSearch.
DetectionLevel_V.Min = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
810 rSearch.
DetectionLevel_V.Max = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
811 rSearch.
DetectionLevel_V.Def = std::stod(std::string(l_Tokens[4].begin, l_Tokens[4].end));
813 rSearch.
FrequencyStep_Hz.Val = std::stod(std::string(l_Tokens[5].begin, l_Tokens[5].end));
814 rSearch.
FrequencyStep_Hz.Min = std::stod(std::string(l_Tokens[6].begin, l_Tokens[6].end));
815 rSearch.
FrequencyStep_Hz.Max = std::stod(std::string(l_Tokens[7].begin, l_Tokens[7].end));
816 rSearch.
FrequencyStep_Hz.Def = std::stod(std::string(l_Tokens[8].begin, l_Tokens[8].end));
818 rSearch.
HighLimit_UNITS.Val = std::stod(std::string(l_Tokens[9].begin, l_Tokens[9].end));
819 rSearch.
HighLimit_UNITS.Min = std::stod(std::string(l_Tokens[10].begin, l_Tokens[10].end));
820 rSearch.
HighLimit_UNITS.Max = std::stod(std::string(l_Tokens[11].begin, l_Tokens[11].end));
821 rSearch.
HighLimit_UNITS.Def = std::stod(std::string(l_Tokens[12].begin, l_Tokens[12].end));
823 rSearch.
LowLimit_UNITS.Val = std::stod(std::string(l_Tokens[13].begin, l_Tokens[13].end));
824 rSearch.
LowLimit_UNITS.Min = std::stod(std::string(l_Tokens[14].begin, l_Tokens[14].end));
825 rSearch.
LowLimit_UNITS.Max = std::stod(std::string(l_Tokens[15].begin, l_Tokens[15].end));
826 rSearch.
LowLimit_UNITS.Def = std::stod(std::string(l_Tokens[16].begin, l_Tokens[16].end));
828 rSearch.
ManualValue_UNITS.Val = std::stod(std::string(l_Tokens[17].begin, l_Tokens[17].end));
829 rSearch.
ManualValue_UNITS.Min = std::stod(std::string(l_Tokens[18].begin, l_Tokens[18].end));
830 rSearch.
ManualValue_UNITS.Max = std::stod(std::string(l_Tokens[19].begin, l_Tokens[19].end));
831 rSearch.
ManualValue_UNITS.Def = std::stod(std::string(l_Tokens[20].begin, l_Tokens[20].end));
846 std::string l_Command =
":CONF:SEAR:VAL " +
l_ToString(ManualValue_UNITS);
848 return l_WriteAndRead(l_Command, m_ReadBuffer);
855 std::string l_Command =
":CONF:SEAR:LIM";
856 l_Command +=
":LOW " +
l_ToString(LowLimit_UNITS);
857 l_Command +=
";HIGH " +
l_ToString(HighLimit_UNITS);
859 return l_WriteAndRead(l_Command, m_ReadBuffer);
866 std::string l_Command = std::string(
":CONF:SEAR:HALL ") + (Enabled ?
"1" :
"0");
868 return l_WriteAndRead(l_Command, m_ReadBuffer);
876 if (!l_WriteAndRead(
":CONF:SEAR:HALL?", m_ReadBuffer))
879 std::string l_Answer(m_ReadBuffer.
begin(), m_ReadBuffer.
end());
882 else if (l_Answer ==
"0")
900 std::string l_Command;
901 switch (rMeasure.
Mode)
904 l_Command =
":CONF:MEAS:MODE AUTO";
907 l_Command =
":CONF:MEAS:MODE MAN";
910 l_Command += rMeasure.
Reject ?
";REJ ON" :
";REJ OFF";
912 l_Command +=
";POIN " + std::to_string(rMeasure.
NoFitPoints);
913 l_Command +=
";:CONF:TRAC:HYST " + std::to_string(rMeasure.
Tracking.AllowedMissMeas);
922 return l_WriteAndRead(l_Command, m_ReadBuffer);
930 if (!l_WriteAndRead(
":CONF:MEAS:MODE?"
944 if (l_Tokens.size() != 9)
948 std::string l_Mode(l_Tokens[0].begin, l_Tokens[0].end);
949 if (l_Mode ==
"AUTO")
951 else if (l_Mode ==
"MANual")
956 std::string l_Rejection(l_Tokens[1].begin, l_Tokens[1].end);
957 if (l_Rejection ==
"1")
959 else if (l_Rejection ==
"0")
964 rMeasure.
DetectionLevel_V = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
966 rMeasure.
Bandwidth_Hz = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
968 rMeasure.
NoFitPoints =
static_cast<U32
>(std::stol(std::string(l_Tokens[4].begin, l_Tokens[4].end)));
970 rMeasure.
AllowedMissMeas =
static_cast<U32
>(std::stol(std::string(l_Tokens[5].begin, l_Tokens[5].end)));
972 rMeasure.
Tracking.AllowedMissMeas =
static_cast<U32
>(std::stol(std::string(l_Tokens[6].begin, l_Tokens[6].end)));
974 rMeasure.
Tracking.MinIF_Hz = std::stod(std::string(l_Tokens[7].begin, l_Tokens[7].end));
976 rMeasure.
Tracking.MaxIF_Hz = std::stod(std::string(l_Tokens[8].begin, l_Tokens[8].end));
992 if (!l_WriteAndRead(
":CONF:MEAS:MODE?"
994 ";LEV?;LEV? MIN;LEV? MAX;LEV? DEF"
995 ";BAND?;BAND? MIN;BAND? MAX;BAND? DEF"
996 ";POIN?;POIN? MIN;POIN? MAX;POIN? DEF"
997 ";HYST?;HYST? MIN;HYST? MAX;HYST? DEF"
998 ";:CONF:TRAC:HYST?;HYST? MIN;HYST? MAX;HYST? DEF"
999 ";LOW?;LOW? MIN;LOW? MAX;LOW? DEF"
1000 ";HIGH?;HIGH? MIN;HIGH? MAX;HIGH? DEF",
1006 if (l_Tokens.size() != 30)
1010 std::string l_Mode(l_Tokens[0].begin, l_Tokens[0].end);
1011 if (l_Mode ==
"AUTO")
1013 else if (l_Mode ==
"MANual")
1018 std::string l_Rejection(l_Tokens[1].begin, l_Tokens[1].end);
1019 if (l_Rejection ==
"1")
1021 else if (l_Rejection ==
"0")
1026 rMeasure.
DetectionLevel_V.Val = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
1027 rMeasure.
DetectionLevel_V.Min = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
1028 rMeasure.
DetectionLevel_V.Max = std::stod(std::string(l_Tokens[4].begin, l_Tokens[4].end));
1029 rMeasure.
DetectionLevel_V.Def = std::stod(std::string(l_Tokens[5].begin, l_Tokens[5].end));
1031 rMeasure.
Bandwidth_Hz.Val = std::stod(std::string(l_Tokens[6].begin, l_Tokens[6].end));
1032 rMeasure.
Bandwidth_Hz.Min = std::stod(std::string(l_Tokens[7].begin, l_Tokens[7].end));
1033 rMeasure.
Bandwidth_Hz.Max = std::stod(std::string(l_Tokens[8].begin, l_Tokens[8].end));
1034 rMeasure.
Bandwidth_Hz.Def = std::stod(std::string(l_Tokens[9].begin, l_Tokens[9].end));
1036 rMeasure.
NoFitPoints.Val =
static_cast<U32
>(std::stol(std::string(l_Tokens[10].begin, l_Tokens[10].end)));
1037 rMeasure.
NoFitPoints.Min =
static_cast<U32
>(std::stol(std::string(l_Tokens[11].begin, l_Tokens[11].end)));
1038 rMeasure.
NoFitPoints.Max =
static_cast<U32
>(std::stol(std::string(l_Tokens[12].begin, l_Tokens[12].end)));
1039 rMeasure.
NoFitPoints.Def =
static_cast<U32
>(std::stol(std::string(l_Tokens[13].begin, l_Tokens[13].end)));
1041 rMeasure.
AllowedMissMeas.Val =
static_cast<U32
>(std::stol(std::string(l_Tokens[14].begin, l_Tokens[14].end)));
1042 rMeasure.
AllowedMissMeas.Min =
static_cast<U32
>(std::stol(std::string(l_Tokens[15].begin, l_Tokens[15].end)));
1043 rMeasure.
AllowedMissMeas.Max =
static_cast<U32
>(std::stol(std::string(l_Tokens[16].begin, l_Tokens[16].end)));
1044 rMeasure.
AllowedMissMeas.Def =
static_cast<U32
>(std::stol(std::string(l_Tokens[17].begin, l_Tokens[17].end)));
1046 rMeasure.
Tracking.AllowedMissMeas.Val =
static_cast<U32
>(std::stol(std::string(l_Tokens[18].begin, l_Tokens[18].end)));
1047 rMeasure.
Tracking.AllowedMissMeas.Min =
static_cast<U32
>(std::stol(std::string(l_Tokens[19].begin, l_Tokens[19].end)));
1048 rMeasure.
Tracking.AllowedMissMeas.Max =
static_cast<U32
>(std::stol(std::string(l_Tokens[20].begin, l_Tokens[20].end)));
1049 rMeasure.
Tracking.AllowedMissMeas.Def =
static_cast<U32
>(std::stol(std::string(l_Tokens[21].begin, l_Tokens[21].end)));
1051 rMeasure.
Tracking.MinIF_Hz.Val = std::stod(std::string(l_Tokens[22].begin, l_Tokens[22].end));
1052 rMeasure.
Tracking.MinIF_Hz.Min = std::stod(std::string(l_Tokens[23].begin, l_Tokens[23].end));
1053 rMeasure.
Tracking.MinIF_Hz.Max = std::stod(std::string(l_Tokens[24].begin, l_Tokens[24].end));
1054 rMeasure.
Tracking.MinIF_Hz.Def = std::stod(std::string(l_Tokens[25].begin, l_Tokens[25].end));
1056 rMeasure.
Tracking.MaxIF_Hz.Val = std::stod(std::string(l_Tokens[26].begin, l_Tokens[26].end));
1057 rMeasure.
Tracking.MaxIF_Hz.Min = std::stod(std::string(l_Tokens[27].begin, l_Tokens[27].end));
1058 rMeasure.
Tracking.MaxIF_Hz.Max = std::stod(std::string(l_Tokens[28].begin, l_Tokens[28].end));
1059 rMeasure.
Tracking.MaxIF_Hz.Def = std::stod(std::string(l_Tokens[29].begin, l_Tokens[29].end));
1074 std::string l_Command =
":AVERage1:STAT ";
1075 switch (rSigAvg.
Type)
1081 l_Command +=
"ON" ";:AVERage1:TCON EXP";
1082 l_Command +=
";:AVERage1:COUN " + std::to_string(rSigAvg.
NoPoints);
1085 l_Command +=
"ON" ";:AVERage1:TCON REP";
1086 l_Command +=
";:AVERage1:COUN " + std::to_string(rSigAvg.
NoPoints);
1093 return l_WriteAndRead(l_Command, m_ReadBuffer);
1101 if (!l_WriteAndRead(
":AVERage1:STAT?"
1109 if (l_Tokens.size() != 3)
1113 std::string l_State(l_Tokens[0].begin, l_Tokens[0].end);
1114 enum { kInactive, kActive } l_eState;
1116 l_eState = kInactive;
1117 else if (l_State ==
"1")
1122 std::string l_Type(l_Tokens[1].begin, l_Tokens[1].end);
1123 enum { kExponential, kRepeat } l_eType;
1124 if (l_Type ==
"EXPonential")
1125 l_eType = kExponential;
1126 else if (l_Type ==
"REPeat")
1131 if (l_eState == kInactive)
1133 else if (l_eState == kActive)
1135 if (l_eType == kExponential)
1137 else if (l_eType == kRepeat)
1145 rSigAvg.
NoPoints =
static_cast<U32
>(std::stoi(std::string(l_Tokens[2].begin, l_Tokens[2].end)));
1161 if (!l_WriteAndRead(
":AVERage1:STAT?"
1163 ";:AVERage1:COUN?;:AVERage1:COUN? MIN;:AVERage1:COUN? MAX;:AVERage1:COUN? DEF",
1169 if (l_Tokens.size() != 6)
1173 std::string l_State(l_Tokens[0].begin, l_Tokens[0].end);
1174 enum { kInactive, kActive } l_eState;
1176 l_eState = kInactive;
1177 else if (l_State ==
"1")
1182 std::string l_Type(l_Tokens[1].begin, l_Tokens[1].end);
1183 enum { kExponential, kRepeat } l_eType;
1184 if (l_Type ==
"EXPonential")
1185 l_eType = kExponential;
1186 else if (l_Type ==
"REPeat")
1191 if (l_eState == kInactive)
1193 else if (l_eState == kActive)
1195 if (l_eType == kExponential)
1197 else if (l_eType == kRepeat)
1205 rSigAvg.
NoPoints.Val =
static_cast<U32
>(std::stoi(std::string(l_Tokens[2].begin, l_Tokens[2].end)));
1206 rSigAvg.
NoPoints.Min =
static_cast<U32
>(std::stoi(std::string(l_Tokens[3].begin, l_Tokens[3].end)));
1207 rSigAvg.
NoPoints.Max =
static_cast<U32
>(std::stoi(std::string(l_Tokens[4].begin, l_Tokens[4].end)));
1208 rSigAvg.
NoPoints.Def =
static_cast<U32
>(std::stoi(std::string(l_Tokens[5].begin, l_Tokens[5].end)));
1223 std::string l_Command =
":AVERage2:STAT ";
1224 switch (rMeasAvg.
Type)
1230 l_Command +=
"ON" ";:AVERage2:TCON EXP";
1231 l_Command +=
";:AVERage2:COUN " + std::to_string(rMeasAvg.
NoPoints);
1234 l_Command +=
"ON" ";:AVERage2:TCON EXP";
1235 l_Command +=
";:AVERage2:COUN " + std::to_string(rMeasAvg.
NoPoints);
1238 l_Command +=
"ON" ";:AVERage2:TCON REP";
1239 l_Command +=
";:AVERage2:COUN " + std::to_string(rMeasAvg.
NoPoints);
1246 return l_WriteAndRead(l_Command, m_ReadBuffer);
1254 if (!l_WriteAndRead(
":AVERage2:STAT?"
1263 if (l_Tokens.size() != 3)
1267 std::string l_State(l_Tokens[0].begin, l_Tokens[0].end);
1268 enum { kInactive, kActive } l_eState;
1270 l_eState = kInactive;
1271 else if (l_State ==
"1")
1276 std::string l_Type(l_Tokens[1].begin, l_Tokens[1].end);
1277 enum { kExponential, kMoving, kRepeat } l_eType;
1278 if (l_Type ==
"EXPonential")
1279 l_eType = kExponential;
1280 else if (l_Type ==
"MOVing")
1282 else if (l_Type ==
"REPeat")
1287 if (l_eState == kInactive)
1289 else if (l_eState == kActive)
1291 if (l_eType == kExponential)
1293 else if (l_eType == kMoving)
1295 else if (l_eType == kRepeat)
1303 rMeasAvg.
NoPoints = std::stoi(std::string(l_Tokens[2].begin, l_Tokens[2].end));
1319 if (!l_WriteAndRead(
":AVERage2:STAT?"
1321 ";:AVERage2:COUN?;:AVERage2:COUN? MIN;:AVERage2:COUN? MAX;:AVERage2:COUN? DEF",
1327 if (l_Tokens.size() != 6)
1331 std::string l_State(l_Tokens[0].begin, l_Tokens[0].end);
1332 enum { kInactive, kActive } l_eState;
1334 l_eState = kInactive;
1335 else if (l_State ==
"1")
1340 std::string l_Type(l_Tokens[1].begin, l_Tokens[1].end);
1341 enum { kExponential, kMoving, kRepeat } l_eType;
1342 if (l_Type ==
"EXPonential")
1343 l_eType = kExponential;
1344 else if (l_Type ==
"MOVing")
1346 else if (l_Type ==
"REPeat")
1351 if (l_eState == kInactive)
1353 else if (l_eState == kActive)
1355 if (l_eType == kExponential)
1357 else if (l_eType == kMoving)
1359 else if (l_eType == kRepeat)
1367 rMeasAvg.
NoPoints.Val = std::stoi(std::string(l_Tokens[2].begin, l_Tokens[2].end));
1368 rMeasAvg.
NoPoints.Min = std::stoi(std::string(l_Tokens[3].begin, l_Tokens[3].end));
1369 rMeasAvg.
NoPoints.Max = std::stoi(std::string(l_Tokens[4].begin, l_Tokens[4].end));
1370 rMeasAvg.
NoPoints.Def = std::stoi(std::string(l_Tokens[5].begin, l_Tokens[5].end));
1385 std::string l_Command =
":TRIG:SEQuence1:SOUR ";
1386 switch (rInputTrig.
Source)
1390 l_Command +=
";COUN " + std::to_string(rInputTrig.
Count);
1394 l_Command +=
";COUN " + std::to_string(rInputTrig.
Count);
1399 l_Command +=
";COUN " + std::to_string(rInputTrig.
Count);
1403 l_Command +=
";COUN " + std::to_string(rInputTrig.
Count);
1404 switch (rInputTrig.
Edge)
1407 l_Command +=
";SLOP POS";
1410 l_Command +=
";SLOP NEG";
1413 l_Command +=
";SLOP EITH";
1425 return l_WriteAndRead(l_Command, m_ReadBuffer);
1433 if (!l_WriteAndRead(
":TRIG:SEQuence1:SOUR?"
1442 if (l_Tokens.size() != 4)
1446 std::string l_Source(l_Tokens[0].begin, l_Tokens[0].end);
1447 if (l_Source ==
"IMMediate")
1449 else if (l_Source ==
"TIMer")
1451 else if (l_Source ==
"BUS")
1453 else if (l_Source ==
"EXTernal")
1458 rInputTrig.
Period_s = std::stod(std::string(l_Tokens[1].begin, l_Tokens[1].end));
1460 rInputTrig.
Count = std::stoi(std::string(l_Tokens[2].begin, l_Tokens[2].end));
1462 std::string l_Slope(l_Tokens[3].begin, l_Tokens[3].end);
1463 if (l_Slope ==
"POSitive")
1465 else if (l_Slope ==
"NEGative")
1467 else if (l_Slope ==
"EITHer")
1486 if (!l_WriteAndRead(
":TRIG:SEQuence1:SOUR?"
1487 ";TIM?;TIM? MIN;TIM? MAX;TIM? DEF"
1488 ";COUN?;COUN? MIN;COUN? MAX;COUN? DEF"
1495 if (l_Tokens.size() != 10)
1499 std::string l_Source(l_Tokens[0].begin, l_Tokens[0].end);
1500 if (l_Source ==
"IMMediate")
1502 else if (l_Source ==
"TIMer")
1504 else if (l_Source ==
"BUS")
1506 else if (l_Source ==
"EXTernal")
1511 rInputTrig.
Period_s.Val = std::stod(std::string(l_Tokens[1].begin, l_Tokens[1].end));
1512 rInputTrig.
Period_s.Min = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
1513 rInputTrig.
Period_s.Max = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
1514 rInputTrig.
Period_s.Def = std::stod(std::string(l_Tokens[4].begin, l_Tokens[4].end));
1516 rInputTrig.
Count.Val = std::stoi(std::string(l_Tokens[5].begin, l_Tokens[5].end));
1517 rInputTrig.
Count.Min = std::stoi(std::string(l_Tokens[6].begin, l_Tokens[6].end));
1518 rInputTrig.
Count.Max = std::stoi(std::string(l_Tokens[7].begin, l_Tokens[7].end));
1519 rInputTrig.
Count.Def = std::stoi(std::string(l_Tokens[8].begin, l_Tokens[8].end));
1521 std::string l_Slope(l_Tokens[9].begin, l_Tokens[9].end);
1522 if (l_Slope ==
"POSitive")
1524 else if (l_Slope ==
"NEGative")
1526 else if (l_Slope ==
"EITHer")
1544 std::string l_Command;
1545 switch (rOutputTrig.
Mode)
1548 l_Command =
":OUTP:TRIG:STAT OFF";
1553 l_Command +=
";:SLOP POS";
1555 l_Command +=
";:OUTP:TRIG:STAT ON";
1556 l_Command +=
";SHAP DC";
1564 l_Command +=
";:SLOP NEG";
1566 l_Command +=
";:OUTP:TRIG:STAT ON";
1567 l_Command +=
";SHAP DC";
1575 l_Command +=
";:SLOP POS";
1577 l_Command +=
";:OUTP:TRIG:STAT ON";
1578 l_Command +=
";SHAP PULS";
1586 l_Command +=
";:SLOP NEG";
1588 l_Command +=
";:OUTP:TRIG:STAT ON";
1589 l_Command +=
";SHAP PULS";
1597 l_Command +=
";:SLOP EITH";
1599 l_Command +=
";:OUTP:TRIG:STAT ON";
1600 l_Command +=
";SHAP PULS";
1610 return l_WriteAndRead(l_Command, m_ReadBuffer);
1618 if (!l_WriteAndRead(
":OUTP:TRIG:STAT?"
1623 ";:TRIG:SEQuence2:SLOP?"
1630 if (l_Tokens.size() != 7)
1634 std::string l_State(l_Tokens[0].begin, l_Tokens[0].end);
1635 enum {kInactive, kActive} l_eActive;
1637 l_eActive = kInactive;
1638 else if (l_State ==
"1")
1639 l_eActive = kActive;
1643 std::string l_Polarity(l_Tokens[1].begin, l_Tokens[1].end);
1644 if (l_Polarity ==
"INVerted")
1646 else if (l_Polarity ==
"NORMal")
1651 rOutputTrig.
PulseWidth_s = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
1653 rOutputTrig.
OutputDelay_s = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
1655 std::string l_Shape(l_Tokens[4].begin, l_Tokens[4].end);
1656 enum { kDC, kPulse } l_eShape;
1657 if (l_Shape ==
"DC")
1659 else if (l_Shape ==
"PULSe")
1664 std::string l_Slope(l_Tokens[5].begin, l_Tokens[5].end);
1665 enum { kRising, kFalling, kEither } l_eSlope;
1666 if (l_Slope ==
"POSitive")
1668 else if (l_Slope ==
"NEGative")
1669 l_eSlope = kFalling;
1670 else if (l_Slope ==
"EITHer")
1675 rOutputTrig.
Level_UNITS = std::stod(std::string(l_Tokens[6].begin, l_Tokens[6].end));
1677 if (l_eActive == kActive)
1679 if (l_eShape == kDC)
1681 if (l_eSlope == kRising || l_eSlope == kEither)
1688 if (l_eSlope == kRising)
1690 else if (l_eSlope == kFalling)
1713 if (!l_WriteAndRead(
":OUTP:TRIG:STAT?"
1715 ";WIDT?;WIDT? MIN;WIDT? MAX;WIDT? DEF"
1716 ";DEL?;DEL? MIN;DEL? MAX;DEL? DEF"
1718 ";:TRIG:SEQuence2:SLOP?"
1719 ";LEV?;LEV? MIN ;LEV? MAX;LEV? DEF",
1725 if (l_Tokens.size() != 16)
1729 std::string l_State(l_Tokens[0].begin, l_Tokens[0].end);
1730 enum { kInactive, kActive } l_eActive;
1732 l_eActive = kInactive;
1733 else if (l_State ==
"1")
1734 l_eActive = kActive;
1738 std::string l_Polarity(l_Tokens[1].begin, l_Tokens[1].end);
1739 if (l_Polarity ==
"INVerted")
1741 else if (l_Polarity ==
"NORMal")
1746 rOutputTrig.
PulseWidth_s.Val = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
1747 rOutputTrig.
PulseWidth_s.Min = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
1748 rOutputTrig.
PulseWidth_s.Max = std::stod(std::string(l_Tokens[4].begin, l_Tokens[4].end));
1749 rOutputTrig.
PulseWidth_s.Def = std::stod(std::string(l_Tokens[5].begin, l_Tokens[5].end));
1751 rOutputTrig.
OutputDelay_s.Val = std::stod(std::string(l_Tokens[6].begin, l_Tokens[6].end));
1752 rOutputTrig.
OutputDelay_s.Min = std::stod(std::string(l_Tokens[7].begin, l_Tokens[7].end));
1753 rOutputTrig.
OutputDelay_s.Max = std::stod(std::string(l_Tokens[8].begin, l_Tokens[8].end));
1754 rOutputTrig.
OutputDelay_s.Def = std::stod(std::string(l_Tokens[9].begin, l_Tokens[9].end));
1756 std::string l_Shape(l_Tokens[10].begin, l_Tokens[10].end);
1757 enum { kDC, kPulse } l_eShape;
1758 if (l_Shape ==
"DC")
1760 else if (l_Shape ==
"PULSe")
1765 std::string l_Slope(l_Tokens[11].begin, l_Tokens[11].end);
1766 enum { kRising, kFalling, kEither } l_eSlope;
1767 if (l_Slope ==
"POSitive")
1769 else if (l_Slope ==
"NEGative")
1770 l_eSlope = kFalling;
1771 else if (l_Slope ==
"EITHer")
1776 rOutputTrig.
Level_UNITS.Val = std::stod(std::string(l_Tokens[12].begin, l_Tokens[12].end));
1777 rOutputTrig.
Level_UNITS.Min = std::stod(std::string(l_Tokens[13].begin, l_Tokens[13].end));
1778 rOutputTrig.
Level_UNITS.Max = std::stod(std::string(l_Tokens[14].begin, l_Tokens[14].end));
1779 rOutputTrig.
Level_UNITS.Def = std::stod(std::string(l_Tokens[15].begin, l_Tokens[15].end));
1781 if (l_eActive == kActive)
1783 if (l_eShape == kDC)
1785 if (l_eSlope == kRising || l_eSlope == kEither)
1792 if (l_eSlope == kRising)
1794 else if (l_eSlope == kFalling)
1816 std::string l_Command;
1817 switch (rPulse.
Mode)
1820 l_Command =
":SOUR:PULS:MODE AUTO";
1823 l_Command =
":SOUR:PULS:MODE MAN";
1832 return l_WriteAndRead(l_Command, m_ReadBuffer);
1840 if (!l_WriteAndRead(
":SOUR:PULS:MODE?"
1848 if (l_Tokens.size() != 3)
1852 std::string l_Mode(l_Tokens[0].begin, l_Tokens[0].end);
1853 if (l_Mode ==
"AUTO")
1855 else if (l_Mode ==
"MANual")
1860 rPulse.
Period_s = std::stod(std::string(l_Tokens[1].begin, l_Tokens[1].end));
1862 rPulse.
Width_s = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
1878 if (!l_WriteAndRead(
":SOUR:PULS:MODE?"
1879 ";PER?;PER? MIN;PER? MAX;PER? DEF"
1880 ";WIDT?;WIDT? MIN;WIDT? MAX;WIDT? DEF",
1886 if (l_Tokens.size() != 9)
1890 std::string l_Mode(l_Tokens[0].begin, l_Tokens[0].end);
1891 if (l_Mode ==
"AUTO")
1893 else if (l_Mode ==
"MANual")
1898 rPulse.
Period_s.Val = std::stod(std::string(l_Tokens[1].begin, l_Tokens[1].end));
1899 rPulse.
Period_s.Min = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
1900 rPulse.
Period_s.Max = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
1901 rPulse.
Period_s.Def = std::stod(std::string(l_Tokens[4].begin, l_Tokens[4].end));
1903 rPulse.
Width_s.Val = std::stod(std::string(l_Tokens[5].begin, l_Tokens[5].end));
1904 rPulse.
Width_s.Min = std::stod(std::string(l_Tokens[6].begin, l_Tokens[6].end));
1905 rPulse.
Width_s.Max = std::stod(std::string(l_Tokens[7].begin, l_Tokens[7].end));
1906 rPulse.
Width_s.Def = std::stod(std::string(l_Tokens[8].begin, l_Tokens[8].end));
1921 std::string l_Command;
1922 switch (rDigitization.
Mode)
1925 l_Command =
":SENS:SWE:MODE AUTO";
1928 l_Command =
":SENS:SWE:MODE MAN";
1938 return l_WriteAndRead(l_Command, m_ReadBuffer);
1946 if (!l_WriteAndRead(
":SENS:SWE:MODE?"
1955 if (l_Tokens.size() != 4)
1959 std::string l_Mode(l_Tokens[0].begin, l_Tokens[0].end);
1960 if (l_Mode ==
"AUTO")
1962 else if (l_Mode ==
"MANual")
1967 rDigitization.
SweepTime_s = std::stod(std::string(l_Tokens[1].begin, l_Tokens[1].end));
1969 rDigitization.
Rate_Hz = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
1971 rDigitization.
DeadTime_s = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
1987 if (!l_WriteAndRead(
":SENS:SWE:MODE?"
1988 ";TIME?;TIME? MIN;TIME? MAX;TIME? DEF"
1989 ";FREQ?;FREQ? MIN;FREQ? MAX;FREQ? DEF"
1990 ";OFFS:TIME?;TIME? MIN;TIME? MAX;TIME? DEF",
1996 if (l_Tokens.size() != 13)
2000 std::string l_Mode(l_Tokens[0].begin, l_Tokens[0].end);
2001 if (l_Mode ==
"AUTO")
2003 else if (l_Mode ==
"MANual")
2008 rDigitization.
SweepTime_s.Val = std::stod(std::string(l_Tokens[1].begin, l_Tokens[1].end));
2009 rDigitization.
SweepTime_s.Min = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
2010 rDigitization.
SweepTime_s.Max = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
2011 rDigitization.
SweepTime_s.Def = std::stod(std::string(l_Tokens[4].begin, l_Tokens[4].end));
2013 rDigitization.
Rate_Hz.Val = std::stod(std::string(l_Tokens[5].begin, l_Tokens[5].end));
2014 rDigitization.
Rate_Hz.Min = std::stod(std::string(l_Tokens[6].begin, l_Tokens[6].end));
2015 rDigitization.
Rate_Hz.Max = std::stod(std::string(l_Tokens[7].begin, l_Tokens[7].end));
2016 rDigitization.
Rate_Hz.Def = std::stod(std::string(l_Tokens[8].begin, l_Tokens[8].end));
2018 rDigitization.
DeadTime_s.Val = std::stod(std::string(l_Tokens[9].begin, l_Tokens[9].end));
2019 rDigitization.
DeadTime_s.Min = std::stod(std::string(l_Tokens[10].begin, l_Tokens[10].end));
2020 rDigitization.
DeadTime_s.Max = std::stod(std::string(l_Tokens[11].begin, l_Tokens[11].end));
2021 rDigitization.
DeadTime_s.Def = std::stod(std::string(l_Tokens[12].begin, l_Tokens[12].end));
2036 std::string l_Command =
":CONF:PROB:MODE ";
2037 switch (rMatchingTuning.
Mode)
2040 l_Command +=
"AUTO";
2050 return l_WriteAndRead(l_Command, m_ReadBuffer);
2058 if (!l_WriteAndRead(
":CONF:PROB:MODE?"
2066 if (l_Tokens.size() != 3)
2070 std::string l_Mode(l_Tokens[0].begin, l_Tokens[0].end);
2071 if (l_Mode ==
"AUTO")
2073 else if (l_Mode ==
"MANual")
2078 rMatchingTuning.
Matching = std::stod(std::string(l_Tokens[1].begin, l_Tokens[1].end));
2080 rMatchingTuning.
Tuning = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
2096 if (!l_WriteAndRead(
":CONF:PROB:MODE?"
2097 ";MATC?;MATC? MIN;MATC? MAX;MATC? DEF"
2098 ";TUN?;TUN? MIN;TUN? MAX;TUN? DEF",
2104 if (l_Tokens.size() != 9)
2108 std::string l_Mode(l_Tokens[0].begin, l_Tokens[0].end);
2109 if (l_Mode ==
"AUTO")
2111 else if (l_Mode ==
"MANual")
2116 rMatchingTuning.
Matching.Val = std::stod(std::string(l_Tokens[1].begin, l_Tokens[1].end));
2117 rMatchingTuning.
Matching.Min = std::stod(std::string(l_Tokens[2].begin, l_Tokens[2].end));
2118 rMatchingTuning.
Matching.Max = std::stod(std::string(l_Tokens[3].begin, l_Tokens[3].end));
2119 rMatchingTuning.
Matching.Def = std::stod(std::string(l_Tokens[4].begin, l_Tokens[4].end));
2121 rMatchingTuning.
Tuning.Val = std::stod(std::string(l_Tokens[5].begin, l_Tokens[5].end));
2122 rMatchingTuning.
Tuning.Min = std::stod(std::string(l_Tokens[6].begin, l_Tokens[6].end));
2123 rMatchingTuning.
Tuning.Max = std::stod(std::string(l_Tokens[7].begin, l_Tokens[7].end));
2124 rMatchingTuning.
Tuning.Def = std::stod(std::string(l_Tokens[8].begin, l_Tokens[8].end));
2141 return l_WriteAndRead(l_Command, m_ReadBuffer);
2148 std::string l_Command =
":UNIT:PPMR " +
l_ToString(Ref);
2150 return l_WriteAndRead(l_Command, m_ReadBuffer);
2158 if (!l_WriteAndRead(
":UNIT?;:UNIT:PPMR?", m_ReadBuffer))
2162 std::vector<char>::const_iterator l_tokenbeg, l_tokenend;
2164 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2166 std::string l_Answer(l_tokenbeg, l_tokenend);
2170 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2172 l_Answer.assign(l_tokenbeg, l_tokenend);
2173 rRef = std::stod(l_Answer);
2188 std::string l_Command =
":INP:CLOC ";
2202 return l_WriteAndRead(l_Command, m_ReadBuffer);
2210 if (!l_WriteAndRead(
":INP:CLOC:SOUR?",m_ReadBuffer))
2214 std::string l_Answer(m_ReadBuffer.
begin(), m_ReadBuffer.
end());
2215 if (l_Answer ==
"INTernal")
2217 else if (l_Answer ==
"EXTernal")
2236 std::string l_Command = std::string(
":SYST:COMM:USBT:ENAB ") + (Enabled ?
"1" :
"0");
2237 if (!l_WriteAndRead(l_Command , m_ReadBuffer))
2254 if (!l_WriteAndRead(
":SYST:COMM:USBT:ENAB?", m_ReadBuffer))
2257 std::string l_Answer(m_ReadBuffer.
begin(), m_ReadBuffer.
end());
2258 if (l_Answer.empty())
2260 else if (l_Answer[0] ==
'0')
2262 else if (l_Answer[0] ==
'1')
2281 std::string l_Command(
":SYST:COMM:ETH");
2282 l_Command += rSettings.
Enabled ?
":ENAB 1" :
":ENAB 0";
2285 l_Command +=
";DOM " + rSettings.
Domain;
2289 l_Command += std::string(
";NBNS ") + (rSettings.
NBNSEnabled ?
"1" :
"0");
2290 l_Command +=
";IDEN " + rSettings.
Identifier;
2292 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
2309 if (!l_WriteAndRead(
":SYST:COMM:ETH:ENAB?"
2322 std::vector<char>::const_iterator l_tokenbeg, l_tokenend;
2324 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2326 std::string l_Enable(l_tokenbeg, l_tokenend);
2327 if (l_Enable.empty())
2329 else if (l_Enable[0] ==
'0')
2331 else if (l_Enable[0] ==
'1')
2336 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2338 std::string l_IPAddress(l_tokenbeg, l_tokenend);
2339 std::match_results<std::string::const_iterator> l_IPmatch;
2340 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})")))
2342 rSettings.
IP.
Member.
A =
static_cast<U8
>(std::stoul(l_IPmatch[1]));
2343 rSettings.
IP.
Member.
B =
static_cast<U8
>(std::stoul(l_IPmatch[2]));
2344 rSettings.
IP.
Member.
C =
static_cast<U8
>(std::stoul(l_IPmatch[3]));
2345 rSettings.
IP.
Member.
D =
static_cast<U8
>(std::stoul(l_IPmatch[4]));
2347 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2349 std::string l_Mask(l_tokenbeg, l_tokenend);
2350 std::match_results<std::string::const_iterator> l_Maskmatch;
2351 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})")))
2353 rSettings.
Mask.
Member.
A =
static_cast<U8
>(std::stoul(l_Maskmatch[1]));
2354 rSettings.
Mask.
Member.
B =
static_cast<U8
>(std::stoul(l_Maskmatch[2]));
2355 rSettings.
Mask.
Member.
C =
static_cast<U8
>(std::stoul(l_Maskmatch[3]));
2356 rSettings.
Mask.
Member.
D =
static_cast<U8
>(std::stoul(l_Maskmatch[4]));
2358 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2360 rSettings.
Domain = std::string(l_tokenbeg, l_tokenend);
2362 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2364 std::string l_Broadcast(l_tokenbeg, l_tokenend);
2365 std::match_results<std::string::const_iterator> l_Broadcastmatch;
2366 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})")))
2368 rSettings.
Broadcast.
Member.
A =
static_cast<U8
>(std::stoul(l_Broadcastmatch[1]));
2369 rSettings.
Broadcast.
Member.
B =
static_cast<U8
>(std::stoul(l_Broadcastmatch[2]));
2370 rSettings.
Broadcast.
Member.
C =
static_cast<U8
>(std::stoul(l_Broadcastmatch[3]));
2371 rSettings.
Broadcast.
Member.
D =
static_cast<U8
>(std::stoul(l_Broadcastmatch[4]));
2373 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2375 std::string l_Gateway(l_tokenbeg, l_tokenend);
2376 std::match_results<std::string::const_iterator> l_Gatewaymatch;
2377 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})")))
2379 rSettings.
Gateway.
Member.
A =
static_cast<U8
>(std::stoul(l_Gatewaymatch[1]));
2380 rSettings.
Gateway.
Member.
B =
static_cast<U8
>(std::stoul(l_Gatewaymatch[2]));
2381 rSettings.
Gateway.
Member.
C =
static_cast<U8
>(std::stoul(l_Gatewaymatch[3]));
2382 rSettings.
Gateway.
Member.
D =
static_cast<U8
>(std::stoul(l_Gatewaymatch[4]));
2384 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2386 std::string l_DNS(l_tokenbeg, l_tokenend);
2387 std::match_results<std::string::const_iterator> l_DNSmatch;
2388 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})")))
2395 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2397 std::string l_NBNSEnab(l_tokenbeg, l_tokenend);
2398 if (l_NBNSEnab.empty())
2400 else if (l_NBNSEnab[0] ==
'0')
2402 else if (l_NBNSEnab[0] ==
'1')
2407 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2409 rSettings.
Identifier = std::string(l_tokenbeg, l_tokenend);
2425 std::string l_Command = std::string(
":SYST:COMM:VXI11:ENAB ") + (Enabled ?
"1" :
"0");
2426 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
2443 if (!l_WriteAndRead(
":SYST:COMM:VXI11:ENAB?", m_ReadBuffer))
2446 std::string l_Answer(m_ReadBuffer.
begin(), m_ReadBuffer.
end());
2447 if (l_Answer.empty())
2449 else if (l_Answer[0] ==
'0')
2451 else if (l_Answer[0] ==
'1')
2476 if (!l_WriteAndRead(
":MMEM:CAT?", m_ReadBuffer))
2481 std::vector<char>::const_iterator l_tokenbeg, l_tokenend;
2484 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
','))
2486 rUsedBytes =
static_cast<U32
>(std::stoul(std::string(l_tokenbeg, l_tokenend)));
2488 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
','))
2490 rAvailableBytes =
static_cast<U32
>(std::stoul(std::string(l_tokenbeg, l_tokenend)));
2492 while (l_BP.
GetNext(l_tokenbeg, l_tokenend,
','))
2496 l_File.
Path = std::string(l_tokenbeg, l_tokenend);
2498 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
','))
2500 l_File.
Type = std::string(l_tokenbeg, l_tokenend);
2502 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
','))
2504 l_File.
Size = std::stoul(std::string(l_tokenbeg, l_tokenend));
2506 rFileList.push_back(l_File);
2523 std::string l_Command;
2524 l_Command =
":MMEM:DATA? " "\"" + Path +
"\"";
2525 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
2528 rContent = std::string(m_ReadBuffer.
begin(), m_ReadBuffer.
end());
2544 std::string l_BinaryFileContent;
2546 std::string l_Command;
2547 l_Command =
":MMEM:DATA " "\"" + Path +
"\"" "," + l_BinaryFileContent;
2548 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
2565 std::string l_Command;
2566 l_Command =
":MMEM:DEL " "\"" + Path +
"\"";
2567 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
2583 rSettingFileList.clear();
2591 for (tFileList::const_iterator it = l_FileList.begin(); it != l_FileList.end(); it++)
2594 if (std::regex_match(it->Path, std::regex(
"^/yaffs/settings/.+")))
2595 rSettingFileList.push_back(it->Path);
2612 std::string l_Command;
2613 l_Command =
":MMEM:STOR 0" ",\"" + Name +
"\"";
2617 l_Command +=
",ALL";
2620 l_Command +=
",COMM";
2623 l_Command +=
",MEAS";
2626 l_Command +=
",TRIG";
2629 l_Command +=
",REFC";
2632 l_Command +=
",UNIT";
2639 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
2656 std::string l_Command;
2657 l_Command =
":MMEM:LOAD 0," "\"" + Name +
"\"";
2658 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
2678 std::string l_Command = Continuous ?
":INIT:CONT 1" :
":INIT:CONT 0;:INIT";
2679 return l_WriteAndRead(l_Command, m_ReadBuffer);
2687 std::string l_Command = CancelContinuous ?
":INIT:CONT 0;:ABOR" :
":ABOR";
2688 return l_WriteAndRead(l_Command, m_ReadBuffer);
2704 std::string l_Command =
":OUTP:TRIG:IMM";
2705 return l_WriteAndRead(l_Command, m_ReadBuffer);
2717 std::string l_Command =
":UNIT?;:FETC:ARR:FLUX? " + std::to_string(NoMeasurements);
2718 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
2722 std::vector<char>::const_iterator l_tokenbeg, l_tokenend;
2724 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2726 if (!
StringToUnits(std::string(l_tokenbeg, l_tokenend), rUnits))
2729 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2731 size_t l_Start, l_Len;
2734 for (
auto l_it = l_tokenbeg + l_Start; l_it < l_tokenbeg + l_Start + l_Len; l_it +=
sizeof(F64))
2739 std::vector<char>::const_iterator fluxbeg, fluxend;
2742 for (l_GetNextRet = l_FluxParser.
GetNext(fluxbeg, fluxend,
','); l_GetNextRet && fluxbeg != l_tokenend; l_GetNextRet = l_FluxParser.
GetNext(fluxbeg, fluxend,
','))
2743 rFlux.push_back(std::stof(std::string(fluxbeg, fluxend)));
2746 if (rFlux.size() != NoMeasurements)
2767 std::string l_Command =
":UNIT?";
2768 if (ArbSelect.
Flux) l_Command +=
";:FETC:ARR:FLUX? " + std::to_string(NoMeasurements);
2769 if (ArbSelect.
Deviation) l_Command +=
";:FETC:ARR:SIGM? " + std::to_string(NoMeasurements);
2770 if (ArbSelect.
Uniformity) l_Command +=
";:FETC:ARR:UNIF? " + std::to_string(NoMeasurements);
2771 if (ArbSelect.
Channel) l_Command +=
";:FETC:ARR:CHAN? " + std::to_string(NoMeasurements);
2772 if (ArbSelect.
Timestamp) l_Command +=
";:FETC:ARR:TIM? " + std::to_string(NoMeasurements);
2773 if (ArbSelect.
Status) l_Command +=
";:FETC:ARR:STAT? " + std::to_string(NoMeasurements);
2774 if (ArbSelect.
NbValidMeas) l_Command +=
";:FETC:ARR:VLM? " + std::to_string(NoMeasurements);
2775 if (ArbSelect.
IF) l_Command +=
";:FETC:SCAL:IFR?";
2783 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
2788 std::vector<char>::const_iterator l_tokenbeg, l_tokenend;
2790 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2792 if (!
StringToUnits(std::string(l_tokenbeg, l_tokenend), rUnits))
2796 if (ArbSelect.
Flux ||
2808 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2814 for (
size_t index = 0; Len >=
sizeof(F64); Len -=
sizeof(F64), Start +=
sizeof(F64), index++)
2819 std::vector<char>::const_iterator fluxbeg, fluxend;
2821 if (!l_FluxParser.
GetNext(fluxbeg, fluxend,
','))
2823 bool l_GetNextRet =
true;
2824 for (
size_t index = 0; l_GetNextRet && fluxbeg != l_tokenend; l_GetNextRet = l_FluxParser.
GetNext(fluxbeg, fluxend,
','), index++)
2825 rMeas.
AdvMeas.
Basic[index].Flux_UNITS = std::stod(std::string(fluxbeg, fluxend));
2830 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2836 for (
size_t index = 0; Len >=
sizeof(F32); Len -=
sizeof(F32), Start +=
sizeof(F32), index++)
2841 std::vector<char>::const_iterator devbeg, devend;
2843 if (!l_DevParser.
GetNext(devbeg, devend,
','))
2845 bool l_GetNextRet =
true;
2846 for (
size_t index = 0; l_GetNextRet && devbeg != l_tokenend; l_GetNextRet = l_DevParser.
GetNext(devbeg, devend,
','), index++)
2847 rMeas.
AdvMeas.
Basic[index].Deviation_ppm = std::stof(std::string(devbeg, devend));
2852 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2858 for (
size_t index = 0; Len >=
sizeof(F32); Len -=
sizeof(F32), Start +=
sizeof(F32), index++)
2863 std::vector<char>::const_iterator unifbeg, unifend;
2865 if (!l_UnifParser.
GetNext(unifbeg, unifend,
','))
2867 bool l_GetNextRet =
true;
2868 for (
size_t index = 0; l_GetNextRet && unifbeg != l_tokenend; l_GetNextRet = l_UnifParser.
GetNext(unifbeg, unifend,
','), index++)
2869 rMeas.
AdvMeas.
Basic[index].Uniformity = std::stof(std::string(unifbeg, unifend));
2875 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2884 for (
size_t index = 0; index < l_ChanList.size() && index < rMeas.
AdvMeas.
Basic.size(); index++)
2885 rMeas.
AdvMeas.
Basic[index].Channel = l_ChanList[index];
2889 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2895 for (
size_t index = 0; Len >=
sizeof(U64); Len -=
sizeof(U64), Start +=
sizeof(U64), index++)
2900 std::vector<char>::const_iterator timbeg, timend;
2902 if (!l_TimParser.
GetNext(timbeg, timend,
','))
2904 bool l_GetNextRet =
true;
2905 for (
size_t index = 0; l_GetNextRet && timbeg != l_tokenend; l_GetNextRet = l_TimParser.
GetNext(timbeg, timend,
','), index++)
2906 rMeas.
AdvMeas.
Basic[index].Timestamp = std::stoull(std::string(timbeg, timend));
2911 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2917 for (
size_t index = 0; Len >=
sizeof(U8); Len -=
sizeof(U8), Start +=
sizeof(U8), index++)
2918 rMeas.
AdvMeas.
Basic[index].Status.StatusByte = *(&*l_tokenbeg + Start);
2922 std::vector<char>::const_iterator statbeg, statend;
2924 if (!l_StatParser.
GetNext(statbeg, statend,
','))
2926 bool l_GetNextRet =
true;
2927 for (
size_t index = 0; l_GetNextRet && statbeg != l_tokenend; l_GetNextRet = l_StatParser.
GetNext(statbeg, statend,
','), index++)
2928 rMeas.
AdvMeas.
Basic[index].Status.StatusByte =
static_cast<U8
>(std::stoul(std::string(statbeg, statend)));
2933 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2939 for (
size_t index = 0; Len >=
sizeof(U32); Len -=
sizeof(U32), Start +=
sizeof(U32), index++)
2944 std::vector<char>::const_iterator timbeg, timend;
2946 if (!l_NbValidParser.
GetNext(timbeg, timend,
','))
2948 bool l_GetNextRet =
true;
2949 for (
size_t index = 0; l_GetNextRet && timbeg != l_tokenend; l_GetNextRet = l_NbValidParser.
GetNext(timbeg, timend,
','), index++)
2950 rMeas.
AdvMeas.
Basic[index].NbValidMeas = std::stoul(std::string(timbeg, timend));
2955 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2970 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
2985 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
3000 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
3008 std::vector<char>::const_iterator NmrSampbeg = l_tokenbeg + Start +
sizeof(rMeas.
NMR.
SamplePeriod_s);
3010 size_t NmrSampStart = 0;
3012 for (
size_t index = 0; NmrSampLen >=
sizeof(F32); NmrSampLen -=
sizeof(F32), NmrSampStart +=
sizeof(F32), index++)
3017 std::vector<char>::const_iterator nmrbeg, nmrend;
3019 if (!l_NmrParser.
GetNext(nmrbeg, nmrend,
','))
3021 bool l_GetNextRes =
true;
3022 for (
size_t index = 0; l_GetNextRes && nmrbeg != l_tokenend; l_GetNextRes = l_NmrParser.
GetNext(nmrbeg, nmrend,
','), index++)
3023 rMeas.
NMR.
Samples_V.push_back(std::stof(std::string(nmrbeg, nmrend)));
3028 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
3038 size_t FFTSampStart = 0;
3040 for (
size_t index = 0; FFTSampLen >=
sizeof(F32); FFTSampLen -=
sizeof(F32), FFTSampStart +=
sizeof(F32), index++)
3045 std::vector<char>::const_iterator fftbeg, fftend;
3047 if (!l_FftParser.
GetNext(fftbeg, fftend,
','))
3049 bool l_GetNextRes =
true;
3050 for (
size_t index = 0; l_GetNextRes && fftbeg != l_tokenend; l_GetNextRes = l_FftParser.
GetNext(fftbeg, fftend,
','), index++)
3051 rMeas.
FFT.
Samples_V.push_back(std::stof(std::string(fftbeg, fftend)));
3056 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
3067 size_t SpecSampStart = 0;
3069 for (
size_t index = 0; SpecSampLen >=
sizeof(F32); SpecSampLen -=
sizeof(F32), SpecSampStart +=
sizeof(F32), index++)
3074 std::vector<char>::const_iterator specbeg, specend;
3076 if (!l_SpecParser.
GetNext(specbeg, specend,
','))
3078 bool l_GetNextRes =
true;
3079 for (
size_t index = 0; l_GetNextRes && specbeg != l_tokenend; l_GetNextRes = l_SpecParser.
GetNext(specbeg, specend,
','), index++)
3085 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
3093 std::vector<char>::const_iterator PolyCoefbeg = l_tokenbeg + Start +
sizeof(rMeas.
FitPolynom.
Residue);
3095 size_t PolyCoefStart = 0;
3097 for (
size_t index = 0; PolyCoefLen >=
sizeof(F32); PolyCoefLen -=
sizeof(F32), PolyCoefStart +=
sizeof(F32), index++)
3102 std::vector<char>::const_iterator polybeg, polyend;
3104 if (!l_PolyParser.
GetNext(polybeg, polyend,
','))
3107 if (!l_PolyParser.
GetNext(polybeg, polyend,
','))
3109 bool l_GetNextRes =
true;
3110 for (
size_t index = 0; l_GetNextRes && polybeg != l_tokenend; l_GetNextRes = l_PolyParser.
GetNext(polybeg, polyend,
','), index++)
3111 rMeas.
FitPolynom.
Coeffs.push_back(std::stof(std::string(polybeg, polyend)));
3130 if (!l_WriteAndRead(
":FETC:SPR?", m_ReadBuffer))
3133 size_t l_Start, l_Len;
3136 rSPR = *(m_ReadBuffer.
data() + l_Start);
3137 rHallMeasurement_UNITS =
BinaryToF64(m_ReadBuffer.
data() + l_Start + 1);
3143 std::vector<char>::const_iterator l_tokenbeg, l_tokenend;
3145 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
','))
3147 rSPR = std::stoi(std::string(l_tokenbeg, l_tokenend));
3149 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
','))
3151 rHallMeasurement_UNITS = std::stod(std::string(l_tokenbeg, l_tokenend));
3168 std::string l_Command;
3173 l_Command +=
":FORM:DATA ASC";
3176 l_Command +=
":FORM:DATA INT";
3182 return l_WriteAndRead(l_Command, m_ReadBuffer);
3193 return l_WriteAndRead(
":STAT:PRES", m_ReadBuffer);
3201 std::string l_Command;
3207 l_Command +=
":STAT:QUES";
3210 l_Command +=
":STAT:OPER";
3213 l_Command +=
":STAT:OPER:BIT11";
3216 l_Command +=
":STAT:OPER:BIT12";
3219 l_Command +=
":STAT:QUES:BIT12";
3229 l_Command +=
":EVEN?";
3232 l_Command +=
":COND?";
3235 l_Command +=
":ENAB?";
3243 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
3246 rStatus = std::stoi(std::string(m_ReadBuffer.
begin(), m_ReadBuffer.
end()));
3264 std::string l_Command;
3266 for (std::vector<sStatusRegister>::const_iterator it = Regs.begin(); it != Regs.end(); it++)
3268 if (it != Regs.begin())
3273 l_Command +=
":STAT:QUES";
3276 l_Command +=
":STAT:OPER";
3279 l_Command +=
":STAT:OPER:BIT11";
3282 l_Command +=
":STAT:OPER:BIT12";
3285 l_Command +=
":STAT:QUES:BIT12";
3294 l_Command +=
":EVEN?";
3297 l_Command +=
":COND?";
3300 l_Command +=
":ENAB?";
3309 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
3314 std::vector<char>::const_iterator l_tokenbeg, l_tokenend;
3316 for (
size_t i = Regs.size(); i > 0; i--)
3318 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
3320 rStatus.push_back(std::stoi(std::string(l_tokenbeg, l_tokenend)));
3337 std::string l_RegSet, l_Command;
3342 l_RegSet +=
":STAT:QUES";
3345 l_RegSet +=
":STAT:OPER";
3348 l_RegSet +=
":STAT:OPER:BIT11";
3351 l_RegSet +=
":STAT:OPER:BIT12";
3354 l_RegSet +=
":STAT:QUES:BIT12";
3363 l_Command = l_RegSet +
":ENAB?";
3364 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
3367 U16 l_StatusEnab =
static_cast<U16
>(std::stoi(std::string(m_ReadBuffer.
begin(), m_ReadBuffer.
end())));
3370 l_StatusEnab |= EnableMask;
3371 l_StatusEnab &= ~DisableMask;
3374 l_Command = l_RegSet +
":ENAB" +
" " + std::to_string(l_StatusEnab);
3375 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
3390 FUNCTION_NAME__ << std::endl);
3393 std::string l_RegSet, l_Command;
3398 l_RegSet +=
":STAT:QUES";
3401 l_RegSet +=
":STAT:OPER";
3404 l_RegSet +=
":STAT:OPER:BIT11";
3407 l_RegSet +=
":STAT:OPER:BIT12";
3410 l_RegSet +=
":STAT:QUES:BIT12";
3422 l_Command = l_RegSet +
":PTR?";
3425 l_Command = l_RegSet +
":NTR?";
3431 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
3434 U16 l_TransFilter = std::stoi(std::string(m_ReadBuffer.
begin(), m_ReadBuffer.
end()));
3437 l_TransFilter |= SetMask;
3438 l_TransFilter &= ~ClearMask;
3444 l_Command = l_RegSet +
":PTR";
3447 l_Command = l_RegSet +
":NTR";
3453 l_Command +=
" " + std::to_string(l_TransFilter);
3454 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
3471 std::string l_Command;
3476 l_Command +=
"*ESE";
3479 l_Command +=
"*SRE";
3488 if (!l_WriteAndRead(l_Command +
"?", m_ReadBuffer))
3491 U16 l_StatusEnab = std::stoi(std::string(m_ReadBuffer.
begin(), m_ReadBuffer.
end()));
3494 l_StatusEnab |= EnableMask;
3495 l_StatusEnab &= ~DisableMask;
3498 l_Command +=
" " + std::to_string(l_StatusEnab);
3499 if (!l_WriteAndRead(l_Command, m_ReadBuffer))
3520 if (!l_WriteAndRead(
"*IDN?", m_ReadBuffer))
3523 rIdentification = std::string(m_ReadBuffer.
begin(), m_ReadBuffer.
end());
3529 rIdentification.clear();
3539 std::string l_Command(
":SYST:POFF ");
3540 l_Command += (Reboot ?
"1" :
"0");
3542 return l_WriteAndRead(l_Command, m_ReadBuffer);
3549 return Write(
"*RST");
3557 if (!l_WriteAndRead(
":SYST:TEMP?", m_ReadBuffer,
true))
3560 rTemperatureDegC = std::stof(std::string(m_ReadBuffer.
begin(), m_ReadBuffer.
end()));
3566 rTemperatureDegC = SPqNaN;
3576 return Write(
":DIAG:UPGR");
3585 if (!l_WriteAndRead(
":DIAG:LOG?", m_ReadBuffer))
3588 rDebugLog = std::string(m_ReadBuffer.
begin(), m_ReadBuffer.
end());
3604 if (!l_WriteAndRead(
":SYST:MDAT?;CDAT?", m_ReadBuffer))
3609 std::vector<char>::const_iterator l_tokenbeg, l_tokenend;
3612 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
3614 rSManufacturingDate = std::string(l_tokenbeg, l_tokenend);
3615 std::match_results<std::string::const_iterator> l_Mm;
3617 if (!std::regex_match(rSManufacturingDate, l_Mm, std::regex(
"^([0-9]{2})([0-9]{2})([0-9]{2})")))
3619 std::stringstream l_DateStream;
3620 std::chrono::system_clock::time_point l_TimePointUTC;
3622 l_DateStream <<
"20" + l_Mm[1].str() +
"-" + l_Mm[2].str() +
"-" + l_Mm[3].str() +
" 00:00:00";
3623 l_DateStream >>
date::parse(
"%F %T", l_TimePointUTC);
3624 rManufacturingDate = std::chrono::system_clock::to_time_t(l_TimePointUTC);
3627 if (!l_BP.
GetNext(l_tokenbeg, l_tokenend,
';'))
3629 rSCalibrationDate = std::string(l_tokenbeg, l_tokenend);
3630 std::match_results<std::string::const_iterator> l_Cm;
3632 if (!std::regex_match(rSCalibrationDate, l_Cm, std::regex(
"^([0-9]{2})([0-9]{2})([0-9]{2})")))
3635 l_DateStream.clear();
3636 std::chrono::system_clock::time_point l_TimePointCalUTC;
3637 l_DateStream <<
"20" + l_Cm[1].str() +
"-" + l_Cm[2].str() +
"-" + l_Cm[3].str() +
" 00:00:00";
3638 l_DateStream >>
date::parse(
"%F %T", l_TimePointCalUTC);
3639 rCalibrationDate = std::chrono::system_clock::to_time_t(l_TimePointCalUTC);
3645 rSManufacturingDate.clear();
3646 rManufacturingDate = -1;
3647 rSCalibrationDate.clear();
3648 rCalibrationDate = -1;
3664 l_SingleChannelList.push_back(rChannel);
3665 std::string l_StrChannelList;
3668 std::string l_Command =
":ROUT:MMEM:DATA? " + l_StrChannelList;
3671 if (!l_WriteAndRead(l_Command, m_ReadBuffer,
true))
3674 size_t l_Start, l_Len;
3678 rROMContent.assign(m_ReadBuffer.
data() + l_Start, m_ReadBuffer.
data() + l_Start + l_Len);
3695 l_SingleChannelList.push_back(rChannel);
3696 std::string l_StrChannelList;
3699 std::string l_StrROMContent;
3700 l_StrROMContent.assign(rROMContent.begin(), rROMContent.end());
3701 std::string l_StrROMArbBlock;
3704 std::string l_Command =
":ROUT:MMEM:DATA " + l_StrChannelList +
"," + l_StrROMArbBlock;
3706 return l_WriteAndRead(l_Command, m_ReadBuffer,
true);
3715 l_SingleChannelList.push_back(rChannel);
3716 std::string l_StrChannelList;
3719 std::string l_Command =
":ROUT:MMEM:NORM? " + l_StrChannelList;
3722 if (!l_WriteAndRead(l_Command, m_ReadBuffer,
true))
3725 size_t l_Start, l_Len;
3730 rNormalizationTable.push_back(
BinaryToF32(&*l_it));
3747 l_SingleChannelList.push_back(rChannel);
3748 std::string l_StrChannelList;
3751 std::vector<U8> l_RawNormalizationTable;
3753 std::memcpy(l_RawNormalizationTable.data(), rNormalizationTable.data(), l_RawNormalizationTable.size());
3754 std::string l_StrNormTableArbBlock;
3755 ToArbitraryBlock(std::string(l_RawNormalizationTable.begin(), l_RawNormalizationTable.end()), l_StrNormTableArbBlock);
3757 std::string l_Command =
":ROUT:MMEM:NORM " + l_StrChannelList +
"," + l_StrNormTableArbBlock;
3759 return l_WriteAndRead(l_Command, m_ReadBuffer,
true);
3766 std::string l_Command =
":ROUT:LOWL? ";
3767 std::string l_DataToSend;
3768 l_DataToSend.assign(rDataToSend.begin(), rDataToSend.end());
3769 l_Command += l_DataToSend;
3772 if (!l_WriteAndRead(l_Command, m_ReadBuffer,
true))
3775 size_t l_Start, l_Len;
3779 rReturnedStatus = *(m_ReadBuffer.
data() + l_Start);
3780 rRcvdData.assign(m_ReadBuffer.
data() + l_Start + 1, m_ReadBuffer.
data() + l_Start + l_Len);
3786 rReturnedStatus = 0;
3797 return l_WriteAndRead(rWriteStr, m_ReadBuffer,
true);