gap.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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 enum {
  28. GapStateUninitialized,
  29. GapStateIdle,
  30. GapStateStartingAdv,
  31. GapStateAdvFast,
  32. GapStateAdvLowPower,
  33. GapStateConnected,
  34. } GapState;
  35. typedef enum {
  36. GapPairingNone,
  37. GapPairingPinCodeShow,
  38. GapPairingPinCodeVerifyYesNo,
  39. } GapPairing;
  40. typedef struct {
  41. uint16_t conn_interval;
  42. uint16_t slave_latency;
  43. uint16_t supervisor_timeout;
  44. } GapConnectionParams;
  45. typedef struct {
  46. uint16_t conn_int_min;
  47. uint16_t conn_int_max;
  48. uint16_t slave_latency;
  49. uint16_t supervisor_timeout;
  50. } GapConnectionParamsRequest;
  51. typedef struct {
  52. uint16_t adv_service_uuid;
  53. uint16_t appearance_char;
  54. bool bonding_mode;
  55. GapPairing pairing_method;
  56. uint8_t mac_address[GAP_MAC_ADDR_SIZE];
  57. char adv_name[FURI_HAL_VERSION_DEVICE_NAME_LENGTH];
  58. GapConnectionParamsRequest conn_param;
  59. } GapConfig;
  60. bool gap_init(GapConfig* config, GapEventCallback on_event_cb, void* context);
  61. void gap_start_advertising();
  62. void gap_stop_advertising();
  63. GapState gap_get_state();
  64. void gap_thread_stop();
  65. #ifdef __cplusplus
  66. }
  67. #endif