Ik ben geen c-expert, maar het is me toch gelukt een programma te schrijven, die de lpt-poort kan aan sturen. Ik heb via een schakeling 8 relais achter de data-lijnen van de lpt-poort hangen, en die stuur ik aan via het onderstaande programma in C. als ik bijvoorbeeld ./LPT 1 doe, wordt uitgang 1 hoog, en de andere uitgangen blijven ongewijzigd. met -1 wordt uitgang 1 laag en de andere uitgangen blijven ongewijzigd.
Dit programma stuur ik aan via php. Werkt best mooi, maar ik ben niet snel tevreden, dus er moet nu ook nog een logfile worden bijgehouden. Hier kom ik niet helemaal uit, waarschijnlijk is het iest simpels. ik krijg bij het compileren de volgende foutmeleding:
49: Let op: passing argument 1 of 'fputs' makes pointer from integer without a cast
een declaratie probleem denk ik?
weet iemand raad?
Dit programma stuur ik aan via php. Werkt best mooi, maar ik ben niet snel tevreden, dus er moet nu ook nog een logfile worden bijgehouden. Hier kom ik niet helemaal uit, waarschijnlijk is het iest simpels. ik krijg bij het compileren de volgende foutmeleding:
49: Let op: passing argument 1 of 'fputs' makes pointer from integer without a cast
een declaratie probleem denk ik?
weet iemand raad?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| #include <stdio.h>
#include <unistd.h>
#include <sys/io.h>
#include <stdlib.h>
#include <time.h>
#include <locale.h>
#define BASEPORT 0x378 /* LPT1 *
main(int argc, char **argv)
{
int value;
int status;
char temp;
if (argc!=2)
fprintf(stderr, "Error: Wrong number of arguments. This program needs one argument which is number between -255 and 255.\n"), exit(1);
if (sscanf(argv[1],"%i",&value)!=1)
fprintf(stderr, "Error: Parameter is not a number.\n"), exit(1);
if ((value<-255) || (value>255))
fprintf(stderr, "Error: Invalid numeric value. The parameter number must be between -255 and 255\n"), exit(1);
if (value==0)
fprintf(stderr, "Error: Invalid numeric value. The parameter can not be 0\n"), exit(1);
if (ioperm(BASEPORT,3,1))
fprintf(stderr, "Error: Couldn't get the port at %x\n", BASEPORT), exit(1);
temp=value; /* value opslaan in temp voor logbestand *
status=inb (BASEPORT); /* Status lpt-poort ophalen *
if (value>0){status=(status|value);} /* Invoer>0 status of invoer *
if (value<0){value=(-value);status=(status& ~ value);} /* Invoer<0 status en niet invoer *
outb (status,BASEPORT); /* status naar lpt-poort schrijven *
char *l; /* Het volgende stuk is om de huidige *
time_t t; /* datum op te halen... *
struct tm *tm;
char s[100];
l = setlocale(LC_TIME,"");
if (l==NULL) return 1;
t = time(NULL);
tm = localtime(&t);
FILE *file; /* Een log-bestandje bijhouden
file=fopen("lpt.log","a");
if(file==NULL){return 1;}
else {
fputs((asctime(tm)),file);
fputs(temp,file); /* Hier gaat het mis
fclose(file);
}
return 0;
} |