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

13个帖子/ 0新
最后一篇
christopher.j.m……
离线
最后一次露面:6年5个月前
加入:2015-01-29 44
在广告期间增加名称的长度

我正在修改DSP示例代码,并使用更改设备通告的名称运行到问题中。名称常量在.nvds_tag_device_name下列出,似乎有8个字节的长度限制,但我需要10.我尝试改变
#define ADV_DATA_LEN 0x1F (in co_bt.h)
对于有2个比特的东西,但这会破坏代码

具体来说,31字节的广告消息的内容是什么?
我只能看到
设备名称
device_name_length.

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

MHv_Dialog
离线
最后一次露面:2周3天前
职员
加入:2013-12-06 15:10
你好,

你好,

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

在DSPS实现中,3字节用于标志,18字节用于唯一的服务ID(包括一个字节用于长度和一个字节用于类型)。这将为名称的长度(1字节)、名称的数据类型(1字节)和名称本身留下10个字节。如您所见,这将名称限制为8字节/字符。

但不要恐慌; o)

您不必在广告数据中放置唯一的服务ID。你可以继续删除它。在app_sps_device_project.h中更改

#define app_dflt_adv_data“\ x11 \ x07 \ xb7 \ x5c \ x49 \ xd2 \ x04 \ xa3 \ x40 \ x71 \ x85 \ x3e \ x35 \ x85 \ x3e \ xb0 \ x83 \ x30 \ x83 \ x30”
#define app_dflt_adv_data_len(18)

#定义APP_DFLT_ADV_DATA“\ x04 \ xFFHi !”
#定义APP_DFLT_ADV_DATA_LEN (5)

这将广告数据更改为短语“hi!”的制造商特定数据集。您可以将蓝牙设备名称延长为NVDS:

.NVDS_TAG_DEVICE_NAME = "DA1458x123", //长度为10个字符
.NVDS_TAG_BD_ADDRESS = {0xCC, 0x00, 0x00, 0xCA, 0xa, 0xCC},
.ADV_DATA_TAG_LEN = 27,
.can_resp_data_tag_len = 10,
.DEVICE_NAME_TAG_LEN = 10,

我希望这对你有所帮助。

christopher.j.m……
离线
最后一次露面:6年5个月前
加入:2015-01-29 44
谢谢mhv_dialog!那

谢谢mhv_dialog!这绝对有助于澄清我的问题,我能够做到这一点。我对App_dflt_addata定义的第二个字节感到好奇。在此标记为0x07之前,在代码中评论为“* x07 - 可用的128位uuids的完整列表”,并且您将其更改为0xff并将其描述为制造特定数据集。你能再解释一下你改变它的原因以及它的意思吗?谢谢你的帮助,〜克里斯

MHv_Dialog
离线
最后一次露面:2周3天前
职员
加入:2013-12-06 15:10
你好,

你好,

您可以在广告中放置不同的数据细分。有时候,告诉世界您的设备提供的服务是有用的。这允许说,智能手机扫描设备,只能列出提供适用于智能手机应用程序的特定服务的设备 - 就像心率服务一样。您可以具有尽可能多的数据段作为空间允许。每个段都组织如下:

< segment>的长度< segment>的类型

段的长度包括类型和数据的一个字节。对于标志,0x09,对于蓝牙设备名称或制造商特定数据的0x09,该类型可以为0x02。您可以在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
你好,

你好,
如何从智能手机应用程序更改.nvds_tag_device_name?
当DA14580从APP接收数据时,例如:新的Dev Name,如何替换旧的?
谢谢!

mt_dialog.
离线
最后一次露面:5个月2个星期前
职员
加入:2015-06-08 34
嗨红熊

嗨红熊

您可以使用下面的cmd来BLE底层,(您可以在gapm_task.h中找到所有命令列表)

gapm_set_dev_name_cmd;

gapm_get_dev_name_cmd;

GAPM_GET_DEV_BDADDR_CMD;

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

http://support.dialog-semiconductor.com/resource/gap-interface-specification

以下是您参考的一些代码:

1.按HCI主机函数set_device_name ====================

/* 内部的 */

void set_device_name(void)

{

struct gapm_set_dev_name_cmd *req = blmsgalloc (gapm_set_dev_name_cmd, TASK_GAPM, TASK_APP,9 + sizeof(struct gapm_set_dev_name_cmd));

req->操作= gapm_set_dev_name;

申请- >长度= 10;

Sprintf((char *)req->名称,“DialogDemo”);

BleSendMsg ((void *)要求);

}

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

对于BlesendMsg,Blemsgalloc请检查文件BLE_MSG.c中的代码

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

我们的句柄代码GAPM_SET_DEV_NAME如下:

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

CASE GAPM_SET_DEV_NAME:

{

uint8_t status = (uint8_t) GAP_ERR_NOT_SUPPORTED;

#if(ble_atts)

/ *更新名称* /

status = attmdb_att_set_value(GAPM_GET_ATT_HANDLE(GAP_IDX_DEVNAME)), param->length,

(uint8_t *) & (param - >名称[0]));

#endif / * ble_atts * /

/*发送带有状态码的命令完成事件

gapm_send_complete_evt (GAPM_CFG_OP、状态);

}

谢谢mt_dialog.

anthony42
离线
最后一次露面:5年9个月前
加入:2015-07-17 08:21
你好,谢谢你的回复。

你好,谢谢你的回复。

我发现ble_msg.c在sdk,不是在DA14580_DialogBeacon_3.40.6,
是否需要将所有所需文件复制到当前的Proj?任何其他方式?
我从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);
}
//--------------------------------------------------------
我添加了这些,似乎不工作:
CASE GAPM_SET_DEV_NAME:
attmdb_att_set_value(gapm_get_att_handle(gap_idx_devname),7,
“da14580”);//我不知道如何获取msg下面的name form,所以…
休息;
在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 34
嗨Antony42,

嗨Antony42,

请尝试以下方法,

只需将功能放在您的项目中:

void set_device_name(void)
{
struct gapm_set_dev_name_cmd * req = ke_msg_alloc(gapm_set_dev_name_cmd,
task_gapm,
task_app,
gapm_set_dev_name_cmd
);
req->操作= gapm_set_dev_name;
申请- >长度= 6;
memcpy(请求- >名称,“对话框”,6);
KE_MSG_SEND(REQ);
}

在文件app_task.c catch the proofition事件gapm_set_dev_name:

CASE GAPM_SET_DEV_NAME:
{
app_set_dev_name();
}
休息;

使用函数void app_set_dev_name(void){return}

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

谢谢mt_dialog.

anthony42
离线
最后一次露面: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 pad;
};
我可以在这个结构中添加一些项目吗?
例如:dev名称,led控制和几个用户定义的参数。

由于安东尼

mt_dialog.
离线
最后一次露面:5个月2个星期前
职员
加入:2015-06-08 34
嗨Antony42,

嗨Antony42,

是的,你可以在结构体中添加额外的字段,以便将它们存储在flash中,你还应该在app_dialog_beacon_project .c文件的beacon_params数组中添加结构体的特定字段。

谢谢mt_dialog.

Joacimwe
离线
最后一次露面:1年9个月前
大师
加入:2014-01-14 06:45
请注意,您应该

请注意,当分配GAPM_SET_DEV_NAME_CMD以避免损坏内存时,可能会使用KE_MSG_ALLOC_DYN而不是KE_MSG_ALLOC_DYN而不是如此(用于长度为6的名称):

KE_MSG_ALLOC_DYN(GAPM_SET_DEV_NAME_CMD, TASK_GAPM, TASK_APP, GAPM_SET_DEV_NAME_CMD,6.);

anthony42
离线
最后一次露面:5年9个月前
加入:2015-07-17 08:21
嗨Joacimwe,

嗨Joacimwe,
感谢你的回复,
你是对的!
今天我测试set_dev_name函数,有时系统损坏,
然后我记得你的回答,使用Ke_msg_alloc_dyn工作正常。
为什么?
在REF编码中,使用KE_MSG_ALLOC很多。

Joacimwe
离线
最后一次露面:1年9个月前
大师
加入:2014-01-14 06:45
在API文档中,您

在API文档中,你可以看到一些消息结构以动态大小的数组结尾,比如GAPM_SET_DEV_NAME_CMD, GAPM_WHITE_LIST_MGT_CMD, GAPM_RESOLV_ADDR_CMD等。由于sizeof(这样的结构)假设数组中有0个元素,因此必须将它们占用的大小添加到为消息分配的大小中。