Kommandot outb ligger på min laptop i /usr/X11R6/bin/outb. Kollar jag min server (utan X) så finns inte kommandot, så nån nytta finns det med parrelay iaf

Det hela låter väldigt knepigt, eftersom du skriver direkt till en 8-bitars "latch". Om du gör om värdet till binärt istället (0b00000000) så ser du mer exakt hur det borde "lysa". Alltså outb 888 3 borde ge "lyse" åt pinne 1 och 2, inte pinne 3. Och outb 888 0 borde släcka alla.maxxflow skrev:Tjoho! Det funkar! Portadressen var 888 vilket jag tycker är lite konstigt, eftersom jag bara har 1 port och den borde sitta som lp0...
Men hursomhelst; om jag kör outb 888 1 så tänds pinne 2, outb 888 0 så släcks pinne 2.
Om jag kör outb 888 2 så tänds pinne 3, outb 888 0 släcker nu pinne 3, men _inte_ pinne 2 om den redan var tänd. outb 888 0 verkar därför släcka den pinne som senast tändes? Verkar lite knepigt, men det funkar. Om man vill släcka en pinne som inte e "aktiv" e de ju bara att köra tänd-kommandot för den pinnen, så den fattar att det är den man vill åt...
Ta inte illa upp PHermansson, men ditt program är nästan lite onödigt då det fungerar exakt på samma sätt...
Kod: Markera allt
/*
* Serial line daemon program for executing command when button pressed.
* The program uses the serial interface line CD (input: carrier detect)
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License.
* See http://www.gnu.org/copyleft/ for details.
*
* Written by maxxflow, maxxflow.com
* Based on sled by Guido Socher <guido@linuxfocus.org>
*/
#define VERINFO "version 0.1"
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <signal.h>
static int fd = 0;
/* get the current state of the push button
* and return it. */
int getpushbutton(int fd)
{
int state;
ioctl(fd, TIOCMGET, &state); /* read interface */
if (state & TIOCM_CAR) {
return (1);
}
return (0);
}
void help()
{
printf("sswitch ");
#ifdef VERINFO
puts(VERINFO);
#endif
printf("\n\
USAGE: sswitch serial-device\n\
EXAMPLE: sswitch /dev/ttyS0\n\
\n\
");
exit(0);
}
int main(int argc, char **argv)
{
int lstate = 0;
int i = 0;
pid_t pid;
/* exactly one argument must be given */
if (argc != 2)
help();
/* open device */
fd = open(argv[1], O_RDWR | O_NDELAY);
if (fd < 0) {
fprintf(stderr, "ERROR: can not open \"%s\"\n", argv[1]);
exit(2);
}
/* now we fork to background */
if ((pid = fork())<0){
perror("sswitch server fork");
exit(1);
}else if (pid > 0){
/* parent dies */
exit(0);
}
/* we are the child and run as a daemon */
while(1){
if (getpushbutton(fd)){
system("killall ogg123");
}
sleep(1);
}
/* we never get here */
return (2);
}