Example #1
0
int order() {
    int i;
    int isOrder = 0;
    for ( i = 0;  i < N_FLOORS; ++i ) {
        if ( elev_get_button_signal( BUTTON_COMMAND, i ) ) {
            addOrder( BUTTON_COMMAND, i );
            isOrder = 1;
        }
    }
    if ( !isStopped() && !isStoppedObstruction() ) {
        for ( i=0; i < (N_FLOORS-1); ++i ) {
            if ( elev_get_button_signal( BUTTON_CALL_UP, i ) && !isStopped() ) {
                addOrder( BUTTON_CALL_UP, i );
                isOrder = 1;
            }
        }
        for ( i = 1; i < (N_FLOORS); ++i ) {
            if ( elev_get_button_signal( BUTTON_CALL_DOWN, i ) && !isStopped() ) {
                addOrder( BUTTON_CALL_DOWN, i );
                isOrder = 1;
            }
        }
    }
   return isOrder;
}
Example #2
0
void Driver::event_generator()
{
  /* Poll for floor signal */
  int floor_signal = elev_get_floor_sensor_signal();
  poll(last_floor_signal, floor_signal, -1, FloorSignalEvent(floor_signal));

  for (int floor = 0; floor < FLOORS; floor++) {
    for (auto button_type : {ButtonType::UP, ButtonType::DOWN}) {
      /* first floor doesn't have a down button and top floor doesn't have an up
	 button */
      if ((floor == 0 && button_type == ButtonType::DOWN)
	  || (floor == 3 && button_type == ButtonType::UP)) {
	continue;
      }
      int btn_index = static_cast<int>(button_type);
      int button_signal = elev_get_button_signal(static_cast<elev_button_type_t>(btn_index), floor);
      poll(last_button_signals[floor][btn_index], button_signal, 0,
	   ExternalButtonEvent(floor, button_type));
    }

    /* Internal buttons: */
    int button_signal = elev_get_button_signal(BUTTON_COMMAND, floor);
    poll(last_button_signals[floor][2], button_signal, 0,
	 InternalButtonEvent(floor));
  }
}
Example #3
0
void check_call_buttons(system_state_t* system_state){
    for (int i = 1; i < N_FLOORS; ++i){
		if (elev_get_button_signal(BUTTON_CALL_DOWN,i)){
	    	system_state->elev_called_floors_down[i] = 1;
	    	elev_set_button_lamp(BUTTON_CALL_DOWN, i, 1);
        }
    }
    
    for (int i = 0; i < N_FLOORS - 1; ++i){
		if (elev_get_button_signal(BUTTON_CALL_UP,i)){
	    	system_state->elev_called_floors_up[i] = 1;
	    	elev_set_button_lamp(BUTTON_CALL_UP, i, 1);
		}
    }
}
Example #4
0
void run_elevator(){
  
  // Elevator is started and state is unknown.
  
  // Initialize timer.
  timer = clock();
  
  current_state = UNDEF; 
  initialize_elevator();
  
  // Elevator is now at some floor and ready for orders.
  while(1){
    
    // Handles io-signals, (sets/clears lights etc.)
    io_signals();
    
    // Calls the state machine switch function.
    state_machine();
    
    // If ... exit the main loop and terminate the program.
    if (elev_get_button_signal(BUTTON_CALL_UP,0) && current_state == EMERGENCY){
      elev_set_speed(0);
      break;
    }
  }

  initialize_elevator();
}
Example #5
0
void button_check(){
	Message message_send;
	elev_button_type_t button_type;
	int floor;
	int button_is_pressed=0;
	puts("Button check thread started");
	while (1){
		for(floor = 0;floor<N_FLOORS;floor++){ 
			for(button_type = 0;button_type<N_BUTTONS;button_type++){ 
				if(elev_get_button_signal(button_type,floor)==1){
					if(button_type==BUTTON_INSIDE){ 
						elev_set_button_lamp(BUTTON_INSIDE,floor,1);
						elevator.queue[floor]=1;
						}
					pthread_mutex_lock(&mutex);
					button_is_pressed=1;
					message_send.button.floor=floor;
					message_send.button.type=button_type;
					pthread_mutex_unlock(&mutex);
					while(elev_get_button_signal(button_type,floor));
					break;
				}
			}
			if(button_is_pressed)
				break;
		}
		if(button_is_pressed){ 
			
			puts("Button is pressed, creating thread\n");
			button_is_pressed=0;
			char transmit[BUFSIZE];
			serialization(BUTTON_CHECK, message_send, transmit);
			pthread_t message_send_thread;
    		pthread_create(&message_send_thread, NULL , tcp_send, (void*)transmit);	
			if(message_send.button.type==BUTTON_INSIDE){
				FILE *fp;
			   fp = fopen("local_order_queue.txt", "w+");
			   fprintf(fp,"%d %d %d %d", elevator.queue[0], elevator.queue[1], elevator.queue[2], elevator.queue[3] );
			   fclose(fp);
    		}
		}
		if(!connection){
			break;
		}

	} 			
}
Example #6
0
void check_cmd_buttons(system_state_t* system_state){ 
    for (int i = 0; i < N_FLOORS; ++i){
        if(elev_get_button_signal(BUTTON_COMMAND, i)){
            system_state->elev_active_floors[i] = 1;
            elev_set_button_lamp(BUTTON_COMMAND, i, 1);
        }
    }
}
Example #7
0
/**
 * check_buttons:
 *
 * Checks all UI buttons and updates the order queue.
 *
 * Returns: 1 if new orders are present, or 0.
 *
 */
int ui_check_buttons(void) {
    for (int button = 0; button < N_BUTTONS; button++) {
      for (int floor = 0; floor < N_FLOORS; floor++) {
          if (elev_get_button_signal(button, floor)) {
              elev_set_button_lamp(button, floor, 1);
              add_order(button, floor);
          }
        }
    }
}
Example #8
0
void check_internal_orders(){

    //checks if we have an order, and sets the light;
    for (int i = 0; i < N_FLOORS; i++){
        int buttonSignal = elev_get_button_signal(BUTTON_COMMAND, i);
        if(buttonSignal == 1){
             internalButtonVector[i] = buttonSignal;
             elev_set_button_lamp(BUTTON_COMMAND, i, 1);


        }

    }
    write_to_internalOrdersText();
}
Example #9
0
void* check_external_orders(){
    
    //Only supports external orders on the machine return 1 if there are external orders
   
	int buttonSignal;
	while (1){

   		 	if(connectStatus == 1){
			    for (int i = 0; i < N_FLOORS; i++){
			    	for (int x = 0; x < 2; x++){
			  			buttonSignal = elev_get_button_signal(x, i);
			   		 	if(buttonSignal == 1 && externalOrdersMatrix[i][x] != 1){
			   		 	udp_send_external_order_s2m(i, x);
			   		    // externalOrdersMatrix[i][x] = 1;
						}
			    	}
			  	  }
			  	 // sleep(0.5);
				}
			}
}
Example #10
0
States fsm_idle_state(system_state_t* system_state, States fsm_previous_state){

	int floor = elev_get_floor_sensor_signal();
    system_state->next_floor = system_state->prev_floor + system_state->motor_direction;

    if (elev_get_stop_signal()){
		return stop;
	}	
	
    if (floor == 0){
		if (elev_get_button_signal(BUTTON_COMMAND, floor) ||
        	elev_get_button_signal(BUTTON_CALL_UP, floor)){
			return door_open;
		}
    } 
    
    else if (floor == 3){
		if (elev_get_button_signal(BUTTON_COMMAND, floor) ||
        	elev_get_button_signal(BUTTON_CALL_DOWN, floor)){
			return door_open;
		}
	} 
	
	else{
    	if (elev_get_button_signal(BUTTON_COMMAND, floor) ||
            elev_get_button_signal(BUTTON_CALL_UP, floor) ||
            elev_get_button_signal(BUTTON_CALL_DOWN, floor)){
        	return door_open;
    	}
    }
    
    check_cmd_buttons(system_state);
    
    for (int i = 0; i < N_FLOORS; ++i){
        if (system_state->elev_active_floors[i] == 1){
            if (i < floor){
            	system_state->motor_direction = -1;
                return going_down;
            }           
            else if (i > floor){  
            	system_state->motor_direction = 1;    
                return going_up;
            }
        }
    }
	
	
	check_call_buttons(system_state);

	for (int i=0; i<N_FLOORS;++i){
		if (system_state->elev_called_floors_down[i] || system_state->elev_called_floors_up[i]){
			if (i < floor){
				system_state->motor_direction = -1;
				return going_down;
			}
			else if (i > floor){
				system_state->motor_direction = 1;
				return going_up;
			}
		}
	}


    return idle;
}
Example #11
0
/*
 * Class:     no_ntnu_stud_torbjovn_comedielevator_NativeInterface
 * Method:    elev_get_button_signal
 * Signature: (II)I
 */
JNIEXPORT jint JNICALL Java_no_ntnu_stud_torbjovn_comedielevator_NativeInterface_elev_1get_1button_1signal
  (JNIEnv * env, jobject obj, jint button, jint floor) {
    return elev_get_button_signal(getButtonType(button), floor);
  }
Example #12
0
int main()
{
    if (!elev_init()) {
        printf(__FILE__ ": Unable to initialize elevator hardware\n");
        return 1;
    }


    slettAlleOrdre();
    elev_set_speed(0);    
    initHeisstyring();

    int forgjeEtasje = 0;
    int etasje;
    bool forgjeStopp;
    bool stopp;
    bool forgjeObstruksjon;
    bool obstruksjon;
    bool forgjeOpp[4];
    bool opp[4];
    bool forgjeInne[4];
    bool inne[4];
    bool forgjeNed[4];
    bool ned[4];

    while(1)
    {
	stopp = elev_get_stop_signal();
	obstruksjon = elev_get_obstruction_signal();
	etasje = elev_get_floor_sensor_signal();
	
	for(int i = 0; i < N_FLOORS; i++) // poller masse, fix
	{
	    if(i != N_FLOORS-1)
		opp[i] = elev_get_button_signal(BUTTON_CALL_UP, i);
    	    
	    if(i != 0)
		ned[i] = elev_get_button_signal(BUTTON_CALL_DOWN, i);
	    
	    inne[i] = elev_get_button_signal(BUTTON_COMMAND, i);
	}

	for(int i = 0; i < N_FLOORS; i++)
	{
	    if(opp[i] && !forgjeOpp[i])
		leggTilOrdre(i, false, true);
	    
	    if(ned[i] && !forgjeNed[i])
		leggTilOrdre(i, false, false);
	    
	    if(inne[i] && !forgjeInne[i])
		leggTilOrdre(i, true, true);
	    
	    forgjeOpp[i] = opp[i];
	    forgjeNed[i] = ned[i];
	    forgjeInne[i] = inne[i];
	}

	if(harTimetUt())
	    timeOut();

	if (etasje != -1 && etasje != forgjeEtasje)
	{
	    elev_set_floor_indicator(etasje);
	    etasjeAnkommet(etasje);
	    forgjeEtasje = etasje;
	}

	if(obstruksjon && !forgjeObstruksjon)
	{
	    forgjeObstruksjon = obstruksjon;
	    forgjeEtasje = -1;
	    if(obstruksjon)
		obstruksjonPa();
	    else
		obstruksjonAv();
	}
	
	if(stopp && !forgjeStopp)
	{
	    forgjeStopp = stopp;
	    forgjeEtasje = -1;
	    if(stopp)
		nodStopp();
	}
    }	
    return 0;
}