int main(void) { int aux; initConversion(); initSerial(); initIsr(); while (1) { asm(nop); asm(nop); asm(nop); asm(nop); asm(nop); asm(nop); } return 0; }
static long init_record(struct cvtRecord *pcvt, int pass) { void *sub; if (pass == 0) { /* set new conversion parameters equal to to configured ones */ pcvt->nmet = pcvt->meth; strncpy(pcvt->nbdi, pcvt->bdir, BDIR_SIZE); strncpy(pcvt->ntdi, pcvt->tdir, TDIR_SIZE); strncpy(pcvt->nspe, pcvt->spec, SPEC_SIZE); return 0; } /* initialize input links */ if (pcvt->inpx.type == CONSTANT) { recGblInitConstantLink(&pcvt->inpx, DBF_DOUBLE, &pcvt->x); } if (pcvt->inpy.type == CONSTANT) { recGblInitConstantLink(&pcvt->inpy, DBF_DOUBLE, &pcvt->y); } if (pcvt->iaml.type == CONSTANT) { recGblInitConstantLink(&pcvt->iaml, DBF_UCHAR, &pcvt->iaom); } if (pcvt->iavl.type == CONSTANT) { recGblInitConstantLink(&pcvt->iavl, DBF_DOUBLE, &pcvt->iaov); } /* try to initialize conversion as specified */ if (initConversion(pcvt->name, pcvt->nbdi, pcvt->ntdi, pcvt->nmet, pcvt->nspe, &sub)) { pcvt->ista = menuCvtInitStateError; pcvt->drty |= DRTY_ISTA; return -1; } pcvt->csub = sub; return 0; }
static void initConversionTask(void* parm) { int qstatus; void *sub; struct reinitMsg msg; struct cvtRecord *pcvt; long status; while (TRUE) { qstatus = epicsMessageQueueReceive( initConversionQ, (void*)&msg, REINIT_MSG_SIZE); if (qstatus == -1) { nerrmsg("", "msgQReceive failed"); continue; } pcvt = msg.record; status = initConversion(pcvt->name, msg.bdir, msg.tdir, msg.meth, msg.spec, &sub); dbScanLock((struct dbCommon *)pcvt); if (status && pcvt->ista != menuCvtInitStateAgain) { if (pcvt->ista != menuCvtInitStateError) { pcvt->ista = menuCvtInitStateError; pcvt->drty |= DRTY_ISTA; } } else { switch (pcvt->ista) { case menuCvtInitStateInProgress: case menuCvtInitStateError: pcvt->ista = menuCvtInitStateDone; pcvt->drty |= DRTY_ISTA; /* free old csub if it was a csm_function... */ if (pcvt->meth == menuCvtMethod1DTable || pcvt->meth == menuCvtMethod1DTableInverted || pcvt->meth == menuCvtMethod2DTable) { csm_function *csub = (csm_function *)pcvt->csub; if (csub) { /* check because it might have never been created */ csm_free(csub); } } /* ...and write the new values back into the record */ pcvt->meth = msg.meth; pcvt->drty |= DRTY_METH; strncpy(pcvt->spec, msg.spec, SPEC_SIZE); pcvt->drty |= DRTY_SPEC; strncpy(pcvt->bdir, msg.bdir, BDIR_SIZE); pcvt->drty |= DRTY_BDIR; strncpy(pcvt->tdir, msg.tdir, TDIR_SIZE); pcvt->drty |= DRTY_TDIR; pcvt->csub = sub; break; case menuCvtInitStateAgain: if (!status && sub && ( pcvt->meth == menuCvtMethod1DTable || pcvt->meth == menuCvtMethod1DTableInverted || pcvt->meth == menuCvtMethod2DTable)) { csm_free((csm_function *)sub); } /* even if initConversion(...) above failed, we go here */ if (reinitConversion(pcvt)) { /* this is fatal */ pcvt->ista = menuCvtInitStateError; pcvt->drty |= DRTY_ISTA; pcvt->pact = TRUE; break; } pcvt->ista = menuCvtInitStateInProgress; pcvt->drty |= DRTY_ISTA; break; case menuCvtInitStateDone: errmsg("internal error: unexpected " "value <menuCvtInitStateDone> in field ISTA"); pcvt->pact = TRUE; break; default: errmsg("internal error: ISTA is not a member of menuCvtMethod"); pcvt->pact = TRUE; } } checkAlarms(pcvt); monitor(pcvt); dbScanUnlock((struct dbCommon *)pcvt); } }