+#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", WRAP_NONE);
+ delay(1000);
+ set_msg(" COMPUTER ", WRAP_NONE);
+ delay(1000);
+ 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 */
+ }
+ }
+ }
+ }
+}
+
void _start() {
+ /* Initialize Stuff. Particularly some memory locations that can only be
+ * written in the first 64 clock cycles upon reset.
+ */
+ display_init();
+ set_bus_expanded();
+ /* enable RTI & set rate */
+ /* init coin mech */
+ main();
}
+void rti() {
+ chime();
+}