7个帖子/ 0个新
最后发表
z20121202038
离线
最后看到:4年2周以前
加入:2016-03-30 51
关于在服务下自定义属性的问题

你好,
1)在某一服务下定义新的属性,比如电池服务,新增上报频率等等新的属性,发现手机端看到新增属性,只有我定义的UUID,而没有具体属性名(或称之为描述),请问这个是不是该手机端定义的?
/// Full BAS Database Description -用于向数据库中添加属性
const struct attm_desc bas_att_db[BAS_IDX_NB] =

//电池服务声明
[BAS_IDX_SVC] = {ATT_DECL_PRIMARY_SERVICE, PERM(RD, ENABLE), sizeof(bas_svc),
sizeof (bas_svc), (uint8_t *) &bas_svc},

//电池电量特性声明
[BAS_IDX_BATT_LVL_CHAR] = {ATT_DECL_CHARACTERISTIC, PERM(RD, ENABLE), sizeof(bas_batt_level_char),
sizeof (bas_batt_level_char), (uint8_t *) &bas_batt_level_char},
//电池电量特性值
[BAS_IDX_BATT_LVL_VAL] = {ATT_CHAR_BATTERY_LEVEL, PERM(RD, ENABLE), sizeof(uint8_t),
0,零},
//电池电量特征-客户端特征配置描述符
[BAS_IDX_BATT_LVL_NTF_CFG] = {ATT_DESC_CLIENT_CHAR_CFG, PERM(RD, ENABLE)|PERM(WR, ENABLE), sizeof(uint16_t),
0,零},
//电池电平特征-特征表示格式描述符
[BAS_IDX_BATT_LVL_PRES_FMT] = {ATT_DESC_CHAR_PRES_FORMAT, PERM(RD, ENABLE), sizeof(struct prf_char_pres_fmt),
0,零},
};

2)我增加属性超过16个,发现通过手机去访问我新增的部分属性,应用程序会停止工作,这种情况一般是什么原因?因为我同事新建了很多,但并不是都异常,只是部分异常。我阅读这个为属性分配DB的代码解释,发现最多是可以支持32种属性的。那这可能还有哪些原因呢?
/**
****************************************************************************************
* @brief函数用于简化服务数据库创建。

*使用@see attmdb_add_service函数创建服务数据库
*然后使用@see attmdb_add_attribute函数创建属性
*根据数据库描述数组给出的参数。

* @note:数据库描述数组必须是const,以减少内存消耗(仅ROM)
* @note:仅支持16位uuid

* @param[in|out] shdl服务启动句柄。
* @param[in|out] cfg_flag配置标志,每个位匹配一个属性
* att_db (Max: 32 attributes);如果位设置为1,则
*属性将被添加到服务中。
* @param[in] max_nb_att服务中属性的个数
* @param[in|out] att_tbl数组,它将被实现的区别
*各特性手柄和服务启动手柄。
*如果几个特征是可选的,这个数组是有用的
*,如果不需要,可以设置为NULL。
* @param[in] dest_id连接到服务的任务ID。该任务将被通知
*每次服务内容被对端设备修改时。
* @param[in|out] att_db包含所有属性信息的表

* @return命令状态代码:
* - @ref ATT_ERR_NO_ERROR:数据库创建成功。
* - @ref ATT_ERR_INVALID_HANDLE:如果start_hdl在参数+ nb的属性覆盖
*一些现有的服务句柄。
* - @ref ATT_ERR_INSUFF_RESOURCE:没有足够的内存分配服务缓冲区。
*或新属性不能被添加,因为所有的都是预期的
已经添加的属性或在过程中检测到缓冲区溢出
*配置
****************************************************************************************
*/
Uint8_t attm_svc_create_db(uint16_t *shdl, Uint8_t *cfg_flag, Uint8_t max_nb_att,
Uint8_t *att_tbl, ke_task_id_t const dest_id,
Const struct attm_desc *att_db);

谢谢,如果能提供一些自定义属性的例子就更好了。

关键词:
设备:
z20121202038
离线
最后看到:4年2周以前
加入:2016-03-30 51
问题已查明,流程上应该是先创建DB

问题已查明,流程上应该是先创建DB,建立连接之后要调用使能处理函数对DB的元素进行赋值,然后对端设备才能识别。

roc0106
离线
最后看到:8个月2天前
加入:2016-08-31 01:55
能不能发个你的例子,我学学!我现在还不会添加

能不能发个你的例子,我学学!我现在还不会添加

snowdream1
离线
最后看到:8个月,3个星期前
工作人员
加入:14章25条的2014-08-17
上传了一个例子,里面有针对读、写

上传了一个例子,里面有针对读、写通知、指示的简单示例,可以参考。你说的手机端显示的说明,也需要在代码里定义相关的属性。

z20121202038
离线
最后看到:4年2周以前
加入:2016-03-30 51
有没有SDK3的啊,最好是比对文件:

有没有SDK3的啊,最好是比对文件:
比如电池服务下的一个属性,用祝福设备列表看,叫“电池水平”,对应的UUID是2 a19,但是代码里面我找不到这个名字的定义啊,难道这个名字也是我们传到手机的,我理解我们是不是只传了UUID啊?

snowdream1
离线
最后看到:8个月,3个星期前
工作人员
加入:14章25条的2014-08-17
因为只是团体标准规定的默认属性,手机那里就直接显示了

因为只是团体标准规定的默认属性,手机那里就直接显示了。SDK3的属性例子,你可以查看Accel_task.c里的accel_att_db数组。关于属性说明,查看ATT_DESC_CHAR_USER_DESCRIPTION对应的项。

roc0106
离线
最后看到:8个月2天前
加入:2016-08-31 01:55
我也在弄这个,什么也出不来!能不能发个例子看看,学学!

我也在弄这个,什么也出不来!能不能发个例子看看,学学!