PIP 5.6.1
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 }
 Общие опции, поддерживаемые некоторыми устройствами. Подробнее...
 
enum  DeviceInfoFlag { Sequential = 0x01 , Reliable = 0x02 }
 Характеристики канала устройства. Подробнее...
 
typedef PIFlags< DeviceOptionDeviceOptions
 Битовая маска значений DeviceOption.
 
typedef PIFlags< DeviceInfoFlagDeviceInfoFlags
 Битовая маска значений DeviceInfoFlag.
 

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

 PIIODevice ()
 Создает пустой PIIODevice.
 
 PIIODevice (const PIString &path, DeviceMode mode=ReadWrite)
 Создает PIIODevice с путём "path" и режимом открытия "mode".
 
virtual ~PIIODevice ()
 Уничтожает базовый объект устройства.
 
DeviceMode mode () const
 Возвращает текущий режим открытия.
 
void setMode (DeviceMode m)
 Устанавливает режим открытия без переоткрытия устройства.
 
DeviceOptions options () const
 Возвращает текущие опции устройства.
 
bool isOptionSet (DeviceOption o) const
 Возвращает, включена ли опция "o".
 
void setOptions (DeviceOptions o)
 Полностью заменяет текущие опции устройства на "o".
 
bool setOption (DeviceOption o, bool yes=true)
 Устанавливает опцию "o" в состояние "yes" и возвращает её предыдущее состояние.
 
DeviceInfoFlags infoFlags () const
 Возвращает характеристики канала устройства.
 
PIString path () const
 Возвращает текущий путь устройства.
 
void setPath (const PIString &path)
 Устанавливает путь устройства без его переоткрытия.
 
bool isReadable () const
 Возвращает, разрешает ли текущий режим чтение.
 
bool isWriteable () const
 Возвращает, разрешает ли текущий режим запись.
 
bool isOpened () const
 Возвращает, открыто ли сейчас устройство.
 
bool isClosed () const
 Возвращает, закрыто ли сейчас устройство.
 
virtual bool canRead () const
 Возвращает, возможно ли чтение прямо сейчас.
 
virtual bool canWrite () const
 Возвращает, возможна ли запись прямо сейчас.
 
void setReopenEnabled (bool yes=true)
 Включает или выключает автоматические попытки переоткрытия при потоковом чтении.
 
void setReopenTimeout (PISystemTime timeout)
 Устанавливает задержку между автоматическими попытками переоткрытия.
 
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".
 
uint threadedReadTimeout () const
 Возвращает задержку между безуспешными попытками потокового чтения в миллисекундах.
 
void setThreadedReadTimeout (uint ms)
 Устанавливает задержку между безуспешными попытками потокового чтения в миллисекундах.
 
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)
 Читает в "read_to" не более "max_size" байт.
 
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)
 Записывает из "data" не более "max_size" байт.
 
PIByteArray readForTime (PISystemTime timeout)
 Читает данные в течение "timeout" и возвращает накопленные байты.
 
ullong writeThreaded (const void *data, ssize_t max_size)
 Помещает "data" в очередь потоковой записи и возвращает ID задания.
 
ullong writeThreaded (const PIByteArray &data)
 Помещает массив байт "data" в очередь потоковой записи и возвращает ID задания.
 
bool configure (const PIString &config_file, const PIString &section, bool parent_section=false)
 Настраивает устройство из секции "section" файла "config_file". Подробнее...
 
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())
 Создает объект и инициализирует его свойство name.
 
virtual ~PIObject ()
 Уничтожает объект, вызывает deleted() и отключает его от событийного графа.
 
PIString name () const
 Возвращает свойство name этого объекта.
 
virtual const char * className () const
 Возвращает зарегистрированное имя класса этого объекта.
 
virtual uint classNameID () const
 Возвращает хэш от className().
 
virtual const char * parentClassName () const
 Возвращает зарегистрированное имя родительского класса, либо пустую строку для корня.
 
bool debug () const
 Возвращает, включен ли вывод piCoutObj для этого объекта.
 
void setName (const PIString &name)
 Устанавливает свойство 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".
 
void setThreadSafe (bool yes)
 Включает или отключает внутренний мьютекс объекта во время выполнения обработчиков. Подробнее...
 
bool isThreadSafe () const
 Возвращает, включен ли внутренний мьютекс объекта для выполнения обработчиков.
 
bool execute (const PIString &method, const PIVector< PIVariantSimple > &vl)
 Выполняет зарегистрированный метод или метод-обработчик по имени с переданными аргументами. Подробнее...
 
bool execute (const PIString &method)
 Перегрузка execute() для метода без аргументов.
 
bool execute (const PIString &method, const PIVariantSimple &v0)
 Перегрузка execute() для одного аргумента.
 
bool execute (const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1)
 Перегрузка execute() для двух аргументов.
 
bool execute (const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2)
 Перегрузка execute() для трёх аргументов.
 
bool execute (const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2, const PIVariantSimple &v3)
 Перегрузка execute() для четырёх аргументов.
 
bool executeQueued (PIObject *performer, const PIString &method, const PIVector< PIVariantSimple > &vl)
 Ставит выполнение зарегистрированного метода в очередь объекта-исполнителя. Подробнее...
 
bool executeQueued (PIObject *performer, const PIString &method)
 Перегрузка executeQueued() для метода без аргументов.
 
bool executeQueued (PIObject *performer, const PIString &method, const PIVariantSimple &v0)
 Перегрузка executeQueued() для одного аргумента.
 
bool executeQueued (PIObject *performer, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1)
 Перегрузка executeQueued() для двух аргументов.
 
bool executeQueued (PIObject *performer, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2)
 Перегрузка executeQueued() для трёх аргументов.
 
bool executeQueued (PIObject *performer, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2, const PIVariantSimple &v3)
 Перегрузка executeQueued() для четырёх аргументов.
 
void dump (const PIString &line_prefix=PIString()) const
 Выводит диагностическую информацию об объекте в проектный поток вывода.
 
PIStringList scopeList () const
 Возвращает зарегистрированную цепочку наследования объекта, включая его собственный класс.
 
PIStringList methodsEH () const
 Возвращает полные сигнатуры всех зарегистрированных событий и обработчиков для области этого класса.
 
bool isMethodEHContains (const PIString &name) const
 Возвращает, существует ли зарегистрированное событие или обработчик с таким именем.
 
PIString methodEHArguments (const PIString &name) const
 Возвращает список типов аргументов зарегистрированного метода через запятую.
 
PIString methodEHFullFormat (const PIString &name) const
 Возвращает полную зарегистрированную сигнатуру метода.
 
PIString methodEHFromAddr (const void *addr) const
 Возвращает имя зарегистрированного метода для указанного адреса точки входа.
 
void piDisconnect (const PIString &sig, PIObject *dest, void *ev_h)
 Разрывает соединения этого объекта-источника с конкретным обработчиком объекта-приемника для события "sig".
 
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
 Возвращает, принадлежит ли этот объект классу "T" или одному из его зарегистрированных потомков.
 
template<typename T >
T * cast () const
 Возвращает этот объект, приведённый к типу "T", если isTypeOf<T>() успешно, иначе nullptr.
 
void callQueuedEvents ()
 Выполняет все отложенные доставки, поставленные в очередь этому объекту-исполнителю.
 
bool maybeCallQueuedEvents ()
 Выполняет отложенные доставки только если этот объект использовался как исполнитель. Подробнее...
 
void deleteLater ()
 Планирует отложенное удаление объекта. Подробнее...
 
void deleted (PIObject *o)
 Вызывается непосредственно перед уничтожением объекта. Подробнее...
 

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

static PIIODevicecreateFromFullPath (const PIString &full_path)
 Пытается создать новое устройство по префиксу, настраивает с помощью configureFromFullPath() и возвращает его. Подробнее...
 
static PIIODevicecreateFromVariant (const PIVariantTypes::IODevice &d)
 Пытается создать новое устройство по префиксу, настраивает с помощью configureFromVariant() и возвращает его.
 
static PIString normalizeFullPath (const PIString &full_path)
 Возвращает нормализованную полную строку пути для "full_path".
 
static void splitFullPath (PIString fpwm, PIString *full_path, DeviceMode *mode=0, DeviceOptions *opts=0)
 Разбирает полную строку пути на путь, режим и опции.
 
static PIStringList availablePrefixes ()
 Возвращает префиксы всех зарегистрированных устройств
 
static PIStringList availableClasses ()
 Возвращает имена классов всех зарегистрированных устройств.
 
- Открытые статические члены унаследованные от PIObject
static bool execute (PIObject *o, const PIString &method, const PIVector< PIVariantSimple > &vl)
 Статическая удобная обёртка над execute().
 
static bool execute (PIObject *o, const PIString &method)
 Статическая перегрузка execute() без аргументов.
 
static bool execute (PIObject *o, const PIString &method, const PIVariantSimple &v0)
 Статическая перегрузка execute() для одного аргумента.
 
static bool execute (PIObject *o, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1)
 Статическая перегрузка execute() для двух аргументов.
 
static bool execute (PIObject *o, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2)
 Статическая перегрузка execute() для трёх аргументов.
 
static bool execute (PIObject *o, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2, const PIVariantSimple &v3)
 Статическая перегрузка execute() для четырёх аргументов.
 
static bool executeQueued (PIObject *o, PIObject *performer, const PIString &method, const PIVector< PIVariantSimple > &vl)
 Статическая удобная обёртка над executeQueued().
 
static bool executeQueued (PIObject *o, PIObject *performer, const PIString &method)
 Статическая перегрузка executeQueued() без аргументов.
 
static bool executeQueued (PIObject *o, PIObject *performer, const PIString &method, const PIVariantSimple &v0)
 Статическая перегрузка executeQueued() для одного аргумента.
 
static bool executeQueued (PIObject *o, PIObject *performer, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1)
 Статическая перегрузка executeQueued() для двух аргументов.
 
static bool executeQueued (PIObject *o, PIObject *performer, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2)
 Статическая перегрузка executeQueued() для трёх аргументов.
 
static bool executeQueued (PIObject *o, PIObject *performer, const PIString &method, const PIVariantSimple &v0, const PIVariantSimple &v1, const PIVariantSimple &v2, const PIVariantSimple &v3)
 Статическая перегрузка executeQueued() для четырёх аргументов.
 
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)
 Низкоуровневый помощник прямого соединения, лежащий под устаревшими макросами CONNECT*.
 
static PIObject::Connection piConnectU (PIObject *src, const PIString &sig, PIObject *dest_o, void *dest, const PIString &hname, const char *loc, PIObject *performer=0)
 Низкоуровневый помощник соединения по имени, лежащий под CONNECTU() и CONNECTU_QUEUED().
 
static PIObject::Connection piConnectLS (PIObject *src, const PIString &sig, std::function< void()> *f, const char *loc)
 Низкоуровневый помощник, который соединяет событие с лямбдой или обёрткой функтора.
 
static void piDisconnect (PIObject *src, const PIString &sig, PIObject *dest, void *ev_h)
 Разрывает соединения объекта-источника "src" с конкретным обработчиком объекта-приемника для события "sig".
 
static void piDisconnect (PIObject *src, const PIString &sig, PIObject *dest)
 Разрывает все соединения объекта-источника "src" от события "sig" к объекту-приемнику "dest".
 
static void piDisconnect (PIObject *src, const PIString &sig)
 Разрывает все соединения объекта-источника "src" от события "sig".
 
static void raiseEvent (PIObject *sender, const uint eventID)
 Внутренний помощник доставки для зарегистрированных событий без аргументов.
 
template<typename T0 >
static void raiseEvent (PIObject *sender, const uint eventID, const T0 &v0=T0())
 Внутренний помощник доставки для зарегистрированных событий с одним аргументом.
 
template<typename T0 , typename T1 >
static void raiseEvent (PIObject *sender, const uint eventID, const T0 &v0=T0(), const T1 &v1=T1())
 Внутренний помощник доставки для зарегистрированных событий с двумя аргументами.
 
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())
 Внутренний помощник доставки для зарегистрированных событий с тремя аргументами.
 
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())
 Внутренний помощник доставки для зарегистрированных событий с четырьмя аргументами.
 
static PIObjectfindByName (const PIString &name)
 Возвращает первый живой объект с именем "name", либо nullptr.
 
static bool isPIObject (const PIObject *o)
 Возвращает, указывает ли "o" на ещё существующий экземпляр PIObject.
 
static bool isPIObject (const void *o)
 Перегрузка isPIObject() для нетипизированного указателя.
 
template<typename T >
static bool isTypeOf (const PIObject *o)
 Возвращает, принадлежит ли "o" классу "T" или одному из его зарегистрированных потомков.
 
template<typename T >
static bool isTypeOf (const void *o)
 Перегрузка isTypeOf() для нетипизированного указателя.
 
static PIString simplifyType (const char *a, bool readable=true)
 Упрощает запись типа C++ для метаданных зарегистрированных методов.
 

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

virtual bool configureDevice (const void *e_main, const void *e_parent=0)
 Переопределите для настройки устройства из записей "e_main" и необязательной "e_parent", приведённых к PIConfig::Entry*.
 
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, заданный через setThreadedReadSlot().
 
virtual PIString constructFullPathDevice () const
 Переопределите для построения device-specific части полной строки пути. По умолчанию возвращает path().
 
virtual void configureFromFullPathDevice (const PIString &full_path)
 Переопределите для настройки устройства из device-specific параметров полной строки пути. По умолчанию вызывает setPath().
 
virtual PIPropertyStorage constructVariantDevice () const
 Переопределите для построения device-specific свойств варианта. По умолчанию возвращает 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
 Возвращает объект-источник, который вызвал текущее событие. Подробнее...
 
virtual void propertyChanged (const char *name)
 Виртуальный метод, вызываемый после изменения свойства "name" через setProperty().
 

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

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

template<typename T >
readDeviceSetting (const PIString &name, const T &def, const PIConfig::Entry *em, const PIConfig::Entry *ep)
 Вспомогательная функция для чтения настроек устройства из записей конфигурации. Подробнее...
 
#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 open (DeviceMode _mode)
 Открывает устройство с режимом "mode".
 
bool open (const PIString &_path, DeviceMode _mode)
 Открывает устройство с путём "path" и режимом "mode".
 
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");
bool configure(const PIString &config_file, const PIString &section, bool parent_section=false)
Настраивает устройство из секции "section" файла "config_file".
Definition: piiodevice.cpp:471
Последовательный порт.
Definition: piserial.h:38

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;
}
...
};
Узел разобранного дерева конфигурации.
Definition: piconfig.h:245
Базовый класс устройств ввода/вывода.
Definition: piiodevice.h:90
virtual bool configureDevice(const void *e_main, const void *e_parent=0)
Переопределите для настройки устройства из записей "e_main" и необязательной "e_parent",...
Definition: piiodevice.h:531

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)
Переопределите для настройки устройства из device-specific параметров полной строки пути....
Definition: piiodevice.h:570
virtual ssize_t readDevice(void *read_to, ssize_t max_size)
Переопределите для чтения данных из устройства
Definition: piiodevice.h:545
virtual ssize_t writeDevice(const void *data, ssize_t max_size)
Переопределите для записи данных в устройство
Definition: piiodevice.h:552
#define REGISTER_DEVICE(class)
Включить создание экземпляров устройства с помощью метода PIIODevice::createFromFullPath().
Definition: piiodevice.h:49
#define PIIODEVICE(class, prefix)
Используйте этот макрос вместо PIOBJECT при объявлении своего PIIODevice.
Definition: piiodevice.h:58
virtual bool openDevice()=0
Переопределите для открытия устройства, возвращаемое значение будет установлено в переменную "opened_...
Класс строки.
Definition: pistring.h:42

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

◆ DeviceMode

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

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

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

WriteOnly 

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

ReadWrite 

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

◆ DeviceOption

Общие опции, поддерживаемые некоторыми устройствами.

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

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

BlockingWrite 

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

◆ DeviceInfoFlag

Характеристики канала устройства.

Элементы перечислений
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, PICloudServer::Client, PIFile, PIIOByteArray, PIIOString, PIPeer, PISPI, PITransparentDevice и PIPacketExtractor.

◆ configure()

bool PIIODevice::configure ( const PIString config_file,
const PIString section,
bool  parent_section = false 
)

Настраивает устройство из секции "section" файла "config_file".

Если "parent_section" равно true, то дополнительные параметры также читаются из родительской секции.

◆ 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

Вспомогательная функция для чтения настроек устройства из записей конфигурации.

Сначала пытается прочитать "name" из родительской секции ep, затем из локальной секции em и возвращает "def", если запись не найдена.

◆ REGISTER_DEVICE

#define REGISTER_DEVICE (   class)
related

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

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

◆ PIIODEVICE

#define PIIODEVICE (   class,
  prefix 
)
related

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

"prefix" это уникальный префикс устройства, используемый в createFromFullPath().