PIP  0.4.0_beta2
Platform-Independent Primitives
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
PIConnection Class Reference

Complex Input/Output point. More...

+ Inheritance diagram for PIConnection:

Public Member Functions

 PIConnection ()
 Constructs an empty connection.
 
 PIConnection (const PIString &config, const PIString &name)
 Constructs connection and configure it from config file "config" from section "name".
 
bool configureFromConfig (const PIString &config, const PIString &name)
 Configure connection from config file "config" from section "name". Returns if configuration was successful. More...
 
PIString makeConfig () const
 Returns config file section of current connection configuration.
 
PIIODeviceaddDevice (const PIString &full_path, PIIODevice::DeviceMode mode=PIIODevice::ReadWrite, bool start=false)
 Add device with full path "full_path", open mode "mode" to Device pool and connection. More...
 
bool removeDevice (const PIString &full_path)
 Remove device with full path "full_path" from connection. More...
 
void removeAllDevices ()
 Remove all device from connection. More...
 
PIIODevicedevice (const PIString &full_path) const
 Returns device with full path "full_path" or null if there is no such device.
 
PIVector< PIIODevice * > boundedDevices () const
 Returns all devices bounded to this connection.
 
PIPacketExtractoraddFilter (const PIString &name, const PIString &full_path, PIPacketExtractor::SplitMode mode=PIPacketExtractor::None)
 Add filter with name "name" to device with full path "full_path". More...
 
PIPacketExtractoraddFilter (const PIString &name, const PIIODevice *dev, PIPacketExtractor::SplitMode mode=PIPacketExtractor::None)
 Add filter with name "name" to device "dev".
 
bool removeFilter (const PIString &name, const PIString &full_path)
 Remove from filter with name "name" device with full path "full_path". More...
 
bool removeFilter (const PIString &name, const PIIODevice *dev)
 Remove from filter with name "name" device "dev".
 
bool removeFilter (const PIString &name)
 Remove filter with name "name". Returns if filter was removed.
 
void removeAllFilters ()
 Remove all filters from connection.
 
PIVector< PIPacketExtractor * > filters () const
 Returns all filters of connection.
 
PIStringList filterNames () const
 Returns all filter names of connection.
 
PIPacketExtractorfilter (const PIString &name) const
 Returns PIPacketExtractor * assosiated with filter "name" or null if there is no such filter.
 
PIVector< PIIODevice * > filterBoundedDevices (const PIString &name) const
 Returns all devices bounded to filter "name".
 
bool addChannel (const PIString &name_from, const PIString &name_to)
 Add to connection channel from "name_from" to "name_to". More...
 
bool addChannel (const PIString &name_from, const PIIODevice *dev_to)
 Add to connection channel from "name_from" to "dev_to".
 
bool addChannel (const PIIODevice *dev_from, const PIString &name_to)
 Add to connection channel from "dev_from" to "name_to".
 
bool addChannel (const PIIODevice *dev_from, const PIIODevice *dev_to)
 Add to connection channel from "dev_from" to "dev_to".
 
bool removeChannel (const PIString &name_from, const PIString &name_to)
 Remove from connection channel from "name_from" to "name_to". More...
 
bool removeChannel (const PIString &name_from, const PIIODevice *dev_to)
 Remove from connection channel from "name_from" to "dev_to".
 
bool removeChannel (const PIIODevice *dev_from, const PIString &name_to)
 Remove from connection channel from "dev_from" to "name_to".
 
bool removeChannel (const PIIODevice *dev_from, const PIIODevice *dev_to)
 Remove from connection channel from "dev_from" to "dev_to".
 
bool removeChannel (const PIString &name_from)
 Remove from connection all channels from "name_from". More...
 
bool removeChannel (const PIIODevice *dev_from)
 Remove from connection all channels from "dev_from".
 
void removeAllChannels ()
 Remove from connection all channels.
 
PIVector< PIPair< PIString,
PIString > > 
channels () const
 Returns all channels of this connection as full pathes or filter names pair array (from, to)
 
void startThreadedRead (const PIString &full_path)
 Start read thread of device with full path "full_path".
 
void startThreadedRead (const PIIODevice *dev)
 Start read thread of device "dev".
 
void startAllThreadedReads ()
 Start read threads of all Device pool device.
 
void stopThreadedRead (const PIString &full_path)
 Stop read thread of device with full path "full_path".
 
void stopThreadedRead (const PIIODevice *dev)
 Stop read thread of device "dev".
 
void stopAllThreadedReads ()
 Stop read threads of all Device pool device.
 
bool isEmpty () const
 Returns if there is no devices in this connection.
 
int write (const PIString &full_path, const PIByteArray &data)
 Write data "data" to device with full path "full_path" and returns result of write() function of device.
 
- Public Member Functions inherited from PIObject
 PIObject (const PIString &name=PIString())
 Contructs PIObject with name "name".
 
PIString name () const
 Returns object name.
 
virtual const char * className () const
 Returns object class name.
 
bool debug () const
 Return if debug of this object is active.
 
void setName (const PIString &name)
 Set object name.
 
void setDebug (bool debug)
 Set object debug active.
 
const PIMap< PIString,
PIVariant > & 
properties () const
 Returns properties of the object.
 
int propertiesCount () const
 Returns properties count of the object.
 
PIVariant property (const PIString &name) const
 Returns property with name "name".
 
void setProperty (const PIString &name, const PIVariant &value)
 Set property with name "name" to "value". If there is no such property in object it will be added.
 
bool isPropertyExists (const PIString &name) const
 Returns if property with name "name" exists.
 

Static Public Member Functions

static PIVector< PIConnection * > allConnections ()
 Returns all connections in application.
 
static PIVector< PIIODevice * > allDevices ()
 Returns all devices in Device pool.
 
- Static Public Member Functions inherited from PIObject
static void piDisconnect (PIObject *src, const PIString &sig)
 Disconnect object "src" from all connections with event name "sig".
 
static void piDisconnect (PIObject *src)
 Disconnect object "src" from all connections, i.e. all connections where object "src" is emitter.
 
static PIObjectfindByName (const PIString &name)
 Returns PIObject* with name "name" or 0, if there is no object found.
 

Protected Member Functions

virtual void dataReceived (const PIString &from, const PIByteArray &data)
 Executes on data received from device with full path "from".
 
virtual void packetReceived (const PIString &from, const PIByteArray &data)
 Executes on packet received from filter with name "from".
 
virtual bool filterValidateHeader (const PIString &filter_name, uchar *src, uchar *rec, int size)
 Validate header "rec" with source header "src" and size "size", executes from filter "filter_name".
 
virtual bool filterValidateFooter (const PIString &filter_name, uchar *src, uchar *rec, int size)
 Validate footer "rec" with source footer "src" and size "size", executes from filter "filter_name".
 
virtual bool filterValidatePayload (const PIString &filter_name, uchar *rec, int size)
 Validate payload "rec" with size "size", executes from filter "filter_name".
 
- Protected Member Functions inherited from PIObject
PIObjectemitter () const
 Returns PIObject* which has raised an event. This value is correct only in definition of some event handler.
 
virtual void propertyChanged (const PIString &name)
 Virtual function executes after property with name "name" has been changed.
 

Events

void dataReceivedEvent (const PIString &from, const PIByteArray &data)
 Raise on data received from device with full path "from".
 
void packetReceivedEvent (const PIString &from, const PIByteArray &data)
 Raise on packet received from filter with name "from".
 

Additional Inherited Members

Detailed Description

Complex Input/Output point.

Synopsis

PIConnection provides abstract layer over physical devices, filtering and connecting data streams. Each PIConnection works through Device Pool, so several PIConnections can read from single physical device. General scheme:

piconnection.png

Device pool concept

Device pool is static object, single for each application, which contains unique devices. Each PIConnection works with real devices through Device pool. Each device has assosiated thread for read and it can be started or stopped with PIConnection functions startThreadedRead() and stopThreadedRead().

Configuration

You can create PIConnection from config file section or configure it later with function configureFromConfig(). Devices describes with its full pathes, for details see Creating devices by unambiguous string. Example:

piconnection_conf.png

Member Function Documentation

bool PIConnection::configureFromConfig ( const PIString config,
const PIString name 
)

Configure connection from config file "config" from section "name". Returns if configuration was successful.

Warning: all devices, filters and channels removed before configure!

PIIODevice * PIConnection::addDevice ( const PIString full_path,
PIIODevice::DeviceMode  mode = PIIODevice::ReadWrite,
bool  start = false 
)

Add device with full path "full_path", open mode "mode" to Device pool and connection.

Returns pointer to device or null if device can not be created. If "start" is true, read thread is started immediately. Else, you can start read thread with functions startThreadedRead() or startAllThreadedReads(). By default, read thread doesn`t start

bool PIConnection::removeDevice ( const PIString full_path)

Remove device with full path "full_path" from connection.

Returns if device was removed. If there is no connection bounded to this device, it will be removed from Device pool

void PIConnection::removeAllDevices ( )

Remove all device from connection.

If there is no connection bounded to there devices, they removed from Device pool

PIPacketExtractor * PIConnection::addFilter ( const PIString name,
const PIString full_path,
PIPacketExtractor::SplitMode  mode = PIPacketExtractor::None 
)

Add filter with name "name" to device with full path "full_path".

If there is no filter with name "name", connection create new with split mode "mode" and bound to it device "full_path". If filter with name "name" already exists, device "full_path" add to this filter. Attention! "mode" is altual olny if new filter was created! This function returns PIPacketExtractor * assosiated with this filter

bool PIConnection::removeFilter ( const PIString name,
const PIString full_path 
)

Remove from filter with name "name" device with full path "full_path".

If there is no devices bounded to this filter, it will be removed. Returns if device was removed

bool PIConnection::addChannel ( const PIString name_from,
const PIString name_to 
)

Add to connection channel from "name_from" to "name_to".

"name_from" and "name_to" can be full pathes of devices or filter names. Returns false if there if no such device or filter, else create channel and returns true

bool PIConnection::removeChannel ( const PIString name_from,
const PIString name_to 
)

Remove from connection channel from "name_from" to "name_to".

"name_from" and "name_to" can be full pathes of devices or filter names. Returns false if there if no such device or filter, else remove channel and returns true

bool PIConnection::removeChannel ( const PIString name_from)

Remove from connection all channels from "name_from".

"name_from" can be full path of device or filter name. Returns false if there if no such device or filter, else remove channels and returns true