From b3739f6ebcd28fe2414ae7b62c6ad226368e6bda Mon Sep 17 00:00:00 2001 From: MarkRivers Date: Fri, 6 Jul 2012 19:46:39 +0000 Subject: [PATCH] Added ReadXPSSocket, which is used to read on the move socket without waiting --- motorApp/NewportSrc/asynOctetSocket.cpp | 40 +++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/motorApp/NewportSrc/asynOctetSocket.cpp b/motorApp/NewportSrc/asynOctetSocket.cpp index 7a3e0299..ee46dcca 100644 --- a/motorApp/NewportSrc/asynOctetSocket.cpp +++ b/motorApp/NewportSrc/asynOctetSocket.cpp @@ -226,6 +226,46 @@ void SendAndReceive (int SocketIndex, char buffer[], char valueRtrn[], int retur epicsMutexUnlock(psock->mutexId); } + +/***************************************************************************************/ +int ReadXPSSocket (int SocketIndex, char valueRtrn[], int returnSize, double timeout) +{ + size_t nbytesIn; + int eomReason; + socketStruct *psock; + int status; + int nread=0; + + /* Check to see if the Socket is valid! */ + if ((SocketIndex < 0) || (SocketIndex >= nextSocket)) { + printf("ReadXPSSocket: invalid SocketIndex %d\n", SocketIndex); + strcpy(valueRtrn,"-22"); + return -1; + } + psock = &socketStructs[SocketIndex]; + if (!psock->connected) { + printf("ReadXPSSocket: socket not connected %d\n", SocketIndex); + strcpy(valueRtrn,"-22"); + return -1; + } + + /* Loop until we the response contains ",EndOfAPI" or we get an error */ + while ((status==asynSuccess) && + (strcmp(valueRtrn + nread - strlen(XPS_TERMINATOR), XPS_TERMINATOR) != 0)) { + status = pasynOctetSyncIO->read(psock->pasynUser, + &valueRtrn[nread], + returnSize-nread, + timeout, + &nbytesIn, + &eomReason); + asynPrint(psock->pasynUser, ASYN_TRACEIO_DRIVER, + "SendAndReceive, received: nread=%d, returnSize-nread=%d, nbytesIn=%d\n", + nread, returnSize-nread, nbytesIn); + nread += nbytesIn; + } + return nread; +} + /***************************************************************************************/ void CloseSocket(int SocketIndex)