ひでっぷの技術メモ

はてなダイアリーから移行しました

Armadillo-460でRXTXCommを使用する

Armadillo-460のSDカードにDebian lennyをのっけて動かしてます。

aptitude search rxtx

ってやってみると

p librxtx-java - Full Java CommAPI implementation

って出てくるので「おお!Armadillo-460でRXTXCommが使えるぞ!」って大喜びしてさっそくapt-get installしたわけですが、いざPCで動くRXTXCommを使用したjarファイルを動かしてみてもNoSuchPortException(そんなポートはありませんエラー)が出て動きません。
指定しているシリアルポートのデバイスを直接Openしてやれば動くのでポートを間違えているってこともありません。
やっぱArmadilloではRXTXCommは使えないのか・・・とあきらめかけているとRXTXCommのソースコードのコメントににこんなことが・・・

256 is the number of prefixes ( COM, cua, ttyS, ...) not the number of devices (ttyS0, ttyS1, ttyS2, ...)

そんでもってソースをさらに見てみると・・・


switch (PortType) {
case CommPortIdentifier.PORT_SERIAL:
if (debug)
System.out.println("scanning for serial ports for os "+osName);
if(osName.equals("Linux"))
{
String Temp = {
"ttyS", // linux Serial Ports
"ttySA" // for the IPAQs
};
CandidatePortPrefixes=Temp;
}
else if(osName.equals("Linux-all-ports"))
{
/* if you want to enumerate all ports ~5000
possible, then replace the above with this
*/
String
Temp = {
"comx", // linux COMMX synchronous serial card
"holter", // custom card for heart monitoring
"modem", // linux symbolic link to modem.
"ttyircomm", // linux IrCommdevices (IrDA serial emu)
"ttycosa0c", // linux COSA/SRP synchronous serial card
"ttycosa1c", // linux COSA/SRP synchronous serial card
"ttyC", // linux cyclades cards
"ttyCH",// linux Chase Research AT/PCI-Fast serial card
"ttyD", // linux Digiboard serial card
"ttyE", // linux Stallion serial card
"ttyF", // linux Computone IntelliPort serial card
"ttyH", // linux Chase serial card
"ttyI", // linux virtual modems
"ttyL", // linux SDL RISCom serial card
"ttyM", // linux PAM Software's multimodem boards
// linux ISI serial card
"ttyMX",// linux Moxa Smart IO cards
"ttyP", // linux Hayes ESP serial card
"ttyR", // linux comtrol cards
// linux Specialix RIO serial card
"ttyS", // linux Serial Ports
"ttySI",// linux SmartIO serial card
"ttySR",// linux Specialix RIO serial card 257+
"ttyT", // linux Technology Concepts serial card
"ttyUSB",//linux USB serial converters
"ttyV", // linux Comtrol VS-1000 serial controller
"ttyW", // linux specialix cards
"ttyX" // linux SpecialX serial card
};
CandidatePortPrefixes=Temp;
}

http://rxtx.qbang.org/pub/rxtx/rxtx-2.1-7/CNI/RXTXCommDriver.java


なるほど。Armadillo-360のシリアルポートは前回も書いたとおりttymxc1〜ttymxc4までなのですがRXTXCommだとそのデバイス名は見に行かない=そんなポートはないってなっちゃうわけですね・・・
ってことで

ln -s /dev/ttymxc1 /dev/ttyS0

とRXTXCommさんがわかるようにシンボリックリンクをはり、使用するポート設定も/dev/ttyS0にしてあげることで無事にRXTXCommが使えるようになりました。