Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef ASIO_SERIAL_PORT_SERVICE_HPP
00012 #define ASIO_SERIAL_PORT_SERVICE_HPP
00013
00014 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
00015 # pragma once
00016 #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
00017
00018 #include "asio/detail/push_options.hpp"
00019
00020 #include "asio/detail/push_options.hpp"
00021 #include <cstddef>
00022 #include <boost/config.hpp>
00023 #include <string>
00024 #include "asio/detail/pop_options.hpp"
00025
00026 #include "asio/error.hpp"
00027 #include "asio/io_service.hpp"
00028 #include "asio/detail/service_base.hpp"
00029 #include "asio/detail/reactive_serial_port_service.hpp"
00030 #include "asio/detail/win_iocp_serial_port_service.hpp"
00031
00032 #if !defined(ASIO_DISABLE_SERIAL_PORT)
00033 # if defined(ASIO_HAS_IOCP) \
00034 || !defined(BOOST_WINDOWS) && !defined(__CYGWIN__)
00035 # define ASIO_HAS_SERIAL_PORT 1
00036 # endif // defined(ASIO_HAS_IOCP)
00037 #endif // !defined(ASIO_DISABLE_STREAM_HANDLE)
00038
00039 #if defined(ASIO_HAS_SERIAL_PORT) \
00040 || defined(GENERATING_DOCUMENTATION)
00041
00042 namespace asio {
00043
00045 class serial_port_service
00046 #if defined(GENERATING_DOCUMENTATION)
00047 : public asio::io_service::service
00048 #else
00049 : public asio::detail::service_base<serial_port_service>
00050 #endif
00051 {
00052 public:
00053 #if defined(GENERATING_DOCUMENTATION)
00054
00055 static asio::io_service::id id;
00056 #endif
00057
00058 private:
00059
00060 #if defined(ASIO_HAS_IOCP)
00061 typedef detail::win_iocp_serial_port_service service_impl_type;
00062 #elif defined(ASIO_HAS_EPOLL)
00063 typedef detail::reactive_serial_port_service<
00064 detail::epoll_reactor<false> > service_impl_type;
00065 #elif defined(ASIO_HAS_KQUEUE)
00066 typedef detail::reactive_serial_port_service<
00067 detail::kqueue_reactor<false> > service_impl_type;
00068 #elif defined(ASIO_HAS_DEV_POLL)
00069 typedef detail::reactive_serial_port_service<
00070 detail::dev_poll_reactor<false> > service_impl_type;
00071 #else
00072 typedef detail::reactive_serial_port_service<
00073 detail::select_reactor<false> > service_impl_type;
00074 #endif
00075
00076 public:
00078 #if defined(GENERATING_DOCUMENTATION)
00079 typedef implementation_defined implementation_type;
00080 #else
00081 typedef service_impl_type::implementation_type implementation_type;
00082 #endif
00083
00085 #if defined(GENERATING_DOCUMENTATION)
00086 typedef implementation_defined native_type;
00087 #else
00088 typedef service_impl_type::native_type native_type;
00089 #endif
00090
00092 explicit serial_port_service(asio::io_service& io_service)
00093 : asio::detail::service_base<serial_port_service>(io_service),
00094 service_impl_(asio::use_service<service_impl_type>(io_service))
00095 {
00096 }
00097
00099 void shutdown_service()
00100 {
00101 }
00102
00104 void construct(implementation_type& impl)
00105 {
00106 service_impl_.construct(impl);
00107 }
00108
00110 void destroy(implementation_type& impl)
00111 {
00112 service_impl_.destroy(impl);
00113 }
00114
00116 asio::error_code open(implementation_type& impl,
00117 const std::string& device, asio::error_code& ec)
00118 {
00119 return service_impl_.open(impl, device, ec);
00120 }
00121
00123 asio::error_code assign(implementation_type& impl,
00124 const native_type& native_handle, asio::error_code& ec)
00125 {
00126 return service_impl_.assign(impl, native_handle, ec);
00127 }
00128
00130 bool is_open(const implementation_type& impl) const
00131 {
00132 return service_impl_.is_open(impl);
00133 }
00134
00136 asio::error_code close(implementation_type& impl,
00137 asio::error_code& ec)
00138 {
00139 return service_impl_.close(impl, ec);
00140 }
00141
00143 native_type native(implementation_type& impl)
00144 {
00145 return service_impl_.native(impl);
00146 }
00147
00149 asio::error_code cancel(implementation_type& impl,
00150 asio::error_code& ec)
00151 {
00152 return service_impl_.cancel(impl, ec);
00153 }
00154
00156 template <typename SettableSerialPortOption>
00157 asio::error_code set_option(implementation_type& impl,
00158 const SettableSerialPortOption& option, asio::error_code& ec)
00159 {
00160 return service_impl_.set_option(impl, option, ec);
00161 }
00162
00164 template <typename GettableSerialPortOption>
00165 asio::error_code get_option(const implementation_type& impl,
00166 GettableSerialPortOption& option, asio::error_code& ec) const
00167 {
00168 return service_impl_.get_option(impl, option, ec);
00169 }
00170
00172 asio::error_code send_break(implementation_type& impl,
00173 asio::error_code& ec)
00174 {
00175 return service_impl_.send_break(impl, ec);
00176 }
00177
00179 template <typename ConstBufferSequence>
00180 std::size_t write_some(implementation_type& impl,
00181 const ConstBufferSequence& buffers, asio::error_code& ec)
00182 {
00183 return service_impl_.write_some(impl, buffers, ec);
00184 }
00185
00187 template <typename ConstBufferSequence, typename WriteHandler>
00188 void async_write_some(implementation_type& impl,
00189 const ConstBufferSequence& buffers, WriteHandler handler)
00190 {
00191 service_impl_.async_write_some(impl, buffers, handler);
00192 }
00193
00195 template <typename MutableBufferSequence>
00196 std::size_t read_some(implementation_type& impl,
00197 const MutableBufferSequence& buffers, asio::error_code& ec)
00198 {
00199 return service_impl_.read_some(impl, buffers, ec);
00200 }
00201
00203 template <typename MutableBufferSequence, typename ReadHandler>
00204 void async_read_some(implementation_type& impl,
00205 const MutableBufferSequence& buffers, ReadHandler handler)
00206 {
00207 service_impl_.async_read_some(impl, buffers, handler);
00208 }
00209
00210 private:
00211
00212 service_impl_type& service_impl_;
00213 };
00214
00215 }
00216
00217 #endif // defined(ASIO_HAS_SERIAL_PORT)
00218
00219
00220 #include "asio/detail/pop_options.hpp"
00221
00222 #endif // ASIO_SERIAL_PORT_SERVICE_HPP