int main(void) { /* initialise kernel */ si_kernel_init(); /* initialise message handling */ si_message_init(); /* set up random number generator */ srand(12345); /* initialise UI channel */ si_ui_init(); /* set size of GUI window */ si_ui_set_size(670, 700); /* initialise variables */ mainlift=lift_create(); /* create tasks */ si_task_create(lift_task, &Lift_Stack[STACK_SIZE-1], 20); si_task_create(user_task, &User_Stack[STACK_SIZE-1], 15); /* start the kernel */ si_kernel_start(); /* will never be here! */ return 0; }
// This process is responsible for drawing the lift. Receives lift_type structures // as messages. void uidraw_process(void) { char msg[1024]; si_ui_set_size(670, 700); while(1) { message_receive(msg, 1024, QUEUE_UI); lift_type Lift = (lift_type) &msg[0]; // draw_lift(Lift); } }
/* 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"); } } }
int main(void) { /* initialise kernel */ si_kernel_init(); /* initialise message handling */ si_message_init(); /* set up random number generator */ srand(12345); /* initialise UI channel */ si_ui_init(); /* set size of GUI window */ si_ui_set_size(670, 700); /* initialise variables */ lift_init(mainlift); /* create tasks */ /* create tasks */ si_task_create( lift_task, &Lift_Stack[STACK_SIZE - 1], LIFT_PRIORITY); Lift_Task_Id = 1; si_task_create( move_lift_task, &Move_Lift_Stack[STACK_SIZE - 1], MOVE_LIFT_PRIORITY); Move_Lift_Task_Id = 2; si_task_create( user_task, &User_Stack[STACK_SIZE - 1], USER_PRIORITY); User_Task_Id = 3; Lowest_Passenger_Task_Id = TASK_ID_FIRST_PERSON; /* start the kernel */ si_kernel_start(); /* will never be here! */ return 0; }
/* 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"); } } }
/* display_task: display task */ void display_task(void) { /* current value of the integer number */ int number; /* current noted information whether the integer number is odd or even (a copy of the common variable Even_Number) */ int even_number; /* set GUI size */ si_ui_set_size(400, 200); /* set initial value for the integer number */ set_number(100); while (1) { /* get the number and the information regarding odd or even */ get_number(&number, &even_number); /* print the number */ print_number(number, even_number); /* wait for a while */ si_wait_n_ms(1000 + rand() % 1000); } }
/* 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"); } } }