arduino robot
なにこのさわやかな感じ。青春だなぁ〜。
主にcooca,C,マイコンのことなどを気ままにエントリー
K4rをいじってたら、もんのすごくエディットがしにくくて、マニュアルみてばっかではかどらない。。から、ネットでPC上でエディットできるいわゆるライブラリアンがないか探してみたら、ゲット!!
自分が調べた中では、
emagicのsounddiverを使ってつくったエディタと、
http://homepage.mac.com/synth_seal/html/gmegab.html
普通にc++みたいなんで作成されたっぽいものと、
http://www.soundtrackers.de/awe_without_frames.html
http://www.synthzone.com/kawai.htm
みつけたのだけど、sounddiverはxskeyっていうLogic用のドングルが必要みたいで、諸処断念。
(ドングルあればLogicも使えてsounddiverも使えてK4も使えてめっちゃお得だったんだけどなぁ)
なので後者の方をwindows vistaマシンにインストール。ただ、このマシン、midiがどうもうまく行かない。
オーディオ機能もクソ。スペックはいいマシンなのに、ソフトとハードが噛み合ってない気がする。
これってvistaのせいだよね。全体的に。
なので、これからwindowsでエディットできるのか??いろいろ試してみようと思います。
昨日秋葉で仕事帰りにiLok を買ってきた〜。
でmax/mspのライセンスをいれた〜。
iLokだとどのパソでも起動するしあんまオーソライズでめんどいこともないからいいなぁ
ておもって。
なにげに安いし6000円(6800円だったかな??)
ただiLokをなくさないようにしないと終わってしまう。。
絶対なくさないようにせな。
にしてもcycling'74には5回以上確実にレスポンスキーを発行お願いしてるのに
全然だめっていわれない。なぜ?こっちとしてはありがたいけれども。。
にしてもSC(SuperCollider)やりたい。
それから昨日?一昨日のPICをUSBのHID(Human Interface Device)として認識させるってやつ。
PICの16f4540でやったんだけど、(といっても元のサンプルソースを2、3カ所かえただけだったけど。。例のディスクリプタの部分とmain関数の中を少し)最初うまくいかなくって、なんでかなぁ=と思ってネットに助けを求めたら、コメを噛めさんのとこで理由がわかた。
ベンダーIDかデバイスIDをどちらかを前の(サンプルのもの)にしておくと、ホスト側(PC側)でIDが更新されなくって、きちんとドライバが更新されないみたい。
なので、デバイスIDをいっこずらしたら、うまくいったよ。
こういう情報はあまり無いというか、初心者にはハードルの高いデバッグ要素なので
後続の人たちのためにとも思って一応パブリックドメインにアップしようと思いました。。
以上〜。
今回はPICにつけたボタン4つでマウスの代わりにした、HIDのゲームパッドとして2軸4ボタンのゲームパッドとして認識させただけなんだけど、次は(というか明日会社で)加速度センサをマウスのXY軸にしてやろーかと思う。これならわりと楽に組み込めそうだし。。
楽し〜〜。
でもこれってホスト側のソフト開発技術も無いと意味ないよ=な。。。そんなことないのかな?
ために、サンプルのソースに入ってるディスクリプタの部分を変更せねばいかんのですが、なんとも意味が分からん。どうしたもんかなぁ〜〜〜〜。
まず、HIDのゲームパッドとしてwindowsに認識させたいんで、それにはレポートディスクリプタのUSAGEを変更すればよいのでしょうが、USAGEがなんかいっぱいあって、エンドポイントもいっぱいあって、
そもそもディスクリプタを記述している構造体の並び方にも疑問があって、スーパー意味わからん。
しかも16bit幅の記述の仕方ね。ん〜なんじゃ。
USB.orgのページにあるリファレンスみてもわかんね〜。
どうすっぺなぁ。
もう少しみてみよふ。
(4時間くらい経過)
と、四苦八苦してたら、wakatta!
// Report descriptor prepared by USB DESCRIPTOR TOOL
// http://www.usb.org/developers/hidpage/#Descriptor_Tool
/* 15item, 29byte */
const char ReportDescriptor1[25] = {
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x09, 0x04, // USAGE (Joystick)
0xa1, 0x01, // COLLECTION (Application)
0x05, 0x09, // USAGE_PAGE (Button)
0x19, 0x01, // USAGE_MINIMUM (Button 1)
0x29, 0x08, // USAGE_MAXIMUM (Button 8)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x08, // REPORT_COUNT (8)
0x81, 0x02, // INPUT (Data,Var,Abs)
0xc0 // END_COLLECTION
};
このレポートディスクリプタの場合。。。
まず、上から2行はGlobal Deskripterで、データの状態を表すラベルを書き換えるもの。カテゴリーをかえるとでもいうような感じ。で、例えばUSAGE PAGE(Generic Desktop)の場合、0x05, 0x01,は何を表すかといいますと、USB.orgから拝借したPDFの46ページをみると完璧にわかるのですが、
はじめの0x05がitem tagになっていて,この後に続くitemがUSAGE PAGEであるということを教えています。
で、次の0x01が実際のUSAGE PAGEの値。これはHID USAGE TABLE
をみると確認できます(実際みてみると、14ページでやはり"01 Generic Desktop Controls "との表記がある)。
とこんな感じで文字の羅列はこの二つのPDFをみながら解読できます。
で、問題なのはこの構造体の順番。
これは、普通に上から読んできゃいんだけど、注意しないといけないのは、Global,Main,Local itemの違いを把握してなきゃいけないってこと。
イメージ的にはMainが階層的には一番上で、main→global→localの順に細かく指定できる感じ。でもglobalがmainの前にきてもよくて、上の例でもLogical Minimum(global)の方がInput(main)の前にきてる。
で、特徴としては
globalはglobal自身でしか書き換えられなくて、書き換えられるまではずっとその値を保持してる。
mainは主にlocalの内容をホスト側に知らせる役。main itemはcollectionとendcollectionの中でのみ有効で、その中にさらにcollectionとendcollectionをネストできる。
localは実際の細かい設定を記述するとこ。次のcollectionにはその値は保持されない。
(詳しくは一個目のPDFの38~52あたりにmainとglobalとlocalの違いをまとめてある箇所がちらほらあるからそれをみるとわかる)
これらを頭に入れて上から順に読んでいくと意味がわかってくるはず!!
ということでした〜〜。
ちなみにreport descripterをエディットするソフトがあるからそっちでやるとはや〜い。
<※何か間違いとか指摘とか微妙な表現とかありましたらレスくださると助かります!>
Mitolog © 2008. Template by Dicas Blogger.