btdev.h 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /* SPDX-License-Identifier: LGPL-2.1-or-later */
  2. /*
  3. *
  4. * BlueZ - Bluetooth protocol stack for Linux
  5. *
  6. * Copyright (C) 2011-2012 Intel Corporation
  7. * Copyright (C) 2004-2010 Marcel Holtmann <marcel@holtmann.org>
  8. *
  9. *
  10. */
  11. #include <stdint.h>
  12. #include <stdbool.h>
  13. #define BTDEV_RESPONSE_DEFAULT 0
  14. #define BTDEV_RESPONSE_COMMAND_STATUS 1
  15. #define BTDEV_RESPONSE_COMMAND_COMPLETE 2
  16. typedef struct btdev_callback * btdev_callback;
  17. void btdev_command_response(btdev_callback callback, uint8_t response,
  18. uint8_t status, const void *data, uint8_t len);
  19. #define btdev_command_default(callback) \
  20. btdev_command_response(callback, \
  21. BTDEV_RESPONSE_DEFAULT, 0x00, NULL, 0);
  22. #define btdev_command_status(callback, status) \
  23. btdev_command_response(callback, \
  24. BTDEV_RESPONSE_COMMAND_STATUS, status, NULL, 0);
  25. #define btdev_command_complete(callback, data, len) \
  26. btdev_command_response(callback, \
  27. BTDEV_RESPONSE_COMMAND_COMPLETE, 0x00, data, len);
  28. typedef void (*btdev_command_func) (uint16_t opcode,
  29. const void *data, uint8_t len,
  30. btdev_callback callback, void *user_data);
  31. typedef void (*btdev_send_func) (const struct iovec *iov, int iovlen,
  32. void *user_data);
  33. typedef bool (*btdev_hook_func) (const void *data, uint16_t len,
  34. void *user_data);
  35. enum btdev_type {
  36. BTDEV_TYPE_BREDRLE,
  37. BTDEV_TYPE_BREDR,
  38. BTDEV_TYPE_LE,
  39. BTDEV_TYPE_AMP,
  40. BTDEV_TYPE_BREDR20,
  41. BTDEV_TYPE_BREDRLE50,
  42. BTDEV_TYPE_BREDRLE52,
  43. };
  44. enum btdev_hook_type {
  45. BTDEV_HOOK_PRE_CMD,
  46. BTDEV_HOOK_POST_CMD,
  47. BTDEV_HOOK_PRE_EVT,
  48. BTDEV_HOOK_POST_EVT,
  49. };
  50. struct btdev;
  51. struct btdev *btdev_create(enum btdev_type type, uint16_t id);
  52. void btdev_destroy(struct btdev *btdev);
  53. typedef void (*btdev_debug_func_t)(const char *str, void *user_data);
  54. typedef void (*btdev_destroy_func_t)(void *user_data);
  55. bool btdev_set_debug(struct btdev *btdev, btdev_debug_func_t callback,
  56. void *user_data, btdev_destroy_func_t destroy);
  57. const uint8_t *btdev_get_bdaddr(struct btdev *btdev);
  58. uint8_t *btdev_get_features(struct btdev *btdev);
  59. uint8_t btdev_get_scan_enable(struct btdev *btdev);
  60. uint8_t btdev_get_le_scan_enable(struct btdev *btdev);
  61. void btdev_set_le_states(struct btdev *btdev, const uint8_t *le_states);
  62. void btdev_set_command_handler(struct btdev *btdev, btdev_command_func handler,
  63. void *user_data);
  64. void btdev_set_send_handler(struct btdev *btdev, btdev_send_func handler,
  65. void *user_data);
  66. void btdev_receive_h4(struct btdev *btdev, const void *data, uint16_t len);
  67. int btdev_add_hook(struct btdev *btdev, enum btdev_hook_type type,
  68. uint16_t opcode, btdev_hook_func handler,
  69. void *user_data);
  70. bool btdev_del_hook(struct btdev *btdev, enum btdev_hook_type type,
  71. uint16_t opcode);