あまり学問的なことはわからないのですが、基本設計前のクラス図をつくるまえの段階の原稿になります。
MIDIAndBlueというリポジトリをGitHubにつくったところです、現状のMIXandCCで使われている、BlueTooth関連の基本ライブラリです。リポジトリを作っただけで、ファイルはまだコピーしてないのですが。
助長にした呼び名は、MIDI, Android, Bluetoothです。8割完成していますが、Threadへの一元化と、ステータスと管理と、ステータスへのリスナーの登録をしたら、公開しようと思っています。
MIDIAndBlue | メイン メンバーのクラスは、MABThread, MABDeviceList, MABMessageFactory。 ほかのクラスは適時生成。 pickBluetooth, scanBluetooth, openBluetooth, registerBluetoothなどがあります。 なかでも、registerBluetoothは、BluetoothDevice, Name, Address, Statusをパラーメータにもち、リストとコンテンツ情報を更新します。 |
MABThread | Bluetooth通信用スレッド Start、Waiting、Freeze の3つの状態をもちます。 Runnbleを順次処理していきます。 Startされると、Runnableを単一スレッドから実行していき、双方向通信が必要な場合には、Waitingステータスにきりかえ、レスポンスがあった段階で、Startに戻します。 Waitingの場合、メインスレッドは、次のRunnableの処理をせず、Startされるまで待機します。 メンバーのクラスは、MABReader, MABWriter |
MABDevice, MABDeviceList | デバイスと、その一覧を管理します。 BluetoothDevice, NAme, Address, Statusを保持しています。 また、DeviceInfoUpdateListenerをもちます。 |
MABStatus? MABErrorCode? MABCodes | MABDeviceの状態コードで定数管理します。以下の2つが主です。 SearchStatus { scan, bond, other, lost } OpenStatus { opened, closed, opening, closing } |
MABMessage, MABMessageDispatcher, MABMessageFactory | data (byte[]), offset, length などを保持する、メッセージを意味するクラスと、 そのまま、dispatchMesssge(MABMessage)をメソッドにもつDispatcherです。 また、MABMessageFactoryは、ガーベージコレクタ回避のための、キャッシングをします。 MABMessageDispatcherは、インターフェースとして、MABMessageを1つわたせる、dispatchMessage(MABMessage) メソッドだけをもつ、いわゆるストリームです。処理用パイプとなります。 |
MABWriter | MABMessageを書き込むためのクラス。 MABMessageDispatcherの実装のひとつ MABMessageをプールすると、MABThread経由で、BLE-MIDIデバイスにMIDIシグナルを送信します。 startTransmitter, stopTransmitter, dispatchMessage(MABMessage) |
MABReader | MABMessageを読み込むためのクラス。 pushData(byte[] data, int offset, int length)から、 MABMessageのリストをつくり保持します。 startParserThread, stopParserThread MABMesage getNextMessage()、boolean waitNextMessage(int timeout), など bindFromReaderToStreamAsThread なんていうコンセプトのヘルパークラスも作るとか作らないとか。 |
MABHelper | UUIDの生成とか、Intentのコードの管理ですかね。 |
MABConnectionCallback | BLEの接続まわりをあつかう、Callback用のクラスです。 |
MABLauncherForDevices | MIDIAndBlueおよび、Activity(Context)をもとにした、コンストラクタを持ちます。 Intentを実行をつかさどるので、Activitiyのメンバーとして、OnCreateの前にオブジェクトを生成することで、 checkPermission, grantPermission, launchPicker, launchScanner, startOpenDevice, launchLoggerView, launchDeviceListView などを持ちます。 そのさいの遷移先については、記述はしません。 |