diff options
Diffstat (limited to 'content/demo-programme')
| -rw-r--r-- | content/demo-programme/ppraider.c | 108 | ||||
| -rw-r--r-- | content/demo-programme/raider.c | 109 |
2 files changed, 217 insertions, 0 deletions
diff --git a/content/demo-programme/ppraider.c b/content/demo-programme/ppraider.c new file mode 100644 index 0000000..20288c7 --- /dev/null +++ b/content/demo-programme/ppraider.c @@ -0,0 +1,108 @@ +/* + alle datenpins der reihe nach setzen via parport +*/ + +#include <stdio.h> +#include <stdlib.h> +#include <fcntl.h> +#include <unistd.h> +#include <errno.h> +#include <string.h> +#include <sys/ioctl.h> + +#include <linux/parport.h> +#include <linux/ppdev.h> + + +#define DEVICE "/dev/parport0" + +static char *RCSID __attribute__ ((unused)) = + "$Id: ppraider.c,v 1.1 2006/03/19 15:33:54 walter Exp walter $"; + + +#define SHOW(st,bits) printf(#bits" %s\n", ( st & bits) ?"on":"off") + + +int xopenport(char *name, int fdmode) +{ + static int fd; + int mode; + + + mode = O_WRONLY | O_NOCTTY; + fd = open(name, mode); + + if (fd == -1) { + perror("open"); + exit(EXIT_FAILURE); + } + + + + if (ioctl(fd, PPCLAIM)) { + perror("PPCLAIM"); + close(fd); + exit(EXIT_FAILURE); + } + mode = IEEE1284_MODE_COMPAT; + + if (ioctl(fd, PPNEGOT, &mode)) { + perror("PPNEGOT"); + close(fd); + exit(EXIT_FAILURE); + } + return fd; +} + + /* release port close(fd), ignore errors */ +void xcloseport(int fd) +{ + ioctl(fd, PPRELEASE); + close(fd); +} + + +void xset_data(int fd, int data) +{ + int ret; + ret = ioctl(fd, PPWDATA, &data); + if (!ret) + return; + fprintf(stderr, "%s failed:%s\n", __func__, strerror(errno)); + exit(EXIT_FAILURE); +} + + + /* get status info */ + /* clean up later */ +void xget_status(int fd, unsigned char *foo) +{ + int ret; + unsigned char status; + ret = ioctl(fd, PPRSTATUS, &status); + if (!ret) { + *foo = status; + return; + + } + fprintf(stderr, "%s failed:%s\n", __func__, strerror(errno)); + exit(EXIT_FAILURE); +} + + +int main() +{ + int i,fd; + fd = xopenport(DEVICE, 0); + + + for (i = 0; i < 8; i++) { + xset_data(fd, 1 << i); + usleep(500000); + } + + xset_data(fd, 0); + xcloseport(fd); + + return 0; +} diff --git a/content/demo-programme/raider.c b/content/demo-programme/raider.c new file mode 100644 index 0000000..6669c2b --- /dev/null +++ b/content/demo-programme/raider.c @@ -0,0 +1,109 @@ +#include <ieee1284.h> +#include <stdlib.h> +#include <stdio.h> + +#define SHOW(st,bits) printf(#bits" %s\n", ( st & bits) ?"on":"off") + +void dump_cap(int cap) +{ + + SHOW(cap,CAP1284_RAW); + SHOW(cap,CAP1284_NIBBLE); + SHOW(cap,CAP1284_BYTE); + SHOW(cap,CAP1284_COMPAT); + SHOW(cap,CAP1284_BECP); + SHOW(cap,CAP1284_ECP); + SHOW(cap,CAP1284_ECPRLE); + SHOW(cap,CAP1284_ECPSWE); + SHOW(cap,CAP1284_EPP); + SHOW(cap,CAP1284_EPPSL); + SHOW(cap,CAP1284_EPPSWE); + SHOW(cap,CAP1284_IRQ); + SHOW(cap,CAP1284_DMA) ; + + +} + + + +void pperror(int ret) +{ + switch(ret) + { + case E1284_NOMEM: + puts("There is not enough memory"); + break; + + case E1284_INVALIDPORT: + puts("The port is invalid"); + break; + + case E1284_SYS: + perror("E1284_SYS"); + break; + + default: + printf("unknown error %d",ret); + } + +} + +int main() +{ + int ret; + int fd; + int flags,cap,i; + unsigned char dat; + + struct parport_list *plist=calloc(1,sizeof(*plist)); + struct parport *pport; + + + ret = ieee1284_find_ports( plist, 0); + + if ( ( ret != E1284_OK ) || (plist->portc < 1) ) /* cannot find parports */ + return -1; + + pport = plist->portv[0]; + + + //flags=F1284_EXCL; //causes CLAIM to fail is mod lp is loaded + flags=0; + printf("going to open %s\n",pport->filename); + ret=ieee1284_open(pport,flags,&cap); + if (ret != E1284_OK ) + goto no_open; + + // + dump_cap(cap); + + ret = ieee1284_claim ( pport ); + if ( ret != E1284_OK ) + { + printf("could not claim port\n"); + pperror( ret ); + goto no_claim; + } + + /* set data direction */ + ieee1284_data_dir( pport,0); + + + for(i=0;i<8;i++) + { + dat=1<<i; + ieee1284_write_data(pport,dat); + printf("write and wait %x\n",dat); + usleep(100000); + } + + ieee1284_write_data(pport,0); + + ieee1284_release(pport); +no_claim: + ieee1284_close(pport); +no_open: + ieee1284_free_ports(plist); + + return 0; +} |
