Hatena::ブログ(Diary)

_development, RSSフィード Twitter

2010-01-12

BT接続できるSimeji

adamrocker氏のBT接続できるSimeji - bimeji(仮)のクライアントプログラムを公開します。

bimeji(仮)はadakoda氏によるwimejiのBT接続版です。


Serial Port Profile(SPP)を用いた実装と、Human Interface Device Profile(HID)の2種があります。

  • BimejiClient/BimejiServer
  • BimejiSPP
  • BimejiHID

bimeji(仮)は開発中のプロダクトにつき、機能不足・不具合等が多々ありますのでお使いになる場合は自己責任でお願いします。



BimejiClient/BimejiServer

BimejiClient/BimejiServerは、2台のandroid端末間でキー入力を転送するbimejiです。

ハードキーボードを装備したClient端末のキー入力をServer端末のsimejiに転送します。

Server - Client間の接続にはSPPを使っています。


こんな感じ

BimejiClient -[spp]-> BimejiServer -[intent]-> Simeji BR -> Simeji


使い方
  1. クライアント : BimejiClientをインストールします。クライアント端末にはsimejiのインストールは必要ありません。
  2. サーバー : BimejiServerをインストールします。サーバー端末にはsimejiのインストールが必要です。
  3. サーバー : simejiを起動してマッシュルームから[Simeji BR]を起動します。
  4. サーバー : BimejiServerを起動して[start]ボタンを押します。サーバーが起動したら、BimejiServerのアクティビティーは終了して構いません。
  5. クライアント : BimejiClientを起動して[connect]ボタンを押して、接続するサーバー端末を選択します。
  6. クライアント : 端末のハードキーボードを入力します。サーバー端末のsimejiにキー入力が転送されます(はずです)。


BimejiSPP

BimejiSPPは、1台のPCと、1台のandroid端末間でキー入力を転送するbimejiです。

PCのBluetooth仮想COMポート上に開いたシリアルコンソールに対するキー入力をsimejiに転送します。

PC - android間の接続にはSPPを使っています。

こんな感じ

PC <-[spp]- BimejiSPP -[intent]-> Simeji BR -> Simeji

使い方
  1. PC : Bluetooth仮想COM(RS-232C)ポートを作成します。
  2. PC : 作成した仮想COMポートを指定してターミナルエミュレーターを起動します。
  3. android : simejiを起動してマッシュルームから[Simeji BR]を起動します。
  4. android : BimejiSPPを起動して[connect]ボタンを押して、接続するPCを選択します。接続が完了したら、BimejiServerのアクティビティーは終了して構いません。
  5. PC : 接続が完了したら、PCのターミナルエミュレーターキーボードから入力します。android端末のsimejiにキー入力が転送されます(はずです)。


BimejiHID

BimejiHIDはandroid2.0以上でのみ動作します。

BimejiHIDは、1台のBluetoothキーボードと、1台のandroid端末間でキー入力を転送するbimejiです。

Bluetoothキーボードの入力のキーマッピングを行ってsimejiに転送します。

Bluetoothキーボード - android間の接続にはHIDを使っています。

BimejiHIDはApple Wireless Keyboardでのみ動作確認しています。(Apple Wireless Keyboardは一台のホストしかペアリングできないようです。試す場合は一度既存のペアリングを解除してください。)

こんな感じ

Bluetoothキーボード <-[hid]- BimejiHID -[intent]-> Simeji BR -> Simeji

使い方
  1. Bluetoothキーボードandroid端末をペアリングします。
  2. android : simejiを起動してマッシュルームから[Simeji BR]を起動します。
  3. android : BimejiHIDを起動します。BimejiHIDは時間の都合でサービスになっていないので、BimejiHIDアクティビティーのテキストボックスでしか遊べません。
  4. Bluetoothキーボード : 起動が完了したら、Bluetoothキーボードから入力します。android端末のsimejiにキー入力が転送されます(はずです)。


bimejiとsimejiの通信方法

BimejiからSimejiへのキー入力の転送はIntentをBroadcastすることで実現しています。

simejiのBroadcastReceiver(Simeji BR)をONにした状態で、以下の内容でbroadcastするとsimejiにキー入力を渡すことができます。

  • category : "com.adamrocker.android.simeji.KEYCODE";
  • action : "com.adamrocker.android.simeji.ACTION_INPUT";
  • extra : "keyevent"(android.view.KeyEvent型)


アーティファクト

android 1.6

android 2.0以上


ソース

Bimeji.zip 直

上述のプログラムの全てのソースコードを同梱しています。


android1.6
  • BimejiClient
    • BluetoothKeyboardClient
  • BimejiServer
    • BluetoothKeyboardServer
  • BimejiSPP
    • BluetoothSPPKeyboard
android 2.0以上
  • BimejiClient
    • BluetoothKeyboardClient2
  • BimejiServer
    • BluetoothKeyboradServer2
  • BimejiSPP
    • BluetoothSPPKeyboard2
  • BimejiHID
    • BluetoothHIDKeyboard2

NoRhyNoRhy 2010/02/05 09:00 手元にあるhpのipaqブランドのブルートゥースキーボードがSPP経由での接続であることがわかったので、どうにかHT-03Aとつなぐことができないかと思い、こちらの記事にたどり着きました。
そこで、Bimejiとこちらに掲示のあるBimejiSPPが使えるのではないかと思い試したところ、キー入力に対して反応があるものの、入力したキーと違う文字が表示される結果となりました。

一方、KeyProというプロダクト
http://www.mymobilegear.com/AndroidKBDriver.php
で同キーボードの接続を試しており、このソフトでは「keyboard model」という設定を「feedomuniversal」とすることで英数字入力が可能になった実績があります。

そこで、KeyProの「keyboard model」を他のキーボードにしていくつか試したところ、BimejiSPPとBimejiの組合せは「Snap-N-Type」を選んだときと同じ文字が表示されることがわかりました。
ここで、もしかしたら、BimejiSPPの入力に対して文字を出力する組合せをKeyProと同じように変更できるようにすれば、私が持っているキーボードをHT-03Aに接続できるのではないかと考えました。
ここからはお願いですが、このBimejiSPPをKeyProの「feedom universal」の配列にも対応することができないでしょうか。できることであれば、自分で作ってみる努力もしたく思いますので、方法をご教授いただくだけでもお願いできないかと思い、書き込みした次第です。
よろしくお願いいたします。

esmasuiesmasui 2010/02/05 16:43 NoRhyさん

BimejiSPPは仮想シリアルコンソールなどからの使用を想定しており、コンソールに入力されたキャラクターをそのままSimejiにディスパッチする形式になっています。

ですので、SPPキーボードを使用する場合は、おそらくキーコードをandroidのキーコードにマップするような処理が必要になると思います。(BimejiHIDがやっているような)

上記のようになっているのは、制作当時SPPキーボードの存在を知らなかったためです。

対応を行いたいのですが自分はSPPキーボードを所持していません。
しかし、キーボードが送出するデータがわかれば開発は可能です。

キーボードが送出するデータをダンプするようなテストプログラムを近日中に作成しますので、それを使用してダンプされたものを提供していただき、ダンプをもとに開発するというかたちでよろしいでしょうか?

NoRhyNoRhy 2010/02/05 23:09 私のような者のニッチなニーズにお応えいただきありがとうございます。
手元のキーボードが生かせることになれば、たいへん助かります。
お手数をおかけするようで恐縮ですが、ぜひお願いしたく思います。

DraakDraak 2010/03/21 05:56 Wow Thanks for the app!! Ive studied japanese for two years and managed to install your app with just a little difficulty on my Nexus one. Am using the Freedom Universal Keyboard on HID mode.

ありがとうございます 僕の顔を笑うですよ!!

NoRhyNoRhy 2010/04/09 00:04 ご無沙汰しています。
androidのバージョンがあがると状況も変るかなと思って少し様子を見ていましたが、ドコモのはまだ2.Xにバージョンアップする気配がないので、手持ちのキーボードを使えればと思って再度伺いました。お話のあったテストプログラムが試せればと思いますが、お忙しいでしょうか。

esmasuiesmasui 2010/04/10 23:48 NoRhyさん

お待たせしてしまっており、申し訳ありません。
べつのタスクでゴタゴタしておりまして、もうすこしお待ちいただければ幸いです。

esmasuiesmasui 2010/05/19 05:25 キーマッピングのカスタム機能をつけてみました。
以下のエントリから試してみてください。

http://d.hatena.ne.jp/esmasui/20100518

NoRhyNoRhy 2010/05/19 23:54 ありがとうございます。
いきなり使えるようにご対応いただけたとは、感謝感激です。
早速試してみます。

NoRhyNoRhy 2010/05/20 22:30 改めて、ご対応ありがとうございました。
私のHT-03Aとipaqのキーボードで試した結果をご報告します。

結論から申し上げると、残念ながらうまくキーマッピングできませんでした。
コネクトしたあとlerningを実行すると文字の指定が出るのですが、指定される文字が0,2,4,6...という順に表示され、何度か試しているうちに、どうも1つのキーを押すと表示される文字が2つずつ送られているように見えました。実際に一旦セーブしたあと、認識できたと思われるキーを押すと、たとえば2なら2と3が入力されるようです。

お忙しい中作成いただいた結果がこういうレポートとなり心苦しいですが、以上のような状況ですので、また折を見てご対応いただければありがたいです。

esmasuiesmasui 2010/05/21 20:23 NoRhy さん。
動きませんでしたか。。
キーコードを取得しているところを変更してみましたので、お暇なときにもう一度試してみてください。

http://d.hatena.ne.jp/esmasui/files/BluetoothSPPKeyboard.apk

でもたぶんダメだと思うので、キーコードをダンプする処理をいれました。

マッピングを(想定通りにいかなくても)適当なところまでしていただいたあと、
アプリケーションの画面の一番下にある[Share]ボタンを押してください。

宛先にわたしのアドレスと本文にダンプした情報を記入済みの状態でメールアプリの選択ダイアログが起動しますので、
てきとうなアプリケーションを選んで送信してください。

以上、よろしくお願いします。

NoRhyNoRhy 2010/05/21 23:42 早速のアップデートありがとうございます。

試して見ましたが、結果は同じでした。ダンプファイルはお送りしました。

しかし、今回は重要と思われる動きを発見しました。
ゆっくり押してみて判ったのですが、キーを押した時と離した(戻した)時に要求されるキーが変ることに気づきました。つまり、1キー操作で押すときと離すときで合計2回コードが送信されているようなのです。
さらに試しに、要求されたキー、たとえば「0」を押したままにすると次の「1」が表示されていて、押した「0」を戻さずに押さえたまま「1」を押すと「2」を要求するメッセージになりました。これを最後まで続けるのは手足の指を使っても足りないので止めましたが、キーを押す動作と離す動作が識別できれば、または大雑把かもしれませんが、押したキーは必ず離すので2回1組で認識すれば、うまくいくのかもしれません。

なんだかwindows3.1の頃フリーソフトで使いやすくしたり、その作者とやりとりしていた古き良き時代の感覚が思い出され、楽しくなってしまって、つい矢継ぎ早になってしまいましたが、どうか、無理なくご対応いただければありがたいです。

esmasuiesmasui 2010/05/24 03:58 NoRhyさん

送信いただいたダンプとNoRhyさんのご推察のとおり、keydownイベントのコードにオフセットを足した値がkeyupとして送出されているようです。

以下のapkでkeyupをスキップしてkeydownのみを取得するようにしました。
これで全キーのマッピングを行って、再度ダンプをお送りいただけますでしょうか?

そのダンプにオフセットを足したマッピングをつくれば、それなりに動くものになるのではないかと思います。
。。。ただしマッピングができても、BimejiHIDと同様の制限(確定前の入力文字しか操作できない・
スペースキーで変換候補を選択できないetc)などがありますので、現状本格的には使えないであろう
点についてはご容赦ください。

http://d.hatena.ne.jp/esmasui/files/BluetoothSPPKeyboard201005241.apk

たなたな 2010/05/24 16:25 Desireで試しましたが認識しませんでした。
具体的には、Bimejiのほうの手順で
BimejiHIDでstartを押すと、faild to connect:java.io.IOException:Unk
nown error:0と出ます。

キーボードは、BT Keyboard:Reudo RBK-2000BTIIです。

何かいい解決方法はあるでしょうか?

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証