📄 pedometerddd.c
字号:
/*
********************************************************************************
* Copyright (C),2004-2007, Fuzhou Rockchip Electronics Co.,Ltd.
* All Rights Reserved
*
*Description:
*
$Header: /cvs_server/mp3_project/RK2606_4G_DEMO/Pedometer/Block.c,v 1.12 2007/04/25 03:15:15 HuangJiliu Exp $
$Author: HuangJiliu $
$Date: 2007/04/25 03:15:15 $
$Revision: 1.05 Release$
********************************************************************************
*/
#include "Resource.h"
#include <stdlib.h>
#include <creg.h>
#include "macro.h"
#include "KeyMacro.h"
#include "KeyGlobal.h"
#include "Global.h"
#include "Lcd.h"
//#include "Block.h"
#include "pedometer.h"
#include "MsgDef.h"
#if( _LCD_DIRECTION_ == _VERTICAL_LCD_)
#undef PEDOMETER_DISPLAY_ASP
#endif
void PedometerFreqUp(void);
void PedometerFreqDown(void);
PEDOMETER_APP_BSS unsigned int PedometerReadFlag;
PEDOMETER_APP_BSS unsigned int PedometerKeyFlag;
PEDOMETER_APP_BSS unsigned char PedometerState;
PEDOMETER_APP_BSS unsigned int PedometerKeyValue;
void PedoMeterIicInit(void);
void StepLoops(void);
unsigned int GsensorPowerOnDown(unsigned int poweronoff);
void GetAcceleration(void);
void PDisplayPauseRun(bool PedometerPauseRun);
void PDisplayXnumber(unsigned long Xnumber);
void PDisplayYnumber(unsigned long Ynumber);
void PDisplayBodyWeight(unsigned long BodyWeight);
void PDisplayBodyHeight(unsigned long BodyHeight);
void PDisplayStepCounter(unsigned long StepCounter);
void PDisplayDistance(unsigned long Distance);
void PDisplayTotalConsume(unsigned long TotalConsume);
void PDisplayTimeCounter(unsigned long TimeCounter);
void PDisplayConsumeRate(unsigned long ConsumeRate);
void PDisplayStepFreqency(unsigned long StepFreqency);
void PDisplayTime(unsigned long TimeCounter);
PEDOMETER_APP_BSS unsigned long Xnumber=0;
PEDOMETER_APP_BSS unsigned long Ynumber=0;
PEDOMETER_APP_BSS unsigned long BodyWeight=60;
PEDOMETER_APP_BSS unsigned long BodyHeight=170;
PEDOMETER_APP_BSS unsigned long StepCounter=0;
PEDOMETER_APP_BSS unsigned long TotalConsume=0;
PEDOMETER_APP_BSS unsigned long Distance=0;
PEDOMETER_APP_BSS unsigned long TimeCounter=0;
PEDOMETER_APP_BSS unsigned long TimeInterCounter=0;
PEDOMETER_APP_BSS unsigned long ConsumeRate=0;
PEDOMETER_APP_BSS unsigned long StepFreqency=0;
//////////////////////////////////////////////////////////////
//PEDOMETER_APP_BSS
TMR TmrCtr;
/* 放在定时器中断 */
PEDOMETER_APP_BSS unsigned int PedometerTimerModuleTimer=10;
PEDOMETER_APP_BSS union GsensorData MXC6202DataOut = {0};
PEDOMETER_APP_BSS unsigned char stc_iAcce1_LPFcount1,stc_iAcce0_LPFcount1,stc_iAcce1_HPFcount1,stc_iAcce0_HPFcount1,stc_iAcceFilter1;
PEDOMETER_APP_BSS unsigned char stc_iG_CountUP,stc_iG_CountDOWN;
PEDOMETER_APP_BSS bool stc_bStatUp, stc_bStatDown;
/*
**********************************************************
* Copyright (C),2004-2005, Fuzhou Rockchip Co.,Ltd.
* Function name : PedometerTimerInit()
* Author: ZhenFu Fang
* Description: 软件定时器初始化
* Calls:
* Input: 无
* Return: 无
* Remark:
*
* History:
* <author> <time> <version> <desc>
* FZF 05/11/09 1.0 ORG
*
***********************************************************
*/
PEDOMETER_APP_CODE
void PedometerTimerInit(void)
{
unsigned int i;
for(i=0; i<TIMER_MAX_CHANNEL; i++)
{
TmrCtr.TmrTbl[i].TimeCounter = 0;
TmrCtr.TmrTbl[i].TimeInitValue = 0;
TmrCtr.TmrTbl[i].TimeFunc = 0;
TmrCtr.TmrTbl[i].FuncArg = 0;
}
TmrCtr.TmrFlag = 0;
PedometerTimerModuleTimer=10;
}
/*
**********************************************************
* Copyright (C),2004-2005, Fuzhou Rockchip Co.,Ltd.
* Function name : PedometerTimerStart()
* Author: ZhenFu Fang
* Description: 定时器启动
* Calls:
* Input: n 定时器通道
* Return: 无
* Remark:
*
* History:
* <author> <time> <version> <desc>
* FZF 05/11/09 1.0 ORG
*
***********************************************************
*/
PEDOMETER_APP_CODE
void PedometerTimerStart(unsigned int n)
{
unsigned int imask_tmp;
if(n < TIMER_MAX_CHANNEL)
{
TIMER_DISABLE_INT;
TmrCtr.TmrFlag |= (0x0001<<(n));
TIMER_ENABLE_INT;
}
}
/*
**********************************************************
* Copyright (C),2004-2005, Fuzhou Rockchip Co.,Ltd.
* Function name : PedometerTimerStop()
* Author: ZhenFu Fang
* Description: 定时器停止
* Calls:
* Input: n 定时器通道
* Return: 无
* Remark:
*
* History:
* <author> <time> <version> <desc>
* FZF 05/11/09 1.0 ORG
*
***********************************************************
*/
PEDOMETER_APP_CODE
void PedometerTimerStop(unsigned int n)
{
unsigned int imask_tmp;
if(n < TIMER_MAX_CHANNEL)
{
TIMER_DISABLE_INT;
TmrCtr.TmrFlag &= (~(0x0001<<(n)));
TIMER_ENABLE_INT;
}
}
/*
**********************************************************
* Copyright (C),2004-2005, Fuzhou Rockchip Co.,Ltd.
* Function name : PedometerTimerReset()
* Author: ZhenFu Fang
* Description: 定时器重启
* Calls:
* Input: n 定时器通道
* Return: 无
* Remark:
*
* History:
* <author> <time> <version> <desc>
* FZF 05/11/09 1.0 ORG
*
***********************************************************
*/
PEDOMETER_APP_CODE
void PedometerTimerReset(unsigned int n)
{
unsigned int imask_tmp;
if(n < TIMER_MAX_CHANNEL){
TIMER_DISABLE_INT;
TmrCtr.TmrTbl[n].TimeCounter = TmrCtr.TmrTbl[n].TimeInitValue;
TIMER_ENABLE_INT;
}
}
/*
**********************************************************
* Copyright (C),2004-2005, Fuzhou Rockchip Co.,Ltd.
* Function name : PedometerTimerCfgFunc()
* Author: ZhenFu Fang
* Description: 定时任务设置
* Calls:
* Input: n 定时器通道
* func 定时任务指针
* arg 定时任务参数
* Return: 无
* Remark: 定时任务的函数应以下列形式实现
* void TimerFunction(void *arg)
* History:
* <author> <time> <version> <desc>
* FZF 05/11/09 1.0 ORG
*
***********************************************************
*/
PEDOMETER_APP_CODE
void PedometerTimerCfgFunc(unsigned int n, void (*func)(void *), void *arg)
{
unsigned int imask_tmp;
TimeStruct *pTmr;
if(n < TIMER_MAX_CHANNEL)
{
TIMER_DISABLE_INT;
pTmr = &TmrCtr.TmrTbl[n];
pTmr->TimeFunc = func;
pTmr->FuncArg = arg;
TIMER_ENABLE_INT;
}
}
/*
**********************************************************
* Copyright (C),2004-2005, Fuzhou Rockchip Co.,Ltd.
* Function name : PedometerTimerSetTimer()
* Author: ZhenFu Fang
* Description: 定时时间设置
* Calls:
* Input: n 定时器通道
* TmrValue 定时器值
* Return: 无
* Remark:
* History:
* <author> <time> <version> <desc>
* FZF 05/11/09 1.0 ORG
*
***********************************************************
*/
PEDOMETER_APP_CODE
void PedometerTimerSetTimer(unsigned int n, unsigned int TmrValue)
{
unsigned int imask_tmp;
TimeStruct *pTmr;
if(n < TIMER_MAX_CHANNEL)
{
TIMER_DISABLE_INT;
pTmr = &TmrCtr.TmrTbl[n];
pTmr->TimeCounter = TmrValue;
pTmr->TimeInitValue = TmrValue;
TIMER_ENABLE_INT;
}
}
/* 执行周期为定时器中断周期的倍数 */
/*
**********************************************************
* Copyright (C),2004-2005, Fuzhou Rockchip Co.,Ltd.
* Function name : TimerModule()
* Author: ZhenFu Fang
* Description: 定时任务处理模块
* Calls:
* Input: 无
* Return: 无
* Remark: 1、应把此函数放在周期函数中
* 2、不建议在此模块中放入执行时间较长的任务
* History:
* <author> <time> <version> <desc>
* FZF 05/11/09 1.0 ORG
*
***********************************************************
*/
PEDOMETER_APP_CODE
void PedometerTimerModule(void)
{
TimeStruct *pTmr;
void (*pfunc)(void *);
void *parg;
unsigned int i;
//if(PedometerTimerModuleTimer > 0)
// return;
pfunc = (void (*)(void *))0;
parg = (void *)0;
//PedometerTimerModuleTimer = 2;
pTmr = &TmrCtr.TmrTbl[0];
for(i=0; i<TIMER_MAX_CHANNEL; i++)
{
if(TmrCtr.TmrFlag & (0x0001<<(i)))
{
if(pTmr->TimeCounter > 0)
{
pTmr->TimeCounter--;
if(pTmr->TimeCounter == 0)
{
TmrCtr.TmrFlag &= (~(0x0001<<(i)));
pfunc = pTmr->TimeFunc;
parg = pTmr->FuncArg;
}
}
if (pfunc != (void (*)(void *))0)
{
(*pfunc)(parg);
pfunc = (void (*)(void *))0;
}
}
pTmr++;
}
}
PEDOMETER_APP_CODE
void PedometerExit()
{
// DisplayFlag = DISP_MENU;
Fun2MsgArray[0] = MSG_FUNCTION2_NONE;//2006-2-10 15:35
Fun2ModuleChange();
}
PEDOMETER_APP_CODE
void PedometerTmrFunc(void *parg)
{
PedometerReadFlag++;
PedometerTimerReset(PEDOMETER_TMR_CHANNEL);
PedometerTimerStart(PEDOMETER_TMR_CHANNEL);
TimeInterCounter++;
if(TimeInterCounter>999999)
TimeInterCounter=999999;
}
PEDOMETER_APP_CODE
void PedometerKeyDlyFunc(void *parg)
{
PedometerKeyFlag++;
PedometerTimerReset(PEDOMETER_TMR_CHANNEL2);
PedometerTimerStart(PEDOMETER_TMR_CHANNEL2);
}
PEDOMETER_APP_CODE
void PedometerValueInit(void)
{
unsigned int i,j;
unsigned int color_tmp;
unsigned int tmpbuf[8];
Sys2InitFlag.bc.bPedometerModuleInitEnable = 0;
Sys2InitFlag.bc.bPedometerSysInitEnable = 0;
////////////////////////////////////////////////////////////////////////////
GsensorPowerOnDown(GS_POWERON);
////////////////////////////////////////////////////////////////////////////
//------------------------------------------------------------------------------
PedometerTimerInit();
//------------------------------------------------------------------------------
//------2006-2-14 9:48
read_creg(%timer0 , j); //10 * 1000 * 1us = 10ms
srand( j ); //不知到干啥的先放在这里
//-----------------
PedometerKeyFlag = 0;
PedometerState = PEDOMETER_STOP;
PedometerTimerCfgFunc(PEDOMETER_TMR_CHANNEL, PedometerTmrFunc, 0);
PedometerTimerCfgFunc(PEDOMETER_TMR_CHANNEL2, PedometerKeyDlyFunc, 0);
}
PEDOMETER_APP_CODE
void DIV100Conver16To10Display(unsigned long nSource,unsigned int *nTagert)//nTagert最好设置8成员个大小
{
unsigned long score_tmp;
score_tmp = nSource/100;
nTagert[0] = score_tmp/100000+'0';
score_tmp = score_tmp%100000;
nTagert[1] = score_tmp/10000+'0';
score_tmp = score_tmp%10000;
nTagert[2] = score_tmp/1000 +'0';
score_tmp = score_tmp%1000;
nTagert[3] = score_tmp/100 +'0';
score_tmp = score_tmp%100;
nTagert[4] = score_tmp/10 +'0';
nTagert[5] = '.';
score_tmp = score_tmp%10 +'0';
nTagert[6] = score_tmp;
nTagert[7] = 0;
}
PEDOMETER_APP_CODE
void Conver16To10Display(unsigned long nSource,unsigned int *nTagert)//nTagert最好设置8成员个大小
{
unsigned long score_tmp;
score_tmp = nSource;
nTagert[0] = score_tmp/10000+'0';
score_tmp = score_tmp%10000;
nTagert[1] = score_tmp/1000 +'0';
score_tmp = score_tmp%1000;
nTagert[2] = score_tmp/100 +'0';
score_tmp = score_tmp%100;
nTagert[3] = score_tmp/10 +'0';
score_tmp = score_tmp%10 +'0';
nTagert[4] = score_tmp;
nTagert[5] = 0;
}
PEDOMETER_APP_CODE
void PedometerDispInit(void)
{
unsigned int color_tmp;
unsigned int tmpbuf[8];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -