application for developing a menu

Dependencies:   C12832_lcd mbed

Revision:
0:842039476c99
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/menu.cpp	Fri Mar 21 15:22:35 2014 +0000
@@ -0,0 +1,184 @@
+#include "menu.h"
+
+C12832_LCD lcd;
+BusIn joystick_sel(p12, p14, p15);
+/*
+DigitalIn sw_right(p16);
+DigitalIn sw_up(p15);
+DigitalIn sw_enter(p14);
+DigitalIn sw_left(p13);
+DigitalIn sw_down(p12);
+*/
+DigitalOut myled_2(LED2);
+
+unsigned char menu_selection = 1;
+
+
+const char menu_000[] = "      -Main Screen-      ";
+const char menu_001[] = " Option 1 ";
+const char menu_002[] = " Option 2 ";
+const char menu_003[] = " Option 3 ";
+const char menu_004[] = " Option 4 ";
+const char menu_005[] = " Option 5 ";
+const char menu_006[] = " Option 6 ";
+const char menu_007[] = " Option 7 ";
+const char menu_008[] = " Option 8 ";
+const char menu_009[] = " START ";
+
+
+const char menu_100[] = "    [Sub Menu]    ";
+const char menu_101[] = " SubOption 1 ";
+const char menu_102[] = " SubOption 2 ";
+const char menu_103[] = " SubOption 3 ";
+const char menu_104[] = " SubOption 4 ";
+const char menu_105[] = " SubOption 5 ";
+const char menu_106[] = " SubOption 6 ";
+
+menuEntry menu[] = {
+    {menu_000, 10, 0, 0, 0, 0},
+    {menu_001, 10, 1, 2, 11, 0},
+    {menu_002, 10, 1, 3, 2, 0},
+    {menu_003, 10, 2, 4, 3, 0},
+    {menu_004, 10, 3, 5, 4, 0},
+    {menu_005, 10, 4, 6, 5, 0},
+    {menu_006, 10, 5, 7, 6, 0},
+    {menu_007, 10, 6, 8, 7, 0},
+    {menu_008, 10, 7, 9, 8, 0},
+    {menu_009, 10, 8, 9, 9, start},
+    
+    {menu_100, 7, 0, 0, 0, 0},
+    {menu_101, 7, 11, 12, 11, 0},
+    {menu_102, 7, 11, 13, 12, 0},
+    {menu_103, 7, 12, 14, 13, 0},
+    {menu_104, 7, 13, 15, 14, 0},
+    {menu_105, 7, 14, 16, 15, 0},
+    {menu_106, 7, 15, 16, 1, 0}
+};
+
+void show_menu(void)    
+{
+    unsigned int line_cnt = 0;
+    unsigned char from = 0;
+    unsigned char till = 0;
+    unsigned char temp = 0;
+    
+    while( till <= menu_selection ) 
+    {
+        till += menu[till].menupoints;
+    }
+    
+    from = till - menu[menu_selection].menupoints;
+    till--;
+    
+    temp = from;
+    
+    if( (menu_selection >= (from+2)) && (menu_selection <= (till-1)))
+    {
+        from = menu_selection - 2;   
+        till = from + 3;
+        
+        for(from = from; from <= till; from++)
+        {
+            lcd.locate(7, 8*line_cnt);
+            lcd.printf("%s", menu[from].text);
+            line_cnt++;
+        }
+        lcd.locate(0, 8*2);
+        lcd.printf(">"); 
+    }else{
+        // selection is within the top - 2 last 2 spaces
+        if(menu_selection <= (from+2))
+        {
+            till = from + 3;
+            for(from = from; from <= till; from++)
+            {
+                lcd.locate(7, 8*line_cnt);
+                lcd.printf("%s", menu[from].text);
+                line_cnt++;
+            }
+            lcd.locate(0, 8*(menu_selection-temp));
+            lcd.printf(">");            
+        }
+        if(menu_selection == till)
+        {
+            from = till - 3;
+            
+            for(from = from; from <= till; from++)
+            {
+                lcd.locate(7, 8*line_cnt);
+                lcd.printf("%s", menu[from].text);
+                line_cnt++;
+            }
+            lcd.locate(0, 8*3);
+            lcd.printf(">");             
+        }
+    } 
+            lcd.locate(0,0);
+        lcd.printf("%d %d", menu_selection, line_cnt);  
+}
+
+void browse_menu(void)
+{
+    do{
+
+        show_menu();
+        switch(joystick_sel){
+            case 0x01:
+                    menu_selection = menu[menu_selection].down;
+                break;
+            case 0x02:
+                    menu_selection = menu[menu_selection].enter;
+                    if(menu[menu_selection].fp != 0)
+                    {
+                        menu[menu_selection].fp();
+                        
+                        menu_selection = menu[menu_selection].enter;
+                    }
+                break;  
+            case 0x04:
+                    menu_selection = menu[menu_selection].up;
+                break;     
+        }
+
+ //       while(1)
+   //     {
+            myled_2 = 1;
+    
+            wait(0.25);
+            myled_2 = 0;
+    
+            wait(0.25);
+     //   }
+ /*       if(sw_up){
+            menu_selection = menu[menu_selection].up;
+        }
+        if(sw_down){
+            menu_selection = menu[menu_selection].down;
+        }
+            if(sw_left){
+                menu_selection = menu[menu_selection].up;
+            }        
+        if(sw_enter){
+            menu_selection = menu[menu_selection].enter;
+            if(menu[menu_selection].fp != 0)
+            {
+                menu[menu_selection].fp();
+                
+                menu_selection = menu[menu_selection].enter;
+            }
+            wait(0.05);
+        }      
+*/
+    }while(1);   
+}
+
+
+void start(void)
+{
+    lcd.cls();
+    lcd.locate(0, 0); lcd.printf("Start option selected");  
+    
+    while(1)
+    {
+    }
+}
\ No newline at end of file