9 Eylül 2017 Cumartesi

asio serial_port Sınıfı

Giriş
Çıplak serial_port sınıfını kullanmak yerine yine asio tabanlı serial-port kütüphanesi kullanılabilir.
Şu satırı dahil ederiz.
#include "AsyncSerial.h"
#include "BufferedAsyncSerial.h"
Şöyle yaparız.
BufferedAsyncSerial serial("/dev/ttyUSB0",4800);
Şöyle yaparız.
string str = serial.readStringUntil("\r"); 
Şöyle yaparız.
serial.close();
Metodlar
Constructor
Şöyle yaparız.
asio::io_service ios;
serial_port port (ios);
Constructor - device name
Şöyle yaparız.
asio::io_service ios;
asio::serial_port serial_port (ios, "COM3" );
async_read_some metodu
Şöyle yaparız.
serialPort.async_read_some(boost::asio::buffer(buf),handler);
Eğer okumada hata olursa handler'a geçilen bytes_transferred alanı doldurulmayabilir. Açıklaması şöyle
Upon error, most async operations leave bytes_transferred unspecified (unless, obviously specified otherwise).
cancel metodu
Şöyle yaparız.
serialPort.cancel();
close metodu
Şöyle yaparız.
serialPort.close();

is_open metodu
Şöyle yaparız.
if(serialPort.is_open()){...}
open metodu - string
Default constructor ile kurulan nesne ile kullanılır. İşlem başarısız ise exception fırlatır. Şöyle yaparız.
std::string port_name = ...;
serialPort.open(port_name);

open metodu - const char* + error_code
Default constructor ile kurulan nesne ile kullanılır. İşlem başarısız ise exception fırlatmaz. Şöyle yaparız.
const char *com_port_name = ...;
boost::system::error_code ec;
seria_port.open (com_port_name, ec);
if (ec) {
  std::cout << "failed. error << ec.message() << std::endl; 
  ...
}
 read_some metodu

Örnek ver

write_some metodu
Şöyle yaparız.
uint8_t value = ...;
serialPort.write_some(boost::asio::buffer(&value, sizeof(uint8_t)));
Şöyle yaparız.
std::string msg = ...;
serialPort.write_some(boost::asio::buffer(msg));
Ayarlar
baud rate
Şöyle yaparız.
serialPort.set_option(serial_port::baud_rate(9600));
character size
Şöyle yaparız.
serialPort.set_option(serial_port::character_size(8));
flow control
Şöyle tanımlı
class flow_control {
  public:
    enum type { none, software, hardware };
    ...
};
Şöyle yaparız.
serialPort.set_option(serial_port::flow_control(
                      serial_port::flow_control::none));
Şöyle yaparız.
serialPort.set_option(serial_port::flow_control(
                      serial_port::flow_control::software));
Şöyle yaparız.
serialPort.set_option(serial_port::flow_control(
                      serial_port::flow_control::hardware));
parity
Şöyle yaparız.
serialPort.set_option(serial_port::parity(serial_port::parity::none));
Şöyle yaparız.
serialPort.set_option(serial_port::parity(serial::parity::odd));
Şöyle yaparız.
serialPort.set_option(serial_port::parity(serial_port::parity::even));
Şöyle yaparız.
serialPort.set_option(serial_port::parity(serial_port_base::parity::even));
stop bits 
Şöyle yaparız.
serialPort.set_option(serial_port::stop_bits(
                      serial_port::stop_bits::one));
Şöyle yaparız.
serialPort.set_option(serial_port::stop_bits(
                      serial_port::stop_bits::onepointfive));
Şöyle yaparız.
serialPort.set_option(serial_port::stop_bits(
                      serial_port::stop_bits::two));

Hiç yorum yok:

Yorum Gönder