« SOFTUNEWorkbenchマニュアルを読んでみる | トップページ | 頭の体操 »

2008年4月29日 (火曜日)

USBマウス対応サンプルのソースコードを読んでみる

今回はインターフェース2008年6月号の第2章「USBホスト制御サンプル・プログラムの作成」を見てみる。とは言うものの、主にUSBマウス対応サンプルの部分のみ(ファイルシステムはまた次回にでも)。
とりあえずsample_demo.cのmain関数周辺だけだが、それでも疑問点は満載。

71    ISTATUS result;
72    USBH_MOUSE_SETTING_T mouseSetting = {Usb_Hid_Mouse_Event, NULL};

とりあえず、「ISTATUSわかんねー」ってのがあったけど、これはP64を読むとlongである事が判明。続いては「USBH_MOUSE_SETTING_Tって何?構造体?」。これもSOFTUNEの検索機能でサンプルのフォルダ配下を検索して、Src\miniUSBHost\Include\uchidapi.hの46行目にて発見!(下記)ってか、これってP64の表3か。あれ、本文に表3についての記述が無いような・・・。

/*----------------------------------*/
/**
* @struct Mouse Driver セッティング情報構造体.
*
*/
typedef struct _USBH_MOUSE_SETTING_T {
    void (*eventf)(IHANDLE, int32_t, void *);     /**< イベントコールバック */
    void *prm; /**< イベントコールバックのパラメータ */
} USBH_MOUSE_SETTING_T, *PUSBH_MOUSE_SETTING_T;

でも

型名 変数名 = {引数?1,引数?2};

って表記が少々?な感じだったりします。C言語はそんなに深くやってない&最近仕事で触れる機会はほとんどないんですがこれって一般的な表記でしたっけ?しかも引数?1の「Usb_Hid_Mouse_Event」がsample_demo.c内の同名の関数のハンドルみたいですが、これってリテラル?SOFTUNE特有の表記?うーん、マニュアルにちゃんと書いてあるのだろうか・・・。

まぁ、気にせずに読み進める。

74    Serial_Init();
75    Timer_Init(__USBH_INTERVAL_TIMER__, Usb_Host_Timer);
77    result = Usb_Host_Init(Usb_Host_Callback);
78    if (result) {
79        for (;;);
80    }

74行目と75行目はシリアルポートとタイマの初期化をしているっぽい事以外はさっぱりわからん。「__USBH_INTERVAL_TIMER__」についてはP63の冒頭あたりにちょっと記載されているようだ。後でもう少し詳しく見てみよう。

77行目以降はなんとなくUSBホスト機能の初期化処理を呼び出す過程でコールバック関数が呼ばれているっぽい。やはりこういう風に「関数名をそのまま書く=関数のハンドル」というのが一般的なようですね。サンプルの動作と「Usb_Host_Callback」関数の中を対比すればHIDなUSB機器が接続された時に呼ばれているというのがわかる。

82    result = Usb_Hid_Mouse_Setting(&mouseSetting);
83    if (result) {
84        for (;;);
85    }

ここでは72行目で設定したmouseSettingっつう構造体のアドレスを食わせている。mouseSettingには関数のハンドルが入っているのでこれを頼りにUsb_Hid_Mouse_Eventが呼び出されるようである。Usb_Hid_Mouse_Eventの中身とサンプルの動作を見るとUSBマウスが接続されて移動情報が発生した際に呼ばれている模様だというのが分かる。

・・・というかこの辺(実際のサンプルでの画面出力の箇所)はソース読めばわかるんだよなー。こういう説明に本文を割くよりもっと別の部分(コールバックの仕組みに始まり、サンプルのソースやマニュアルのどのあたりが参考になるかとかと言ったポインタ)に注力して欲しいと思うのは自分だけだろうか?

87    Timer_Start();
89    while (TRUE) {
90        ;
91    }

この辺はさっぱりぷー。つーか、Javaにどっぷり浸かっているとこーいった

result = Hoge();
if(result){
    for(;;);
}

みたいなコーディングは「なんだかなー」ってのが正直な感想。ブログとか使ってそーいった「他の分野のプログラミング経験」がある人向けのエントリとか展開してもらえるとかなり助かる感じ。

とりあえず今回はこの辺で。次回はファイルシステムのサンプルあたりを見てみたいと思います。

|

« SOFTUNEWorkbenchマニュアルを読んでみる | トップページ | 頭の体操 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/2790/41036464

この記事へのトラックバック一覧です: USBマウス対応サンプルのソースコードを読んでみる:

« SOFTUNEWorkbenchマニュアルを読んでみる | トップページ | 頭の体操 »