Support GET_IDLE/SET_IDLE of HID Device. 21/139521/1
authorDeokhyun Kim <dukan.kim@samsung.com>
Wed, 19 Jul 2017 07:58:20 +0000 (16:58 +0900)
committerDeokhyun Kim <dukan.kim@samsung.com>
Wed, 19 Jul 2017 07:58:20 +0000 (16:58 +0900)
Change-Id: I46054bd72531533fc9e2609cf484023ab34dab62
Signed-off-by: Deokhyun Kim <dukan.kim@samsung.com>
bt-api/bt-hid-device.c
include/bluetooth-api.h

index 023647c..76ed6d0 100644 (file)
@@ -454,6 +454,28 @@ static gboolean __received_cb(GIOChannel *chan, GIOCondition cond,
                        break;
                }
 
+               case BT_HID_TRANS_GET_IDLE:{
+                       BT_INFO("Get_IDLE");
+                       data.type = HTYPE_TRANS_GET_IDLE;
+                       data.param = PTYPE_DATA_RTYPE_INPUT;
+                       data.buffer_size = len;
+                       data.buffer = (char *) malloc(sizeof(char) * len);
+                       if (data.buffer)
+                               memcpy(data.buffer, buffer, len);
+                       break;
+               }
+
+               case BT_HID_TRANS_SET_IDLE:{
+                       BT_INFO("Set_IDLE");
+                       data.type = HTYPE_TRANS_SET_IDLE;
+                       data.param = PTYPE_DATA_RTYPE_INPUT;
+                       data.buffer_size = len;
+                       data.buffer = (char *) malloc(sizeof(char) * len);
+                       if (data.buffer)
+                               memcpy(data.buffer, buffer, len);
+                       break;
+               }
+
                default: {
                        BT_INFO("unsupported HIDP control message");
                        BT_ERR("Send Handshake Message");
@@ -880,7 +902,7 @@ BT_EXPORT_API int bluetooth_hid_device_reply_to_report(const char *remote_addr,
 {
        int result;
        struct reports output_report = { 0 };
-       int bytes = 0;
+       int bytes = BLUETOOTH_ERROR_INTERNAL;
        hid_connected_device_info_t *info = NULL;
        info = __find_hid_info_with_address(remote_addr);
        if (info == NULL) {
@@ -961,6 +983,26 @@ BT_EXPORT_API int bluetooth_hid_device_reply_to_report(const char *remote_addr,
                BT_DBG("Bytes Written %d", bytes);
                break;
        }
+
+       case HTYPE_TRANS_GET_IDLE: {
+               BT_DBG("Replying to Get_IDLE");
+               output_report.type = BT_HID_TRANS_DATA | BT_HID_DATA_RTYPE_OUTPUT;
+               output_report.rep_data[0] = data[0];
+               bytes = write(info->intr_fd, &output_report, 2);
+               BT_DBG("Bytes Written %d", bytes);
+               break;
+       }
+
+       case HTYPE_TRANS_SET_IDLE: {
+               BT_DBG("Reply to Set_IDLE");
+               output_report.type = BT_HID_TRANS_DATA | BT_HID_DATA_RTYPE_INPUT;
+               memcpy(output_report.rep_data, data, data_len);
+               bytes = write(info->ctrl_fd, &output_report,
+                               sizeof(output_report));
+               BT_DBG("Bytes Written %d", bytes);
+               break;
+       }
+
        default:
                break;
                }
index 3955cfc..63b250c 100644 (file)
@@ -1232,7 +1232,9 @@ typedef enum {
        HTYPE_TRANS_GET_PROTOCOL,
        HTYPE_TRANS_SET_PROTOCOL,
        HTYPE_TRANS_DATA,
-       HTYPE_TRANS_UNKNOWN
+       HTYPE_TRANS_UNKNOWN,
+       HTYPE_TRANS_GET_IDLE = 0xF0,
+       HTYPE_TRANS_SET_IDLE = 0xF1,
 } bt_hid_header_type_t;
 
 /**