Implementace rezimu kontroler.
[lptgpib.git] / terminal.c
index 5de10a8..c0ceafd 100644 (file)
@@ -5,6 +5,9 @@
 #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);
@@ -27,6 +43,9 @@ int main(int argc,char **argv) {
       else
        fprintf(stderr,"precten znak: %02x (%c)\n",val,val);
     }
+    put_control(TRI | NDAC | NRFD );  /* back to default state */
+
+    // klavesnice -> GPIB
     struct pollfd pollfd;
     memset(&pollfd,0,sizeof pollfd);
     pollfd.fd=0;
@@ -34,12 +53,16 @@ int main(int argc,char **argv) {
     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");
     }
+
   }
 }