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
Läs/skriv till paralellport i Linux
- PHermansson
- EF Sponsor
- Inlägg: 4340
- Blev medlem: 22 december 2004, 00:46:38
- Ort: Särestad Grästorp
- Kontakt:
Ja det är sant, mitt program fungerar likadant. Poängen med koden var mest att visa hur det funkar (öppen källkod) och ge möjlighet till felkontroll, det kan bli lite konstigt om man skriver till fel port.
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
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
Jovisst, ditt program är väldigt bra i utbildningssyfte så folk kan lära sig hur man fixar sånt i C++.
Men kanske inte lika bra som ersättare till ioport-kommandona...
Och visst, ioport-binärerna följer med x11, men jag tycker inte det är jobbigare att kopiera över dem till min server än att ladda ner och kompilera ett nytt program...
Jo... Nu ska ja testa input också
De e 5v den ska ha va? Och det här om pullup/-down-motstånd som folk tjötar om hela tiden, hur e de me det? Hur mycke ström kan ja lägga på porten utan att bränna den? Och samma år andra hållet, om jag kopplar in en lysdiod eller optokopplare, vad ska jag ha för motstånd då?
Men kanske inte lika bra som ersättare till ioport-kommandona...
Och visst, ioport-binärerna följer med x11, men jag tycker inte det är jobbigare att kopiera över dem till min server än att ladda ner och kompilera ett nytt program...
Jo... Nu ska ja testa input också
De e 5v den ska ha va? Och det här om pullup/-down-motstånd som folk tjötar om hela tiden, hur e de me det? Hur mycke ström kan ja lägga på porten utan att bränna den? Och samma år andra hållet, om jag kopplar in en lysdiod eller optokopplare, vad ska jag ha för motstånd då?
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...
Ska man sedan släcka bara en pinne, så måste man då aktuella värdet och maska bort den pinne man ska släcka, osv.
Nu har jag ingen koll på själva "outb"-programmet, men skriver man direkt till parallell-porten (på dataregistret) så ska det fungera som jag beskriver.
Det kan ju vara något annat register du skriver till, där kanske någon pinne är inverterad? Har inte adresserna i huvudet, så någon kanske kan rätta mig om jag har fel.
Själv använder jag parport-drivern när jag styr parallellporten i C, och dom funkar kalasbra! Många fina funktioner i den som man slipper göra manuellt.
Mvh
speakman
Senast redigerad av speakman 24 januari 2005, 13:29:51, redigerad totalt 1 gång.
Speakman: Justdet, så var det!
Var så längesen jag höll på men detta sist, glömde att man ska ange pin-numret i bin 
Nu ska här testas...
Men det här me pullup/-down-motstånd? Hur ska det vara?
Och de 5 volten som ska läggas på input-pinnen, kan man ta dem från paralellporten? Vore mycket enklare om man slapp ha extra strömkälla för det...
Nu ska här testas...
Men det här me pullup/-down-motstånd? Hur ska det vara?
Och de 5 volten som ska läggas på input-pinnen, kan man ta dem från paralellporten? Vore mycket enklare om man slapp ha extra strömkälla för det...
Hittade ett mycket enklare sätt...
Hittade programmet sled. Då kopplar jag in knappen på serieporten istället...
Åsså skrev jag om programmet så att det körde killall ogg123 ist. för shutdown... Och så tog ja bort led-funktionerna...
Funkar jättebra
Om ni undrar vad ja ska med killall ogg123 till så e de så att jag har tänkt att använda min server som "väckarklocka", den loopar vid bestämd tidpunkt en ogg-fil i högtalarn som e breve min säng ända tills man trycker på knappen
Jajustdet, då e de ju loop-skriptet och inte ogg123 som ska dödas... *fixar*
Hittade programmet sled. Då kopplar jag in knappen på serieporten istället...
Åsså skrev jag om programmet så att det körde killall ogg123 ist. för shutdown... Och så tog ja bort led-funktionerna...
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);
}Om ni undrar vad ja ska med killall ogg123 till så e de så att jag har tänkt att använda min server som "väckarklocka", den loopar vid bestämd tidpunkt en ogg-fil i högtalarn som e breve min säng ända tills man trycker på knappen
Jajustdet, då e de ju loop-skriptet och inte ogg123 som ska dödas... *fixar*
