SysExメッセージのアドレスについて

5 views
Skip to first unread message

Shigeru Kobayashi

unread,
Nov 30, 2008, 9:36:29 AM11/30/08
to funnel-de...@googlegroups.com
主に遠藤さん、増田くんへ

小林です

009で実装中のSysExメッセージに関して相談です。

現状で、SysExメッセージのアドレスは/sysexになっているのですが、他のメッセージと異なり、これだけリプライを返しません。代わりに、I/Oモジュール側からSysExメッセージが来たとき、同じ/sysexでメッセージが飛んできます。

これらは全くもって非対称で、両者の数はほとんどの場合一致しません。この点に関して、以下のように変更したいと思うのですが、いかがでしょうか?

・ホストPC→I/Oモジュールへのメッセージは/sysex/request
・I/Oモジュール→ホストPCへのメッセージは/sysex/reply

理由としては

・/sysexメッセージの形式に問題があってサーバがリジェクトした場合、それをクライアントに返す手段が無い
・AS3ライブラリはサーバに対するコール&レスポンスで同期化を実現しているが、このメッセージに関してだけイレギュラーになってしまう

ということです。もし、非同期にしたい場合には単に戻ってくる/sysex/requestを無視するだけでOKです。

既に実装をしていただいたライブラリ側の変更はアドレス名だけで済むはずです。もし問題なければサーバ側の実装とRubyライブラリでの動作検証を行おうと思いますが、もし何かお気づきの点などあればお知らせいただけると嬉しいです。


追伸
先日の厚木でのワークショップで、たまたま参加者の方からリクエストがあって予定外で紹介しようとしたAS3版のI2Cがうまく動かない…と悩んでいました。

その原因がこれで、AS3ライブラリで最初の/sysexを送った後でTaskに対してコールバックを設定して待ちに入ってしまい、それ以降のI2Cリクエストが送信できていませんでした。

ざっくりテストした際に動いたように見えていたのは、たまたまその直前にRubyライブラリでテストしたものがそのまま有効になっていただけだったということのようです。お恥ずかしい…。

takanori endo

unread,
Dec 1, 2008, 8:01:28 AM12/1/08
to funnel-de...@googlegroups.com
間違いが発見しやすくなるのでよいと思います。
Continouseの場合もやりやすくなるでしょうし。


Processingのほうでまだ試せていませんが余裕ができたら
やります。
まだ、Processingのアップデートが落ち着かないみたいですね。
Javaも1.6になっているみたいで、結構苦労して1.2以下で
実装したのが、ちょっと悲しいです。

遠藤孝則



2008/11/30 23:36 Shigeru Kobayashi <koto...@gmail.com>:
--
endo takanori

Shigeru Kobayashi

unread,
Dec 1, 2008, 8:39:38 AM12/1/08
to funnel-de...@googlegroups.com
遠藤さん

小林です

> 間違いが発見しやすくなるのでよいと思います。
> Continouseの場合もやりやすくなるでしょうし。

了解しました。コードの変更はできた(と思う)のですが、実機を手元に持帰るのを忘れてしまいましたので、明日の夜に動作確認してからコミットします。

AS3とRubyを変更した感じだと、ほんの数カ所変更していただく程度で大丈夫かと思います。;)


2008/12/1 takanori endo <sweeta...@gmail.com>:

Shigeru Kobayashi

unread,
Dec 2, 2008, 8:54:23 AM12/2/08
to funnel-de...@googlegroups.com
遠藤さん

小林です

r529でFunnel ServerとAS3およびRubyの対応が終わりました。

http://code.google.com/p/funnel/source/detail?r=529
http://code.google.com/p/funnel/source/detail?r=528

お手数ですが、お時間のある時で構いませんのでProcessingライブラリの修正をお願いできますでしょうか。それが完了したら、先日のWSでも要望がありましたので009b2としてリリースしようかと思います。

※ついでに、Processing が1.0前になってライブラリのインストール場所が変わりましたので、インストールマニュアルも修正しようと思います…。


2008/12/1 Shigeru Kobayashi <koto...@gmail.com>:

Shigeru Kobayashi

unread,
Dec 6, 2008, 10:24:55 PM12/6/08
to funnel-de...@googlegroups.com
遠藤さん

小林です

追加でお知らせです。

Firmata開発メンバーのHansからの提案を受け、SysEx I2Cで使用しているメッセージを変更しました。

http://funnel.googlecode.com/svn-history/r535/trunk/documents/firmata_i2c_proposal.txt
http://code.google.com/p/funnel/source/detail?r=534

これに伴うサーバ側の変更はすませてありますので、お手数ですが、今後のテストは新しいファームウェアで行っていただけますでしょうか。

これに関して、ライブラリ側での変更は基本的に必要ないはずです。しかし、もしSysExのコマンドバイトが0x76かどうかで判断するような処理を入れていらっしゃったようでしたら、その部分を0x77に変更していただければと思います。

・・・

こうしたことを考えると、せっかくある程度高レベルで記述できるOSCを使っているのですから

/sysex/request
/sysex/reply

ではなく

/sysex/request/i2c
/sysex/reply/i2c

のようにしてしまったほうが、Firmataの実装の細かな変化に影響されなくていいかもしれませんね…。

・・・

あと、I2CDeviceを継承したクラスのコンストラクタに与えるIOModuleのインスタンスの件ですが、普段ioModule()メソッドが登場しないArduinoでいきなりこれが登場するのも不親切かなと思いましたので、AS3ライブラリでは次のような変更を加えてIOModuleのインスタンスだけでなく、IOSystemのインスタンスも渡せるようにしました。

http://code.google.com/p/funnel/source/diff?spec=svn534&r=534&format=side&path=/trunk/libraries/actionscript3/src/funnel/I2CDevice.as


2008/12/2 Shigeru Kobayashi <koto...@gmail.com>:

takanori endo

unread,
Dec 15, 2008, 2:10:44 AM12/15/08
to funnel-de...@googlegroups.com
こちらの変更をしているのですが、うまくいっていません。


rubyでも動作確認できないのですが、PinとPortの変更以外の変更点は

PCからI2Cデバイスへは0x76を/sysex/requestにおくる
値を受取るときは 0x77が/sysex/replyに来るものを読む

という2点だけでしょうか?


あとついでに、arduino.rbの31行目がPort::DINになっています。

遠藤孝則


2008/12/07 12:24 Shigeru Kobayashi <koto...@gmail.com>:

--
endo takanori

Shigeru Kobayashi

unread,
Dec 15, 2008, 2:28:56 AM12/15/08
to funnel-de...@googlegroups.com
遠藤さん

小林です

> rubyでも動作確認できないのですが、PinとPortの変更以外の変更点は
>
> PCからI2Cデバイスへは0x76を/sysex/requestにおくる
> 値を受取るときは 0x77が/sysex/replyに来るものを読む
>
> という2点だけでしょうか?

はい、そうです。どのレベルでうまく動いていないでしょうか?

送信のみ動く/受信のみ動くなどあれば教えてください。


> あとついでに、arduino.rbの31行目がPort::DINになっています。

すみません、こちらは修正しておきます。


2008/12/15 takanori endo <sweeta...@gmail.com>:

takanori endo

unread,
Dec 15, 2008, 2:38:17 AM12/15/08
to funnel-de...@googlegroups.com
サーバーの返事がない状態です。

FirmataIo.javaのsendSystemExclusiveMessage()
でI2C_REQUESTは、届いているようで、
slaveAddressもreadWriteModeも正しくとどいています。

逆にprocessInput()ないで見張っていると
processSystemExclusiveData()が実行されていないようなので
サーバーの返事がない状態だと思います。

コンパスの回路は、同じなので問題ないと思います。
今のところreadWriteModeを1で毎回送っています。


2008/12/15 16:28 Shigeru Kobayashi <koto...@gmail.com>:

--
endo takanori

Shigeru Kobayashi

unread,
Dec 15, 2008, 2:49:13 AM12/15/08
to funnel-de...@googlegroups.com
遠藤さん

あ、Arduino側のファームは新しい物にしていただけましたでしょうか?

外していたらすみませんが、ねんのため確認をお願いします。


2008/12/15 takanori endo <sweeta...@gmail.com>:

takanori endo

unread,
Dec 15, 2008, 3:18:54 AM12/15/08
to funnel-de...@googlegroups.com
念のためduemilanoveで書いてみたらうまくいきました。

その後初代でもうまくいきました。
ファームの書き込みがうまくいっていなかったのでしょうか。
とにかくありがとうございました。

もうすこし、Pinの名前変更とFioの対応のほうも、早めにやります

遠藤孝則


2008/12/15 16:49 Shigeru Kobayashi <koto...@gmail.com>:

--
endo takanori

takanori endo

unread,
Dec 16, 2008, 11:07:31 PM12/16/08
to funnel-de...@googlegroups.com
PINからPORTへの名前の変更と
I2CのFioとArduinoの対応をコミットしました。

FioとArduinoはおなじSimpleI2CFirmataで確認しました。
コンパスは
ArduinoとFioの両方でサンプルを作っています

もうすこしサンプルは増やしたいです


遠藤孝則


2008/12/15 17:18 takanori endo <sweeta...@gmail.com>:

--
endo takanori

Shigeru Kobayashi

unread,
Dec 17, 2008, 8:24:43 AM12/17/08
to funnel-de...@googlegroups.com
遠藤さん

小林です

おつかれさまでした。ドキュメントの微修正を行い、009b2としてリリースしました。

http://code.google.com/p/funnel/downloads/list

特にこのご問題がなければ、AXISでのワークショップではこのバージョンを使おうと思います。また何かもしあればお知らせします。お忙しい中の対応、ありがとうございました。


2008/12/17 takanori endo <sweeta...@gmail.com>:

takanori endo

unread,
Dec 17, 2008, 10:12:53 AM12/17/08
to funnel-de...@googlegroups.com
あんまり、忙しくもないので、問題があったり
必要なサンプルがありましたら、いってください。
なにかできることがあれば、手伝いますので。

遠藤孝則

2008/12/17 22:24 Shigeru Kobayashi <koto...@gmail.com>:

--
endo takanori

Reply all
Reply to author
Forward
0 new messages