..continued..
/******************************************************************************/ /* Task 1 'command': command processor */ /******************************************************************************/ void command (void) _task_ COMMAND { unsigned char i; printf (menu); /* display command menu */ while (1) { /* endless loop */ printf ("\nPerintah: "); /* display prompt */ getline (&inline, sizeof (inline)); /* get command line input */ for (i = 0; inline[i] != 0; i++) { /* convert to uppercase */ inline[i] = toupper(inline[i]); } for (i = 0; inline[i] == ' '; i++); /* skip blanks */ switch (inline[i]) { /* proceed to command function */ case 'D': /* Display Time Command */ printf ("Waktu Mulai : %02bd:%02bd:%02bd " "Waktu Berakhir : %02bd:%02bd:%02bd\n", start.hour, start.min, start.sec, end.hour, end.min, end.sec); printf (" Pijit ESC Untuk Membatalkan\r"); os_create_task (GET_ESC); /* ESC check in display loop */ escape = 0; /* clear escape flag */ display_time = 1; /* set display time flag */ os_clear_signal (COMMAND); /* clear pending signals */ while (!escape) { /* while no ESC entered */ printf ("Waktu Sekarang : %02bd:%02bd:%02bd\r", /* display time */ ctime.hour, ctime.min, ctime.sec); os_wait (K_SIG, 0, 0); /* wait for time change or ESC */ } os_delete_task (GET_ESC); /* ESC check not longer needed */ display_time = 0; /* clear display time flag */ printf ("\n\n"); break; case 'T': /* Set Time Command */ if (readtime (&inline[i+1])) { /* read time input and */ ctime.hour = rtime.hour; /* store in 'ctime' */ ctime.min = rtime.min; ctime.sec = rtime.sec; } break; case 'E': /* Set End Time Command */ if (readtime (&inline[i+1])) { /* read time input and */ end.hour = rtime.hour; /* store in 'end' */ end.min = rtime.min; end.sec = rtime.sec; } break; case 'S': /* Set Start Time Command */ if (readtime (&inline[i+1])) { /* read time input and */ start.hour = rtime.hour; /* store in 'start' */ start.min = rtime.min; start.sec = rtime.sec; } break; case 'L': direction = 0;printf("Arah Diubah Ke Kiri\n");break; case 'R': direction = 1;printf("Arah Diubah Ke Kekanan\n");break; case 'F': step_mode = 0;printf("MODE STEP : FULL STEP \n");break; case 'H': step_mode = 1;printf("MODE STEP : HALF STEP \n");break; default: /* Error Handling */ printf (menu); /* display command menu */ break; } } } /******************************************************************************/ /* signalon: check if clock time is between start and end */ /******************************************************************************/ bit signalon (void) { if (memcmp (&start, &end, sizeof (struct time)) < 0) { if (memcmp (&start, &ctime, sizeof (struct time)) < 0 && memcmp (&ctime, &end, sizeof (struct time)) < 0) return (1); } else { if (memcmp (&end, &ctime, sizeof (start)) > 0 && memcmp (&ctime, &start, sizeof (start)) > 0) return (1); } return (0); /* signal off, blinking on */ } /******************************************************************************/ /* Task 3 'blinking': runs if current time is outside start & end time */ /******************************************************************************/ void blinking (void) _task_ BLINKING { /* blink yellow light */ while (1) { /* endless loop */ os_wait (K_TMO, 80, 0); /* wait for timeout: 80 ticks */ os_wait (K_TMO, 80, 0); /* wait for timeout: 80 ticks */ dataport =0xff; if (signalon ()) { /* if blinking time over */ os_create_task (LIGHTS); /* start lights */ os_delete_task (BLINKING); /* and stop blinking */ } } }