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; }
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(); }