Exemplo n.º 1
0
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;
    }
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
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);
}