LANTRONIXのXPortで、不特定多数の相手先とUDP通信する方法をググっていたら、以下のページが見つかった。
Sending UDP Datagrams to and from a Cobox, Xport, or WiPort
Undocumentedなモードがあって、
connectModeを 0xCC に設定 DatagramTypeを 0x00 に設定
すると、以下の形式のパケットをシリアルポートで送受信することで、UDPデータグラムを送受信するモードになる。
使用されるポートは送受信時共に 設定項目の Port No で設定したポートになるようだ。
(DatagramType 0x00 に設定すると、 Remote Port は設定できなくなる)
(余談: WordPress はなんで 0x00 … この x を全角に変換してしまうんだ??→いや全角エックスじゃないわ、× の乗算記号か…計算式じゃないっちゅうの! → wp-includes/formatting.php の 55行目あたりの $dynamic_characters と $dynamic_replacements という置換用arrayの中(末尾)に、この余計なお世話な変換があったので、削った。 → 後記。WordPress3.4でも未だにこの変換が入ってるけど、96行目をコメントアウトすれば良くなった。わあ便利…)
■UDP送信
0x02 (スタートバイト) 0xC0 (相手先IPアドレス 1バイト目 例: 192) 0xA8 (相手先IPアドレス 2バイト目 例: 168) 0x00 (相手先IPアドレス 3バイト目 例: 0) 0x01 (相手先IPアドレス 4バイト目 例: 1) 0x00 (データバイト数 BigEndian H) 0x04 (データバイト数 BigEndian L 例: 4バイト) 0x30 (データ) 0x31 (データ) 0x32 (データ) 0x33 (データ)
上記の例の11バイトをXPortのシリアルポート RxDに受信させると、
XPortは 192.168.0.1:(Port Noで設定したポート) に “0123” の4バイトを入れたデータグラムを送信する。
■UDP受信
また、LAN上の、たとえば 192.168.0.2 のマシンから XPortのIPアドレス:(Port Noで設定したポート) へUDPデータグラムが届き、
中にたとえば”ABC” の3バイトが入っていたとすると、XPortは
0x02 (スタートバイト) 0xC0 (送信元IPアドレス 1バイト目 例: 192) 0xA8 (送信元IPアドレス 2バイト目 例: 168) 0x00 (送信元IPアドレス 3バイト目 例: 0) 0x02 (送信元IPアドレス 4バイト目 例: 2) 0x00 (データバイト数 BigEndian H) 0x03 (データバイト数 BigEndian L 例: 3バイト) 0x41 (データ) 0x42 (データ) 0x43 (データ)
の10バイトのパケットをシリアルポートのTxDから送出する。
これで、不特定多数の相手との双方向UDP通信ができる。
コメント