DA1458x BASS Database的组成结构 -- Battery Service 分析(一)
来源:互联网 发布:百度一下软件 编辑:程序博客网 时间:2024/06/14 14:26
Overview
本文基于DA1458x SDK 5.0.4。
Battery Service 以下简称BAS or BASS。BASS的代码主要有以下两个组C文件组成
另,BASS是依赖于APP_TASK任务来调度管理的。具体框架如下图(摘自Dialog官方文档)
Full BAS Database Description (BAS Database 分析)
BASS的Database的变量名为 bas_att_db,由以下5个成员组成
这个变量非常重要,本文我们就围绕着它来一步步来分析。
bas_att_db结构体数组索引
首先这是一个结构体数组的索引,该索引采取的是枚举类型,方便阅读和理解。
/// Battery Service Attributes Indexesenum{ BAS_IDX_SVC, BAS_IDX_BATT_LVL_CHAR, BAS_IDX_BATT_LVL_VAL, BAS_IDX_BATT_LVL_NTF_CFG, BAS_IDX_BATT_LVL_PRES_FMT, BAS_IDX_NB,};
接下来我们看下attm_desc这个结构体的定义
struct attm_desc 结构体的定义
这个结构体的定义如下
/// Attribute description (used to create database) struct attm_desc { /// Element UUID uint16_t uuid; /// Attribute permission uint16_t perm; /// Maximum length of the element att_size_t max_length; /// Current length of the element att_size_t length; /// Element value array uint8_t* value; };
我们可以看到,第一个成员是16位UUID,用来记录这个Attribute(属性)的UUID;
第二个成员是Attribute permission(属性权限);
第三个成员是Maximum length of the element(元素的最大长度);
第四个成员是Current length of the element(当前元素的长处);
第五个成员是Element Value array(元素数组)。
uuid和perm为16bit无符号整型变量,value为uint8_t数组指针,att_size_t类型其实uint16_t
/// Attribute length typetypedef uint16_t att_size_t;
bas_att_db定义
定义如下(bass.c文件中)
/* * BAS ATTRIBUTES DEFINITION **************************************************************************************** *//// Full BAS Database Description - Used to add attributes into the databaseconst struct attm_desc bas_att_db[BAS_IDX_NB] ={ // Battery Service Declaration [BAS_IDX_SVC] = {ATT_DECL_PRIMARY_SERVICE, PERM(RD, ENABLE), sizeof(bas_svc), sizeof(bas_svc), (uint8_t *)&bas_svc}, // Battery Level Characteristic Declaration [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}, // Battery Level Characteristic Value [BAS_IDX_BATT_LVL_VAL] = {ATT_CHAR_BATTERY_LEVEL, PERM(RD, ENABLE), sizeof(uint8_t), 0, NULL}, // Battery Level Characteristic - Client Characteristic Configuration Descriptor [BAS_IDX_BATT_LVL_NTF_CFG] = {ATT_DESC_CLIENT_CHAR_CFG, PERM(RD, ENABLE)|PERM(WR, ENABLE), sizeof(uint16_t), 0, NULL}, // Battery Level Characteristic - Characteristic Presentation Format Descriptor [BAS_IDX_BATT_LVL_PRES_FMT] = {ATT_DESC_CHAR_PRES_FORMAT, PERM(RD, ENABLE), sizeof(struct prf_char_pres_fmt), 0, NULL},};
由上述定义我们来一个个分析bas_att_db的五个成员变量。
[BAS_IDX_SVC]
首先是[BAS_IDX_SVC]成员变量。
BAS_IDX_SVC的value是bas_svc 变量,具体如下:
const att_svc_desc_t bas_svc = ATT_SVC_BATTERY_SERVICE;
我们可以看到bas_svc 被赋值为一个枚举类型变量,具体值为0x180F。
类似的还有ATT_SVC_GENERIC_ACCESS、ATT_SVC_GENERIC_ATTRIBUTE、ATT_SVC_DEVICE_INFO、ATT_SVC_HID等。
具体定义如下:
/// Common 16-bit Universal Unique Identifierenum { ATT_INVALID_UUID = 0, /*----------------- SERVICES ---------------------*/ /// Generic Access Profile ATT_SVC_GENERIC_ACCESS = 0x1800, /// Attribute Profile ATT_SVC_GENERIC_ATTRIBUTE, ... /// Device Information Service ATT_SVC_DEVICE_INFO = 0x180A, ... /// Battery Service ATT_SVC_BATTERY_SERVICE, /// Blood Pressure Service ATT_SVC_BLOOD_PRESSURE = 0x1810, /// Alert Notification Service ATT_SVC_ALERT_NTF = 0x1811, /// HID Service ATT_SVC_HID = 0x1812, ...}
[BAS_IDX_BATT_LVL_CHAR]
关于BAS_IDX_BATT_LVL_CHAR成员,它的value比较特殊,是att_char_desc结构体变量强转为(uint8_t *)。该变量定义如下:
/// Battery Level characteristicconst struct att_char_desc bas_batt_level_char = ATT_CHAR(ATT_CHAR_PROP_RD, 0, ATT_CHAR_BATTERY_LEVEL);
struct att_char_desc定义如下:
/// Characteristic Value Descriptorstruct att_char_desc{ /// properties uint8_t prop;//属性 /// attribute handle uint8_t attr_hdl[ATT_HANDLE_LEN];//句柄索引 /// attribute type uint8_t attr_type[ATT_UUID_16_LEN];//UUID值};
定义bas_batt_level_char变量时,使用ATT_CHAR宏函数填充结构体,原型如下
/// macro to fill an attribute characteristic#define ATT_CHAR(prop, handle, type) {(prop), \ {(uint8_t)((handle)), (uint8_t)((handle) >> 8)}, \ {(uint8_t)((type)), (uint8_t)((type) >> 8)} };
[BAS_IDX_BATT_LVL_VAL]、[BAS_IDX_BATT_LVL_NTF_CFG]、[BAS_IDX_BATT_LVL_PRES_FMT]
这个三个变量都没填充value值
小结
Database类型总结
- DA1458x BASS Database的组成结构 -- Battery Service 分析(一)
- DA1458x DISS Database的组成结构 -- Device Information Service 分析(一)
- DA1458x BASS 初始化 -- Battery Service 分析(二)
- DA1458x BASS 初始化 -- Battery Service 分析(三)
- 一.Html的组成结构
- CPU的组成结构及其原理(一)
- Service基本组成 (一)
- Gensee Android SDK(一)组成结构
- Service的基本组成
- 深入分析 当今中国社会结构组成——献给找工作的大学生(包括研究生)
- 蓝牙车载系统的组成结构和应用规范分析
- vlc的结构分析(一)
- Database Cloud Service试用一(创建实例)
- battery service 修改 52832
- android应用程序的组成(组织结构)
- mini2440的组成结构
- OCF的组成结构
- Cache的组成结构
- hdfs读写文件核心流程详解巧说
- 数据结构C++作业
- thinkphp5中使用phpmailer实现发送邮件功能 及自己遇到的坑
- CAS in java
- Spring Boot Unit Test
- DA1458x BASS Database的组成结构 -- Battery Service 分析(一)
- Qt--宏
- 完全正负大数模板(正负数加减乘除求模运算)~~~~~
- java开发操作系统:不锁死控制台的加载用户进程
- MyBatis动态sql中foreach的简单使用
- 如何使用Nunit3在VS2017中进行.NET Core和.NET Standard项目单元测试
- 02:输出第二个整数
- 关于spring升级到4.3.12 hibernate升级到4.3 遇到的一些问题和解决方法
- 图之拓扑排序