XPortで、不特定多数の相手先とUDP通信する方法

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 を全角に変換してしまうんだ??→いや全角エックスじゃないわ、&#215 の乗算記号か…計算式じゃないっちゅうの! → 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通信ができる。

コメント

タイトルとURLをコピーしました