?? alarm.c
字號:
#include "def.h"
#include "2410addr.h"
#include "2410lib.h"
#include "rtcapi.h"
#include "alarm.h"
/*
ALARM初始化,當(dāng)系統(tǒng)地一次運(yùn)行或者復(fù)位時(shí)運(yùn)行。用于重組ALARM數(shù)據(jù)并啟動ALARM。
輸入:無
輸出:TRUE--成功;FALSE--失敗
*/
char ALM_Init(void)
{
return 0;
}
/*
APP注冊,如果APP要使用ALARM功能,則必須先應(yīng)用這個(gè)函數(shù)注冊。
輸入:pAlmApp--要增加的APP注冊項(xiàng)結(jié)構(gòu)指針
輸出:TRUE--成功;FALSE--失敗
*/
char ALM_RegisterApp(ALM_APP_T almApp)
{
return 0;
}
/*
APP銷注,如果APP不再使用ALARM功能,則需要應(yīng)用這個(gè)函數(shù)銷注。
輸入:appName--應(yīng)用程序標(biāo)識
輸出:TRUE--成功;FALSE--失敗
*/
char ALM_DeRegisterApp(const char *appName)
{
return 0;
}
/*
系統(tǒng)調(diào)用,系統(tǒng)會檢測到RTC產(chǎn)生中斷時(shí),調(diào)用這個(gè)函數(shù)。獲取當(dāng)前響鬧ALARM信息和個(gè)數(shù)
輸入:pAlmInfo--傳給系統(tǒng)的目的ALARM信息數(shù)組,
pAlmCount--數(shù)組中元素個(gè)數(shù),
maxRequest--最大需求個(gè)數(shù)
輸出:TRUE--成功;FALSE--失敗
*/
BYTE ALM_GetAlarmInfo(ALM_CINFO_T *pAlmInfo, WORD *pAlmCount, WORD maxRequest)
{
return 0;
}
/*
查看ALARM項(xiàng)下次工作的時(shí)間
輸入:pInDT--要查看的時(shí)間指針;pOutDT--轉(zhuǎn)換后時(shí)間指針;itemType--要查看的ALARM事件類型;interval--固定間隔時(shí)間長度(如果不是固定間隔類型則為零)
輸出:TRUE--成功;FALSE--沒有相應(yīng)時(shí)間
*/
char ALM_TestResponse(SYSTEMTIME *pInDT, SYSTEMTIME *pOutDT, char itemType, DWORD interval)
{
return 0;
}
/*
增加ALARM事件,當(dāng)增加一個(gè)ALARM項(xiàng)后,在該項(xiàng)生命期內(nèi),編號不會改變。
輸入:pAlmItem--要增加的ALARM事件結(jié)構(gòu)指針
輸出:ALARM事件序號
*/
DWORD ALM_AddAlarm(ALM_ITEM_T *pAlmItem)
{
return 0;
}
/*
刪除ALARM事件
輸入:itemNo--要刪除的ALARM事件序號
輸出:ALARM事件序號
*/
DWORD ALM_DelAlarm(DWORD itemNo)
{
return 0;
}
/*
修改ALARM事件
輸入:almItem--要修改的ALARM事件結(jié)構(gòu)指針;itemNo--要修改的ALARM事件序號
輸出:ALARM事件序號
*/
DWORD ALM_ModifyAlarm(ALM_ITEM_T *pAlmItem, DWORD itemNo)
{
return 0;
}
/*
重新標(biāo)記ALARM事件,用于系統(tǒng)崩潰后重建ALARM
輸入:pAlmItem--要修改的ALARM事件結(jié)構(gòu)指針;itemNo--要修改的ALARM事件序號
輸出:TRUE--成功;FALSE--失敗
*/
BYTE ALM_RemarkAlmItem(ALM_ITEM_T *pAlmItem, DWORD itemNo)
{
return 0;
}
/**************************************************************/
static U8 AlarmOn = 0;
static void (*AlarmCallBack)(void);
static void __irq IsrAlarm(void)
{
// WrUTXH0('A');
if(AlarmCallBack)
(*AlarmCallBack)();
ClearPending(BIT_RTC);
}
void OpenAlarm(void (*cbf)(void))
{
AlarmOn = 1;
rRTCALM = (0x7f); //enable alarm
//唯一指定的時(shí)間,年/月/日/時(shí)/分/秒方式只觸發(fā)一次
//若要按年/季/月/時(shí)/分固定間隔重觸發(fā)需要再設(shè)alarm的date,time
AlarmCallBack = cbf;
pISR_RTC = (U32)IsrAlarm;
ClearPending(BIT_RTC);
EnableIrq(BIT_RTC);
}
void CloseAlarm(void)
{
AlarmOn = 0;
rRTCALM = 0; //disable alarm
AlarmCallBack = NULL;
DisableIrq(BIT_RTC);
}
U8 AlarmSetDate(DATETIME_T *date)
{
if(AlarmOn&&RtcCheckDateValid(date->year, date->month, date->day))
{
U8 tmp;
if((date->year<2000)||(date->year>2999))
return FALSE;
if((date->hour>23)||(date->minute>59)||(date->second>59))
return FALSE;
rRTCCON = 1; //enable RTC write;
tmp = date->second;
rALMSEC = ((tmp/10)<<4)+(tmp%10);
tmp = date->minute;
rALMMIN = ((tmp/10)<<4)+(tmp%10);
tmp = date->hour;
rALMHOUR = ((tmp/10)<<4)+(tmp%10);
tmp = date->day;
rALMDATE = ((tmp/10)<<4)+(tmp%10);
tmp = date->month;
rALMMON = ((tmp/10)<<4)+(tmp%10);
tmp = date->year-2000;
rALMYEAR = ((tmp/10)<<4)+(tmp%10);
rRTCCON = 0; //disable RTC write
return TRUE;
}
return FALSE;
}
U8 AlarmGetDate(DATETIME_T *date)
{
if(AlarmOn)
{
U8 tmp;
tmp = rALMYEAR;
date->year = (tmp>>4)*10+(tmp&0xf);
tmp = rALMMON;
date->month = (tmp>>4)*10+(tmp&0xf);
tmp = rALMDATE;
date->day = (tmp>>4)*10+(tmp&0xf);
tmp = rALMHOUR;
date->hour = (tmp>>4)*10+(tmp&0xf);
tmp = rALMMIN;
date->minute = (tmp>>4)*10+(tmp&0xf);
tmp = rALMSEC;
date->second = (tmp>>4)*10+(tmp&0xf);
return TRUE;
}
return FALSE;
}
/*
ALARM觸發(fā)后,通過下列接口通知OS,OS進(jìn)行消息封裝后提供給給GUI或應(yīng)用層
輸入:沒有
返回:沒有
注意:AlarmProc()函數(shù)只能在高級中HISR中被調(diào)用,否則系統(tǒng)異常。
*/
void AlarmProc(void)
{
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -