X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=inline;f=src%2Fserver%2Fhandler_coke.c;h=13f25c0833726d97cdfd7013f70941b74739a520;hb=4b597ccec76234944c19a9fb5d4f5d63e5671807;hp=493212e38296f0b3ada78ccc63c1c79dfa0f1f21;hpb=05918a67e8509a2b2df6509039a801affd3444eb;p=tpg%2Fopendispense2.git diff --git a/src/server/handler_coke.c b/src/server/handler_coke.c index 493212e..13f25c0 100644 --- a/src/server/handler_coke.c +++ b/src/server/handler_coke.c @@ -9,6 +9,7 @@ */ #include "common.h" #include +#include #include #include #include @@ -36,27 +37,33 @@ regex_t gCoke_StatusRegex; int Coke_InitHandler() { giCoke_SerialFD = open(gsCoke_SerialPort, O_RDWR); - regcomp(&gCoke_StatusRegex, "^$", REG_EXTENDED); + regcomp(&gCoke_StatusRegex, "^slot\\s+(\\d)\\s+([^:]+):([a-zA-Z]+)\\s*", REG_EXTENDED); return 0; } int Coke_CanDispense(int User, int Item) { - char tmp[32]; + char tmp[32], *status; regmatch_t matches[4]; // Sanity please if( Item < 0 || Item > 6 ) return -1; // Ask the coke machine - sprintf(tmp, "s%i", Item); + 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); - printf("s%i response '%s'\n", Item, tmp); + tmp[ matches[3].rm_eo ] = '\0'; + status = &tmp[ matches[3].rm_so ]; + + printf("Machine responded slot status '%s'\n", status); + + if( strcmp(status, "full") == 0 ) + return 1; return 0; } @@ -66,21 +73,24 @@ int Coke_CanDispense(int User, int Item) */ int Coke_DoDispense(int User, int Item) { - char tmp[32]; + char tmp[32], *status; regmatch_t matches[4]; // Sanity please if( Item < 0 || Item > 6 ) return -1; // Dispense - sprintf(tmp, "d%i", Item); + sprintf(tmp, "d%i\n", Item); write(giCoke_SerialFD, tmp, 2); // Get status read(giCoke_SerialFD, tmp, sizeof(tmp)-1); regexec(&gCoke_StatusRegex, tmp, sizeof(matches)/sizeof(matches[0]), matches, 0); - printf("d%i response '%s'\n", Item, tmp); + tmp[ matches[3].rm_eo ] = '\0'; + status = &tmp[ matches[3].rm_so ]; + + printf("Machine responded slot status '%s'\n", status); return 0; }