Evhz.c

Od HLDS.pl
Wersja PawelS (dyskusja | edycje) z dnia 23:20, 16 lut 2008
(różn.) ← poprzednia wersja | zobacz aktualną wersję (różn.) | następna wersja → (różn.)
Skocz do: nawigacji, wyszukiwania

Spis treści

Opis

evhz.c - Skrypt mający na celu sprawdzanie częstotliwości portu USB, do którego jest podłączona myszka.

Kompilacja

gcc -o evhz evhz.c

Uruchamianie

./evhz

No i teraz ruszamy myszką i w terminalu/konsoli obserwujemy ile mamy Hz - przednia zabawa na długie samotne wieczory ;).

Skrypt

/**************************************************
 Ten program stworzył Alan 'Strider' Kivlin.
 This program was written by Alan 'Strider' Kivlin.
***************************************************/
 
#include <stdio.h>
#include <linux/input.h>
#include <fcntl.h>
#include <signal.h>
 
#define EVENTS 10
#define HZ_LIST 64
 
typedef struct event_s {
	int fd;
	int hz[HZ_LIST];
	int count;
	double prvtime;
} event_t;
 
int quit = 0;
 
void sigint() {
	signal(SIGINT, sigint);
	quit = 1;
}
 
int main(int argc, char **argv) {
	int i;
	event_t events[EVENTS];
 
	signal(SIGINT, sigint);
 
	printf("Press CTRL-C to exit.\n\n");
 
	memset(events, 0, sizeof(events));
 
	for(i = 0; i < EVENTS; i++) {
		char device[18];
 
		sprintf(device, "/dev/input/event%i", i);
		events[i].fd = open(device, O_RDONLY);
		
		if(events[i].fd != -1) {
			char name[128];
			ioctl(events[i].fd, EVIOCGNAME(sizeof(name)), name);
			printf("event%i: %s\n", i, name);
		}
	}
 
	while(!quit) {
		fd_set set;
 
		FD_ZERO(&set);
 
		for(i = 0; i < EVENTS; i++) {
			if(events[i].fd != -1) {
				FD_SET(events[i].fd, &set);
			}
		}
 
		if(select(FD_SETSIZE, &set, NULL, NULL, NULL) > 0) {
			int bytes;
			struct input_event event;
 
			for(i = 0; i < EVENTS; i++) {
				if(events[i].fd == -1) {
					continue;
				}
 
				if(!FD_ISSET(events[i].fd, &set)) {
					continue;
				}
 
				bytes = read(events[i].fd, &event, sizeof(event));
 
				if(bytes != sizeof(event)) {
					continue;
				}
 
				if(event.type == EV_REL) {
					double time;
					int hz;
 
					time = event.time.tv_sec * 1000 + event.time.tv_usec / 1000;
					hz = 1000 / (time - events[i].prvtime);
 
					if(hz > 0) {
						int avghz;
						int j;
 
						events[i].count++;
						events[i].hz[events[i].count & (HZ_LIST - 1)] = hz;
 
						avghz = 0;
 
						for(j = 0; j < HZ_LIST; j++) {
							avghz += events[i].hz[j];
						}
 
						avghz /= (events[i].count > HZ_LIST) ? HZ_LIST : events[i].count;
 
						printf("event%i: latest hz = %i (average hz = %i)\n", i, hz, avghz);
					}
 
					events[i].prvtime = time;
				}
			}
		}
	}
 
	for(i = 0; i < EVENTS; i++) {
		if(events[i].fd != -1) {
			close(events[i].fd);
		}
	}
}

And again PawelS saves the world ;)

Osobiste
Przestrzenie nazw
Warianty
Działania
HLDS.pl - Menu:
Inne
IRC
Inne sekcje:
Znajomi:
Narzędzia