Exemple #1
0
fs_value fn_cast_intl(fs_query *q, fs_value v, fs_rid dt)
{
    if (dt == fs_c.xsd_double || dt == fs_c.xsd_float) {
	v = cast_double(v);
    } else if (dt == fs_c.xsd_integer || dt == fs_c.xsd_int) {
	v = cast_integer(v);
    } else if (dt == fs_c.xsd_decimal) {
	v = cast_decimal(v);
    } else if (dt == fs_c.xsd_string) {
	v = fs_value_fill_lexical(q, v);
    } else if (dt == fs_c.xsd_datetime) {
	v = cast_datetime(q, v);
    } else if (dt == fs_c.xsd_boolean) {
        v = cast_boolean(v);
    }
    v.attr = dt;

    return v;
}
Exemple #2
0
void ecAsyn::on_pdo_message(PDO_MESSAGE * pdo, int size)
{
    lock();
    char * meta = pdo->buffer + pdo->size + SLAVE_METADATA_CNT * devid;
    assert(meta + 1 - pdo->buffer < size);
    epicsInt32 slave_info = meta[0];
    epicsInt32 al_state = meta[1];
    epicsInt32 error_flag = meta[2];
    epicsInt32 disable = pdo->wc_state != EC_WC_COMPLETE
        || al_state != EC_AL_STATE_OP
        || slave_info != 0;
    asynStatus paramStatus = asynSuccess;
    if (slave_info != 0)
    {
        paramStatus = asynDisconnected;
    }
    // perhaps set paramStatus to
    // asynDisabled if pdo->wc_state != EC_WC_COMPLETE
    setIntegerParam(P_SLAVEINFO, slave_info);
    setIntegerParam(P_AL_STATE, al_state);
    setParamStatus(P_AL_STATE, paramStatus);
    setIntegerParam(P_ERROR_FLAG, error_flag);
    setParamStatus(P_ERROR_FLAG, paramStatus);
    setIntegerParam(P_DISABLE, disable);
    setParamStatus(P_DISABLE, paramStatus);

    for(ELLNODE * node = ellFirst(&device->pdo_entry_mappings); node; node = ellNext(node))
    {
        EC_PDO_ENTRY_MAPPING * mapping = (EC_PDO_ENTRY_MAPPING *)node;
        int mpdoe_param = mapping->pdo_entry->parameter;
        if (mapping->pdo_entry->datatype[0] == 'F')
        {
            double val = cast_double(mapping, pdo->buffer, 0);
            if (disable)
            {
                setDoubleParam(mpdoe_param, MINFLOAT);
            }
            else
            {
                setDoubleParam(mpdoe_param, val);
            }
            setParamStatus(mpdoe_param, paramStatus);
        }
        else
        {
	        int32_t val = cast_int32(mapping, pdo->buffer, 0);
	        // can't make SDIS work with I/O intr (some values get lost)
	        // so using this for now
	        if(disable)
	        {
	            setIntegerParam(mpdoe_param, INT32_MIN);
	        }
	        else
	        {
	            setIntegerParam(mpdoe_param, val);
	        }
            setParamStatus(mpdoe_param, paramStatus);
        }
    }
    callParamCallbacks();
    unlock();
}