WORD API_SetAlarm(WORD _Number, BYTE _Mask, BYTE _Repeat, BYTE _Month, BYTE _Day, BYTE _Hour, BYTE _Minute, BYTE _Second)

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;
}