Пример #1
0
/* alarm_task: raises the alarm */
void alarm_task(void)
{
    /* local copy of Clock.alarm_enabled */
    int alarm_enabled = 1;

    while(1)
    {
        /* wait for alarm time */    
        si_sem_wait(&Clock.start_alarm);    

        /* update local copy of Clock.alarm_enabled */
        si_sem_wait(&Clock.mutex);
        alarm_enabled = Clock.alarm_enabled;
        si_sem_signal(&Clock.mutex);

        while(alarm_enabled)
        {
            /* trigger the alarm */
            display_alarm_text();

            /* wait one second */ 
            si_wait_n_ms(10000);

            /* update local copy of Clock.alarm_enabled */
            si_sem_wait(&Clock.mutex);
            alarm_enabled = Clock.alarm_enabled;
            si_sem_signal(&Clock.mutex);
        }

    }
}
Пример #2
0
/* increment_time: increments the current time with 
   one second */ 
void increment_time(void)
{
    /* reserve clock variables */ 
    si_sem_wait(&Clock.mutex); 

    /* increment time */ 
    Clock.time.seconds++; 
    if (Clock.time.seconds > 59)
    {
        Clock.time.seconds = 0; 
        Clock.time.minutes++; 
        if (Clock.time.minutes > 59)
        {
            Clock.time.minutes = 0; 
            Clock.time.hours++; 
            if (Clock.time.hours > 23)
            {
                Clock.time.hours = 0; 
            }
        }
    }
    

    /* release clock variables */ 
    si_sem_signal(&Clock.mutex); 
}
Пример #3
0
/* increment_time: increments the current time with 
   one second */ 
void increment_time(void)
{
    /* reserve clock variables */ 
    si_sem_wait(&Mutex); 

    /* increment time */ 
    Seconds++; 
    if (Seconds > 59)
    {
        Seconds = 0; 
        Minutes++; 
        if (Minutes > 59)
        {
            Minutes = 0; 
            Hours++; 
            if (Hours > 11)
            {
                Hours = 0; 
            }
        }
    }

    /* release clock variables */ 
    si_sem_signal(&Mutex); 
}
Пример #4
0
/* get_number: gets the value of Number, together with the 
   value of Even_Number, which indicates if Number is even or odd */ 
void get_number(
    int *number_value, int *even_number_value) 
{
    si_sem_wait(&Mutex);
    *number_value = Number;
    *even_number_value = Even_Number;
    si_sem_signal(&Mutex);
}
Пример #5
0
void check_alarm_time(void)
{
    si_sem_wait(&Clock.mutex); 
    if (Clock.time.seconds >= Clock.alarm_time.seconds && Clock.time.minutes >= Clock.alarm_time.minutes && Clock.time.hours >= Clock.alarm_time.hours && Clock.alarm_enabled == 1)
    {
        si_sem_signal(&Clock.start_alarm);
    }
    si_sem_signal(&Clock.mutex); 
}
Пример #6
0
/* The shall be one task for each person. All person tasks shall be implemented by the same C function, called passenger_task. */
void passenger_task(void)
{
	//printf("blaba\n");

	int id;
	int length;
	int send_task_id;
	
	int current;
	int from;
	int to;

    /* receive id */ 
    si_message_receive((char *) &id, &length, &send_task_id);
	
	current = random_level();	

	while (1)
    {
    	from = current;
    	to = random_level();
    	
    	
    	si_sem_wait(&mainlift->mutex);
        enter_floor(mainlift,id, current);//spawna
    	si_sem_signal(&mainlift->mutex);

    	printf("Passenger %d starting journey from %d to %d.\n", id, from, to);
    	
    	lift_travel(mainlift, id, from, to);//res
    	current = to;

    	printf("Passenger %d arrived at %d.\n", id, current);
    	
    	si_sem_wait(&mainlift->mutex);

        leave_floor(mainlift, id, current);//ta bort från våning

    	si_sem_signal(&mainlift->mutex);
    	
    	si_wait_n_ms(TIME_TO_NEW_JOURNEY);
    
    }
}
Пример #7
0
/* clock_set_time: set current time to hours, minutes and seconds */ 
void clock_set_time(int hours, int minutes, int seconds)
{
    si_sem_wait(&Clock.mutex); 

    Clock.time.hours = hours; 
    Clock.time.minutes = minutes; 
    Clock.time.seconds = seconds; 

    si_sem_signal(&Clock.mutex); 
}
Пример #8
0
/* clock_reset_alarm:  */ 
void clock_reset_alarm(void)
{
    si_sem_wait(&Clock.mutex); 

    Clock.alarm_enabled = 0;

    erase_alarm_time();
    erase_alarm_text();

    si_sem_signal(&Clock.mutex); 
}
Пример #9
0
/* get_time: read time from common clock variables */ 
void get_time(int *hours, int *minutes, int *seconds)
{
    /* reserve clock variables */ 
    si_sem_wait(&Clock.mutex); 

    /* read values */ 
    *hours = Clock.time.hours; 
    *minutes = Clock.time.minutes; 
    *seconds = Clock.time.seconds;
        
    /* release clock variables */ 
    si_sem_signal(&Clock.mutex); 
}
Пример #10
0
/* get_time: read time from common clock variables */ 
void get_time(int *hours, int *minutes, int *seconds)
{
    /* reserve clock variables */ 
    si_sem_wait(&Mutex); 

    /* read values */ 
    *hours = Hours; 
    *minutes = Minutes; 
    *seconds = Seconds;
        
    /* release clock variables */ 
    si_sem_signal(&Mutex); 
}
Пример #11
0
/* set_time: set time to hours, minutes and seconds */ 
void set_time(int hours, int minutes, int seconds)
{
    /* reserve clock variables */ 
    si_sem_wait(&Mutex); 

    /* assign values */
    Hours = hours; 
    Minutes = minutes;
    Seconds = seconds; 
    
    /* release clock variables */ 
    si_sem_signal(&Mutex); 
}
Пример #12
0
/* clock_set_alarm: set current time to hours, minutes and seconds */ 
void clock_set_alarm(int hours, int minutes, int seconds)
{
    si_sem_wait(&Clock.mutex); 

    Clock.alarm_time.hours = hours; 
    Clock.alarm_time.minutes = minutes; 
    Clock.alarm_time.seconds = seconds; 

    Clock.alarm_enabled = 1;

    display_alarm_time(hours, minutes, seconds);

    si_sem_signal(&Clock.mutex); 
}
Пример #13
0
/* set_number: sets Number and updates Even_Number */
void set_number(int new_number) 
{
    si_sem_wait(&Mutex);
    Number = new_number;
    if (Number % 2 == 0) 
    {
        Even_Number = 1;
    } 
    else 
    {
        Even_Number = 0;
    }
    si_sem_signal(&Mutex);
}
Пример #14
0
/* decrement_number: decrements Number with dec_value, 
   and updates Even_Number */
void decrement_number(int dec_value) 
{
    si_sem_wait(&Mutex);
    Number -= dec_value;
    if (Number % 2 == 0) 
    {
        Even_Number = 1;
    } 
    else 
    {
        Even_Number = 0;
    }
    si_sem_signal(&Mutex);
}
Пример #15
0
/* increment_number: increments Number by adding 
   inc_value to Number, and updates Even_Number */ 
void increment_number(int inc_value) 
{
    si_sem_wait(&Mutex);
    /* fig_begin number_inc_value */ 
    Number += inc_value;
    long_calculation();
    /* fig_end number_inc_value */ 

    if (Number % 2 == 0) 
    {
        Even_Number = 1;
    } 
    else 
    {
        Even_Number = 0;
    }
    si_sem_signal(&Mutex); 
}
Пример #16
0
void stop_task(void)
{
    si_sem_wait(&Task_Stop_Sem); 
}