コード例 #1
0
/* a little test program */
int main(int argc, char *argv[])
{
  int fd, rc;
  int done = 0;

  struct js_event jse;

  fd = open_joystick();

  if (fd < 0) 
  {
    perror("open_joystick");
    exit(1);
  }


  while (!done) {
    rc = read_joystick_event(&fd, &jse);
    usleep(1000);

    if (rc == 1) 
    {
      printf("Event: time %8u, value %8hd, type: %3u, axis/button: %u\n", 
             jse.time, jse.value, jse.type, jse.number);
    }
  }
}
コード例 #2
0
ファイル: joystick.c プロジェクト: AmmarkoV/RoboVision
void * JoystickPollingLoop(void *ptr )
{
    int fd, rc;

	struct js_event jse;

	fd = open_joystick(joystick_device);
	if (fd < 0)
	{
		printf("joystick open failed.\n");
		STOP_JOYSTICK_THREAD=1;
		return 0;
	}

   JOYSTICK_OK=1;
   while ( !STOP_JOYSTICK_THREAD )
     {

		rc = read_joystick_event(&jse);
		usleep(1000);
		if (rc == 1)
		 {
			//printf("Event: time %8u, value %8hd, type: %3u, axis/button: %u\n",jse.time, jse.value, jse.type, jse.number);
            HandleJoystickEvent(&jse);

		 }

     }
  JOYSTICK_OK=0;


  return 0;
}
コード例 #3
0
int get_joystick_status(int *joystick_fd, struct wwvi_js_event *wjse)
{
  struct js_event jse;
  int bytes_read;

  if (*joystick_fd < 0)
    return -1;

  // memset(wjse, 0, sizeof(*wjse));
  bytes_read = read_joystick_event(joystick_fd, &jse);

  if(bytes_read <= 0)
    return bytes_read;

  //jse.type &= ~JS_EVENT_INIT; /* ignore synthetic events */
  if (jse.type == JS_EVENT_AXIS) {
    switch (jse.number) {
      case 0: 
        wjse->stick_x = jse.value;
        break;

      case 1: 
        wjse->stick_y = jse.value;
        break;

      case 2:
        wjse->stick_z = jse.value;
        break;
	
      default:
        break;
    }
  } 
  else if (jse.type == JS_EVENT_BUTTON) 
  {
    if (jse.number < 10) 
    {
      switch (jse.value) 
      {
        case 0:
        case 1: 
	  wjse->button[jse.number] = jse.value;
          break;
        default:
         break;
      }
    }
  }
  
  return bytes_read;
}
コード例 #4
0
ファイル: 140008_client.c プロジェクト: wezelball/140008_agv
/*
 * Joystick update function
 * it accepts a void pointer
 */
void joystick_update ( void *ptr )
{
    thdata *jdata;
    jdata = (thdata *) ptr;  /* type cast to a pointer to thdata */


	while(true)
	{
		rc = read_joystick_event(&jse);
		usleep(1000);
		if (rc == 1) {
			//printf("Event: time %8u, value %8hd, type: %3u, axis/button: %u\n",
				//jse.time, jse.value, jse.type, jse.number);
			if (jse.type == 2 && jse.number == 0) {
				joystick_x = jse.value;
				relevant = true;
				//printf("X axis\n");
			}
			else if (jse.type == 2 && jse.number == 1) {
				joystick_y = jse.value;
				relevant = true;
				//printf("Y axis\n");
			}
			else if (jse.type == 2 && jse.number == 3) {
				joystick_z = jse.value;
				relevant = true;
				//printf("Z axis\n");
			}
			else if (jse.value == 1 && jse.type == 1 && jse.number == 0) {
				fire_pressed = true;
				relevant = true;
				//printf("Fire button\n");
			}
			else if (jse.value == 0 && jse.type == 1 && jse.number == 0) {
				fire_pressed = false;
				relevant = true;
			}
			else
				relevant = false;
		}
	}
}
コード例 #5
0
ファイル: joystick_rc.c プロジェクト: JohsBL/MobRob
int32_t get_joystick_status(int32_t joystick_file_descriptor, int32_t *axes, int32_t *buttons, int32_t axes_size, int32_t buttons_size)
{
  int32_t rc;
  struct joystick_event event;


  if (joystick_file_descriptor < 0)
    return -1;


  while ((rc = read_joystick_event(joystick_file_descriptor, &event) == 1)) {
    event.type &= ~JS_INIT;
    if ((event.type == JS_AXIS) && (event.number>=0) &&(event.number<axes_size)) {
      axes[event.number] = event.value;
	  
    } else if (event.type == JS_BUTTON) {
      if ((event.number < buttons_size)&& (event.number>=0)) {
		  
		switch (event.value) {
		  case 0:buttons[event.number] = event.value; break;
		  
		  case 1: 
		    print_util_dbg_print_num(event.number, 10);print_util_dbg_print(": ");print_util_dbg_print_num(event.value, 10);print_util_dbg_print("\n");
			buttons[event.number] = event.value;
			switch (event.number) {
			 case JOY_SAFETY_OFF_BUTTON: axes[RC_SAFETY]=-32000; break;
			 case JOY_SAFETY_ON_BUTTON: axes[RC_SAFETY]=  32000; break;
			 case JOY_MODE_1_BUTTON: axes[RC_ID_MODE]=-32000; break;
			 case JOY_MODE_2_BUTTON: axes[RC_ID_MODE]= 0; break;
			 case JOY_MODE_3_BUTTON: axes[RC_ID_MODE]= 32000; break;
			}
			break;
		  default:
			break;
		}
      }
    }
  }
  return 0;
}
コード例 #6
0
ファイル: joystick.c プロジェクト: spacerace/snippets
int get_joystick_status(struct wwvi_js_event *wjse)
{
	int rc;
	struct js_event jse;
	if (joystick_fd < 0)
		return -1;

	// memset(wjse, 0, sizeof(*wjse));
	while ((rc = read_joystick_event(&jse) == 1)) {
		jse.type &= ~JS_EVENT_INIT; /* ignore synthetic events */
		if (jse.type == JS_EVENT_AXIS) {
			switch (jse.number) {
			case 0: wjse->stick1_x = jse.value;
				break;
			case 1: wjse->stick1_y = jse.value;
				break;
			case 2: wjse->stick2_x = jse.value;
				break;
			case 3: wjse->stick2_y = jse.value;
				break;
			default:
				break;
			}
		} else if (jse.type == JS_EVENT_BUTTON) {
			if (jse.number < 10) {
				switch (jse.value) {
				case 0:
				case 1: wjse->button[jse.number] = jse.value;
					break;
				default:
					break;
				}
			}
		}
	}
	// printf("%d\n", wjse->stick1_y);
	return 0;
}
コード例 #7
0
void zczytuj_joystick() {
rc = read_joystick_event(&jse);
usleep(100);
if (rc == 1) {
/*
Mode 1 – Kierunek / Wysokość	Lotki / Gaz
Mode 2 – Kierunek / Gaz		Lotki / Wysokość
Mode 3 – Lotki / Wysokość		Kierunek / Gaz
Mode 4 – Lotki / Gaz			Kierunek / Wysokość
*/
if (jse.type == JS_EVENT_AXIS) {
if (jse.number == axis[0]) {
/* rudder */
if (abs(jse.value) > deadzone_x1) {
stick_x = jse.value;
wyslij_stick(0, stick_x);
printf("oś: %d wychylenie %d\n", jse.number, stick_x);
}

else {
if (abs(stick_x) < deadzone_x1) {
stick_x = 0;
wyslij_stick(0, stick_x);
printf("oś: %d wychylenie %d (dead zone)\n", jse.number, stick_x);
}
}
sprintf(wychylenie_x, "%+06d", stick_x);
gtk_markup(jse.number, wychylenie_x);
}

else if (jse.number == axis[1]) {
if (r2_throttle == TRUE) {
	/* right analog button works as throttle */
	if (abs(jse.value) > deadzone_y1) {
	stick_y = jse.value;
	//wyslij_stick(5, stick_y);
	//printf("oś: %d wychylenie (does nothing)%d\n", jse.number, jse.value);
	}
	else {
	if (abs(stick_y) < deadzone_y1) {
	stick_y = 0;
	//wyslij_stick(5, stick_y);
	//printf("oś: %d wychylenie %d (does nothing, dead zone)\n", jse.number, jse.value);
	}
	}
	sprintf(wychylenie_y, "%+06d", stick_y);
	gtk_markup(jse.number, wychylenie_y);
}
	else
	{
	/* right analog button doesn't work as throttle */
	stick_y = jse.value;
	if (stick_y > 0)
	{
	/* pull stick closer: half range */
	throttle = stick_y - 32768;
	}
	else
	{
	/* push stick away: full range */
	throttle = -stick_y * 2 - 32768;
	}

	sprintf(wychylenie_y, "%+06d", throttle);
	gtk_markup(jse.number, wychylenie_y);

	wyslij_stick(4, throttle);
	gtk_progress_bar_set_fraction(progress2, throttle * 0.000015259 + 0.5);
	}
}

else if (jse.number == axis[3]) {
/* aileron */
if (isExponential)
{
stick_x2 = expo((double) jse.value);
wyslij_stick(2, stick_x2);
sprintf(wychylenie_x2, "X: %+06d", stick_x2);
printf("oś: %d wychylenie %d (expo: %d)\n", jse.number, jse.value, stick_x2);
}
else
{
/* linear mode */
stick_x2 = jse.value;
wyslij_stick(2, stick_x2);
sprintf(wychylenie_x2, "X: %+06d", stick_x2);
printf("oś: %d wychylenie %d\n", jse.number, jse.value);
}
gtk_label_set_text(label_x2, wychylenie_x2);
}

else if (jse.number == 2) {
	/* left analog trigger (flaps) */
	stick_l2 = jse.value;
	printf("oś: %d wychylenie %d\n", jse.number, jse.value);
	wyslij_stick(3, jse.value);
	gtk_progress_bar_set_fraction(progress1, jse.value * 0.000015259 + 0.5);
}

else if (jse.number == axis[4]) {
/* elevator */
if (isExponential)
{
/* exponential mode */
stick_y2 = expo((double) jse.value);
wyslij_stick(1, stick_y2);
sprintf(wychylenie_y2, "Y: %+06d", stick_y2);
printf("oś: %d wychylenie %d (expo: %d)\n", jse.number, jse.value, stick_y2);
}
else
{
/* linear mode */
stick_y2 = jse.value;
wyslij_stick(1, stick_y2);
sprintf(wychylenie_y2, "Y: %+06d", stick_y2);
printf("oś: %d wychylenie %d\n", jse.number, jse.value);
}
gtk_label_set_text(label_y2, wychylenie_y2);
}

else if (jse.number == 5) {
/* right analog trigger */
if (r2_throttle && r2_pressed == TRUE) {
	stick_r2 = jse.value;
	throttle = jse.value;
	printf("oś: %d wychylenie %d\n", jse.number, throttle);
	wyslij_stick(4, throttle);
	gtk_progress_bar_set_fraction(progress2, jse.value * 0.000015259 + 0.5);
}
}

else if (jse.number == axis[6]) {
/* mapping depends on connection type (USB/Bluetooth) */
stick_6 = jse.value;
if(stick_6 == 0)
{
//push_item(statusbar, GINT_TO_POINTER(context_id), "");
}
else if(stick_6 > 0)
{
//printf("rudder trim increased\n");
wyslij_stick(6, -stick_6);
}
else if(stick_6 < 0)
{
//printf("rudder trim decreased\n");
wyslij_stick(6, -stick_6);
}
}

else if (jse.number == axis[7]) {
/* mapping depends on connection type (USB/Bluetooth) */
stick_7 = jse.value;
if(stick_7 == 0)
{
//push_item(statusbar, GINT_TO_POINTER(context_id), "");
}
else if(stick_7 > 0)
{
//printf("elevator trim +10\n");
wyslij_stick(7, stick_7);
}
else if(stick_7 < 0)
{
//printf("elevator trim -10\n");
wyslij_stick(7, stick_7);
}
}
}

if (jse.type == JS_EVENT_BUTTON) {
/* button pressed */
if (jse.value == 1)
{
if (jse.number == button[0])
{/* DS4 "X" */
/* pitch stabilization disabled */
wyslij_dwustan(0, 1);
//play_rumble_effect(RUMBLE_STRONG_RUMBLE_EFFECT);
}
else if (jse.number == button[1])
{/* DS4 "circle" */
/* roll stabilization disabled */
wyslij_dwustan(1, 1);
//play_rumble_effect(RUMBLE_STRONG_RUMBLE_EFFECT);
}
else if (jse.number == button[2])
{/* DS4 "triangle" */
/* roll stabilization enabled */
wyslij_dwustan(2, 1);
//play_rumble_effect(RUMBLE_STRONG_RUMBLE_EFFECT);	
}
else if (jse.number == button[3])
{/* DS4 "square" */
/* pitch stabilization enabled */
wyslij_dwustan(3, 1);
//play_rumble_effect(RUMBLE_STRONG_RUMBLE_EFFECT);
}
else if (jse.number == button[4])
{/* DS4 L1 */
switch_Recording();
//play_rumble_effect(RUMBLE_STRONG_RUMBLE_EFFECT);
}
else if (jse.number == button[5])
{/* DS4 R1 */
wyslij_dwustan(5, 1);
//play_rumble_effect(RUMBLE_STRONG_RUMBLE_EFFECT);
}
else if (jse.number == button[6])
{/* DS4 L2 "button" */}
else if (jse.number == button[7])
{/* DS4 R2 "button" */}
else if (jse.number == button[8])
{/* DualShock 3: Select button, DualShock 4: Share button */
switch_Shining();
//wyslij_dwustan(8, 1);
}
else if (jse.number == button[9])
{/* DualShock 3: Start button, DualShock 4: Options button */
wyslij_dwustan(9, 1);
}
else if (jse.number == button[10])
{printf("PlayStation button pressed\n");}
else if (jse.number == button[11])
{/* left knob press */
printf("left knob pressed\n");
/*
if (r2_throttle == TRUE)
{
	r2_throttle = FALSE;
	gtk_statusbar_push(statusbar, GINT_TO_POINTER(context_id), "throttle controlled by stick's vertical axis");
}
*/
}
else if (jse.number == button[12])
{/* right knob press */
printf("right knob pressed\n");
/*
if (r2_throttle == FALSE)
{
	r2_throttle = TRUE;
	gtk_statusbar_push(statusbar, GINT_TO_POINTER(context_id), "throttle controlled by R2 analog trigger");
}
*/
}
else
{printf("button %u pressed\n", jse.number);}

if (buttons_ever_pressed == FALSE)
{buttons_ever_pressed = TRUE;}
}

/* button released */
if (jse.value == 0 && buttons_ever_pressed) {
if (jse.number == button[0])
{
wyslij_dwustan(0, 0);
//stop_all_rumble_effects();
}
else if (jse.number == button[1])
{
wyslij_dwustan(1, 0);
//stop_all_rumble_effects();
}
else if (jse.number == button[2])
{
wyslij_dwustan(2, 0);
//stop_all_rumble_effects();
}
else if (jse.number == button[3])
{
wyslij_dwustan(3, 0);
//stop_all_rumble_effects();
}
else if (jse.number == button[4])
{
//stop_all_rumble_effects();
}
else if (jse.number == button[5])
{
wyslij_dwustan(5, 0);
//stop_all_rumble_effects();
}
else if (jse.number == button[6])
{}
else if (jse.number == button[7])
{
//stop_all_rumble_effects();
}
else if (jse.number == button[8])
{
/* DualShock 3: Select button, DualShock 4: Share button */
//wyslij_dwustan(8, 0);
}
else if (jse.number == button[9])
{/* DualShock 3: Start button, DualShock 4: Options button */
wyslij_dwustan(9, 0);
}
else if (jse.number == button[10])
{printf("PlayStation button released\n");}
else if (jse.number == button[11])
{printf("left knob released\n");}
else if (jse.number == button[12])
{printf("right knob released\n");}
else
{printf("button %u released\n", jse.number);}
}
}

if (jse.type == JS_EVENT_INIT) {
printf("Stan początkowy joysticka.\n");
}
}
}
コード例 #8
0
ファイル: joystick.cpp プロジェクト: Thaylo/Tanques-3D
/* a little test program */
int processaJoystick(int *buttons, struct js_event* jse)
{
	int rc;
	rc = read_joystick_event(jse);
	//usleep(1000);
	if (rc == 1)
	{
		if(jse->type == JS_EVENT_BUTTON)
		{
			if(jse->value == 1)
			{
				//printf("Button pressed\n");
				//printf("Event: Value %hd, type: %u, axis/button: %u\n", jse->value, jse->type, jse->number);
				buttons[jse->number] = 1;
				
	
			}
			else if(jse->value == 0)
			{
				//printf("Button released\n");
				//printf("Event: Value %hd, type: %u, axis/button: %u\n", jse->value, jse->type, jse->number);
				buttons[jse->number] = 0;
			}
		}
		else if(jse->type == JS_EVENT_AXIS)
		{
				
			if(jse->number == 5)
			{
				//printf("3st Axis X\n");
				
				
				if(jse->value != 0)
				{
					//printf("Directional pressed\n");
					//printf("Event: Value %hd, type: %u, axis/button: %u\n", jse->value, jse->type, jse->number);
					if(jse->value == 32767)
					{
						buttons[9] = 1;
					}
					else if(jse->value == -32767)
					{
						buttons[11] = 1;
					}

				}
				else if(jse->value == 0)
				{
					//printf("Directional released\n");
					//printf("Event: Value %hd, type: %u, axis/button: %u\n", jse->value, jse->type, jse->number);
					if(jse->number == 5)
					{
						buttons[9] = buttons[11] = 0;
					}
				}
			}
			else if(jse->number == 6)
			{
				if(jse->value != 0)
				{
					
					//printf("Directional pressed\n");
					//printf("Event: Value %hd, type: %u, axis/button: %u\n", jse->value, jse->type, jse->number);
					if(jse->value == -32767)
					{
						buttons[8] = 1;
					}

					else if(jse->value == 32767)
					{
						buttons[10] = 1;
					}
				}
				else
				{
					//printf("Directional released\n");
					//printf("Event: Value %hd, type: %u, axis/button: %u\n", jse->value, jse->type, jse->number);
					if(jse->number == 6)
					{
						buttons[8] = buttons[10] = 0;
					}
				}
			}
		}	/*	
		else if(jse->type == JS_EVENT_INIT)
		{
			//printf("Initial state\n");
		}
		else
		{
			//printf("UNDEFINED STATE %d\n",jse->type);
		}
		*/
	}
	
	return 0;
}
コード例 #9
0
ファイル: odroid_test.c プロジェクト: sdsmt-robotics/joystick
/* a little test program */
int main(int argc, char *argv[])
{
	int  joy_file, received, serial_file;
	int  done = 0;
	char joy_address[32] = "/dev/input/\0";
	int  axis_values[8] = {0};
	int  button_values[11] = {0};

	struct js_event jse;

	if(argc > 2)
	{
		printf("Too many arguments, exiting.");
		return 0;
	}
	if(argc == 2)
	{
		strcat(joy_address, argv[1]);
		joy_file = open_joystick(joy_address);
	}
	else if(argc == 1)
	{
		joy_file = open_joystick("/dev/input/js0");
	}
	
	if (joy_file < 0) 
	{
		printf("Joystick open failed.\n");
		exit(1);
	}

	serial_file = serialport_init(ARDUINO_COMM_LOCATION, ROBOT_BAUDRATE);
	
	if(serial_file < 0)
	{
		printf("Can't open serial port.");
		exit(2);
	}

	clearPort(serial_file);

	while (!done) {
		received = read_joystick_event(&jse);
		usleep(1000);
		if (received == 1) {
			switch(jse.type)
			{
				case TYPE_NOT_BUTTON:
					if(axis_values[jse.number] != jse.value)
						axis_values[jse.number] = jse.value;
					break;	
				case TYPE_BUTTON:
					if(button_values[jse.number] != jse.value)
					{
						button_values[jse.number] = jse.value;
						send_button_update(&jse, serial_file);
					}
					break;
			}	
		}
	}
}