64,688
社区成员
发帖
与我相关
我的任务
分享
#include <boost/asio/serial_port.hpp>
void do_serial_test(int argc, char* argv[]) {
using namespace boost::asio;
io_service isvr;
serial_port port(isvr);
if (argc != 3) {
std::cout << "Usage : Asio [COM1] [client/server]\n";
return;
}
try {
//
// Open COM1.
//
port.open(argv[1]);
//
// Set parameter with 9600bps,8,1,1,none.
//
port.set_option<serial_port_base::baud_rate>(
serial_port_base::baud_rate(9600));
port.set_option<serial_port_base::character_size>(
serial_port_base::character_size(8));
port.set_option<serial_port_base::stop_bits>(
serial_port_base::stop_bits(serial_port_base::stop_bits::one));
port.set_option<serial_port_base::flow_control>(
serial_port_base::flow_control(serial_port_base::flow_control::none));
port.set_option<serial_port_base::parity>(
serial_port_base::parity(serial_port_base::parity::none));
std::string par(argv[2]);
if (par == std::string("client")) {
std::cout << "Client mode started...\n";
//
// Send a plain text.
//
char* text = "Hello Boost::asio::serial_port:)";
port.write_some<boost::asio::mutable_buffers_1>(
boost::asio::buffer(text, ::strlen(text) + 1));
} else if (par == std::string("server")) {
std::cout << "Server mode started...\n";
for (;;) {
//
// Waitting for a plain reply text.
//
char reply[128] = {0};
size_t reply_size = port.read_some<boost::asio::mutable_buffers_1>(
boost::asio::buffer(reply, 128));
std::cout << reply;
}
} else {
std::cout << "Unknow mode, pls read usage carefully.\n";
}
//
// Close port.
//
port.close();
} catch (std::exception& exp) {
std::cout
<< exp.what()
<< ".\n";
::exit(0);
}
}
int main(int argc, char* argv[]) {
do_serial_test(argc, argv);
return 0;
}