- // Create stdin/stdout
- if( pipe(stdin_pair) || pipe(stdout_pair) )
- {
- perror("pipe");
- return -1;
- }
-
- childPid = fork();
-
- if( childPid < 0 )
- {
- perror("fork");
- return -1;
- }
-
- // Child process
- if( childPid == 0 )
- {
- // Close write end of stdin, and set it to #0
- close(stdin_pair[1]); dup2(stdin_pair[0], 0);
- // Close read end of stdout, and set it to #1
- close(stdout_pair[0]); dup2(stdout_pair[1], 1);
-
- execl("/bin/sh", "sh", "-c", "llogin door -w-", NULL);
- perror("execl");
- exit(-1);
- }
-
- child_stdin = fdopen(stdin_pair[1], "w");
- close(stdin_pair[0]); // child stdin read
- close(stdout_pair[1]); // child stdout write
-
- if(read(stdout_pair[1], buf, 512) < 0) {
- #if DEBUG
- printf("Door_DoDispense: fread fail\n");
- #endif
- return -1;
- }
-
- // Send password
- if( fputs(gsDoor_Password, child_stdin) <= 0 ) {
- #if DEBUG
- printf("Door_DoDispense: fputs password\n");
- #endif
- return -1;
- }
- fputs("\n", child_stdin);
-
-
- #if DEBUG
- printf("Door_DoDispense: Door unlock\n");
- #endif
-
- // ATH1 - Unlock door
- if( fputs("ATH1\n", child_stdin) <= 0) {
- #if DEBUG
- printf("Door_DoDispense: fputs unlock\n");
- #endif
+ door_serial_handle = InitSerial(gsDoor_SerialPort, 1200);
+
+ if( write(door_serial_handle, "ATH1\n", 5) != 5 ) {
+ fprintf(stderr, "Unable to open door (sending ATH1)\n");
+ perror("Sending ATH1");