===== 日付別メモ ===== ==== 6/14メモ ==== *下調べ。 *開発チームはココ。[[https://mbed.org/teams/Bluetooth-Low-Energy/wiki/Homepage|mbed BLE API homepage]] *使っているハードウェアは、nRF51822 Evaluation Kit。 *GAPとGATTに対応。 *GATTのサンプルコードは、[[http://mbed.org/teams/Bluetooth-Low-Energy/code/BLE_HeartRate/|BLE_HeartRate]]。 *BLEDevice,GattService,GattCharacteristicクラス。 *静的変数を用意しておき、Characteristicクラスに紐づけておくことで、BLEのCharacteristicと同期される模様。 ==== 6/15メモ ==== *ハードウェアが手元に届いた。[[https://www.facebook.com/photo.php?fbid=512309988896759|mbed HRM1017]] *mbedオンラインコンパイラのPlatformは、Nordic nRF51822を選択する。 *内蔵オシレーター32KHzなので注意。(nRF51822-mKITは、外部32KHz。) *コンパイル結果のHEXファイルをmbedドライブへコピーすれば書き込める。ブラウザから直書きはダメ。一旦、ローカル保存を経由する。 *SurfacePro2のペアリングには何も表示されない。 *[[http://apps.microsoft.com/windows/app/eg-bluetooth-smart-gatt-profile/87207696-068a-410c-bfdd-a96f44d43b3f|EG Bluetooth Smart Device GATT Profile Checker]]でも認識されない。 ==== 6/16メモ ==== *mbed HRM1017(BLE_Health_Thermometer_IRC) + iPhone(Nordic Toolbox)は、認識できた。 *mbed HRM1017(BLE_Health_Thermometer_IRC) + Nexus7(Nordic Toolbox)は、認識できず。というか、手元のNexus7はBLE未対応みたい。 *BLE喋れるデバイスが、SurfacePro2とTOSHIBA DynabookTabしかない。両方、Win8.1。 *なんとかしてWin8.1でBLE喋らせるしか道が無さそう。 *Win8.1から、WinストアアプリでBLEできる模様。 *BluetoothSIG提供の、ApplicationAcceleratorが使えそう。 *GATT違いでダメでした。BLE_Health_Thermometer_IRCは「UUID_HEALTH_THERMOMETER_SERVICE = 0x1809,」で、ApplicationAcceleratorは「HeartRateMeasurement 0x2A37」。 *明日、ApplicationAcceleratorのコードを書き換えてみることにしよう。 ==== 6/17メモ(Win8.1StoreApp) ==== *GattServiceUuids.HeartRate = "{0000180d-0000-1000-8000-00805f9b34fb}" *Uuidを"180d-0000-0000-..."に変更。→Guidで例外。 *GattDeviceService.GetDeviceSelectorFromUuid()をGattDeviceService.GetDeviceSelectorFromShortId(0x180d)に変更。→Not found *恐ろしい[[http://sviluppomobile.blogspot.jp/2014/02/ble-for-windows-81-part-i.html|記述]]を発見。「Windows 8.1 supports only GATT client mode.」 ==== 6/17メモ ==== *mbed HRM1017(BLE_Health_Thermometer_IRC改) + SurfacePro2(BluetoothSmartDeviceGATTProfileChecker)で、接続に成功。 ==== 6/18メモ ==== *SHORTENED_LOCAL_NAMEのpayloadが正しいか不安だったので、Bluetooth specificationを確認したところ、長さ情報が無かった。したがって、終端の'\0'が必要と思われる。strlen()に+1が必要。 *文字コードがUTF-8だということが分かったので、日本語が表示できるか試してみた。(必要なのか?疑問ではあるが。) ==== 6/20メモ ==== *ペアリング後のデバイス名を指定する方法を模索。 *Bluetooth LE的には、Generic Access Service)(0x1800)のDevice Name Characteristic(0x2A00)を表示している。 *mbed HRM1017のconstに、Generic Access Serviceが定義されていない。orz *無理にSerivceを登録したものの、思うように動かず。(名前変わらず。Advertisingまでおかしくなった。Winアプリによって、Generic Access Serviceが表示されたりされなかったり。) *Generic Access Serviceを登録しなくても、Winアプリに表示されていた。値はnRF5x。 *nRFのライブラリ内で設定しているのか??? *行き止まり。Generic Access ServiceはSoftDeviceで提供されているため、変更不可らしい。({{https://devzone.nordicsemi.com/question/4630/custom-gap-service-with-user-descriptions-uuid-0x2901/|元ネタ}}) *Device Information ServiceのManufacturer Nameでもダメ。ダメになると、何故かAdvertisingの名前もダメになる。 ==== 6/24メモ ==== *mbedコンパイラでの検索操作が間違ってた。orz *CFG_GAP_LOCAL_NAMEに"nRF5x"が定義されていた。 *深堀りすると、nRF51822n::init()->btle_init()->btle_gap_init()->sd_ble_gap_device_name_set()で設定していることが分かった。 *こちらに類似情報あり。[[http://electronics.stackexchange.com/questions/96048/how-to-discover-a-custom-bluetooth-le-device|How to discover a custom Bluetooth LE device]] *偶然、[[http://bril-tech.blogspot.jp/2014/05/bluetoothsmartmbed-1.html|mbed+HRM1017]]の情報を発見。「なお mbed版 nRF51822ではライブラリ側に"Generic Access"と"Generic Attribute"が組み込まれているため」という記述がある。<-0x1800,0x1801 ==== 7/5メモ ==== *6/18メモの「Bluetooth specificationを確認したところ、長さ情報が無かった。」は間違いっぽい。掘り下げ中。vol3,PartB,3 Data Representationあたり。 *data element = header field + data field *header field = type descripter + size descripter *type descripterは5bits *size descripterは3bits *The size index is contained in the least significant (loworder) 3 bits of the first byte of the data element header. *というわけで、6/18メモの「Bluetooth specificationを確認したところ、長さ情報が無かった。」は間違い。 *以前によくわからなかったUUID。ここに載っていた。vol3,Part F,3,3.2 Basic Concepts。 ==== 7/7メモ ==== *WindowsのBluetoothLEアクセス方法を再考。 *Bluetooth LEの対応は、Windows8以降。 *Windows8以降は、APIがある。SetupDiGetClassDevs,SetupDiEnumDeviceInterfaces,SetupDiGetDeviceInterfaceDetailでサービスを探して、CreateFileでオープン。BluetoothGATTGetServicesやBleGetGattCharacteristicでアクセス。 *Windows8.1は、WinRTにクラスが追加されている。Windows.Devices.Bluetooth.GenericAttributeProfile名前空間。 *DesktopAppでも、(csprojを編集して)TargetPlatformVersionを8.1にして、Windowsコア参照すれば、WinRTのクラスが使える。 ==== 7/8メモ ==== *WinRTクラスを確認。いろいろ難あり。 *1.deviceだけの一覧を取得できない。(deviceとserviceの直積が得られる。) *2.serviceからcharacteristicの一覧を取得できない。(Windows Phoneだけは可能?) *特に、2.ができないのは開発時にツラい。 ==== 7/10メモ ==== *DeviceInformationを掘り下げた結果、deviceやserviceの一覧取得に成功。 *ライブラリ化した。[[https://github.com/matsujirushi/mjwinble|mjwinble]] ==== 7/15メモ ==== *WindowsでUUIDを生成したいときは、uuidgen。 ==== 7/16メモ ==== *{BLE_API_Native_IRC}が、128bit UUID Characteristicに対応していないことが判明。{BLE_API+nRF51822}で対応している。 *がっ! {BLE_API+nRF51822}だと、Windowsとのペアリング時にドライバエラーが発生して接続できず。orz *nRF51822のRev.31->33で、ペアリングできなくなっている。 *BOND_MANAGERとPSTORAGEが無効になったことが影響している。両方とも有効にしてみたところ、ペアリングできた! ==== 7/18メモ ==== *PSTORAGEだけ有効ではダメ。 *BOND_MANAGERを有効にするには、PSTORAGEも有効にする必要がある。(コンパイルエラー) *したがって、両方を有効にすることで、Windows 8.1とペアリング可能に。 *NEED_BOND_MANAGERならびにNEED_PSTORAGEをdefineすると有効化できるようにコーディングしてあるように見受けられるが、定義するファイルが不明...。 *mbed.orgに、カタコト英語で質問をポスト! ==== 7/22メモ ==== *NEED_BOND_MANAGERとNEED_PSTORAGEの件、[[http://mbed.org/questions/4106/How-to-enable-BOND_MANAGER/#answer4589|回答]]あり。当面はライブラリ書き換えで対応する。 *キャッシュ無しreadが4秒周期。vol3, Part C, 12.3 Peripheral Preferred Connection Paramterが作用している模様。 *GAPから取得した値はこちら。"9001200300009001" -> 500msec, 1000msec, 0, 4000msec. *btle_gap.cppのbtle_gap_init()で初期設定している。値はprojectconfig.hから。 *Connection Supervision timeout multiplier(CFG_GAP_CONNECTION_SUPERVISION_TIMEOUT_MS)が4秒。 *projectconfig.hを書き換えても、connection parameter変わらない!?Characteristicを読み出して確認。