testNTImage support
This commit is contained in:
@@ -538,7 +538,7 @@ void formatNTURI(std::ostream& o, PVStructurePtr const & pvStruct)
|
||||
}
|
||||
|
||||
|
||||
void formatNTImage(std::ostream& o, PVStructurePtr const & pvStruct)
|
||||
void formatNTImage(std::ostream& /*o*/, PVStructurePtr const & pvStruct)
|
||||
{
|
||||
PVScalarArrayPtr value = dynamic_pointer_cast<PVScalarArray>(pvStruct->getSubField("value"));
|
||||
if (value.get() == 0)
|
||||
@@ -595,16 +595,18 @@ void formatNTImage(std::ostream& o, PVStructurePtr const & pvStruct)
|
||||
|
||||
FILE* gnuplotPipe = popen ("gnuplot -p", "w");
|
||||
|
||||
const char *prologue = getenv("EGET_GNUPLOT_PROLOGUE");
|
||||
if (prologue)
|
||||
fprintf(gnuplotPipe, "%s\n", prologue);
|
||||
|
||||
fprintf(gnuplotPipe, "set format \"\"\n");
|
||||
fprintf(gnuplotPipe, "unset key\n");
|
||||
fprintf(gnuplotPipe, "unset border\n");
|
||||
fprintf(gnuplotPipe, "unset colorbox\n");
|
||||
fprintf(gnuplotPipe, "unset xtics\n");
|
||||
fprintf(gnuplotPipe, "unset ytics\n");
|
||||
fprintf(gnuplotPipe, "set lmargin at screen 0\n");
|
||||
fprintf(gnuplotPipe, "set bmargin at screen 0\n");
|
||||
fprintf(gnuplotPipe, "set rmargin at screen 0.99999\n");
|
||||
fprintf(gnuplotPipe, "set tmargin at screen 0.99999\n");
|
||||
|
||||
fprintf(gnuplotPipe, "set size ratio 1\n");
|
||||
fprintf(gnuplotPipe, "set xrange [0:%u]\n", cols-1);
|
||||
fprintf(gnuplotPipe, "set yrange [0:%u]\n", rows-1);
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,144 @@
|
||||
#include "epicsv4Grayscale.h"
|
||||
|
||||
epics::pvData::StructureConstPtr makeVariantArrayStruc()
|
||||
{
|
||||
FieldConstPtrArray vaFields;
|
||||
StringArray vaNames;
|
||||
|
||||
vaFields.push_back(getFieldCreate()->createScalar(epics::pvData::pvInt));
|
||||
vaNames.push_back("dataType");
|
||||
|
||||
vaFields.push_back(getFieldCreate()->createScalarArray(epics::pvData::pvInt));
|
||||
vaNames.push_back("value");
|
||||
|
||||
epics::pvData::StructureConstPtr varrayStruc = getFieldCreate()->createStructure("uri:ev4:nt/2012/pwd:NTVariantArray", vaNames, vaFields);
|
||||
|
||||
return varrayStruc;
|
||||
}
|
||||
|
||||
epics::pvData::StructureConstPtr makeImageStruc()
|
||||
{
|
||||
static epics::pvData::StructureConstPtr imageStruc;
|
||||
|
||||
if (imageStruc == NULL)
|
||||
{
|
||||
FieldConstPtrArray fields;
|
||||
StringArray names;
|
||||
|
||||
// Array part
|
||||
fields.push_back(getFieldCreate()->createScalarArray(epics::pvData::pvByte));
|
||||
names.push_back("value");
|
||||
|
||||
fields.push_back(getFieldCreate()->createScalarArray(epics::pvData::pvInt));
|
||||
names.push_back("dim");
|
||||
|
||||
// Image part
|
||||
fields.push_back(getFieldCreate()->createScalar(epics::pvData::pvInt));
|
||||
names.push_back("colorMode");
|
||||
|
||||
fields.push_back(getFieldCreate()->createScalar(epics::pvData::pvInt));
|
||||
names.push_back("bayerPattern");
|
||||
|
||||
fields.push_back(getFieldCreate()->createScalar(epics::pvData::pvString));
|
||||
names.push_back("fourcc");
|
||||
|
||||
fields.push_back(getFieldCreate()->createScalarArray(epics::pvData::pvInt));
|
||||
names.push_back("offset");
|
||||
|
||||
fields.push_back(getFieldCreate()->createScalarArray(epics::pvData::pvInt));
|
||||
names.push_back("binning");
|
||||
|
||||
fields.push_back(getFieldCreate()->createScalarArray(epics::pvData::pvInt));
|
||||
names.push_back("reverse");
|
||||
|
||||
fields.push_back(getFieldCreate()->createScalarArray(epics::pvData::pvInt));
|
||||
names.push_back("fullDim");
|
||||
|
||||
|
||||
// Metadata part
|
||||
fields.push_back(getFieldCreate()->createScalar(epics::pvData::pvInt));
|
||||
names.push_back("uniqueId");
|
||||
|
||||
fields.push_back(getFieldCreate()->createScalarArray(epics::pvData::pvInt));
|
||||
names.push_back("attributeSourceTypes");
|
||||
|
||||
fields.push_back(getFieldCreate()->createScalarArray(epics::pvData::pvString));
|
||||
names.push_back("attributeSources");
|
||||
|
||||
fields.push_back(getFieldCreate()->createStructureArray(makeVariantArrayStruc()));
|
||||
names.push_back("attributes");
|
||||
|
||||
imageStruc = getFieldCreate()->createStructure("uri:ev4:nt/2012/pwd:NTImage", names, fields);
|
||||
}
|
||||
|
||||
|
||||
return imageStruc;
|
||||
}
|
||||
|
||||
|
||||
void setImageArrayValues(PVStructure::shared_pointer const & imagePV)
|
||||
{
|
||||
String id = imagePV->getStructure()->getID();
|
||||
PVByteArrayPtr pvField = static_pointer_cast<PVByteArray>(imagePV->getSubField("value"));
|
||||
|
||||
size_t dataSize = epicsv4_raw_size;
|
||||
pvField->setCapacity(dataSize);
|
||||
const int8_t *data = epicsv4_raw;
|
||||
pvField->put(0, dataSize, data, 0);
|
||||
|
||||
PVIntArrayPtr dimField = static_pointer_cast<PVIntArray>(
|
||||
imagePV->getScalarArrayField(String("dim"), pvInt));
|
||||
dimField->setCapacity(2);
|
||||
const int32_t *dim = epicsv4_raw_dim;
|
||||
dimField->put(0, 2, dim, 0);
|
||||
}
|
||||
|
||||
|
||||
void setImageImageValues(PVStructure::shared_pointer const & imagePV)
|
||||
{
|
||||
PVIntArrayPtr offsetField = static_pointer_cast<PVIntArray>(
|
||||
imagePV->getScalarArrayField(String("offset"), pvInt));
|
||||
offsetField->setCapacity(2);
|
||||
int32_t offsets[] = { 0, 0 };
|
||||
offsetField->put(0, 2, offsets, 0);
|
||||
|
||||
PVIntArrayPtr binningField = static_pointer_cast<PVIntArray>(
|
||||
imagePV->getScalarArrayField(String("binning"), pvInt));
|
||||
binningField->setCapacity(2);
|
||||
int32_t binnings[] = { 1, 1 };
|
||||
binningField->put(0, 2, binnings, 0);
|
||||
|
||||
PVIntArrayPtr reverseField = static_pointer_cast<PVIntArray>(
|
||||
imagePV->getScalarArrayField(String("reverse"), pvInt));
|
||||
reverseField->setCapacity(2);
|
||||
int32_t reverses[] = { 0, 0 };
|
||||
reverseField->put(0, 2, reverses, 0);
|
||||
|
||||
PVIntArrayPtr fullDimField = static_pointer_cast<PVIntArray>(
|
||||
imagePV->getScalarArrayField(String("fullDim"), pvInt));
|
||||
fullDimField->setCapacity(2);
|
||||
const int32_t *fullDim = epicsv4_raw_dim;
|
||||
fullDimField->put(0, 2, fullDim, 0);
|
||||
|
||||
}
|
||||
|
||||
|
||||
void setImageUniqueId(PVStructure::shared_pointer const & imagePV)
|
||||
{
|
||||
PVIntPtr uniqueIdField = imagePV->getIntField(String("uniqueId"));
|
||||
uniqueIdField->put(0);
|
||||
}
|
||||
|
||||
void setImageMetadataValues(PVStructure::shared_pointer const & imagePV)
|
||||
{
|
||||
setImageUniqueId(imagePV);
|
||||
}
|
||||
|
||||
|
||||
void initImage(PVStructure::shared_pointer const & imagePV)
|
||||
{
|
||||
setImageArrayValues(imagePV);
|
||||
setImageImageValues(imagePV);
|
||||
setImageMetadataValues(imagePV);
|
||||
}
|
||||
|
||||
@@ -18,12 +18,14 @@
|
||||
// TODO temp
|
||||
#include "testADCSim.cpp"
|
||||
|
||||
|
||||
using namespace epics::pvAccess;
|
||||
using namespace epics::pvData;
|
||||
using namespace std;
|
||||
using std::tr1::static_pointer_cast;
|
||||
|
||||
|
||||
// TODO temp
|
||||
#include "testNTImage.cpp"
|
||||
|
||||
map<String, PVStructure::shared_pointer> structureStore;
|
||||
|
||||
@@ -1376,33 +1378,10 @@ class MockChannel : public Channel {
|
||||
printf("=============------------------------------------!!!\n");
|
||||
*/
|
||||
}
|
||||
else if (m_name.find("testImage") == 0)
|
||||
else if (m_name.find("testNTImage") == 0)
|
||||
{
|
||||
String allProperties("alarm,timeStamp,display,control");
|
||||
m_pvStructure = getStandardPVField()->scalarArray(pvByte,allProperties);
|
||||
PVByteArrayPtr pvField = static_pointer_cast<PVByteArray>(m_pvStructure->getScalarArrayField(String("value"), pvByte));
|
||||
int ix = 0;
|
||||
const int COUNT = 1024;
|
||||
|
||||
pvField->setCapacity(1024*COUNT);
|
||||
for (int n = 0; n < 1024; n++)
|
||||
{
|
||||
|
||||
int8 array[COUNT];
|
||||
for (int i = 0; i < COUNT; i++)
|
||||
{
|
||||
array[i] = ix;
|
||||
}
|
||||
pvField->put(ix, COUNT, array, 0);
|
||||
ix += COUNT;
|
||||
}
|
||||
/*
|
||||
printf("array prepared------------------------------------!!!\n");
|
||||
String str;
|
||||
pvField->toString(&str);
|
||||
printf("%s\n", str.c_str());
|
||||
printf("=============------------------------------------!!!\n");
|
||||
*/
|
||||
m_pvStructure = getPVDataCreate()->createPVStructure(makeImageStruc());
|
||||
initImage(m_pvStructure);
|
||||
}
|
||||
else if (m_name.find("testADC") == 0)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user