#include <unistd.h>
#include <assert.h>
#include <sys/io.h>
+#include <limits.h>
+
+static const int zdroj_adresa=1;
// lptgpib.c
#define get_control() (inb(lpt_base+2) ^ 0x04)
#define TRI 0x20 /* tristate data lines */
#define NDAC 0x04 /* LPT pin 16 */
#define DAV 0x01 /* LPT pin 1 */
+#define NRFD 0x02 /* LPT pin 14 */
extern int lpt_base;
int main(int argc,char **argv) {
lptgpib_init(0x378);
+ int init=1;
for (;;) {
+
+ // GPIB -> obrazovka
+ if (init)
+ fprintf(stderr,"Inicializuji port... ");
+ lptgpib_command(UNL);
+ lptgpib_command(MLA+0);
+ lptgpib_command(MTA+zdroj_adresa);
+ if (init)
+ fprintf(stderr,"hotovo.\n");
+ init=0;
put_control(TRI | NDAC); /* clear NRFD */
+ usleep(1000000/10);
if (get_control()&DAV) { /* wait for DAV */
fprintf(stderr,"ctu znak...\n");
char flags,val=lptgpib_read_byte(&flags);
else
fprintf(stderr,"precten znak: %02x (%c)\n",val,val);
}
+ put_control(TRI | NDAC | NRFD ); /* back to default state */
+ usleep(1000000/10); /* chvili pockat, asi zbytecne, jen aby to bylo videt na portu */
+
+ // klavesnice -> GPIB
struct pollfd pollfd;
memset(&pollfd,0,sizeof pollfd);
pollfd.fd=0;
int i=poll(&pollfd,1,0);
assert(i==0||i==1);
if (i==1) {
- char val;
- i=read(0,&val,1);
- assert(i==1);
- fprintf(stderr,"zapisuji znak... %02x (%c)\n",val,val);
- lptgpib_write_byte(val,0);
- fprintf(stderr,"zapsan znak.\n");
+ char str[LINE_MAX],*s=fgets(str,sizeof(str),stdin);
+ assert(s==str);
+ s=strchr(str,'\n');
+ assert(s);
+ assert(s[1]==0);
+ *s=0;
+ fprintf(stderr,"zapisuji radek: %s\n",str);
+ lptgpib_write(zdroj_adresa,str);
+ fprintf(stderr,"zapsan radek.\n");
}
+
}
}