bsal_srv_dis.c 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /*
  2. * Copyright (c) 2006-2021, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2021-09-27 WaterFishJ the first version
  9. */
  10. #include <string.h>
  11. #include <stdint.h>
  12. #include <stdio.h>
  13. #include "bsal.h"
  14. #include "bsal_osif.h"
  15. #include "bsal_srv_dis.h"
  16. unsigned char MANUFACTURER_NAME_STRING[] = "RT-THREAD";
  17. unsigned char PnP_ID[] = {0x02, 0x19, 0x15, 0xee, 0xee, 0x00, 0x01};
  18. static P_SRV_GENERAL_CB pfn_bas_cb = NULL;
  19. static void dis_profile_callback(void *p)
  20. {
  21. bsal_callbak_data_t *p_param = (bsal_callbak_data_t *)p;
  22. bool is_app_cb = false;
  23. if (p_param->msg_type == BSAL_CALLBACK_TYPE_READ_CHAR_VALUE)
  24. {
  25. if (GATT_SVC_DIS_CHAR_MNS_INDEX == p_param->off_handle)
  26. {
  27. bsal_srv_write_data(p_param->stack_ptr, p_param->start_handle, p_param->off_handle, sizeof(MANUFACTURER_NAME_STRING), MANUFACTURER_NAME_STRING);
  28. }
  29. else if (GATT_SVC_DIS_CHAR_PNPID_INDEX == p_param->off_handle)
  30. {
  31. bsal_srv_write_data(p_param->stack_ptr, p_param->start_handle, p_param->off_handle, sizeof(PnP_ID), PnP_ID);
  32. }
  33. is_app_cb = true;
  34. }
  35. if (is_app_cb && (pfn_bas_cb != NULL))
  36. {
  37. pfn_bas_cb(p_param);
  38. }
  39. }
  40. void bsal_le_dis_svr_init(void *stack_ptr, void *app_callback)
  41. {
  42. struct bsal_gatt_app_srv_def ble_svc_dis_defs[] =
  43. {
  44. {
  45. /*** Device Information Service. */
  46. .type = BSAL_GATT_UUID_PRIMARY_SERVICE,
  47. .uuid = BSAL_UUID16_DECLARE(GATT_UUID_DEVICE_INFORMATION),
  48. .characteristics = (bsal_gatt_chr_def_t[])
  49. {
  50. {
  51. /*** Manufacturer Name String characteristic */
  52. .uuid = BSAL_UUID16_DECLARE(GATT_UUID_CHAR_MANUFACTURER_NAME_STRING),
  53. .properties = BSAL_ATT_P_READ,
  54. .permission = BSAL_GATT_PERM_READ_NONE,
  55. .value_length = 10,
  56. },
  57. {
  58. /*** PnP ID characteristic */
  59. .uuid = BSAL_UUID16_DECLARE(GATT_UUID_CHAR_PNP_ID),
  60. .properties = BSAL_ATT_P_READ,
  61. .permission = BSAL_GATT_PERM_READ_NONE,
  62. .value_length = 7,
  63. },
  64. {
  65. 0, /* No more characteristics in this service. */
  66. }
  67. },
  68. },
  69. {
  70. 0, /* No more services. */
  71. },
  72. };
  73. bsal_stack_le_srv_reg_func(stack_ptr, &ble_svc_dis_defs, (P_SRV_GENERAL_CB *)dis_profile_callback);
  74. pfn_bas_cb = (P_SRV_GENERAL_CB)app_callback;
  75. }