Cleaning up client, cleaning coke code
authorJohn Hodge <[email protected]>
Wed, 5 Jan 2011 06:12:06 +0000 (14:57 +0845)
committerJohn Hodge <[email protected]>
Wed, 5 Jan 2011 06:12:06 +0000 (14:57 +0845)
RunServerTest
src/client/main.c
src/server/handler_coke.c

index 0029d1a..49bc04a 100755 (executable)
@@ -3,8 +3,8 @@
 ARGS="--itemsfile items.cfg -p 11020"
 ARGS=$ARGS" --cokeport /dev/ttyUSB0"
 
-if [ "x$1" == "xdbg" ]; then 
-       LD_LIBRARY_PATH=. gdb --args ./dispsrv $ARGS
-else
+#if [ "x$1" == "xdbg" ]; then 
+#      LD_LIBRARY_PATH=. gdb --args ./dispsrv $ARGS
+#else
        LD_LIBRARY_PATH=. ./dispsrv $ARGS
-fi
+#fi
index 315dbd1..bb15905 100644 (file)
@@ -179,6 +179,7 @@ int ShowNCursesUI(void)
         int    itemCount = displayMinItems;
         int    itemBase = 0;
         int    currentItem = 0;
+        int    ret = -2;       // -2: Used for marking "no return yet"
         
         int    height, width;
         
@@ -186,6 +187,8 @@ int ShowNCursesUI(void)
        initscr();
        raw(); noecho();
        
+       // Get item count
+       // - 6: randomly chosen (Need at least 3)
        itemCount = LINES - 6;
        if( itemCount > giNumItems )
                itemCount = giNumItems;
@@ -292,7 +295,18 @@ int ShowNCursesUI(void)
                        }
                }
                else {
-                       break;
+                       switch(ch)
+                       {
+                       case '\n':
+                               ret = currentItem;
+                               break;
+                       case 'q':
+                               ret = -1;       // -1: Return with no dispense
+                               break;
+                       }
+                       
+                       // Check if the return value was changed
+                       if( ret != -2 ) break;
                }
                
        }
@@ -300,7 +314,7 @@ int ShowNCursesUI(void)
        
        // Leave
        endwin();
-       return -1;
+       return ret;
 }
 
 /**
index 17f73a2..ad5387f 100644 (file)
@@ -21,7 +21,7 @@
  int   Coke_InitHandler();
  int   Coke_CanDispense(int User, int Item);
  int   Coke_DoDispense(int User, int Item);
-void   WaitForColon();
+ int   WaitForColon();
  int   ReadLine(int len, char *output);
 
 // === GLOBALS ===
@@ -58,11 +58,14 @@ int Coke_CanDispense(int User, int Item)
        // Sanity please
        if( Item < 0 || Item > 6 )      return -1;      // -EYOURBAD
        
-       write(giCoke_SerialFD, "\r\n", 2);
-       write(giCoke_SerialFD, "\r\n", 2);
-       write(giCoke_SerialFD, "\r\n", 2);
+       write(giCoke_SerialFD, "d7\r\n", 4);
+       write(giCoke_SerialFD, "d7\r\n", 4);
+       write(giCoke_SerialFD, "d7\r\n", 4);
        
-       WaitForColon();
+       if( WaitForColon() ) {
+               fprintf(stderr, "Coke machine timed out\n");
+               return -2;      // -EMYBAD
+       }
        
        // Ask the coke machine
        sprintf(tmp, "s%i\r\n", Item);
@@ -131,11 +134,16 @@ char ReadChar()
        fd_set  readfs;
        char    ch = 0;
         int    ret;
+       struct timeval  timeout;
+       
+       timeout.tv_sec = 5;     // 5 second timeout
+       timeout.tv_usec = 0;
        
        FD_ZERO(&readfs);
        FD_SET(giCoke_SerialFD, &readfs);
        
-       ret = select(giCoke_SerialFD+1, &readfs, NULL, NULL, NULL);
+       ret = select(giCoke_SerialFD+1, &readfs, NULL, NULL, &timeout);
+       if( ret == 0 )  return 0;       // Timeout
        if( ret != 1 ) {
                printf("readchar return %i\n", ret);
                return 0;
@@ -150,7 +158,7 @@ char ReadChar()
        return ch;
 }
 
-void WaitForColon()
+int WaitForColon()
 {
        fd_set  readfs;
        char    ch = 0;
@@ -158,6 +166,10 @@ void WaitForColon()
        FD_SET(giCoke_SerialFD, &readfs);
        
        while( (ch = ReadChar()) != ':' && ch != 0);
+       
+       if( ch == 0 )   return -1;      // Timeout
+       
+       return 0;
 }
 
 int ReadLine(int len, char *output)

UCC git Repository :: git.ucc.asn.au