The usage of some Tango elements are demonstrated. The first code snippet uses a DeviceAttribute which is allocated by declaration.
//
// the DeviceData and the DeviceAttribute are created by declaration, no 'delete'
//
// g++ -g -O0 -I /usr/include/tango attrTestNew.cpp -o attrTestNew -L/usr/lib/x86_64-linux-gnu -ltango -llog4tango -lomniORB4 -lomniDynamic4 -lomnithread
// valgrind --leak-check=full --track-origins=yes --verbose --show-leak-kinds=all --log-file=valgrind.log ./attrTestNew
//
#include <tango.h>
using namespace Tango;
int main( int argc, char **argv)
{
Tango::DevLong devLong;
Tango::DevDouble devDouble;
DeviceData devdata;
DeviceAttribute da;
DeviceProxy *timer = 0;
DeviceProxy *counter = 0;
timer = new DeviceProxy( "p09/dgg2/eh.01");
counter = new DeviceProxy( "p09/counter/eh.01");
da.set_name( "SampleTime");
da << 3.5;
timer->write_attribute( da);
cout << " starting timer with 3.5s " << endl;
timer->command_inout( "Start");
devdata = counter->command_inout( "Reset");
devdata = timer->command_inout( "Check");
devdata >> devLong;
while( devLong)
{
da = counter->read_attribute( "Counts");
da >> devDouble;
cout << " read-counter returns " << devDouble << endl;
devdata = timer->command_inout( "Check");
devdata >> devLong;
cout << " check-timer returns " << devLong << endl;
sleep(1);
}
delete timer;
delete counter;
return 1;
}
The next example shows how a device attribute is allocated by the new operator.
//
// the DeviceData and the DeviceAttribute are created using 'new', 'delete' needed
//
// g++ -g -O0 -I /usr/include/tango attrTestNew.cpp -o attrTestNew -L/usr/lib/x86_64-linux-gnu -ltango -llog4tango -lomniORB4 -lomniDynamic4 -lomnithread
// valgrind --leak-check=full --track-origins=yes --verbose --show-leak-kinds=all --log-file=valgrind.log ./attrTestNew
//
#include <tango.h>
using namespace Tango;
int main( int argc, char **argv)
{
Tango::DevLong devLong;
Tango::DevDouble devDouble;
DeviceData *devdata = 0;
DeviceAttribute *da = 0;
DeviceProxy *timer = 0;
DeviceProxy *counter = 0;
da = new DeviceAttribute();
devdata = new DeviceData();
timer = new DeviceProxy( "p09/dgg2/eh.01");
counter = new DeviceProxy( "p09/counter/eh.01");
da->set_name( "SampleTime");
*da << 3.5;
timer->write_attribute( *da);
cout << " starting timer with 3.5s " << endl;
timer->command_inout( "Start");
*devdata = counter->command_inout( "Reset");
*devdata = timer->command_inout( "Check");
*devdata >> devLong;
while( devLong)
{
*da = counter->read_attribute( "Counts");
*da >> devDouble;
cout << " read-counter returns " << devDouble << endl;
*devdata = timer->command_inout( "Check");
*devdata >> devLong;
cout << " check-timer returns " << devLong << endl;
sleep(1);
}
delete da;
delete devdata;
delete timer;
delete counter;
return 1;
}
Here is almost the same code, just a little bit shorter.
//
// the DeviceData and the DeviceAttribute are created using 'new', 'delete' needed
//
// g++ -g -O0 -I /usr/include/tango attrTestShort.cpp -o attrTestShort -L/usr/lib/x86_64-linux-gnu -ltango -llog4tango -lomniORB4 -lomniDynamic4 -lomnithread
// valgrind --leak-check=full --track-origins=yes --verbose --show-leak-kinds=all --log-file=valgrind.log ./attrTestShort
//
#include <tango.h>
using namespace Tango;
int main( int argc, char **argv)
{
Tango::DevLong devLong;
Tango::DevDouble devDouble;
DeviceAttribute *da = new DeviceAttribute();
DeviceData *devdata = new DeviceData();
DeviceProxy *timer = new DeviceProxy( "p09/dgg2/eh.01");
DeviceProxy *counter = new DeviceProxy( "p09/counter/eh.01");
da->set_name( "SampleTime");
*da << 3.5;
//
// void DeviceProxy::write_attribute(DeviceAttribute&)
//
timer->write_attribute( *da);
cout << " starting timer with 3.5s " << endl;
timer->command_inout( "Start");
*devdata = counter->command_inout( "Reset");
*devdata = timer->command_inout( "Check");
*devdata >> devLong;
while( devLong)
{
*da = counter->read_attribute( "Counts");
*da >> devDouble;
cout << " read-counter returns " << devDouble << endl;
*devdata = timer->command_inout( "Check");
*devdata >> devLong;
cout << " check-timer returns " << devLong << endl;
sleep(1);
}
delete da;
delete devdata;
delete timer;
delete counter;
return 1;
}