// detail/reactive_serial_port_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2017 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2020 Christopher M. Kohlhoff (chris at kohlhoff dot com)
// Copyright (c) 2008 Rep Invariant Systems, Inc. (info@repinvariant.com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
#include <string>
#include <boost/asio/error.hpp>
-#include <boost/asio/io_context.hpp>
+#include <boost/asio/execution_context.hpp>
#include <boost/asio/serial_port_base.hpp>
#include <boost/asio/detail/descriptor_ops.hpp>
#include <boost/asio/detail/reactive_descriptor_service.hpp>
// Extend reactive_descriptor_service to provide serial port support.
class reactive_serial_port_service :
- public service_base<reactive_serial_port_service>
+ public execution_context_service_base<reactive_serial_port_service>
{
public:
// The native type of a serial port.
// The implementation type of the serial port.
typedef reactive_descriptor_service::implementation_type implementation_type;
- BOOST_ASIO_DECL reactive_serial_port_service(
- boost::asio::io_context& io_context);
+ BOOST_ASIO_DECL reactive_serial_port_service(execution_context& context);
// Destroy all user-defined handler objects owned by the service.
BOOST_ASIO_DECL void shutdown();
boost::system::error_code send_break(implementation_type& impl,
boost::system::error_code& ec)
{
- errno = 0;
- descriptor_ops::error_wrapper(::tcsendbreak(
- descriptor_service_.native_handle(impl), 0), ec);
+ int result = ::tcsendbreak(descriptor_service_.native_handle(impl), 0);
+ descriptor_ops::get_last_error(ec, result < 0);
return ec;
}
// Start an asynchronous write. The data being written must be valid for the
// lifetime of the asynchronous operation.
- template <typename ConstBufferSequence, typename Handler>
+ template <typename ConstBufferSequence, typename Handler, typename IoExecutor>
void async_write_some(implementation_type& impl,
- const ConstBufferSequence& buffers, Handler& handler)
+ const ConstBufferSequence& buffers,
+ Handler& handler, const IoExecutor& io_ex)
{
- descriptor_service_.async_write_some(impl, buffers, handler);
+ descriptor_service_.async_write_some(impl, buffers, handler, io_ex);
}
// Read some data. Returns the number of bytes received.
// Start an asynchronous read. The buffer for the data being received must be
// valid for the lifetime of the asynchronous operation.
- template <typename MutableBufferSequence, typename Handler>
+ template <typename MutableBufferSequence,
+ typename Handler, typename IoExecutor>
void async_read_some(implementation_type& impl,
- const MutableBufferSequence& buffers, Handler& handler)
+ const MutableBufferSequence& buffers,
+ Handler& handler, const IoExecutor& io_ex)
{
- descriptor_service_.async_read_some(impl, buffers, handler);
+ descriptor_service_.async_read_some(impl, buffers, handler, io_ex);
}
private: