你好,
我从模板SDK创建一个新项目。我启用了魔术档案。
undef cfg_nvds在da14580_config.h和app_myapplication_proj.h上编辑app_device_name。
运行应用程序,设备显示在Android应用程序DSPS扫描搜索上。
About advertise strings I see on app_myapplication_proj.h this definitions:
#define APP_ADV_DATA "\x07\x01\x03\x18"
#define APP_ADV_DATA_LEN (0)
#define APP_SCNRSP_DATA "\x02\xFF\x00"
#define app_scnrsp_data_length(0)
我不明白为什么app_adv_data_len和app_scnrsp_data_length y dimined wite 0.在其他示例中,de值是数据级别的lenght。
If I modify the values with 4 and 3, the device doesn't appear on DSPS search. Why?
Device:
Hi guiseppe,
请放置有效的长度标志,并将数据类型更改为UUID服务声明值....例如更改“\ x07 \ x01 \ x03 \ x18”到“\ x03 \ x03 \ xfa \ x18”。
谢谢mt_dialog.
现在它有效。所以...
\x03 - lenght
\ x03 - 完整列表16位服务类UUIDS
\ xfa \ x18 - ????
I see on this websitehttps://developer.bluetooth.org/gatt/services/pages/serviceshome.aspx.
For device information the right code is \x0A\x18?
And also... I can't customize advertising string? For example if I want include flags description only, why this string (\x02\x01\x06) doesn't works (doesn't appear in DSPS scan)?
嗨Giuseppe,
This was just a random example, you must place in the advertising string a valid 16-bit UUID, the device information code you 've mentioned.
根据外设模式,标志字段默认填充广告字符串,您可以使用像BLUELUPE等应用程序以读取广告字符串。如果您这样做,您将看到广告字符串具有的第一个字节是默认\ x02 \ x01 \ x06。然后,您可以将您想要的数据放在广告字符串中。
谢谢mt_dialog.
是的,我理解。谢谢。
But it doesn't work if I customize APP_SCNRSP_DATA. This is the code:
//没关系!
#define app_adv_data“\ x03 \ x03 \ x15 \ x18”
#define app_adv_data_len(4)
//不起作用!
#define app_scnrsp_data“\ x09 \ x09 \ x41 \ x41 \ x41 \ x41 \ x41 \ x41 \ x41 \ x41”
#define app_scnrsp_data_length(10)
在哪里
\ x09 - 长度
\ x09 - 完成本地名称
\ x41 - 'a'charcater ascii代码
嗨Giuseppe,
广告字符串通过设备名称填充自动,您必须在扫描响应数据中放置额外的设备名称。如果您希望使用此字符串工作,则不应将“\ x09”标志放在App_adv_func中的字符串中。您可以通过评论将名称放在字符串中的代码的一部分来测试它。或者您可以使用制造商数据标志“\ XFF”。
谢谢mt_dialog.
你好,
关于“如果您希望使用此字符串工作,则不应将”\ x09“标志放在app_adv_func中的字符串中。”,如果我们使用“\ x09”,则会发生什么?为什么?
嗨yuhua64,
如果您使用\ x09,则您将在广告消息和响应消息中放置重复标志。堆栈不允许这样的事情。
谢谢mt_dialog.
你好,
问题是扫描响应数据包。我相信,App_scnrsp_data不包括在广告数据包中。蓝牙协议文档指定客户端可以通过具有特定请求的客户端需要扫描响应数据包。
app_myproject_proj.c.
//扫描响应数据
#if(nvds_support)
if(nvds_get(NVDS_TAG_APP_BLE_SCAN_RESP_DATA, &cmd->info.host.scan_rsp_data_len,
&cmd->info.host.scan_rsp_data[0]) != NVDS_OK)
#endif //(nvds_support)
{
cmd->info.host.scan_rsp_data_len = APP_SCNRSP_DATA_LENGTH;
memcpy(&cmd-> info.host.scan_rsp_data [0],app_scnrsp_data,cmd-> info.host.scan_rsp_data_len);
}
然后使用NVDS禁用扫描响应数据始终包含在通告数据包中。
嗨Giuseppe,
Scan response packets are required in active scanning. They are not included in the advertising packet, they are a reply to the scan request by the host. In most cases the scanning is active thus in most cases the scan response data are transmited by the peripheral.
谢谢mt_dialog.
ok, thanks
好的,现在我尝试添加一个“只读”特征。总三个特征。我在下面添加了profile_task.c的代码(我修改了示例128代码):
//特征3:///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
status = attmdb_add_attribute(profile_env.profile_shdl,
ATT_UUID_128_LEN + 3, // Data size = 19 (ATT_UUID_128_LEN + 3)
ATT_UUID_16_LEN, // Size of declaration type ID
(UINT8_T *)&ATT_DECL_CHAR,// 0x2803用于特征声明
PERM(RD, ENABLE), // Permissions
&(char_hdl)//处理特征声明
);
/ /添加特征值声明属性to database
status = attmdb_add_attribute(profile_env.profile_shdl,
sizeof(uint8_t),// data size = 1字节
ATT_UUID_128_LEN,//自定义声明类型= 128位的大小
(uint8_t *)&profile_3_val.uuid,// uuid的特征值
perm(rd,启用),//权限
&(val_hdl) // handle to the value attribute
);
//存储特征3的值句柄
memcpy(profile_3_char.attr_hdl,&val_hdl,sizeof(uint16_t));
//设置特征3的初始值
status = attmdb_att_set_value(char_hdl,sizeof(profile_3_char),(uint8_t *)和profile_3_char);
我修改了GATT DB数据大小:
nb_att_16 = 5; // 5 UUID16 Attribute declaration types
nb_att_32 = 0;// 0 UUID32属性声明类型
nb_att_128 = 3;// 3 UUID128属性声明类型
status = attmdb_add_service( &(profile_env.profile_shdl),
Task_Profile,
nb_att_16,
nb_att_32,
nb_att_128,
78);//见下面的计算
// Total Data portion of GATT database = 78 data bytes:
// 16 Primary service declaration
// + 19特征宣言1
// + 1 Value declaration of characteristic 1
// + 19特征声明2
// + 1 Value declaration of characteristic 2
// 2客户端配置声明特性2
// + 19特征宣言3
// + 1 Value declaration of characteristic 3
// = 78 Data bytes total
它不起作用。在与设备连接之后,仅可见前两个特性。
我认为GATT数据大小是错误的。
If I comment Characteristic 1 dichiaration code with nb_att_16=4 and nb_att_128=2 chrachterist 3 appear in the list.
Data size is right.
问题是声明特征2描述符,我在特征3声明之后放了她。