一、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组数据,然后八组运动数据加一个数据头,然后一起存储,