/////////////////////////////////////////////////////////////// // SendCommandToEngine // ////////////////////////////////////////////////////////////// Command::Dpt_Error AlarmStatus::SendCommandToEngine( DPT_TAG_T hba, String_List** output ) { Dpt_Error err; switch ( alarmCmd ) { case On: // If the alarm is not disabled then we can send // down the alarm on message. if ( !alarmDisabled ) { err |= engine->Send( MSG_ALARM_ON, hba ); if ( !err.Is_Error() ) { alarmOn = 1; } } else { //(**output).add_Item( STR_CANT_DO_ALARM ); } err |= GetAlarmStatus( hba , output ); break; case Off: // If the alarm is not disabled then we can send // down the alarm off message. if ( !alarmDisabled ) { err |= engine->Send( MSG_ALARM_OFF, hba ); if ( !err.Is_Error() ) { alarmOn = 0; } } else { //(**output).add_Item( STR_CANT_DO_ALARM ); } err |= GetAlarmStatus( hba , output ); break; case Enable: err |= EnableAlarm( Enable, hba ); err |= GetAlarmStatus( hba , output ); break; case Disable: err |= EnableAlarm( Disable, hba ); err |= GetAlarmStatus( hba , output ); break; case Status: err |= GetAlarmStatus( hba , output ); break; } return( err ); }
BOOL CheckAlarmTime(BYTE AlarmNum, BYTE AlarmMode, RTC_DATE_TIME* Time) { if(GetAlarmStatus(AlarmNum) == 2) { DBG(("闹钟由关闭到打开,注意调整闹钟时间\n")); if((AlarmMode <= ALARM_MODE_PER_WEEK) && (AlarmMode >= ALARM_MODE_ONCE_ONLY)) { gAlarmMode = AlarmMode; } else { gAlarmMode = ALARM_MODE_ONCE_ONLY; } } if(AlarmMode == ALARM_MODE_ONCE_ONLY) { if(CheckTimeIsValid(Time) == FALSE) { DBG(("闹钟时间非法已纠正\n")); } } else if(AlarmMode == ALARM_MODE_PER_DAY) { Time->Year = 1980; Time->Mon = 1; Time->Date = 1; } else if(AlarmMode == ALARM_MODE_PER_WEEK) { Time->Year = 1980; Time->Mon = 1; if(Time->WDay > 6) { Time->WDay = WeekDayGet(DateToDays(Time)); } } else { return FALSE; } return TRUE; }
//这2个函数可以放在lib中,...结束 VOID RtcCtrlInit(VOID) { #ifdef FUNC_UARTDBG_EN BYTE i; #endif #ifdef FUNC_ALARM_EN extern BYTE GetRtcCurAlarmNum(VOID); InitRtc(gAlarmList, sizeof(gAlarmList) / sizeof(AlARM_INFO)); gCurAlarmNum = GetRtcCurAlarmNum(); //0表示没有闹钟 DBG(("gCurAlarmNum:%02BX\n", gCurAlarmNum)); #else InitRtc(NULL, 0); // 该函数必须调用 #endif RtcState = RTC_STATE_IDLE; RtcSubState = RTC_SET_NONE; RtcUpdateDisplay = FALSE; RtcFlag = 1; RtcAutOutTimeCount = 0; TimeOutSet(&RtcReadTimer, 0); TimeOutSet(&RtcSetCntTimer, 0); #ifdef FUNC_ALARM_EN #ifdef FUNC_BREAK_POINT_EN BP_SaveInfo((BYTE *)&gBreakPointInfo.PowerMemory.AlarmList2Store, sizeof(gBreakPointInfo.PowerMemory.AlarmList2Store)); #endif #ifdef FUNC_UARTDBG_EN for(i = 0; i < MAX_ALARM_NUM; i++) { DBG(("gpAlarmList[%bu].AlarmMode:%bx,", i, gAlarmList[i].AlarmMode)); DBG(("gAlarmList[%bu].AlarmTimeAsSeconds:%lu,", i, gAlarmList[i].AlarmTimeAsSeconds)); DBG(("gAlarmList[%bu].AlarmStatus:%bx\n", i, gAlarmList[i].AlarmStatus)); } #endif #ifdef AU6210K_CAR_MODEL_DEMO DBG(("InitRtc2\n")); RtcSourceState = RTC_SOURCE_CLOCK; DBG(("RtcSourceState=%bu\n", RtcSourceState)); if(GetAlarmStatus(RtcAlarmNum)) { gAlarmState = ALARM_STATUS_OPEN; DBG(("gAlarmState= ALARM_STATUS_OPEN\n")); } else { gAlarmState = ALARM_STATUS_CLOSE; DBG(("gAlarmState= ALARM_STATUS_CLOSE\n")); } #endif #ifdef AU6210K_BOOMBOX_DEMO if(GetAlarmStatus(1)) { gAlarm1State = ALARM_STATUS_OPEN; DBG(("gAlarm1State= ALARM1_STATUS_OPEN\n")); } else { gAlarm1State = ALARM_STATUS_CLOSE; DBG(("gAlarm1State= ALARM1_STATUS_CLOSE\n")); } if(GetAlarmStatus(2)) { gAlarm2State = ALARM_STATUS_OPEN; DBG(("gAlarm2State= ALARM2_STATUS_OPEN\n")); } else { gAlarm2State = ALARM_STATUS_CLOSE; DBG(("gAlarm2State= ALARM2_STATUS_CLOSE\n")); } #endif #endif // //测试用,客户根据实际情况设置。 // gRtcTime.Year = 1980; // gRtcTime.Mon = 1; // gRtcTime.Date = 1; // gRtcTime.WDay = 1; // 0:星期日 // gRtcTime.Hour = 7; // gRtcTime.Min = 0; // gRtcTime.Sec = 0; // SetRTCCurrTime(&gRtcTime); // gAlarmTime.Year = 1980; // gAlarmTime.Mon = 1; // gAlarmTime.Date = 1; // gAlarmTime.WDay = 1; // gAlarmTime.Hour = 8; // gAlarmTime.Min = 0; // gAlarmTime.Sec = 0; // gAlarmMode = ALARM_MODE_ONCE_ONLY; // SetAlarmTime(RtcAlarmNum, gAlarmMode, &gAlarmTime); #ifdef AU6210K_BOOMBOX_DEMO gRtcTime.Hour = 12; gRtcTime.Min = 0; gRtcTime.Sec = 0; SetRTCCurrTime(&gRtcTime); gAlarmTime.Hour = 0; gAlarmTime.Min = 0; gAlarmTime.Sec = 0; gAlarmMode = ALARM_MODE_PER_DAY; SetAlarmTime(1, gAlarmMode, &gAlarmTime); SetAlarmTime(2, gAlarmMode, &gAlarmTime); #endif }
static VOID RtcSourceEnter(VOID) { RtcFlag = 1; switch(RtcSourceState) { case RTC_SOURCE_CLOCK: RtcSubState = RTC_SET_HR; RtcState = RTC_STATE_SET_TIME; DBG(("RTC_SOURCE_CLOCK\n")); break; case RTC_SOURCE_YEAR: RtcSubState = RTC_SET_YEAR; RtcState = RTC_STATE_SET_TIME; gRtcRdWrFlag = SET_RTC_TIME_YEAR; DBG(("RTC_SOURCE_YEAR\n")); break; case RTC_SOURCE_MON: RtcSubState = RTC_SET_MON; RtcState = RTC_STATE_SET_TIME; DBG(("RTC_SOURCE_MON\n")); break; case RTC_SOURCE_ALARM: RtcFlag = 2; RtcUpdateDisplay = TRUE; if((RtcAlarmNum > 0) && (RtcAlarmNum < MAX_ALARM_NUM)) { gAlarmMode = GetAlarmTime(RtcAlarmNum, &gAlarmTime); if((gAlarmMode < ALARM_MODE_ONCE_ONLY) || (gAlarmMode > ALARM_MODE_PER_WEEK)) { gAlarmMode = ALARM_MODE_PER_DAY; } CheckAlarmTime(RtcAlarmNum, gAlarmMode, &gAlarmTime); } else { DBG(("闹钟错误\n")); } RtcSubState = RTC_SET_HR; RtcState = RTC_STATE_SET_ALARM; DBG(("RTC_SOURCE_ALARM\n")); break; case RTC_SOURCE_ONOFF: RtcSubState = RTC_SET_ALARM_ONOFF; RtcState = RTC_STATE_SET_ALARM; if(GetAlarmStatus(RtcAlarmNum)) { gAlarmState = ALARM_STATUS_OPEN; } else { gAlarmState = ALARM_STATUS_CLOSE; } DBG(("RTC_SOURCE_ONOFF\n")); break; default: break; } }