my_ble_uarts.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. /****************************************Copyright (c)************************************************
  2. ** [艾克姆科技]
  3. ** IIKMSIK
  4. ** 官方店铺:https://acmemcu.taobao.com
  5. ** 官方论坛:http://www.e930bbs.com
  6. **--------------File Info-----------------------------------------------------------------------------
  7. ** File name:my_ble_uarts.h
  8. ** Last modified Date:
  9. ** Last Version:
  10. ** Descriptions :串口透传服务头文件
  11. **---------------------------------------------------------------------------------------------------*/
  12. #ifndef BLE_MY_UARTS_H__
  13. #define BLE_MY_UARTS_H__
  14. #include <stdint.h>
  15. #include <stdbool.h>
  16. #include "sdk_config.h"
  17. #include "ble.h"
  18. #include "ble_srv_common.h"
  19. #include "nrf_sdh_ble.h"
  20. #ifdef __cplusplus
  21. extern "C" {
  22. #endif
  23. //定义串口透传服务实例,该实例完成2件事情
  24. //1:定义了static类型串口透传服务结构体变量,为串口透传服务结构体分配了内存
  25. //2:注册了BLE事件监视者,这使得串口透传程序模块可以接收BLE协议栈的事件,从而可以在ble_uarts_on_ble_evt()事件回调函数中处理自己感兴趣的事件
  26. #define BLE_UARTS_DEF(_name) \
  27. static ble_uarts_t _name; \
  28. NRF_SDH_BLE_OBSERVER(_name ## _obs, \
  29. BLE_NUS_BLE_OBSERVER_PRIO, \
  30. ble_uarts_on_ble_evt, \
  31. &_name)
  32. //定义串口透传服务128位UUID基数
  33. #define UARTS_BASE_UUID {{0xFB, 0x34, 0x9B, 0x5F, 0x80, 0x00, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}
  34. //定义服务和特征的16位UUID
  35. #define BLE_UUID_UARTS_SERVICE 0x1101 //串口透传服务16位UUID
  36. #define BLE_UUID_UARTS_TX_CHARACTERISTIC 0x000B //TX特征16位UUID
  37. #define BLE_UUID_UARTS_RX_CHARACTERISTIC 0x000C //RX特征16位UUID
  38. //定义串口透传事件类型,这是用户自己定义的,供应用程序使用
  39. typedef enum
  40. {
  41. BLE_UARTS_EVT_RX_DATA, //接收到新的数据
  42. BLE_UARTS_EVT_TX_RDY, //准备就绪,可以发送新数据
  43. } ble_uarts_evt_type_t;
  44. /* Forward declaration of the ble_nus_t type. */
  45. typedef struct ble_uarts_s ble_uarts_t;
  46. //串口透传服务BLE_NUS_EVT_RX_DATA事件数据结构体,该结构体用于当BLE_NUS_EVT_RX_DATA产生时将接收的数据信息传递给处理函数
  47. typedef struct
  48. {
  49. uint8_t const * p_data; //指向存放接收数据的缓存
  50. uint16_t length; //接收的数据长度
  51. } ble_uarts_evt_rx_data_t;
  52. //串口透传服务事件结构体
  53. typedef struct
  54. {
  55. ble_uarts_evt_type_t type; //事件类型
  56. ble_uarts_t * p_uarts; //指向串口透传实例的指针
  57. uint16_t conn_handle; //连接句柄
  58. union
  59. {
  60. ble_uarts_evt_rx_data_t rx_data; //BLE_NUS_EVT_RX_DATA事件数据
  61. } params;
  62. } ble_uarts_evt_t;
  63. //定义操作码长度
  64. #define OPCODE_LENGTH 1
  65. //定义句柄长度
  66. #define HANDLE_LENGTH 2
  67. //定义最大传输数据长度(字节数)
  68. #if defined(NRF_SDH_BLE_GATT_MAX_MTU_SIZE) && (NRF_SDH_BLE_GATT_MAX_MTU_SIZE != 0)
  69. #define BLE_UARTS_MAX_DATA_LEN (NRF_SDH_BLE_GATT_MAX_MTU_SIZE - OPCODE_LENGTH - HANDLE_LENGTH)
  70. #else
  71. #define BLE_UARTS_MAX_DATA_LEN (BLE_GATT_MTU_SIZE_DEFAULT - OPCODE_LENGTH - HANDLE_LENGTH)
  72. #warning NRF_SDH_BLE_GATT_MAX_MTU_SIZE is not defined.
  73. #endif
  74. //定义函数指针类型ble_uarts_data_handler_t
  75. typedef void (* ble_uarts_data_handler_t) (ble_uarts_evt_t * p_evt);
  76. //串口服务初始化结构体
  77. typedef struct
  78. {
  79. ble_uarts_data_handler_t data_handler; //处理接收数据的事件句柄
  80. } ble_uarts_init_t;
  81. //串口透传服务结构体,包含所需要的信息
  82. struct ble_uarts_s
  83. {
  84. uint8_t uuid_type; //UUID类型
  85. uint16_t service_handle; //串口透传服务句柄(由协议栈提供)
  86. ble_gatts_char_handles_t tx_handles; //TX特征句柄
  87. ble_gatts_char_handles_t rx_handles; //RX特征句柄
  88. ble_uarts_data_handler_t data_handler; //处理接收数据的事件句柄
  89. };
  90. void ble_uarts_on_ble_evt(ble_evt_t const * p_ble_evt, void * p_context);
  91. uint32_t ble_uarts_init(ble_uarts_t * p_uarts, ble_uarts_init_t const * p_uarts_init);
  92. uint32_t ble_uarts_data_send(ble_uarts_t * p_uarts,
  93. uint8_t * p_data,
  94. uint16_t * p_length,
  95. uint16_t conn_handle);
  96. #ifdef __cplusplus
  97. }
  98. #endif
  99. #endif // BLE_MY_UARTS_H__