PIP 5.5.3
Platform-Independent Primitives
Classes | Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | List of all members
PISerial Class Reference

Serial device. More...

#include <piserial.h>

Inheritance diagram for PISerial:
Inheritance graph
[legend]

Classes

struct  DeviceInfo
 Information about serial device. More...
 

Public Types

enum  Parameters { ParityControl = 0x1 , ParityOdd = 0x2 , TwoStopBits = 0x4 }
 Parameters of PISerial. More...
 
enum  Speed {
  S50 = 50 , S75 = 75 , S110 = 110 , S300 = 300 ,
  S600 = 600 , S1200 = 1200 , S2400 = 2400 , S4800 = 4800 ,
  S9600 = 9600 , S14400 = 14400 , S19200 = 19200 , S38400 = 38400 ,
  S57600 = 57600 , S115200 = 115200 , S230400 = 230400 , S460800 = 460800 ,
  S500000 = 500000 , S576000 = 576000 , S921600 = 921600 , S1000000 = 1000000 ,
  S1152000 = 1152000 , S1500000 = 1500000 , S2000000 = 2000000 , S2500000 = 2500000 ,
  S3000000 = 3000000 , S3500000 = 3500000 , S4000000 = 4000000
}
 Speed of PISerial. More...
 
- Public Types inherited from PIIODevice
enum  DeviceMode { ReadOnly = 0x01 , WriteOnly = 0x02 , ReadWrite = 0x03 }
 Open modes for PIIODevice. More...
 
enum  DeviceOption { BlockingRead = 0x01 , BlockingWrite = 0x02 }
 Options for PIIODevice, works with some devices. More...
 
enum  DeviceInfoFlag { Sequential = 0x01 , Reliable = 0x02 }
 Characteristics of PIIODevice channel. More...
 

Public Member Functions

 PISerial ()
 Contructs an empty PISerial.
 
 PISerial (const PIString &device, PISerial::Speed speed=S115200, PIFlags< PISerial::Parameters > params=0)
 Contructs PISerial with device name "device", speed "speed" and parameters "params".
 
void setSpeed (PISerial::Speed speed)
 Set both input and output speed to "speed".
 
void setOutSpeed (PISerial::Speed speed)
 Set output speed to "speed".
 
void setInSpeed (PISerial::Speed speed)
 Set input speed to "speed".
 
void setDevice (const PIString &dev)
 Set device name to "dev".
 
void setParameters (PIFlags< PISerial::Parameters > parameters_)
 Set parameters to "parameters_".
 
void setParameter (PISerial::Parameters parameter, bool on=true)
 Set parameter "parameter" to "on" state.
 
bool isParameterSet (PISerial::Parameters parameter) const
 Returns if parameter "parameter" is set.
 
PIFlags< PISerial::Parametersparameters () const
 Returns parameters.
 
void setDataBitsCount (int bits)
 Set data bits count. Valid range is from 5 to 8, befault is 8.
 
int dataBitsCount () const
 Returns data bits count.
 
bool setPin (int number, bool on)
 Set pin number "number" to logic level "on". Valid numbers are 4 (DTR) and 7 (RTS)
 
bool isPin (int number) const
 Returns pin number "number" logic level. Valid numbers range is from 1 to 9.
 
bool setBreak (bool enabled)
 Switch transmission line in break. More...
 
PIString device () const
 Returns device name.
 
PISerial::Speed outSpeed () const
 Returns output speed.
 
PISerial::Speed inSpeed () const
 Returns input speed.
 
virtual void flush () override
 Discard all buffered input and output data.
 
bool read (void *read_to, int max_size, double timeout_ms)
 Read from device no more "max_size" bytes into "read_to" with "timeout_ms" timeout. More...
 
PIString readString (int size=-1, double timeout_ms=1000.)
 Read from device for "timeout_ms" timeout or for "size" bytes. More...
 
PIByteArray readData (int size=-1, double timeout_ms=1000.)
 Read from device for "timeout_ms" timeout or for "size" bytes. More...
 
bool send (const void *data, int size)
 Write to device data "data" with maximum size "size". Returns if sended bytes count = "size".
 
bool send (const PIByteArray &data)
 Write to device byte array "data". Returns if sended bytes count = size of "data".
 
void interrupt () override
 Interrupt blocking operation.
 
- Public Member Functions inherited from PIIODevice
 PIIODevice ()
 Constructs a empty PIIODevice.
 
 PIIODevice (const PIString &path, DeviceMode mode=ReadWrite)
 Constructs PIIODevice with path "path" and open mode "mode".
 
DeviceMode mode () const
 Returns current open mode of device.
 
void setMode (DeviceMode m)
 Set open mode of device. Don`t reopen device.
 
DeviceOptions options () const
 Returns current device options.
 
bool isOptionSet (DeviceOption o) const
 Returns current device option "o" state.
 
void setOptions (DeviceOptions o)
 Set device options.
 
bool setOption (DeviceOption o, bool yes=true)
 Set device option "o" to "yes" and returns previous state.
 
DeviceInfoFlags infoFlags () const
 Returns device characteristic flags.
 
PIString path () const
 Returns current path of device.
 
void setPath (const PIString &path)
 Set path of device. Don`t reopen device.
 
bool isReadable () const
 Returns if mode is ReadOnly or ReadWrite.
 
bool isWriteable () const
 Returns if mode is WriteOnly or ReadWrite.
 
bool isOpened () const
 Returns if device is successfully opened.
 
bool isClosed () const
 Returns if device is closed.
 
virtual bool canRead () const
 Returns if device can read now.
 
virtual bool canWrite () const
 Returns if device can write now.
 
void setReopenEnabled (bool yes=true)
 Set calling of open() enabled while threaded read on closed device.
 
void setReopenTimeout (PISystemTime timeout)
 Set timeout between open() tryings if reopen is enabled.
 
bool isReopenEnabled () const
 Returns reopen enable.
 
PISystemTime reopenTimeout ()
 Returns reopen timeout.
 
void setThreadedReadSlot (ReadRetFunc func)
 Set threaded read callback. More...
 
void setThreadedReadData (void *d)
 Set custom data that will be passed to threaded read callback.
 
void setThreadedReadBufferSize (int new_size)
 Set size of threaded read buffer. More...
 
int threadedReadBufferSize () const
 Returns size of threaded read buffer.
 
const uchar * threadedReadBuffer () const
 Returns content of threaded read buffer.
 
void * threadedReadData () const
 Returns custom data that will be passed to threaded read callback.
 
bool isThreadedRead () const
 Returns if threaded read is started.
 
bool isThreadedReadStopping () const
 Returns if threaded read is stopping.
 
void startThreadedRead ()
 Start threaded read.
 
void startThreadedRead (ReadRetFunc func)
 Start threaded read and assign threaded read callback to "func".
 
void stopThreadedRead ()
 Stop threaded read.
 
void terminateThreadedRead ()
 Terminate threaded read. More...
 
bool waitThreadedReadFinished (PISystemTime timeout={})
 Wait for threaded read finish no longer than "timeout".
 
bool isThreadedWrite () const
 Returns if threaded write is started.
 
void startThreadedWrite ()
 Start threaded write.
 
void stopThreadedWrite ()
 Stop threaded write.
 
void terminateThreadedWrite ()
 Terminate threaded write. More...
 
bool waitThreadedWriteFinished (PISystemTime timeout={})
 Wait for threaded write finish no longer than "timeout".
 
void clearThreadedWriteQueue ()
 Clear threaded write task queue.
 
void start ()
 Start both threaded read and threaded write.
 
void stop ()
 Stop both threaded read and threaded write.
 
void stopAndWait (PISystemTime timeout={})
 Stop both threaded read and threaded write and wait for finish.
 
virtual void interrupt ()
 Interrupt blocking operation.
 
ssize_t read (void *read_to, ssize_t max_size)
 Read from device maximum "max_size" bytes to "read_to".
 
ssize_t read (PIMemoryBlock mb)
 Read from device to memory block "mb".
 
PIByteArray read (ssize_t max_size)
 Read from device maximum "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)
 Write maximum "max_size" bytes of "data" to device.
 
PIByteArray readForTime (PISystemTime timeout)
 Read from device for "timeout" and return readed data as PIByteArray.
 
ullong writeThreaded (const void *data, ssize_t max_size)
 Add task to threaded write queue and return task ID.
 
ullong writeThreaded (const PIByteArray &data)
 Add task to threaded write queue and return task ID.
 
bool configure (const PIString &config_file, const PIString &section, bool parent_section=false)
 Configure device from section "section" of file "config_file", if "parent_section" parent section also will be read.
 
virtual PIConstChars fullPathPrefix () const
 Returns full unambiguous string prefix. Creating devices by unambiguous string.
 
PIString constructFullPath () const
 Returns full unambiguous string, describes this device, fullPathPrefix() + "://" + ...
 
void configureFromFullPath (const PIString &full_path)
 Configure device with parameters of full unambiguous string.
 
PIVariantTypes::IODevice constructVariant () const
 Returns PIVariantTypes::IODevice, describes this device.
 
void configureFromVariant (const PIVariantTypes::IODevice &d)
 Configure device from PIVariantTypes::IODevice.
 
ssize_t write (const PIMemoryBlock &mb)
 Write memory block "mb" to device.
 
bool open ()
 Open device.
 
bool open (const PIString &_path)
 Open device with path "path".
 
bool close ()
 Close device.
 
ssize_t write (PIByteArray data)
 Write "data" to device.
 
void opened ()
 Raise if succesfull open.
 
void closed ()
 Raise if succesfull close.
 
void threadedReadEvent (const uchar *readed, ssize_t size)
 Raise if read thread succesfull read some data.
 
void threadedWriteEvent (ullong id, ssize_t written_size)
 Raise if write thread successfull write some data of task with ID "id".
 
- 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.
 
virtual const char * parentClassName () const
 Returns parent class name.
 
bool debug () const
 Return if piCoutObj of this object is active.
 
void setName (const PIString &name)
 Set object name.
 
void setDebug (bool debug)
 Set object piCoutObj active.
 
PIVariant property (const char *name) const
 Returns property with name "name".
 
void setProperty (const char *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 char *name) const
 Returns if property with name "name" exists.
 
PIStringList scopeList () const
 Returns subclass scope of this object (including this class name)
 
void piDisconnect (const PIString &sig, PIObject *dest, void *ev_h)
 Disconnect object from all connections with event name "sig", connected to destination object "dest" and handler "ev_h".
 
void piDisconnect (const PIString &sig, PIObject *dest)
 Disconnect object from all connections with event name "sig", connected to destination object "dest".
 
void piDisconnect (const PIString &sig)
 Disconnect object from all connections with event name "sig".
 
bool isPIObject () const
 Returns if this is valid PIObject (check signature)
 
template<typename T >
bool isTypeOf () const
 Returns if this is valid PIObject subclass "T" (check signature and classname)
 
template<typename T >
T * cast () const
 Returns cast to T if this is valid subclass "T" (check by isTypeOf()) or "nullptr".
 
void callQueuedEvents ()
 Execute all posted events from CONNECTU_QUEUED connections.
 
bool maybeCallQueuedEvents ()
 Check if any CONNECTU_QUEUED connections to this object and execute them. More...
 
void deleteLater ()
 Mark object to delete. More...
 
void deleted (PIObject *o)
 Raise before object delete. More...
 

Static Public Member Functions

static PIVector< int > availableSpeeds ()
 Returns all available speeds for serial devices.
 
static PIStringList availableDevices (bool test=false)
 Returns all available system devices path. If "test" each device will be tried to open.
 
static PIVector< DeviceInfoavailableDevicesInfo (bool test=false)
 Returns all available system devices. If "test" each device will be tried to open.
 
- Static Public Member Functions inherited from PIIODevice
static PIIODevicecreateFromFullPath (const PIString &full_path)
 Try to create new device by prefix, configure it with configureFromFullPath() and returns it. More...
 
static PIIODevicecreateFromVariant (const PIVariantTypes::IODevice &d)
 Try to create new device by prefix, configure it with configureFromVariant() and returns it.
 
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 void piDisconnect (PIObject *src, const PIString &sig, PIObject *dest, void *ev_h)
 Disconnect object "src" from all connections with event name "sig", connected to destination object "dest" and handler "ev_h".
 
static void piDisconnect (PIObject *src, const PIString &sig, PIObject *dest)
 Disconnect object "src" from all connections with event name "sig", connected to destination object "dest".
 
static void piDisconnect (PIObject *src, const PIString &sig)
 Disconnect object "src" from all connections with event name "sig".
 
static PIObjectfindByName (const PIString &name)
 Returns PIObject* with name "name" or 0, if there is no object found.
 
static bool isPIObject (const PIObject *o)
 Returns if "o" is valid PIObject (check signature)
 
template<typename T >
static bool isTypeOf (const PIObject *o)
 Returns if "o" is valid PIObject subclass "T" (check signature and classname)
 

Protected Member Functions

PIString constructFullPathDevice () const override
 Reimplement to construct full unambiguous string, describes this device. Default implementation returns path()
 
void configureFromFullPathDevice (const PIString &full_path) override
 Reimplement to configure your device with parameters of full unambiguous string. Default implementation call setPath()
 
PIPropertyStorage constructVariantDevice () const override
 Reimplement to construct device properties. Default implementation return PIPropertyStorage with "path" entry.
 
void configureFromVariantDevice (const PIPropertyStorage &d) override
 Reimplement to configure your device from PIPropertyStorage. Options and mode already applied. Default implementation apply "path" entry.
 
bool configureDevice (const void *e_main, const void *e_parent=0) override
 Reimplement to configure device from entries "e_main" and "e_parent", cast arguments to PIConfig::Entry*.
 
void optionsChanged () override
 Reimplement to apply new device options.
 
void threadedReadBufferSizeChanged () override
 Reimplement to apply new threadedReadBufferSize()
 
ssize_t readDevice (void *read_to, ssize_t max_size) override
 Basic read function. More...
 
ssize_t writeDevice (const void *data, ssize_t max_size) override
 Reimplement this function to write to your device.
 
DeviceInfoFlags deviceInfoFlags () const override
 Reimplement to return correct DeviceInfoFlags. Default implementation returns 0.
 
virtual void received (const void *data, int size)
 Executes when any read function was successful. Default implementation does nothing.
 
bool openDevice () override
 Reimplement to open device, return value will be set to "opened_" variable. Don't call this function in subclass, use open()!
 
bool closeDevice () override
 Reimplement to close device, inverse return value will be set to "opened_" variable.
 
- Protected Member Functions inherited from PIIODevice
virtual bool configureDevice (const void *e_main, const void *e_parent=0)
 Reimplement to configure device from entries "e_main" and "e_parent", cast arguments 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 device, inverse return value will be set to "opened_" variable.
 
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)
 Function executed when thread read some data, default implementation execute external callback "ret_func_".
 
virtual PIString constructFullPathDevice () const
 Reimplement to construct full unambiguous string, describes this device. Default implementation returns path()
 
virtual void configureFromFullPathDevice (const PIString &full_path)
 Reimplement to configure your device with parameters of full unambiguous string. Default implementation call setPath()
 
virtual PIPropertyStorage constructVariantDevice () const
 Reimplement to construct device properties. Default implementation return PIPropertyStorage with "path" entry.
 
virtual void configureFromVariantDevice (const PIPropertyStorage &d)
 Reimplement to configure your device from PIPropertyStorage. Options and mode already applied. Default implementation apply "path" entry.
 
virtual void optionsChanged ()
 Reimplement to apply new device options.
 
virtual DeviceInfoFlags deviceInfoFlags () const
 Reimplement to return correct DeviceInfoFlags. Default implementation returns 0.
 
virtual void threadedReadBufferSizeChanged ()
 Reimplement to apply new threadedReadBufferSize()
 
- 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 char *name)
 Virtual function executes after property with name "name" has been changed.
 

Configurable parameters

string device
 device, default ""
 
int speed
 input/output speed, default 115200
 
int dataBitsCount
 dataBitsCount, default 8
 
bool parityControl
 parityControl, default false
 
bool parityOdd
 parityOdd, default false
 
bool twoStopBits
 twoStopBits, default false
 

Additional Inherited Members

- Public Attributes inherited from PIIODevice
bool reopenEnabled
 setReopenEnabled, default "true"
 
int reopenTimeout
 setReopenTimeout, default 1_s
 
int threadedReadBufferSize
 setThreadedReadBufferSize in bytes, default 4096
 

Detailed Description

Serial device.

Synopsis

This class provide access to serial device, e.g. COM port. It can read, write, wait for write. There are several read and write functions.

FullPath

Since version 1.16.0 you can use as path PISerial::DeviceInfo::id() USB identifier for USB devices.

PISerial * s = new PISerial("0403:6001");
PIIODevice * d = PIIODevice::createFromFullPath("ser://0403:6001:115200");
Base class for input/output devices.
Definition: piiodevice.h:87
static PIIODevice * createFromFullPath(const PIString &full_path)
Try to create new device by prefix, configure it with configureFromFullPath() and returns it.
Definition: piiodevice.cpp:621
Serial device.
Definition: piserial.h:37

Member Enumeration Documentation

◆ Parameters

Parameters of PISerial.

Enumerator
ParityControl 

Enable parity check and generate

ParityOdd 

Parity is odd instead of even

TwoStopBits 

Two stop bits instead of one

◆ Speed

Speed of PISerial.

Enumerator
S50 

50 baud

S75 

75 baud

S110 

110 baud

S300 

300 baud

S600 

600 baud

S1200 

1200 baud

S2400 

2400 baud

S4800 

4800 baud

S9600 

9600 baud

S14400 

14400 baud

S19200 

19200 baud

S38400 

38400 baud

S57600 

57600 baud

S115200 

115200 baud

S230400 

230400 baud

S460800 

460800 baud

S500000 

500000 baud

S576000 

576000 baud

S921600 

921600 baud

S1000000 

1000000 baud

S1152000 

1152000 baud

S1500000 

1500000 baud

S2000000 

2000000 baud

S2500000 

2500000 baud

S3000000 

3000000 baud

S3500000 

3500000 baud

S4000000 

4000000 baud

Member Function Documentation

◆ setBreak()

bool PISerial::setBreak ( bool  enabled)

Switch transmission line in break.

If enabled, sends a continuous stream of zero bits. Returns if state changed successfully.

Note
The serial port has to be open before using this method

◆ read()

bool PISerial::read ( void *  data,
int  size,
double  timeout_ms 
)

Read from device no more "max_size" bytes into "read_to" with "timeout_ms" timeout.

Read to pointer "read_to" no more than "max_size" and no longer than "timeout_ms" milliseconds.
If "timeout_ms" < 0 function will be wait forever until "max_size" will be readed.
If "size" <= 0 function immediate returns false.
For read data with unknown size use function readData().

Returns
If readed bytes count = "max_size"

◆ readString()

PIString PISerial::readString ( int  size = -1,
double  timeout_ms = 1000. 
)

Read from device for "timeout_ms" timeout or for "size" bytes.

Read all or no more than "size" bytes and no longer than "timeout_ms" milliseconds.
If "timeout_ms" < 0 function will be wait forever until "max_size" will be readed.
If "size" <= 0 function will be read all until "timeout_ms" elaped.
If "size" <= 0 and "timeout_ms" <= 0 function immediate returns empty string.
This function similar to readData() but returns data as string.

Returns
If readed bytes count = "max_size"

◆ readData()

PIByteArray PISerial::readData ( int  size = -1,
double  timeout_ms = 1000. 
)

Read from device for "timeout_ms" timeout or for "size" bytes.

Read all or no more than "size" bytes and no longer than "timeout_ms" milliseconds.
If "timeout_ms" < 0 function will be wait forever until "max_size" will be readed.
If "size" <= 0 function will be read all until "timeout_ms" elaped.
If "size" <= 0 and "timeout_ms" <= 0 function immediate returns empty string.
This function similar to readString() but returns data as byte array.

Returns
If readed bytes count = "max_size"

◆ readDevice()

ssize_t PISerial::readDevice ( void *  read_to,
ssize_t  max_size 
)
overrideprotectedvirtual

Basic read function.

Read to pointer "read_to" no more than "max_size". If PIIODevice::BlockingRead option set this function will be wait at least one byte.

Returns
Readed bytes count, -1 for error
See also
readData(), readString()

Reimplemented from PIIODevice.