Beginnings of a UI.
authorBernard Blackham <[email protected]>
Wed, 6 Aug 2003 16:16:50 +0000 (16:16 +0000)
committerBernard Blackham <[email protected]>
Wed, 6 Aug 2003 16:16:50 +0000 (16:16 +0000)
ROM2/helpers.c
ROM2/main.c

index 07ab7f4..ead76da 100644 (file)
@@ -1,8 +1,8 @@
 #include "vend.h"
 
-#define DELAY_MAGIC 20 /* FIXME: number of loops required for ~ 1 millisecond */
+#define DELAY_MAGIC 20 /* FIXME: number of loops for ~ 1 millisecond (< 256) */
 void delay(u16 ms) {
-       int i;
+       u8 i;
        for (;ms;ms--) {
                for (i=0;i<DELAY_MAGIC; i++)
                        asm("nop\nnop\nnop\nnop\nnop\n");
index 1567700..116704b 100644 (file)
@@ -3,20 +3,78 @@
 #include "chime.h"
 #include "vend.h"
 
+u16 uid;
+u16 pin;
+
+bool uid_enter() {
+       u8 uidpos;
+       /* the user has started to type in his/her UID. grab the last key and continue
+        * reading. Returns true if a UID was entered successfully.
+        * The UID will be entered as 5 digits. (shorter uids should be pre-padded
+        * with zeros)
+        */
+       uid = last_key%10; /* 10 => 0, it was _not_ reset (hopefuly :) */
+       set_msg("UID?      ", WRAP_NONE);
+       set_char((last_key%10)+'0', 5);
+
+       for (uidpos = 2; uidpos <= 5; uidpos++) {
+               keypad_getkey();
+               if (last_key == KEY_RESET) {
+                       uid = 0;
+                       return 0;
+               }
+               uid = (uid*10) + (last_key%10);
+               set_char((last_key%10)+'0', 4+uidpos);
+       }
+       return 1;
+}
+
+
+bool pin_enter() {
+       u8 pinpos;
+       /* We ask for a pin, display a PIN: prompt. PINs must be a 4 digit number.
+        * Strictly, they must be 16-bit, but it's easier to use the guarantee that
+        * 4-digits numbers are < 65536
+        *
+        * Also display X's on screen as the pin is entered.
+        */
+       set_msg("PIN?      ", WRAP_NONE);
+       for (pinpos = 1; pinpos <= 5; pinpos++) {
+               keypad_getkey();
+               if (last_key == KEY_RESET) {
+                       pin = 0;
+                       return 0;
+               }
+               pin = (pin*10) + (last_key%10);
+               set_char('X', 4+pinpos);
+       }
+       return 1;
+}
+
 int main() {
        /* do stuff */
-       set_msg("UNIVERSITY");
+       set_msg("UNIVERSITY", WRAP_NONE);
        delay(1000);
-       set_msg(" COMPUTER ");
+       set_msg(" COMPUTER ", WRAP_NONE);
        delay(1000);
-       set_msg("   CLUB   ");
+       set_msg("   CLUB   ", WRAP_NONE);
        delay(1000);
 
+       set_msg("UCC *** INSERT COINS OR USER-ID", WRAP_SCROLL_L);
        while(1) {
+               /* this needs to be a relatively tight loop to make sure we catch
+                * keypresses
+                */
                keypad_read();
                if (keypad_pressed()) {
-                       switch (last_key) {
-
+                       if (last_key != KEY_RESET) {
+                               if (uid_enter() && pin_enter()) {
+                                       /* authenticate them */
+                               } else {
+                                       uid = 0;
+                                       pin = 0;
+                                       /* move on */
+                               }
                        }
                }
        }
@@ -28,6 +86,8 @@ void _start() {
         */
        display_init();
        set_bus_expanded();
+       /* enable RTI & set rate */
+       /* init coin mech */
        main();
 }
 

UCC git Repository :: git.ucc.asn.au