Newer
Older
// ============================================================================
//
// = CONTEXT
// TANGO Project - Keithley Electrometer Support Library
//
// = FILENAME
// TangoSerialLink.cpp
//
// = AUTHOR
// X. Elattaoui
//
// ============================================================================
// ============================================================================
// DEPENDENCIES
// ============================================================================
#include <string>
#include <iostream>
#include "TangoSerialLink.h"
//- Read serial data in mode LINE (i.e SerialLine device wait until EOF is received from instrument
static const long MODE_LINE = 2;
// ============================================================================
// TangoSerialLink::TangoSerialLink
// ============================================================================
TangoSerialLink::TangoSerialLink (std::string& serial_device_name)
: CommunicationLink(serial_device_name),
_serial_proxy (0),
_is_serial_proxy_created (false)
{
// //std::cout << "TangoSerialLink::TangoSerialLink <-" << std::endl;
// //std::cout << "TangoSerialLink::TangoSerialLink ->" << std::endl;
}
// ============================================================================
// TangoSerialLink::~TangoSerialLink
// ============================================================================
TangoSerialLink::~TangoSerialLink (void)
{
{
delete _serial_proxy;
_serial_proxy = 0;
_is_serial_proxy_created = false;
}
}
// ============================================================================
// TangoSerialLink::create_serial_proxy
// ============================================================================
void TangoSerialLink::create_serial_proxy (void) throw (Tango::DevFailed)
{
try
{
//- try
this->_serial_proxy = new Tango::DeviceProxyHelper(_communication_Device_name);
_is_serial_proxy_created = true;
}
catch(Tango::DevFailed& df )
{
description = "Unable to create proxy on : " + _communication_Device_name;
Tango::Except::re_throw_exception (df,
(const char*)"COMMUNICATION_ERROR",
(const char*)"TangoSerialLink::create_serial_proxy");
}
}
// ============================================================================
// TangoSerialLink::write
// ============================================================================
void TangoSerialLink::write (std::string command_to_send) throw (Tango::DevFailed)
{
create_serial_proxy();
try
{
//- try
this->_serial_proxy->command_in("DevSerWriteString", command_to_send.c_str());
}
catch(Tango::DevFailed& df )
{
Tango::Except::re_throw_exception (df,
(const char*)"COMMUNICATION_ERROR",
(const char*)"TangoSerialLink::write");
}
}
// ============================================================================
// TangoSerialLink::read
// ============================================================================
std::string TangoSerialLink::read (void) throw (Tango::DevFailed)
{
//this->_serial_proxy->command_inout("DevSerReadString", MODE_LINE ,this->response);
this->_serial_proxy->command_out("DevSerReadLine", this->response);
}
catch(Tango::DevFailed& df )
{
Tango::Except::re_throw_exception (df,
(const char*)"COMMUNICATION_ERROR",
(const char*)"Unable to perform a read operation",
(const char*)"TangoSerialLink::read");
}
return this->response ;
}
// ============================================================================
// TangoSerialLink::write_read
// ============================================================================
std::string TangoSerialLink::write_read (std::string command_to_send) throw (Tango::DevFailed)
{
long flush_in_out = 2;
//- Flush buffers ( In & Out = 2 )
_serial_proxy->command_in("DevSerFlush", flush_in_out);
omni_thread::sleep(0, 200000000); //200 milliseconds
write(command_to_send);
//- sleep a little bit to let the adapter(RS232/485) to switch mode
omni_thread::sleep(0, 100000000); //100 milliseconds