実用ライブラリシリーズ:PS/2 (キーボード、マウス)

Languages

English version is here : Practical library series : PS/2 (Keyboard, Mouse)

概要

PS/2デバイスはレガシーな入力デバイスで、既にコンピュータの世界からは消え去ろうとしています。

しかし、小規模なマイコンにキーボードやマウスを接続することを考えてみた場合、これほど扱いやすい方法はありません。

そこで、今回はPS/2デバイスの代表格でもあるキーボードとマウスに対応するライブラリを設計実装しました。

CLKとDATの2線を使ってPS/2デバイスからデータを読み取ることができます。

受信は割り込み駆動で行われますので、アプリケーション側の負担も最小限です。

特徴

このPS/2ライブラリには以下の特徴があります。

  • キーボードとマウスに対応しています。
  • 受信は割り込みで自動的に行われます。
  • シンプルなインターフェースで使用できます。

接続

プロジェクト

関連するプロジェクトはPS2PS2_TestProgramの2つです。

ライブラリはPS2にあります。

このライブラリは他のプログラムでそのまま使うことができるようにmbedのライブラリ及びテストプログラムは含んでいません。

テストプログラムを実行してみたい時にはPS2_TestProgramを使って下さい。

使い方

キーボードクラスとマウスクラスの使い方は以下の通りです。

キーボードクラス

#include "mbed.h"
#include "PS2Keyboard.h"

PS2Keyboard ps2kb(p12, p11); // CLK, DAT

int main() {
    PS2Keyboard::keyboard_event_t evt_kb;

    while (1) {
        if (ps2kb.processing(&evt_kb)) {
            printf("[%d]:", evt_kb.type);
            for (int i = 0; i < evt_kb.length; i++) {
                printf("%02x ", evt_kb.scancode[i]);
            }
            printf("\n");
        }
    }
}

マウスクラス

#include "mbed.h"
#include "PS2Mouse.h"

PS2Mouse ps2ms(p23, p22); // CLK, DAT

int main() {
    PS2Mouse::mouse_event_t evt_ms;
    while (1) {
        if (ps2ms.processing(&evt_ms)) {
            printf("%c%c%c:%4d,%4d,%2d\n",
                evt_ms.left ? 'L' : '.',
                evt_ms.center ? 'C' : '.',
                evt_ms.right ? 'R' : '.',
                evt_ms.x, evt_ms.y, evt_ms.z);
        }
    }
}

参考

制限

  • マウスの中には非常に高速にデータを送信してくるものもあります。この場合、内部バッファがオーバーフローして正しく処理できなくなることがあります。


0 comments

You need to log in to post a comment