duband源码总结

来源:互联网 发布:php 简单信息录入系统 编辑:程序博客网 时间:2024/06/05 02:01

一、BLE相关参数


1、广播间隔参数:快速广播模式:

                                                           #define APP_ADV_INTERVAL_FAST       0x0050     /**< Fast advertising interval (in units of 0.625 ms. This value corresponds to 50 ms.). */

                                                          #define APP_FAST_ADV_TIMEOUT              40         //快速广播持续40s   然后进入慢速广播

                                  慢速广播模式:

                                                           #define APP_ADV_INTERVAL_SLOW    0x0640   /**< Slow advertising interval (in units of 0.625 ms. This value corrsponds to 1 seconds). */

                                                           #define APP_SLOW_ADV_TIMEOUT              180       //慢速广播持续180s    然后关闭广播     


2、广播数据在函数advertising_init()中设置:ble_advdata_t   advdata;



二、电池电量采集服务:

        百度手环电池电量采集使用了分段线性的方法,根据放电曲线分成了7段,每段认为是线性关系,定义了两个8位数组,一个表示分段电压值,一个表示分段电量百分比,两者对应。然后再根据读取电压值,找到对应的段,根据线性关系求出电量百分比。

   static const float VoltageTable[] =

    {
        4142.2,4011.2,3912.9,3831.0,3774.9,3734.4,3688.4,3605.3
    };
static const uint8_t PercentageTable[] =
    {
   
    100,86,72,58,43,29,15,1

    };


uint8_t cal_percentage(uint16_t volatage)
{
    uint8_t length = ARRAY_LEN(VoltageTable);
    uint8_t i  = 0;
    
    if(charger_status() == ChargingComplete){
        return 100;
    }
    
    //find the first value which is < volatage
    for(i = 0; i< length ; ++i) {

        if(volatage >= VoltageTable[i]) {
            break;
        }
    }

    if( i>= length) {
        return 0;
    }

    if(i == 0) {
        return 100;
    }
    
    return (volatage - VoltageTable[i])/((VoltageTable[i-1] - VoltageTable[i])/(PercentageTable[i-1] - PercentageTable[i])) + PercentageTable[i];
}


三、数据存储

        运动数据的存储,采用header+item的方式存储,本以为是一天只存一个header,后边跟n个sport item,阅读源码后,才发现不是这样操作的,百度策略是每次数据缓存8组数据,然后八组运动数据加一个数据头,然后一起存储,

       

0 0
原创粉丝点击