X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Fserver%2Fhandler_door.c;h=978c1848739d33b3003115aa1fa95cbb3e74e6b6;hb=45a676d692c76885c7b0bfaf6bde158429a96a4e;hp=a819d779c0a12aa067a1147502257f874b02ebe0;hpb=0a4c98ea7934d4fb61121fb8cf8c4d94f973b950;p=tpg%2Fopendispense2.git diff --git a/src/server/handler_door.c b/src/server/handler_door.c index a819d77..978c184 100644 --- a/src/server/handler_door.c +++ b/src/server/handler_door.c @@ -14,6 +14,8 @@ #include #include +#define DOOR_UNLOCKED_DELAY 10 // 10 seconds before it re-locks + // === IMPORTS === // === PROTOTYPES === @@ -28,17 +30,16 @@ tHandler gDoor_Handler = { Door_CanDispense, Door_DoDispense }; -//char *gsDoor_SerialPort = "/dev/ttyS0"; +char *gsDoor_Password; +char *gsDoor_Command; // int giDoor_SerialFD; // == CODE === -int Door_InitHandler() -{ -// printf("connecting to door...\n"); -// giDoor_SerialFD = open(gsDoor_SerialPort, O_RDWR); -// if( giDoor_SerialFD == -1 ) { -// fprintf(stderr, "ERROR: Unable to open coke serial port ('%s')\n", gsDoor_SerialPort); -// } +int Door_InitHandler(void) +{ + gsDoor_Command = malloc(sizeof("llogin door -w ")+strlen(gsDoor_Password)); + sprintf(gsDoor_Command, "llogin door -w %s", gsDoor_Password); + return 0; } @@ -60,6 +61,7 @@ int Door_CanDispense(int User, int Item) */ int Door_DoDispense(int User, int Item) { + FILE *pipe; // Sanity please if( Item != 0 ) return -1; @@ -68,6 +70,17 @@ int Door_DoDispense(int User, int Item) return 1; // llogin or other + //pipe = popen(gsDoor_Command, "w"); + pipe = popen("llogin door -w -", "w"); + if( !pipe || pipe == (void*)-1 ) + return -1; + + fputs(gsDoor_Password, pipe); fputs("\n", pipe); + fputs("ATH1\n", pipe); + sleep(DOOR_UNLOCKED_DELAY); + fputs("ATH0\n", pipe); + + pclose(pipe); return 0; }