[讨论] sensortile蓝牙这段程序

常见泽1   2017-6-3 15:15 楼主
QQ图片20170603150900.png

QQ图片20170603150952.png

QQ图片20170603151007.png

上面这一段应该就是广播发现设备的程序么
可惜我找不到广播数据格式的代码?
QQ图片20170603151157.png

比如我想按照 厂商自定义数据: TYPE = 0xFF,厂商自定义的数据中,前两个字节表示厂商 ID,剩下的是厂商自己按照需求添加,里面的数据内容自己定义。
怎么修改?
对蓝牙协议刚刚看了点,不是很懂有点语无伦次

回复评论 (8)

你除了广播数据外还需要建立连接吗?
虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2017-6-3 15:45
我表示也不太懂。。
瞬间KO 电棒 电击棍
点赞  2017-6-3 16:14
引用: littleshrimp 发表于 2017-6-3 15:45
你除了广播数据外还需要建立连接吗?

要的  是想 改ADTYPE 建立连接 虾哥
点赞  2017-6-3 16:20
引用: 常见泽1 发表于 2017-6-3 16:20
要的  是想 改ADTYPE 建立连接 虾哥



这是eddystone_beacon.c里的一段代码你可以参考下
discoverable和service_data可按照你的需要做些调整


  1. /**
  2.   * [url=home.php?mod=space&uid=159083]@brief[/url]  This function initializes the Eddystone UID Bluetooth services
  3.   * @param  EddystoneUID_Init pointer to initialization structure
  4.   * @retval None
  5.   */
  6. tBleStatus EddystoneUID_Init(EddystoneUID_InitTypeDef *EddystoneUID_Init)
  7. {
  8.   tBleStatus ret = BLE_STATUS_SUCCESS;

  9.   /* Disable scan response. */
  10.   hci_le_set_scan_resp_data(0, NULL);

  11.   uint16_t AdvertisingInterval = (EddystoneUID_Init->AdvertisingInterval * ADVERTISING_INTERVAL_INCREMENT / 10);

  12.   /* Put the device in a non-connectable mode. */
  13.   ret = aci_gap_set_discoverable(ADV_NONCONN_IND,                          /*< Advertise as non-connectable, undirected. */
  14.                                  AdvertisingInterval, AdvertisingInterval, /*< Set the advertising interval as 700 ms (0.625 us increment). */
  15.                                  PUBLIC_ADDR, NO_WHITE_LIST_USE,           /*< Use the public address, with no white list. */
  16.                                  0, NULL,                                  /*< Do not use a local name. */
  17.                                  0, NULL,                                  /*< Do not include the service UUID list. */
  18.                                  0, 0);                                    /*< Do not set a slave connection interval. */

  19.   if (ret != BLE_STATUS_SUCCESS)
  20.   {
  21.     return ret;
  22.   }

  23.   /* Remove the TX power level advertisement (this is done to decrease the packet size). */
  24.   ret = aci_gap_delete_ad_type(AD_TYPE_TX_POWER_LEVEL);

  25.   if (ret != BLE_STATUS_SUCCESS)
  26.   {
  27.     return ret;
  28.   }

  29.   uint8_t service_data[] =
  30.   {
  31.     23,                                                                      /*< Length. */
  32.     AD_TYPE_SERVICE_DATA,                                                    /*< Service Data data type value. */
  33.     0xAA, 0xFE,                                                              /*< 16-bit Eddystone UUID. */
  34.     0x00,                                                                    /*< UID frame type. */
  35.     EddystoneUID_Init->CalibratedTxPower,                                    /*< Ranging data. */
  36.     EddystoneUID_Init->NamespaceID[0],                                       /*< 10-byte ID Namespace. */
  37.     EddystoneUID_Init->NamespaceID[1],
  38.     EddystoneUID_Init->NamespaceID[2],
  39.     EddystoneUID_Init->NamespaceID[3],
  40.     EddystoneUID_Init->NamespaceID[4],
  41.     EddystoneUID_Init->NamespaceID[5],
  42.     EddystoneUID_Init->NamespaceID[6],
  43.     EddystoneUID_Init->NamespaceID[7],
  44.     EddystoneUID_Init->NamespaceID[8],
  45.     EddystoneUID_Init->NamespaceID[9],
  46.     EddystoneUID_Init->BeaconID[0],                                         /*< 6-byte ID Instance. */
  47.     EddystoneUID_Init->BeaconID[1],
  48.     EddystoneUID_Init->BeaconID[2],
  49.     EddystoneUID_Init->BeaconID[3],
  50.     EddystoneUID_Init->BeaconID[4],
  51.     EddystoneUID_Init->BeaconID[5],
  52.     0x00,                                                                   /*< Reserved. */
  53.     0x00                                                                    /*< Reserved. */
  54.   };

  55.   uint8_t service_uuid_list[] =
  56.   {
  57.     3,                                                                      /*< Length. */
  58.     AD_TYPE_16_BIT_SERV_UUID_CMPLT_LIST,                                    /*< Complete list of 16-bit Service UUIDs data type value. */
  59.     0xAA, 0xFE                                                              /*< 16-bit Eddystone UUID. */
  60.   };

  61.   uint8_t flags[] =
  62.   {
  63.     2,                                                                      /*< Length. */
  64.     AD_TYPE_FLAGS,                                                          /*< Flags data type value. */
  65.     (FLAG_BIT_LE_GENERAL_DISCOVERABLE_MODE | FLAG_BIT_BR_EDR_NOT_SUPPORTED) /*< BLE general discoverable, without BR/EDR support. */
  66.   };

  67.   /* Update the service data. */
  68.   ret = aci_gap_update_adv_data(sizeof(service_data), service_data);

  69.   if (ret != BLE_STATUS_SUCCESS)
  70.   {
  71.     return ret;
  72.   }

  73.   /* Update the service UUID list. */
  74.   ret = aci_gap_update_adv_data(sizeof(service_uuid_list), service_uuid_list);

  75.   if (ret != BLE_STATUS_SUCCESS)
  76.   {
  77.     return ret;
  78.   }

  79.   /* Update the adverstising flags. */
  80.   ret = aci_gap_update_adv_data(sizeof(flags), flags);

  81.   if (ret != BLE_STATUS_SUCCESS)
  82.   {
  83.     return ret;
  84.   }

  85.   return ret;
  86. }


相关宏定义在link_layer.h里

  1. /******************** (C) COPYRIGHT 2012 STMicroelectronics ********************
  2. * File Name          : link_layer.h
  3. * Author             : AMS - HEA&RF BU
  4. * Version            : V1.0.0
  5. * Date               : 19-July-2012
  6. * Description        : Header file for BlueNRG's link layer. It contains
  7. *                      definition of functions for link layer, most of which are
  8. *                      mapped to HCI commands.
  9. ********************************************************************************
  10. * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  11. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
  12. * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
  13. * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
  14. * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
  15. * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  16. *******************************************************************************/

  17. #ifndef _LINK_LAYER_H
  18. #define _LINK_LAYER_H

  19. #include <ble_status.h>

  20. /** @addtogroup Middlewares
  21. *  @{
  22. */

  23. /** @defgroup ST
  24. *  @{
  25. */

  26. /** @defgroup SimpleBlueNRG_HCI
  27. *  @{
  28. */

  29. /**
  30. *@addtogroup GAP GAP
  31. *@brief API for GAP layer.
  32. *@{
  33. */

  34. /**
  35. *[url=home.php?mod=space&uid=32621]@name[/url] Advertising filter
  36. *Advertising policy for filtering (white list related)
  37. *@{
  38. */
  39. #define NO_WHITE_LIST_USE           (0x00)  /**< Process scan and connection requests from all devices (i.e., the White List is not in use) */
  40. #define WHITE_LIST_FOR_ONLY_SCAN    (0x01)  /**< Process connection requests from all devices and only scan requests from devices that are in the White List */
  41. #define WHITE_LIST_FOR_ONLY_CONN    (0x02)  /**< Process scan requests from all devices and only connection requests from devices that are in the White List */
  42. #define WHITE_LIST_FOR_ALL          (0x03)  /**< Process scan and connection requests only from devices in the White List. */
  43. /**
  44. * @}
  45. */


  46. /**
  47. * Bluetooth 48 bit address (in little-endian order).
  48. */
  49. typedef        uint8_t        tBDAddr[6];


  50. /**
  51. *@name Bluetooth address types
  52. * Bluetooth address types
  53. *@{
  54. */
  55. #define PUBLIC_ADDR                 (0)
  56. #define RANDOM_ADDR                 (1)
  57. #define STATIC_RANDOM_ADDR          (1)
  58. #define RESOLVABLE_PRIVATE_ADDR     (2)
  59. #define NON_RESOLVABLE_PRIVATE_ADDR (3)
  60. /**
  61. * @}
  62. */
  63.    
  64. /**
  65. *@name Directed advertising types
  66. * Type of advertising during directed advertising
  67. *@{
  68. */
  69. #define HIGH_DUTY_CYCLE_DIRECTED_ADV   (1)
  70. #define LOW_DUTY_CYCLE_DIRECTED_ADV    (4)
  71. /**
  72. * @}
  73. */

  74. /**
  75. * @name Advertising type
  76. * @{
  77. */

  78. /**
  79. * undirected scannable and connectable
  80. */
  81. #define ADV_IND         (0x00)

  82. /**
  83. * directed non scannable
  84. */
  85. #define ADV_DIRECT_IND  (0x01)

  86. /**
  87. * scannable non connectable
  88. */
  89. #define ADV_SCAN_IND    (0x02)

  90. /**
  91. * non-connectable and no scan response
  92. */
  93. #define ADV_NONCONN_IND (0x03)

  94. /**
  95. * scan response
  96. */
  97. #define SCAN_RSP        (0x04)

  98. /**
  99. * @}
  100. */

  101. /* 0X05-0XFF RESERVED */

  102. /**
  103. * @name Advertising ranges
  104. * @{
  105. */

  106. /**
  107. * lowest allowed interval value for connectable types(20ms)..multiple of 625us
  108. */
  109. #define ADV_INTERVAL_LOWEST_CONN    (0X0020)

  110. /**
  111. * highest allowed interval value (10.24s)..multiple of 625us.
  112. */
  113. #define ADV_INTERVAL_HIGHEST        (0X4000)

  114. /**
  115. * lowest allowed interval value for non connectable types
  116. * (100ms)..multiple of 625us.
  117. */
  118. #define ADV_INTERVAL_LOWEST_NONCONN (0X00a0)

  119. /**
  120. * @}
  121. */

  122. /**
  123. * @name Advertising channels
  124. * @{
  125. */
  126. #define ADV_CH_37 0x01
  127. #define ADV_CH_38 0x02
  128. #define ADV_CH_39 0x04
  129. /**
  130. * @}
  131. */

  132. /**
  133. * @name Scan_types Scan types
  134. * @{
  135. */
  136. #define PASSIVE_SCAN    0
  137. #define ACTIVE_SCAN     1
  138. /**
  139. * @}
  140. */

  141. /**
  142. * @}
  143. */

  144. /**
  145. * @}
  146. */

  147. /**
  148. * @}
  149. */

  150. /**
  151. * @}
  152. */

  153. #endif /* _LINK_LAYER_H */

虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2017-6-3 16:35
引用: littleshrimp 发表于 2017-6-3 16:35 这是eddystone_beacon.c里的一段代码你可以参考下 discoverable和service_data可按照你的需要做些调 ...
aci_gap_set_discoverable X8UqpZKD8Zt+QAAAABJRU5ErkJggg== 按照这个格式 感觉这段代码好像不对嘛 广播类型是对的 ADV_IND 再往后好像不对 zNYycUjvRnFzQq7AgAAAAAgF1C9AdEwnSgEwUIugAAAABJRU5ErkJggg== 本帖最后由 常见泽1 于 2017-6-3 16:43 编辑
点赞  2017-6-3 16:41
引用: littleshrimp 发表于 2017-6-3 16:35 这是eddystone_beacon.c里的一段代码你可以参考下 discoverable和service_data可按照你的需要做些调 ...
多谢虾哥 已经解决 广播数据包 不是那个函数里面的 哈哈 不过还有个问题请教下虾哥 就是广播查找设备的时
  1. ///OGF:OGF域,用来表示HCI命令的种类。HCI总共有7中类型的命令
  2. rq.ogf = OGF_VENDOR_CMD;
  3. ///ocf:OCF对应每组命令组相应的命令。
  4. ///这里因为是厂家指定调试命令 spec里面没法查询到OCF
  5. rq.ocf = OCF_GAP_SET_DISCOVERABLE;
  6. rq.cparam = (void *)buffer;
  7. rq.clen = indx;
  8. rq.rparam = &status;
  9. rq.rlen = 1;
候 用到OGF ,HCI层将Link Layer层提供的功能封装成Command和Event。 命令格式为什么选择OGF_VENDOR_CMD 本帖最后由 常见泽1 于 2017-6-3 17:19 编辑
点赞  2017-6-3 17:15
引用: 常见泽1 发表于 2017-6-3 16:41
aci_gap_set_discoverable



按照这个格式 感觉这段代码好像不对嘛 广播类型是对的 ADV_IND 再往后 ...

再进入aci_gap_set_discoverable调用过的函数看看呢?
虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2017-6-3 17:21
引用: 常见泽1 发表于 2017-6-3 17:15
多谢虾哥 已经解决  广播数据包 不是那个函数里面的  哈哈
不过还有个问题请教下虾哥
就是广播查找设 ...

没深入研究过蓝牙协议
这个问题已经超出我的能力范围了

百度了一些有种说法是"0x3FOGF被保留来用于vendor-specific(厂家特定)调 试命令”
OGF Range (6 bits): 0x00-0x3F (0x3F reserved for vendor-specific debug commands) ”
QQ图片20170603172651.png

QQ图片20170603172744.png

虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2017-6-3 17:29
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复