timemng.c

来自「好记星的控件,包括button,list,对文件操作」· C语言 代码 · 共 757 行 · 第 1/2 页

C
757
字号
		NU_Request_Driver(pDtTmDriver, &ndrTemp);
		if(ndrTemp.nu_status != NU_SUCCESS)
		{
			bRet = FALSE;
		}
	}
	return bRet;
}


/****************************************************************************/
/* FUNCTION:   TimGetAlarmTime                                             */
/* DESCRIPTION:获取Alarm时间	                                            */
/* INPUTS:                                                                 */
/* OUTPUTS:    pTime  -  时间                                              */
/*              pDate  -  日期                                              */
/* RETURN:     NONE                                                        */
/****************************************************************************/
/*  NAME           DATE               REMARKS                               */
/* ==========  ============   ==============================================*/
/*  张发顺     2002-09-26      创建                                         */
/****************************************************************************/

VOID TimGetAlarmTime(TimeType *pTime)
{
    pTime->byHour    = g_byAlarmHour;
    pTime->byMinute  = g_byAlarmMinute;
    pTime->bySecond  = 0;
}


/****************************************************************************/
/* FUNCTION:   TimGetAlarmDate                                             */
/* DESCRIPTION:获取Alarm日期	                                            */
/* INPUTS:                                                                 */
/* OUTPUTS:    pTime  -  时间                                              */
/*              pDate  -  日期                                              */
/* RETURN:     NONE                                                        */
/****************************************************************************/
/*  NAME           DATE               REMARKS                               */
/* ==========  ============   ==============================================*/
/*  张发顺     2002-09-26      创建                                         */
/****************************************************************************/
VOID TimGetAlarmDate(DateType *pDate)
{
    pDate->wYear     = g_wAlarmYear;
    pDate->byMonth    = g_byAlarmMonth;
    pDate->byDay      = g_byAlarmDay;
}

/****************************************************************************/
/* FUNCTION:   TimDisableAlarm                                             */
/* DESCRIPTION:设置Alarm无效                                               */
/* INPUTS:                                                                 */
/* RETURN:     NONE                                                        */
/****************************************************************************/
/*  NAME           DATE               REMARKS                               */
/* ==========  ============   ==============================================*/
/* GAOLINHUI   2006-5-22													*/
/****************************************************************************/
VOID	TimDisableAlarm(VOID)
{
    NU_DRIVER          *pDtTmDriver;
    NU_DRIVER_REQUEST   ndrTemp;
    if ((pDtTmDriver = GetIODriverFromName((UINT8*)DRV_NAME_ALARM)) != NULL)
 	{
		ndrTemp.nu_function = NU_STATUS;
		ndrTemp.nu_timeout  = NU_NO_SUSPEND;
		ndrTemp.nu_supplemental = ALARM_IOCTL_DISABLE;
		NU_Request_Driver(pDtTmDriver, &ndrTemp);
	}
	return;
}

/****************************************************************************/
/* FUNCTION:   TimEnableAlarm                                              */
/* DESCRIPTION:设置Alarm无效                                               */
/* INPUTS:                                                                 */
/* RETURN:     NONE                                                        */
/****************************************************************************/
/*  NAME           DATE               REMARKS                               */
/* ==========  ============   ==============================================*/
/* GAOLINHUI   2006-5-22													*/
/****************************************************************************/
VOID	TimEnableAlarm(VOID)
{
    NU_DRIVER          *pDtTmDriver;
    NU_DRIVER_REQUEST   ndrTemp;
    if ((pDtTmDriver = GetIODriverFromName((UINT8*)DRV_NAME_ALARM)) != NULL)
 	{
		ndrTemp.nu_function = NU_STATUS;
		ndrTemp.nu_timeout  = NU_NO_SUSPEND;
		ndrTemp.nu_supplemental = ALARM_IOCTL_ENABLE;
		NU_Request_Driver(pDtTmDriver, &ndrTemp);
	}
	return;

}


/****************************************************************************/
/* FUNCTION:   TimSearchAlarm                                             */
/* DESCRIPTION:搜索最接近当前时间的闹铃                                    */
/* INPUTS:                                                                 */
/* OUTPUTS:    pTime  -  时间                                              */
/*              pDate  -  日期                                              */
/*				pMsgBuf-  闹铃提示信息返回地址								*/
/* RETURN:     相同时间闹铃的个数,如返回0,表示没有合适的闹铃或者文件错误 */
/* Note:		搜索闹钟文件AlarmSys.ini									*/
/****************************************************************************/
/*  NAME           DATE               REMARKS                               */
/* ==========  ============   ==============================================*/
/* gaolinhui     2006-02-6				创建                                */
/****************************************************************************/
UINT	TimSearchAlarm(DateType* pDate,TimeType* pTime, UINT8* pMsgBuf)
{
	INT fp;
	UINT uAlarms = 0;
	AlarmItem mItem;
	TimeType tmptime;
	DateType tmpdate;
	UINT8	 attrTemp;
	BOOL	 bFlag = FALSE;

	// 检查文件属性,设置正常属性
	if(FileGetAttributes(&attrTemp, ALARM_SYS_FILE) == NU_SUCCESS)
	{
		if(!(attrTemp&ADIRENT))
			bFlag = TRUE;
	}
	if(!bFlag)
	{
		return uAlarms;
	}
	FileSetAttributes(ALARM_SYS_FILE, ANORMAL);
	fp = FileOpen(ALARM_SYS_FILE,FILEMODE_READONLY);
	if(fp < 0 )
	{	//打开闹铃文件失败,返回
		FileSetAttributes(ALARM_SYS_FILE, attrTemp);
		return uAlarms;
	}
	else
	{
		//验证文件的合法性
		FileRead(fp,(CHAR*)&mItem,11);
		if( memcmp(&mItem,(const void*)ALARM_FILE_TAG,11) != 0 )
		{
			FileClose(fp);
			FileSetAttributes(ALARM_SYS_FILE, attrTemp);
			return uAlarms;
		}
		else
		{
			INT i,total;
			INT8 byRet;
			TimeType systime,almtime;
			DateType sysdate,almdate;
			//首先将tmpdate赋值为最大时间日期
			tmpdate.wYear = TIM_YEARMAX;
			tmpdate.byMonth = 12;
			tmpdate.byDay = 31;
			tmptime.byHour = 23;
			tmptime.byMinute = 59;
			tmptime.bySecond = 0;
			//取得系统日期时间信息
			TimGetTime(&systime);
			TimGetDate(&sysdate);
			//闹铃文件中总的闹铃信息单元个数
			total = (FileLength(fp) - 11)/sizeof(AlarmItem);
			if(total>0)
			{
				FileSeek(fp,11,FILESEEK_BEGIN);
				//遍历文件,找到最接近当前系统时间的闹铃
				for(i = 0; (i<total)&&(uAlarms<ALARM_SAMENUMBER); i++)
				{
					FileRead(fp,(CHAR*)&mItem,sizeof(AlarmItem));
					if(!mItem.bActiveFlag)	//跳过未激活的闹铃
					{
						continue;
					}
					almdate.wYear = mItem.wYear;
					almdate.byMonth = mItem.byMonth;
					almdate.byDay = mItem.byDay;
					almtime.byHour = mItem.byHour;
					almtime.byMinute = mItem.byMinute;
					almtime.bySecond = 0;
					if(mItem.byAlarmType == ALARM_TYPE_ONCE)	//如果是单次闹钟
					{
						//如果该闹铃日期已过期则继续搜索下一个
						if(TimDateTimeCompare(&almdate,&almtime,&sysdate,&systime) <= 0 )
						{
							continue;
						}
						byRet = TimDateTimeCompare(&almdate,&almtime,&tmpdate,&tmptime);
						if(byRet > 0)
						{
							continue;
						}
						else
						{
							if(byRet < 0 )
							{
								//如果是有更接近的闹铃,清除闹铃消息buffer
								if(pMsgBuf)
								{
									*pMsgBuf = 0;
								}
								uAlarms = 0;
							}
							//加上闹铃提示信息
							if(pMsgBuf)
							{
								strncat(pMsgBuf,mItem.aMsg,ALARM_MSGLEN);
							}
							
							tmpdate = almdate;
							tmptime = almtime;
							uAlarms++;
						}
					}
					else if(mItem.byAlarmType == ALARM_TYPE_DAY)	//如果是每日闹钟
					{
						//将系统日期给闹铃日期
						almdate = sysdate;
						if(TimTimeCompare(&almtime,&systime) <= 0)
						{
							//如果闹铃时间小于当前系统时间,将闹铃时间改为后一天
							TimDateAdjust(&almdate,1);							
						}
						byRet = TimDateTimeCompare(&almdate,&almtime,&tmpdate,&tmptime);
						if(byRet > 0)
						{
							continue;
						}
						else
						{
							if(byRet < 0 )
							{
								//如果是有更接近的闹铃,清除闹铃消息buffer
								if(pMsgBuf)
								{
									*pMsgBuf = 0;
								}
								uAlarms = 0;
							}
							//加上闹铃提示信息
							if(pMsgBuf)
							{
								strncat(pMsgBuf,mItem.aMsg,ALARM_MSGLEN);
							}							
							tmpdate = almdate;
							tmptime = almtime;
							uAlarms++;
						}																		
					}
				}
			}			
		}		
	}
	//关闭文件
	FileClose(fp);
	FileSetAttributes(ALARM_SYS_FILE, attrTemp);

	//返回信息
	if(pDate)
	{
		*pDate = tmpdate;
	}
	if(pTime)
	{		
		*pTime = tmptime;
	}
	return uAlarms;	
}


/****************************************************************************/
/* FUNCTION:   TimUpdateAlarm	                                            */
/* DESCRIPTION:更新设置系统闹铃		                                    */
/* INPUTS:                                                                 */
/* OUTPUTS:    无				                                            */
/* RETURN:     无															*/
/****************************************************************************/
/*  NAME           DATE               REMARKS                               */
/* ==========  ============   ==============================================*/
/* gaolinhui     2006-02-7				创建                                */
/****************************************************************************/
VOID	TimUpdateAlarm(VOID)
{
	UINT8* pBuf;
	UINT   uAlarmNum;
	BOOL   bSuccess = FALSE;
	DateType date;
	TimeType time;
	pBuf = MemAlloc(ALARM_SAMENUMBER*ALARM_MSGLEN);
	if(pBuf)
	{
		//搜索新闹铃
		uAlarmNum = TimSearchAlarm(&date,&time,pBuf);
		//如果有找到合适的闹铃,设置新闹铃			
		if( uAlarmNum>0 )
		{
			//打开闹铃
			TimEnableAlarm();
			//设置闹铃
			if(TimSetAlarm(&date,&time))
			{
				g_wAlarmYear = date.wYear;
				g_byAlarmMonth = date.byMonth;
				g_byAlarmDay = date.byDay;
				g_byAlarmHour = time.byHour;
				g_byAlarmMinute = time.byMinute;
				g_byAlarmNumber = uAlarmNum;
				strcpy(g_aAlarmBuffer,pBuf);
				bSuccess = TRUE;
			}
		}
		//没有闹铃或者设置闹铃不成功,禁止闹铃
		if(!bSuccess)
		{
			TimDisableAlarm();
		}

		//释放内存
		MemFree(pBuf);
		pBuf = NULL;
	}
	

}

/****************************************************************************/
/* FUNCTION:   TimResetAlarmNumber                                         */
/* DESCRIPTION:将闹钟数量清 0		                                        */
/****************************************************************************/
/*  NAME           DATE               REMARKS                               */
/* ==========  ============   ==============================================*/
/*																			*/
/****************************************************************************/
VOID TimResetAlarmNumber(void)
{
	g_byAlarmNumber = 0;
	memset(g_aAlarmBuffer, 0, sizeof(g_aAlarmBuffer));
}


/****************************************************************************/
/* FUNCTION:   TimGetAlarmNumber                                           */
/* DESCRIPTION:返回当前相同时间响闹的闹铃数                                */
/* INPUTS:                                                                 */
/* OUTPUTS:    无				                                            */
/* RETURN:     无															*/
/****************************************************************************/
/*  NAME           DATE               REMARKS                               */
/* ==========  ============   ==============================================*/
/* gaolinhui     2006-02-7				创建                                */
/****************************************************************************/
UINT8	TimGetAlarmNumber(void)
{
	return g_byAlarmNumber;
}

/****************************************************************************/
/* FUNCTION:   GetAlarmMsgBuffer                                           */
/* DESCRIPTION:返回闹铃的提示信息buffer                                    */
/* INPUTS:                                                                 */
/* OUTPUTS:    闹铃的提示信息buffer                                        */
/* RETURN:     无															*/
/****************************************************************************/
/*  NAME           DATE               REMARKS                               */
/* ==========  ============   ==============================================*/
/* gaolinhui     2006-02-7				创建                                */
/****************************************************************************/
UINT8* GetAlarmMsgBuffer(VOID)
{
	return (UINT8*)g_aAlarmBuffer;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?