![]() |
PIP 5.6.1
Platform-Independent Primitives
|
Base class for input/output devices. More...
#include <piiodevice.h>

Public Types | |
| enum | DeviceMode { ReadOnly = 0x01 , WriteOnly = 0x02 , ReadWrite = 0x03 } |
| Open modes for PIIODevice. More... | |
| enum | DeviceOption { BlockingRead = 0x01 , BlockingWrite = 0x02 } |
| Generic options supported by some devices. More... | |
| enum | DeviceInfoFlag { Sequential = 0x01 , Reliable = 0x02 } |
| Characteristics of the device channel. More... | |
| typedef PIFlags< DeviceOption > | DeviceOptions |
| Bitmask of DeviceOption values. | |
| typedef PIFlags< DeviceInfoFlag > | DeviceInfoFlags |
| Bitmask of DeviceInfoFlag values. | |
Public Member Functions | |
| PIIODevice () | |
| Constructs an empty PIIODevice. | |
| PIIODevice (const PIString &path, DeviceMode mode=ReadWrite) | |
| Constructs PIIODevice with path "path" and open mode "mode". | |
| virtual | ~PIIODevice () |
| Destroys the device base object. | |
| DeviceMode | mode () const |
| Returns current open mode. | |
| void | setMode (DeviceMode m) |
| Sets open mode without reopening the device. | |
| DeviceOptions | options () const |
| Returns current device options. | |
| bool | isOptionSet (DeviceOption o) const |
| Returns whether option "o" is enabled. | |
| void | setOptions (DeviceOptions o) |
| Replaces all current device options with "o". | |
| bool | setOption (DeviceOption o, bool yes=true) |
| Sets option "o" to "yes" and returns its previous state. | |
| DeviceInfoFlags | infoFlags () const |
| Returns device channel characteristics. | |
| PIString | path () const |
| Returns current device path. | |
| void | setPath (const PIString &path) |
| Sets device path without reopening the device. | |
| bool | isReadable () const |
| Returns whether the current mode allows reading. | |
| bool | isWriteable () const |
| Returns whether the current mode allows writing. | |
| bool | isOpened () const |
| Returns whether the device is currently opened. | |
| bool | isClosed () const |
| Returns whether the device is currently closed. | |
| virtual bool | canRead () const |
| Returns whether reading is possible right now. | |
| virtual bool | canWrite () const |
| Returns whether writing is possible right now. | |
| void | setReopenEnabled (bool yes=true) |
| Enables or disables automatic reopen attempts during threaded read. | |
| void | setReopenTimeout (PISystemTime timeout) |
| Sets delay between automatic reopen attempts. | |
| bool | isReopenEnabled () const |
| Returns whether automatic reopen is enabled. | |
| PISystemTime | reopenTimeout () |
| Returns delay between automatic reopen attempts. | |
| void | setThreadedReadSlot (ReadRetFunc func) |
| Sets callback invoked after successful threaded reads. More... | |
| void | setThreadedReadData (void *d) |
| Sets custom user data passed to threaded read callback. | |
| void | setThreadedReadBufferSize (int new_size) |
| Sets background read buffer size in bytes. More... | |
| int | threadedReadBufferSize () const |
| Returns background read buffer size in bytes. | |
| const uchar * | threadedReadBuffer () const |
| Returns pointer to the internal threaded-read buffer. | |
| void * | threadedReadData () const |
| Returns custom data passed to threaded read callback. | |
| bool | isThreadedRead () const |
| Returns whether threaded read is running. | |
| bool | isThreadedReadStopping () const |
| Returns whether threaded read is stopping. | |
| void | startThreadedRead () |
| Starts threaded read. | |
| void | startThreadedRead (ReadRetFunc func) |
| Sets threaded read callback to "func" and starts threaded read. | |
| void | stopThreadedRead () |
| Requests threaded read stop. | |
| void | terminateThreadedRead () |
| Terminate threaded read. More... | |
| bool | waitThreadedReadFinished (PISystemTime timeout={}) |
| Waits until threaded read finishes or "timeout" expires. | |
| uint | threadedReadTimeout () const |
| Returns delay between unsuccessful threaded read attempts in milliseconds. | |
| void | setThreadedReadTimeout (uint ms) |
| Sets delay between unsuccessful threaded read attempts in milliseconds. | |
| bool | isThreadedWrite () const |
| Returns whether threaded write is running. | |
| void | startThreadedWrite () |
| Starts threaded write. | |
| void | stopThreadedWrite () |
| Requests threaded write stop. | |
| void | terminateThreadedWrite () |
| Terminate threaded write. More... | |
| bool | waitThreadedWriteFinished (PISystemTime timeout={}) |
| Waits until threaded write finishes or "timeout" expires. | |
| void | clearThreadedWriteQueue () |
| Clears queued threaded-write tasks. | |
| void | start () |
| Starts both threaded read and threaded write. | |
| void | stop () |
| Requests stop for both threaded read and threaded write. | |
| void | stopAndWait (PISystemTime timeout={}) |
| Stops both background threads and waits for completion. | |
| virtual void | interrupt () |
| Interrupts a blocking device operation. | |
| ssize_t | read (void *read_to, ssize_t max_size) |
| Reads at most "max_size" bytes into "read_to". | |
| ssize_t | read (PIMemoryBlock mb) |
| Reads data into memory block "mb". | |
| PIByteArray | read (ssize_t max_size) |
| Reads at most "max_size" bytes and returns them as PIByteArray. | |
| virtual ssize_t | bytesAvailable () const |
| Returns the number of bytes that are available for reading. More... | |
| ssize_t | write (const void *data, ssize_t max_size) |
| Writes at most "max_size" bytes from "data". | |
| PIByteArray | readForTime (PISystemTime timeout) |
| Reads data for up to "timeout" and returns collected bytes. | |
| ullong | writeThreaded (const void *data, ssize_t max_size) |
| Queues "data" for threaded write and returns task ID. | |
| ullong | writeThreaded (const PIByteArray &data) |
| Queues byte array "data" for threaded write and returns task ID. | |
| bool | configure (const PIString &config_file, const PIString §ion, bool parent_section=false) |
| Configures the device from section "section" of file "config_file". More... | |
| virtual PIConstChars | fullPathPrefix () const |
| Returns device prefix used in full-path notation. Creating devices by unambiguous string. | |
| PIString | constructFullPath () const |
| Returns full-path representation of this device, fullPathPrefix() + "://" + ... | |
| void | configureFromFullPath (const PIString &full_path) |
| Configures the device from full-path parameters. | |
| PIVariantTypes::IODevice | constructVariant () const |
| Builds PIVariantTypes::IODevice description for this device. | |
| void | configureFromVariant (const PIVariantTypes::IODevice &d) |
| Configures the device from PIVariantTypes::IODevice. | |
| ssize_t | write (const PIMemoryBlock &mb) |
| Writes memory block "mb" to the device. | |
Public Member Functions inherited from PIObject | |
| PIObject (const PIString &name=PIString()) | |
Constructs an object and initializes its name property. | |
| virtual | ~PIObject () |
| Destroys the object, raises deleted() and disconnects it from the event graph. | |
| PIString | name () const |
Returns the name property of this object. | |
| virtual const char * | className () const |
| Returns the registered class name of this object. | |
| virtual uint | classNameID () const |
| Returns the hash of className(). | |
| virtual const char * | parentClassName () const |
| Returns the registered parent class name, or an empty string for the root. | |
| bool | debug () const |
| Returns whether piCoutObj output is enabled for this object. | |
| void | setName (const PIString &name) |
Sets the name property of this object. | |
| void | setDebug (bool debug) |
| Enables or disables piCoutObj output for this object. | |
| PIVariant | property (const char *name) const |
| Returns the property with name "name". | |
| void | setProperty (const char *name, const PIVariant &value) |
| Sets the property "name" to "value" and creates it if needed. More... | |
| bool | isPropertyExists (const char *name) const |
| Returns whether the property "name" exists. | |
| void | setThreadSafe (bool yes) |
| Enables or disables the internal object mutex during handler execution. More... | |
| bool | isThreadSafe () const |
| Returns whether the internal object mutex is enabled for handler execution. | |
| bool | execute (const PIString &method, const PIVector< PIVariantSimple > &vl) |
| Executes a registered method or handler method by name with the supplied arguments. More... | |
| bool | execute (const PIString &method) |
| Overload of execute() for a method without arguments. | |
| bool | execute (const PIString &method, const PIVariantSimple &v0) |
| Overload of execute() for one argument. | |
| bool | execute (const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1) |
| Overload of execute() for two arguments. | |
| bool | execute (const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2) |
| Overload of execute() for three arguments. | |
| bool | execute (const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2, const PIVariantSimple &v3) |
| Overload of execute() for four arguments. | |
| bool | executeQueued (PIObject *performer, const PIString &method, const PIVector< PIVariantSimple > &vl) |
| Queues execution of a registered method on the performer object. More... | |
| bool | executeQueued (PIObject *performer, const PIString &method) |
| Overload of executeQueued() for a method without arguments. | |
| bool | executeQueued (PIObject *performer, const PIString &method, const PIVariantSimple &v0) |
| Overload of executeQueued() for one argument. | |
| bool | executeQueued (PIObject *performer, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1) |
| Overload of executeQueued() for two arguments. | |
| bool | executeQueued (PIObject *performer, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2) |
| Overload of executeQueued() for three arguments. | |
| bool | executeQueued (PIObject *performer, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2, const PIVariantSimple &v3) |
| Overload of executeQueued() for four arguments. | |
| void | dump (const PIString &line_prefix=PIString()) const |
| Dumps object diagnostics to the project output stream. | |
| PIStringList | scopeList () const |
| Returns the registered inheritance scope of this object, including its own class. | |
| PIStringList | methodsEH () const |
| Returns full signatures of all registered event and handler methods for this class scope. | |
| bool | isMethodEHContains (const PIString &name) const |
| Returns whether a registered event or handler method with this name exists. | |
| PIString | methodEHArguments (const PIString &name) const |
| Returns the comma-separated argument type list of a registered method. | |
| PIString | methodEHFullFormat (const PIString &name) const |
| Returns the full registered signature of a method. | |
| PIString | methodEHFromAddr (const void *addr) const |
| Returns the registered method name for the specified entry-point address. | |
| void | piDisconnect (const PIString &sig, PIObject *dest, void *ev_h) |
| Disconnects this source object from a specific destination handler for event "sig". | |
| void | piDisconnect (const PIString &sig, PIObject *dest) |
| Disconnects this source object from all connections of event "sig" to destination object "dest". | |
| void | piDisconnect (const PIString &sig) |
| Disconnects this source object from all connections of event "sig". | |
| bool | isPIObject () const |
| Returns whether this pointer still refers to a live PIObject instance. | |
| template<typename T > | |
| bool | isTypeOf () const |
| Returns whether this object belongs to class "T" or one of its registered descendants. | |
| template<typename T > | |
| T * | cast () const |
Returns this object cast to "T" when isTypeOf<T>() succeeds, otherwise nullptr. | |
| void | callQueuedEvents () |
| Executes all queued deliveries posted to this performer object. | |
| bool | maybeCallQueuedEvents () |
| Executes queued deliveries only when this object was used as a performer. More... | |
| void | deleteLater () |
| Schedules the object for deferred deletion. More... | |
| void | deleted (PIObject *o) |
| Raised immediately before object destruction. More... | |
Static Public Member Functions | |
| static PIIODevice * | createFromFullPath (const PIString &full_path) |
| Try to create new device by prefix, configure it with configureFromFullPath() and returns it. More... | |
| static PIIODevice * | createFromVariant (const PIVariantTypes::IODevice &d) |
| Try to create new device by prefix, configure it with configureFromVariant() and returns it. | |
| static PIString | normalizeFullPath (const PIString &full_path) |
| Returns normalized full-path representation for "full_path". | |
| static void | splitFullPath (PIString fpwm, PIString *full_path, DeviceMode *mode=0, DeviceOptions *opts=0) |
| Splits full-path string into path, mode and options. | |
| static PIStringList | availablePrefixes () |
| Returns fullPath prefixes of all registered devices. | |
| static PIStringList | availableClasses () |
| Returns class names of all registered devices. | |
Static Public Member Functions inherited from PIObject | |
| static bool | execute (PIObject *o, const PIString &method, const PIVector< PIVariantSimple > &vl) |
| Static convenience wrapper for execute(). | |
| static bool | execute (PIObject *o, const PIString &method) |
| Static overload of execute() without arguments. | |
| static bool | execute (PIObject *o, const PIString &method, const PIVariantSimple &v0) |
| Static overload of execute() for one argument. | |
| static bool | execute (PIObject *o, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1) |
| Static overload of execute() for two arguments. | |
| static bool | execute (PIObject *o, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2) |
| Static overload of execute() for three arguments. | |
| static bool | execute (PIObject *o, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2, const PIVariantSimple &v3) |
| Static overload of execute() for four arguments. | |
| static bool | executeQueued (PIObject *o, PIObject *performer, const PIString &method, const PIVector< PIVariantSimple > &vl) |
| Static convenience wrapper for executeQueued(). | |
| static bool | executeQueued (PIObject *o, PIObject *performer, const PIString &method) |
| Static overload of executeQueued() without arguments. | |
| static bool | executeQueued (PIObject *o, PIObject *performer, const PIString &method, const PIVariantSimple &v0) |
| Static overload of executeQueued() for one argument. | |
| static bool | executeQueued (PIObject *o, PIObject *performer, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1) |
| Static overload of executeQueued() for two arguments. | |
| static bool | executeQueued (PIObject *o, PIObject *performer, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2) |
| Static overload of executeQueued() for three arguments. | |
| static bool | executeQueued (PIObject *o, PIObject *performer, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2, const PIVariantSimple &v3) |
| Static overload of executeQueued() for four arguments. | |
| static PIObject::Connection | piConnect (PIObject *src, const PIString &sig, PIObject *dest_o, void *dest, void *ev_h, void *e_h, int args, const char *loc) |
Low-level direct connection helper behind the legacy CONNECT* macros. | |
| static PIObject::Connection | piConnectU (PIObject *src, const PIString &sig, PIObject *dest_o, void *dest, const PIString &hname, const char *loc, PIObject *performer=0) |
| Low-level name-based connection helper behind CONNECTU() and CONNECTU_QUEUED(). | |
| static PIObject::Connection | piConnectLS (PIObject *src, const PIString &sig, std::function< void()> *f, const char *loc) |
| Low-level helper that connects an event to a lambda or functor wrapper. | |
| static void | piDisconnect (PIObject *src, const PIString &sig, PIObject *dest, void *ev_h) |
| Disconnects source object "src" from a specific destination handler for event "sig". | |
| static void | piDisconnect (PIObject *src, const PIString &sig, PIObject *dest) |
| Disconnects source object "src" from all connections of event "sig" to destination object "dest". | |
| static void | piDisconnect (PIObject *src, const PIString &sig) |
| Disconnects source object "src" from all connections of event "sig". | |
| static void | raiseEvent (PIObject *sender, const uint eventID) |
| Internal event delivery helper for registered events without arguments. | |
| template<typename T0 > | |
| static void | raiseEvent (PIObject *sender, const uint eventID, const T0 &v0=T0()) |
| Internal event delivery helper for registered events with one argument. | |
| template<typename T0 , typename T1 > | |
| static void | raiseEvent (PIObject *sender, const uint eventID, const T0 &v0=T0(), const T1 &v1=T1()) |
| Internal event delivery helper for registered events with two arguments. | |
| template<typename T0 , typename T1 , typename T2 > | |
| static void | raiseEvent (PIObject *sender, const uint eventID, const T0 &v0=T0(), const T1 &v1=T1(), const T2 &v2=T2()) |
| Internal event delivery helper for registered events with three arguments. | |
| template<typename T0 , typename T1 , typename T2 , typename T3 > | |
| static void | raiseEvent (PIObject *sender, const uint eventID, const T0 &v0=T0(), const T1 &v1=T1(), const T2 &v2=T2(), const T3 &v3=T3()) |
| Internal event delivery helper for registered events with four arguments. | |
| static PIObject * | findByName (const PIString &name) |
Returns the first live object with name "name", or nullptr. | |
| static bool | isPIObject (const PIObject *o) |
| Returns whether "o" points to a live PIObject instance. | |
| static bool | isPIObject (const void *o) |
| Overload of isPIObject() for an untyped pointer. | |
| template<typename T > | |
| static bool | isTypeOf (const PIObject *o) |
| Returns whether "o" belongs to class "T" or one of its registered descendants. | |
| template<typename T > | |
| static bool | isTypeOf (const void *o) |
| Overload of isTypeOf() for an untyped pointer. | |
| static PIString | simplifyType (const char *a, bool readable=true) |
| Simplifies a C++ type spelling for registered-method metadata. | |
Protected Member Functions | |
| virtual bool | configureDevice (const void *e_main, const void *e_parent=0) |
| Reimplement to configure the device from "e_main" and optional "e_parent" entries cast to PIConfig::Entry*. | |
| virtual bool | openDevice ()=0 |
| Reimplement to open device, return value will be set to "opened_" variable. Don't call this function in subclass, use open()! | |
| virtual bool | closeDevice () |
| Reimplement to close the device; inverse return value is stored into "opened_". | |
| virtual ssize_t | readDevice (void *read_to, ssize_t max_size) |
| Reimplement this function to read from your device. | |
| virtual ssize_t | writeDevice (const void *data, ssize_t max_size) |
| Reimplement this function to write to your device. | |
| virtual bool | threadedRead (const uchar *readed, ssize_t size) |
| Called after threaded read receives data; default implementation calls the external callback set by setThreadedReadSlot(). | |
| virtual PIString | constructFullPathDevice () const |
| Reimplement to build device-specific part of full-path string. Default implementation returns path(). | |
| virtual void | configureFromFullPathDevice (const PIString &full_path) |
| Reimplement to configure the device from device-specific full-path parameters. Default implementation calls setPath(). | |
| virtual PIPropertyStorage | constructVariantDevice () const |
| Reimplement to build device-specific variant properties. Default implementation returns PIPropertyStorage with "path". | |
| virtual void | configureFromVariantDevice (const PIPropertyStorage &d) |
| Reimplement to configure the device from PIPropertyStorage. Mode and options are already applied. Default implementation applies "path". | |
| virtual void | optionsChanged () |
| Reimplement to react to changed device options. | |
| virtual DeviceInfoFlags | deviceInfoFlags () const |
| Reimplement to report actual DeviceInfoFlags. Default implementation returns 0. | |
| virtual void | threadedReadBufferSizeChanged () |
| Reimplement to react to new threadedReadBufferSize(). | |
Protected Member Functions inherited from PIObject | |
| PIObject * | emitter () const |
| Returns the source object that raised the current event. More... | |
| virtual void | propertyChanged (const char *name) |
| Virtual method called after property "name" has been changed by setProperty(). | |
Related Functions | |
(Note that these are not member functions.) | |
| template<typename T > | |
| T | readDeviceSetting (const PIString &name, const T &def, const PIConfig::Entry *em, const PIConfig::Entry *ep) |
| Helper for reading device settings from configuration entries. More... | |
| #define | REGISTER_DEVICE(class) |
| Enable device instances creation with PIIODevice::createFromFullPath() function. More... | |
| #define | PIIODEVICE(class, prefix) |
| Use this macro instead of PIOBJECT when describe your own PIIODevice. More... | |
Related Functions inherited from PIObject | |
| #define | piCoutObj |
| Macro used for conditional (piDebug && PIObject::debug()) output to PICout(StdOut) for subclasses of PIObject. | |
| #define | piCerrObj |
| Macro used for conditional (piDebug && PIObject::debug()) output to PICout(StdErr) for subclasses of PIObject. | |
| #define | PIOBJECT(name) |
| Put this macro inside a direct PIObject subclass definition to enable registered events, event handlers and class metadata. | |
| #define | PIOBJECT_SUBCLASS(name, parent) |
| Put this macro inside a PIObject subclass definition to inherit registered methods and class scope from "parent". | |
| #define | EVENT_HANDLER0(ret, name) ret name() |
Declare a registered event handler method with signature ret name(). | |
| #define | EVENT_HANDLER1(ret, name, type0, var0) ret name(type0 var0) |
| Declare a registered event handler method with one argument. | |
| #define | EVENT_HANDLER2(ret, name, type0, var0, type1, var1) ret name(type0 var0, type1 var1) |
| Declare a registered event handler method with two arguments. | |
| #define | EVENT_HANDLER3(ret, name, type0, var0, type1, var1, type2, var2) ret name(type0 var0, type1 var1, type2 var2) |
| Declare a registered event handler method with three arguments. | |
| #define | EVENT_HANDLER4(ret, name, type0, var0, type1, var1, type2, var2, type3, var3) ret name(type0 var0, type1 var1, type2 var2, type3 var3) |
| Declare a registered event handler method with four arguments. | |
| #define | EVENT_HANDLER EVENT_HANDLER0 |
| Synonym of EVENT_HANDLER0. | |
| #define | EVENT_VHANDLER0(ret, name) virtual ret name() |
Declare a virtual registered event handler method with signature virtual ret name(). | |
| #define | EVENT_VHANDLER1(ret, name, type0, var0) virtual ret name(type0 var0) |
| Declare a virtual registered event handler method with one argument. | |
| #define | EVENT_VHANDLER2(ret, name, type0, var0, type1, var1) virtual ret name(type0 var0, type1 var1) |
| Declare a virtual registered event handler method with two arguments. | |
| #define | EVENT_VHANDLER3(ret, name, type0, var0, type1, var1, type2, var2) virtual ret name(type0 var0, type1 var1, type2 var2) |
| Declare a virtual registered event handler method with three arguments. | |
| #define | EVENT_VHANDLER4(ret, name, type0, var0, type1, var1, type2, var2, type3, var3) virtual ret name(type0 var0, type1 var1, type2 var2, type3 var3) |
| Declare a virtual registered event handler method with four arguments. | |
| #define | EVENT_VHANDLER EVENT_VHANDLER0 |
| Synonym of EVENT_VHANDLER0. | |
| #define | EVENT0(name) void name(); |
| Declare an event method with no arguments. | |
| #define | EVENT1(name, type0, var0) void name(type0 var0); |
| Declare an event method with one argument. | |
| #define | EVENT2(name, type0, var0, type1, var1) void name(type0 var0, type1 var1); |
| Declare an event method with two arguments. | |
| #define | EVENT3(name, type0, var0, type1, var1, type2, var2) void name(type0 var0, type1 var1, type2 var2); |
| Declare an event method with three arguments. | |
| #define | EVENT4(name, type0, var0, type1, var1, type2, var2, type3, var3) void name(type0 var0, type1 var1, type2 var2, type3 var3); |
| Declare an event method with four arguments. | |
| #define | EVENT EVENT0 |
| Synonym of EVENT0. | |
| #define | RAISE_EVENT0(src, event) |
| Compatibility helper that raises event "event" on source object "src". | |
| #define | RAISE_EVENT1(src, event, v0) |
| Compatibility helper that raises event "event" with one argument. | |
| #define | RAISE_EVENT2(src, event, v0, v1) |
| Compatibility helper that raises event "event" with two arguments. | |
| #define | RAISE_EVENT3(src, event, v0, v1, v2) |
| Compatibility helper that raises event "event" with three arguments. | |
| #define | RAISE_EVENT4(src, event, v0, v1, v2, v3) |
| Compatibility helper that raises event "event" with four arguments. | |
| #define | CONNECTU(src, event, dest, handler) |
| Connect event "event" from object "src" to event handler or event "handler" of object "dest". More... | |
| #define | CONNECTU_QUEUED(src, event, dest, handler, performer) |
| Connect event "event" from object "src" to event handler or event "handler" of object "dest". More... | |
| #define | CONNECTL(src, event, functor) |
| Connect event "event" from object "src" to lambda-expression "functor". More... | |
| #define | CONNECT0(ret, src, event, dest, handler) |
| Legacy compatibility helper that connects an event to a registered handler with compile-time signature spelling. More... | |
| #define | CONNECT1(ret, type0, src, event, dest, handler) |
| Legacy compatibility helper for a one-argument registered event or handler. More... | |
| #define | CONNECT2(ret, type0, type1, src, event, dest, handler) |
| Legacy compatibility helper for a two-argument registered event or handler. More... | |
| #define | CONNECT3(ret, type0, type1, type2, src, event, dest, handler) |
| Legacy compatibility helper for a three-argument registered event or handler. More... | |
| #define | CONNECT4(ret, type0, type1, type2, type3, src, event, dest, handler) |
| Legacy compatibility helper for a four-argument registered event or handler. More... | |
| #define | CONNECT CONNECT0 |
| Synonym of CONNECT0. More... | |
| #define | WEAK_CONNECT0(ret, src, event, dest, handler) |
| Legacy compatibility helper that skips source method verification. More... | |
| #define | WEAK_CONNECT1(ret, type0, src, event, dest, handler) |
| Legacy compatibility helper that skips source method verification for one argument. More... | |
| #define | WEAK_CONNECT2(ret, type0, type1, src, event, dest, handler) |
| Legacy compatibility helper that skips source method verification for two arguments. More... | |
| #define | WEAK_CONNECT3(ret, type0, type1, type2, src, event, dest, handler) |
| Legacy compatibility helper that skips source method verification for three arguments. More... | |
| #define | WEAK_CONNECT4(ret, type0, type1, type2, type3, src, event, dest, handler) |
| Legacy compatibility helper that skips source method verification for four arguments. More... | |
| #define | WEAK_CONNECT WEAK_CONNECT0 |
| Synonym of WEAK_CONNECT0. More... | |
| #define | DISCONNECT0(ret, src, event, dest, handler) |
| Disconnect a registered event from a registered event handler. | |
| #define | DISCONNECT1(ret, type0, src, event, dest, handler) |
| Disconnect a one-argument registered event from a registered event handler. | |
| #define | DISCONNECT2(ret, type0, type1, src, event, dest, handler) |
| Disconnect a two-argument registered event from a registered event handler. | |
| #define | DISCONNECT3(ret, type0, type1, type2, src, event, dest, handler) |
| Disconnect a three-argument registered event from a registered event handler. | |
| #define | DISCONNECT4(ret, type0, type1, type2, type3, src, event, dest, handler) |
| Disconnect a four-argument registered event from a registered event handler. | |
| #define | DISCONNECT DISCONNECT0 |
| Synonym of DISCONNECT0. | |
| #define | HANDLER(handler) |
| Low-level helper that expands to the registered handler entry point. | |
Handlers | |
| bool | open () |
| Opens the device with current path and mode. | |
| bool | open (const PIString &_path) |
| Opens the device with path "path". | |
| bool | open (DeviceMode _mode) |
| Opens the device with mode "mode". | |
| bool | open (const PIString &_path, DeviceMode _mode) |
| Opens the device with path "path" and mode "mode". | |
| bool | close () |
| Closes the device. | |
| ssize_t | write (PIByteArray data) |
| Writes "data" to the device. | |
Virtual handlers | |
| virtual void | flush () |
| Immediately flushes device buffers. | |
Base class for input/output devices.
This class provide open/close logic, threaded read/write and virtual input/output functions read() and write(). You should implement pure virtual function openDevice() in your subclass.
PIIODevice have boolean variable indicated open status. Returns of functions openDevice() and closeDevice() change this variable.
PIIODevice based on PIThread, so it`s overload run() to exec read() in background thread. If read is successful virtual function threadedRead() is executed. Default implementation of this function execute external static function set by setThreadedReadSlot() with data set by setThreadedReadData(). Extrenal static function should have format
bool func_name(void * Threaded_read_data, uchar * readed_data, int readed_size)
Threaded read starts with function startThreadedRead().
PIIODevice aggregate another PIThread to perform a threaded write by function writeThreaded(). This function add task to internal queue and return queue entry ID. You should start write thread by function startThreadedWrite. On successful write event threadedWriteEvent is raised with two arguments - task ID and written bytes count.
PIIODevice have internal buffer for threaded read, and threadedRead() function receive pointer to this buffer in first argument. You can adjust size of this buffer by function setThreadedReadBufferSize()
Default size of this buffer is 4096 bytes.
When threaded read is begin its call open() if device is closed. While threaded read running PIIODevice check if device opened every read and if not call open() every reopen timeout if reopen enabled. Reopen timeout is set by setReopenTimeout(), reopen enable is set by setReopenEnabled().
This is virtual function configureDevice() which executes when configure() executes. This function takes two arguments: "e_main" and "e_parent" as void*. There are pointers to PIConfig::Entry entries of section "section" and their parent. If there is no parent "e_parent" = 0. Function configure() set three parameters of device: "reopenEnabled", "reopenTimeout" and "threadedReadBufferSize", then execute function configureDevice().
Each ancestor of PIIODevice reimlements configureDevice() function to be able to be confured from configuration file. This parameters described at section "Configurable parameters" in the class reference.
Usage example:
Implementation example:
There are some virtual functions to describe child class without its declaration.
constructFullPath() should returns full unambiguous string, contains prefix and all device parameters
configureFromFullPath() provide configuring device from full unambiguous string without prefix and "://"
Macro PIIODEVICE should be used instead of PIOBJECT
Macro REGISTER_DEVICE should be used after declaration of class, i.e. at the last line of *.h file
If custom I/O device corresponds there rules, it can be returned by function createFromFullPath().
Each PIP I/O device has custom unambiguous string description:
| void PIIODevice::setThreadedReadSlot | ( | ReadRetFunc | func | ) |
Sets callback invoked after successful threaded reads.
Set external static function of threaded read that will be executed at every successful threaded read. Function should have format "bool func(void * data, uchar * readed, int size)"
| void PIIODevice::setThreadedReadBufferSize | ( | int | new_size | ) |
Sets background read buffer size in bytes.
Default size is 4096 bytes. If your device can read at single read more than 4096 bytes you should use this function to adjust buffer size
| void PIIODevice::terminateThreadedRead | ( | ) |
Terminate threaded read.
| void PIIODevice::terminateThreadedWrite | ( | ) |
Terminate threaded write.
|
inlinevirtual |
Returns the number of bytes that are available for reading.
This function is commonly used with sequential devices to determine the number of bytes to allocate in a buffer before reading. If function returns -1 it mean that number of bytes undefined.
Reimplemented in PICloudClient, PICloudServer::Client, PIFile, PIIOByteArray, PIIOString, PIPeer, PISPI, PITransparentDevice, and PIPacketExtractor.
| bool PIIODevice::configure | ( | const PIString & | config_file, |
| const PIString & | section, | ||
| bool | parent_section = false |
||
| ) |
Configures the device from section "section" of file "config_file".
If "parent_section" is true, inherited parameters are also read from the parent section.
|
static |
Try to create new device by prefix, configure it with configureFromFullPath() and returns it.
To function configureFromFullPath() "full_path" passed without fullPathPrefix() and "://". See Creating devices by unambiguous string
|
related |
Helper for reading device settings from configuration entries.
Tries to read "name" from parent section ep first, then from local section em, and falls back to "def" when neither exists.
|
related |
Enable device instances creation with PIIODevice::createFromFullPath() function.
This macro may be placed in cpp or header file, but preferred place is header
|
related |
Use this macro instead of PIOBJECT when describe your own PIIODevice.
"prefix" is a unique device prefix used in createFromFullPath().