You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
350 lines
17 KiB
350 lines
17 KiB
/*
|
|
Copyright (c) 2017 Silan MEMS. All Rights Reserved.
|
|
*/
|
|
|
|
#ifndef SL_Watch_PEDO_KCAL_WRIST_SLEEP_SWAY_ALGO_DRV__H__
|
|
#define SL_Watch_PEDO_KCAL_WRIST_SLEEP_SWAY_ALGO_DRV__H__
|
|
|
|
#define SL_Sensor_Algo_Release_Enable 0x01
|
|
//0x00: for debug
|
|
//0x01: release version
|
|
|
|
/***使用驱动前请根据实际接线情况配置******/
|
|
/**SC7A20的SDO 脚接地: 0****************/
|
|
/**SC7A20的SDO 脚接电源:1****************/
|
|
#define SL_SC7A20_SDO_VDD_GND 1
|
|
/*****************************************/
|
|
|
|
/***使用驱动前请根据实际IIC情况进行配置***/
|
|
/**SC7A20的IIC 接口地址类型 7bits: 0****/
|
|
/**SC7A20的IIC 接口地址类型 8bits: 1****/
|
|
#define SL_SC7A20_IIC_7BITS_8BITS 1
|
|
/*****************************************/
|
|
|
|
#if SL_SC7A20_SDO_VDD_GND==0
|
|
#define SL_SC7A20_IIC_7BITS_ADDR 0x18
|
|
#define SL_SC7A20_IIC_8BITS_WRITE_ADDR 0x30
|
|
#define SL_SC7A20_IIC_8BITS_READ_ADDR 0x31
|
|
#else
|
|
#define SL_SC7A20_IIC_7BITS_ADDR 0x19
|
|
#define SL_SC7A20_IIC_8BITS_WRITE_ADDR 0x32
|
|
#define SL_SC7A20_IIC_8BITS_READ_ADDR 0x33
|
|
#endif
|
|
|
|
#if SL_SC7A20_IIC_7BITS_8BITS==0
|
|
#define SL_SC7A20_IIC_ADDRESS SL_SC7A20_IIC_7BITS_ADDR
|
|
#else
|
|
#define SL_SC7A20_IIC_WRITE_ADDRESS SL_SC7A20_IIC_8BITS_WRITE_ADDR
|
|
#define SL_SC7A20_IIC_READ_ADDRESS SL_SC7A20_IIC_8BITS_READ_ADDR
|
|
#endif
|
|
|
|
#define SL_SC7A20_CHIP_ID_ADDR (unsigned char)0x0F
|
|
#define SL_SC7A20_CHIP_ID_VALUE (unsigned char)0x11
|
|
#define SL_SC7A20_VERSION_ADDR (unsigned char)0x70
|
|
#define SL_SC7A20_VERSION_VALUE (unsigned char)0x11
|
|
#define SL_SC7A20E_VERSION_VALUE (unsigned char)0x26
|
|
|
|
typedef enum {FALSE = 0,TRUE = !FALSE} bool;
|
|
|
|
/********客户需要进行的IIC接口封包函数****************/
|
|
extern unsigned char SL_SC7A20_I2c_Spi_Write(bool sl_spi_iic,unsigned char reg, unsigned char dat);
|
|
extern unsigned char SL_SC7A20_I2c_Spi_Read(bool sl_spi_iic,unsigned char reg, unsigned char len, unsigned char *buf);
|
|
/**SL_SC7A20_I2c_Spi_Write 函数中, sl_spi_iic:0=spi 1=i2c Reg:寄存器地址 dat:寄存器的配置值*******************/
|
|
/**SL_SC7A20_I2c_Spi_Write 函数 是一个单次写的函数*******************************************************************/
|
|
/***SL_SC7A20_I2c_Spi_Read 函数中, sl_spi_iic:0=spi 1=i2c Reg 同上,len:读取数据长度,buf:存储数据首地址(指针)***/
|
|
/***SL_SC7A20_I2c_Spi_Read 函数 是可以进行单次读或多次连续读取的函数*************************************************/
|
|
|
|
/*************驱动初始化函数**************/
|
|
signed char SL_SC7A20_Driver_Init(bool Sl_spi_iic_init,unsigned char Sl_pull_up_mode);
|
|
/***输入参数:1,Sl_spi_iic_init:0-1***2,PULL_UP_MODE:0x00 0x08 0x04 0x0c********/
|
|
/****Sl_spi_iic_init=0:SPI MODE, Sl_pull_up_mode config failed****************/
|
|
/****Sl_spi_iic_init=1:IIC MODE***********************************************/
|
|
/****Sl_pull_up_mode=0x00: SDO I2C pull up***********************************/
|
|
/****Sl_pull_up_mode=0x08: I2C pull up and SDO open drain*******************/
|
|
/****Sl_pull_up_mode=0x04: SDO pull up and I2C open drain*******************/
|
|
/****Sl_pull_up_mode=0x0C: SDO I2C open drain********************************/
|
|
/****SDO脚接地,推荐关闭SDO内部上拉电阻****************************************/
|
|
/****SPI通讯,推荐关闭SDA,SCL内部上拉电阻,SDO内部上拉电阻会自动关闭**********/
|
|
|
|
/*************返回数据情况如下*****************/
|
|
/**return : 0x11/0x26 表示CHIP ID 正常*********/
|
|
/**return : 0 表示读取异常*************/
|
|
/**return :-1; SPI 通信问题*************/
|
|
/**return :-2; IIC 通信问题*************/
|
|
/**return :-3; 连续读取 通信问题********/
|
|
|
|
/***************执行算法前需要读取FIFO数据*****/
|
|
/***************FIFO数据读取后,FIFO会清空*****/
|
|
/***************所以FIFO只能定时读取一次*******/
|
|
unsigned char SL_SC7A20_Read_FIFO(void);
|
|
/**return : FIFO_LEN 表示数组长度***********/
|
|
|
|
|
|
/****说明:该函数需要定时执行,从而保证算法执行到位**/
|
|
/***************执行算法获取计步结果***************/
|
|
unsigned int SL_Watch_Kcal_Pedo_Algo(bool sl_music_motor_en);
|
|
/***sl_music_motor_en=0: 马达电机和音乐功能未打开**/
|
|
/***sl_music_motor_en=1: 马达电机和音乐功能已打开**/
|
|
/**************获取当天的当前计步值****************/
|
|
/*************输出数据为:计步值(步)***************/
|
|
|
|
/***************获取三轴原始数据***************/
|
|
unsigned char SL_SC7A20_GET_FIFO_Buf(signed short *sl_x_buf,signed short *sl_y_buf,signed short *sl_z_buf,bool filter_en);
|
|
/****************执行算法后执行该命令**********/
|
|
/**x_buf y_buf z_buf : 长度32的数组首地址****/
|
|
/**filter_en:0 低通滤波禁止 1:低通滤波使能***/
|
|
/****************返回数据情况如下**************/
|
|
/**return : FIFO_LEN 表示数组长度***********/
|
|
|
|
|
|
/******************复位计步值************************/
|
|
void SL_Pedo_Kcal_ResetStepCount(void);
|
|
/**********输入数据为:无******输出数据为:无********/
|
|
/*使用方法: 系统时间到第二天时,调用该函数清除计步值*/
|
|
|
|
/*******************计步状态复位**********************/
|
|
void SL_Pedo_WorkMode_Reset(void);
|
|
/******************输入参数:无***********************/
|
|
/******************输出值参数:无*********************/
|
|
|
|
/******************升级后,设置计步值,距离,热量************************/
|
|
/******************升级后,请在初始化函数后,增加该函数****************/
|
|
void SL_Pedo_StepCount_Set(unsigned int sl_pedo_value,unsigned int sl_dis_value,unsigned int sl_kcal_value);
|
|
/**********输入数据为:sl_pedo_value 计步值*****/
|
|
/**********输入数据为:sl_dis_value 距离值*****/
|
|
/**********输入数据为:sl_kcal_value 热量值*****/
|
|
|
|
/******************计步灵敏度设置********************/
|
|
void SL_PEDO_TH_SET(unsigned char sl_pedo_amp,unsigned char sl_pedo_th,unsigned char sl_pedo_weak,unsigned char sl_zcr_lel,unsigned char sl_scope_lel);
|
|
/******sl_pedo_amp>4&&sl_pedo_amp<201**************************/
|
|
/******sl_pedo_amp:越小灵敏度越高,越容易计步******************/
|
|
/******sl_pedo_amp:越大灵敏度越高,越难计步********************/
|
|
/******sl_pedo_amp:默认值26,不设置就是26**********************/
|
|
|
|
/******sl_pedo_th>5&&sl_pedo_th<50*****************************/
|
|
/******sl_pedo_th:越小灵敏度越高,越容易计步*******************/
|
|
/******sl_pedo_th:越大灵敏度越高,越难计步*********************/
|
|
/******sl_pedo_th:默认值10,不设置就是10***********************/
|
|
|
|
/******sl_pedo_weak>=0&&sl_pedo_weak<6*************************/
|
|
/******sl_pedo_th:0,不打开轻微走路计步功能*********************/
|
|
/******sl_pedo_th:1,打开轻微走路计步功能***********************/
|
|
/******sl_pedo_th:2,打开轻微走路计步功能***********************/
|
|
/******sl_pedo_th:3,打开轻微走路计步功能***********************/
|
|
/******sl_pedo_th:4,打开轻微走路计步功能***********************/
|
|
/******sl_pedo_th:5,打开轻微走路计步功能***********************/
|
|
/******sl_pedo_th:默认值0,设置的值越大,检测计步的越灵敏*******/
|
|
|
|
/*****sl_zcr_lel>=0&&sl_zcr_lel<=255***************************/
|
|
/*****sl_zcr_lel:默认值=20,设置的值越小,越容易屏蔽喇叭震动****/
|
|
/*****一定时间内的过零率计算***********************************/
|
|
|
|
/*****sl_scope_lel>=0&&sl_scope_lel<=255***********************/
|
|
/*****整体数据幅度阈值*****************************************/
|
|
|
|
|
|
/*******计步主轴设置****************/
|
|
void SL_PEDO_SET_AXIS(unsigned char sl_xyz);
|
|
/***sl_xyz:0 x轴*******************/
|
|
/***sl_xyz:1 y轴*******************/
|
|
/***sl_xyz:2 z轴*******************/
|
|
/***sl_xyz:3 算法决定**************/
|
|
|
|
/*设置运动检测幅度阈值和时间阈值****/
|
|
void SL_PEDO_INT_SET(unsigned char V_TH,unsigned char T_TH,bool INT_EN);
|
|
/***V_TH:0 0-127************************************/
|
|
/***T_TH:1 0-127************************************/
|
|
/***INT_EN:0 关闭中断功能,1,打开中断状态监测功能***/
|
|
/***USE AOI2 INT*************************************/
|
|
|
|
/*设置运动状态读取******************/
|
|
bool SL_INT_STATUS_READ(void);
|
|
/*0: 没有运动*********************/
|
|
/*1: 有运动***********************/
|
|
/*关闭中断功能情况下,一直输出1*****/
|
|
|
|
/***********关闭IIC设备**************/
|
|
/***********Power down 函数**********/
|
|
/********不使用该设备情况下**********/
|
|
/****如需重启,使用驱动初始化函数****/
|
|
bool SL_SC7A20_Power_Down(void);
|
|
/*************输入参数:无************/
|
|
/**********返回参数情况说明**********/
|
|
/**return 1: Power Down Success*****/
|
|
/**return 0: Power Down Fail********/
|
|
|
|
|
|
|
|
|
|
/*************初始化个人参数*************/
|
|
/**参数初始化,用于热量,距离计算********/
|
|
void SL_Pedo_Person_Inf_Init(unsigned char *Person_Inf_Init);
|
|
/*********输入指针参数分别是:身高 体重 年龄 性别***举例:178,60,26 1*********/
|
|
/**身高范围: 30cm ~ 250cm ***********/
|
|
/**体重范围: 10Kg ~ 200Kg ***********/
|
|
/**年龄范围: 3岁 ~ 150岁 ***********/
|
|
/**性别范围: 0 ~ 1 0:女 1:男 ****/
|
|
|
|
/*********************获取运动状态值**********************/
|
|
unsigned char SL_Pedo_GetMotion_Status(void);
|
|
/**********输入数据为:无*********************************/
|
|
/**********输出数据为:0 ~ 3 *****************************/
|
|
/**输出数据为:0 *静止或静坐**********/
|
|
/**输出数据为:1 *慢走或散步**********/
|
|
/**输出数据为:2 *正常走路************/
|
|
/**输出数据为:3 *跑步或剧烈运动******/
|
|
|
|
/**************获取截止当前当天的行走距离*****************/
|
|
unsigned int SL_Pedo_Step_Get_Distance(void);
|
|
/*******************输入数据为:无************************/
|
|
/*******************输出数据为:当天行走距离 *************/
|
|
/*******************单位: 分米(dm)******************/
|
|
|
|
/**************获取截止当前当天的热量消耗*****************/
|
|
unsigned int SL_Pedo_Step_Get_KCal(void);
|
|
/*******************输入数据为:无************************/
|
|
/*******************输出数据为:当天热量消耗值 ***********/
|
|
/*********单位: 大卡 1个单位=0.1大卡******************/
|
|
|
|
/**************获取最近一段时间的走路平均幅度*************/
|
|
unsigned short SL_Pedo_Step_Get_Avg_Amp(void);
|
|
/********************输入数据为:无***********************/
|
|
/***********************1LSB≈XXXmg************************/
|
|
|
|
/***********************获取当前走路平均步频**************/
|
|
unsigned char SL_Pedo_Step_Get_Step_Per_Min(void);
|
|
/********************输入数据为:无***********************/
|
|
/********************输出数据为:XXX步/分钟 **************/
|
|
|
|
/***********************获取当前的运动等级****************/
|
|
unsigned char SL_Pedo_Step_Get_Motion_Degree(void);
|
|
/********************输入数据为:无***********************/
|
|
/********************输出数据为:0-25 ********************/
|
|
|
|
|
|
/**********抬手亮屏算法**********/
|
|
|
|
/*****************抬手亮屏算法初始化函数****************/
|
|
void SL_Turn_Wrist_Init(unsigned char *SL_Turn_Wrist_Para);
|
|
/************输入参数:*************/
|
|
/******SL_Turn_Wrist_Para[0]:加速度计贴片位置设置 0--7********/
|
|
/******SL_Turn_Wrist_Para[1]:抬手亮屏灵敏度设置 1--5********/
|
|
/******SL_Turn_Wrist_Para[2]:水平抬手亮屏使能控制位0--1********/
|
|
|
|
/*************三轴加速度计贴片位置设置*************************/
|
|
/***SL_Turn_Wrist_Para[0]:设定值的范围为: 0 ~ 7 **************/
|
|
/***请参考文档:Silan_MEMS_手环算法说明书_V1.1.pdf**************/
|
|
|
|
/***SL_Turn_Wrist_Para[1]:设定值的范围为: 1 ~ 5 **/
|
|
/*********默认值为:3 中等灵敏度****************/
|
|
/*********设定值为:1 最低灵敏度****************/
|
|
/*********默认值为:5 最高灵敏度****************/
|
|
/*********设定值为:1(最迟钝)~5(最灵敏)***********/
|
|
|
|
/******SL_Turn_Wrist_Para[2]:水平抬手亮屏使能控制位0--1*******/
|
|
/******0:禁止水平抬手功能********/
|
|
/******1:使能水平抬手功能********/
|
|
|
|
|
|
|
|
/*****************抬手亮屏状态获取函数****************/
|
|
signed char SL_Watch_Wrist_Algo(void);
|
|
/***********输入参数:无***********/
|
|
/***********返回参数情况说明*******/
|
|
/**Return: 2 备注说明:屏幕点亮后需要关闭*********/
|
|
/**Return: 1 备注说明:屏幕需要点亮***************/
|
|
/**Return: 0 备注说明:屏幕不需要点亮*************/
|
|
/**Return: -1 备注说明:未初始化或初始化失败*******/
|
|
|
|
/*****************抬手亮屏状态复位********************/
|
|
//void SL_Turn_Wrist_WorkMode_Reset(void);
|
|
/******************输入参数:无***********************/
|
|
/******************输出值参数:无*********************/
|
|
|
|
|
|
//3-12
|
|
//1-10
|
|
//0-10
|
|
/******************睡眠参数设置********************/
|
|
void SL_Sleep_Para(unsigned char adom_time_th,unsigned char sleep_vpp_th,unsigned char sleep_time_th);
|
|
/**************************佩戴检测的时长***********************/
|
|
/******adom_time_th:0-255 min***********************************/
|
|
/******adom_time_th:未活动的时间,大于设置阈值才能认为未佩戴****/
|
|
/******adom_time_th:设置值越小,越容易出现未佩戴情况************/
|
|
|
|
/**************************睡眠中间点阈值***********************/
|
|
/******sleep_vpp_th:越小灵敏度越高,越容易睡眠状态切换**********/
|
|
/******sleep_vpp_th:越大灵敏度越低,越难睡眠状态切换************/
|
|
/******sleep_vpp_th:默认值10,不设置就是10**********************/
|
|
|
|
/**************************状态切换最小时间*********************/
|
|
/******sleep_time_th:该值越小,睡眠状态切换的所需时间就越短*****/
|
|
/******sleep_time_th:该值越大,睡眠状态切换的所需时间就越长*****/
|
|
/******sleep_time_th:默认值1,不设置就是1***********************/
|
|
|
|
|
|
/***************获取当前的睡眠状态*****************/
|
|
unsigned char SL_Sleep_GetStatus(unsigned char SL_Sys_Time);
|
|
/*******SL_Sys_Time:当前的时间,以小时为单位******/
|
|
/*******全天的输入时间范围为:0-23 ****************/
|
|
/***************输出数据范围:0-7******************/
|
|
/***************0:清醒状态************************/
|
|
/***************7:深度睡眠************************/
|
|
|
|
/***************获取当前的活动等级*****************/
|
|
unsigned char SL_Sleep_Active_Degree(unsigned char mode);
|
|
/***************mode:0 定时器0.5s中调用***********/
|
|
/***************mode:1 定时器1min中调用***********/
|
|
/***************输出数据范围:0-255****************/
|
|
/***************0:静止****************************/
|
|
/*************255:运动****************************/
|
|
|
|
unsigned char SL_Sleep_Get_Active_Degree(void);
|
|
/***************mode:0 定时器0.5s中调用***********/
|
|
/***************mode:1 定时器1min中调用***********/
|
|
/***************输出数据范围:0-255****************/
|
|
/***************0:静止****************************/
|
|
/*************255:运动****************************/
|
|
|
|
/***************获取当前的佩戴的情况***************/
|
|
unsigned char SL_Adom_GetStatus(void);
|
|
/***************0:未佩戴**************************/
|
|
/***************1:已佩戴**************************/
|
|
|
|
/***************获取当前的佩戴的情况***************/
|
|
unsigned char SL_In_Sleep_Status(void);
|
|
/***************0:out sleep**********************/
|
|
/***************1:in sleep***********************/
|
|
|
|
/**************************翻转功能************************/
|
|
bool SL_Get_Clock_Status(bool open_close);
|
|
/***********输入参数:sensor_pos***********/
|
|
/****sensor_pos:1 open 检测是否要关闭时输入 1*************/
|
|
/****sensor_pos:0 close 关闭闹铃时时 输入 0*************/
|
|
/*********************返回参数情况说明*********************/
|
|
/***********************翻转功能检测***********************/
|
|
/**Return: 1 备注说明:屏幕已翻转,关闭闹钟************/
|
|
/**Return: 0 备注说明:屏幕未翻转,不关闭闹钟**********/
|
|
|
|
|
|
/**************************摇晃功能************************/
|
|
bool SL_Get_Phone_Answer_Status(unsigned char Sway_Degree,unsigned char Sway_Num);
|
|
/***********输入参数:摇晃等级0--10 摇晃数量0--10***********************/
|
|
/***摇晃等级:设置值越小,需要摇晃的幅度越小,越容易触发接听动作*********/
|
|
/***摇晃数量:设置值越小,需要摇晃的次数越少,越容易触发接听动作*********/
|
|
/***********返回参数情况说明*******************************/
|
|
/**Return: 1 备注说明:摇晃动作成立,接听电话**********/
|
|
/**Return: 0 备注说明:摇晃动作不成立,不接听电话******/
|
|
|
|
|
|
/************加测项目客户端测试***********/
|
|
/***初始化的时候调用用于判断FIFO是否正常**/
|
|
bool SL_SC7A20_FIFO_TEST(void);
|
|
/*************输入参数:无*****************/
|
|
/*************返回数据情况如下************/
|
|
/**return :1 FIFO 异常*******************/
|
|
/**return :0 FIFO 正常*******************/
|
|
#endif/****SL_Watch_ALGO_DRV__H__*********/
|
|
|
|
|
|
|
|
|