UART code for a 16550.
[uccvend-snackrom.git] / ROM2 / main_basic.c
index 8d54ee9..ff8687b 100644 (file)
@@ -9,39 +9,61 @@
 #include "chime.h"
 #include "server.h"
 #include "coinmech.h"
+#include "comm.h"
 #include "vend.h"
 
+extern inline void enable_rti() {
+}
+
 void _start() {
        set_bus_expanded();
-       display_init();
-       /* enable RTI & set rate */
-       /* init coin mech */
-       /* scan for motors */
+       /* enable RTI */
+       _io_ports[M6811_TMSK2] = 0x40;
+       /* powerup ADC, set IRQ' for edge-sensitive operation */
+       _io_ports[M6811_OPTION] = 0xA0;
+       /* set the stack pointer */
+       //asm volatile ("lds %1":: "i"(_stack):"sp");
+
        main();
+
+loop_forever:
+       goto loop_forever; /* wait for an interrupt to wake us up again */
 }
 
 int main() {
+       u16 last_coin_value = coin_value;
+
+       /* init coin mech */
+       comm_init();
+       display_init();
        while(1) {
-               /*
-                * have serial packet?
-                *
-                * decode msg & process:
-                *   - dispense motor
-                *   - display string
-                *   - give change
-                *   - beep
-                */
-               
-               /*
-                * have keypress?
-                *   - beep
-                *   - send via serial
-                */
-
-               /*
-                * have coin balance change?
-                *   - send via serial
-                */
+               if (rx_queue_state) {
+                       switch (msg_buf[0]) {
+                               case 'V': /* dispense something */
+                                       break;
+                               case 'D': /* write string to display */
+                                       break;
+                               case 'B': /* beep */
+                                       break;
+                               case 'U': /* query current coin balance */
+                                       break;
+                               case 'G': /* give change */
+                                       break;
+                               default:
+                               /* shrug */
+                                       break;
+                       }
+                       msg_clr();
+               }
+               keypad_read();
+               if (keypad_pressed()) {
+                       /* send packet about it */
+                       /* beep? */
+               }
+
+               if (coin_value != last_coin_value) {
+                       /* send a packet about it */
+               }
        }
 }
 

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