forked from epics_driver_modules/motorBase
Hideos support removed.
This commit is contained in:
@@ -1,148 +0,0 @@
|
||||
/*
|
||||
* These routines provide a simple interface to Hideos serial I/O. They hide
|
||||
* the details of Hideos. They are intended for use by applications which do
|
||||
* simple synchronous reads and writes, and no control operations like setting
|
||||
* baud rates, etc.
|
||||
*/
|
||||
|
||||
#include "serialIO.h"
|
||||
|
||||
#ifdef DEBUG
|
||||
#define Debug(l, f, args...) {if (l <= serialIODebug) printf(f, ## args);}
|
||||
#else
|
||||
#define Debug(l, f, args...)
|
||||
#endif
|
||||
|
||||
int serialIODebug = 0;
|
||||
|
||||
|
||||
struct serialInfo *cc_serialIOInit(int card, char *taskName)
|
||||
{
|
||||
struct serialInfo *serialInfo;
|
||||
int status;
|
||||
|
||||
serialInfo = (struct serialInfo *) malloc(sizeof(struct serialInfo));
|
||||
serialInfo->bpd = new BPD;
|
||||
status = serialInfo->bpd->Bind(serialInfo->td, card, taskName);
|
||||
if (status < 0) {
|
||||
Debug(1,
|
||||
"serialIOInit: Cannot bind to remote Hideos task %s\n", taskName);
|
||||
return (NULL);
|
||||
}
|
||||
else
|
||||
Debug(1,
|
||||
"serialIOInit: Bound to remote Hideos task %s\n", taskName);
|
||||
return (serialInfo);
|
||||
}
|
||||
|
||||
int cc_serialIOSend(struct serialInfo *serialInfo, char const *buffer,
|
||||
int buffer_len, int timeout)
|
||||
{
|
||||
int status;
|
||||
IndirectStringMsg* sm = (IndirectStringMsg*)
|
||||
hideos_resources->GetMessagePool()->GetMessage(IndirectStringMsgType);
|
||||
Message* rm;
|
||||
|
||||
|
||||
if (sm->IsQueued()) {
|
||||
printf("serialIOSend: 1st message %lx already queued!!\n", (long)sm);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
sm->SetWrite(timeout);
|
||||
sm->SetBuffers((unsigned char *)buffer,buffer_len,NULL,0);
|
||||
|
||||
status = serialInfo->bpd->Send(serialInfo->td, sm);
|
||||
if (status != 0) {
|
||||
Debug(1, "serialIOSend: error sending message %s\n", buffer);
|
||||
hideos_resources->GetMessagePool()->FreeMessage(sm);
|
||||
goto done;
|
||||
}
|
||||
Debug(2, "serialIOSend: sent message %s\n", buffer);
|
||||
status = serialInfo->bpd->Receive((Message *&)rm);
|
||||
if (status != 0) {
|
||||
Debug(1, "serialIOSend: error receiving message, status=%d\n", status);
|
||||
goto done;
|
||||
}
|
||||
Debug(2, "serialIOSend: received message, status=%d\n", status);
|
||||
|
||||
hideos_resources->GetMessagePool()->FreeMessage(rm);
|
||||
|
||||
done:
|
||||
return (status);
|
||||
}
|
||||
|
||||
|
||||
int cc_serialIORecv(struct serialInfo *serialInfo, char *buffer,
|
||||
int buffer_len, int terminator, int timeout)
|
||||
{
|
||||
int status, nrec = 0;
|
||||
IndirectStringMsg* sm = (IndirectStringMsg*)
|
||||
hideos_resources->GetMessagePool()->GetMessage(IndirectStringMsgType);
|
||||
IndirectStringMsg* rm;
|
||||
|
||||
if (sm->IsQueued()) {
|
||||
printf("serialIORecv: message %lx already queued!!\n", (long)sm);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
sm->SetRead(timeout);
|
||||
if (terminator == -1)
|
||||
sm->SetComplexDelimiter((char *)NULL, (char *)NULL, 0);
|
||||
else
|
||||
sm->SetSimpleDelimiter(terminator);
|
||||
|
||||
sm->SetBuffers(NULL, 0, (unsigned char *)buffer, buffer_len);
|
||||
|
||||
status = serialInfo->bpd->Send(serialInfo->td, sm);
|
||||
if (status != 0) {
|
||||
Debug(1, "serialIORecv: error sending message, status = %d\n", status);
|
||||
hideos_resources->GetMessagePool()->FreeMessage(sm);
|
||||
goto doneRecv;
|
||||
}
|
||||
Debug(2, "serialIORecv: sent message status = %d\n", status);
|
||||
status = serialInfo->bpd->Receive((Message *&)rm);
|
||||
if (status < 0) {
|
||||
Debug(1,"serialIORecv: error receiving message, status = %d\n",
|
||||
status);
|
||||
goto doneRecv;
|
||||
}
|
||||
|
||||
nrec = sm->GetDestSize();
|
||||
if (sm->return_code != 0) {
|
||||
Debug(1,"serialIORecv: error, return code = %ld\n", sm->return_code);
|
||||
}
|
||||
Debug(2,"serialIORecv: Received %d bytes\n", nrec);
|
||||
/* Append a NULL byte to the response if there is room */
|
||||
if (nrec < buffer_len) buffer[nrec] = '\0';
|
||||
|
||||
Debug(2,"serialIORecv: Received message = %s\n", buffer);
|
||||
|
||||
hideos_resources->GetMessagePool()->FreeMessage(rm);
|
||||
|
||||
doneRecv:
|
||||
return (nrec);
|
||||
}
|
||||
|
||||
|
||||
extern "C"
|
||||
{
|
||||
struct serialInfo *serialIOInit(int card, char *taskName)
|
||||
{
|
||||
return (cc_serialIOInit(card, taskName));
|
||||
}
|
||||
|
||||
int serialIOSend(struct serialInfo *serialInfo, char const *buffer,
|
||||
int buffer_len, int timeout)
|
||||
{
|
||||
return (cc_serialIOSend(serialInfo, buffer, buffer_len, timeout));
|
||||
}
|
||||
|
||||
int serialIORecv(struct serialInfo *serialInfo, char *buffer, int buffer_len,
|
||||
int terminator, int timeout)
|
||||
{
|
||||
return (cc_serialIORecv(serialInfo, buffer, buffer_len,
|
||||
terminator, timeout));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user