#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "joystick.h"

#define JOYSTICK_DEVFS "/dev/input/js0" /* devfs */
#define JOYSTICK "/dev/js0"
#define NAMESIZE 100

int Joystick::create()
{
	char c_num_axis;
	char c_num_buttons;
	unsigned long ver = 0;

	name = NULL;

	if (!(fd = open(JOYSTICK_DEVFS, O_RDONLY)))
		fd = open(JOYSTICK, O_RDONLY);

	if (fd) {
		if (!ioctl(fd,JSIOCGVERSION,&ver))
			printf("JSIOCGVERSION %d\n", ver);
		if (ioctl(fd,JSIOCGAXES,&c_num_axis))
			c_num_axis = 0;
		if (ioctl(fd,JSIOCGBUTTONS,&c_num_buttons))
			c_num_buttons = 0;
		name = (char *)malloc(NAMESIZE);
		sprintf(name,"%dbt %dax ", c_num_buttons, c_num_axis);
		if (ioctl(fd,JSIOCGNAME(NAMESIZE-strlen(name)),name+strlen(name))>=0)
			printf("ioctl(JSIOCGNAME) %s\n", name);
	}

	return fd;
}

void Joystick::finish()
{
	if (name)
		free(name);
	close(fd);
}

int Joystick::status()
{
	int status;

	status = read(fd, &js, JS_RETURN);
	if (status != JS_RETURN) return 0;
	/* print(); */
	return 1;
}

void Joystick::print()
{
	printf("btn 0: %s  btn 1: %s  X: %4d  Y: %4d\r",
		(js.buttons & 1) ? "on " : "off", (js.buttons & 2) ? "on " : "off",
		js.x, js.y);
	fflush(stdout);
}


