static void dbRecordField(char *name,char *value) { DBENTRY *pdbentry; tempListNode *ptempListNode; long status; if(duplicate) return; ptempListNode = (tempListNode *)ellFirst(&tempList); pdbentry = ptempListNode->item; status = dbFindField(pdbentry,name); if(status) { epicsPrintf("Record \"%s\" does not have a field \"%s\"\n", dbGetRecordName(pdbentry), name); yyerror(NULL); return; } dbTranslateEscape(value, value); /* yuck: in-place, but safe */ status = dbPutString(pdbentry,value); if(status) { epicsPrintf("Can't set \"%s.%s\" to \"%s\"\n", dbGetRecordName(pdbentry), name, value); yyerror(NULL); return; } }
epicsShareFunc int asynOctetWrite(const char *entry, const char *output) { asynStatus status; asynUser *pasynUser; asynIOPvt *pPvt; size_t nout = 0; size_t len; pPvt = asynFindEntry(entry); if (!pPvt) { printf("Entry not found\n"); return(-1); } pasynUser = pPvt->pasynUser; if (strlen(output) > (size_t)pPvt->write_buffer_len) { asynPrint(pasynUser, ASYN_TRACE_ERROR, "Error writing, buffer too small\n"); return(-1); } len = dbTranslateEscape(pPvt->write_buffer, output); status = pasynOctetSyncIO->write(pasynUser, pPvt->write_buffer, len, pPvt->timeout,&nout); if (status!=asynSuccess) { asynPrint(pasynUser, ASYN_TRACE_ERROR, "Error in asynOctetWrite, nout=%lu, len=%lu error %s\n", (unsigned long)nout, (unsigned long)len, pasynUser->errorMessage); return(-1); } return (int)nout; }
epicsShareFunc int asynOctetWriteRead(const char *entry, const char *output, int nread) { asynStatus status; asynUser *pasynUser; asynIOPvt *pPvt; size_t nout = 0; size_t ninp = 0; size_t len; int eomReason; pPvt = asynFindEntry(entry); if (!pPvt) { printf("Entry not found\n"); return(-1); } pasynUser = pPvt->pasynUser; if (strlen(output) > (size_t)pPvt->write_buffer_len) { asynPrint(pasynUser, ASYN_TRACE_ERROR, "Error writing, buffer too small\n"); return(-1); } len = dbTranslateEscape(pPvt->write_buffer, output); if (nread == 0) nread = pPvt->read_buffer_len; if (nread > pPvt->read_buffer_len) nread = pPvt->read_buffer_len; status = pasynOctetSyncIO->writeRead(pasynUser, pPvt->write_buffer, len, pPvt->read_buffer, (size_t)nread, pPvt->timeout, &nout,&ninp,&eomReason); if (status!=asynSuccess) { asynPrint(pasynUser, ASYN_TRACE_ERROR, "Error in WriteRead, nout %lu ninp=%lu error %s\n", (unsigned long)nout, (unsigned long)ninp, pasynUser->errorMessage); return(-1); } fprintf(stdout,"eomReason 0x%x\n",eomReason); epicsStrPrintEscaped(stdout, pPvt->read_buffer, ninp); fprintf(stdout,"\n"); return (int)ninp; }
static void callbackSiWriteRead(asynUser *pasynUser) { devPvt *pdevPvt = (devPvt *)pasynUser->userPvt; stringinRecord *precord = (stringinRecord *)pdevPvt->precord; asynStatus status; size_t nBytesRead; long dbStatus; char raw[MAX_STRING_SIZE]; char translate[MAX_STRING_SIZE]; size_t len = sizeof(precord->val); status = pasynManager->unblockProcessCallback(pasynUser,pdevPvt->blockAll); if(status!=asynSuccess) { asynPrint(pasynUser,ASYN_TRACE_ERROR, "%s pasynManager:unblockProcessCallback failed %s\n", precord->name,pasynUser->errorMessage); recGblSetSevr(precord,READ_ALARM,INVALID_ALARM); goto done; } switch(pdevPvt->state) { case stateIdle: dbStatus = dbGet(&pdevPvt->dbAddr,DBR_STRING,raw,0,0,0); if(dbStatus) { asynPrint(pasynUser,ASYN_TRACE_ERROR, "%s dbGet failed\n",precord->name); recGblSetSevr(precord,READ_ALARM,INVALID_ALARM); goto done; } dbTranslateEscape(translate,raw); status = writeIt(pasynUser,translate,strlen(translate)); if(status!=asynSuccess) { asynPrint(pasynUser,ASYN_TRACE_ERROR, "%s asynOctet:write failed %s\n", precord->name,pasynUser->errorMessage); recGblSetSevr(precord,READ_ALARM,INVALID_ALARM); goto done; } pdevPvt->state = stateWrite; status = queueIt(pdevPvt); if(status!=asynSuccess) goto done; return; case stateWrite: status = readIt(pasynUser,precord->val,len,&nBytesRead); if(status!=asynSuccess) { asynPrint(pasynUser,ASYN_TRACE_ERROR, "%s asynOctet:write failed %s\n", precord->name,pasynUser->errorMessage); recGblSetSevr(precord,READ_ALARM,INVALID_ALARM); goto done; } if(status==asynSuccess) { if(nBytesRead==len) nBytesRead--; precord->val[nBytesRead] = 0; } pdevPvt->state = stateIdle; break; /*all done*/ } done: pdevPvt->state = stateIdle; callbackRequestProcessCallback( &pdevPvt->processCallback,precord->prio,precord); }