hid_device.c (b56e8b561bce450f5cd8828749be22a67c2bd9ec) hid_device.c (6c8af51cd8ad0a0d53fc3934daf633474c3bec06)
1/*
2 * Copyright (C) 2014 BlueKitchen GmbH
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright

--- 133 unchanged lines hidden (view full) ---

142
143static hid_device_t * hid_device_get_instance_for_hid_cid(uint16_t hid_cid){
144 if (hid_device_singleton.cid == hid_cid){
145 return &hid_device_singleton;
146 }
147 return NULL;
148}
149
1/*
2 * Copyright (C) 2014 BlueKitchen GmbH
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright

--- 133 unchanged lines hidden (view full) ---

142
143static hid_device_t * hid_device_get_instance_for_hid_cid(uint16_t hid_cid){
144 if (hid_device_singleton.cid == hid_cid){
145 return &hid_device_singleton;
146 }
147 return NULL;
148}
149
150static void hid_device_setup_instance(hid_device_t *hid_device, const uint8_t *bd_addr) {
151 (void)memcpy(hid_device->bd_addr, bd_addr, 6);
152 hid_device->cid = hid_device_get_next_cid();
153 // reset state
154 hid_device->protocol_mode = HID_PROTOCOL_MODE_REPORT;
155 hid_device->con_handle = HCI_CON_HANDLE_INVALID;
156 hid_device->incoming = 0;
157 hid_device->connected = 0;
158 hid_device->control_cid = 0;
159 hid_device->interrupt_cid = 0;
160}
161
150static hid_device_t * hid_device_provide_instance_for_bd_addr(bd_addr_t bd_addr){
151 if (!hid_device_singleton.cid){
162static hid_device_t * hid_device_provide_instance_for_bd_addr(bd_addr_t bd_addr){
163 if (!hid_device_singleton.cid){
152 (void)memcpy(hid_device_singleton.bd_addr, bd_addr, 6);
153 hid_device_singleton.cid = hid_device_get_next_cid();
154 hid_device_singleton.protocol_mode = HID_PROTOCOL_MODE_REPORT;
155 hid_device_singleton.con_handle = HCI_CON_HANDLE_INVALID;
164 hid_device_setup_instance(&hid_device_singleton, bd_addr);
156 }
157 return &hid_device_singleton;
158}
159
160static hid_device_t * hid_device_create_instance(void){
161
162 return &hid_device_singleton;
163}

--- 761 unchanged lines hidden (view full) ---

925 * @result status
926 */
927uint8_t hid_device_connect(bd_addr_t addr, uint16_t * hid_cid){
928 hid_device_t * hid_device = hid_device_create_instance();
929 if (!hid_device){
930 log_error("hid_device_connect: could not create a hid device instace");
931 return BTSTACK_MEMORY_ALLOC_FAILED;
932 }
165 }
166 return &hid_device_singleton;
167}
168
169static hid_device_t * hid_device_create_instance(void){
170
171 return &hid_device_singleton;
172}

--- 761 unchanged lines hidden (view full) ---

934 * @result status
935 */
936uint8_t hid_device_connect(bd_addr_t addr, uint16_t * hid_cid){
937 hid_device_t * hid_device = hid_device_create_instance();
938 if (!hid_device){
939 log_error("hid_device_connect: could not create a hid device instace");
940 return BTSTACK_MEMORY_ALLOC_FAILED;
941 }
933 // assign hic_cid
934 *hid_cid = hid_device_get_next_cid();
935
942
936 // store address
937 (void)memcpy(hid_device->bd_addr, addr, 6);
943 // setup instance
944 hid_device_setup_instance(hid_device, addr);
945 *hid_cid = hid_device->cid;
938
946
939 // reset state
940 hid_device->cid = *hid_cid;
941 hid_device->incoming = 0;
942 hid_device->connected = 0;
943 hid_device->control_cid = 0;
944 hid_device->interrupt_cid = 0;
945 hid_device->con_handle = HCI_CON_HANDLE_INVALID;
946
947 // create l2cap control using fixed HID L2CAP PSM
948 log_info("Create outgoing HID Control");
949 uint8_t status = l2cap_create_channel(packet_handler, hid_device->bd_addr, PSM_HID_CONTROL, 48, &hid_device->control_cid);
950 return status;
951}
952
953/*
954 * @brief Disconnect from HID Host

--- 50 unchanged lines hidden ---
947 // create l2cap control using fixed HID L2CAP PSM
948 log_info("Create outgoing HID Control");
949 uint8_t status = l2cap_create_channel(packet_handler, hid_device->bd_addr, PSM_HID_CONTROL, 48, &hid_device->control_cid);
950 return status;
951}
952
953/*
954 * @brief Disconnect from HID Host

--- 50 unchanged lines hidden ---