예제 #1
0
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());
}
예제 #2
0
static void operateLight(ScheduledLightEvent * lightEvent)
{
    if (TURN_ON == lightEvent->event)
        LightController_TurnOn(lightEvent->id);
    else if (TURN_OFF == lightEvent->event)
        LightController_TurnOff(lightEvent->id);
}
예제 #3
0
TEST(LightControllerSpy, RememberAllLightStates)
{
    LightController_TurnOn(0);
    LightController_TurnOff(31);
    LONGS_EQUAL(LIGHT_ON, LightControllerSpy_GetLightState(0));
    LONGS_EQUAL(LIGHT_OFF, LightControllerSpy_GetLightState(31));
}
예제 #4
0
/**************************************************
 * ライトを操作する
 **************************************************/
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;
	}
}
예제 #5
0
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;

                }
            }
        }
    }
}
예제 #6
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;

                }
            }
        }
    }
}