Android 4.4 に HID over GATT が追加されたときのcommit

メモです。

AndroidのHID over GATTの実装を理解するために、Android 4.4 KitKat に HID over GATT (HOGP)が追加されたときのcommitを探してみました。

external/bluetooth/bluedroid と frameworks/base と packages/apps/Settings に変更がありました。

ソースコードはbroadcomの人が書いてました。

# external/bluetooth/bluedroid
* https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/2e7fa68bfd9723b7ec7b6b0b128d89f31a2e06ee

```
LE: Add support for the HID-over-GATT profile (1/3)
```

* bluetoothプロトコルスタックを色々と修正。 
* HID over GATT のために、Device Information Service と Battery Service の Central側を追加。

## 追加された内部API

### bta_hh_api.h
* BTA_HhUpdateLeScanParam()
    * Update the scan paramteters if connected to a LE hid device as report host.
    * BTA_HH_API_SCPP_UPDATE_EVTを下位に通知

### hidh_api.h
* hid_known_hid_device()
    * This function checks if this device is  of type HID Device

### srvc_api.h
* srvc_eng_init() 
    * Initializa the GATT Service engine, register a GATT application as for a central service management.
    * GATT_Register()でサービスを登録
* DIS_SrInit()
    *   Initializa the Device Information Service Server.
    *   どこからも呼ばれていない
* DIS_SrUpdate()
    *  Update the DIS server attribute values
    *   どこからも呼ばれていない
* DIS_ReadDISInfo()
    *  Read remote device DIS information.
    *  dis_gatt_c_read_dis_req()で読む
* Battery_Instantiate()
    *  Instantiate a Battery service
    *  GATTS_CreateService（）
    *  GATTS_AddCharDescriptor()
    *  GATTS_StartService()
* Battery_Rsp()
    *  Respond to a battery service request
    *  引数eventに応じて、srvc_sr_rsp()で応答する
* Battery_Notify()
    *  Send battery level notification
    *  srvc_sr_notify()

### srvc_batter_int.h
* battery_valid_handle_range()
    * validate a handle to be a battery attribute handle or not.
* battery_s_write_attr_value()
    * Process write DIS attribute request.
* battery_s_read_attr_value()
    * Process read attribute request.

### srvc_dis_int.h
* dis_valid_handle_range()
    * validate a handle to be a DIS attribute handle or not.
* dis_read_attr_value()
    * Process read DIS attribute request.
* dis_write_attr_value()
    * Process write DIS attribute request.
* dis_c_cmpl_cback()
    * Client read DIS database complete callback.

### srvc_eng_int.h
* srvc_eng_find_clcb_by_conn_id()
    * The function searches all LCBs with macthing connection ID.
* srvc_eng_find_clcb_by_bd_addr()
    * The function searches all LCBs with macthing bd address.
* srvc_eng_find_conn_id_by_bd_addr()
    * The function searches all LCB with macthing bd address
* srvc_eng_release_channel()
    * Client operation complete callback.
* srvc_eng_request_channel()
    * Client operation complete callback.
* srvc_sr_rsp()
    * sever response
* srvc_sr_notify()
    * send notification


# frameworks/base
* https://android.googlesource.com/platform/frameworks/base/+/c60bed487e8bfa98702104cfb8d1287dbc2e82f3

```
LE: Add support for the HID-over-GATT profile (2/3)
```
* HogpのUUIDを追加

# packages/apps/Settings
* https://android.googlesource.com/platform/packages/apps/Settings/+/79f3384eaa10d45270cb2f61a1314746da0e52ce

```
LE: Add support for the HID-over-GATT profile (3/3)
```

* SettingsにHogpのUUIDをチェックする処理を追加し、HOGPのデバイスを選べるようにした。