Witam Jak w temacie , czyli ....... czy kto¶ ma materia³y dot . sterowaniem portu LPT przez internet lub co¶ podobnego ?? wiem ¿e jest taka mo¿liwo¶æ , lecz nie moge w internecie sie doszukac !
w góry WIELKIE dzieki za pomoc .
Pozdrawiam Nikon
Witam Jak w temacie , czyli ....... czy kto¶ ma materia³y dot . sterowaniem portu LPT przez internet lub co¶ podobnego ?? wiem ¿e jest taka mo¿liwo¶æ , lecz nie moge w internecie sie doszukac !
w góry WIELKIE dzieki za pomoc .
Pozdrawiam Nikon
Był sob, 06. sierpień 2005 13:41 gdy "Nikon" snipped-for-privacy@o2.pl napisał(a):
Wystarczy prosty program w C(lub czymkolwiek innym) który pobiera jako parametr stan portów i tak je ustawia. W zależności od trybu uzyskiwania dostępu do portu, w bezpiecznych systemach operacyjnych może być konieczne ustawienie bitu SUID dla tego programu.
Do tego frontend w php który oferuje klikalny interfejs i po zmianie na stronie www uruchamia program z odpowiednimi parametrami.
a mozna gdzies znalesc jakiego gotowca lub dokladny opis ??
Nikon
Witam
Było kiedyś opisane w CHIP'ie, i sprzet i program, ale nie pamiętam kiedy.
Jarek
Nikon napisał(a):
google i kierunki poszukiwań:
1) CGI 2) Apache 3) inpout32
Był sob, 06. sierpień 2005 14:22 gdy "Nikon" snipped-for-privacy@o2.pl napisał(a):
w php może dany program uruchomić na przykład w następujący sposób:
system("sudo /sciezka $zmienna1 $zmiennakolejnan" ,$retval);
a tu szkielet programu w C: #include <stdio.h>
#include <unistd.h>
#include <asm/io.h>
#define BASEPORT 0x378 //adres rejestrow portu rownoleglego int main(int argc, char *argv[]) { int status; ioperm(BASEPORT,3,1); // printf("ioperm for LPT....OK\n"); int i=0; //ustawia zero na liniach DATA0..7 outb(i,BASEPORT);
status=inb(BASEPORT+1); //pobiera stan bitow stanu printf("Stan portu: %d \n",status);
ioperm(BASEPORT,3,0); printf("disabled ioperm for LPT....OK\n"); return(0); }
da się to oprogramować lepiej ale to jest najprostsze rozwiązanie, cały port rownoległy zajmuje trzy kolejne bajty od BASEPORT
tego uzywam do resetu wieszajacego sie AccessPointa WiFI via przekaznik podpiety do LPT.
#include <stdio.h>
#include <unistd.h>
#include <asm/io.h>
#include <string.h>
#define BASEPORT 0x378 /* lp1 */
void help(char *msg) { fprintf (stderr,"
*** lptout ***************************************************************ERROR: %s
usage: lpt_out [port] [param] bits params: port port number ex. 1 b all bits ex. 10-00101 (- means do not change) n number ex. 133 example: lpt_out 1 b 01101100\n\n",msg); };
char dupa[25];
int main(int argc, char **argv) { int x=0, y; unsigned char z; int last, output, length; char bits; // czy bity, czy liczba int port_number; if (argc!=4) { help("To few parameters"); return 2; };
// sprawdza poprawnosc parametrow we/wy if (!(sscanf(argv[1],"%d",&port_number))) { fprintf(stderr,"invalid port number\n\n"); return 2; }; if (port_number>2) { help("Port number must be 1 or 2"); return 2; }; // sprawdza poprawnosc parametru if (strlen(argv[2])!=1) { help("Bad parameter"); return 2; }; switch(argv[2][0]) { case 'b': bits=1; break; case 'n': bits=0; break; default: help("Bad parameter"); return 2; };
/* Get access to the ports */ if (ioperm(BASEPORT, 5, 1)) {perror("ioperm"); exit(1);}
if (!bits) {// jesli cyfra length=strlen(argv[3]); for (x=0;x<length;x++) { if (argv[3][x]>57 || argv[3][x]<48) { help("bad output value"); return 2; }; }; if (!(sscanf(argv[3],"%d",&output))) { help("Bad output value"); return 2; }; if (output>255 || output<0) { help("output number must be beetween 0 and 255"); return 2; }; // jak tutaj doszedl to w output jest wartosc ktora wyslac do portu }; // if !bits
if (bits) { length=strlen(argv[3]); if (length!=8) { help("bad output value length (must be 8)"); return 2; }; for (x=0;x<length;x++) { if (!(argv[3][x]=='1' || argv[3][x]=='0' || argv[3][x]=='-' )) { help("bad output value"); return 2; }; }; // for
last= inb(BASEPORT + 3);
output=0; z=0; for (x=0;x<length;x++) { y=1; y=y<<x; if (argv[3][x]=='1') output+=y; if (argv[3][x]=='-') { z=last>>x; z=z<<7;z=z>>7-x; output+=z; }; }; }; // if bits
outb(output,BASEPORT);
printf("current port status: %d\n", inb(BASEPORT + 3));
/* We don't need the ports anymore */ if (ioperm(BASEPORT, 3, 0)) {perror("ioperm"); exit(1);}
exit(0); }
Mo¿e program Girder z odpowiednimi pluginami (serwer WWW + obs³uga LPT)?
Wojtek
Have something to add? Share your thoughts — no account required.
Ask the community — no account required