[1587] legOS-0.2.4のUSB転送の失敗 投稿者:びぎな〜 投稿日:01/06/16(Sat) 03:03
初めて投稿します。この度、Mind Storm RIS2.0を購入し、legOS上で動
作するプログラム開発に挑戦しようとしています。勉強のために、legO
Sのソースコードを読んで、legOSの動作の理解もしようと思っていると
ころです。さて、まずUSB IR TowerからRCXにlegOSを転送しようとした
ところ、「\\.\legotower1: not a tty」というエラーが表示されて、
転送に失敗してしまいました。rcx_comm.cのrcx_init()のisatty(fd)で
どうやら0を返してしまうようです。ここまでは、原因を解析してみま
した。しかし、なぜisatty(fd)で0が返されてしまうのか理解できませ
ん。マシンあるいはcygwinとの相性でもあるのでしょうか?ちなみにマ
シンはNEC Valuestar VC500J/1で、OSはWindows98SEです。cygwinは1.3
.2を使用しています。また、USB IR Towerは、CD-ROMのハードウェア設
定を起動してから、PCに装着し、きちんとコントロールパネルにICONが
表示されており、ICONを開いて、診断タブをクリックして、動作状態を
確認したところ、「正常に動作しています」という表示がありました。
ここ数日間、ここで前に進みあぐねています。どうか暖かいアドバイス
お願い致します。
[1588] Re: legOS-0.2.4のUSB転送の失敗 投稿者:JinSato 投稿日:01/06/16(Sat) 03:10
はじめまして、「びぎな〜」さん。
初めにですが、 legOS-0.2.4 では USBのIR Tower は対応
してないです。
legOS やファームウエアーのダウンロードプログラムなど、パッチ
を当てると動くようになりますが、パッチは当てましたか?
具体的には
http://www.mi-ra-i.com/JinSato/MindStorms/legOS/usb_ir_with_legOS.html
で公開していますので、その手順でやってみてください。
もしくは、ちょうど、今月の ロボコンマガジンに RIS2.0で
使われている USB-IR Tower でも動く legOS について、詳しく
説明してありますんで、そちらも参考すると良いかもしれません。
[1589] Re^2: legOS-0.2.4のUSB転送の失敗 投稿者:びぎな〜 投稿日:01/06/16(Sat) 03:22
こんばんは。とても早いレスポンスに驚きました。先ほど、きちんと説明すればよかったのですが、「Mind StormでlegOS-0.2.4を利用する方法」は既に参照して、rcx_comm.cとfirmdl.cはダウンロードして、手順にあるように行いました。しかし、何度、試してもうまく行かずに困っていたというのが現状です。firmdl.cでは、main()内にtty = "\\\\.\\legotower1";という記載があり、firmdl3 --tty=usb filenameとすれば、この代入が行われます。IR Towerが接続されている時はrcx_comm.cのrxc_init()でopen(tty, 0)はうまく動作し、ファイル記述子は3で返ってくるのですが、次のisatty(fd)で端末として判定してくれないようです。この辺りは、ソースコードにデバッグライトを行う文を書き込み、確認してみました。とにかく、今月号のロボコンマガジンを読んでみます。
[1591] rcx_comm.c の rcx_init ルーチンについて 投稿者:JinSato 投稿日:01/06/16(Sat) 04:24
発言#1590 の続きです、長くなるので別スレッドにしてます。
本題です。 はじめに、 rcx_ini ルーチンは長いですが下記のように
なっているはずですが、 びぎな〜(よかったら、汎用的な
お名前じゃなくて、個性のある名前のほうが嬉しいな) では
どうなってますか?
掲示板だと、Tagがずれて醜いですが、このような流れになって
いるはずです。
== ルーチン ==
FILEDESCR rcx_init(char *tty, int is_fast)
{
FILEDESCR fd;
#if defined(_WIN32)
DCB dcb;
#else
struct termios ios;
#endif
if (__comm_debug) printf("mode = %s\n", is_fast ? "fast" : "slow");
#if defined(_WIN32)
if ((fd = CreateFile(tty, GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING,
0, NULL)) == INVALID_HANDLE_VALUE) {
fprintf(stderr, "Error %lu: Opening %s\n", (unsigned long) GetLastError(), tty);
exit(1);
}
// Serial settings
if ( usb_flag == 0 ) {
FillMemory(&dcb, sizeof(dcb), 0);
if (!GetCommState(fd, &dcb)) { // get current DCB
// Error in GetCommState
myperror("GetCommState");
exit(1);
} else {
dcb.ByteSize = 8;
dcb.Parity = (is_fast ? 0 : 1); // 0-4=no,odd,even,mark,space
dcb.StopBits = 0; // 0,1,2 = 1, 1.5, 2
dcb.fBinary = TRUE ;
dcb.fParity = (is_fast ? FALSE : TRUE) ;
dcb.fAbortOnError = FALSE ;
dcb.BaudRate = (is_fast ? CBR_4800 : CBR_2400); // Update DCB rate.
// Set new state.
if (!SetCommState(fd, &dcb)) {
// Error in SetCommState. Possibly a problem with the communications
// port handle or a problem with the DCB structure itself.
myperror("SetCommState");
exit(1);
}
}
}
#else
if ((fd = open(tty, O_RDWR)) < 0) {
perror(tty);
exit(1);
}
if (!isatty(fd)) {
close(fd);
fprintf(stderr, "%s: not a tty\n", tty);
exit(1);
}
memset(&ios, 0, sizeof(ios));
if (is_fast) {
ios.c_cflag = CREAD | CLOCAL | CS8;
cfsetispeed(&ios, B4800);
cfsetospeed(&ios, B4800);
}
else {
ios.c_cflag = CREAD | CLOCAL | CS8 | PARENB | PARODD;
cfsetispeed(&ios, B2400);
cfsetospeed(&ios, B2400);
}
if (tcsetattr(fd, TCSANOW, &ios) == -1) {
perror("tcsetattr");
exit(1);
}
#endif
return fd;
}
[1592] rcx_init ルーチン 説明 投稿者:JinSato 投稿日:01/06/16(Sat) 04:33
ルーチンの説明です
掲示板だとTABが飛んで見にくいのですが、
基本的には グローバル変数の usb_flag が 0以外になっていたならば
GetCommState や isatty など何も実行しないで
CreateFile だけを実行して 呼び出したルーチンに、
ファイルハンドルのfdを返すようになっています。
ですから、びぎな〜 さんのところで,isatty が実行されると言うのは
グローバル変数の usb_flag が 0になっている可能性が高いです。
--
コメント1:
グローバル変数の usb_flag などを使ったプログラミングは
したくなかったのですが、オリジナルのコードのスタイルを尊重
した形ではこう言うスタイルになってしまっています。
--
なんとなくですが、びぎな〜さんのマシンでは、 rcx_comm.c の
パッチがあたっていない可能性が高い気がします。
ちなみに rcx_comm.c のファイルサイズは 12,358バイトです。
タイムスタンプは、2001年5月8日になってますが、どうですか〜?
--
最後に、やっぱりバイナリもダウンロードできるようにしておいた
ほうがいいかな。
検討してみます。
[1590] Re^3: legOS-0.2.4のUSB転送の失敗 投稿者:JinSato 投稿日:01/06/16(Sat) 04:21
> こんばんは。とても早いレスポンスに驚きました。
ちょうど、こちらは昼間ですから。 (^^)
ところで
> 先ほど、きちんと説明すればよかったのですが、「MindStormで
> legOS-0.2.4を利用する方法」は既に参照して...
あ、そうでしたか。 次回からは面倒でも、話の前提となる部分
も書いていただけるとたすかりますので、よろしく。
>rcx_comm.cとfirmdl.cはダウンロードして、手順にあるように行い
>ました。
ということは、はじめは firmdl.exe のコマンドで、つまずいている
という感じですね。
>しかし、何度、試してもうまく行かずに困っていたという
>のが現状です。
なにか、エラーメッセージとか表示されました。
念のため、RCX の電池は一度ぬいて、 On ボタンを押して
完全にファームウエアーを消した状態で試してますよね。
>rcx_comm.cのrxc_init()でopen(tty, 0)はうまく動作し、
>ファイル記述子は3で返ってくるのですが、次のisatty(fd)
>で端末として判定してくれないようです。
あれ、おかしいですね、 isatty(fd) は実行しないように
なってますが。
その部分は長くなるので別スレッドに書きます。
[1593] Re^4: legOS-0.2.4のUSB転送の失敗 投稿者:びぎな〜 投稿日:01/06/17(Sun) 02:41
こんにちは。びぎな〜です。JinSatoさん、アドバイスありがとうございました。このアドバイスを読んで初めて、大きな勘違いをしていることに気づくことができました。_WIN32が定義されていなくても動作するものと思っていたのですが、そうではないのですね。早速、試してみたら、今まで躓いていたところはうまく動作しました。
[1594] Re^5: legOS-0.2.4のUSB転送の失敗 投稿者:JinSato 投稿日:01/06/17(Sun) 11:31
ということは、Makefile.common を修正するの忘れてたのね。
[1585] VISION COMMAND 投稿者:ryo 投稿日:01/06/14(Thu) 18:39
VISION COMMANDというカメラをC++Builderで使いたいと思うのですが、
このカメラは、付属ソフト以外でも使えるのでしょうか?
もし同じような試みをしている方がいらっしゃいましたら、教えてくだ
さい。
[1586] Re: VISION COMMAND 投稿者:Mao KUROI 投稿日:01/06/14(Thu) 22:48
こんにちは。
> VISION COMMANDというカメラをC++Builderで使いたいと思うのですが、
> このカメラは、付属ソフト以外でも使えるのでしょうか?
> もし同じような試みをしている方がいらっしゃいましたら、教えてくだ
> さい。
「掲示板」「やってみよう」のコーナに最近、この話題がでましたので、
みてみてください。
結論として、VisisonCommandはコネクティックス社のQuickCamそのもの
であるという話だそうです。よって、そこのWebサイトにある、SDKを
使えばC++からアクセスできます。また、もともとVideoForWindows対応
なので、標準装備のVideoForWindowsAPIからアクセス可能です。
(知ったかぶりですみません。VisionCommand持ってません。見たことも
ないっす。)
[1566] spirit.ocxについて質問です 投稿者:ryo 投稿日:01/06/06(Wed) 16:46
C++Builderで制御したいのですが、コンポーネントのインストール
でどうしてもエラーがでてしまいます。どなたかC++Builderでの制
御を試みている方は居ませんでしょうか?その他spirit.ocxについ
て詳しい方、知恵をお貸しください。
[1567] Re: spirit.ocxについて質問です 投稿者:">mac 投稿日:01/06/06(Wed) 17:21 <URL>
> C++Builderで制御したいのですが、コンポーネントのインストール
> でどうしてもエラーがでてしまいます。
どんなエラーか書かないと、やっぱ答えようがないと思います。
私のVC++もこのごろエラーがでまくって困っているんですが、
何かお気づきのことはないでしょうかとか(^^)
再インストールまでし直したのに、ちっともかわらいのですとか...
ここに書く前に、
http://www.google.com/search?hl=ja&safe=off&q=spirit.ocx+C%2B%2B+Builder&btnG=Google+%8C%9F%8D%F5&lr=
とか、やってみたでしょうか?
http://www.fry.is.sci.toho-u.ac.jp/~shu/jik/moter/hajime.html
http://members.aol.com/jmtsgibbs/lego.htm
http://member.nifty.ne.jp/KOYA-ICHIKAWA/maindDL1.htm
などは、読んでみたでしょうか?
# ViaVoice SDK入れたら、おかしくなっちゃったんだよね > VC++
# Uninstallしても、どうも変なんだよね(;_;)
[1569] Re^2: spirit.ocxについて質問です 投稿者:ryo 投稿日:01/06/07(Thu) 00:29
> http://www.google.com/search?hl=ja&safe=off&q=spirit.ocx+C%2B%2B+Builder&btnG=Google+%8C%9F%8D%F5&lr=
> とか、やってみたでしょうか?
参考になりそうなHPがいくつかありました。
ありがとうございました
[1570] Re^3: spirit.ocxについて質問です 投稿者:JinSato 投稿日:01/06/07(Thu) 00:41
JinSato です。
あ、タイミングを逸してしまったようですが。
http://www.google.com/search?hl=ja&safe=off&q=spirit.ocx+C%2B%2B+Builder&btnG=Google+%8C%9F%8D%F5&lr=
> > とか、やってみたでしょうか?
>
> 参考になりそうなHPがいくつかありました。
> ありがとうございました
もし可能でしたら、うまくいったとか、いかなかったとか、
原因は何だったかなども、後で教えていただけると嬉しいです> ryo さん。
[1574] Re^4: spirit.ocxについて質問です 投稿者:ryo 投稿日:01/06/11(Mon) 17:41
>
> もし可能でしたら、うまくいったとか、いかなかったとか、
> 原因は何だったかなども、後で教えていただけると嬉しいです> ryo さん。
結局原因はわかりませんでしたが、エラーのでた二つ(↓)を削除したら上手くいきました
typedef enum PROCESSPRIORITYCLASS
{
DefaultClass = 0,
HIGH_PRIORITY_CLASS = 1,
IDLE_PRIORITY_CLASS = 2,
NORMAL_PRIORITY_CLASS = 3,
REALTIME_PRIORITY_CLASS = 4
}
typedef enum THREADPRIORITY
{
THREAD_PRIORITY_ABOVE_NORMAL = 0,
THREAD_PRIORITY_BELOW_NORMAL = 1,
THREAD_PRIORITY_HIGHEST = 2,
THREAD_PRIORITY_IDLE = 3,
THREAD_PRIORITY_LOWEST = 4,
THREAD_PRIORITY_NORMAL = 5,
THREAD_PRIORITY_TIME_CRITICAL = 6
}
[1578] Re^5: spirit.ocxについて質問です 投稿者:">mac 投稿日:01/06/12(Tue) 12:02 <URL>
> 結局原因はわかりませんでしたが、エラーのでた二つ(↓)を削除したら上手くいきました
>
> typedef enum PROCESSPRIORITYCLASS
> {
> DefaultClass = 0,
> HIGH_PRIORITY_CLASS = 1,
> IDLE_PRIORITY_CLASS = 2,
> NORMAL_PRIORITY_CLASS = 3,
> REALTIME_PRIORITY_CLASS = 4
> }
>
>
> typedef enum THREADPRIORITY
> {
> THREAD_PRIORITY_ABOVE_NORMAL = 0,
> THREAD_PRIORITY_BELOW_NORMAL = 1,
> THREAD_PRIORITY_HIGHEST = 2,
> THREAD_PRIORITY_IDLE = 3,
> THREAD_PRIORITY_LOWEST = 4,
> THREAD_PRIORITY_NORMAL = 5,
> THREAD_PRIORITY_TIME_CRITICAL = 6
> }
レポートありがとうございます。
C++Builder [バージョン等詳細不明]で、
spirit.ocxを使おうとすると、
「コンポーネント-ActiveXコントロールの取り出し」を実行した時点で、
コンパイルを指示されるのでそれに従うとエラーが出る。[エラーメッセージ等詳細不明]
そこで、上記二つの定義を削除または、コメントアウトすれば、使用することだできる。ということが、この投稿と、
http://www.fry.is.sci.toho-u.ac.jp/~shu/jik/moter/hajime.html
http://www.fry.is.sci.toho-u.ac.jp/~furuya/cppmm.html
を見るとわかるわけですね。
[詳細不明]を穴埋めして、いただくと、あとで大変役立つと思うのですが、
いかがでしょう(^^;
[1579] Re^6: spirit.ocxについて質問です 投稿者:ryo 投稿日:01/06/12(Tue) 18:10
> [詳細不明]を穴埋めして、いただくと、あとで大変役立つと思うのですが、
> いかがでしょう(^^;
C++Builderのバージョンは5と4で確認しました。どちらもこの方法で
上手くいきました。
エラーメッセージは
[C++ エラー] SPIRITLib_TLB.h(162): E2184 Enum syntax error.
[C++ エラー] SPIRITLib_TLB.h(166): E2040 Declaration terminated incorrectly.
[C++ エラー] SPIRITLib_TLB.h(166): E2190 Unexpected }.
[C++ エラー] SPIRITLib_TLB.h(166): E2303 Type name expected.
[C++ エラー] SPIRITLib_TLB.h(170): E2184 Enum syntax error.
[C++ エラー] SPIRITLib_TLB.h(177): E2040 Declaration terminated incorrectly.
[C++ エラー] SPIRITLib_TLB.h(177): E2190 Unexpected }.
[C++ エラー] SPIRITLib_TLB.h(177): E2190 Unexpected }.
[C++ エラー] SPIRITLib_TLB.h(1606): E2190 Unexpected }.
とこんな感じでした
[1568] Re^2: spirit.ocxについて質問です 投稿者:">mac 投稿日:01/06/06(Wed) 18:23 <URL>
> 私のVC++もこのごろエラーがでまくって困っているんですが、
> 何かお気づきのことはないでしょうかとか(^^)
> 再インストールまでし直したのに、ちっともかわらいのですとか...
> # ViaVoice SDK入れたら、おかしくなっちゃったんだよね > VC++
> # Uninstallしても、どうも変なんだよね(;_;)
まじめに悩んでくれてしまう人がいそうなんで、
MindStormsと関係ないですが、書いておきますと、
すでに自己解決してます(^o^)
「開く」を押すとMsdev.exeがDevshl.dllを引き連れて、
クラッシュするトラブルなんですが、
Visual Studio 6.0 Service Pack 5でfixedされたバグです。
Viavoice SDKが悪いのではなく、ActiveXの数が増えるとそうなるらしい。
http://www.microsoft.com/JAPAN/support/kb/articles/J053/4/88.htm?LN=JA&SD=gn&FR=0