static long readData (dbCommon *record, format_t *format)
{
    aiRecord *ai = (aiRecord *) record;

    switch (format->type)
    {
        case DBF_DOUBLE:
        {
            double val;
            if (streamScanf (record, format, &val)) return ERROR;
            if (ai->aslo != 0.0) val *= ai->aslo;
            val += ai->aoff;
            if (!INIT_RUN && ai->smoo != 0.0)
            {
                val = ai->val * ai->smoo + val * (1.0 - ai->smoo);
            }
            ai->val = val;
            return DO_NOT_CONVERT;
        }
        case DBF_LONG:
        {
            long rval;
            if (streamScanf (record, format, &rval)) return ERROR;
            ai->rval = rval;
            return OK;
        }
    }
    return ERROR;
}
예제 #2
0
static long readData (dbCommon *record, format_t *format)
{
    scalcoutRecord *sco = (scalcoutRecord *) record;

    switch (format->type)
    {
        case DBF_DOUBLE:
        {
            return streamScanf (record, format, &sco->val);
        }
        case DBF_LONG:
        case DBF_ENUM:
        {
            long lval;

            if (streamScanf (record, format, &lval)) return ERROR;
            sco->val = lval;
            return OK;
        }
        case DBF_STRING:
        {
            return (streamScanfN (record, format,
                sco->sval, sizeof(sco->val)));
        }
    }
    return ERROR;
}
예제 #3
0
static long readData (dbCommon *record, format_t *format)
{
    mbboRecord *mbbo = (mbboRecord *) record;
    long val;
    int i;

    switch (format->type)
    {
        case DBF_LONG:
        {
            if (streamScanf (record, format, &val)) return ERROR;
            /* read VAL or RBV? Look if any value is defined */
            if (mbbo->sdef) for (i=0; i<16; i++)
            {
                if ((&mbbo->zrvl)[i])
                {
                    if (mbbo->mask) val &= mbbo->mask;
                    mbbo->rbv = val;
                    if (INIT_RUN) mbbo->rval = val;
                    return OK;
                }
            }
            mbbo->val = (short)val;
            return DO_NOT_CONVERT;
        }
        case DBF_ENUM:
        {
            if (streamScanf (record, format, &val)) return ERROR;
            mbbo->val = (short)val;
            return DO_NOT_CONVERT;
        }
        case DBF_STRING:
        {
            char buffer[sizeof(mbbo->zrst)];
            if (streamScanfN (record, format, buffer, sizeof(buffer)))
                return ERROR;
            for (val = 0; val < 16; val++)
            {
                if (strcmp ((&mbbo->zrst)[val], buffer) == 0)
                {
                    mbbo->val = (short)val;
                    return DO_NOT_CONVERT;
                }
            }
        }
    }
    return ERROR;
}
static long readData(dbCommon *record, format_t *format)
{
    calcoutRecord *co = (calcoutRecord *)record;
    unsigned short monitor_mask;

    switch (format->type)
    {
        case DBF_DOUBLE:
        {
            if (streamScanf(record, format, &co->val) == ERROR) return ERROR;
            break;
        }
        case DBF_ULONG:
        case DBF_LONG:
        case DBF_ENUM:
        {
            long lval;

            if (streamScanf(record, format, &lval) == ERROR) return ERROR;
            if (format->type == DBF_LONG)
                co->val = lval;
            else
                co->val = (unsigned long)lval;
            break;
        }
        default:
            return ERROR;        
    }
    if (record->pact) return OK;
    /* In @init handler, no processing, enforce monitor updates. */
    monitor_mask = recGblResetAlarms(record);

    if (!(fabs(co->mlst - co->val) <= co->mdel)) {
        monitor_mask |= DBE_VALUE;
        co->mlst = co->val;
    }
    if (!(fabs(co->mlst - co->val) <= co->adel)) {
        monitor_mask |= DBE_LOG;
        co->alst = co->val;
    }
    if (monitor_mask){
        db_post_events(record, &co->val, monitor_mask);
    }
    
    return OK;
}
static long readData(dbCommon *record, format_t *format)
{
    biRecord *bi = (biRecord *)record;
    unsigned long val;

    switch (format->type)
    {
        case DBF_ULONG:
        case DBF_LONG:
        {
            if (streamScanf(record, format, &val) == ERROR) return ERROR;
            if (bi->mask) val &= bi->mask;
            bi->rval = val;
            return OK;
        }
        case DBF_ENUM:
        {
            if (streamScanf(record, format, &val) == ERROR) return ERROR;
            bi->val = (val != 0);
            return DO_NOT_CONVERT;
        }
        case DBF_STRING:
        {
            char buffer[sizeof(bi->znam)];
            if (streamScanfN(record, format, buffer, sizeof(buffer)) == ERROR)
                return ERROR;
            if (strcmp (bi->znam, buffer) == 0)
            {
                bi->val = 0;
                return DO_NOT_CONVERT;
            }
            if (strcmp (bi->onam, buffer) == 0)
            {
                bi->val = 1;
                return DO_NOT_CONVERT;
            }
        }
    }
    return ERROR;
}
static long readData (dbCommon *record, format_t *format)
{
    calcoutRecord *co = (calcoutRecord *) record;

    switch (format->type)
    {
        case DBF_DOUBLE:
        {
            return streamScanf (record, format, &co->val);
        }
        case DBF_LONG:
        case DBF_ENUM:
        {
            long lval;

            if (streamScanf (record, format, &lval)) return ERROR;
            co->val = lval;
            return OK;
        }
    }
    return ERROR;
}
예제 #7
0
static long readData (dbCommon *record, format_t *format)
{
    longoutRecord *lo = (longoutRecord *) record;

    switch (format->type)
    {
        case DBF_ULONG:
        case DBF_LONG:
        case DBF_ENUM:
        {       
            long val;
            if (streamScanf (record, format, &val)) return ERROR;
            lo->val = val;
            return OK;
        }
    }
    return ERROR;
}
예제 #8
0
static long readData (dbCommon *record, format_t *format)
{
    mbbiDirectRecord *mbbiD = (mbbiDirectRecord *) record;
    unsigned long val;

    if (format->type == DBF_ULONG || format->type == DBF_LONG)
    {
        if (streamScanf (record, format, &val)) return ERROR;
        if (mbbiD->mask)
        {
            val &= mbbiD->mask;
            mbbiD->rval = val;
            return OK;
        }
        else
        {
            /* No MASK, (NOBT = 0): use VAL field */
            mbbiD->val = (unsigned short)val;
            return DO_NOT_CONVERT;
        }
    }
    return ERROR;
}
static long readData (dbCommon *record, format_t *format)
{
    waveformRecord *wf = (waveformRecord *) record;
    double dval;
    long lval;

    wf->rarm = 0;
    for (wf->nord = 0; wf->nord < wf->nelm; wf->nord++)
    {
        switch (format->type)
        {
            case DBF_DOUBLE:
            {
                if (streamScanf (record, format, &dval) != OK)
                {
                    return wf->nord ? OK : ERROR;
                }
                switch (wf->ftvl)
                {
                    case DBF_DOUBLE:
                        ((epicsFloat64 *)wf->bptr)[wf->nord] = (epicsFloat64)dval;
                        break;
                    case DBF_FLOAT:
                        ((epicsFloat32 *)wf->bptr)[wf->nord] = (epicsFloat32)dval;
                        break;
                    default:
                        errlogSevPrintf (errlogFatal,
                            "readData %s: can't convert from double to %s\n",
                            record->name, pamapdbfType[wf->ftvl].strvalue);
                        return ERROR;
                }
                break;
            }
            case DBF_LONG:
            case DBF_ENUM:
            {
                if (streamScanf (record, format, &lval) != OK)
                {
                    return wf->nord ? OK : ERROR;
                }
                switch (wf->ftvl)
                {
                    case DBF_DOUBLE:
                        ((epicsFloat64 *)wf->bptr)[wf->nord] = (epicsFloat64)lval;
                        break;
                    case DBF_FLOAT:
                        ((epicsFloat32 *)wf->bptr)[wf->nord] = (epicsFloat32)lval;
                        break;
                    case DBF_LONG:
                    case DBF_ULONG:
                        ((epicsInt32 *)wf->bptr)[wf->nord] = (epicsInt32)lval;
                        break;
                    case DBF_SHORT:
                    case DBF_USHORT:
                    case DBF_ENUM:
                        ((epicsInt16 *)wf->bptr)[wf->nord] = (epicsInt16)lval;
                        break;
                    case DBF_CHAR:
                    case DBF_UCHAR:
                        ((epicsInt8 *)wf->bptr)[wf->nord] = (epicsInt8)lval;
                        break;
                    default:
                        errlogSevPrintf (errlogFatal,
                            "readData %s: can't convert from long to %s\n",
                            record->name, pamapdbfType[wf->ftvl].strvalue);
                        return ERROR;
                }
                break;
            }
            case DBF_STRING:
            {
                switch (wf->ftvl)
                {
                    case DBF_STRING:
                        if (streamScanfN (record, format,
                            (char *)wf->bptr + wf->nord * MAX_STRING_SIZE,
                            MAX_STRING_SIZE) != OK)
                        {
                            return wf->nord ? OK : ERROR;
                        }
                        break;
                    case DBF_CHAR:
                    case DBF_UCHAR:
                        memset (wf->bptr, 0, wf->nelm);
                        wf->nord = 0;
                        if (streamScanfN (record, format,
                            (char *)wf->bptr, wf->nelm) != OK)
                        {
                            return ERROR;
                        }
                        ((char*)wf->bptr)[wf->nelm] = 0;
                        for (lval = wf->nelm;
                            lval >= 0 && ((char*)wf->bptr)[lval] == 0;
                            lval--);
                        wf->nord = lval+1;
                        return OK;
                    default:
                        errlogSevPrintf (errlogFatal,
                            "readData %s: can't convert from string to %s\n",
                            record->name, pamapdbfType[wf->ftvl].strvalue);
                        return ERROR;
                }
                break;
            }
            default:
            {
                errlogSevPrintf (errlogMajor,
                    "readData %s: can't convert from %s to %s\n",
                    record->name, pamapdbfType[format->type].strvalue,
                    pamapdbfType[wf->ftvl].strvalue);
                return ERROR;
            }
        }
    }
    return OK;
}