void async_serial::_write_end(const boost::system::error_code& error) { if(!error) { boost::lock_guard<boost::mutex> l(_write_queue_mutex); if(_write_queue.empty()) { _write_buffer.reset(); _write_buffer_size=0; return; } _write_buffer_size = _write_queue.size(); _write_buffer.reset(new char[_write_queue.size()]); std::copy(_write_queue.begin(),_write_queue.end(), _write_buffer.get()); _write_queue.clear(); async_write( _port, boost::asio::buffer(_write_buffer.get(), _write_buffer_size), boost::bind( &async_serial::_write_end, this, boost::asio::placeholders::error)); } else { _set_error_status(true); _do_close(); } }
void async_serial::_read_end( const boost::system::error_code& error, size_t bytes_transferred) { if(error) { if(is_open()) { _do_close(); _set_error_status(true); } } else { if(_callback) _callback( _read_buffer, bytes_transferred); _do_read(); } }
void nxt_bluetooth_done() { _do_close(); }