X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=ROM2%2Fmain.c;h=116704b77580ba29241eb52b9cf114deeb7e35eb;hb=1e7218d1311dafb5c1c81e4c4ad64847432be0b5;hp=188fef07ae118f1633f1603b5c469b8a5338d6de;hpb=c9763dcb182398266bae1c6a7a848beec1cba35d;p=uccvend-snackrom.git diff --git a/ROM2/main.c b/ROM2/main.c index 188fef0..116704b 100644 --- a/ROM2/main.c +++ b/ROM2/main.c @@ -1,16 +1,82 @@ #include "display.h" +#include "keypad.h" +#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()) { + if (last_key != KEY_RESET) { + if (uid_enter() && pin_enter()) { + /* authenticate them */ + } else { + uid = 0; + pin = 0; + /* move on */ + } + } + } } } @@ -20,6 +86,11 @@ void _start() { */ display_init(); set_bus_expanded(); + /* enable RTI & set rate */ + /* init coin mech */ main(); } +void rti() { + chime(); +}