2008-06-06

lnp を使用して Cygwin と RCX の通信を行う 2

brickOS 版の lnpd は Cygwin 上でコンパイルできなかったので lnphost を使用する事にしました。
ちなみに legOS 版の lnpd は試していません。

lnphost の導入手順はこんな感じです。
$ curl -O 'http://easynews.dl.sourceforge.net/sourceforge/lnphost/lnphost-1.0a.zip'
$ unzip lnphost-1.0a.zip
$ cd lnphst
$ make
Cygwin側では
./lnpdump -d //./legotower1 > recieve.txt
のようにすれば受信待ちになり、Ctrl + C でプログラムを止めるまでの間に受信したデータを recieve.txt に保存できるはずです。

RCX 側は
int lnp_addressing_write (const unsigned char *data, unsigned char length, unsigned char dest, unsigned char srcport)
を使用してデータを送信します。
data には送信データの先頭アドレスを渡します。
length には送信データのサイズを渡します。unsigned char なので型としては 0 〜 255 ですが、実際に送信できるサイズはもう少し小さいようです。おそらくヘッダとかパリティとかを含めたパケットのサイズが255byteなのでしょう。調べるのが面倒なので私は安全に200byteに分割して送る事にしました。
dest には Cygwin 側の待ち受けアドレスを設定します。上位4bitがアドレス、下位4bitがポートのようです。
srcport には RCX 側の送信ポートを設定します。恐らく0x0〜0xF が有効な値です。

RCX 側のアドレスはどうなっているかというと brickOS の boot/config.h 内の
#define CONF_LNP_HOSTADDR 0 //!< LNP host address
で設定されているようです。

Cygwin(lnphost) 側は・・・特にソースコード内では決めていない?ようです。

さて、RCX のアドレスなんですが、コレがみんな同じだとトラブルが起きないんでしょうか?
変えておいた方がいいんでしょうかねぇ・・・

中途半端ですが時間がないのでとりあえずここまで

0 件のコメント: