bool NTScalar::attachTimeStamp(PVTimeStamp &pvTimeStamp) const { PVStructurePtr ts = getTimeStamp(); if (ts) return pvTimeStamp.attach(ts); else return false; }
bool NTNDArray::attachDataTimeStamp(PVTimeStamp &pvTimeStamp) const { PVStructurePtr ts = getDataTimeStamp(); if (ts) return pvTimeStamp.attach(ts); else return false; }
void NTNDArrayConverter::fromTimeStamp (NDArray *src) { PVStructurePtr dest(m_array->getTimeStamp()); PVTimeStamp pvDest; pvDest.attach(dest); TimeStamp ts(src->epicsTS.secPastEpoch, src->epicsTS.nsec); pvDest.set(ts); }
void NTNDArrayConverter::toDataTimeStamp (NDArray *dest) { PVStructurePtr src(m_array->getDataTimeStamp()); PVTimeStamp pvSrc; pvSrc.attach(src); TimeStamp ts; pvSrc.get(ts); dest->timeStamp = ts.toSeconds(); }
void NTNDArrayConverter::fromDataTimeStamp (NDArray *src) { PVStructurePtr dest(m_array->getDataTimeStamp()); double seconds = floor(src->timeStamp); double nanoseconds = (src->timeStamp - seconds)*1e9; PVTimeStamp pvDest; pvDest.attach(dest); TimeStamp ts((int64_t)seconds, (int32_t)nanoseconds); pvDest.set(ts); }
void NTNDArrayConverter::toTimeStamp (NDArray *dest) { PVStructurePtr src(m_array->getTimeStamp()); if(!src.get()) return; PVTimeStamp pvSrc; pvSrc.attach(src); TimeStamp ts; pvSrc.get(ts); dest->epicsTS.secPastEpoch = ts.getSecondsPastEpoch(); dest->epicsTS.nsec = ts.getNanoseconds(); }
Status PvValue::getTimeStamp(TimeStamp &timeStamp) { if(pvGetStructure.get()==NULL) { return Status(Status::STATUSTYPE_ERROR, "no timeStamp field"); } PVTimeStamp pvTimeStamp; PVFieldPtr pvField = pvGetStructure->getSubField("timeStamp"); if(pvField.get()==NULL) { return Status(Status::STATUSTYPE_ERROR, "no timeStamp field"); } if(!pvTimeStamp.attach(pvField)) { return Status(Status::STATUSTYPE_ERROR, "no timeStamp field"); } pvTimeStamp.get(timeStamp); return Status::Ok; }
void NTNDArrayRecord::setDataTimeStamp() { // Create PVTimeStamp and TimeStamp objects // attach the dataTimeStamp field to the PVTimeStamp // TimeStamp object should get the current time // Use it to set the dataTimeStamp field #if 0 PVTimeStamp timeStamp; timeStamp.attach(pvStructure->getSubField<PVStructure>("dataTimeStamp")); TimeStamp current; current.getCurrent(); timeStamp.set(current); #else // Alternatively you can use the member objects already created // for you and do the attaching once. dataTimeStamp.getCurrent(); pvDataTimeStamp.set(dataTimeStamp); #endif }
static PyObject * _getTimeStamp(PyObject *willBeNull, PyObject *args) { PyObject *pcapsule = 0; PyObject *ptimeStamp = 0; if(!PyArg_ParseTuple(args,"OO:nttablePy", &pcapsule, &ptimeStamp)) { PyErr_SetString(PyExc_SyntaxError, "Bad argument. Expected (pvt,ptimeStamp)"); return NULL; } void *pvoid = PyCapsule_GetPointer(pcapsule,"nttablePvt"); if(pvoid==0) { PyErr_SetString(PyExc_SyntaxError, "first arg must be return from _init"); return NULL; } NTTablePvt *pvt = static_cast<NTTablePvt *>(pvoid); pvoid = PyCapsule_GetPointer(ptimeStamp,"timeStamp"); if(pvoid==0) { PyErr_SetString(PyExc_SyntaxError, "second argument is not a timeStamp capsule"); return NULL; } TimeStamp *xxx = static_cast<TimeStamp *>(pvoid); PVStructurePtr pvStructure = pvt->nttable->getTimeStamp(); //if(pvStructure!=0) { if(!pvStructure) { PVTimeStamp pvTimeStamp; pvTimeStamp.attach(pvStructure); pvTimeStamp.get(*xxx); } Py_INCREF(Py_None); return Py_None; }
void NTMultiChannel::attachTimeStamp(PVTimeStamp &pv) const { if(!pvTimeStamp) return; pv.attach(pvTimeStamp); }
static void testCopy() { TEST_COPY(PVBoolean, 1); TEST_COPY(PVByte, 12); TEST_COPY(PVShort, 128); TEST_COPY(PVInt, 128000); TEST_COPY(PVLong, 128000000); TEST_COPY(PVUByte, 12); TEST_COPY(PVUShort, 128); TEST_COPY(PVUInt, 128000); TEST_COPY(PVULong, 128000000); TEST_COPY(PVFloat, 12.8); TEST_COPY(PVDouble, 8.12); TEST_COPY(PVString, "jikes"); int32 testValue = 128; // PVStructure test PVStructurePtr pvStructure = standardPVField->scalar(pvInt, alarmTimeStampValueAlarm); pvStructure->getSubField<PVInt>("value")->put(testValue); PVTimeStamp timeStamp; timeStamp.attach(pvStructure->getSubField<PVStructure>("timeStamp")); TimeStamp current; current.getCurrent(); timeStamp.set(current); PVStructurePtr pvStructureCopy = standardPVField->scalar(pvInt, alarmTimeStampValueAlarm); pvStructureCopy->copy(*pvStructure); testOk(*pvStructure == *pvStructureCopy, "PVStructure copy"); PVStructurePtr pvStructureCopy2 = standardPVField->scalar(pvInt, alarmTimeStampValueAlarm); pvStructureCopy2->copyUnchecked(*pvStructure); testOk(*pvStructure == *pvStructureCopy2, "PVStructure copyUnchecked"); BitSet mask(pvStructure->getNumberFields()); PVStructurePtr pvStructureCopy3 = standardPVField->scalar(pvInt, alarmTimeStampValueAlarm); PVStructurePtr pvStructureCopy4 = standardPVField->scalar(pvInt, alarmTimeStampValueAlarm); pvStructureCopy3->copyUnchecked(*pvStructure, mask); testOk(*pvStructureCopy3 == *pvStructureCopy4, "PVStructure copyUnchecked w/ cleared mask"); mask.set(pvStructure->getSubField<PVInt>("value")->getFieldOffset()); pvStructureCopy3->copyUnchecked(*pvStructure, mask); pvStructureCopy4->getSubField<PVInt>("value")->put(testValue); testOk(*pvStructureCopy3 == *pvStructureCopy4, "PVStructure copyUnchecked w/ value mask only"); mask.set(pvStructure->getSubField<PVStructure>("timeStamp")->getFieldOffset()); PVStructurePtr pvStructureCopy5 = standardPVField->scalar(pvInt, alarmTimeStampValueAlarm); pvStructureCopy5->copyUnchecked(*pvStructure, mask); testOk(*pvStructure == *pvStructureCopy5, "PVStructure copyUnchecked w/ value+timeStamp mask"); UnionConstPtr _union = fieldCreate->createFieldBuilder()-> add("doubleValue", pvDouble)-> add("intValue", pvInt)-> add("timeStamp",standardField->timeStamp())-> createUnion(); PVUnionPtr pvUnion = pvDataCreate->createPVUnion(_union); PVUnionPtr pvUnion2 = pvDataCreate->createPVUnion(_union); pvUnion2->copy(*pvUnion); testOk(*pvUnion == *pvUnion2, "null PVUnion copy"); pvUnion->select<PVInt>("intValue")->put(123); pvUnion2->copy(*pvUnion); testOk(*pvUnion == *pvUnion2, "PVUnion scalar copy, to null PVUnion"); pvUnion->select("doubleValue"); pvUnion2->copy(*pvUnion); testOk(*pvUnion == *pvUnion2, "PVUnion scalar copy, to different type PVUnion"); pvUnion->select<PVStructure>("timeStamp")->copy( *pvStructure->getSubField<PVStructure>("timeStamp") ); pvUnion2->copy(*pvUnion); testOk(*pvUnion == *pvUnion2, "PVUnion PVStructure copy, to different type PVUnion"); }
void ExampleServiceRPC::request( ChannelRPCRequester::shared_pointer const & channelRPCRequester, epics::pvData::PVStructure::shared_pointer const & pvArgument) { String buffer; PVStringPtr pvfunction = pvArgument->getStringField("function"); PVStringArrayPtr pvnames = static_pointer_cast<PVStringArray> (pvArgument->getScalarArrayField("names",pvString)); PVStringArrayPtr pvvalues = static_pointer_cast<PVStringArray> (pvArgument->getScalarArrayField("values",pvString)); buffer += "pvArgument "; bool is = true; if(pvfunction==0) is = false; if(pvnames==0) is = false; if(pvvalues==0) is = false; if(is) { buffer += "is a NTNameValue\n"; } else { buffer += "is not a NTNameValue\n "; } pvArgument->toString(&buffer); printf("%s\n",buffer.c_str()); StandardFieldPtr standardField = getStandardField(); StandardPVFieldPtr standardPVField = getStandardPVField(); FieldCreatePtr fieldCreate = getFieldCreate(); PVDataCreatePtr pvDataCreate = getPVDataCreate(); size_t n = 5; FieldConstPtrArray fields; StringArray names; fields.reserve(n); names.reserve(n); names.push_back("alarm"); names.push_back("timeStamp"); names.push_back("label"); names.push_back("position"); names.push_back("alarms"); StructureConstPtr xxx = standardField->alarm(); printf("xxx %p\n",xxx.get()); fields.push_back(standardField->alarm()); fields.push_back(standardField->timeStamp()); fields.push_back(fieldCreate->createScalarArray(pvString)); fields.push_back(fieldCreate->createScalarArray(pvDouble)); fields.push_back(fieldCreate->createStructureArray(standardField->alarm())); StructureConstPtr structure = fieldCreate->createStructure(names,fields); printf("structure %p\n",structure.get()); buffer.clear(); structure->toString(&buffer); printf("structure\n%s\n",buffer.c_str()); PVStructurePtr pvStructure = pvDataCreate->createPVStructure(structure); PVTimeStamp pvTimeStamp; TimeStamp timeStamp; pvTimeStamp.attach(pvStructure->getStructureField("timeStamp")); timeStamp.getCurrent(); pvTimeStamp.set(timeStamp); StringArray label; label.reserve(2); for(int i=0; i<2; i++) { label.push_back(names[i+3]); } PVStringArrayPtr pvLabel = static_pointer_cast<PVStringArray> (pvStructure->getScalarArrayField("label",pvString)); pvLabel->put(0,2,label,0); PVDoubleArrayPtr pvPositions = static_pointer_cast<PVDoubleArray> (pvStructure->getScalarArrayField("position",pvDouble)); double positions[2]; positions[0] = 1.0; positions[1] = 2.0; pvPositions->put(0,2,positions,0); PVStructureArrayPtr pvAlarms = static_pointer_cast<PVStructureArray> (pvStructure->getStructureArrayField("alarms")); PVAlarm pvAlarm; Alarm alarm; PVStructurePtrArray palarms; size_t na=2; palarms.reserve(na); for(size_t i=0; i<na; i++) { palarms.push_back(pvDataCreate->createPVStructure(standardField->alarm())); } for(size_t i=0; i<na; i++) { pvAlarm.attach(palarms[i]); alarm.setMessage("test"); alarm.setSeverity(majorAlarm); alarm.setStatus(clientStatus); pvAlarm.set(alarm); } pvAlarms->put(0,2,palarms,0); String labels[2]; labels[0] = pvPositions->getFieldName(); labels[1] = pvAlarms->getFieldName(); pvLabel->put(0,2,labels,0); buffer.erase(); pvStructure->toString(&buffer); printf("%s\n",buffer.c_str()); channelRPCRequester->requestDone(Status::Ok,pvStructure); }