TEST(LightScheduler, ScheduleWeekEnd) { LightScheduler_ScheduleTurnOn(3, WEEKEND, 1200); FakeTimeService_SetDay(FRIDAY); FakeTimeService_SetMinute(1200); LightScheduler_WakeUp(); TEST_ASSERT_EQUAL(LIGHT_ID_UNKNOWN, LightControllerSpy_GetLastId()); TEST_ASSERT_EQUAL(LIGHT_STATE_UNKNOWN, LightControllerSpy_GetLastState()); FakeTimeService_SetDay(SATURDAY); FakeTimeService_SetMinute(1200); LightScheduler_WakeUp(); TEST_ASSERT_EQUAL(3, LightControllerSpy_GetLastId()); TEST_ASSERT_EQUAL(1, LightControllerSpy_GetLastState()); LightController_TurnOff(3); FakeTimeService_SetDay(SUNDAY); FakeTimeService_SetMinute(1200); LightScheduler_WakeUp(); TEST_ASSERT_EQUAL(3, LightControllerSpy_GetLastId()); TEST_ASSERT_EQUAL(1, LightControllerSpy_GetLastState()); LightController_Create(); FakeTimeService_SetDay(MONDAY); FakeTimeService_SetMinute(1200); LightScheduler_WakeUp(); TEST_ASSERT_EQUAL(LIGHT_ID_UNKNOWN, LightControllerSpy_GetLastId()); TEST_ASSERT_EQUAL(LIGHT_STATE_UNKNOWN, LightControllerSpy_GetLastState()); }
static void operateLight(ScheduledLightEvent * lightEvent) { if (TURN_ON == lightEvent->event) LightController_TurnOn(lightEvent->id); else if (TURN_OFF == lightEvent->event) LightController_TurnOff(lightEvent->id); }
TEST(LightControllerSpy, RememberAllLightStates) { LightController_TurnOn(0); LightController_TurnOff(31); LONGS_EQUAL(LIGHT_ON, LightControllerSpy_GetLightState(0)); LONGS_EQUAL(LIGHT_OFF, LightControllerSpy_GetLightState(31)); }
/************************************************** * ライトを操作する **************************************************/ static void _operateLight(SCHEDULED_LIGHT_EVENT *light_event) { switch(light_event->event) { case TURN_ON: LightController_TurnOn(light_event->id); break; case TURN_OFF: LightController_TurnOff(light_event->id); break; default: break; } }
void LightScheduler_WakeUp(void) { int i; Time time; TimeService_GetTime(&time); Day today = time.dayOfWeek; int minuteOfDay = time.minuteOfDay; for (i = 0; i < MAX_EVENTS; i++) { /* if (eventIsReadyToExecute()) */ /* operateLight(); */ ScheduledLightEvent * event = &eventList[i]; if (event->id != UNUSED) { /* if (matchesDay(time, event)) */ Day day = event->day; if ( (day == EVERYDAY) || (day == today) || (day == WEEKEND && (SATURDAY == today || SUNDAY == today)) || (day == WEEKDAY && (today >= MONDAY && today <= FRIDAY))) { /* it's the right day */ if (minuteOfDay == event->minuteOfDay + event->randomMinutes) { /* operateLight(event); */ if (TURN_ON == event->event) LightController_TurnOn(event->id); else if (TURN_OFF == event->event) LightController_TurnOff(event->id); /* resetRandomize(event); */ if (event->randomize == RANDOM_ON) event->randomMinutes = RandomMinute_Get(); else event->randomMinutes = 0; } } } } }
void LightScheduler_WakeUp(void) { int i; Time time; TimeService_GetTime(&time); Day td = time.dayOfWeek; int min = time.minuteOfDay; for (i = 0; i < MAX_EVENTS; i++) { ScheduledLightEvent * se = &eventList[i]; if (se->id != UNUSED) { Day d = se->day; if ( (d == EVERYDAY) || (d == td) || (d == WEEKEND && (SATURDAY == td || SUNDAY == td)) || (d == WEEKDAY && (td >= MONDAY && td <= FRIDAY))) { /* it's the right day */ if (min == se->minuteOfDay + se->randomMinutes) { if (TURN_ON == se->event) LightController_TurnOn(se->id); else if (TURN_OFF == se->event) LightController_TurnOff(se->id); if (se->randomize == RANDOM_ON) se->randomMinutes = RandomMinute_Get(); else se->randomMinutes = 0; } } } } }