1 #ifndef IODRIVERS_BASE_DRIVER_HH
2 #define IODRIVERS_BASE_DRIVER_HH
10 #include <iodrivers_base/Status.hpp>
11 #include <iodrivers_base/Exceptions.hpp>
16 namespace iodrivers_base {
31 if (fd != -1) close(fd);
35 int get()
const {
return fd; }
79 uint8_t* internal_buffer;
81 size_t internal_buffer_size;
144 std::pair<uint8_t const*, int>
findPacket(uint8_t
const* buffer,
int buffer_size)
const;
159 void openIPClient(std::string
const& hostname,
int port, addrinfo
const& hints);
169 Driver(
int max_packet_size,
bool extract_last =
false);
233 virtual void openURI(std::string
const& uri);
240 bool openInet(
const char *hostname,
int port);
245 void openTCP(std::string
const& hostname,
int port);
255 void openUDP(std::string
const& hostname,
int remote_port);
275 bool openSerial(std::string
const& port,
int baudrate);
280 void openFile(std::string
const& path);
286 static int openSerialIO(std::string
const& port,
int baudrate);
346 virtual void close();
362 int readPacket(uint8_t* buffer,
int bufsize, base::Time
const& packet_timeout);
369 int readPacket(uint8_t* buffer,
int bufsize,
int packet_timeout,
int first_byte_timeout = -1);
389 int readPacket(uint8_t* buffer,
int bufsize, base::Time
const& packet_timeout, base::Time
const& first_byte_timeout);
395 bool writePacket(uint8_t
const* buffer,
int bufsize);
399 bool writePacket(uint8_t
const* buffer,
int bufsize,
int timeout);
408 bool writePacket(uint8_t
const* buffer,
int bufsize, base::Time
const& timeout);
428 virtual int extractPacket(uint8_t
const* buffer,
size_t buffer_size)
const = 0;
469 static std::string
printable_com(uint8_t
const* buffer,
size_t buffer_size);
470 static std::string
printable_com(
char const* buffer,
size_t buffer_size);
472 static std::string
binary_com(std::string
const& str);
473 static std::string
binary_com(uint8_t
const* str,
size_t str_size);
474 static std::string
binary_com(
char const* str,
size_t str_size);
std::pair< int, bool > extractPacketFromInternalBuffer(uint8_t *buffer, int out_buffer_size)
Definition: Driver.cpp:602
int release()
Definition: Driver.hpp:36
void openIPClient(std::string const &hostname, int port, addrinfo const &hints)
Definition: Driver.cpp:314
std::set< IOListener * > m_listeners
Definition: Driver.hpp:93
~FileGuard()
Definition: Driver.hpp:27
Definition: Driver.hpp:319
Definition: Driver.hpp:69
void setReadTimeout(base::Time const &t)
Definition: Driver.cpp:679
int readPacket(uint8_t *buffer, int bufsize)
Definition: Driver.cpp:683
iodrivers_base::Status Statistics
Definition: Driver.hpp:73
bool writePacket(uint8_t const *buffer, int bufsize)
Definition: Driver.cpp:784
base::Time getReadTimeout() const
Definition: Driver.cpp:681
Definition: Driver.hpp:327
Status getStatus() const
Definition: Driver.cpp:132
bool setSerialBaudrate(int rate)
Definition: Driver.cpp:416
void removeListener(IOListener *stream)
Definition: Driver.cpp:120
Definition: Driver.hpp:320
int const MAX_PACKET_SIZE
Definition: Driver.hpp:84
bool hasPacket() const
Definition: Driver.cpp:670
bool m_extract_last
Definition: Driver.hpp:106
void reset(int new_fd=-1)
Definition: Driver.hpp:29
Definition: Driver.hpp:323
static std::string binary_com(std::string const &str)
Definition: Driver.cpp:71
void openTCP(std::string const &hostname, int port)
Definition: Driver.cpp:320
virtual ~Driver()
Definition: Driver.cpp:96
Definition: Driver.hpp:21
IOStream * getMainStream() const
Definition: Driver.cpp:110
static std::string printable_com(std::string const &buffer)
Definition: Driver.cpp:48
bool isValid() const
Definition: Driver.cpp:154
Definition: IOStream.hpp:19
void setExtractLastPacket(bool flag)
Definition: Driver.cpp:140
void openUDP(std::string const &hostname, int remote_port)
Definition: Driver.cpp:339
Definition: Driver.hpp:324
static int openSerialIO(std::string const &port, int baudrate)
Definition: Driver.cpp:384
int getFileDescriptor() const
Definition: Driver.cpp:148
std::pair< uint8_t const *, int > findPacket(uint8_t const *buffer, int buffer_size) const
Definition: Driver.cpp:525
Definition: Driver.hpp:318
static bool setNonBlockingFlag(int fd)
void openTestMode()
Definition: Driver.cpp:233
Definition: Driver.hpp:326
virtual void close()
Definition: Driver.cpp:519
base::Time m_read_timeout
Definition: Driver.hpp:112
bool openInet(const char *hostname, int port)
Definition: Driver.cpp:244
void setFileDescriptor(int fd, bool auto_close=true)
Definition: Driver.cpp:143
int doPacketExtraction(uint8_t *buffer)
Definition: Driver.cpp:583
FileGuard(int fd=-1)
Definition: Driver.hpp:25
void clear()
Definition: Driver.cpp:125
Definition: Driver.hpp:325
static const int INVALID_FD
Definition: Driver.hpp:75
Definition: Driver.hpp:322
Definition: Driver.hpp:317
Status getStats() const
Definition: Driver.hpp:206
Driver(int max_packet_size, bool extract_last=false)
Definition: Driver.cpp:87
Status m_stats
Definition: Driver.hpp:157
void setWriteTimeout(base::Time const &t)
Definition: Driver.cpp:779
virtual void openURI(std::string const &uri)
Definition: Driver.cpp:156
void openFile(std::string const &path)
Definition: Driver.cpp:408
bool openSerial(std::string const &port, int baudrate)
Definition: Driver.cpp:238
void addListener(IOListener *stream)
Definition: Driver.cpp:115
base::Time m_write_timeout
Definition: Driver.hpp:118
void setMainStream(IOStream *stream)
Definition: Driver.cpp:104
Definition: Driver.hpp:316
virtual int extractPacket(uint8_t const *buffer, size_t buffer_size) const =0
std::pair< int, bool > readPacketInternal(uint8_t *buffer, int bufsize)
Definition: Driver.cpp:622
void openUDPBidirectional(std::string const &hostname, int out_port, int in_port)
Definition: Driver.cpp:362
IOStream * m_stream
Definition: Driver.hpp:89
Definition: Driver.hpp:328
Definition: Driver.hpp:321
Definition: IOListener.hpp:12
SERIAL_RATES
Definition: Driver.hpp:314
void resetStatus()
Definition: Driver.cpp:137
void resetStats()
Definition: Driver.hpp:210
bool getExtractLastPacket() const
Definition: Driver.cpp:141
bool m_auto_close
Definition: Driver.hpp:99
base::Time getWriteTimeout() const
Definition: Driver.cpp:781