minor changes

This commit is contained in:
Marty Kraimer
2013-06-17 07:49:55 -04:00
parent ea0e2cd570
commit a39bef15bb
9 changed files with 52 additions and 86 deletions

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 ";

View File

@ -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;
} }

View File

@ -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 {

View File

@ -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);

View File

@ -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) {

View File

@ -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;
} }