Exemplo n.º 1
0
int main(void)
{
	int aux;
	
	initConversion();
	initSerial();
	initIsr();
	
	while (1)
	{
		asm(nop);
		asm(nop);
		asm(nop);
		asm(nop);
		asm(nop);
		asm(nop);
	}

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