PIP 5.5.3
Platform-Independent Primitives
Открытые типы | Открытые члены | Открытые статические члены | Защищенные члены | Относящиеся к классу функции | Полный список членов класса
Класс PIIODeviceabstract

Базовый класс утройств ввода/вывода. Подробнее...

#include <piiodevice.h>

Граф наследования:PIIODevice:
Inheritance graph
[см. легенду]

Открытые типы

enum  DeviceMode { ReadOnly = 0x01 , WriteOnly = 0x02 , ReadWrite = 0x03 }
 Режимы открытия для PIIODevice. Подробнее...
 
enum  DeviceOption { BlockingRead = 0x01 , BlockingWrite = 0x02 }
 Опции для PIIODevice, работает для некоторых устройств Подробнее...
 
enum  DeviceInfoFlag { Sequential = 0x01 , Reliable = 0x02 }
 Характеристики канала PIIODevice. Подробнее...
 

Открытые члены

 PIIODevice ()
 Создает пустой PIIODevice.
 
 PIIODevice (const PIString &path, DeviceMode mode=ReadWrite)
 Создает PIIODevice с путём "path" и режимом открытия "mode".
 
DeviceMode mode () const
 Возвращает текущий режим открытия устройства
 
void setMode (DeviceMode m)
 Устанавливает режим открытия устройства. Не переоткрывает устройство
 
DeviceOptions options () const
 Возвращает текущие опции устройства
 
bool isOptionSet (DeviceOption o) const
 Возвращает текущее состояние опции "o".
 
void setOptions (DeviceOptions o)
 Устанавливает опции устройства
 
bool setOption (DeviceOption o, bool yes=true)
 Устанавливает опцию "o" устройства в "yes" и возвращает предыдущее состояние опции
 
DeviceInfoFlags infoFlags () const
 Возвращает характеристики канала
 
PIString path () const
 Возвращает текущий путь устройства
 
void setPath (const PIString &path)
 Устанавливает путь устройства. Не переоткрывает устройство
 
bool isReadable () const
 Возвращает равен ли режим открытия ReadOnly или ReadWrite.
 
bool isWriteable () const
 Возвращает равен ли режим открытия WriteOnly или ReadWrite.
 
bool isOpened () const
 Возвращает успешно ли открыто устройство
 
bool isClosed () const
 Возвращает закрыто ли устройство
 
virtual bool canRead () const
 Возвращает может ли устройство читать сейчас
 
virtual bool canWrite () const
 Возвращает может ли устройство писать сейчас
 
void setReopenEnabled (bool yes=true)
 Устанавливает возможность вызова open() при потоковом чтении на закрытом устройстве
 
void setReopenTimeout (PISystemTime timeout)
 Устанавливает задержку между вызовами open() если переоткрытие активно
 
bool isReopenEnabled () const
 Возвращает активно ли переоткрытие
 
PISystemTime reopenTimeout ()
 Возвращает задержку переоткрытия
 
void setThreadedReadSlot (ReadRetFunc func)
 Устанавливает callback потокового чтения Подробнее...
 
void setThreadedReadData (void *d)
 Устанавливает произвольный указатель, который будет передан в callback потокового чтения
 
void setThreadedReadBufferSize (int new_size)
 Устанавливает размер буфера потокового чтения Подробнее...
 
int threadedReadBufferSize () const
 Возвращает размер буфера потокового чтения
 
const uchar * threadedReadBuffer () const
 Возвращает содержимое буфера потокового чтения
 
void * threadedReadData () const
 Возвращает произвольный указатель, который будет передан в callback потокового чтения
 
bool isThreadedRead () const
 Возвращает запущен ли поток чтения
 
bool isThreadedReadStopping () const
 Возвращает останавливается ли поток чтения
 
void startThreadedRead ()
 Запускает потоковое чтение
 
void startThreadedRead (ReadRetFunc func)
 Запускает потоковое чтение и устанавливает callback потокового чтения в "func".
 
void stopThreadedRead ()
 Останавливает потоковое чтение.
 
void terminateThreadedRead ()
 Прерывает потоковое чтение. Подробнее...
 
bool waitThreadedReadFinished (PISystemTime timeout={})
 Ожидает завершения потокового чтения в течении не более "timeout".
 
bool isThreadedWrite () const
 Возвращает запущен ли поток записи
 
void startThreadedWrite ()
 Запускает потоковую запись
 
void stopThreadedWrite ()
 Останавливает потоковую запись.
 
void terminateThreadedWrite ()
 Прерывает потоковую запись. Подробнее...
 
bool waitThreadedWriteFinished (PISystemTime timeout={})
 Ожидает завершения потоковой записи в течении не более "timeout".
 
void clearThreadedWriteQueue ()
 Очищает очередь потоковой записи
 
void start ()
 Запускает потоковое чтение и запись
 
void stop ()
 Останавливает потоковое чтение и запись.
 
void stopAndWait (PISystemTime timeout={})
 Останавливает потоковое чтение и запись и ожидает завершения.
 
virtual void interrupt ()
 Прерывает блокирующую операцию.
 
ssize_t read (void *read_to, ssize_t max_size)
 Читает из устройства не более "max_size" байт в "read_to".
 
ssize_t read (PIMemoryBlock mb)
 Читает из устройства в блок памяти "mb".
 
PIByteArray read (ssize_t max_size)
 Читает из устройства не более "max_size" байт и возвращает данные как PIByteArray.
 
virtual ssize_t bytesAvailable () const
 Возвращает количество байт доступных для чтения Подробнее...
 
ssize_t write (const void *data, ssize_t max_size)
 Пишет в устройство не более "max_size" байт из "data".
 
PIByteArray readForTime (PISystemTime timeout)
 Читает из устройства в течении "timeout" и возвращает данные как PIByteArray.
 
ullong writeThreaded (const void *data, ssize_t max_size)
 Добавляет данные в очередь на потоковую запись и возвращает ID задания
 
ullong writeThreaded (const PIByteArray &data)
 Добавляет данные в очередь на потоковую запись и возвращает ID задания
 
virtual PIConstChars fullPathPrefix () const
 Возвращает префикс устройства. Creating devices by unambiguous string.
 
PIString constructFullPath () const
 Возвращает строку полного описания для этого устройства, fullPathPrefix() + "://" + ...
 
void configureFromFullPath (const PIString &full_path)
 Настраивает устройство из параметров строки полного описания
 
PIVariantTypes::IODevice constructVariant () const
 Возвращает PIVariantTypes::IODevice, описывающий это устройство
 
void configureFromVariant (const PIVariantTypes::IODevice &d)
 Настраивает устройство из PIVariantTypes::IODevice.
 
ssize_t write (const PIMemoryBlock &mb)
 Пишет в устройство блок памяти "mb".
 
- Открытые члены унаследованные от PIObject
 PIObject (const PIString &name=PIString())
 Создает PIObject с именем "name".
 
PIString name () const
 Возвращает имя объекта
 
virtual const char * className () const
 Возвращает имя класса объекта
 
virtual const char * parentClassName () const
 Возвращает имя родительского класса
 
bool debug () const
 Возвращает включен ли вывод piCoutObj для этого объекта
 
void setName (const PIString &name)
 Устанавливает имя объекта
 
void setDebug (bool debug)
 Включает или отключает вывод piCoutObj для этого объекта
 
PIVariant property (const char *name) const
 Возвращает свойство объекта по имени "name".
 
void setProperty (const char *name, const PIVariant &value)
 Устанавливает у объекта свойство по имени "name" в "value". Если такого свойства нет, оно добавляется
 
bool isPropertyExists (const char *name) const
 Возвращает присутствует ли свойство по имени "name".
 
PIStringList scopeList () const
 Возвращает цепочку наследования объекта (вместе с классом самого объекта)
 
void piDisconnect (const PIString &sig, PIObject *dest, void *ev_h)
 Разрывает все соединения от события "sig" к объекту "dest" и обработчику "ev_h".
 
void piDisconnect (const PIString &sig, PIObject *dest)
 Разрывает все соединения от события "sig" к объекту "dest".
 
void piDisconnect (const PIString &sig)
 Разрывает все соединения от события "sig".
 
bool isPIObject () const
 Возвращает действительный ли это PIObject (проверяет подпись)
 
template<typename T >
bool isTypeOf () const
 Возвращает действительный ли это наследник PIObject типа "T" (проверяет подпись и имя класса)
 
template<typename T >
T * cast () const
 Возвращает преобразование к типу T если это действительный наследник типа "T" (проверяет через isTypeOf()), или "nullptr".
 
void callQueuedEvents ()
 Выполнить все отложенные события от CONNECTU_QUEUED соединений
 
bool maybeCallQueuedEvents ()
 Если было хотя бы одно CONNECTU_QUEUED соединение с исполнителем this, то выполнить события Подробнее...
 
void deleteLater ()
 Пометить объект на удаление Подробнее...
 
void deleted (PIObject *o)
 Вызывается перед удалением объекта Подробнее...
 

Открытые статические члены

static PIIODevicecreateFromFullPath (const PIString &full_path)
 Пытается создать новое устройство по префиксу, настраивает с помощью configureFromFullPath() и возвращает его Подробнее...
 
static PIIODevicecreateFromVariant (const PIVariantTypes::IODevice &d)
 Пытается создать новое устройство по префиксу, настраивает с помощью configureFromVariant() и возвращает его
 
static PIStringList availablePrefixes ()
 Возвращает префиксы всех зарегистрированных устройств
 
static PIStringList availableClasses ()
 Возвращает имена классов всех зарегистрированных устройств
 
- Открытые статические члены унаследованные от PIObject
static void piDisconnect (PIObject *src, const PIString &sig, PIObject *dest, void *ev_h)
 Разрывает все соединения от события "sig" объекта "src" к объекту "dest" и обработчику "ev_h".
 
static void piDisconnect (PIObject *src, const PIString &sig, PIObject *dest)
 Разрывает все соединения от события "sig" объекта "src" к объекту "dest".
 
static void piDisconnect (PIObject *src, const PIString &sig)
 Разрывает все соединения от события "sig" объекта "src".
 
static PIObjectfindByName (const PIString &name)
 Returns PIObject* with name "name" or 0, if there is no object found.
 
static bool isPIObject (const PIObject *o)
 Возвращает действительный ли "o" PIObject (проверяет подпись)
 
template<typename T >
static bool isTypeOf (const PIObject *o)
 Возвращает действительный ли "o" наследник PIObject типа "T" (проверяет подпись и имя класса)
 

Защищенные члены

virtual bool openDevice ()=0
 Переопределите для открытия устройства, возвращаемое значение будет установлено в переменную "opened_". Не используйте напрямую, только через open()!
 
virtual bool closeDevice ()
 Переопределите для закрытия устройства, обратное возвращаемое значение будет установлено в переменную "opened_".
 
virtual ssize_t readDevice (void *read_to, ssize_t max_size)
 Переопределите для чтения данных из устройства
 
virtual ssize_t writeDevice (const void *data, ssize_t max_size)
 Переопределите для записи данных в устройство
 
virtual bool threadedRead (const uchar *readed, ssize_t size)
 Метод вызывается после каждого успешного потокового чтения, по умолчанию вызывает callback "ret_func_".
 
virtual PIString constructFullPathDevice () const
 Переопределите для создания строки полного описания устройства. По умолчанию возвращает path()
 
virtual void configureFromFullPathDevice (const PIString &full_path)
 Переопределите для настройки устройства из строки полного описания. По умолчанию вызывает setPath()
 
virtual PIPropertyStorage constructVariantDevice () const
 Переопределите для создания свойств устройства. По умолчанию возвращает PIPropertyStorage со свойством "path".
 
virtual void configureFromVariantDevice (const PIPropertyStorage &d)
 Переопределите для настройки устройства из PIPropertyStorage. Опции и режим уже применены. По умолчанию устанавливает свойство "path".
 
virtual void optionsChanged ()
 Переопределите для применения новых опций устройства
 
virtual DeviceInfoFlags deviceInfoFlags () const
 Переопределите для возврата правильных DeviceInfoFlags. По умолчанию возвращает 0.
 
virtual void threadedReadBufferSizeChanged ()
 Переопределите для применения нового threadedReadBufferSize()
 
- Защищенные члены унаследованные от PIObject
PIObjectemitter () const
 Возвращает PIObject* который вызвал это событие. Значение допустимо только из методов обработчиков событий
 
virtual void propertyChanged (const char *name)
 Виртуальная функция, вызывается после изменения любого свойства.
 

Относящиеся к классу функции

(не члены класса)

template<typename T >
readDeviceSetting (const PIString &name, const T &def, const PIConfig::Entry *em, const PIConfig::Entry *ep)
 Service function. useful for configuring devices. Подробнее...
 
#define REGISTER_DEVICE(class)
 Включить создание экземпляров устройства с помощью метода PIIODevice::createFromFullPath(). Подробнее...
 
#define PIIODEVICE(class, prefix)
 Используйте этот макрос вместо PIOBJECT при объявлении своего PIIODevice. Подробнее...
 

Configurable parameters

bool reopenEnabled
 setReopenEnabled, по умолчанию "true"
 
int reopenTimeout
 setReopenTimeout, по умолчанию 1_s
 
int threadedReadBufferSize
 setThreadedReadBufferSize в байтах, по умолчанию 4096
 

Handlers

bool open ()
 Открывает устройство
 
bool open (const PIString &_path)
 Открывает устройство с путём "path".
 
bool close ()
 Закрывает устройство
 
ssize_t write (PIByteArray data)
 Пишет "data" в устройство
 

Virtual handlers

virtual void flush ()
 Немедленно записать все буферизированные данные
 

Events

void opened ()
 Вызывается при успешном открытии
 
void closed ()
 Вызывается при успешном закрытии
 
void threadedReadEvent (const uchar *readed, ssize_t size)
 Вызывается при успешном потоковом чтении данных
 
void threadedWriteEvent (ullong id, ssize_t written_size)
 Вызывается при успешной потоковой записи данных с ID задания "id".
 

Подробное описание

Базовый класс утройств ввода/вывода.

Synopsis

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.

Open and close

PIIODevice have boolean variable indicated open status. Returns of functions openDevice() and closeDevice() change this variable.

Threaded read

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().

Threaded write

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.

Internal buffer

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.

Reopen

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().

Configuration

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:

// file example.conf
dev.reopenEnabled = false
dev.device = /dev/ttyS0
dev.speed = 9600
// end example.conf
// code
ser.configure("example.conf", "dev");
Последовательный порт.
Definition: piserial.h:37

Implementation example:

class SomeIO: public PIIODevice {
...
bool configureDevice(const void * e_main, const void * e_parent) override {
PIConfig::Entry * em = (PIConfig::Entry * )e_main;
PIConfig::Entry * ep = (PIConfig::Entry * )e_parent;
setStringParam(readDeviceSetting<PIString>("stringParam", stringParam(), em, ep));
setIntParam(readDeviceSetting<int>("intParam", intParam(), em, ep));
return true;
}
...
};
Entry of configuration file
Definition: piconfig.h:141
Базовый класс утройств ввода/вывода.
Definition: piiodevice.h:87

Creating devices by unambiguous string

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:

Example

class SomeIO: public PIIODevice {
PIIODEVICE(SomeIO, "myio")
public:
SomeIO(): PIIODevice() {}
protected:
bool openDevice() override {
// open your device here
return if_success;
}
ssize_t readDevice(void * read_to, ssize_t max_size) override {
// read from your device here
return readed_bytes;
}
ssize_t writeDevice(const void * data, ssize_t max_size) override {
// write to your device here
return written_bytes;
}
void configureFromFullPathDevice(const PIString & full_path) override {
// parse full_path and configure device here
}
};
virtual void configureFromFullPathDevice(const PIString &full_path)
Переопределите для настройки устройства из строки полного описания. По умолчанию вызывает setPath()
Definition: piiodevice.h:548
virtual ssize_t readDevice(void *read_to, ssize_t max_size)
Переопределите для чтения данных из устройства
Definition: piiodevice.h:522
virtual ssize_t writeDevice(const void *data, ssize_t max_size)
Переопределите для записи данных в устройство
Definition: piiodevice.h:529
#define REGISTER_DEVICE(class)
Включить создание экземпляров устройства с помощью метода PIIODevice::createFromFullPath().
Definition: piiodevice.h:46
#define PIIODEVICE(class, prefix)
Используйте этот макрос вместо PIOBJECT при объявлении своего PIIODevice.
Definition: piiodevice.h:55
virtual bool openDevice()=0
Переопределите для открытия устройства, возвращаемое значение будет установлено в переменную "opened_...
Класс строки.
Definition: pistring.h:42

Перечисления

◆ DeviceMode

Режимы открытия для PIIODevice.

Элементы перечислений
ReadOnly 

Устройство может только читать

WriteOnly 

Устройство может только писать

ReadWrite 

Устройство может читать и писать

◆ DeviceOption

Опции для PIIODevice, работает для некоторых устройств

Элементы перечислений
BlockingRead 

read() блокируется, пока данные не поступят, по умолчанию выключено

BlockingWrite 

write() блокируется, пока данные не запишутся, по умолчанию выключено

◆ DeviceInfoFlag

Характеристики канала PIIODevice.

Элементы перечислений
Sequential 

Непрерывный поток байт, без пакетирования

Reliable 

Канал без ошибок или повреждений данных

Методы

◆ setThreadedReadSlot()

void PIIODevice::setThreadedReadSlot ( ReadRetFunc  func)

Устанавливает callback потокового чтения

Устанавливает внешний статический метод, который будет вызван после каждого успешного потокового чтения. Метод должен быть в формате "bool func(void * data, uchar * readed, int size)"

◆ setThreadedReadBufferSize()

void PIIODevice::setThreadedReadBufferSize ( int  new_size)

Устанавливает размер буфера потокового чтения

По умолчанию 4096 байт. Если устройство за одно чтение может читать более 4096 байт, необходимо использовать этот метод для установки нужного размера буфера

◆ terminateThreadedRead()

void PIIODevice::terminateThreadedRead ( )

Прерывает потоковое чтение.

Предупреждения
Старайтесь не использовать! Этот метод может привести к повреждению памяти!

◆ terminateThreadedWrite()

void PIIODevice::terminateThreadedWrite ( )

Прерывает потоковую запись.

Предупреждения
Старайтесь не использовать! Этот метод может привести к повреждению памяти!

◆ bytesAvailable()

virtual ssize_t PIIODevice::bytesAvailable ( ) const
inlinevirtual

Возвращает количество байт доступных для чтения

Эта функция как правило используется чтобы знать какой размер буфера нужен в памяти для чтения. Если функция возвращает -1 это значит что количество байт для чтения не известно.

Переопределяется в PICloudClient, PIFile, PIIOByteArray, PIIOString, PITransparentDevice и PIPacketExtractor.

◆ createFromFullPath()

PIIODevice * PIIODevice::createFromFullPath ( const PIString full_path)
static

Пытается создать новое устройство по префиксу, настраивает с помощью configureFromFullPath() и возвращает его

В метод configureFromFullPath() "full_path" передается без fullPathPrefix() и "://". См. Creating devices by unambiguous string

Документация по друзьям класса и функциям, относящимся к классу

◆ readDeviceSetting()

template<typename T >
T readDeviceSetting ( const PIString name,
const T &  def,
const PIConfig::Entry em,
const PIConfig::Entry ep 
)
related

Service function. useful for configuring devices.

Function takes entry name "name", default value "def" and two PIConfig::Entry sections: "em" and their parent "ep". If there is no parent ep = 0. If "ep" is not null and entry "name" exists in "ep" function returns this value. Else returns value of entry "name" in section "em" or "def" if entry doesn`t exists.
This function useful to read settings from configuration file in implementation PIIODevice::configureDevice() function

◆ REGISTER_DEVICE

#define REGISTER_DEVICE (   class)
related

Включить создание экземпляров устройства с помощью метода PIIODevice::createFromFullPath().

Этот макрос может быть расположен в cpp или заголовочном файле, но предпочтительнее распологать в заголовочном

◆ PIIODEVICE

#define PIIODEVICE (   class,
  prefix 
)
related

Используйте этот макрос вместо PIOBJECT при объявлении своего PIIODevice.

Аргументы
prefixУникальный префикс устройства в кавычках, может быть ""