Sahara's WebLog

日記のような、備忘録のような、うらみつらみのような、自慢のような…。

PIC18F14K50 + USB + PC + HID Mouse (2) ちょっとだけコードを追ってみた

PIC18F14K50 + USB + PC + HID Mouse (MLA v2015-08-10)」の続き。

あまりにも簡単に動いたので、少しだけコードを眺めてみた。
まあ、PICをやり始めてから見よう見まねでCをやりだした私には、「チンプンカンプン」という表現がぴったりの状態だ。

それでもmain()からはじまるくらいの事はわかるのでたどってみる。

すると、USBの接続待ちとか認識待ちのための処理なんだろうなと思われるコードを除けば、それ以外にずっと繰り返し実行しているのは
SYSTEM_Tasks();
なので、これを眺めてみる。

ざっくりと、ボタンが押されたかどうかをチェックして、トグルでマウスを動かすか止めるかを設定しているらしいことがわかる。
mouse.movementMode = !mouse.movementMode;

このmouse.—–というのは何だろな。

「構造体」というものらしい。
いろいろ検索した結果、http://www9.plala.or.jp/sgwr-t/c/sec15.htmlhttp://www9.plala.or.jp/sgwr-t/c/sec16.htmlで教わった限りでは、

のどちらも同じことらしく、型名が長くならないように下のように書くらしい。

いずれにしてもこのmouse.ではじまる構造体の要素の値をいろいろ変えればマウスの操作ができるということだろう。
この近辺に実際に実行する行が見つからないのは、たぶん割り込みをかけて定期的に割り込みルーチンから実行しているんだろう。
そちらは後回しにして、値をいろいろ変えて遊んでみることはできる。
例えば、元の行をコメントアウトして、xVector[]とmouseReport.buttons.button2の値を以下のように変更すると、

元々は正方形だった動く範囲が横長の長方形になり、マウスの右ボタンが押された状態になる。

マウスから手を離していてもマウスの任意のボタンを押しっぱなしに出来るというのは、アプリケーションによっては使い道がある。
例えば、動画の編集で使う「MPEGEnc MPEG Smart Render 4」などは、サムネイル上で右クリックしたまますると早送り状態が継続し、左右のマウスの位置で送る速度が変えられる仕様だ。
これが、ものによっては結構長い間右ボタンを押し続けたままのこともあるので、代わりにPICにやらせたら楽ができて便利かもしれない。

上の動画、マウスには触れてないけどPICで右ボタンを押し続けてるので、モニター上では動画が早送りされている。
最近テレビ番組の質がすっかり落ちて、早送りで観れば十分なケースがほとんどなので、これはいいかも。
気になる場面を通過したときにタクトスイッチを押せば早送りが停止する。
app_device_mouse.c の172行目あたりを
//static const uint8_t xVector[]={ -1, 0, 1, 0};
static const uint8_t xVector[]={ 0, 0, 0, 0};
//static const uint8_t yVector[]={ 0, -1, 0, 1};
static const uint8_t yVector[]={ 0, 0, 0, 0
と書き変えれば矩形を描く動作をしなくなり、353行目あたりを
mouseReport.buttons.button1 = 0;
//mouseReport.buttons.button2 = 0;
mouseReport.buttons.button2 = 1;
mouseReport.buttons.button3 = 0;
と書き変えればマウスの右ボタンが押された状態になる。
変更点はたったこれだけだ。

このエントリーをはてなブックマークに追加

Posted under: MPLAB X, PIC18F14K50


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.