static long read_bi(biRecord *pbi) { F3RP61_SEQ_DPVT *dpvt = (F3RP61_SEQ_DPVT *) pbi->dpvt; MCMD_STRUCT *pmcmdStruct = &dpvt->mcmdStruct; MCMD_RESPONSE *pmcmdResponse; if (pbi->pact) { pmcmdResponse = &pmcmdStruct->mcmdResponse; if (dpvt->ret < 0) { errlogPrintf("devBiF3RP61Seq: read_bi failed for %s\n", pbi->name); return (-1); } if (pmcmdResponse->errorCode) { errlogPrintf("devBiF3RP61Seq: errorCode %d returned for %s\n", pmcmdResponse->errorCode, pbi->name); return (-1); } pbi->rval = (unsigned long) pmcmdResponse->dataBuff.wData[0]; pbi->udf=FALSE; } else { if (f3rp61Seq_queueRequest(dpvt) < 0) { errlogPrintf("devBiF3RP61Seq: f3rp61Seq_queueRequest failed for %s\n", pbi->name); return (-1); } pbi->pact = 1; } return(0); }
static long write_bo(boRecord *pbo) { F3RP61_SEQ_DPVT *dpvt = (F3RP61_SEQ_DPVT *) pbo->dpvt; MCMD_STRUCT *pmcmdStruct = &dpvt->mcmdStruct; MCMD_REQUEST *pmcmdRequest = &pmcmdStruct->mcmdRequest; MCMD_RESPONSE *pmcmdResponse; M3_WRITE_SEQDEV *pM3WriteSeqdev; if (pbo->pact) { pmcmdResponse = &pmcmdStruct->mcmdResponse; /* printf("devBoF3RP61Seq: callback for %s\n", pbo->name); */ if (dpvt->ret < 0) { errlogPrintf("devBoF3RP61Seq: write_bo failed for %s\n", pbo->name); return (-1); } if (pmcmdResponse->errorCode) { errlogPrintf("devBoF3RP61Seq: errorCode %d returned for %s\n", pmcmdResponse->errorCode, pbo->name); return (-1); } pbo->udf=FALSE; } else { pM3WriteSeqdev = (M3_WRITE_SEQDEV *) &pmcmdRequest->dataBuff.bData[0]; pM3WriteSeqdev->dataBuff.wData[0] = (unsigned short) pbo->rval; if (f3rp61Seq_queueRequest(dpvt) < 0) { errlogPrintf("devBoF3RP61Seq: f3rp61Seq_queueRequest failed for %s\n", pbo->name); return (-1); } /* printf("devBoF3RP61Seq: request queued for %s\n", pbo->name); */ pbo->pact = 1; } return (0); }
/* Function is called when there was a request to process a record. * When called, it sends the value from the VAL field to the driver * and sets PACT field back to TRUE. * */ static long write_mbbo(mbboRecord *pmbbo) { F3RP61_SEQ_DPVT *dpvt = (F3RP61_SEQ_DPVT *) pmbbo->dpvt; MCMD_STRUCT *pmcmdStruct = &dpvt->mcmdStruct; MCMD_REQUEST *pmcmdRequest = &pmcmdStruct->mcmdRequest; MCMD_RESPONSE *pmcmdResponse; M3_WRITE_SEQDEV *pM3WriteSeqdev; if (pmbbo->pact) { /* Second call (PACT is TRUE) */ pmcmdResponse = &pmcmdStruct->mcmdResponse; if (dpvt->ret < 0) { errlogPrintf("devMbboF3RP61Seq: write_mbbo failed for %s\n", pmbbo->name); return (-1); } if (pmcmdResponse->errorCode) { errlogPrintf("devMbboF3RP61Seq: errorCode %d returned for %s\n", pmcmdResponse->errorCode, pmbbo->name); return (-1); } pmbbo->udf=FALSE; } else { /* First call (PACT is still FALSE) */ pM3WriteSeqdev = (M3_WRITE_SEQDEV *) &pmcmdRequest->dataBuff.bData[0]; pM3WriteSeqdev->dataBuff.wData[0] = (unsigned short) pmbbo->rval; if (f3rp61Seq_queueRequest(dpvt) < 0) { errlogPrintf("devMbboF3RP61Seq: f3rp61Seq_queueRequest failed for %s\n", pmbbo->name); return (-1); } pmbbo->pact = 1; } return(0); }
static long write_longout(longoutRecord *plongout) { F3RP61_SEQ_DPVT *dpvt = (F3RP61_SEQ_DPVT *) plongout->dpvt; MCMD_STRUCT *pmcmdStruct = &dpvt->mcmdStruct; MCMD_REQUEST *pmcmdRequest = &pmcmdStruct->mcmdRequest; MCMD_RESPONSE *pmcmdResponse; M3_WRITE_SEQDEV *pM3WriteSeqdev; unsigned short i, dataBCD = 0; /* For storing the value decoded from binary-coded-decimal format*/ long data_temp; /* Used when decoding from BCD value*/ short BCD = dpvt->BCD; if (plongout->pact) { pmcmdResponse = &pmcmdStruct->mcmdResponse; if (dpvt->ret < 0) { errlogPrintf("devLoF3RP61Seq: write_longout failed for %s\n", plongout->name); return (-1); } if (pmcmdResponse->errorCode) { errlogPrintf("devLoF3RP61Seq: errorCode %d returned for %s\n", pmcmdResponse->errorCode, plongout->name); return (-1); } plongout->udf=FALSE; } else { /* Get BCD format in case of 'B' option*/ if(BCD) { i = 0; data_temp = (long) plongout->val; /* Check data range */ if (data_temp > 9999) { data_temp = 9999; recGblSetSevr(plongout,HW_LIMIT_ALARM,INVALID_ALARM); } else if (data_temp < 0) { data_temp = 0; recGblSetSevr(plongout,HW_LIMIT_ALARM,INVALID_ALARM); } while(data_temp > 0) { dataBCD = dataBCD | (((unsigned long) (data_temp % 10)) << (i*4)); data_temp /= 10; i++; } } pM3WriteSeqdev = (M3_WRITE_SEQDEV *) &pmcmdRequest->dataBuff.bData[0]; if(BCD) { pM3WriteSeqdev->dataBuff.wData[0] = dataBCD; } else { pM3WriteSeqdev->dataBuff.wData[0] = (unsigned short) plongout->val; } if (f3rp61Seq_queueRequest(dpvt) < 0) { errlogPrintf("devLoF3RP61Seq: f3rp61Seq_queueRequest failed for %s\n", plongout->name); return (-1); } plongout->pact = 1; } return(0); }