From: John Hodge Date: Wed, 5 Jan 2011 06:12:06 +0000 (+0845) Subject: Cleaning up client, cleaning coke code X-Git-Url: https://git.ucc.asn.au/?a=commitdiff_plain;h=4343d1b16536d868dce734fdf3a8debf6f7bf890;p=tpg%2Fopendispense2.git Cleaning up client, cleaning coke code --- diff --git a/RunServerTest b/RunServerTest index 0029d1a..49bc04a 100755 --- a/RunServerTest +++ b/RunServerTest @@ -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 diff --git a/src/client/main.c b/src/client/main.c index 315dbd1..bb15905 100644 --- a/src/client/main.c +++ b/src/client/main.c @@ -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; } /** diff --git a/src/server/handler_coke.c b/src/server/handler_coke.c index 17f73a2..ad5387f 100644 --- a/src/server/handler_coke.c +++ b/src/server/handler_coke.c @@ -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)