34 #define DEBUG_MTL_INSTRUMENT_MFC3045 1
35 #define DEBUG_MTL_INSTRUMENT_MFC3045_ERRORS_ONLY 1
36 #if (defined(_DEBUG) && defined(DEBUG_MTL_INSTRUMENT_MFC3045) && DEBUG_MTL_INSTRUMENT_MFC3045)
37 #if (defined(DEBUG_MTL_INSTRUMENT_MFC3045_ERRORS_ONLY) && DEBUG_MTL_INSTRUMENT_MFC3045_ERRORS_ONLY)
38 #define MTL_INSTRUMENT_MFC3045_DEBUG_COUT(__X__)
40 #define MTL_INSTRUMENT_MFC3045_DEBUG_COUT(__X__) COUT(__X__)
42 #define MTL_INSTRUMENT_MFC3045_DEBUG_CERR(__X__) CERR(__X__)
44 #define MTL_INSTRUMENT_MFC3045_DEBUG_COUT(__X__)
45 #define MTL_INSTRUMENT_MFC3045_DEBUG_CERR(__X__)
48 #define SMA_PA "PA\r\n"
49 #define SMA_UP "UP\r\n"
50 #define SMA_DN "DN\r\n"
51 #define SMA_EE "EE\r\n"
52 #define SMA_RS "RS\r\n"
53 #define SMA_ME "ME\r\n"
54 #define SMA_CE "CE\r\n"
55 #define SMA_DR "DR\r\n"
74 bool CMFC3045Instrument::l_SerialPortHostConfig(
const sSerialPortSettings & rSerialSettings)
93 bool CMFC3045Instrument::l_ClearHostSerialBufferRxTx()
113 bool CMFC3045Instrument::l_GetNewDataRxBufferLength(U32 & rRxBufferLength)
120 U32 l_rxBuffLength(0);
124 rRxBufferLength = l_rxBuffLength;
138 bool CMFC3045Instrument::l_WaitAvailableDataRX(
const U32 & rTimeoutRx, U32 & rRXBufferLength,
const bool & rErrorOnTimoute)
143 U8 l_TimetoCheckMs(10);
144 U32 l_Wait10Ms = rTimeoutRx / l_TimetoCheckMs;
149 for (U32 it = 0; (0 == rRXBufferLength && it < l_Wait10Ms); it++)
151 if (m_AbortSerialTransfert)
154 if (!l_GetNewDataRxBufferLength(rRXBufferLength))
157 if (0 == rRXBufferLength)
175 bool CMFC3045Instrument::l_ExtractSmaMsgFromDataRX(
const std::string & rNewRxBufferStrIn,
uSMAByte & rSMAValue, std::string & rNewRxBufferStrOut)
180 rNewRxBufferStrOut.clear();
181 std::string l_StrTemp;
183 if (0 == rNewRxBufferStrIn.size())
185 rNewRxBufferStrOut = rNewRxBufferStrIn;
188 std::size_t l_Pos = rNewRxBufferStrOut.find(
SMA_DR);
189 if (std::string::npos != l_Pos)
192 rNewRxBufferStrOut.erase(l_Pos, 4);
196 l_Pos = rNewRxBufferStrOut.find(
SMA_PA);
197 if (std::string::npos != l_Pos)
200 rNewRxBufferStrOut.erase(l_Pos, 4);
204 l_Pos = rNewRxBufferStrOut.find(
SMA_CE);
205 if (std::string::npos != l_Pos)
208 rNewRxBufferStrOut.erase(l_Pos, 4);
212 l_Pos = rNewRxBufferStrOut.find(
SMA_RS);
213 if (std::string::npos != l_Pos)
216 rNewRxBufferStrOut.erase(l_Pos, 4);
220 l_Pos = rNewRxBufferStrOut.find(
SMA_ME);
221 if (std::string::npos != l_Pos)
224 rNewRxBufferStrOut.erase(l_Pos, 4);
228 l_Pos = rNewRxBufferStrOut.find(
SMA_EE);
229 if (std::string::npos != l_Pos)
232 rNewRxBufferStrOut.erase(l_Pos, 4);
236 l_Pos = rNewRxBufferStrOut.find(
SMA_DN);
237 if (std::string::npos != l_Pos)
240 rNewRxBufferStrOut.erase(l_Pos, 4);
244 l_Pos = rNewRxBufferStrOut.find(
SMA_UP);
245 if (std::string::npos != l_Pos)
248 rNewRxBufferStrOut.erase(l_Pos, 4);
262 bool CMFC3045Instrument::l_Write(
const std::string & rWriteStr,
const bool & rForceWrite)
269 if(m_AbortSerialTransfert && !rForceWrite)
272 std::string l_WriteStr;
273 l_WriteStr = rWriteStr +
"\r\n";
275 if (!
CVISAInstrument::Write(
reinterpret_cast<ViBuf
>(
const_cast<char *
>(l_WriteStr.data())),
static_cast<ViUInt32
>(l_WriteStr.size())))
290 bool CMFC3045Instrument::l_ReadString(std::string & rRxBufferStr,
const U8 & rNStringAssembly,
const bool & rCheckSmaMsg)
297 U32 l_RxNewDataLength(0);
298 rRxBufferStr.clear();
299 std::string l_TempRdStrOut;
305 for (
size_t i = 0; i < rNStringAssembly + l_NbSmaMsg; i++)
307 if(!l_WaitAvailableDataRX(m_WaitTimeRdData_ms, l_RxNewDataLength))
309 m_ReadBuffer.clear();
312 ViStatus l_VisaStatus = Status();
313 if ((VI_ERROR_TMO == l_VisaStatus) &&
314 (1 <= m_ReadBuffer.size()) && (
static_cast<char>(
DATA_END_ETB) == m_ReadBuffer[m_ReadBuffer.size() - 1]))
316 m_ReadBuffer.resize(m_ReadBuffer.size() - 1);
317 l_TempRdStrOut = std::string(m_ReadBuffer.begin(), m_ReadBuffer.end());
325 if(m_SMAEnabled || rCheckSmaMsg)
327 l_ExtractSmaMsgFromDataRX(std::string(m_ReadBuffer.begin(), m_ReadBuffer.end()), l_SMAMsg, l_TempRdStrOut);
328 m_SMAValue.RawSMAB |= l_SMAMsg.
RawSMAB;
334 l_TempRdStrOut = std::string(m_ReadBuffer.begin(), m_ReadBuffer.end());
336 if(0 != l_TempRdStrOut.size())
339 if (l_TempRdStrOut.size() >= 2 && l_TempRdStrOut[l_TempRdStrOut.size() - 2] ==
'\r' && l_TempRdStrOut[l_TempRdStrOut.size() - 1] ==
'\n')
340 l_TempRdStrOut.resize(l_TempRdStrOut.size() - 2);
341 else if (1 <= l_TempRdStrOut.size() &&
static_cast<char>(
DATA_END_ETB) == l_TempRdStrOut[l_TempRdStrOut.size() - 1])
343 l_TempRdStrOut.resize(l_TempRdStrOut.size() - 1);
349 rRxBufferStr.append(l_TempRdStrOut);
363 bool CMFC3045Instrument::l_ReadNCharNoTerm(
CVISABuffer & rReadBuffer,
const U16 & rReadNChar)
373 l_SerialPortHostConfig(l_SerialParmsNoTerm);
376 ViUInt32 l_RetLength(0);
377 ViUInt32 l_NbCharToRead =
static_cast<ViUInt32
>(rReadNChar) + 1;
378 U32 l_RxNewDataLength(0);
380 if (!l_WaitAvailableDataRX(m_WaitTimeRdData_ms, l_RxNewDataLength))
386 rReadBuffer.
resize(l_RetLength);
387 if ((l_RetLength == l_NbCharToRead) &&
static_cast<char>(
DATA_END_ETB) == rReadBuffer[l_RetLength - 1])
389 rReadBuffer.
resize(l_RetLength - 1);
395 l_SerialPortHostConfig(m_HostSerialConfig);
401 l_SerialPortHostConfig(m_HostSerialConfig);
408 bool CMFC3045Instrument::l_DateStrToDateTimeUtc(
const std::string & rUtcDateStr, std::time_t & rUtcDateTime)
413 std::match_results<std::string::const_iterator> l_DateMatch;
415 if (!std::regex_match(rUtcDateStr, l_DateMatch, std::regex(
"^([0-9]{2})/([0-9]{2})/([0-9]{2})")))
418 std::stringstream l_DateStream;
419 std::chrono::system_clock::time_point l_TimePointUTC;
420 int l_TempDD, l_TempMM, l_TempYY;
421 l_TempDD = std::stoi(l_DateMatch[1]);
422 l_TempMM = std::stoi(l_DateMatch[2]);
423 l_TempYY = std::stoi(l_DateMatch[3]);
426 if (0 == l_TempDD || 0 == l_TempMM || 0 == l_TempYY)
430 if(l_TempDD < 1 || l_TempDD > 31)
433 if (l_TempMM < 0 || l_TempMM > 12)
438 l_DateStream <<
"19" + l_DateMatch[3].str() +
"-" + l_DateMatch[2].str() +
"-" + l_DateMatch[1].str() +
" 00:00:00";
442 l_DateStream <<
"20" + l_DateMatch[3].str() +
"-" + l_DateMatch[2].str() +
"-" + l_DateMatch[1].str() +
" 00:00:00";
445 l_DateStream >>
date::parse(
"%F %T", l_TimePointUTC);
446 rUtcDateTime = std::chrono::system_clock::to_time_t(l_TimePointUTC);
461 bool CMFC3045Instrument::l_DateTimeToDateStrUtc(
const std::time_t & rUtcDateTime, std::string & rUtcDateStr)
466 auto l_TimePointUTC = std::chrono::system_clock::from_time_t(rUtcDateTime);
467 rUtcDateStr =
date::format(
"%d%m%g", date::floor<std::chrono::seconds>(l_TimePointUTC));
484 m_AbortSerialTransfert(false),
512 std::string l_Answer;
513 bool l_TestOk(
false);
515 for (
int i = 0; i < rNbRetry; i++)
519 if (l_ReadString(l_Answer,1,
true))
521 if (std::string::npos != l_Answer.find(
MFC_ASCII))
563 m_HostSerialConfig = rSerialSettings;
566 if(!l_SerialPortHostConfig(m_HostSerialConfig))
570 m_WaitTimeRdData_ms = 2000;
574 m_WaitTimeRdData_ms = rInitialTimeout_ms;
577 if(!
StatusGet(eStatusRegister::kStatus3, l_RegStat))
611 bool l_Success(
true);
628 bool AbortSucceded =
true;
630 m_AbortSerialTransfert =
true;
632 AbortSucceded =
false;
634 m_AbortSerialTransfert =
false;
635 return AbortSucceded;
646 if (!l_Write(rCommandStr))
648 if (!l_ReadString(rRegValStr))
663 rRdDataTimeout_ms = m_WaitTimeRdData_ms;
669 m_WaitTimeRdData_ms = rNewdataTimeout_ms;
709 switch (rSerialSettings.
Parity)
751 l_Setting.
RSPByte.
PRBR =
static_cast<U8
>(eMFCSerialBDR::k2400);
754 l_Setting.
RSPByte.
PRBR =
static_cast<U8
>(eMFCSerialBDR::k4800);
757 l_Setting.
RSPByte.
PRBR =
static_cast<U8
>(eMFCSerialBDR::k9600);
760 l_Setting.
RSPByte.
PRBR =
static_cast<U8
>(eMFCSerialBDR::k19200);
763 l_Setting.
RSPByte.
PRBR =
static_cast<U8
>(eMFCSerialBDR::k28800);
766 l_Setting.
RSPByte.
PRBR =
static_cast<U8
>(eMFCSerialBDR::k38400);
769 l_Setting.
RSPByte.
PRBR =
static_cast<U8
>(eMFCSerialBDR::k57600);
772 l_Setting.
RSPByte.
PRBR =
static_cast<U8
>(eMFCSerialBDR::k115200);
777 rParmRSPSettings = l_Setting.
RawRSPB;
798 l_ParmSetting.
RawRSPB = rParmRSPSettings;
799 l_ParsedSetting = rSerialSettings;
838 case eMFCSerialBDR::k2400:
841 case eMFCSerialBDR::k4800:
844 case eMFCSerialBDR::k9600:
847 case eMFCSerialBDR::k19200:
850 case eMFCSerialBDR::k28800:
853 case eMFCSerialBDR::k38400:
856 case eMFCSerialBDR::k57600:
859 case eMFCSerialBDR::k115200:
866 rSerialSettings = l_ParsedSetting;
886 std::string l_Command(
"RSP,");
888 if (eAdvancedMode::k2 != m_AdvancedMode)
890 if(rRegVal < RSP_MIN || rRegVal >
RSP_MAX)
892 l_Command += std::to_string(rRegVal);
893 if (!l_Write(l_Command))
914 if (eAdvancedMode::kNone == m_AdvancedMode)
918 if (!l_ReadString(l_RdStr, 2))
920 rRegVal =
static_cast<U16
>(std::stoul(l_RdStr,0,2));
942 std::string l_Command(
"ADV,");
944 l_Command += std::to_string(
static_cast<U8
>(rRegVal));
946 if (!l_Write(l_Command))
948 m_AdvancedMode = rRegVal;
952 m_AdvancedMode = eAdvancedMode::kNone;
968 U32 l_AdvancedMode(255);
972 if (!l_ReadString(l_RdStr))
974 l_AdvancedMode =
static_cast<U32
>(std::stoul(l_RdStr));
975 switch (l_AdvancedMode)
977 case static_cast<U32
>(eAdvancedMode::kNone):
978 rRegVal = eAdvancedMode::kNone;
980 case static_cast<U32
>(eAdvancedMode::k1):
981 rRegVal = eAdvancedMode::k1;
983 case static_cast<U32
>(eAdvancedMode::k2):
984 rRegVal = eAdvancedMode::k2;
991 m_AdvancedMode = rRegVal;
995 m_AdvancedMode = eAdvancedMode::kNone;
1011 if (!l_Write(
"RST"))
1013 m_AdvancedMode = eAdvancedMode::kNone;
1014 m_DataBlockMode = eDataBlockMode::kOneByOne;
1015 l_ClearHostSerialBufferRxTx();
1034 if (!l_Write(
"VER"))
1036 if (!l_ReadString(rVersionInfo))
1039 if (rVersionInfo.size() > 30)
1040 rFwVersion =
static_cast<F32
>(std::stof(std::string(rVersionInfo.end() - 4, rVersionInfo.end()).c_str()));
1062 std::string l_Command(
"VER,");
1064 l_Command += std::to_string(
static_cast<U8
>(rSelect));
1066 if (!l_Write(l_Command))
1068 if (!l_ReadString(rVersionInfo))
1075 case eWhoVersion::kMUFirmVer:
1076 if (rVersionInfo.size() > 30)
1077 rFwVersion =
static_cast<F32
>(std::stof(std::string(rVersionInfo.end() - 4, rVersionInfo.end()).c_str()));
1079 case eWhoVersion::kMUEepromVer:
1080 case eWhoVersion::kPAEepromVer:
1081 if (rVersionInfo.size() > 0)
1082 rFwVersion =
static_cast<F32
>(std::stof(rVersionInfo));
1106 if (!l_Write(
"S/N"))
1108 if (!l_ReadString(rSerialNum))
1128 std::string l_Command(
"S/N,");
1130 l_Command += std::to_string(
static_cast<U8
>(rSelect));
1132 if (!l_Write(l_Command))
1134 if (!l_ReadString(rSerialNum))
1154 std::string l_Command(
"LED,");
1156 l_Command += std::to_string(
static_cast<U8
>(rRemoteLed));
1158 if (!l_Write(l_Command))
1178 U8 l_RemoteLed(255);
1179 std::string l_RdStr;
1180 if (!l_Write(
"LED"))
1182 if (!l_ReadString(l_RdStr))
1184 l_RemoteLed =
static_cast<U8
>(std::stoul(l_RdStr));
1185 switch (l_RemoteLed)
1187 case static_cast<U8
>(eRemoteBusyLed::kRemoteLedOff):
1188 rRemoteLed = eRemoteBusyLed::kRemoteLedOff;
1190 case static_cast<U8
>(eRemoteBusyLed::kRemoteLedMeasuring):
1191 rRemoteLed = eRemoteBusyLed::kRemoteLedMeasuring;
1193 case static_cast<U8
>(eRemoteBusyLed::kRemoteLedOffEndMeas):
1194 rRemoteLed = eRemoteBusyLed::kRemoteLedOffEndMeas;
1196 case static_cast<U8
>(eRemoteBusyLed::kRemoteLedOn):
1197 rRemoteLed = eRemoteBusyLed::kRemoteLedOn;
1199 case static_cast<U8
>(eRemoteBusyLed::kRemoteLedBlinkSlow):
1200 rRemoteLed = eRemoteBusyLed::kRemoteLedBlinkSlow;
1202 case static_cast<U8
>(eRemoteBusyLed::kRemoteLedBlinkFast):
1203 rRemoteLed = eRemoteBusyLed::kRemoteLedBlinkFast;
1229 std::string l_Command(
"DFF,");
1231 if (eAdvancedMode::kNone == m_AdvancedMode)
1236 l_Command += std::to_string(rRegVal);
1237 if (!l_Write(l_Command))
1257 std::string l_RdStr;
1259 if (eAdvancedMode::kNone == m_AdvancedMode)
1262 if (!l_Write(
"DFF"))
1264 if (!l_ReadString(l_RdStr))
1266 rRegVal =
static_cast<U32
>(std::stoul(l_RdStr));
1286 std::string l_Command(
"FSW,");
1288 if (eAdvancedMode::kNone == m_AdvancedMode)
1293 case eSweepFreqMode::kdisable:
1296 case eSweepFreqMode::k20Step:
1299 case eSweepFreqMode::kPaRange:
1302 case eSweepFreqMode::kSetValue:
1303 if (rFreqStepVal < 2 || rFreqStepVal >
FSW_DFF_MAX)
1306 l_Command += std::to_string(rFreqStepVal);
1312 if (!l_Write(l_Command))
1331 std::string l_Command;
1332 l_Command += std::to_string(
static_cast<U8
>(rShiftDirection));
1333 if (!l_Write(l_Command))
1355 std::string l_Command;
1358 switch (rStatRegSel)
1360 case eStatusRegister::kStatus1:
1363 case eStatusRegister::kStatus2:
1366 case eStatusRegister::kStatus3:
1369 case eStatusRegister::kStatus4:
1372 case eStatusRegister::kStatus5:
1375 case eStatusRegister::kStatus6:
1384 if (!l_Write(l_Command))
1387 std::string l_RdStr;
1388 if (!l_ReadString(l_RdStr))
1390 rStatus =
static_cast<U8
>(std::stoul(l_RdStr,
nullptr, 2));
1410 std::string l_Command;
1412 for (std::vector<eStatusRegister>::const_iterator it = rStatRegSel.begin(); it != rStatRegSel.end(); it++)
1414 if (it != rStatRegSel.begin())
1418 case eStatusRegister::kStatus1:
1421 case eStatusRegister::kStatus2:
1424 case eStatusRegister::kStatus3:
1427 case eStatusRegister::kStatus4:
1430 case eStatusRegister::kStatus5:
1433 case eStatusRegister::kStatus6:
1442 if (!l_Write(l_Command))
1446 std::string l_RdStr;
1447 for (
size_t i = rStatRegSel.size(); i > 0; i--)
1449 if(!l_ReadString(l_RdStr))
1451 rStatus.push_back(
static_cast<U8
>(std::stoul(l_RdStr,
nullptr, 2)));
1471 if (!l_Write(
"ERR"))
1473 if (!l_ReadString(rCmdError))
1493 std::string l_RdStr;
1494 if (!l_Write(
"SMA"))
1496 if (!l_ReadString(l_RdStr))
1498 rRegVal =
static_cast<U8
>(std::stoul(l_RdStr,
nullptr, 2));
1520 U32 l_RxNewDataLength(0);
1526 if(l_WaitAvailableDataRX(200, l_RxNewDataLength,
false))
1528 if (l_RxNewDataLength >= 4)
1529 l_NbSmaMsg = l_RxNewDataLength / 4;
1530 for(
size_t l_i = 0; l_i < l_NbSmaMsg ; l_i++)
1532 m_ReadBuffer.
clear();
1538 if(0 != l_SMARegValRead.
RawSMAB)
1553 bool CMFC3045Instrument::l_SMASet(
const U8 & rRegVal)
1559 std::string l_Command(
"SMA,");
1560 l_Command += std::to_string(rRegVal);
1561 if (!l_Write(l_Command))
1588 std::string l_Command(
"MDA,");
1592 l_Command += std::to_string(rRegVal);
1593 if (!l_Write(l_Command))
1613 std::string l_RdStr;
1614 if (!l_Write(
"MDA"))
1616 if (!l_ReadString(l_RdStr))
1618 rRegVal =
static_cast<U32
>(std::stoul(l_RdStr));
1637 std::string l_Command(
"MCF,");
1641 l_Command += std::to_string(rRegVal);
1642 if (!l_Write(l_Command))
1662 std::string l_RdStr;
1663 if (!l_Write(
"MCF"))
1665 if (!l_ReadString(l_RdStr))
1667 rRegVal =
static_cast<U32
>(std::stoul(l_RdStr));
1686 std::string l_Command(
"MLF,");
1690 l_Command += std::to_string(rRegVal);
1691 if (!l_Write(l_Command))
1711 std::string l_RdStr;
1712 if (!l_Write(
"MLF"))
1714 if (!l_ReadString(l_RdStr))
1716 rRegVal =
static_cast<U32
>(std::stoul(l_RdStr));
1736 std::string l_Command(
"MHF,");
1740 l_Command += std::to_string(rRegVal);
1741 if (!l_Write(l_Command))
1761 std::string l_RdStr;
1762 if (!l_Write(
"MHF"))
1764 if (!l_ReadString(l_RdStr))
1766 rRegVal =
static_cast<U32
>(std::stoul(l_RdStr));
1785 std::string l_Command(
"MRE,");
1787 l_Command += std::to_string(
static_cast<U8
>(rRegVal));
1789 if (!l_Write(l_Command))
1809 U32 l_Modulation(255);
1810 std::string l_RdStr;
1811 if (!l_Write(
"MRE"))
1813 if (!l_ReadString(l_RdStr))
1815 l_Modulation =
static_cast<U32
>(std::stoul(l_RdStr));
1816 switch (l_Modulation)
1818 case static_cast<U32
>(eModulationRef::kMDA):
1819 rRegVal = eModulationRef::kMDA;
1821 case static_cast<U32
>(eModulationRef::kMCF):
1822 rRegVal = eModulationRef::kMCF;
1824 case static_cast<U32
>(eModulationRef::kMLF):
1825 rRegVal = eModulationRef::kMLF;
1827 case static_cast<U32
>(eModulationRef::kMHF):
1828 rRegVal = eModulationRef::kMHF;
1852 std::string l_Command(
"MDP,");
1854 if (eAdvancedMode::kNone == m_AdvancedMode)
1859 l_Command += std::to_string(rRegVal);
1860 if (!l_Write(l_Command))
1880 std::string l_RdStr;
1881 if (!l_Write(
"MDP"))
1883 if (!l_ReadString(l_RdStr))
1885 rRegVal =
static_cast<U16
>(std::stoul(l_RdStr));
1904 std::string l_RdStr;
1905 if (eAdvancedMode::kNone == m_AdvancedMode)
1907 if (!l_Write(
"NSR"))
1909 if (!l_ReadString(l_RdStr))
1911 rRegVal =
static_cast<U32
>(std::stoul(l_RdStr));
1930 std::string l_RdStr;
1931 if (eAdvancedMode::kNone == m_AdvancedMode)
1933 if (!l_Write(
"NSP"))
1935 if (!l_ReadString(l_RdStr))
1937 rRegVal =
static_cast<U32
>(std::stoul(l_RdStr));
1956 std::string l_RdStr;
1957 if (eAdvancedMode::kNone == m_AdvancedMode)
1959 if (!l_Write(
"DBR"))
1961 if (!l_ReadString(l_RdStr))
1963 rRegVal =
static_cast<U32
>(std::stoul(l_RdStr));
1983 U32 l_DdsResolution;
1990 rDdsResolutionFdhz = 0.256f*(
static_cast<F32
>(l_DdsResolution) + 1.0f)*(
static_cast<F32
>(l_RfHarmonic));
2012 std::string l_Command(
"NCY,");
2017 l_Command += std::to_string(rRegVal);
2018 if (!l_Write(l_Command))
2038 std::string l_RdStr;
2039 if (!l_Write(
"NCY"))
2041 if (!l_ReadString(l_RdStr))
2043 rRegVal =
static_cast<U16
>(std::stoul(l_RdStr));
2062 std::string l_Command(
"NPC,");
2064 if (eAdvancedMode::k2 != m_AdvancedMode)
2069 l_Command += std::to_string(rRegVal);
2070 if (!l_Write(l_Command))
2090 std::string l_RdStr;
2091 if (eAdvancedMode::kNone == m_AdvancedMode)
2093 if (!l_Write(
"NPC"))
2095 if (!l_ReadString(l_RdStr))
2097 rRegVal =
static_cast<U16
>(std::stoul(l_RdStr));
2116 std::string l_Command(
"NPT,");
2118 if (eAdvancedMode::k2 != m_AdvancedMode)
2123 l_Command += std::to_string(rRegVal);
2124 if (!l_Write(l_Command))
2144 std::string l_RdStr;
2145 if (eAdvancedMode::kNone == m_AdvancedMode)
2147 if (!l_Write(
"NPT"))
2149 if (!l_ReadString(l_RdStr))
2151 rRegVal =
static_cast<U16
>(std::stoul(l_RdStr));
2170 std::string l_Command(
"RSO,");
2172 if (eAdvancedMode::kNone == m_AdvancedMode)
2177 l_Command += std::to_string(rRegVal);
2178 if (!l_Write(l_Command))
2198 std::string l_RdStr;
2199 if (eAdvancedMode::kNone == m_AdvancedMode)
2201 if (!l_Write(
"RSO"))
2203 if (!l_ReadString(l_RdStr))
2205 rRegVal =
static_cast<U16
>(std::stoul(l_RdStr));
2224 std::string l_Command(
"RSG,");
2226 if (eAdvancedMode::kNone == m_AdvancedMode)
2231 l_Command += std::to_string(rRegVal);
2232 if (!l_Write(l_Command))
2252 std::string l_RdStr;
2253 if (eAdvancedMode::kNone == m_AdvancedMode)
2255 if (!l_Write(
"RSG"))
2257 if (!l_ReadString(l_RdStr))
2259 rRegVal =
static_cast<U16
>(std::stoul(l_RdStr));
2278 std::string l_Command(
"TVP,");
2280 l_Command += std::to_string(
static_cast<U8
>(rRegVal));
2281 if (!l_Write(l_Command))
2301 U8 l_Precision(255);
2302 std::string l_RdStr;
2303 if (!l_Write(
"TVP"))
2305 if (!l_ReadString(l_RdStr))
2307 l_Precision =
static_cast<U8
>(std::stoul(l_RdStr));
2308 switch (l_Precision)
2310 case static_cast<U8
>(ePrecision::kHighPrecision):
2311 rRegVal = ePrecision::kHighPrecision;
2313 case static_cast<U8
>(ePrecision::kLowPrecision):
2314 rRegVal = ePrecision::kLowPrecision;
2342 if (!l_Write(
"RUN"))
2363 if (rProbeSel > m_NbProbesInPA)
2366 std::string l_Command(
"RUN,");
2367 l_Command += std::to_string(rProbeSel);
2368 if (!l_Write(l_Command))
2400 if (!l_SMASet(l_SMARegVal.
RawSMAB))
2438 if (!l_SMASet(l_SMARegVal.
RawSMAB))
2470 U32 l_RxNewDataLength(0);
2471 std::string l_TempRdStrOut;
2476 if(l_WaitAvailableDataRX(rMeasWaitTimeout_ms, l_RxNewDataLength,
false))
2478 if (l_RxNewDataLength >= 4)
2479 l_NbSmaMsg = l_RxNewDataLength / 4;
2480 for(
size_t l_i =0; l_i < l_NbSmaMsg ; l_i++)
2482 m_ReadBuffer.
clear();
2485 ViStatus l_VisaStatus =
Status();
2486 if (!((VI_ERROR_TMO == l_VisaStatus) &&
2487 (1 <= m_ReadBuffer.
size()) && (
static_cast<char>(
DATA_END_ETB) == m_ReadBuffer[m_ReadBuffer.
size() - 1])))
2494 l_ExtractSmaMsgFromDataRX(std::string(m_ReadBuffer.
begin(), m_ReadBuffer.
end()), l_SMAMsg, l_TempRdStrOut);
2499 rSmaValue = m_SMAValue;
2527 if (!l_Write(
"SRC"))
2548 if (rProbeSel > m_NbProbesInPA)
2551 std::string l_Command(
"SRC,");
2552 l_Command += std::to_string(rProbeSel);
2553 if (!l_Write(l_Command))
2586 if (!l_SMASet(l_SMARegVal.
RawSMAB))
2625 if (!l_SMASet(l_SMARegVal.
RawSMAB))
2652 if (!l_Write(
"CTN"))
2672 if (!l_Write(
"BRK",
true))
2690 bool CMFC3045Instrument::l_DataBlockModeSet(
const eDataBlockMode & rRegVal)
2696 std::string l_Command(
"BLK,");
2697 l_Command += std::to_string(
static_cast<U8
>(rRegVal));
2698 if (!l_Write(l_Command))
2700 m_DataBlockMode = rRegVal;
2704 m_DataBlockMode = eDataBlockMode::kOneByOne;
2721 if(!l_DataBlockModeSet(eDataBlockMode::kAllDecimal))
2725 if(eDataBlockMode::kAllDecimal != l_BlockMode)
2746 U32 l_BlockMode(255);
2747 std::string l_RdStr;
2748 if (!l_Write(
"BLK"))
2750 if (!l_ReadString(l_RdStr))
2752 l_BlockMode =
static_cast<U32
>(std::stoul(l_RdStr));
2753 switch (l_BlockMode)
2755 case static_cast<U32
>(eDataBlockMode::kOneByOne):
2756 rRegVal = eDataBlockMode::kOneByOne;
2758 case static_cast<U32
>(eDataBlockMode::kAllDecimal):
2759 rRegVal = eDataBlockMode::kAllDecimal;
2761 case static_cast<U32
>(eDataBlockMode::kAllHexa):
2762 rRegVal = eDataBlockMode::kAllHexa;
2769 m_DataBlockMode = rRegVal;
2773 m_DataBlockMode = eDataBlockMode::kOneByOne;
2785 bool CMFC3045Instrument::l_ReadEndTransmissionBlockChar()
2791 std::string l_RdStr;
2795 if(!l_SerialPortHostConfig(l_SerialParms))
2797 if(!l_ReadString(l_RdStr))
2799 if (!l_SerialPortHostConfig(m_HostSerialConfig))
2806 l_SerialPortHostConfig(m_HostSerialConfig);
2816 bool CMFC3045Instrument::l_ReadMeasurementTableBlock(
const std::string rStringCMD, std::vector<U32> & rData)
2822 if ((0 == rData.size()) || (rData.size() < m_NbProbesInPA) || (
NPR_MAX < rData.size()))
2824 if (eDataBlockMode::kAllDecimal != m_DataBlockMode)
2827 if (!l_Write(rStringCMD))
2830 for (
size_t i = 0; i < rData.size(); i++)
2832 std::string l_StrData;
2833 if (!l_ReadString(l_StrData))
2835 if (l_StrData.empty())
2838 rData[i] =
static_cast<U32
>(std::stoul(l_StrData));
2841 if (!l_ReadEndTransmissionBlockChar())
2863 if (eDataBlockMode::kAllDecimal != m_DataBlockMode)
2866 rData.resize(rNbMeasurements);
2867 if (!l_ReadMeasurementTableBlock(
"BFV", rData))
2889 if (rProbeSel < 1 || rProbeSel > m_NbProbesInPA)
2891 if (eDataBlockMode::kAllDecimal != m_DataBlockMode)
2894 std::string l_Command(
"BFV,");
2895 l_Command += std::to_string(rProbeSel);
2896 std::string l_StrData;
2897 if (!l_Write(l_Command))
2899 if (!l_ReadString(l_StrData))
2901 if (l_StrData.empty())
2904 rData =
static_cast<U32
>(std::stoul(l_StrData));
2925 if (eDataBlockMode::kAllDecimal != m_DataBlockMode)
2928 rData.resize(rNbMeasurements);
2929 if (!l_ReadMeasurementTableBlock(
"BSD", rData))
2950 if (rProbeSel < 1 || rProbeSel > m_NbProbesInPA)
2952 if (eDataBlockMode::kAllDecimal != m_DataBlockMode)
2955 std::string l_Command(
"BSD,");
2956 l_Command += std::to_string(rProbeSel);
2957 std::string l_StrData;
2958 if (!l_Write(l_Command))
2960 if (!l_ReadString(l_StrData))
2962 if (l_StrData.empty())
2965 rData =
static_cast<U32
>(std::stoul(l_StrData));
2986 if (eDataBlockMode::kAllDecimal != m_DataBlockMode)
2989 rData.resize(rNbMeasurements);
2990 if (!l_ReadMeasurementTableBlock(
"BNC", rData))
3011 if (rProbeSel < 1 || rProbeSel > m_NbProbesInPA)
3013 if (eDataBlockMode::kAllDecimal != m_DataBlockMode)
3016 std::string l_Command(
"BNC,");
3017 l_Command += std::to_string(rProbeSel);
3018 std::string l_StrData;
3019 if (!l_Write(l_Command))
3021 if (!l_ReadString(l_StrData))
3023 if (l_StrData.empty())
3026 rData =
static_cast<U32
>(std::stoul(l_StrData));
3047 if (eDataBlockMode::kAllDecimal != m_DataBlockMode)
3050 if (!l_Write(
"BIN"))
3052 std::string l_StrDataUp;
3053 if (!l_ReadString(l_StrDataUp))
3055 if (l_StrDataUp.empty())
3058 rDataUp =
static_cast<U32
>(std::stoul(l_StrDataUp));
3060 std::string l_StrDataDwn;
3061 if (!l_ReadString(l_StrDataDwn))
3063 if (l_StrDataDwn.empty())
3066 rDataDown =
static_cast<U32
>(std::stoul(l_StrDataDwn));
3069 if (!l_ReadEndTransmissionBlockChar())
3089 std::string l_StrData;
3090 if (!l_Write(
"BFC"))
3092 if (!l_ReadString(l_StrData))
3094 if (l_StrData.empty())
3097 rData =
static_cast<U32
>(std::stoul(l_StrData));
3116 std::string l_StrData;
3117 if (!l_Write(
"BFL"))
3119 if (!l_ReadString(l_StrData))
3121 if (l_StrData.empty())
3124 rData =
static_cast<U32
>(std::stoul(l_StrData));
3143 std::string l_StrData;
3144 if (!l_Write(
"BFH"))
3146 if (!l_ReadString(l_StrData))
3148 if (l_StrData.empty())
3151 rData =
static_cast<U32
>(std::stoul(l_StrData));
3170 std::string l_StrData;
3171 if (!l_Write(
"BFD"))
3173 if (!l_ReadString(l_StrData))
3175 if (l_StrData.empty())
3178 rData =
static_cast<U32
>(std::stoul(l_StrData));
3200 std::string l_Command(
"NPR,");
3202 if (eAdvancedMode::k2 != m_AdvancedMode)
3204 if ((rRegVal < 1) || (rRegVal >
NPR_MAX))
3206 l_Command += std::to_string(rRegVal);
3207 if (!l_Write(l_Command))
3209 m_NbProbesInPA = rRegVal;
3229 std::string l_RdStr;
3230 if (!l_Write(
"NPR"))
3232 if (!l_ReadString(l_RdStr))
3234 rRegVal =
static_cast<U8
>(std::stoul(l_RdStr));
3235 m_NbProbesInPA = rRegVal;
3255 std::string l_Command(
"PCF,");
3258 if (eAdvancedMode::k2 != m_AdvancedMode)
3261 l_Command += std::to_string(rRegVal);
3262 if (!l_Write(l_Command))
3282 std::string l_RdStr;
3283 if (!l_Write(
"PCF"))
3285 if (!l_ReadString(l_RdStr))
3287 rRegVal =
static_cast<U32
>(std::stoul(l_RdStr));
3306 std::string l_Command(
"PLF,");
3309 if (eAdvancedMode::k2 != m_AdvancedMode)
3312 l_Command += std::to_string(rRegVal);
3313 if (!l_Write(l_Command))
3333 std::string l_RdStr;
3334 if (!l_Write(
"PLF"))
3336 if (!l_ReadString(l_RdStr))
3338 rRegVal =
static_cast<U32
>(std::stoul(l_RdStr));
3357 std::string l_Command(
"PHF,");
3360 if (eAdvancedMode::k2 != m_AdvancedMode)
3363 l_Command += std::to_string(rRegVal);
3364 if (!l_Write(l_Command))
3384 std::string l_RdStr;
3385 if (!l_Write(
"PHF"))
3387 if (!l_ReadString(l_RdStr))
3389 rRegVal =
static_cast<U32
>(std::stoul(l_RdStr));
3408 std::string l_Command(
"RFH,");
3410 if (eAdvancedMode::k2 != m_AdvancedMode)
3413 l_Command += std::to_string(
static_cast<U8
>(rRegVal));
3414 if (!l_Write(l_Command))
3434 U32 l_RFHarmonic(0);
3435 std::string l_RdStr;
3436 if (!l_Write(
"RFH"))
3438 if (!l_ReadString(l_RdStr))
3440 l_RFHarmonic =
static_cast<U32
>(std::stoul(l_RdStr));
3441 switch (l_RFHarmonic)
3443 case static_cast<U32
>(eRFH::k1):
3446 case static_cast<U32
>(eRFH::k3):
3449 case static_cast<U32
>(eRFH::k5):
3452 case static_cast<U32
>(eRFH::k7):
3478 std::string l_Command(
"NST,");
3480 if (eAdvancedMode::k2 != m_AdvancedMode)
3483 l_Command += std::to_string(rRegVal);
3484 if (!l_Write(l_Command))
3504 std::string l_RdStr;
3505 if (eAdvancedMode::kNone == m_AdvancedMode)
3507 if (!l_Write(
"NST"))
3509 if (!l_ReadString(l_RdStr))
3511 rRegVal =
static_cast<U8
>(std::stoul(l_RdStr));
3533 if (eAdvancedMode::kNone == m_AdvancedMode)
3536 if (!l_Write(
"SMU,>EEP"))
3556 if (eAdvancedMode::kNone == m_AdvancedMode)
3559 if (!l_Write(
"SMU"))
3565 rEEPROMContent.assign(m_ReadBuffer.
begin(), m_ReadBuffer.
end());
3584 if (eAdvancedMode::kNone == m_AdvancedMode)
3587 if (!l_Write(
"SPA,>EEP"))
3607 if (eAdvancedMode::kNone == m_AdvancedMode)
3610 if (!l_Write(
"SPA"))
3615 rEEPROMContent.assign(m_ReadBuffer.
begin(), m_ReadBuffer.
end());
3635 std::string l_Command(
"CPS,");
3636 U8 l_PaProbeNumber(0);
3638 if (eAdvancedMode::kNone == m_AdvancedMode)
3642 if ((rProbeSel == 0) || (rProbeSel > m_NbProbesInPA))
3644 l_Command += std::to_string(rProbeSel);
3645 if (!l_Write(l_Command))
3665 if (eAdvancedMode::kNone == m_AdvancedMode)
3667 if (!l_Write(
"CPS,0"))
3689 U8 l_PaProbeNumber(0);
3690 if (eAdvancedMode::kNone == m_AdvancedMode)
3694 if (eDataBlockMode::kAllDecimal != m_DataBlockMode)
3696 rData.resize(rNbMeasurements);
3697 if (!l_ReadMeasurementTableBlock(
"CPS", rData))
3717 std::string l_Command(
"CPS,");
3718 std::string l_RdStr;
3719 if (eAdvancedMode::kNone == m_AdvancedMode)
3721 l_Command += std::to_string(
NPR_MAX + 1);
3722 if (!l_Write(l_Command))
3724 if (!l_ReadString(l_RdStr))
3726 rData =
static_cast<U32
>(std::stoul(l_RdStr));
3745 if (eAdvancedMode::k2 != m_AdvancedMode)
3747 if (!l_Write(
"CBT,-1"))
3767 if (eAdvancedMode::k2 != m_AdvancedMode)
3769 if (!l_Write(
"CBT,0"))
3791 std::string l_Command(
"CBT,");
3792 U8 l_PaProbeNumber(0);
3794 if (eAdvancedMode::k2 != m_AdvancedMode)
3798 if (rTarget <= m_NbProbesInPA)
3800 l_Command += std::to_string(rTarget);
3801 if (!l_Write(l_Command))
3824 U8 l_PaProbeNumber(0);
3828 if ((0 == rNbMeasurements) || (rNbMeasurements < m_NbProbesInPA) || (
NPR_MAX < rNbMeasurements))
3830 if (eAdvancedMode::kNone == m_AdvancedMode)
3832 if (eDataBlockMode::kAllDecimal != m_DataBlockMode)
3834 if (!l_Write(
"CBT"))
3837 rData.resize(rNbMeasurements);
3838 std::string l_RdStr;
3839 for (
size_t i = 0; i < rData.size(); i++)
3841 if (!l_ReadString(l_RdStr))
3843 rData[i] =
static_cast<I32
>(std::stoul(l_RdStr));
3846 if(!l_ReadEndTransmissionBlockChar())
3867 std::string l_Command(
"CBT,");
3868 U8 l_PaProbeNumber(0);
3869 std::string l_RdStr;
3871 if (eAdvancedMode::kNone == m_AdvancedMode)
3875 if ((rProbeSel == 0) || (rProbeSel > m_NbProbesInPA))
3877 l_Command += std::to_string(rProbeSel);
3878 if (!l_Write(l_Command))
3880 if (!l_ReadString(l_RdStr))
3882 rData =
static_cast<I32
>(std::stoul(l_RdStr));
3905 std::string l_Command(
"CET,");
3907 if (eAdvancedMode::k2 != m_AdvancedMode)
3909 l_Command += std::to_string(rData);
3910 if (!l_Write(l_Command))
3932 U8 l_probeIdxCET(0);
3933 I32 l_Correction(0);
3940 if (l_probeIdxCET != rProbeSel)
3963 std::string l_RdStr;
3964 if (eAdvancedMode::kNone == m_AdvancedMode)
3966 if (!l_Write(
"CET"))
3968 if (!l_ReadString(l_RdStr))
3970 rProbeIdxCET =
static_cast<U8
>(std::stoul(l_RdStr));
3990 std::ostringstream l_StringFormated;
3991 std::string l_Command(
"CDP,");
3993 if (eAdvancedMode::k2 != m_AdvancedMode)
3996 if(rDayDD < 1 || rDayDD >31)
3998 l_StringFormated << std::setw(2) << std::setfill(
'0') << std::to_string(rDayDD);
4000 if (rMonthMM < 1 || rMonthMM > 12)
4002 l_StringFormated << std::setw(2) << std::setfill(
'0') << std::to_string(rMonthMM);
4006 l_StringFormated << std::setw(2) << std::setfill(
'0') << std::to_string(rYearYY);
4007 l_Command += l_StringFormated.str();
4009 if (!l_Write(l_Command))
4035 std::string l_Command(
"CDP,");
4036 std::string l_StrDate(
"");
4038 if (eAdvancedMode::k2 != m_AdvancedMode)
4041 if (!l_DateTimeToDateStrUtc(rUtcDate, l_StrDate))
4043 l_Command += l_StrDate;
4045 if (!l_Write(l_Command))
4070 if (eAdvancedMode::kNone == m_AdvancedMode)
4072 if (!l_Write(
"CDP"))
4074 if (!l_ReadString(rStrDate))
4077 if (!l_DateStrToDateTimeUtc(rStrDate, rUtcDate))
4100 std::ostringstream l_StringFormated;
4101 std::string l_Command(
"CDU,");
4103 if (eAdvancedMode::k2 != m_AdvancedMode)
4106 if (rDayDD < 1 || rDayDD >31)
4108 l_StringFormated << std::setw(2) << std::setfill(
'0') << std::to_string(rDayDD);
4111 if (rMonthMM < 1 || rMonthMM > 12)
4113 l_StringFormated << std::setw(2) << std::setfill(
'0') << std::to_string(rMonthMM);
4118 l_StringFormated << std::setw(2) << std::setfill(
'0') << std::to_string(rYearYY);
4119 l_Command += l_StringFormated.str();
4121 if (!l_Write(l_Command))
4147 std::string l_Command(
"CDU,");
4148 std::string l_StrDate(
"");
4150 if (eAdvancedMode::k2 != m_AdvancedMode)
4153 if (!l_DateTimeToDateStrUtc(rUtcDate, l_StrDate))
4155 l_Command += l_StrDate;
4157 if (!l_Write(l_Command))
4182 if (eAdvancedMode::kNone == m_AdvancedMode)
4184 if (!l_Write(
"CDU"))
4186 if (!l_ReadString(rStrDate))
4189 if (!l_DateStrToDateTimeUtc(rStrDate, rUtcDate))