WORD API_SetAlarm(WORD _Number, BYTE _Mask, BYTE _Repeat, BYTE _Month, BYTE _Day, BYTE _Hour, BYTE _Minute, BYTE _Second)
{
RTCC_STRUCT_TIME StrucTime;
RTCC_STRUCT_DATE StrucDate;
REAL_TIME mRtccSw;
BYTE Dummy = 0;
WORD_VAL sender;
sender.byte.HB = DCID[0][0];
sender.byte.LB = DCID[0][1];
if((_Number&0x0fff) >= MAX_ALARM){
API_Error(sender.Val, ERR_API_SetAlarm_MAX_ALARM);
return ERR_API_SetAlarm_MAX_ALARM;
}
Alarm[_Number&0x0fff].Active = (_Number&0xf000)>>12;
_Number &= 0x0fff;
mRtccSw = API_GetRTCC();
StrucDate.Year = mRtccSw.Date.Year;
StrucDate.Month = _Month;
StrucDate.Day = _Day;
StrucTime.Hour = _Hour;
StrucTime.Minute = _Minute;
StrucTime.Second = _Second;
StrucTime.Days = RTCC_SDateToTStampDate( StrucDate );
Alarm[_Number].Date = RTCC_TStampDateToSDate( StrucTime.Days );
Alarm[_Number].Time = StrucTime;
StrucTime.Thousandth = 0;
#if defined(RTCC_SW_DISABLE)
if(_Number == 0){
ALRMCFG = (0x03 | (_Mask<<2));
ALRMVALL = (Alarm[_Number].Date.Year%10) + ((Alarm[_Number].Date.Year/10)<<4);
ALRMCFG = (0x02 | (_Mask<<2));
ALRMVALL = (Alarm[_Number].Date.Day%10) + ((Alarm[_Number].Date.Day/10)<<4);
ALRMVALH = (Alarm[_Number].Date.Month%10) + ((Alarm[_Number].Date.Month/10)<<4);
ALRMCFG = (0x01 | (_Mask<<2));
ALRMVALL = (Alarm[_Number].Time.Hour%10) + ((Alarm[_Number].Time.Hour/10)<<4);
ALRMVALH = (Alarm[_Number].Date.DayOfWeek%10) + ((Alarm[_Number].Date.DayOfWeek/10)<<4);
ALRMCFG = (_Mask<<2);
ALRMVALL = (Alarm[_Number].Time.Second%10) + ((Alarm[_Number].Time.Second/10)<<4);
ALRMVALH = (Alarm[_Number].Time.Minute%10) + ((Alarm[_Number].Time.Minute/10)<<4);
if(_Repeat == 0){ //ide do nekonecna
ALRMRPT = 0xff;
ALRMCFG |= 0x40;
}
else ALRMRPT = (_Repeat-1);
ALRMEN = 1; //enable ALARM
}
#endif
return ERR_OK;
}