title: serial port configuration using boost ASIO
body: <p>I am configuring serial port using boost asio.
  but why below code is giving error?
  If I comment set_option it works fine.</p>
  
  <p>below code gives error</p>
  
  <blockquote>
    <p>serial_config.cpp:13: error: expected unqualified-id before numeric
    constant In file included from
    /home/chirag/boost_install/include/boost/asio/serial_port_service.hpp:25,
                     from /home/chirag/boost_install/include/boost/asio/basic_serial_port.hpp:30,
                     from /home/chirag/boost_install/include/boost/asio.hpp:25,
                     from serial_config.cpp:1: /home/chirag/boost_install/include/boost/asio/detail/reactive_serial_port_service.hpp:
    In static member function âstatic boost::system::error_code
    boost::asio::detail::reactive_serial_port_service::store_option(const
    void*, termios&amp;, boost::system::error_code&amp;) [with
    SettableSerialPortOption = int]â:
    /home/chirag/boost_install/include/boost/asio/detail/reactive_serial_port_service.hpp:126:
    instantiated from âboost::system::error_code
    boost::asio::detail::reactive_serial_port_service::set_option(boost::asio::detail::reactive_descriptor_service::implementation_type&amp;,
    const SettableSerialPortOption&amp;, boost::system::error_code&amp;) [with
    SettableSerialPortOption = int]â
    /home/chirag/boost_install/include/boost/asio/serial_port_service.hpp:167:
    instantiated from âboost::system::error_code
    boost::asio::serial_port_service::set_option(boost::asio::detail::reactive_descriptor_service::implementation_type&amp;,
    const SettableSerialPortOption&amp;, boost::system::error_code&amp;) [with
    SettableSerialPortOption = int]â
    /home/chirag/boost_install/include/boost/asio/basic_serial_port.hpp:390:
    instantiated from âvoid
    boost::asio::basic_serial_port::set_option(const
    SettableSerialPortOption&amp;) [with SettableSerialPortOption = int,
    SerialPortService = boost::asio::serial_port_service]â
    serial_config.cpp:31:   instantiated from here
    /home/chirag/boost_install/include/boost/asio/detail/reactive_serial_port_service.hpp:194:
    error: request for member âstoreâ in â*(const int*)optionâ, which is
    of non-class type âconst intâ</p>
  </blockquote>
  
  <pre><code>#include &lt;boost/asio.hpp&gt; // include boost
  using namespace::boost::asio;  // save tons of typing
  #include &lt;iostream&gt;
  using std::cin;
  
  // These are the values our port needs to connect
  #ifdef _WIN32
  // windows uses com ports, this depends on what com port your cable is plugged in to.
      const char *PORT = "COM3";
  #else
  // *nix com ports
      const char *PORT = "dev/ttyS3";
  #endif
  // Note: all the following except BAUD are the exact same as the default values
  
  // what baud rate do we communicate at
  serial_port_base::baud_rate BAUD(19200);
  // how big is each "packet" of data (default is 8 bits)
  serial_port_base::character_size CSIZE( 8 );
  // what flow control is used (default is none)
  serial_port_base::flow_control FLOW( serial_port_base::flow_control::none );
  // what parity is used (default is none)
  serial_port_base::parity PARITY( serial_port_base::parity::none );
  // how many stop bits are used (default is one)
  serial_port_base::stop_bits STOP( serial_port_base::stop_bits::one );
  
  int main()
  {
      // create the I/O service that talks to the serial device
      io_service io;
      // create the serial device, note it takes the io service and the port name
      serial_port port( io, PORT );
  
      // go through and set all the options as we need them
      // all of them are listed, but the default values work for most cases
      port.set_option( BAUD );
      port.set_option( CSIZE );
      port.set_option( FLOW );
      port.set_option( PARITY );
      port.set_option( STOP );
  
      // buffer to store commands
      // this device reads 8 bits, meaning an unsigned char, as instructions
      // varies with the device, check the manual first
      unsigned char command[1] = {0};
  
      // read in user value to be sent to device
      int input;
      cin &gt;&gt; input;
  
      // Simple loop, since the only good values are [0,255]
      //  break when a negative number is entered.
      // The cast will convert too big numbers into range.
      while( input &gt;= 0 )
      {
          // convert our read in number into the target data type
          command[0] = static_cast&lt;unsigned char&gt;( input );
  
          // this is the command that sends the actual bits over the wire
          // note it takes a stream and a asio::buffer
          // the stream is our serial_port
          // the buffer is constructed using our command buffer and
          //  the number of instructions to send
          write( port, buffer( command, 1 ) );
  
          // read in the next input value
          cin &gt;&gt; input;
      }
  
      // all done sending commands
      return 0;
  }
  </code></pre>