minor changes
This commit is contained in:
@ -13,7 +13,6 @@
|
|||||||
|
|
||||||
using std::tr1::static_pointer_cast;
|
using std::tr1::static_pointer_cast;
|
||||||
using namespace epics::pvData;
|
using namespace epics::pvData;
|
||||||
using namespace epics::pvAccess;
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
namespace epics { namespace pvDatabase {
|
namespace epics { namespace pvDatabase {
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include <deque>
|
#include <deque>
|
||||||
|
|
||||||
#include <pv/pvAccess.h>
|
#include <pv/pvData.h>
|
||||||
#include <pv/convert.h>
|
#include <pv/convert.h>
|
||||||
|
|
||||||
namespace epics { namespace pvDatabase {
|
namespace epics { namespace pvDatabase {
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
|
|
||||||
using std::tr1::static_pointer_cast;
|
using std::tr1::static_pointer_cast;
|
||||||
using namespace epics::pvData;
|
using namespace epics::pvData;
|
||||||
using namespace epics::pvAccess;
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
namespace epics { namespace pvDatabase {
|
namespace epics { namespace pvDatabase {
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
|
|
||||||
using std::tr1::static_pointer_cast;
|
using std::tr1::static_pointer_cast;
|
||||||
using namespace epics::pvData;
|
using namespace epics::pvData;
|
||||||
using namespace epics::pvAccess;
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
namespace epics { namespace pvDatabase {
|
namespace epics { namespace pvDatabase {
|
||||||
@ -91,7 +90,10 @@ bool RecordListRecord::init()
|
|||||||
void RecordListRecord::process()
|
void RecordListRecord::process()
|
||||||
{
|
{
|
||||||
PVStringArrayPtr pvNames = PVDatabase::getMaster()->getRecordNames();
|
PVStringArrayPtr pvNames = PVDatabase::getMaster()->getRecordNames();
|
||||||
names->replace(pvNames->viewUnsafe());
|
std::vector<String> const & xxx = pvNames->getVector();
|
||||||
|
size_t n = xxx.size();
|
||||||
|
names->put(0,n,xxx,0);
|
||||||
|
// names->replace(pvNames->viewUnsafe()); for pvDataCPP-md
|
||||||
String message("");
|
String message("");
|
||||||
if(database->get().compare("master")!=0) {
|
if(database->get().compare("master")!=0) {
|
||||||
message += " can only access master ";
|
message += " can only access master ";
|
||||||
|
@ -21,85 +21,39 @@ using namespace std;
|
|||||||
|
|
||||||
static String providerName("local");
|
static String providerName("local");
|
||||||
|
|
||||||
class LocalChannelCTX;
|
class LocalChannelProviderFactory;
|
||||||
typedef std::tr1::shared_ptr<LocalChannelCTX> LocalChannelCTXPtr;
|
typedef std::tr1::shared_ptr<LocalChannelProviderFactory> LocalChannelProviderFactoryPtr;
|
||||||
|
|
||||||
class LocalChannelCTX :
|
class LocalChannelProviderFactory : public ChannelProviderFactory
|
||||||
public epics::pvData::Runnable,
|
|
||||||
public std::tr1::enable_shared_from_this<LocalChannelCTX>
|
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
POINTER_DEFINITIONS(LocalChannelCTX);
|
POINTER_DEFINITIONS(LocalChannelProviderFactory);
|
||||||
static LocalChannelCTXPtr create(
|
virtual String getFactoryName() { return providerName;}
|
||||||
ChannelProviderLocalPtr const &channelProvider);
|
static LocalChannelProviderFactoryPtr create(
|
||||||
ChannelProviderLocalPtr getChannelProviderLocal() {return channelProvider;}
|
ChannelProviderLocalPtr const &channelProvider)
|
||||||
virtual ~LocalChannelCTX();
|
|
||||||
virtual void run();
|
|
||||||
private:
|
|
||||||
LocalChannelCTX(
|
|
||||||
ChannelProviderLocalPtr const &channelProvider);
|
|
||||||
shared_pointer getPtrSelf()
|
|
||||||
{
|
{
|
||||||
return shared_from_this();
|
LocalChannelProviderFactoryPtr xxx(
|
||||||
|
new LocalChannelProviderFactory(channelProvider));
|
||||||
|
registerChannelProviderFactory(xxx);
|
||||||
|
return xxx;
|
||||||
}
|
}
|
||||||
epics::pvData::Event event;
|
virtual ChannelProvider::shared_pointer sharedInstance()
|
||||||
|
{
|
||||||
|
return channelProvider;
|
||||||
|
}
|
||||||
|
virtual ChannelProvider::shared_pointer newInstance()
|
||||||
|
{
|
||||||
|
return channelProvider;
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
LocalChannelProviderFactory(
|
||||||
|
ChannelProviderLocalPtr const &channelProvider)
|
||||||
|
: channelProvider(channelProvider)
|
||||||
|
{}
|
||||||
ChannelProviderLocalPtr channelProvider;
|
ChannelProviderLocalPtr channelProvider;
|
||||||
epics::pvAccess::ServerContextImpl::shared_pointer ctx;
|
|
||||||
epics::pvData::Thread *thread;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
LocalChannelCTXPtr LocalChannelCTX::create(
|
|
||||||
ChannelProviderLocalPtr const & channelProvider)
|
|
||||||
{
|
|
||||||
static LocalChannelCTXPtr pvServiceChannelCTX;
|
|
||||||
static Mutex mutex;
|
|
||||||
Lock xx(mutex);
|
|
||||||
|
|
||||||
if(pvServiceChannelCTX.get()==0) {
|
|
||||||
pvServiceChannelCTX = LocalChannelCTXPtr(
|
|
||||||
new LocalChannelCTX(channelProvider));
|
|
||||||
}
|
|
||||||
return pvServiceChannelCTX;
|
|
||||||
}
|
|
||||||
|
|
||||||
LocalChannelCTX::LocalChannelCTX(
|
|
||||||
ChannelProviderLocalPtr const &channelProvider)
|
|
||||||
:
|
|
||||||
channelProvider(channelProvider),
|
|
||||||
ctx(ServerContextImpl::create()),
|
|
||||||
thread(new Thread(
|
|
||||||
String("pvServiceChannel"),
|
|
||||||
lowerPriority,
|
|
||||||
this,
|
|
||||||
epicsThreadStackBig))
|
|
||||||
{}
|
|
||||||
|
|
||||||
LocalChannelCTX::~LocalChannelCTX()
|
|
||||||
{
|
|
||||||
std::cout << "LocalChannelCTX::~LocalChannelCTX()" << std::endl;
|
|
||||||
ctx->shutdown();
|
|
||||||
// we need thead.waitForCompletion()
|
|
||||||
event.wait();
|
|
||||||
epicsThreadSleep(1.0);
|
|
||||||
std::cout << "LocalChannelCTX::run() calling channelProvider->destroy()" << std::endl;
|
|
||||||
if(channelProvider!=NULL) channelProvider->destroy();
|
|
||||||
ctx.reset();
|
|
||||||
channelProvider.reset();
|
|
||||||
delete thread;
|
|
||||||
}
|
|
||||||
void LocalChannelCTX::run()
|
|
||||||
{
|
|
||||||
registerChannelProvider(channelProvider);
|
|
||||||
String providerName = channelProvider->getProviderName();
|
|
||||||
ctx->setChannelProviderName(providerName);
|
|
||||||
ctx->initialize(getChannelAccess());
|
|
||||||
ctx->printInfo();
|
|
||||||
ctx->run(0);
|
|
||||||
ctx->destroy();
|
|
||||||
event.signal();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ChannelProviderLocalPtr getChannelProviderLocal()
|
ChannelProviderLocalPtr getChannelProviderLocal()
|
||||||
{
|
{
|
||||||
static ChannelProviderLocalPtr channelProviderLocal;
|
static ChannelProviderLocalPtr channelProviderLocal;
|
||||||
@ -108,7 +62,7 @@ ChannelProviderLocalPtr getChannelProviderLocal()
|
|||||||
if(channelProviderLocal.get()==NULL) {
|
if(channelProviderLocal.get()==NULL) {
|
||||||
channelProviderLocal = ChannelProviderLocalPtr(
|
channelProviderLocal = ChannelProviderLocalPtr(
|
||||||
new ChannelProviderLocal());
|
new ChannelProviderLocal());
|
||||||
LocalChannelCTX::create(channelProviderLocal);
|
LocalChannelProviderFactory::create(channelProviderLocal);
|
||||||
}
|
}
|
||||||
return channelProviderLocal;
|
return channelProviderLocal;
|
||||||
}
|
}
|
||||||
|
@ -14,11 +14,8 @@
|
|||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
#include <pv/pvType.h>
|
|
||||||
#include <pv/pvIntrospect.h>
|
|
||||||
#include <pv/pvData.h>
|
|
||||||
|
|
||||||
#include <pv/pvDatabase.h>
|
#include <pv/pvDatabase.h>
|
||||||
|
#include <pv/pvAccess.h>
|
||||||
|
|
||||||
namespace epics { namespace pvDatabase {
|
namespace epics { namespace pvDatabase {
|
||||||
|
|
||||||
|
@ -194,15 +194,18 @@ static void testPVScalarArray(
|
|||||||
BitSetPtr bitSet;
|
BitSetPtr bitSet;
|
||||||
String builder;
|
String builder;
|
||||||
size_t offset;
|
size_t offset;
|
||||||
|
ConvertPtr convert = getConvert();
|
||||||
size_t n = 5;
|
size_t n = 5;
|
||||||
shared_vector<double> values(n);
|
DoubleArray values(n);
|
||||||
|
// shared_vector<double> values(n);
|
||||||
|
|
||||||
pvRecord->lock_guard();
|
pvRecord->lock_guard();
|
||||||
cout << endl;
|
cout << endl;
|
||||||
pvStructureRecord = pvRecord->getPVRecordStructure()->getPVStructure();
|
pvStructureRecord = pvRecord->getPVRecordStructure()->getPVStructure();
|
||||||
pvValueRecord = pvStructureRecord->getScalarArrayField(valueNameRecord,scalarType);
|
pvValueRecord = pvStructureRecord->getScalarArrayField(valueNameRecord,scalarType);
|
||||||
for(size_t i=0; i<n; i++) values[i] = i;
|
for(size_t i=0; i<n; i++) values[i] = i;
|
||||||
pvValueRecord->PVScalarArray::putFrom<pvDouble>(values);
|
convert->fromDoubleArray(pvValueRecord,0,n,get(values),0);
|
||||||
|
// pvValueRecord->PVScalarArray::putFrom<pvDouble>(values);
|
||||||
StructureConstPtr structure = pvCopy->getStructure();
|
StructureConstPtr structure = pvCopy->getStructure();
|
||||||
builder.clear(); structure->toString(&builder);
|
builder.clear(); structure->toString(&builder);
|
||||||
cout << "structure from copy" << endl << builder << endl;
|
cout << "structure from copy" << endl << builder << endl;
|
||||||
@ -214,7 +217,8 @@ static void testPVScalarArray(
|
|||||||
cout << "after initCopy pvValueCopy " << builder << endl;
|
cout << "after initCopy pvValueCopy " << builder << endl;
|
||||||
cout << endl;
|
cout << endl;
|
||||||
for(size_t i=0; i<n; i++) values[i] = i + .06;
|
for(size_t i=0; i<n; i++) values[i] = i + .06;
|
||||||
pvValueRecord->PVScalarArray::putFrom<pvDouble>(values);
|
convert->fromDoubleArray(pvValueRecord,0,n,get(values),0);
|
||||||
|
// pvValueRecord->PVScalarArray::putFrom<pvDouble>(values);
|
||||||
pvCopy->updateCopySetBitSet(pvStructureCopy,bitSet,true);
|
pvCopy->updateCopySetBitSet(pvStructureCopy,bitSet,true);
|
||||||
builder.clear(); pvValueCopy->toString(&builder);
|
builder.clear(); pvValueCopy->toString(&builder);
|
||||||
cout << "after put(i+ .06) pvValueCopy " << builder << endl;
|
cout << "after put(i+ .06) pvValueCopy " << builder << endl;
|
||||||
@ -233,7 +237,8 @@ static void testPVScalarArray(
|
|||||||
cout << endl;
|
cout << endl;
|
||||||
bitSet->clear();
|
bitSet->clear();
|
||||||
for(size_t i=0; i<n; i++) values[i] = i + 1.0;
|
for(size_t i=0; i<n; i++) values[i] = i + 1.0;
|
||||||
pvValueRecord->PVScalarArray::putFrom<pvDouble>(values);
|
convert->fromDoubleArray(pvValueRecord,0,n,get(values),0);
|
||||||
|
// pvValueRecord->PVScalarArray::putFrom<pvDouble>(values);
|
||||||
builder.clear();
|
builder.clear();
|
||||||
bitSet->toString(&builder);
|
bitSet->toString(&builder);
|
||||||
cout << "before updateCopyFromBitSet";
|
cout << "before updateCopyFromBitSet";
|
||||||
@ -257,7 +262,8 @@ static void testPVScalarArray(
|
|||||||
cout << " bitSet " << builder;
|
cout << " bitSet " << builder;
|
||||||
cout << endl;
|
cout << endl;
|
||||||
for(size_t i=0; i<n; i++) values[i] = i + 2.0;
|
for(size_t i=0; i<n; i++) values[i] = i + 2.0;
|
||||||
pvValueRecord->PVScalarArray::putFrom<pvDouble>(values);
|
convert->fromDoubleArray(pvValueRecord,0,n,get(values),0);
|
||||||
|
// pvValueRecord->PVScalarArray::putFrom<pvDouble>(values);
|
||||||
bitSet->set(0);
|
bitSet->set(0);
|
||||||
cout << "before updateRecord";
|
cout << "before updateRecord";
|
||||||
builder.clear(); pvValueRecord->toString(&builder);
|
builder.clear(); pvValueRecord->toString(&builder);
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include <pv/standardPVField.h>
|
#include <pv/standardPVField.h>
|
||||||
#include <pv/exampleCounter.h>
|
#include <pv/exampleCounter.h>
|
||||||
#include <pv/channelProviderLocal.h>
|
#include <pv/channelProviderLocal.h>
|
||||||
|
#include <pv/serverContext.h>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using std::tr1::static_pointer_cast;
|
using std::tr1::static_pointer_cast;
|
||||||
@ -39,6 +40,7 @@ int main(int argc,char *argv[])
|
|||||||
bool result = master->addRecord(pvRecord);
|
bool result = master->addRecord(pvRecord);
|
||||||
cout << "result of addRecord " << recordName << " " << result << endl;
|
cout << "result of addRecord " << recordName << " " << result << endl;
|
||||||
pvRecord.reset();
|
pvRecord.reset();
|
||||||
|
startPVAServer(PVACCESS_ALL_PROVIDERS,0,true,true);
|
||||||
cout << "exampleServer\n";
|
cout << "exampleServer\n";
|
||||||
string str;
|
string str;
|
||||||
while(true) {
|
while(true) {
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include <pv/powerSupplyRecordTest.h>
|
#include <pv/powerSupplyRecordTest.h>
|
||||||
#include <pv/channelProviderLocal.h>
|
#include <pv/channelProviderLocal.h>
|
||||||
#include <pv/recordList.h>
|
#include <pv/recordList.h>
|
||||||
|
#include <pv/serverContext.h>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using std::tr1::static_pointer_cast;
|
using std::tr1::static_pointer_cast;
|
||||||
@ -83,6 +84,7 @@ int main(int argc,char *argv[])
|
|||||||
pvRecord->process();
|
pvRecord->process();
|
||||||
}
|
}
|
||||||
result = master->addRecord(pvRecord);
|
result = master->addRecord(pvRecord);
|
||||||
|
if(!result) cout<< "record " << recordName << " not added" << endl;
|
||||||
recordName = "exampleDoubleArray";
|
recordName = "exampleDoubleArray";
|
||||||
pvStructure = standardPVField->scalarArray(scalarType,properties);
|
pvStructure = standardPVField->scalarArray(scalarType,properties);
|
||||||
pvRecord = PVRecord::create(recordName,pvStructure);
|
pvRecord = PVRecord::create(recordName,pvStructure);
|
||||||
@ -91,6 +93,7 @@ int main(int argc,char *argv[])
|
|||||||
pvRecord->process();
|
pvRecord->process();
|
||||||
}
|
}
|
||||||
result = master->addRecord(pvRecord);
|
result = master->addRecord(pvRecord);
|
||||||
|
if(!result) cout<< "record " << recordName << " not added" << endl;
|
||||||
recordName = "examplePowerSupply";
|
recordName = "examplePowerSupply";
|
||||||
pvStructure = createPowerSupply();
|
pvStructure = createPowerSupply();
|
||||||
PowerSupplyRecordTestPtr psr =
|
PowerSupplyRecordTestPtr psr =
|
||||||
@ -101,8 +104,11 @@ int main(int argc,char *argv[])
|
|||||||
}
|
}
|
||||||
result = master->addRecord(psr);
|
result = master->addRecord(psr);
|
||||||
recordName = "laptoprecordListPGRPC";
|
recordName = "laptoprecordListPGRPC";
|
||||||
|
if(!result) cout<< "record " << recordName << " not added" << endl;
|
||||||
pvRecord = RecordListRecord::create(recordName);
|
pvRecord = RecordListRecord::create(recordName);
|
||||||
result = master->addRecord(pvRecord);
|
result = master->addRecord(pvRecord);
|
||||||
|
ServerContext::shared_pointer ctx =
|
||||||
|
startPVAServer(PVACCESS_ALL_PROVIDERS,0,true,true);
|
||||||
cout << "exampleServer\n";
|
cout << "exampleServer\n";
|
||||||
PVStringArrayPtr pvNames = master->getRecordNames();
|
PVStringArrayPtr pvNames = master->getRecordNames();
|
||||||
String buffer;
|
String buffer;
|
||||||
@ -115,6 +121,7 @@ int main(int argc,char *argv[])
|
|||||||
if(str.compare("exit")==0) break;
|
if(str.compare("exit")==0) break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
ctx->destroy();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user