Серийная портовая служба должна соответствовать требованиям к объектной службеввода/выводас поддержкой подвижности, а также дополнительным требованиям, перечисленным ниже.
В приведенной ниже таблице<X>обозначает класс обслуживания последовательного порта,<a>и<ao>обозначает значения типа<X>,<d>обозначает имя устройства последовательного порта типа<std::string>,<b>и<c>обозначает значения типа<X::implementation_type>,<n>обозначает значение типа<X::native_handle_type>,<ec>обозначает значение типа<error_code>,<s>обозначает соответствие значения.<SettableSerialPortOption>требования,<g>обозначает значение, удовлетворяющее<GettableSerialPortOption>требованиям,<mb>обозначает значение, удовлетворяющеетребованиям изменяемой буферной последовательности,<rh>обозначает значение, удовлетворяющее<ReadHandler>требованиям,<cb>обозначает значение, удовлетворяющеетребованиям постоянной буферной последовательности, а<wh>обозначает значение, удовлетворяющее<WriteHandler>требованиям.<u>и<v>обозначают идентификаторы.
Table 25. SerialPortService requirements
выражение
Тип возврата
утверждение/примечание до/после условия
X::native_handle_type
The implementation-defined native representation of a serial port.
Must satisfy the requirements of CopyConstructible
types (C++ Std, 20.1.3), and the requirements of Assignable types (C++ Std, 23.1).
From IoObjectService
requirements. The underlying native representation is moved from
c to b.
a.move_assign(b,ao,c);
From IoObjectService
requirements. Implicitly cancels asynchronous operations associated
with b, as if by
calling a.close(b,ec).
Then the underlying native representation is moved from c to b.
If a.is_open()
is true, causes any outstanding asynchronous operations to complete
as soon as possible. Handlers for cancelled operations shall be
passed the error code error::operation_aborted.
post: !a.is_open(b).
a.native_handle(b);
X::native_handle_type
a.cancel(b,ec);
error_code
pre: a.is_open(b).
Causes any outstanding asynchronous operations to complete as soon
as possible. Handlers for cancelled operations shall be passed
the error code error::operation_aborted.
Считывает один или несколько байт данных из последовательного порта<b>.
Изменяемая буферная последовательность<mb>определяет память, в которой должны быть размещены данные. Операция должна всегда полностью заполнять буфер в последовательности перед переходом к следующей.
В случае успеха возвращает число прочитанных байтов. В противном случае<0>. Если суммарный размер всех буферов в последовательности<mb>равен<0>, функция возвращается<0>немедленно.
Если операция завершается из-за изящного закрытия соединения сверстником, операция должна выйти из строя<error::eof>
.
a.async_read_some(b,mb,rh);
void
pre: a.is_open(b).
Initiates an asynchronous operation to read one or more
bytes of data from a serial port b.
The operation is performed via the io_service
object a.get_io_service()
and behaves according to asynchronous
operation requirements.
The mutable buffer
sequence mb specifies
memory where the data should be placed. The operation shall always
fill a buffer in the sequence completely before proceeding to the
next.
The implementation shall maintain one or more
copies of mb until
such time as the read operation no longer requires access to the
memory specified by the buffers in the sequence. The program must
ensure the memory is valid until:
— the last copy of
mb is destroyed,
or
— the handler for the asynchronous operation is invoked,
whichever comes first. If the total size of all buffers
in the sequence mb
is 0, the asynchronous
read operation shall complete immediately and pass 0 as the argument to the handler
that specifies the number of bytes read.
If the operation
completes due to graceful connection closure by the peer, the operation
shall fail with error::eof.
If the operation completes successfully, the ReadHandler object rh is invoked with the number
of bytes transferred. Otherwise it is invoked with 0.
a.write_some(b,cb,ec);
size_t
pre: a.is_open(b).
Writes one or more bytes of data to a serial port b.
The constant
buffer sequence cb
specifies memory where the data to be written is located. The operation
shall always write a buffer in the sequence completely before proceeding
to the next.
If successful, returns the number of
bytes written. Otherwise returns 0.
If the total size of all buffers in the sequence cb is 0,
the function shall return 0
immediately.
<a.async_write_some(b,cb,wh);>
void
pre: a.is_open(b).
Initiates an asynchronous operation to write one or more
bytes of data to a serial port b.
The operation is performed via the io_service
object a.get_io_service()
and behaves according to asynchronous
operation requirements.
The constant buffer
sequence cb specifies
memory where the data to be written is located. The operation shall
always write a buffer in the sequence completely before proceeding
to the next.
The implementation shall maintain one
or more copies of cb
until such time as the write operation no longer requires access
to the memory specified by the buffers in the sequence. The program
must ensure the memory is valid until:
— the last copy
of cb is destroyed,
or
— the handler for the asynchronous operation is invoked,
whichever comes first. If the total size of all buffers
in the sequence cb
is 0, the asynchronous
operation shall complete immediately and pass 0
as the argument to the handler that specifies the number of bytes
read.
If the operation completes successfully, the
WriteHandler object
wh is invoked with
the number of bytes transferred. Otherwise it is invoked with
0.
Статья Serial port service requirements раздела Boost.Asio Reference может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.