Example #1
0
static asynStatus readUInt32(void* ppvt,asynUser* pasynUser,epicsUInt32* value,epicsUInt32 mask)
{
    asynStatus sts;
    Port* pport = (Port*)ppvt;
    Inst* pinst = (Inst*)pasynUser->drvUser;

    asynPrint(pasynUser,ASYN_TRACE_FLOW,"drvLove::readUInt32\n");

    if( pinst->pcmd->read )
        sprintf(pport->outMsg,"%s",pinst->pcmd->read);
    else
    {
        epicsSnprintf(pasynUser->errorMessage,pasynUser->errorMessageSize,"%s error %s",pport->name,pport->pasynUser->errorMessage);
        return( asynError );
    }

    lockPort(pport,pasynUser);
    sts = executeCommand(pport,pasynUser);
    unlockPort(pport,pasynUser);

    if( ISNOTOK(sts) )
    {
        epicsSnprintf(pasynUser->errorMessage,pasynUser->errorMessageSize,"%s error %s",pport->name,pport->pasynUser->errorMessage);
        return( sts );
    }

    sts = pinst->read(pinst,(epicsInt32*)value);
    if( ISNOTOK(sts) )
    {
        epicsSnprintf(pasynUser->errorMessage,pasynUser->errorMessageSize,"%s error %s",pport->name,pport->pasynUser->errorMessage);
        return( sts );
    }

    if( ISOK(sts) )
        asynPrint(pasynUser,ASYN_TRACEIO_FILTER,"drvLove::readUInt32 readback from %s is 0x%X,mask=0x%X\n",pport->name,*value,mask);

    return( asynSuccess );
}