Pomocy, bo się lekko pogubiłem. Mam już skompilowany plik resetera działający na LPT na PINIE 2 i wszytko śmiga ok, ale co trzeba zmienić w poniższym i na co, żeby skompilowac dla następnych pinów, bo czytam tą instrukcję, że w linii 30 trzeba zmienić coś, tylko nie wiem co na co,
a chcę sobie zrobić kilka reseterów dla różnych urządzeń oddzielne.
plik: reseter.c
00 /* RESETER.c (c) 2004 Marcin Lukasik */
01
02 #include <sys/io.h>
03 #include <unistd.h>
04 #include <stdio.h>
05 #include <stdlib.h>
06
07 #include "port.h"
08
09 #define ERR " \033[0;22m\033[31m-\033[31;1m>\033[31;22m-\033[0m "
10
11 int main(int argc, char **argv) {
12
13 unsigned int t = 0;
14
15 if(getuid() != 0) {
16 printf("ERROR: To access LPT from Linux you must run this program as root.");
17 exit(-1);
18 }
19
20 if(argc != 2) {
21 printf("%sUsage: %s reset_time_in_sec\n", ERR, argv[0]);
22 exit(-1);
23 }
24
25
26 t = atoi(argv[1]) * 1000000;
27
28
29 ioperm(0x378, 3, 1); // open port
30 port_out(0x378, 255); // HI on b2-b9 (relay open - RESET)
31 usleep(t); // sleep for t seconds
32 port_out(0x378, 0); // LOW on (relay closed - NORMAL OPERATION)
33
34 return 0;
35 }
36
Trochę informacji dla chętnych i niezorientowanych w obszarach, które jakiegoś komentarza wymagają
Linia 29 - otwieramy port.
Linia 30 - wysyłamy na port wartość dziesiętną 255, która odpowiada liczbie binarnej 11111111 (czyli na każdym wyjściu ustawiamy wartość 1) - dlatego wcześniej napisałem, że przekaźnik można podłączyć do któregokolwiek pinu I/O.
Linia 31 - usypiamy program na czas załączenia rozłączenia styków.
Linia 32 - wysyłamy na port wartość dziesiętną 0, która odpowiada liczbie binarnej 00000000 (czyli na każdym wyjściu ustawiamy wartość 0) - przekaźnik wraca do pozycji domyślnej, prąd przepływa, i wszystko działa
Kompilacja: wpisujemy make all lub po prostu gcc reseter.c -o reseter -O2 -Wall. I tyle

Jeśli wszystko poszło gładko, a powinno, to w bieżącym katalogu "wyskoczy" nam plik 'reseter'.