Ich hab gerade eben nen ebuild für geschrieben, ich wills euch nicht vorenthalten:
http://pixelbanane.de/yafu/729479950…-daemon.tar.bz2
Wenn's Wünsche zur Verbesserung gibt, immer her damit
Ich hab gerade eben nen ebuild für geschrieben, ich wills euch nicht vorenthalten:
http://pixelbanane.de/yafu/729479950…-daemon.tar.bz2
Wenn's Wünsche zur Verbesserung gibt, immer her damit
Hallo,
gefällt mir, aber leider habe ich noch nicht herausgefunden, wie ich "plain" key codes eingeben kann.
Ich habe hier ein NAS mit drei Knöpfen, die als Tasten eines Keyboard verdrahtet sind.
Ich kann mit folgendem Code die Keycodes auslesen. Wie kann ich das dem input-event-daemon verklickern?
Leider kann ich nicht besonders gut C und mit Linux Systemprogrammierung habe ich auch keine Erfahrung.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <dirent.h>
#include <linux/input.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/select.h>
#include <sys/time.h>
#include <termios.h>
#include <signal.h>
void handler (int sig)
{
printf ("\nexiting...(%d)\n", sig);
exit (0);
}
void perror_exit (char *error)
{
perror (error);
handler (9);
}
int main (int argc, char *argv[])
{
struct input_event ev[64];
int fd, rd, value, size = sizeof (struct input_event);
char name[256] = "Unknown";
char *device = NULL;
//Setup check
if (argv[1] == NULL){
printf("Please specify (on the command line) the path to the dev event interface device\n");
exit (0);
}
if ((getuid ()) != 0)
printf ("You are not root! This may not work...\n");
if (argc > 1)
device = argv[1];
//Open Device
if ((fd = open (device, O_RDONLY)) == -1)
printf ("%s is not a vaild device.\n", device);
//Print Device Name
ioctl (fd, EVIOCGNAME (sizeof (name)), name);
printf ("Reading From : %s (%s)\n", device, name);
while (1){
if ((rd = read (fd, ev, size * 64)) < size)
perror_exit ("read()");
value = ev[0].value;
if (ev[0].value == 1 && ev[0].type == EV_KEY) { // Only read the key press event
printf ("Code[%d]\n", (ev[0].code));
// if (value != ' ' && ev[1].value == 1 && ev[1].type == 1){ // Only read the key press event
// printf ("Code[%d]\n", (ev[1].code));
}
}
return 0;
}
Alles anzeigen
Vielen Dank,
Jan
Was sind denn die Codes die dir das Programm ausgibt in deinem Fall? Den Namen kannst du dann hier nachschlagen: http://lxr.free-electrons.com/source/include…ux/input.h#L209
ievd unterstützt keine numerischen Keycodes, es arbeitet mit den Definitionen im Linux-Kernel.
Ansonsten, einfachere Lösung: Wenn du den Parameter -m verwendest, kann dir input-event-daemon zeigen wie es die Tasten nennt, einfach folgenden Befehl starten und die gesuchten Tasten drücken.
input-event-daemon -m
Ansonsten, einfachere Lösung: Wenn du den Parameter -m verwendest, kann dir input-event-daemon zeigen wie es die Tasten nennt, einfach folgenden Befehl starten und die gesuchten Tasten drücken.
input-event-daemon -m
Ah! Danke fpr die prompte Antwort. Das war ja einfach. Mir war unklar, was "Monitoring Mode" bedeuten soll dewegen habe ich den komplett übersehen.
Sind die Tasten: COPY, POWER, RESTART
Funzt! Jetzt muss ich dem Kernel "nurnoch" beibringen, wie er die kiste runterfahren bzw rebooten kann. Das wird ein größerer Akt, hat kein ACPI.
Rein aus Interesse: Auf welcher Hardware läuft das ganze, wenn kein ACPI vorhanden ist?
Rein aus Interesse: Auf welcher Hardware läuft das ganze, wenn kein ACPI vorhanden ist?
Netgear ReadyNas DuoV2, ist ein Kirkwood ARM Prozessor. Der hat natürlich kein BIOS, sondern U-Boot. Hier gibt's Hardware Details und Installationsguide.
Mittlerweile sind wir zu dritt, die an dem Teil rumbasteln. Langsam wirds... Ärgerlicherweise reisst Samba den Kernel regelmässig in den Abgrund. Für ein NAS recht unpraktisch Muss wohl ein Kernel Bug sein.
Danke für die Info
Hast du mal einen anderen Kernel probiert bzw selber einen passenden kompiliert? Evtl ist der mitgelieferte ja einfach Mist.
Danke für die Info
Hast du mal einen anderen Kernel probiert bzw selber einen passenden kompiliert? Evtl ist der mitgelieferte ja einfach Mist.
Der mitgelieferte ist uralt (2.6?) und würde mit plain debian sowieso nicht vernünftig funktionieren.
ich habe einen custom 3.8er kernel. Der Autor gibt die Sourcen aber noch nicht frei, weil er noch was fummeln will. Also kann ich mir keine Module bauen. mpf.
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!