/* set_task: reads messages from the user interface, and sets the clock, or exits the program */ void * set_thread(void *unused) { /* message array */ char message[SI_UI_MAX_MESSAGE_SIZE]; /* time read from user interface */ int hours, minutes, seconds; /* set GUI size */ si_ui_set_size(400, 200); while(1) { /* read a message */ si_ui_receive(message); /* check if it is a set message */ if (strncmp(message, "set", 3) == 0) { time_from_set_message(message, &hours, &minutes, &seconds); if (time_ok(hours, minutes, seconds)) { clock_set_time(hours, minutes, seconds); } else { si_ui_show_error("Illegal value for hours, minutes or seconds"); } } else if (strncmp(message, "alarm", 5) == 0) { time_from_alarm_message(message, &hours, &minutes, &seconds); if (time_ok(hours, minutes, seconds)) { clock_set_alarm(hours, minutes, seconds); } else { si_ui_show_error("Illegal value for hours, minutes or seconds"); } } else if (strcmp(message, "reset") == 0) { clock_reset_alarm(); } /* check if it is an exit message */ else if (strcmp(message, "exit") == 0) { exit(0); } /* not a legal message */ else { si_ui_show_error("unexpected message type"); } } }
/* There shall be one task, called user_task, which receives commands from the graphical user interface. This task shall create new person tasks. A new person task shall be created when the text string new is received. The task user_task shall also contain functionality for termination of the program. The program shall be terminated when the text string exit is received. */ void user_task(void) { /* set size of GUI window */ si_ui_set_size(670, 700); int n_persons = 0; /* message array */ char message[SI_UI_MAX_MESSAGE_SIZE]; while(1) { /* read a message */ si_ui_receive(message); /* check if it is a set time message */ if (strncmp(message, "new", 3) == 0) { printf("blaba!!!!\n"); if (n_persons == MAX_N_PERSONS) { si_ui_show_error("Failure to comply: Overpopulation!"); } else { int id = n_persons++; si_task_create(passenger_task, &Passenger_Stack[id][STACK_SIZE-1], 17); /* send id message to created task */ si_message_send((char *) &id, sizeof(int), id_to_task_id(id)); } } /* check if it is an exit message */ else if (strcmp(message, "exit") == 0) { exit(0); } /* not a legal message */ else { si_ui_show_error("unexpected message type"); } } }
/* There shall be one task, called user_task, which receives commands from the graphical user interface. This task shall create new person tasks. A new person task shall be created when the text string new is received. The task user_task shall also contain functionality for termination of the program. The program shall be terminated when the text string exit is received. */ void user_task(void)//TODO { /* set size of GUI window */ si_ui_set_size(670, 700); int n_persons = 0; /* message array */ char message[SI_UI_MAX_MESSAGE_SIZE]; while(1) { /* read a message */ si_ui_receive(message); /* check if it is a set time message */ if (strncmp(message, "new", 3) == 0) { /*printf("Spawning...\n");*/ if (n_persons == MAX_N_PERSONS) { si_ui_show_error("Failure to comply: Overpopulation!"); } else { int id = n_persons++; create_passenger(id, 17); } } /* check if it is an exit message */ else if (strcmp(message, "exit") == 0) { exit(0); } /* not a legal message */ else { si_ui_show_error("unexpected message type"); } } }
int clock_get_alarm_status(){ pthread_mutex_lock(&Clock.mutex); if (Clock.alarm_enabled == 0){ pthread_mutex_unlock(&Clock.mutex); return 0; } else if(Clock.alarm_enabled == 1){ pthread_mutex_unlock(&Clock.mutex); return 1; } si_ui_show_error("Alarm enable in undefined state."); Clock.alarm_enabled = 0; pthread_mutex_unlock(&Clock.mutex); return 0; }
/* exit_task: used for closing the program */ void exit_task(void) { /* message array */ char message[SI_UI_MAX_MESSAGE_SIZE]; while(1) { /* read a message */ si_ui_receive(message); /* check if it is an exit message */ if (strcmp(message, "exit") == 0) { exit(0); } /* not a legal message */ else { si_ui_show_error("unexpected message type"); } } }
/* set_task: reads messages from the user interface... */ void set_task(void) { /* message array */ char message[SI_UI_MAX_MESSAGE_SIZE]; /* time read from user interface */ int hours = 0, minutes = 0, seconds = 0; /* set GUI size */ si_ui_set_size(400, 200); while(1) { /* read a message */ si_ui_receive(message); /* check if it is a set message */ if (strncmp(message, "set:", 4) == 0) { time_from_set_message(message, &hours, &minutes, &seconds); if (time_ok(hours, minutes, seconds)) { set_time(hours, minutes, seconds); } else { si_ui_show_error("Illegal value for hours, minutes or seconds"); } } /* check if it is an alarm message */ else if (strncmp(message, "alarm:", 6) == 0) { time_from_alarm_message(message, &hours, &minutes, &seconds); if (time_ok(hours, minutes, seconds)) { set_alarm(hours, minutes, seconds); display_alarm_time(hours,minutes,seconds); } else { si_ui_show_error("Illegal value for hours, minutes or seconds"); } } /* check if it is an reset message */ else if (strncmp(message, "reset", 5) == 0) { erase_alarm_time(); erase_alarm_text(); reset_alarm(); } /* check if it is an exit message */ else if (strcmp(message, "exit") == 0) { exit(0); } /* not a legal message */ else { si_ui_show_error("unexpected message type"); } } }