Boost logo

Boost Users :

Subject: [Boost-users] serial port and boost::iostream
From: Christoph Gysin (christoph.gysin_at_[hidden])
Date: 2009-03-02 07:34:20


I wrote a simple serial device for the boost::iostream library using
the serial interface from boost:asio. Feel free to include it as an
example if you find it useful.

Chris

#include <boost/iostreams/stream.hpp>
#include <boost/asio/serial_port.hpp>

class serial_device
{
public:
        typedef char char_type;
        typedef boost::iostreams::bidirectional_device_tag category;

        serial_device(boost::asio::serial_port& port) : serial_port(port) {};

        std::streamsize read(char* buf, std::streamsize n)
        {
                return serial_port.read_some(boost::asio::buffer(buf, n));
        }
        std::streamsize write(const char* buf, std::streamsize n)
        {
                return serial_port.write_some(boost::asio::buffer(buf, n));
        }

private:
        boost::asio::serial_port& serial_port;
};

void example()
{
        // set up serial port
        boost::asio::io_service io_service;
#ifdef WIN32
        boost::asio::serial_port serial_port(io_service, "COM1");
#else
        boost::asio::serial_port serial_port(io_service, "/dev/ttyS0");
#endif

        typedef boost::asio::serial_port_base spb;
        serial_port.set_option(spb::baud_rate(9600));

        // create iostream
        serial_device dev(serial_port);
        boost::iostreams::stream<serial_device> serial(dev);

        // use serial port with iostream interface
        serial << "boost::iostreams are fun!" << std::endl;
        std::string response;
        serial >> response;
}

-- 
echo mailto: NOSPAM !#$.'<*>'|sed 's. ..'|tr "<*> !#:2" org_at_fr33z3

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net