MindStorms RIS 2.0が発売され、USB LEGO Towerを入手した当初から、VLLに対応しているし、もしかするとさらに別の機能が入っているのではないかと思っていました。
RC Fighterのリモコン波形を見て、RISの2400bps 38kHz変調の赤外線ではなく、4800 bps 76kHzの変調がかかっているのを知ると、多分これもUSB LEGO Towerは対応していると思い始め、Spyboticsのリモコンも、RC Fighterと同じ4800bps 76kHzの変調になっていて互換性があることがわかり、もはや疑う余地はないと思いました。
2002年12月LEGO社は、MindStorms SDK 2.5を無償公開し、このドキュメントには、TOWERAPI.HLPに、それを実現するための、すべてが書かれていました。
To use the Tower API from your C/C++ programs, just do the following things:
なんだ、簡単じゃないか、と思って早速towerapi.libを探したのですが、なんとこれがない。
towerapi.dllはあるので、これをLoadLibrary()でリンクすればよいのですが、Functionが大量に含まれているので、相当面倒です。
その程度で諦めるのは、もったいないので、TowerApi.hから、自動的にLoadLibrary用のヘッダーファイルとGetProcAddress()を各Functionに対して行うプログラムを自動生成するアプリケーションを作り、そのファイルをIncludeしてしまうことで、この面倒な作業を自動化しました。
もっとも、実際ここで公開しようとしているサンプルとしてのLTremo76というアプリケーションは、TowerApi.dllの関数を2個しか使っていないので、手で書いたほうがよっぽど早いし、プログラムサイズも小さいのですが、それはいいっこなしです。
今回はそのツールごと公開しますので、他のアプリケーションを作るときの部品取り用にしてください。
このテクニックを使えば、towerapi.libがあるのと全く同じようにプログラムすることができます。
ここでサンプルとして作った、LTremo76について説明します。このプログラムは、USB LEGO Towerを使いRC Fighter, SpyboticsをパソコンのGUIから操作するアプリケーションです。いずれのキットにも純正のリモコンが含まれるので、実用的価値は余りありません。
それに、余り複雑にしてしまうと、解読するのが難しくなり、サンプルコードの意味がなくなってしまうので、機能も少なく、使い勝手もいまいちです。
USB LEGO Towerがあり、SDK2.5をInstallしてあれば、とりあえず試せるので、実行ファイルをここに置きます。小さいものなので、圧縮していないファイルそのものですので、適当な場所にDownloadして、そのまま実行できますし、UnInstallもファイルを消すだけです。
これを公開する主な目的は、TowerApi.dllの使用法を例示することなので、VC++を持っていて、アプリケーションを作る人に、ソースコードをここに置きます。
この中には、LTremo76と、先に書いたファイルを自動変換するmktowerが含まれます。
MindStorms SDKのlisence.txtにしたがって、使ってください。私が独自に書いたコード部分は、改造、再配布を含め自由に使っていただけます。
Copyright (c) 2003