在广告期间增加名称的长度

13个员额/ 0个新员额
最后发表
Christopher.J.M ...
离线
最后看到:6年5个月前
加入:2015-01-29 19:44
在广告期间增加名称的长度

我正在修改DSPS示例代码,并遇到了改变设备广告的名称的问题。name常量列在. nvds_tag_device_name下,似乎有8字节的长度限制,但我需要10字节。我试着改变
#define avd_data_len 0x1f(在co_bt.h中)
和另外两个比特的东西,但这样会破坏代码

特别是31字节广告消息的内容是什么?
我只能看到
设备名称
device_name_length

另外,我认为BLE堆栈有限的数据包到20个字节,广告是否有一个不同的规则,或者它只是发送了两个数据包吗?

mhv_dialog
离线
最后看到:2周3天前
工作人员
加入:15 2013-12-06
你好,

你好,

除了6字节的蓝牙设备地址外,一个BLE广告包实际上可以携带31字节的有效载荷——总共37字节。

在DSP实现中,3个字节用于标记,18个字节用于唯一的服务ID(包括长度的一个字节和类型为一个字节)。这将留出10字节的名称(1字节),名称的数据类型(1byte)和名称本身。正如您所能将此限制为8Bytes /字符。

但不要惊慌;o)

您不必在广告数据中放入唯一的服务ID。你可以直接删除它。在app_sps_device_project.h变化

#定义APP_DFLT_ADV_DATA " \ x11 \ x07 \ xb7 \ x5c \ x49 \ xd2 \ x71 \ \ x04 \ xa3 \ x40 xa0 \ xb5 \ x35 \ x85 \ x3e \ xb0 \ x83 \ x07”
#定义APP_DFLT_ADV_DATA_LEN (18)

#define app_dflt_adv_data“\ x04 \ xffhi!”
#define app_dflt_adv_data_len(5)

这会将广告数据更改为特定于制造商的短语“Hi!”的数据集。你可以像这样扩展NVDS中的蓝牙设备名称:

.nvds_tag_device_name =“da1458x123”,//这是10个字符长
.nvds_tag_bd_address = {0xcc,0x00,0x00,0xca,0xea,0xcc},
。adv_data_tag_len = 27,
.SCAN_RESP_DATA_TAG_LEN = 10,
.device_name_tag_len = 10,

我希望有所帮助。

Christopher.J.M ...
离线
最后看到:6年5个月前
加入:2015-01-29 19:44
谢谢你MHv_dialog !那

谢谢你MHv_dialog !这肯定有助于澄清我的问题,我能够让它工作。我对APP_DFLT_ADV_DATA定义的第二个字节感到好奇。在此之前,标记为0x07,在代码中注释为“* x07 -完整的128位可用uuid列表”,您将其更改为0xFF,并将其描述为特定于制造商的数据集。你能再解释一下你为什么改变这个词以及它的含义吗?谢谢你的帮助,~Chris

mhv_dialog
离线
最后看到:2周3天前
工作人员
加入:15 2013-12-06
你好,

你好,

你可以在你的广告中放入不同的数据片段。有时候,告诉世界你的设备提供什么样的服务是有用的。这允许,比如说,智能手机扫描设备,并只列出提供特定服务的设备适用于智能手机应用程序-如心率服务。您可以在空间允许的范围内拥有尽可能多的数据段。每个部分的组织如下:

<段长度> <段>

段的长度包括类型和数据的一个字节。类型可以是0x02(标志),0x09(蓝牙设备名称)或0xFF(制造商特定数据)。你可以在BT SIG的网站上看到所有的数据类型:https://www.bluetooth.org/en-us/specification/assigned-numbers/generic-access-profile

因此,为了允许您为您的设备名称提供更多空间,我必须用不需要多个字节的东西替换“128bit ...”的完整列表。我们也可以将您的BD名称放在扫描响应数据包中。在这样做时,您必须按照如上所述的格式遵循格式,并且只有在活动模式下扫描的设备只能检测到BD名称。

redbear.
离线
最后看到:6年2周前
加入:2015-01-30 08:50
你好,

你好,
如何从智能手机app中修改。nvds_tag_device_name ?
当da14580从app接收数据时,例如:新的dev名称,如何替换旧的?
谢谢你!

MT_dialog
离线
最后看到:5个月2周前
工作人员
加入:2015-06-08 11:34
嗨redbear

嗨redbear

您可以使用以下CMDS到BLE低层(您可以在GAPM_TASK.H中找到所有命令列表)

GAPM_SET_DEV_NAME_CMD;

GAPM_GET_DEV_NAME_CMD;

gapm_get_dev_bdaddr_cmd;

命令的详细信息可以在以下链接中找到:

http://support.dialog-semicondiondiondum/resource/gap-Interface-pecification.

以下是一些代码,供您参考:

1.以下函数set_device_name HCI主机 ====================

/ * * /

空白set_device_name(空白)

struct gapm_set_dev_name_cmd * req = blemsgalloc(gapm_set_dev_name_cmd,task_gapm,task_app,9 + sizeof(struct gapm_set_dev_name_cmd));

申请- >操作= GAPM_SET_DEV_NAME;

req->长度= 10;

sprintf ((char *)请求- >名称,“DialogDemo”);

BlesendMsg((void *)REQ);

==============================.

BleSendMsg, BleMsgAlloc请检查文件ble_msg.c中的代码

==============================.

句柄GAPM_SET_DEV_NAME的代码如下:

========================================

案例GAPM_SET_DEV_NAME:

UINT8_T status =(uint8_t)gap_err_not_supported;

#如果(BLE_ATTS)

/*更新名称*/

status = attmdb_att_set_value(gapm_get_att_handle(gap_idx_devname),param->长度,

(UINT8_T *)&(param-> name [0]));

#endif /* bl_atts */

/ *使用状态代码发送命令完成事件* /

gapm_send_complete_evt(gapm_cfg_op,status);

由于MT_dialog

安东尼42.
离线
最后看到:5年9个月前
加入:2015-07-17 08:21
嗨,谢谢你的回复。

嗨,谢谢你的回复。

我在SDK中找到了BLE_MSG.C,而不是在DA14580_DIALOGBEACON_3.40.6中,
我是否需要将所有需要的文件复制到当前程序中?其他方式吗?
我在app_task.c中找到了这些代码:
案例GAPM_RESET:

//设置设备配置
struct gapm_set_dev_config_cmd * cmd = ke_msg_alloc(gapm_set_dev_config_cmd,
TASK_GAPM、TASK_APP gapm_set_dev_config_cmd);
app_configuration_func (dest_id cmd);
ke_msg_send(cmd);

//--------------------------------------------------------
我加了这些,似乎不起作用:
案例GAPM_SET_DEV_NAME:
attmdb_att_set_value (GAPM_GET_ATT_HANDLE (GAP_IDX_DEVNAME) 7
“da14580”);//我不知道如何在msg下面获取名称表格,所以......
打破;
在app_dia_xx_proj.c添加:
void app_set_dev_name(const uint8_t * name)

struct gapm_set_dev_name_cmd * cmd = ke_msg_alloc(gapm_set_dev_name_cmd,
task_gapm,task_app,gapm_set_dev_name_cmd);
cmd - >操作= GAPM_SET_DEV_NAME;
cmd->长度= 7;
Memcpy(&cmd->名称,名称,7);
ke_msg_send(cmd);

一个按钮回调函数将调用app_set_dev_name(name);
//-------------------------------------------------------
而且,即使在关闭电源之后,我需要保存新的配置数据(Dev Name,Adv Interval,UUID,用户定义CMD等)。
期待你的回复。
谢谢你!

MT_dialog
离线
最后看到:5个月2周前
工作人员
加入:2015-06-08 11:34
嗨antony42,

嗨antony42,

请尝试以下内容,

在你的项目中像这样放置一个函数:

空白set_device_name(空白)

struct gapm_set_dev_name_cmd *req = KE_MSG_ALLOC(gapm_set_dev_name_cmd,
TASK_GAPM,
TASK_APP,
gapm_set_dev_name_cmd.
);
申请- >操作= GAPM_SET_DEV_NAME;
req->长度= 6;
memcpy(req-> name,“对话框”,6);
ke_msg_send(要求的);

在app_task.c文件中捕获完成事件GAPM_SET_DEV_NAME:

案例GAPM_SET_DEV_NAME:

app_set_dev_name ();

打破;

使用void app_set_dev_name(void){return}

在实现中,我使用了一个计时器而不是在连接后一段时间触发的按钮。

由于MT_dialog

安东尼42.
离线
最后看到:5年9个月前
加入:2015-07-17 08:21
嗨MT_dialog,

嗨MT_dialog,
谢谢您的回复,
我试过了,成功了!谢谢你!

我需要配置智能手机的信标,
这些数据应存储在闪存中。
我在CFG_PRF_DEVICE_CONFIG中发现:
struct app_beacon_config_tag.

UINT8_T UUID [16];
uint16_t专业;
uint16_t小;
UINT16_T 亚博全网COMPANY_ID;
uint16_t adv_int;
uint8_t力量;
uint8_t垫;
};
我可以将一些物品添加到这个结构吗?
例如:DEV名称,LED控件和几个用户定义的参数。

谢谢安东尼

MT_dialog
离线
最后看到:5个月2周前
工作人员
加入:2015-06-08 11:34
嗨Antony42,

嗨Antony42,

是的,您可以在struct中添加其他字段,以便将它们存储在Flash中,还应在App_Dialog_Beacon_Proj.c文件中添加Beacon_Params数组中的结构的特定字段。

由于MT_dialog

Joacimwe.
离线
最后看到:一年九个月前
格鲁鲁
加入:2014-01-14 06:45
注意你应该

注意,当你分配gapm_set_dev_name_cmd时,你可能应该使用KE_MSG_ALLOC_DYN而不是KE_MSG_ALLOC,以避免损坏内存,像这样(对于长度为6的名称):

ke_msg_alloc_dyn(gapm_set_dev_name_cmd,task_gapm,task_app,gapm_set_dev_name_cmd,6);

安东尼42.
离线
最后看到:5年9个月前
加入:2015-07-17 08:21
嗨Joacimwe,

嗨Joacimwe,
谢谢您的回复,
你是对的!
今天我测试set_dev_name func,有时系统被诅咒,
然后我记得你的回答,使用KE_MSG_ALLOC_DYN工作很好。
为什么 ?
在引用代码中KE_MSG_ALLOC被大量使用。

Joacimwe.
离线
最后看到:一年九个月前
格鲁鲁
加入:2014-01-14 06:45
在API文档中,您可以

在API文档中,您可以看到一些消息结构以动态大小的阵列结束,例如GapM_Set_Dev_name_cmd,GapM_White_List_mgt_cmd等,因为SizeOf(这样的结构)假定阵列中的0个元素,它们占用必须添加以及为消息分配的大小。