compilation errors fixed, debug now!
[my-code/arm.git] / betty / betty.c
1 /*
2  * betty.c - alternative firmware for the betty tv ;)
3  *
4  * author: hackbard@hackdaworld.org
5  *
6  */
7
8 /* includes */
9 #include "betty.h"
10
11 /*
12  * global variables
13  */
14
15 const char announce[]="betty - live from flash at 0x80000000! ;)\r\n";
16 const char d1_txt[]="betty";
17 const char d2_txt[]="- alphablend -";
18 u8 contrast;
19 t_button button;
20
21 /*
22  * functions
23  */
24
25 #define cc1100_init     spi1_init(8,SPI_MASTER,8)
26
27 void display_string_page(u8 x,u8 p,u8 *s,u8 f,u8 o,u8 sp) {
28
29         while(*(s)) {
30                 if(x==DISPLAY_DIMX) {
31                         p+=1;
32                         x=o;
33                 }
34                 display_font_page(x,p,(u8 *)default_font+(*(s)<<3),f);
35                 x+=sp;
36                 s++;
37         }
38 }
39
40 void input_event(void) {
41
42         /* button test! */
43         if(button_get_event(&button)) {
44                 switch(button.key[0]) {
45                         case BUTTON_POWER:
46                                 display_logo((u8 *)default_logo);
47                                 break;
48                         case BUTTON_DOWN:
49                                 if(contrast>0x00)
50                                         contrast-=1;
51                                 DISPLAY_SET_CONTRAST(contrast);
52                                 break;
53                         case BUTTON_UP:
54                                 if(contrast<0x3f)
55                                         contrast+=1;
56                                 DISPLAY_SET_CONTRAST(contrast);
57                                 break;
58                         case BUTTON_A:
59                                 display_fill_screen(DISPLAY_FILL_W);
60                                 break;
61                         case BUTTON_B:
62                                 display_fill_screen(DISPLAY_FILL_LG);
63                                 break;
64                         case BUTTON_C:
65                                 display_fill_screen(DISPLAY_FILL_DG);
66                                 break;
67                         case BUTTON_D:
68                                 display_fill_screen(DISPLAY_FILL_B);
69                                 break;
70                         case BUTTON_1:
71                                 display_rectangle_page(4,2,60,5,
72                                                        DISPLAY_FILL_B,0xff);
73                                 break;
74                         case BUTTON_2:
75                                 display_rectangle_page(40,5,50,5,
76                                                        DISPLAY_FILL_LG,0x7f);
77                                 break;
78                         case BUTTON_3:
79                                 break;
80                         case BUTTON_4:
81                                 display_font_page(42,18,
82                                                   (u8 *)default_font+(0x34<<3),
83                                                   DISPLAY_FILL_B);
84                                 break;
85                         case BUTTON_5:
86                                 display_font_page(50,18,
87                                                   (u8 *)default_font+(0x35<<3),
88                                                   DISPLAY_FILL_DG);
89                                 break;
90                         case BUTTON_6:
91                                 display_font_page(58,18,
92                                                   (u8 *)default_font+(0x36<<3),
93                                                   DISPLAY_FILL_W);
94                                 break;
95                         case BUTTON_7:
96                                 break;
97                         case BUTTON_8:
98                                 break;
99                         case BUTTON_BETTY:
100                                 display_string_page(50,13,(u8 *)d1_txt,
101                                                     DISPLAY_FILL_B,0,8);
102                                 break;
103                         case BUTTON_EXIT:
104                                 display_string_page(10,8,(u8 *)d2_txt,
105                                                     DISPLAY_FILL_B,0,8);
106                                 break;
107                         default:
108                                 display_clear_screen();
109                                 break;
110                 }
111         }
112 }
113
114 /*
115  * main function
116  */
117
118 int main() {
119
120         /* variables */
121
122         /* system init */
123         pll_init();
124         pin_init();
125         ext_mem_init();
126
127         /* memory mapping - dirty! */
128         if((void *)announce<(void *)FLASH_BANK0)
129                 mmap_init(MEMTYPE_RAM);
130         else
131                 mmap_init(MEMTYPE_EXT);
132         
133         /* uart init */
134         uart0_init();
135
136         /* display init */
137         display_bl_init();
138
139         /* button init */
140         button.mode=BUTTON_INT;
141         button_init(&button);
142         button_set_retries(&button,0);
143
144         /* flash init */
145         flash_init();
146
147         /* display init */
148         display_init();
149         contrast=0x38;
150
151         /* interrupt init */
152         interrupt_init();
153         interrupt_ext_ir_config(INTERRUPT_EXT3,INTERRUPT_EXT_NOWAKE,
154                                 INTERRUPT_EXT_MODE_EDGE,
155                                 INTERRUPT_EXT_POLAR_LOW);
156         interrupt_enable(INTERRUPT_EINT3,INTERRUPT_MODE_VIRQ,0,(u32)input_event);
157
158         /*
159          * start it ...
160          */
161
162         /* toggle the display back light */
163         display_bl_toggle();
164
165         /* announce */
166         uart0_send_string((char *)announce);
167
168         
169         while(1) {
170         }
171
172         return 0;
173 }