Open Lighting Architecture  Latest Git
Classes | Typedefs | Enumerations | Functions | Variables
ola::io Namespace Reference

Detailed Description

Classes for general I/O and event handling.

Classes

class  BidirectionalFileDescriptor
 A file descriptor that supports both read & write. More...
 
class  BigEndianInputStream
 
class  BigEndianInputStreamAdaptor
 
class  BigEndianInputStreamInterface
 
class  BigEndianOutputStream
 
class  BigEndianOutputStreamAdaptor
 
class  BigEndianOutputStreamInterface
 
class  ConnectedDescriptor
 A BidirectionalFileDescriptor that also generates notifications when closed. More...
 
class  DeviceDescriptor
 A descriptor which represents a connection to a device. More...
 
class  EPollData
 
class  EPoller
 An implementation of PollerInterface that uses epoll(). More...
 
class  EventHolder
 
class  InputBufferInterface
 
class  InputStream
 
class  InputStreamInterface
 
class  IOQueue
 
class  IOStack
 
struct  IOVec
 
class  IOVecInterface
 
class  KQueueData
 
class  KQueuePoller
 An implementation of PollerInterface that uses kevent / kqueue. More...
 
class  LinuxHelper
 A static class containing platform-specific helper code for Linux. More...
 
class  LoopbackDescriptor
 A loopback descriptor. More...
 
class  MemoryBlock
 A MemoryBlock encapsulates a chunk of memory. It's used by the IOQueue and IOStack classes. More...
 
class  MemoryBlockPool
 MemoryBlockPool. This class is not thread safe. More...
 
class  MemoryBuffer
 
class  NonBlockingSender
 Write data to ConnectedDescriptors without blocking or losing data. More...
 
class  OutputBufferInterface
 
class  OutputStream
 
class  OutputStreamInterface
 
class  PipeDescriptor
 A descriptor that uses unix pipes. More...
 
class  PollData
 
class  PollerInterface
 The interface for the Poller classes. More...
 
class  ReadFileDescriptor
 Represents a file descriptor that supports reading data. More...
 
class  SelectPoller
 An implementation of PollerInterface that uses select(). More...
 
class  SelectServer
 A single threaded I/O event management system. More...
 
class  SelectServerInterface
 The interface for the SelectServer. More...
 
class  StdinHandler
 
class  TimeoutManager
 Manages timer events. More...
 
class  UnixSocket
 A unix domain socket pair. More...
 
class  UnmanagedFileDescriptor
 Allows a FD created by a library to be used with the SelectServer. More...
 
struct  UnmanagedFileDescriptor_lt
 Comparison operator for UnmanagedFileDescriptor. More...
 
class  WindowsPoller
 An implementation of PollerInterface for Windows. More...
 
class  WindowsPollerDescriptor
 
class  WriteFileDescriptor
 Represents a file descriptor that supports writing data. More...
 

Typedefs

typedef std::basic_string< uint8_t > ByteString
 A contiguous block of uint8_t data. More...
 
typedef int DescriptorHandle
 

Enumerations

enum  baud_rate {
  BAUD_RATE_9600 = 9600, BAUD_RATE_19200 = 19200, BAUD_RATE_38400 = 38400, BAUD_RATE_57600 = 57600,
  BAUD_RATE_115200 = 115200, BAUD_RATE_230400 = 230400
}
 

Functions

 STATIC_ASSERT (sizeof(struct iovec)==sizeof(struct IOVec))
 
int ToFD (const DescriptorHandle &handle)
 
bool CreatePipe (DescriptorHandle handle_pair[2])
 
bool Open (const std::string &path, int oflag, int *fd)
 Wrapper around open(). More...
 
bool TryOpen (const std::string &path, int oflag, int *fd)
 Wrapper around open(). More...
 
bool FileExists (const std::string &file_name)
 Check if a file exists using stat(). More...
 
template<typename T >
bool InsertIntoDescriptorMap (map< int, T *> *descriptor_map, int fd, T *value, const string &type)
 Insert a descriptor into one of the descriptor maps. More...
 
template<typename T >
bool RemoveFromDescriptorMap (map< int, T *> *descriptor_map, int fd)
 Remove a FD from a descriptor map by setting the value to NULL. More...
 
bool UIntToSpeedT (uint32_t value, speed_t *output)
 Convert an integer baud rate to the termios struct speed_t. More...
 
bool AcquireUUCPLockAndOpen (const std::string &path, int oflag, int *fd)
 Try to open the path, respecting UUCP locking. More...
 
void ReleaseUUCPLock (const std::string &path)
 Remove a UUCP lock file for the device. More...
 
void CancelIOs (vector< PollData *> *data)
 

Variables

static const int FLAG_READ = 1
 
static const int FLAG_WRITE = 2
 
static DescriptorHandle INVALID_DESCRIPTOR = -1
 

Typedef Documentation

◆ ByteString

typedef std::basic_string<uint8_t> ola::io::ByteString

A contiguous block of uint8_t data.

The constraints of the .data() and .c_str() methods from the C++ standard mean that string stores it's data in a contiguous block.

In some implementations, basic_string may be reference counted, but with the additional constraints added by C++11 this will not be the case, so think twice about copying ByteStrings.

Function Documentation

◆ AcquireUUCPLockAndOpen()

bool ola::io::AcquireUUCPLockAndOpen ( const std::string &  path,
int  oflag,
int *  fd 
)

Try to open the path, respecting UUCP locking.

Parameters
paththe path to open
oflagflags passed to open
[out]fda pointer to the fd which is returned.
Returns
true if the open succeeded, false otherwise.

This fails-fast, it we can't get the lock immediately, we'll return false.

◆ CreatePipe()

bool ola::io::CreatePipe ( DescriptorHandle  handle_pair[2])

Helper function to create a anonymous pipe

Parameters
handle_paira 2 element array which is updated with the handles
Returns
true if successful, false otherwise.

◆ FileExists()

bool ola::io::FileExists ( const std::string &  file_name)

Check if a file exists using stat().

Parameters
file_nameThe name of the file.
Returns
true if the stat() command completed & the file exists, false if stat() failed, or the file doesn't exist.

◆ InsertIntoDescriptorMap()

template<typename T >
bool ola::io::InsertIntoDescriptorMap ( map< int, T *> *  descriptor_map,
int  fd,
T *  value,
const string &  type 
)

Insert a descriptor into one of the descriptor maps.

Parameters
descriptor_mapthe descriptor_map to insert into.
fdthe FD to use as the key
valuethe value to associate with the key
typethe name of the map, used for logging if the fd already exists in the map.
Returns
true if the descriptor was inserted, false if it was already in the map.

There are three possibilities:

  • The fd does not already exist in the map
  • The fd exists and the value is NULL.
  • The fd exists and is not NULL.

◆ Open()

bool ola::io::Open ( const std::string &  path,
int  oflag,
int *  fd 
)

Wrapper around open().

This logs a message if the open fails.

Parameters
paththe path to open
oflagflags passed to open
[out]fda pointer to the fd which is returned.
Returns
true if the open succeeded, false otherwise.

◆ ReleaseUUCPLock()

void ola::io::ReleaseUUCPLock ( const std::string &  path)

Remove a UUCP lock file for the device.

Parameters
pathThe path to unlock.

The lock is only removed if the PID matches.

◆ RemoveFromDescriptorMap()

template<typename T >
bool ola::io::RemoveFromDescriptorMap ( map< int, T *> *  descriptor_map,
int  fd 
)

Remove a FD from a descriptor map by setting the value to NULL.

Returns
true if the FD was removed from the map, false if it didn't exist in the map.

◆ TryOpen()

bool ola::io::TryOpen ( const std::string &  path,
int  oflag,
int *  fd 
)

Wrapper around open().

This is similar to Open(), but doesn't log a warning if open() fails.

Parameters
paththe path to open
oflagflags passed to open
[out]fda pointer to the fd which is returned.
Returns
true if the open succeeded, false otherwise.
See also
Open

◆ UIntToSpeedT()

bool ola::io::UIntToSpeedT ( uint32_t  value,
speed_t *  output 
)

Convert an integer baud rate to the termios struct speed_t.

Parameters
[in]valuethe baudrate value to convert
[out]outputa pointer where the value will be stored
Returns
true if the value was converted, false if the baud rate wasn't supported by the method.