View on GitHub

HIDSimpleFramework

Simple USB-HID framework

Download this project as a .zip file Download this project as a tar.gz file

HIDSimpleFrameworkについて

HIDSimpleFrameworkはUSB HIDを用いてホスト(PC)とマイコンのプログラムを連携させる、非常にシンプルなフレームワークです。 できることは限られていますが、USB HIDなのでドライバが不要、また、CDCデバイスのようにCOMポートを選択する必要もありません。 ホスト側のライブラリはC#で書かれており、.NET frameworkさえインストールされていれば、Windows XP~Windows 8まで幅広い環境で確実に動作します。

最も簡単な使い方

PCと接続して、ホスト(PC)からの指令でLEDを点滅させる簡単なサンプルは以下のようになります。 64バイトのパケットにデータを入れてホストから送信し、それをマイコンで受信する、単純な動作です。マイコン側は、LEDのポートの初期化と簡単なループ以外になにも書く必要がありません。

デバイス(マイコン)側のコード:

void init( void ) {
    TRISBbits.TRISB1 = 0;   // RB1をデジタル出力に設定
}

void run( void ) {
    BYTE buff[64];  // 受信バッファ

    // データが届いていたら受信する
    if ( HIDReceive( buff, sizeof( buff ) ) ) {
        // LEDを点けるか消すか
        LATBbits.LATB1 = ( buff[0] ? 1 : 0 );
    }
}

ホスト(PC)側のコード:

// デバイスに接続
HIDSimple dev = new HIDSimple();
dev.Open( vid, pid );
while ( true ) {
    // 1を送信
    dev.Send( new byte[] { 1 } );
    System.Threading.Thread.Sleep( 500 );
    // 0を送信
    dev.Send( new byte[] { 0 } );
    System.Threading.Thread.Sleep( 500 );
}

もう少し実用的な使い方

一方的にホストから指令を送るだけではあまり使えないので、ボタンを押したらLEDが光るサンプルを作ってみます。 マイコンに接続されたボタンの状態をホスト側で読み取り、LEDを点灯させる指令をマイコンに送信します。

デバイス(マイコン)側のコード:

void init( void ) {
    ANSELBbits.ANSB0 = 0;   // RB0をデジタル入力に設定
    TRISBbits.TRISB0 = 1;

    TRISBbits.TRISB1 = 0;   // RB1をデジタル出力に設定
}

void run( void ) {
    BYTE buff[64];  // 受信バッファ

    // データが届いていたら受信する
    if ( HIDReceive( buff, sizeof( buff ) ) ) {
        // LEDを点けるか消すか
        LATBbits.LATB1 = ( buff[0] ? 1 : 0 );
    }
    // 送信可能?
    if ( HIDSendReady() ) {
        // ボタンの状態を送る
        buff[0] = PORTBbits.RB0;
        HIDSend( buff, 1 );
    }
}

ホスト(PC)側のコード:

// デバイスに接続
HIDSimple dev = new HIDSimple();
dev.Open( vid, pid );
while ( true ) {
    // 受信する
    byte[] buff = dev.Receive();
    // そのまま送り返す
    dev.Send( buff );
    System.Threading.Thread.Sleep( 100 );
}

お約束

このライブラリは三条項BSDライセンスとなっています。 まったく自由にお使い下さい。但し特に保証もしません。