merged AI doc, some new pages

This commit is contained in:
2026-03-12 14:46:57 +03:00
parent 07ae277f9e
commit ed13838237
206 changed files with 14088 additions and 5152 deletions

View File

@@ -1,9 +1,8 @@
/*! \file piiodevice.h
* \ingroup IO
* \~\brief
* \~english Abstract input/output device
* \~russian Базовый класс утройств ввода/вывода
*/
//! \~\file piiodevice.h
//! \~\ingroup IO
//! \~\brief
//! \~english Core abstraction for configurable input/output devices
//! \~russian Базовая абстракция для настраиваемых устройств ввода/вывода
/*
PIP - Platform Independent Primitives
Abstract input/output device
@@ -30,14 +29,18 @@
#include "piqueue.h"
#include "pithread.h"
/// TODO: написать документацию, тут ничего не понятно
// function executed from threaded read, pass readedData, sizeOfData, ThreadedReadData
//! \~english Callback used by \a setThreadedReadSlot().
//! \~russian Callback, используемый методом \a setThreadedReadSlot().
//! \~\details
//! \~english Receives pointer to data read by the background thread, number of bytes and user data set by \a setThreadedReadData().
//! \~russian Принимает указатель на данные, прочитанные фоновым потоком, количество байт и пользовательские данные, заданные через \a
//! setThreadedReadData().
typedef std::function<bool(const uchar *, int, void *)> ReadRetFunc;
#ifdef DOXYGEN
//! \relatesalso PIIODevice
//! \brief
//! \~\brief
//! \~english Enable device instances creation with \a PIIODevice::createFromFullPath() function.
//! \~russian Включить создание экземпляров устройства с помощью метода \a PIIODevice::createFromFullPath().
//! \~\details
@@ -46,12 +49,12 @@ typedef std::function<bool(const uchar *, int, void *)> ReadRetFunc;
# define REGISTER_DEVICE(class)
//! \relatesalso PIIODevice
//! \brief
//! \~\brief
//! \~english Use this macro instead of PIOBJECT when describe your own PIIODevice.
//! \~russian Используйте этот макрос вместо PIOBJECT при объявлении своего PIIODevice.
//! \~\param "prefix"
//! \~english Unique device prefix in quotes, may be ""
//! \~russian Уникальный префикс устройства в кавычках, может быть ""
//! \~\details
//! \~english "prefix" is a unique device prefix used in \a createFromFullPath().
//! \~russian "prefix" это уникальный префикс устройства, используемый в \a createFromFullPath().
# define PIIODEVICE(class, "prefix")
#else
@@ -80,10 +83,10 @@ typedef std::function<bool(const uchar *, int, void *)> ReadRetFunc;
#endif
//! \ingroup IO
//! \~\ingroup IO
//! \~\brief
//! \~english Base class for input/output devices.
//! \~russian Базовый класс утройств ввода/вывода.
//! \~russian Базовый класс устройств ввода/вывода.
class PIP_EXPORT PIIODevice: public PIObject {
PIOBJECT_SUBCLASS(PIIODevice, PIObject);
friend void __DevicePool_threadReadDP(void * ddp);
@@ -91,20 +94,20 @@ class PIP_EXPORT PIIODevice: public PIObject {
public:
NO_COPY_CLASS(PIIODevice);
//! \~english Constructs a empty %PIIODevice
//! \~russian Создает пустой %PIIODevice
//! \~english Constructs an empty %PIIODevice.
//! \~russian Создает пустой %PIIODevice.
explicit PIIODevice();
//! \~english Open modes for PIIODevice
//! \~russian Режимы открытия для PIIODevice
//! \~english Open modes for %PIIODevice.
//! \~russian Режимы открытия %PIIODevice.
enum DeviceMode {
ReadOnly /*! \~english Device can only read \~russian Устройство может только читать */ = 0x01,
WriteOnly /*! \~english Device can only write \~russian Устройство может только писать */ = 0x02,
ReadWrite /*! \~english Device can both read and write \~russian Устройство может читать и писать */ = 0x03
};
//! \~english Options for PIIODevice, works with some devices
//! \~russian Опции для PIIODevice, работает для некоторых устройств
//! \~english Generic options supported by some devices.
//! \~russian Общие опции, поддерживаемые некоторыми устройствами.
enum DeviceOption {
BlockingRead /*! \~english \a read() block until data is received, default off \~russian \a read() блокируется, пока данные не
поступят, по умолчанию выключено */
@@ -114,8 +117,8 @@ public:
= 0x02
};
//! \~english Characteristics of PIIODevice channel
//! \~russian Характеристики канала PIIODevice
//! \~english Characteristics of the device channel.
//! \~russian Характеристики канала устройства.
enum DeviceInfoFlag {
Sequential /*! \~english Continuous bytestream without packets \~russian Непрерывный поток байт, без пакетирования */ = 0x01,
Reliable /*! \~english Channel without data errors or corruptions \~russian Канал без ошибок или повреждений данных */ = 0x02
@@ -127,136 +130,143 @@ public:
PIIODevice * (*fabricator)() = nullptr;
};
//! \~english Bitmask of \a DeviceOption values.
//! \~russian Битовая маска значений \a DeviceOption.
typedef PIFlags<DeviceOption> DeviceOptions;
//! \~english Bitmask of \a DeviceInfoFlag values.
//! \~russian Битовая маска значений \a DeviceInfoFlag.
typedef PIFlags<DeviceInfoFlag> DeviceInfoFlags;
//! \~english Constructs %PIIODevice with path "path" and open mode "mode"
//! \~russian Создает %PIIODevice с путём "path" и режимом открытия "mode"
//! \~english Constructs %PIIODevice with path "path" and open mode "mode".
//! \~russian Создает %PIIODevice с путём "path" и режимом открытия "mode".
explicit PIIODevice(const PIString & path, DeviceMode mode = ReadWrite);
//! \~english Destroys the device base object.
//! \~russian Уничтожает базовый объект устройства.
virtual ~PIIODevice();
//! \~english Returns current open mode of device
//! \~russian Возвращает текущий режим открытия устройства
//! \~english Returns current open mode.
//! \~russian Возвращает текущий режим открытия.
DeviceMode mode() const { return mode_; }
//! \~english Set open mode of device. Don`t reopen device
//! \~russian Устанавливает режим открытия устройства. Не переоткрывает устройство
//! \~english Sets open mode without reopening the device.
//! \~russian Устанавливает режим открытия без переоткрытия устройства.
void setMode(DeviceMode m) { mode_ = m; }
//! \~english Returns current device options
//! \~russian Возвращает текущие опции устройства
//! \~english Returns current device options.
//! \~russian Возвращает текущие опции устройства.
DeviceOptions options() const { return options_; }
//! \~english Returns current device option "o" state
//! \~russian Возвращает текущее состояние опции "o"
//! \~english Returns whether option "o" is enabled.
//! \~russian Возвращает, включена ли опция "o".
bool isOptionSet(DeviceOption o) const { return options_[o]; }
//! \~english Set device options
//! \~russian Устанавливает опции устройства
//! \~english Replaces all current device options with "o".
//! \~russian Полностью заменяет текущие опции устройства на "o".
void setOptions(DeviceOptions o);
//! \~english Set device option "o" to "yes" and returns previous state
//! \~russian Устанавливает опцию "o" устройства в "yes" и возвращает предыдущее состояние опции
//! \~english Sets option "o" to "yes" and returns its previous state.
//! \~russian Устанавливает опцию "o" в состояние "yes" и возвращает её предыдущее состояние.
bool setOption(DeviceOption o, bool yes = true);
//! \~english Returns device characteristic flags
//! \~russian Возвращает характеристики канала
//! \~english Returns device channel characteristics.
//! \~russian Возвращает характеристики канала устройства.
DeviceInfoFlags infoFlags() const { return deviceInfoFlags(); }
//! \~english Returns current path of device
//! \~russian Возвращает текущий путь устройства
//! \~english Returns current device path.
//! \~russian Возвращает текущий путь устройства.
PIString path() const { return property("path").toString(); }
//! \~english Set path of device. Don`t reopen device
//! \~russian Устанавливает путь устройства. Не переоткрывает устройство
//! \~english Sets device path without reopening the device.
//! \~russian Устанавливает путь устройства без его переоткрытия.
void setPath(const PIString & path) { setProperty("path", path); }
//! \~english Returns if mode is ReadOnly or ReadWrite
//! \~russian Возвращает равен ли режим открытия ReadOnly или ReadWrite
//! \~english Returns whether the current mode allows reading.
//! \~russian Возвращает, разрешает ли текущий режим чтение.
bool isReadable() const { return (mode_ & ReadOnly); }
//! \~english Returns if mode is WriteOnly or ReadWrite
//! \~russian Возвращает равен ли режим открытия WriteOnly или ReadWrite
//! \~english Returns whether the current mode allows writing.
//! \~russian Возвращает, разрешает ли текущий режим запись.
bool isWriteable() const { return (mode_ & WriteOnly); }
//! \~english Returns if device is successfully opened
//! \~russian Возвращает успешно ли открыто устройство
//! \~english Returns whether the device is currently opened.
//! \~russian Возвращает, открыто ли сейчас устройство.
bool isOpened() const { return opened_; }
//! \~english Returns if device is closed
//! \~russian Возвращает закрыто ли устройство
//! \~english Returns whether the device is currently closed.
//! \~russian Возвращает, закрыто ли сейчас устройство.
bool isClosed() const { return !opened_; }
//! \~english Returns if device can read \b now
//! \~russian Возвращает может ли устройство читать \b сейчас
//! \~english Returns whether reading is possible right now.
//! \~russian Возвращает, возможно ли чтение прямо сейчас.
virtual bool canRead() const { return opened_ && (mode_ & ReadOnly); }
//! \~english Returns if device can write \b now
//! \~russian Возвращает может ли устройство писать \b сейчас
//! \~english Returns whether writing is possible right now.
//! \~russian Возвращает, возможна ли запись прямо сейчас.
virtual bool canWrite() const { return opened_ && (mode_ & WriteOnly); }
//! \~english Set calling of \a open() enabled while threaded read on closed device
//! \~russian Устанавливает возможность вызова \a open() при потоковом чтении на закрытом устройстве
//! \~english Enables or disables automatic reopen attempts during threaded read.
//! \~russian Включает или выключает автоматические попытки переоткрытия при потоковом чтении.
void setReopenEnabled(bool yes = true);
//! \~english Set timeout between \a open() tryings if reopen is enabled
//! \~russian Устанавливает задержку между вызовами \a open() если переоткрытие активно
//! \~english Sets delay between automatic reopen attempts.
//! \~russian Устанавливает задержку между автоматическими попытками переоткрытия.
void setReopenTimeout(PISystemTime timeout);
//! \~english Returns reopen enable
//! \~russian Возвращает активно ли переоткрытие
//! \~english Returns whether automatic reopen is enabled.
//! \~russian Возвращает, включено ли автоматическое переоткрытие.
bool isReopenEnabled() const { return property("reopenEnabled").toBool(); }
//! \~english Returns reopen timeout
//! \~russian Возвращает задержку переоткрытия
//! \~english Returns delay between automatic reopen attempts.
//! \~russian Возвращает задержку между автоматическими попытками переоткрытия.
PISystemTime reopenTimeout() { return property("reopenTimeout").toSystemTime(); }
//! \~english Set threaded read callback
//! \~russian Устанавливает callback потокового чтения
//! \~english Sets callback invoked after successful threaded reads.
//! \~russian Устанавливает callback, вызываемый после успешного потокового чтения.
void setThreadedReadSlot(ReadRetFunc func);
//! \~english Set custom data that will be passed to threaded read callback
//! \~russian Устанавливает произвольный указатель, который будет передан в callback потокового чтения
//! \~english Sets custom user data passed to threaded read callback.
//! \~russian Устанавливает пользовательские данные, передаваемые в callback потокового чтения.
void setThreadedReadData(void * d) { ret_data_ = d; }
//! \~english Set size of threaded read buffer
//! \~russian Устанавливает размер буфера потокового чтения
//! \~english Sets background read buffer size in bytes.
//! \~russian Устанавливает размер буфера фонового чтения в байтах.
void setThreadedReadBufferSize(int new_size);
//! \~english Returns size of threaded read buffer
//! \~russian Возвращает размер буфера потокового чтения
//! \~english Returns background read buffer size in bytes.
//! \~russian Возвращает размер буфера фонового чтения в байтах.
int threadedReadBufferSize() const { return threaded_read_buffer_size; }
//! \~english Returns content of threaded read buffer
//! \~russian Возвращает содержимое буфера потокового чтения
//! \~english Returns pointer to the internal threaded-read buffer.
//! \~russian Возвращает указатель на внутренний буфер потокового чтения.
const uchar * threadedReadBuffer() const { return buffer_tr.data(); }
//! \~english Returns custom data that will be passed to threaded read callback
//! \~russian Возвращает произвольный указатель, который будет передан в callback потокового чтения
//! \~english Returns custom data passed to threaded read callback.
//! \~russian Возвращает пользовательские данные, передаваемые в callback потокового чтения.
void * threadedReadData() const { return ret_data_; }
//! \~english Returns if threaded read is started
//! \~russian Возвращает запущен ли поток чтения
//! \~english Returns whether threaded read is running.
//! \~russian Возвращает, запущено ли потоковое чтение.
bool isThreadedRead() const;
//! \~english Returns if threaded read is stopping
//! \~russian Возвращает останавливается ли поток чтения
//! \~english Returns whether threaded read is stopping.
//! \~russian Возвращает, находится ли потоковое чтение в процессе остановки.
bool isThreadedReadStopping() const { return read_thread.isStopping(); }
//! \~english Start threaded read
//! \~russian Запускает потоковое чтение
//! \~english Starts threaded read.
//! \~russian Запускает потоковое чтение.
void startThreadedRead();
//! \~english Start threaded read and assign threaded read callback to "func"
//! \~russian Запускает потоковое чтение и устанавливает callback потокового чтения в "func"
//! \~english Sets threaded read callback to "func" and starts threaded read.
//! \~russian Устанавливает callback потокового чтения в "func" и запускает потоковое чтение.
void startThreadedRead(ReadRetFunc func);
//! \~english Stop threaded read.
//! \~russian Останавливает потоковое чтение.
//! \~english Requests threaded read stop.
//! \~russian Запрашивает остановку потокового чтения.
void stopThreadedRead();
//! \~english Terminate threaded read.
@@ -266,25 +276,30 @@ public:
//! \~russian Старайтесь не использовать! Этот метод может привести к повреждению памяти!
void terminateThreadedRead();
//! \~english Wait for threaded read finish no longer than "timeout".
//! \~russian Ожидает завершения потокового чтения в течении не более "timeout".
//! \~english Waits until threaded read finishes or "timeout" expires.
//! \~russian Ожидает завершения потокового чтения, но не дольше "timeout".
bool waitThreadedReadFinished(PISystemTime timeout = {});
//! \~english Returns delay between unsuccessful threaded read attempts in milliseconds.
//! \~russian Возвращает задержку между безуспешными попытками потокового чтения в миллисекундах.
uint threadedReadTimeout() const { return threaded_read_timeout_ms; }
//! \~english Sets delay between unsuccessful threaded read attempts in milliseconds.
//! \~russian Устанавливает задержку между безуспешными попытками потокового чтения в миллисекундах.
void setThreadedReadTimeout(uint ms) { threaded_read_timeout_ms = ms; }
//! \~english Returns if threaded write is started
//! \~russian Возвращает запущен ли поток записи
//! \~english Returns whether threaded write is running.
//! \~russian Возвращает, запущена ли потоковая запись.
bool isThreadedWrite() const;
//! \~english Start threaded write
//! \~russian Запускает потоковую запись
//! \~english Starts threaded write.
//! \~russian Запускает потоковую запись.
void startThreadedWrite();
//! \~english Stop threaded write.
//! \~russian Останавливает потоковую запись.
//! \~english Requests threaded write stop.
//! \~russian Запрашивает остановку потоковой записи.
void stopThreadedWrite();
//! \~english Terminate threaded write.
@@ -294,217 +309,225 @@ public:
//! \~russian Старайтесь не использовать! Этот метод может привести к повреждению памяти!
void terminateThreadedWrite();
//! \~english Wait for threaded write finish no longer than "timeout".
//! \~russian Ожидает завершения потоковой записи в течении не более "timeout".
//! \~english Waits until threaded write finishes or "timeout" expires.
//! \~russian Ожидает завершения потоковой записи, но не дольше "timeout".
bool waitThreadedWriteFinished(PISystemTime timeout = {});
//! \~english Clear threaded write task queue
//! \~russian Очищает очередь потоковой записи
//! \~english Clears queued threaded-write tasks.
//! \~russian Очищает очередь заданий потоковой записи.
void clearThreadedWriteQueue();
//! \~english Start both threaded read and threaded write
//! \~russian Запускает потоковое чтение и запись
//! \~english Starts both threaded read and threaded write.
//! \~russian Запускает потоковое чтение и потоковую запись.
void start();
//! \~english Stop both threaded read and threaded write.
//! \~russian Останавливает потоковое чтение и запись.
//! \~english Requests stop for both threaded read and threaded write.
//! \~russian Запрашивает остановку потокового чтения и потоковой записи.
void stop();
//! \~english Stop both threaded read and threaded write and wait for finish.
//! \~russian Останавливает потоковое чтение и запись и ожидает завершения.
//! \~english Stops both background threads and waits for completion.
//! \~russian Останавливает оба фоновых потока и ожидает их завершения.
void stopAndWait(PISystemTime timeout = {});
//! \~english Interrupt blocking operation.
//! \~russian Прерывает блокирующую операцию.
//! \~english Interrupts a blocking device operation.
//! \~russian Прерывает блокирующую операцию устройства.
virtual void interrupt() {}
//! \~english Read from device maximum "max_size" bytes to "read_to"
//! \~russian Читает из устройства не более "max_size" байт в "read_to"
//! \~english Reads at most "max_size" bytes into "read_to".
//! \~russian Читает в "read_to" не более "max_size" байт.
ssize_t read(void * read_to, ssize_t max_size);
//! \~english Read from device to memory block "mb"
//! \~russian Читает из устройства в блок памяти "mb"
//! \~english Reads data into memory block "mb".
//! \~russian Читает данные в блок памяти "mb".
ssize_t read(PIMemoryBlock mb);
//! \~english Read from device maximum "max_size" bytes and returns them as PIByteArray
//! \~russian Читает из устройства не более "max_size" байт и возвращает данные как PIByteArray
//! \~english Reads at most "max_size" bytes and returns them as \a PIByteArray.
//! \~russian Читает не более "max_size" байт и возвращает их как \a PIByteArray.
PIByteArray read(ssize_t max_size);
//! \~english Returns the number of bytes that are available for reading.
//! \~russian Возвращает количество байт доступных для чтения
//! \~russian Возвращает количество байт доступных для чтения.
//! \~\details
//! \~english 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.
//! \~russian Эта функция как правило используется чтобы знать какой
//! размер буфера нужен в памяти для чтения.
//! Если функция возвращает -1 это значит что количество байт для чтения не известно.
//! \~english
//! 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.
//! \~russian
//! Эта функция как правило используется чтобы знать какой размер буфера нужен в памяти для чтения. Если функция возвращает -1 это
//! значит что количество байт для чтения не известно.
virtual ssize_t bytesAvailable() const { return -1; }
//! \~english Write maximum "max_size" bytes of "data" to device
//! \~russian Пишет в устройство не более "max_size" байт из "data"
//! \~english Writes at most "max_size" bytes from "data".
//! \~russian Записывает из "data" не более "max_size" байт.
ssize_t write(const void * data, ssize_t max_size);
//! \~english Read from device for "timeout" and return readed data as PIByteArray.
//! \~russian Читает из устройства в течении "timeout" и возвращает данные как PIByteArray.
//! \~english Reads data for up to "timeout" and returns collected bytes.
//! \~russian Читает данные в течение "timeout" и возвращает накопленные байты.
PIByteArray readForTime(PISystemTime timeout);
//! \~english Add task to threaded write queue and return task ID
//! \~russian Добавляет данные в очередь на потоковую запись и возвращает ID задания
//! \~english Queues "data" for threaded write and returns task ID.
//! \~russian Помещает "data" в очередь потоковой записи и возвращает ID задания.
ullong writeThreaded(const void * data, ssize_t max_size) { return writeThreaded(PIByteArray(data, uint(max_size))); }
//! \~english Add task to threaded write queue and return task ID
//! \~russian Добавляет данные в очередь на потоковую запись и возвращает ID задания
//! \~english Queues byte array "data" for threaded write and returns task ID.
//! \~russian Помещает массив байт "data" в очередь потоковой записи и возвращает ID задания.
ullong writeThreaded(const PIByteArray & data);
//! \~english Configure device from section "section" of file "config_file", if "parent_section" parent section also will be read
//! \~english Configures the device from section "section" of file "config_file".
//! \~russian Настраивает устройство из секции "section" файла "config_file".
//! \~\details
//! \~english
//! If "parent_section" is true, inherited parameters are also read from the parent section.
//! \~russian
//! Если "parent_section" равно true, то дополнительные параметры также читаются из родительской секции.
bool configure(const PIString & config_file, const PIString & section, bool parent_section = false);
//! \~english Returns full unambiguous string prefix. \ref PIIODevice_sec7
//! \~russian Возвращает префикс устройства. \ref PIIODevice_sec7
//! \~english Returns device prefix used in full-path notation. \ref PIIODevice_sec7
//! \~russian Возвращает префикс устройства, используемый в полной строке пути. \ref PIIODevice_sec7
virtual PIConstChars fullPathPrefix() const { return ""; }
static PIConstChars fullPathPrefixS() { return ""; }
//! \~english Returns full unambiguous string, describes this device, \a fullPathPrefix() + "://" + ...
//! \~russian Возвращает строку полного описания для этого устройства, \a fullPathPrefix() + "://" + ...
//! \~english Returns full-path representation of this device, \a fullPathPrefix() + "://" + ...
//! \~russian Возвращает полную строку описания этого устройства, \a fullPathPrefix() + "://" + ...
PIString constructFullPath() const;
//! \~english Configure device with parameters of full unambiguous string
//! \~russian Настраивает устройство из параметров строки полного описания
//! \~english Configures the device from full-path parameters.
//! \~russian Настраивает устройство из параметров полной строки описания.
void configureFromFullPath(const PIString & full_path);
//! \~english Returns PIVariantTypes::IODevice, describes this device
//! \~russian Возвращает PIVariantTypes::IODevice, описывающий это устройство
//! \~english Builds \a PIVariantTypes::IODevice description for this device.
//! \~russian Создает описание \a PIVariantTypes::IODevice для этого устройства.
PIVariantTypes::IODevice constructVariant() const;
//! \~english Configure device from PIVariantTypes::IODevice
//! \~russian Настраивает устройство из PIVariantTypes::IODevice
//! \~english Configures the device from \a PIVariantTypes::IODevice.
//! \~russian Настраивает устройство из \a PIVariantTypes::IODevice.
void configureFromVariant(const PIVariantTypes::IODevice & d);
//! \~english Try to create new device by prefix, configure it with \a configureFromFullPath() and returns it.
//! \~russian Пытается создать новое устройство по префиксу, настраивает с помощью \a configureFromFullPath() и возвращает его
//! \~russian Пытается создать новое устройство по префиксу, настраивает с помощью \a configureFromFullPath() и возвращает его.
static PIIODevice * createFromFullPath(const PIString & full_path);
//! \~english Try to create new device by prefix, configure it with \a configureFromVariant() and returns it.
//! \~russian Пытается создать новое устройство по префиксу, настраивает с помощью \a configureFromVariant() и возвращает его
//! \~russian Пытается создать новое устройство по префиксу, настраивает с помощью \a configureFromVariant() и возвращает его.
static PIIODevice * createFromVariant(const PIVariantTypes::IODevice & d);
//! \~english Returns normalized full-path representation for "full_path".
//! \~russian Возвращает нормализованную полную строку пути для "full_path".
static PIString normalizeFullPath(const PIString & full_path);
//! \~english Splits full-path string into path, mode and options.
//! \~russian Разбирает полную строку пути на путь, режим и опции.
static void splitFullPath(PIString fpwm, PIString * full_path, DeviceMode * mode = 0, DeviceOptions * opts = 0);
//! \~english Returns fullPath prefixes of all registered devices
//! \~russian Возвращает префиксы всех зарегистрированных устройств
static PIStringList availablePrefixes();
//! \~english Returns class names of all registered devices
//! \~russian Возвращает имена классов всех зарегистрированных устройств
//! \~english Returns class names of all registered devices.
//! \~russian Возвращает имена классов всех зарегистрированных устройств.
static PIStringList availableClasses();
static void registerDevice(PIConstChars prefix, PIConstChars classname, PIIODevice * (*fabric)());
EVENT_HANDLER(bool, open);
EVENT_HANDLER1(bool, open, const PIString &, _path);
bool open(DeviceMode _mode);
EVENT_HANDLER2(bool, open, const PIString &, _path, DeviceMode, _mode);
EVENT_HANDLER(bool, close);
EVENT_HANDLER1(ssize_t, write, PIByteArray, data);
//! \~english Write memory block "mb" to device
//! \~russian Пишет в устройство блок памяти "mb"
//! \~english Writes memory block "mb" to the device.
//! \~russian Записывает в устройство блок памяти "mb".
ssize_t write(const PIMemoryBlock & mb) { return write(mb.data(), mb.size()); }
EVENT_VHANDLER(void, flush) { ; }
EVENT(opened);
EVENT(closed);
EVENT2(threadedReadEvent, const uchar *, readed, ssize_t, size);
EVENT2(threadedWriteEvent, ullong, id, ssize_t, written_size);
//! \handlers
//! \{
//! \fn bool open()
//! \~english Open device
//! \~russian Открывает устройство
//! \~english Opens the device with current path and mode.
//! \~russian Открывает устройство с текущими путём и режимом.
EVENT_HANDLER(bool, open);
//! \fn bool open(const PIString & path)
//! \~english Open device with path "path"
//! \~russian Открывает устройство с путём "path"
//! \~english Opens the device with path "path".
//! \~russian Открывает устройство с путём "path".
EVENT_HANDLER1(bool, open, const PIString &, _path);
//! \fn bool open(const DeviceMode & mode)
//! \~english Open device with mode "mode"
//! \~russian Открывает устройство с режимом открытия "mode"
//! \fn bool open(DeviceMode mode)
//! \~english Opens the device with mode "mode".
//! \~russian Открывает устройство с режимом "mode".
bool open(DeviceMode _mode);
//! \fn bool open(const PIString & path, const DeviceMode & mode)
//! \~english Open device with path "path" and mode "mode"
//! \~russian Открывает устройство с путём "path" и режимом открытия "mode"
//! \fn bool open(const PIString & path, DeviceMode mode)
//! \~english Opens the device with path "path" and mode "mode".
//! \~russian Открывает устройство с путём "path" и режимом "mode".
EVENT_HANDLER2(bool, open, const PIString &, _path, DeviceMode, _mode);
//! \fn bool close()
//! \~english Close device
//! \~russian Закрывает устройство
//! \~english Closes the device.
//! \~russian Закрывает устройство.
EVENT_HANDLER(bool, close);
//! \fn ssize_t write(PIByteArray data)
//! \~english Write "data" to device
//! \~russian Пишет "data" в устройство
//! \~english Writes "data" to the device.
//! \~russian Записывает "data" в устройство.
EVENT_HANDLER1(ssize_t, write, PIByteArray, data);
//! \}
//! \vhandlers
//! \{
//! \fn void flush()
//! \~english Immediate write all buffers
//! \~russian Немедленно записать все буферизированные данные
//! \~english Immediately flushes device buffers.
//! \~russian Немедленно сбрасывает буферы устройства.
EVENT_VHANDLER(void, flush) { ; }
//! \}
//! \events
//! \{
//! \fn void opened()
//! \~english Raise if succesfull open
//! \~russian Вызывается при успешном открытии
//! \~english Raised after successful opening.
//! \~russian Вызывается после успешного открытия.
EVENT(opened);
//! \fn void closed()
//! \~english Raise if succesfull close
//! \~russian Вызывается при успешном закрытии
//! \~english Raised after successful closing.
//! \~russian Вызывается после успешного закрытия.
EVENT(closed);
//! \fn void threadedReadEvent(const uchar * readed, ssize_t size)
//! \~english Raise if read thread succesfull read some data
//! \~russian Вызывается при успешном потоковом чтении данных
//! \~english Raised after threaded read receives some data.
//! \~russian Вызывается после того, как потоковое чтение получило данные.
EVENT2(threadedReadEvent, const uchar *, readed, ssize_t, size);
//! \fn void threadedWriteEvent(ullong id, ssize_t written_size)
//! \~english Raise if write thread successfull write some data of task with ID "id"
//! \~russian Вызывается при успешной потоковой записи данных с ID задания "id"
//! \~english Raised after threaded write processes task with ID "id".
//! \~russian Вызывается после того, как потоковая запись обработала задание с ID "id".
EVENT2(threadedWriteEvent, ullong, id, ssize_t, written_size);
//! \}
//! \ioparams
//! \{
#ifdef DOXYGEN
//! \~english setReopenEnabled, default "true"
//! \~russian setReopenEnabled, по умолчанию "true"
//! \~english setReopenEnabled, default "true".
//! \~russian setReopenEnabled, по умолчанию "true".
bool reopenEnabled;
//! \~english setReopenTimeout, default 1_s
//! \~russian setReopenTimeout, по умолчанию 1_s
//! \~english setReopenTimeout, default 1_s.
//! \~russian setReopenTimeout, по умолчанию 1_s.
int reopenTimeout;
//! \~english setThreadedReadBufferSize in bytes, default 4096
//! \~russian setThreadedReadBufferSize в байтах, по умолчанию 4096
//! \~english setThreadedReadBufferSize in bytes, default 4096.
//! \~russian setThreadedReadBufferSize в байтах, по умолчанию 4096.
int threadedReadBufferSize;
#endif
//! \}
protected:
//! \~english Reimplement to configure device from entries "e_main" and "e_parent", cast arguments to \a PIConfig::Entry*
//! \~russian
//! \~english Reimplement to configure the device from "e_main" and optional "e_parent" entries cast to \a PIConfig::Entry*.
//! \~russian Переопределите для настройки устройства из записей "e_main" и необязательной "e_parent", приведённых к \a
//! PIConfig::Entry*.
virtual bool configureDevice(const void * e_main, const void * e_parent = 0) { return true; }
//! \~english Reimplement to open device, return value will be set to "opened_" variable.
@@ -513,8 +536,8 @@ protected:
//! переменную "opened_". Не используйте напрямую, только через \a open()!
virtual bool openDevice() = 0; // use path_, type_, opened_, init_ variables
//! \~english Reimplement to close device, inverse return value will be set to "opened_" variable
//! \~russian Переопределите для закрытия устройства, обратное возвращаемое значение будет установлено в переменную "opened_"
//! \~english Reimplement to close the device; inverse return value is stored into "opened_".
//! \~russian Переопределите для закрытия устройства; обратное возвращаемое значение сохраняется в "opened_".
virtual bool closeDevice() { return true; } // use path_, type_, opened_, init_ variables
//! \~english Reimplement this function to read from your device
@@ -531,44 +554,42 @@ protected:
return -2;
}
//! \~english Function executed when thread read some data, default implementation execute external callback "ret_func_"
//! \~russian Метод вызывается после каждого успешного потокового чтения, по умолчанию вызывает callback "ret_func_"
//! \~english Called after threaded read receives data; default implementation calls the external callback set by \a
//! setThreadedReadSlot().
//! \~russian Вызывается после успешного потокового чтения; по умолчанию вызывает внешний callback, заданный через \a
//! setThreadedReadSlot().
virtual bool threadedRead(const uchar * readed, ssize_t size);
//! \~english Reimplement to construct full unambiguous string, describes this device.
//! Default implementation returns \a path()
//! \~russian Переопределите для создания строки полного описания устройства.
//! По умолчанию возвращает \a path()
//! \~english Reimplement to build device-specific part of full-path string. Default implementation returns \a path().
//! \~russian Переопределите для построения device-specific части полной строки пути. По умолчанию возвращает \a path().
virtual PIString constructFullPathDevice() const { return path(); }
//! \~english Reimplement to configure your device with parameters of full unambiguous string.
//! Default implementation call \a setPath()
//! \~russian Переопределите для настройки устройства из строки полного описания.
//! По умолчанию вызывает \a setPath()
//! \~english Reimplement to configure the device from device-specific full-path parameters. Default implementation calls \a setPath().
//! \~russian Переопределите для настройки устройства из device-specific параметров полной строки пути. По умолчанию вызывает \a
//! setPath().
virtual void configureFromFullPathDevice(const PIString & full_path) { setPath(full_path); }
//! \~english Reimplement to construct device properties.
//! Default implementation return PIPropertyStorage with \"path\" entry
//! \~russian Переопределите для создания свойств устройства.
//! По умолчанию возвращает PIPropertyStorage со свойством \"path\"
//! \~english Reimplement to build device-specific variant properties. Default implementation returns \a PIPropertyStorage with "path".
//! \~russian Переопределите для построения device-specific свойств варианта. По умолчанию возвращает \a PIPropertyStorage со свойством
//! "path".
virtual PIPropertyStorage constructVariantDevice() const;
//! \~english Reimplement to configure your device from PIPropertyStorage. Options and mode already applied.
//! Default implementation apply \"path\" entry
//! \~russian Переопределите для настройки устройства из PIPropertyStorage. Опции и режим уже применены.
//! По умолчанию устанавливает свойство \"path\"
//! \~english Reimplement to configure the device from \a PIPropertyStorage. Mode and options are already applied.
//! Default implementation applies "path".
//! \~russian Переопределите для настройки устройства из \a PIPropertyStorage. Режим и опции уже применены.
//! Реализация по умолчанию применяет "path".
virtual void configureFromVariantDevice(const PIPropertyStorage & d);
//! \~english Reimplement to apply new device options
//! \~russian Переопределите для применения новых опций устройства
//! \~english Reimplement to react to changed device options.
//! \~russian Переопределите для реакции на изменение опций устройства.
virtual void optionsChanged() { ; }
//! \~english Reimplement to return correct \a DeviceInfoFlags. Default implementation returns 0
//! \~russian Переопределите для возврата правильных \a DeviceInfoFlags. По умолчанию возвращает 0
//! \~english Reimplement to report actual \a DeviceInfoFlags. Default implementation returns 0.
//! \~russian Переопределите для возврата актуальных \a DeviceInfoFlags. По умолчанию возвращает 0.
virtual DeviceInfoFlags deviceInfoFlags() const { return 0; }
//! \~english Reimplement to apply new \a threadedReadBufferSize()
//! \~russian Переопределите для применения нового \a threadedReadBufferSize()
//! \~english Reimplement to react to new \a threadedReadBufferSize().
//! \~russian Переопределите для реакции на новое значение \a threadedReadBufferSize().
virtual void threadedReadBufferSizeChanged() { ; }
static PIIODevice * newDeviceByPrefix(const char * prefix);