Hi,

I'm trying to get a simple application up and running that sends and receives simple commands through a COM port to an Arduino hooked up to some sensors. Right now, I'm just trying to send the Arduino a simple command through a boost::asio::serial_port instance, although at some point I'll need to start reading from it as well.

At any rate, I think I've got the basic premise down, but for some reason the WriteComplete function (see code below) isn't being called. After running the program, the output is:

  Open
  Sending command '.'
  Press any key to continue.

I'm not 100% sure what's going on. The only thing I can think of is that the boost::asio::buffer(&command, sizeof(command)) statement is wrong. I'm not very familiar with these libraries, though, so I don't know what I would replace it with.

I've included the code I'm using in case anyone can help me out.

Thanks,
-Alex

---

#include "stdafx.h"
#include <iostream>
#include <boost\bind.hpp>
#include <boost\asio.hpp>

using namespace std;

boost::asio::io_service gService;
boost::asio::serial_port gPort(gService);

void WriteComplete(const boost::system::error_code& error, std::size_t bytes_transferred)
{
cout << "Write complete." << endl;
gPort.close();
}

int _tmain(int argc, _TCHAR* argv[])
{
gPort.open("COM3");
if(!gPort.is_open())
{
cout << "Could not open com port." << endl;
return 0;
}
cout << "Open" << endl;

typedef boost::asio::serial_port_base asio_serial;

gPort.set_option( asio_serial::baud_rate( 9600 ) );
gPort.set_option( asio_serial::flow_control( asio_serial::flow_control::none ) );
gPort.set_option( asio_serial::parity( asio_serial::parity::none ) );
gPort.set_option( asio_serial::stop_bits( asio_serial::stop_bits::one ) );
gPort.set_option( asio_serial::character_size( 8 ) );

char command = '.';
cout << "Sending command '" << command << "'" << endl;

gPort.async_write_some(
boost::asio::buffer(&command, sizeof(command)),
boost::bind( &WriteComplete, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred )
);

cout << "Press any key to continue.";
cin.ignore();
cin.get();

return 0;
}