📄 timemng.c
字号:
/****************************************************************************/
/* */
/* Copyright (C) 2005 SHENZHEN MEIJIN CO.LTD */
/* */
/* FILE NAME: TimeMng.h */
/* MODULE NAME: 时钟管理模块 */
/* DESCRIPTION: 本程序的主要功能是管理时钟和闹铃模块 */
/* */
/* FUNCTIONS: */
/* TimMngInitial 时钟管理模块初始化 */
/* TimSetTime 设置时间 */
/* TimSetDate 设置日期 */
/* TimGetTime 获取时间 */
/* TimGetDate 获取日期 */
/* TimGetAlarm 获取当前闹铃信息 */
/* TimSetAlarm 设置闹铃 */
/* TimGetAlarmTime 获取闹铃时间 */
/* TimGetAlarmDate 获取闹铃日期 */
/* TimGetAlarmNumber 获取相同时间的闹铃个数 */
/* GetAlarmMsgBuffer 获取闹铃提示信息buffer */
/* TimUpdateAlarm 更新闹铃 */
/* */
/****************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ==============================================*/
/* gaolinhui 2006-01-22 创建 */
/****************************************************************************/
#include "kernel.h"
#define ALARM_MSGLEN 17
#define ALARM_SAMENUMBER 4 // 相同时间点的Alarm最多数量
UINT8 g_byAlarmMinute;
UINT8 g_byAlarmHour;
UINT8 g_byAlarmDay;
UINT8 g_byAlarmMonth;
UINT16 g_wAlarmYear;
UINT8 g_byAlarmNumber; // 记录相同时间点内Alarm的数量
UINT8 g_aAlarmBuffer[ALARM_SAMENUMBER*ALARM_MSGLEN];
/****************************************************************************/
/* FUNCTION: TimMngInitial */
/* DESCRIPTION:时钟模块初始化 */
/* INPUTS: */
/* OUTPUTS: NONE */
/* RETURN: NONE */
/****************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ==============================================*/
/* gaolinhui 2006-2-22 CREATE */
/****************************************************************************/
BOOL TimMngInitial(void)
{
//设置初始时间为2006-1-1 00:00:00
DateType date;
TimeType time;
TimGetTime(&time);
TimGetDate(&date);
//判断当前时间的有效性,如果时间有效,不需要重新设置时间
if ( date.wYear < TIM_YEARMIN || date.wYear > TIM_YEARMAX
|| date.byMonth > 12
|| date.byDay > 31
|| time.byHour > 23
|| time.byMinute > 59
|| time.bySecond > 59 )
{
date.wYear = 2006;
date.byMonth = 1;
date.byDay = 1;
time.byHour = 0;
time.byMinute = 0;
time.bySecond = 0;
TimSetDate(&date);
TimSetTime(&time);
}
//更新闹铃
TimUpdateAlarm();
return TRUE;
}
/****************************************************************************/
/* FUNCTION: TimGetDate */
/* DESCRIPTION:得到当前日期 */
/* INPUTS: */
/* OUTPUTS: pDate - 当前日期 */
/* RETURN: NONE */
/****************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ==============================================*/
/* 谢永良 2002-09-26 创建 */
/* gaolinhui 2006-1-23 修改了返回类型为BOOL */
/****************************************************************************/
BOOL TimGetDate(DateType *pDate)
{
NU_DRIVER *pDtTmDriver;
NU_DRIVER_REQUEST ndrTemp;
SYSTEM_DATETIME dtDate;
BOOL bRet = TRUE;
memset(pDate, 0, sizeof(DateType));
if ((pDtTmDriver = GetIODriverFromName((UINT8*)DRV_NAME_DATETIME)) == NULL)
{
bRet = FALSE;
}
else
{
ndrTemp.nu_function = NU_INPUT;
ndrTemp.nu_timeout = NU_NO_SUSPEND;
ndrTemp.nu_supplemental = DTTM_IO_DATE;
ndrTemp.nu_request_info.nu_input.nu_buffer_ptr = &dtDate;
NU_Request_Driver(pDtTmDriver, &ndrTemp);
if (ndrTemp.nu_status != NU_SUCCESS)
{
bRet = FALSE;
}
else
{
pDate->wYear = dtDate.wYear;
pDate->byMonth = (UINT8)dtDate.wMonth;
pDate->byDay = (UINT8)dtDate.wDay;
}
}
return bRet;
}
/****************************************************************************/
/* FUNCTION: TimSetDate */
/* DESCRIPTION:设置当前日期 */
/* INPUTS: */
/* OUTPUTS: pDate - 当前日期 */
/* RETURN: NONE */
/****************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ==============================================*/
/* 谢永良 2002-09-26 创建 */
/****************************************************************************/
BOOL TimSetDate(DateType* pDate)
{
NU_DRIVER *pDtTmDriver;
NU_DRIVER_REQUEST ndrTemp;
SYSTEM_DATETIME dtDate;
BOOL bRet = TRUE;
if ((pDtTmDriver = GetIODriverFromName((UINT8*)DRV_NAME_DATETIME)) == NULL)
{
bRet = FALSE;
}
else
{
dtDate.wYear = pDate->wYear;
dtDate.wMonth = pDate->byMonth;
dtDate.wDay = pDate->byDay;
ndrTemp.nu_function = NU_OUTPUT;
ndrTemp.nu_timeout = NU_NO_SUSPEND;
ndrTemp.nu_supplemental = DTTM_IO_DATE;
ndrTemp.nu_request_info.nu_output.nu_buffer_ptr = &dtDate;
NU_Request_Driver(pDtTmDriver, &ndrTemp);
if(ndrTemp.nu_status != NU_SUCCESS)
{
bRet = FALSE;
}
}
return bRet;
}
/****************************************************************************/
/* FUNCTION: TimGetTime */
/* DESCRIPTION:得到当前时间 */
/* INPUTS: */
/* OUTPUTS: pTime - 当前时间 */
/* RETURN: 返回取时间是否成功 */
/****************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ==============================================*/
/* 谢永良 2002-09-26 创建 */
/* gaolinhui 2006-1-23 */
/****************************************************************************/
BOOL TimGetTime(TimeType *pTime)
{
NU_DRIVER *pDtTmDriver;
NU_DRIVER_REQUEST ndrTemp;
SYSTEM_DATETIME dtTime;
BOOL bRet = TRUE;
memset(pTime, 0, sizeof(TimeType));
if ((pDtTmDriver = GetIODriverFromName((UINT8*)DRV_NAME_DATETIME)) == NULL)
{
bRet = FALSE;
}
else
{
ndrTemp.nu_function = NU_INPUT;
ndrTemp.nu_timeout = NU_NO_SUSPEND;
ndrTemp.nu_supplemental = DTTM_IO_TIME;
ndrTemp.nu_request_info.nu_input.nu_buffer_ptr = &dtTime;
NU_Request_Driver(pDtTmDriver, &ndrTemp);
if (ndrTemp.nu_status != NU_SUCCESS)
{
bRet = FALSE;
}
else
{
pTime->bySecond = (UINT8)dtTime.wSecond;
pTime->byMinute = (UINT8)dtTime.wMinute;
pTime->byHour = (UINT8)dtTime.wHour;
}
}
return bRet;
}
/****************************************************************************/
/* FUNCTION: TimSetTime */
/* DESCRIPTION:设置当前时间 */
/* INPUTS: */
/* OUTPUTS: pTime - 当前时间 */
/* RETURN: TRUE - 设置时间成功,否则返回FALSE */
/****************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ==============================================*/
/* 谢永良 2002-09-26 创建 */
/* 高林辉 2006-01-23 */
/****************************************************************************/
BOOL TimSetTime(TimeType* pTime)
{
NU_DRIVER *pDtTmDriver;
NU_DRIVER_REQUEST ndrTemp;
SYSTEM_DATETIME dtTime;
BOOL bRet = TRUE;
if ((pDtTmDriver = GetIODriverFromName((UINT8*)DRV_NAME_DATETIME)) == NULL)
{
bRet = FALSE;
}
else
{
dtTime.wHour = pTime->byHour;
dtTime.wMinute = pTime->byMinute;
dtTime.wSecond = pTime->bySecond;
ndrTemp.nu_function = NU_OUTPUT;
ndrTemp.nu_timeout = NU_NO_SUSPEND;
ndrTemp.nu_supplemental = DTTM_IO_TIME;
ndrTemp.nu_request_info.nu_input.nu_buffer_ptr = &dtTime;
if(NU_Request_Driver(pDtTmDriver, &ndrTemp) != NU_SUCCESS)
{
bRet = FALSE;
}
}
return bRet;
}
/****************************************************************************/
/* FUNCTION: IsAlarmArrive */
/* DESCRIPTION:当前系统时钟时间是否为闹铃时间. */
/* INPUTS: */
/* OUTPUTS: */
/* RETURN: TRUE/FALSE */
/****************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ==============================================*/
/* GAOLINHUI 2006-3-22 创建 */
/****************************************************************************/
//
BOOL IsAlarmArrive(VOID)
{
DateType date,AlaDate;
TimeType time,AlaTime;
//取系统时间和日期
TimGetDate(&date);
TimGetTime(&time);
//取闹铃日期时间
TimGetAlarmDate(&AlaDate);
TimGetAlarmTime(&AlaTime);
//比较时间日期
if(TimDateTimeCompare(&date,&time,&AlaDate,&AlaTime) == 0)
{
return TRUE;
}
else
{
return FALSE;
}
}
/****************************************************************************/
/* FUNCTION: TimGetAlarm */
/* DESCRIPTION:得到当前Alarm */
/* INPUTS: */
/* OUTPUTS: pTime - 时间 */
/* pDate - 日期 */
/* RETURN: NONE */
/****************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ==============================================*/
/* 谢永良 2002-09-26 创建 */
/* GAOLINHUI 2006-1-23 修改接口返回为BOOL */
/****************************************************************************/
BOOL TimGetAlarm(DateType* pDate,TimeType* pTime)
{
NU_DRIVER *pDtTmDriver;
NU_DRIVER_REQUEST ndrTemp;
SYSTEM_DATETIME dtDateTime;
BOOL bRet = TRUE;
memset(pTime, 0, sizeof(TimeType));
memset(pDate, 0, sizeof(DateType));
if ((pDtTmDriver = GetIODriverFromName((UINT8*)DRV_NAME_ALARM)) == NULL)
{
bRet = FALSE;
}
else
{
ndrTemp.nu_function = NU_INPUT;
ndrTemp.nu_timeout = NU_NO_SUSPEND;
ndrTemp.nu_request_info.nu_input.nu_buffer_ptr = &dtDateTime;
NU_Request_Driver(pDtTmDriver, &ndrTemp);
if (ndrTemp.nu_status != NU_SUCCESS)
{
bRet = FALSE;
}
else
{
pDate->wYear = (UINT16)dtDateTime.wYear;
pDate->byMonth = (UINT8)dtDateTime.wMonth;
pDate->byDay = (UINT8)dtDateTime.wDay;
pTime->byHour = (UINT8)dtDateTime.wHour;
pTime->byMinute = (UINT8)dtDateTime.wMinute;
}
}
return bRet;
}
/****************************************************************************/
/* FUNCTION: TimSetAlarm */
/* DESCRIPTION:设置当前Alarm */
/* INPUTS: */
/* OUTPUTS: pTime - 时间 */
/* pDate - 日期 */
/* RETURN: NONE */
/****************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ==============================================*/
/* 谢永良 2002-09-26 创建 */
/* GAOLINHUI 2006-1-23 修改接口返回为BOOL */
/****************************************************************************/
BOOL TimSetAlarm(DateType* pDate,TimeType* pTime)
{
NU_DRIVER *pDtTmDriver;
NU_DRIVER_REQUEST ndrTemp;
SYSTEM_DATETIME dtDateTime;
BOOL bRet = TRUE;
if ((pDtTmDriver = GetIODriverFromName((UINT8*)DRV_NAME_ALARM)) == NULL)
{
bRet = FALSE;
}
else
{
dtDateTime.wYear = pDate->wYear;
dtDateTime.wMonth = pDate->byMonth;
dtDateTime.wDay = pDate->byDay;
dtDateTime.wHour = pTime->byHour;
dtDateTime.wMinute = pTime->byMinute;
ndrTemp.nu_function = NU_OUTPUT;
ndrTemp.nu_timeout = NU_NO_SUSPEND;
ndrTemp.nu_request_info.nu_output.nu_buffer_ptr = &dtDateTime;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -