X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Fserver%2Fhandler_coke.c;h=ce6ff1f1a922af176aba411e6ec2e77e97ca04a2;hb=3dae0d6d086107886cae289df235bac71a9d3ff3;hp=978e3f5fe538d00c3dba7bb5ed973decdf82eded;hpb=142d8dc0b172eac2e1a735df4bd0fe3461e41252;p=tpg%2Fopendispense2.git diff --git a/src/server/handler_coke.c b/src/server/handler_coke.c index 978e3f5..ce6ff1f 100644 --- a/src/server/handler_coke.c +++ b/src/server/handler_coke.c @@ -41,7 +41,7 @@ int Coke_InitHandler() if( giCoke_SerialFD == -1 ) { fprintf(stderr, "ERROR: Unable to open coke serial port ('%s')\n", gsCoke_SerialPort); } - regcomp(&gCoke_StatusRegex, "^slot\\s+(\\d)\\s+([^:]+):([a-zA-Z]+)\\s*", REG_EXTENDED); + CompileRegex(&gCoke_StatusRegex, "^slot\\s+(\\d)\\s+([^:]+):([a-zA-Z]+)\\s*", REG_EXTENDED); return 0; } @@ -49,17 +49,27 @@ int Coke_CanDispense(int User, int Item) { char tmp[32], *status; regmatch_t matches[4]; + int ret; // Sanity please - if( Item < 0 || Item > 6 ) return -1; + if( Item < 0 || Item > 6 ) return -1; // -EYOURBAD // Ask the coke machine sprintf(tmp, "s%i\n", Item); write(giCoke_SerialFD, tmp, 2); // Read the response - read(giCoke_SerialFD, tmp, sizeof(tmp)-1); - regexec(&gCoke_StatusRegex, tmp, sizeof(matches)/sizeof(matches[0]), matches, 0); + tmp[0] = '\0'; + ret = read(giCoke_SerialFD, tmp, sizeof(tmp)-1); + //printf("ret = %i\n", ret); + if( ret <= 0 ) { + fprintf(stderr, "Coke machine is not being chatty (read = %i)\n", ret); + return -1; + } + ret = RunRegex(&gCoke_StatusRegex, tmp, sizeof(matches)/sizeof(matches[0]), matches, "Bad Response"); + if( ret ) { + return -1; + } tmp[ matches[3].rm_eo ] = '\0'; status = &tmp[ matches[3].rm_so ]; @@ -67,9 +77,9 @@ int Coke_CanDispense(int User, int Item) printf("Machine responded slot status '%s'\n", status); if( strcmp(status, "full") == 0 ) - return 1; + return 0; - return 0; + return 1; } /**