発端
C++でシリアルポートのライブラリを探したがいいのがなかった。
Siv3Dにあるがクロスプラットフォームに(まだ)対応してない。
→じゃあ自分で作ろう
成果物
やったぜ
https://github.com/MurakamiShun/SerialPort
使用例
main.cpp
#include "Serial.hpp"
#include <vector>
#include <string>
#include <iostream>
using namespace std;
int main() {
//デバイス一覧
auto list = getSerialList();
for (const auto& info : list) {
cout << "device name:" << info.device_name() << endl;
cout << "name:" << info.port() << "\n" << endl;
}
Serial serial;
int port;
cin >> port;
//オープン
if (!serial.open(list[port], 9600))
return -1;
//SerialInfo構造体にポート名とデバイス名が入っている
SerialInfo info = serial.getInfo();
cout << "open success" << endl;
cout << "device name:" << info.device_name() << endl;
cout << "name:" << info.port() << "\n" << endl;
//以下ループ
while (true) {
auto v = serial.read();
for (auto c : v) {
cout << c;
}
}
return 0;
}
使用するときの注意点
ポート名とデバイスネームはWindwosとLinuxで違くなる。
バッファが少ないから別のスレッドで処理するとかして、一杯にならないように。
ちょっと説明
デバイスネームを取得する際、Windowsではフレンドリーネームなるものを取得。
Linuxでは現在主流のUSB-UART変換だった場合にUSBのPIDとPIDを取得して、変換アダプタのベンダー名と製品名をデバイスネームとした。
Serial::Configにパリティやらボーレートを設定してsetConfigすれば設定の変更ができる。
あとはヘッダファイル見てください(言葉で説明するより早いと思う)