gap.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #pragma once
  2. #include <stdint.h>
  3. #include <stdbool.h>
  4. #include <furi_hal_version.h>
  5. #define GAP_MAC_ADDR_SIZE (6)
  6. #ifdef __cplusplus
  7. extern "C" {
  8. #endif
  9. typedef enum {
  10. GapEventTypeConnected,
  11. GapEventTypeDisconnected,
  12. GapEventTypeStartAdvertising,
  13. GapEventTypeStopAdvertising,
  14. GapEventTypePinCodeShow,
  15. GapEventTypePinCodeVerify,
  16. GapEventTypeUpdateMTU,
  17. } GapEventType;
  18. typedef union {
  19. uint32_t pin_code;
  20. uint16_t max_packet_size;
  21. } GapEventData;
  22. typedef struct {
  23. GapEventType type;
  24. GapEventData data;
  25. } GapEvent;
  26. typedef bool (*GapEventCallback)(GapEvent event, void* context);
  27. typedef struct {
  28. uint8_t type;
  29. uint8_t mac[6];
  30. } GapAddress;
  31. typedef void (*GapScanCallback)(GapAddress address, void* context);
  32. typedef enum {
  33. GapStateUninitialized,
  34. GapStateIdle,
  35. GapStateStartingAdv,
  36. GapStateAdvFast,
  37. GapStateAdvLowPower,
  38. GapStateConnected,
  39. } GapState;
  40. typedef enum {
  41. GapPairingNone,
  42. GapPairingPinCodeShow,
  43. GapPairingPinCodeVerifyYesNo,
  44. } GapPairing;
  45. typedef struct {
  46. uint16_t conn_interval;
  47. uint16_t slave_latency;
  48. uint16_t supervisor_timeout;
  49. } GapConnectionParams;
  50. typedef struct {
  51. uint16_t conn_int_min;
  52. uint16_t conn_int_max;
  53. uint16_t slave_latency;
  54. uint16_t supervisor_timeout;
  55. } GapConnectionParamsRequest;
  56. typedef struct {
  57. uint16_t adv_service_uuid;
  58. uint16_t appearance_char;
  59. bool bonding_mode;
  60. GapPairing pairing_method;
  61. uint8_t mac_address[GAP_MAC_ADDR_SIZE];
  62. char adv_name[FURI_HAL_VERSION_DEVICE_NAME_LENGTH];
  63. GapConnectionParamsRequest conn_param;
  64. } GapConfig;
  65. bool gap_init(GapConfig* config, GapEventCallback on_event_cb, void* context);
  66. void gap_start_advertising();
  67. void gap_stop_advertising();
  68. GapState gap_get_state();
  69. void gap_thread_stop();
  70. void gap_start_scan(GapScanCallback callback, void* context);
  71. void gap_stop_scan();
  72. #ifdef __cplusplus
  73. }
  74. #endif