seos_att.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #pragma once
  2. #include <furi.h>
  3. #include <lib/toolbox/bit_buffer.h>
  4. #include "seos_l2cap.h"
  5. #include "seos_common.h"
  6. #define ATT_ERROR_RSP 0x01
  7. #define ATT_EXCHANGE_MTU_REQ 0x02
  8. #define ATT_EXCHANGE_MTU_RSP 0x03
  9. #define ATT_FIND_INFORMATION_REQ 0x04
  10. #define ATT_FIND_INFORMATION_RSP 0x05
  11. #define ATT_FIND_BY_TYPE_VALUE_REQ 0x06
  12. #define ATT_FIND_BY_TYPE_VALUE_RSP 0x07
  13. #define ATT_READ_BY_TYPE_REQ 0x08
  14. #define ATT_READ_BY_TYPE_RSP 0x09
  15. #define ATT_READ_REQ 0x0a
  16. #define ATT_READ_RSP 0x0b
  17. #define ATT_READ_BLOB_REQ 0x0c
  18. #define ATT_READ_BLOB_RSP 0x0d
  19. #define ATT_READ_MULTIPLE_REQ 0x0e
  20. #define ATT_READ_MULTIPLE_RSP 0x0f
  21. #define ATT_READ_BY_GROUP_TYPE_REQ 0x10
  22. #define ATT_READ_BY_GROUP_TYPE_RSP 0x11
  23. #define ATT_WRITE_REQ 0x12
  24. #define ATT_WRITE_RSP 0x13
  25. #define ATT_HANDLE_VALUE_NTF 0x1b
  26. #define ATT_HANDLE_VALUE_IND 0x1d
  27. #define ATT_HANDLE_VALUE_CFM 0x1e
  28. #define ATT_READ_MULTIPLE_VARIABLE_REQ 0x20
  29. #define ATT_READ_MULTIPLE_VARIABLE_RSP 0x21
  30. #define ATT_WRITE_CMD 0x52
  31. #define ATT_ERROR_CODE_ATTRIBUTE_NOT_FOUND 0x0a
  32. #define ATT_ERROR_CODE_INVALID_HANDLE 0x01
  33. #define ATT_ERROR_CODE_REQUEST_NOT_SUPPORTED 0x06
  34. #define PRIMARY_SERVICE 0x2800
  35. #define CHARACTERISTIC 0x2803
  36. #define CCCD 0x2902
  37. #define DEVICE_NAME 0x2a00
  38. // service_changed = 2a05
  39. #define DISABLE_NOTIFICATION_VALUE 0x0000
  40. #define ENABLE_NOTIFICATION_VALUE 0x0001
  41. #define ENABLE_INDICATION_VALUE 0x0002
  42. typedef void (*SeosAttOnSubscribeCallback)(void* context, uint16_t handle);
  43. typedef void (*SeosAttWriteRequestCallback)(void* context, BitBuffer* attribute_value);
  44. typedef void (*SeosAttNotifyCallback)(void* context, const uint8_t* buffer, size_t buffer_len);
  45. typedef struct {
  46. Seos* seos;
  47. SeosL2Cap* seos_l2cap;
  48. BitBuffer* tx_buf;
  49. uint16_t tx_mtu;
  50. uint16_t rx_mtu;
  51. SeosAttOnSubscribeCallback on_subscribe;
  52. void* on_subscribe_context;
  53. SeosAttWriteRequestCallback write_request;
  54. void* write_request_context;
  55. SeosAttNotifyCallback notify;
  56. void* notify_context;
  57. BleMode ble_mode;
  58. FlowMode flow_mode;
  59. uint16_t service_start_handle;
  60. uint16_t service_end_handle;
  61. uint16_t characteristic_handle;
  62. uint16_t value_handle;
  63. uint16_t cccd_handle;
  64. } SeosAtt;
  65. SeosAtt* seos_att_alloc(Seos* seos);
  66. void seos_att_free(SeosAtt* seos_att);
  67. void seos_att_start(SeosAtt* seos_att, BleMode mode, FlowMode flow_mode);
  68. void seos_att_stop(SeosAtt* seos_att);
  69. void seos_att_notify(SeosAtt* seos_att, uint16_t handle, BitBuffer* content);
  70. void seos_att_write_request(SeosAtt* seos_att, BitBuffer* content);
  71. void seos_att_process_payload(void* context, BitBuffer* message);
  72. void seos_att_central_connection_start(void* context);
  73. void seos_att_set_on_subscribe_callback(
  74. SeosAtt* seos_att,
  75. SeosAttOnSubscribeCallback callback,
  76. void* context);
  77. void seos_att_set_write_request_callback(
  78. SeosAtt* seos_att,
  79. SeosAttWriteRequestCallback callback,
  80. void* context);
  81. void seos_att_set_notify_callback(SeosAtt* seos_att, SeosAttNotifyCallback callback, void* context);