⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pedometerddd.c

📁 一个Gesssensor 的driver
💻 C
📖 第 1 页 / 共 3 页
字号:
/*
********************************************************************************
*          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 + -