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