int GetDataPacket(const char *datapacket, char *cCommand, long &iValue) { CStdString sData; int iRet; try { iRet = GetDataPacket( datapacket, cCommand, sData); iValue = atoi( (LPCSTR)sData ); return iRet; } catch(...){ iValue = 0; return -1; } }
int GetDataPacket(const char *datapacket, char *cCommand, bool &bValue) { int iData; int iRet; try { iRet = GetDataPacket( datapacket, cCommand, iData); bValue = ( iData == 0 ) ? false : true; return iRet; } catch(...){ bValue = false; return -1; } }
int ReceiveWaveform (SinkVChan_type* sinkVChan, Waveform_type** waveform, WaveformTypes* waveformType, char** errorMsg) { #define ReceiveWaveform_Err_NoWaveform -1 #define ReceiveWaveform_Err_WrongDataType -2 #define ReceiveWaveform_Err_NotSameDataType -3 INIT_ERR DataPacket_type* dataPacket = NULL; DLDataTypes dataPacketType = 0; DLDataTypes firstDataPacketType = 0; void* dataPacketPtrToData = NULL; char* msgBuff = NULL; // init *waveform = NULL; // get first data packet and check if it is a NULL packet errChk ( GetDataPacket(sinkVChan, &dataPacket, &errorInfo.errMsg) ); if (!dataPacket) { nullChk( msgBuff = StrDup("Waveform received does not contain any data. This occurs if a NULL packet is encountered before any data packets") ); SET_ERR(ReceiveWaveform_Err_NoWaveform, msgBuff); } // check if data packet type is supported by this function dataPacketPtrToData = GetDataPacketPtrToData(dataPacket, &firstDataPacketType); dataPacketType = firstDataPacketType; // check if data packet is of waveform type switch (firstDataPacketType) { case DL_Waveform_Char: case DL_Waveform_UChar: case DL_Waveform_Short: case DL_Waveform_UShort: case DL_Waveform_Int: case DL_Waveform_UInt: case DL_Waveform_Int64: case DL_Waveform_UInt64: case DL_Waveform_SSize: case DL_Waveform_Size: case DL_Waveform_Float: case DL_Waveform_Double: break; default: nullChk( msgBuff = StrDup("Data packet received is not of a waveform type and cannot be retrieved by this function") ); SET_ERR(ReceiveWaveform_Err_WrongDataType, msgBuff); break; } errChk( CopyWaveform(waveform, *(Waveform_type**)dataPacketPtrToData, &errorInfo.errMsg) ); ReleaseDataPacket(&dataPacket); // get another data packet if any errChk ( GetDataPacket(sinkVChan, &dataPacket, &errorInfo.errMsg) ); // assemble waveform from multiple packets until a NULL packet is encountered while (dataPacket) { // get waveform data from the first non-NULL data packet dataPacketPtrToData = GetDataPacketPtrToData(dataPacket, &dataPacketType); // check if retrieved data packet is of the same type as the first packet if (firstDataPacketType != dataPacketType) { nullChk( msgBuff = StrDup("Data packets must be all of the same type") ); SET_ERR(ReceiveWaveform_Err_NotSameDataType, msgBuff); } errChk( AppendWaveform(*waveform, *(Waveform_type**)dataPacketPtrToData, &errorInfo.errMsg) ); ReleaseDataPacket(&dataPacket); // get another packet errChk ( GetDataPacket(sinkVChan, &dataPacket, &errorInfo.errMsg) ); } // check again if waveform is NULL if (!*waveform) { nullChk( msgBuff = StrDup("Waveform received does not contain any data. This occurs if a NULL packet is encountered before any data packets or the data packet doesn't have any data") ); SET_ERR(ReceiveWaveform_Err_NoWaveform, msgBuff); } // assign waveform type if (waveformType) switch (dataPacketType) { case DL_Waveform_Char: *waveformType = Waveform_Char; break; case DL_Waveform_UChar: *waveformType = Waveform_UChar; break; case DL_Waveform_Short: *waveformType = Waveform_Short; break; case DL_Waveform_UShort: *waveformType = Waveform_UShort; break; case DL_Waveform_Int: *waveformType = Waveform_Int; break; case DL_Waveform_UInt: *waveformType = Waveform_UInt; break; case DL_Waveform_Int64: *waveformType = Waveform_Int64; break; case DL_Waveform_UInt64: *waveformType = Waveform_UInt64; break; case DL_Waveform_SSize: *waveformType = Waveform_SSize; break; case DL_Waveform_Size: *waveformType = Waveform_Size; break; case DL_Waveform_Float: *waveformType = Waveform_Float; break; case DL_Waveform_Double: *waveformType = Waveform_Double; break; default: nullChk( msgBuff = StrDup(" Data packet received is not of a waveform type and cannot be retrieved by this function") ); SET_ERR(ReceiveWaveform_Err_WrongDataType, msgBuff); } return 0; Error: // cleanup OKfree(msgBuff); ReleaseDataPacket(&dataPacket); discard_Waveform_type(waveform); RETURN_ERR }