mesh-io.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /* SPDX-License-Identifier: LGPL-2.1-or-later */
  2. /*
  3. *
  4. * BlueZ - Bluetooth protocol stack for Linux
  5. *
  6. * Copyright (C) 2018 Intel Corporation. All rights reserved.
  7. *
  8. *
  9. */
  10. struct mesh_io;
  11. #define MESH_IO_TX_COUNT_UNLIMITED 0
  12. enum mesh_io_type {
  13. MESH_IO_TYPE_NONE = 0,
  14. MESH_IO_TYPE_GENERIC,
  15. MESH_IO_TYPE_UNIT_TEST
  16. };
  17. enum mesh_io_timing_type {
  18. MESH_IO_TIMING_TYPE_GENERAL = 1,
  19. MESH_IO_TIMING_TYPE_POLL,
  20. MESH_IO_TIMING_TYPE_POLL_RSP
  21. };
  22. struct mesh_io_recv_info {
  23. const uint8_t *addr;
  24. uint32_t instant;
  25. uint8_t chan;
  26. int8_t rssi;
  27. };
  28. struct mesh_io_send_info {
  29. enum mesh_io_timing_type type;
  30. union {
  31. struct {
  32. uint16_t interval;
  33. uint8_t cnt;
  34. uint8_t min_delay;
  35. uint8_t max_delay;
  36. } gen;
  37. struct {
  38. uint16_t scan_duration;
  39. uint8_t scan_delay;
  40. uint8_t filter_ids[2];
  41. uint8_t min_delay;
  42. uint8_t max_delay;
  43. } poll;
  44. struct {
  45. uint32_t instant;
  46. uint8_t delay;
  47. } poll_rsp;
  48. } u;
  49. };
  50. struct mesh_io_caps {
  51. uint8_t max_num_filters;
  52. uint8_t window_accuracy;
  53. };
  54. typedef void (*mesh_io_recv_func_t)(void *user_data,
  55. struct mesh_io_recv_info *info,
  56. const uint8_t *data, uint16_t len);
  57. typedef void (*mesh_io_recv_ext_func_t)(void *user_data,
  58. struct mesh_io_recv_info *info,
  59. const uint8_t *data, uint16_t len,
  60. const uint8_t *addr);
  61. typedef void (*mesh_io_ready_func_t)(void *user_data, bool result);
  62. struct mesh_io *mesh_io_new(enum mesh_io_type type, void *opts,
  63. mesh_io_ready_func_t cb, void *user_data);
  64. void mesh_io_destroy(struct mesh_io *io);
  65. bool mesh_io_get_caps(struct mesh_io *io, struct mesh_io_caps *caps);
  66. bool mesh_io_register_recv_cb(struct mesh_io *io, const uint8_t *filter,
  67. uint8_t len, mesh_io_recv_func_t cb,
  68. void *user_data);
  69. bool mesh_io_deregister_recv_cb(struct mesh_io *io, const uint8_t *filter,
  70. uint8_t len);
  71. bool mesh_io_send(struct mesh_io *io, struct mesh_io_send_info *info,
  72. const uint8_t *data, uint16_t len);
  73. bool mesh_io_send_cancel(struct mesh_io *io, const uint8_t *pattern,
  74. uint8_t len);