TeamKNOx WEB-Site
Last Update : 2006/Feb/16
BlueToothKey
BlueToothKeyとは?
動作原理
使用デバイス
使い方
ダウンロード
応用例
今後
謝辞
<<戻る

    BTKey60 BTKey60

    携帯電話で外部機器を制御する。あるいは携帯電話を外部から制御するいわゆるリモートコントロールについての研究・考察を行う。BlueTooth の RFCOMM プロファイルを実装するに当たってはいしかわきょーすけ氏開発による bluemelt を利用させていただいている。


  • BlueToothKeyとは?

    BTKey60

    BlueToothKeyとは、BlueTooth で接続された入力デバイスを取り扱うシステムの総称である。BTでは入力デバイスをハンドリングするHID(Human Interface Device)のプロファイルが既にあるが、ここではより自由度の高い RFCOMM により実現している。


  • 動作原理

    • キーパッド側
      1. スーファミパッドの読み込み

        スーファミパッドの読み込み方法はよく使いそうだが、読み込み方法がずばりそのまま載っているサイトを見たことがないので、ここで原理を簡単に説明する。スーファミのパッドはCMOSの標準ロジック 4021 相当のICが2個カスケード接続されている。先代ファミコンでは1個使い(8個のボタン)であった。一定のタイミングでパラレル→シリアル(ボタンをラッチ)を行う。それをクロックを与えることにより1ビットずつ読み出していく。
        		
        unsigned int GetSFCPad(void)
        {
        	int i;
        	unsigned int padData;
        
        	PAD_LATCH = ACTIVE_LOW;				// Prallel -> Serial latch
        	padData = (padData | PAD_DATA);		// Read Data
        	padData = padData << 1;
        	PAD_CLOCK = ~ACTIVE_LOW;
        
        	for(i = 0;i < 15;i++){
        		PAD_CLOCK = ACTIVE_LOW;
        
        		padData = (padData | PAD_DATA);	// Read Data
        		padData = padData << 1;
        
        		PAD_CLOCK = ~ACTIVE_LOW;
        	}
        	PAD_LATCH = ~ACTIVE_LOW;			// Serial -> Paralel
        
        	padData = padData + 1;
        	padData = ~padData;
        
        	return padData;
        }
        		
        		

      2. 変化したボタンの認識

        ボタンの変化は現在の値と前回の値を比較すれば良い。比較方法は ExOR を使う。

      3. 		
        gPadDataDiff = gPadDataOld ^ gPadData;
        		
        		

      4. 変化したボタン位置の送出

        ボタンは全部で12個あるのでブレーク→メーク(押下げ)、メーク→ブレーク(ボタン離し)が発生したらその状態を送信する
        		
        for(i = 0;i < NUM_OF_KEY;i++){
        	if(gPadDataDiff & scanDiff){
        		if(gPadData){
        			blueme_data_put(i);	// Make
        		}
        		else{
        			blueme_data_put(i + NUM_OF_KEY);	// Break
        		}
        	}
        	scanDiff = scanDiff >> 1;
        }
        		
        		

    • 端末側
      1. RFCOMM プロファイルを装備しているデバイスを探す
      2. ターゲットとコネクションする
      3. BTKey 本体からデータを受け取る
      4. データに含まれているIDからキーイベントメッセージを送る


  • 使用デバイス

    1. マイコンボード

      BTKey60
      トランジスタ技術2005年4月号の付録。こういうのが技術誌の付録で付いてくるんだから本当にいい時代になったと思う。しかも開発環境付き。

    2. BTモジュール

      BTKey60
      再現性を高めるために、石川氏の実験で使用したものと同一の物を利用する。エリクソンのROK 101 008これを利用したBTアダプタを秋葉原の中古屋で入手、そこから取り外して利用する。

    3. スーファミパッド

      さすがに現役機種ではないので中古屋のお世話になる。任天堂の凄いところは保守部品として、容易に手に入れることが出来るようになっているところだ。中古のスーファミがコントローラx2個付きで¥2,000位。新品のコントローラは1個、¥1,500位。どちらが得かよく考えてから購入する。このコネクタだと、適合するコネクタは市販されていないので一般的なモノに付け替える。PS/2キーボードを将来的にはサポートするので MiniDin6P とする。


  • 使い方

    1. BTKey 本体の電源を入れる

      青色LED 点灯→消灯 を確認する。

    2. BTKey60 を起動する

      (1).BTKey60

      (2).起動直後

      (3).BTKey本体との接続

      シェル上での BTKey60

      本体との接続が行われていないので、何も表示されていない。

      Connect コマンドを選択

      (4).前回使用した機器

      (5).BTKey の検索

      (6).検索結果

      前回使用した機器の一覧が表示される

      BTkey(bluemelt)が無い場合は検索する

      検索した結果 BTKey(bluemelt)が表示された

      (7).サービス開始

      (8).動作確認

      (9).サービス終了

      接続のプロセスが表示される。コントローラの青色LEDが点灯する。

      ゲームパッドでカーソルが動作することを確認する

      Disconnect を選択してセッションを終了する

    3. キーの割り当て

      各キーの割り当ては以下のとおり

      (1).コントローラビット

      (2).パッド割り当て

      (3).702NK 割り当て

      0

      B

      OK

      1

      Y

      Shift

      2

      SELECT

      HomeKey

      3

      START

      Left-Soft-Key

      4

      Up

      Up

      5

      Down

      Down

      6

      Left

      Left

      7

      Right

      Right

      8

      A

      Right-Soft-Key

      9

      X

      Clear

      10

      L

      N/A

      11

      R

      N/A


  • ダウンロード

    メールにてお問い合わせください。


  • 応用例

    • 自動テスト

      AutomatedTest.pdf
      携帯電話(で)の制御のきっかけは携帯電話のソフトウェアのテストの自動化をなんとかして実現できないかと言うことでした。携帯電話に限らず、システムのテストは入力パターンを与えて、その結果を見て判断するわけですから、入力パターンを与える部分と結果の判断を行う部分を機会に置き換えることが出来れば、自動化は可能になります。特に最終形に近い形でテスト出来れば、システムの信頼度も上がります。今回、検討しているシステムは入力部分に BTKey60 を使います。PC(テストクライアント)から、キーシーケンスを発生させ、BT経由で端末に送ります。BTKey60 はそれに応じたキーイベントをシステムに投げます。そのキーイベントが先ほどのテストの入力パターンになるわけです。結果としてその入力パターンに応じた画面が現れます。画面情報は既に公表されているキャプチャソフトを利用してもいいし、BTKey60 の中に組み込んでも可能です。その画面出力をBT経由でテストクライアントに送ります。テストクライアントはその画面出力からテスト結果を判断します。テストクライアントのソフトウェアですが、EXCELなどのマクロなどを作成してもいいし、WinRunnerなどの本格的なテストスィートソフトウェアを利用しても可能です。


  • 今後

    1. PS/2キーボード接続
      1. ハードウェア

        BTKey60
        現在は入力デバイスとしてスーパーファミコンのパッドが接続されているが、PS/2 キーボードと極力、信号が重なるようにピンアサインを決めている。

      2. ソフトウェア

        PS/2キーボードが接続できるようにファームウェア、BTKey60 共々拡張する。特に日本語に対応させるためには内部にステートマシンなどを保持して現在の入力モードを把握しておく必要がある。実装していただける勇者の出現を待ってます。

    2. 汎用化

      より入手しやすいデバイスを使って、汎用化・小型化する。


  • 謝辞

    RFCOMM プロトコルスタックを利用させてもらっているいしかわきょーすけ氏、アイコンを提供いただいたよしくん氏に感謝します。


頁の先頭
織田裕一へメール


Copyright (C) 1998 - 2005 TeamKNOx