2cd287f885825a1a179d5a523993399dee477db6
[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
20 /*
21  * functions
22  */
23
24 #define cc1100_init     spi1_init(8,SPI_MASTER,8)
25
26 void display_string_page(u8 x,u8 p,u8 *s,u8 f,u8 o,u8 sp) {
27
28         while(*(s)) {
29                 if(x==DISPLAY_DIMX) {
30                         p+=1;
31                         x=o;
32                 }
33                 display_font_page(x,p,(u8 *)default_font+(*(s)<<3),f);
34                 x+=sp;
35                 s++;
36         }
37 }
38
39 void input_event(void) {
40
41         /* button test! */
42         if(button_get_event(&button)) {
43                 switch(button.key[0]) {
44                         case BUTTON_POWER:
45                                 display_logo((u8 *)default_logo);
46                                 break;
47                         case BUTTON_DOWN:
48                                 if(contrast>0x00)
49                                         contrast-=1;
50                                 DISPLAY_SET_CONTRAST(contrast);
51                                 break;
52                         case BUTTON_UP:
53                                 if(contrast<0x3f)
54                                         contrast+=1;
55                                 DISPLAY_SET_CONTRAST(contrast);
56                                 break;
57                         case BUTTON_A:
58                                 display_fill_screen(DISPLAY_FILL_W);
59                                 break;
60                         case BUTTON_B:
61                                 display_fill_screen(DISPLAY_FILL_LG);
62                                 break;
63                         case BUTTON_C:
64                                 display_fill_screen(DISPLAY_FILL_DG);
65                                 break;
66                         case BUTTON_D:
67                                 display_fill_screen(DISPLAY_FILL_B);
68                                 break;
69                         case BUTTON_1:
70                                 display_rectangle_page(4,2,60,5,
71                                                        DISPLAY_FILL_B,0xff);
72                                 break;
73                         case BUTTON_2:
74                                 display_rectangle_page(40,5,50,5,
75                                                        DISPLAY_FILL_LG,0x7f);
76                                 break;
77                         case BUTTON_3:
78                                 break;
79                         case BUTTON_4:
80                                 display_font_page(42,18,
81                                                   (u8 *)default_font+(0x34<<3),
82                                                   DISPLAY_FILL_B);
83                                 break;
84                         case BUTTON_5:
85                                 display_font_page(50,18,
86                                                   (u8 *)default_font+(0x35<<3),
87                                                   DISPLAY_FILL_DG);
88                                 break;
89                         case BUTTON_6:
90                                 display_font_page(58,18,
91                                                   (u8 *)default_font+(0x36<<3),
92                                                   DISPLAY_FILL_W);
93                                 break;
94                         case BUTTON_7:
95                                 break;
96                         case BUTTON_8:
97                                 break;
98                         case BUTTON_BETTY:
99                                 display_string_page(50,13,(u8 *)d1_txt,
100                                                     DISPLAY_FILL_B,0,8);
101                                 break;
102                         case BUTTON_EXIT:
103                                 display_string_page(10,8,(u8 *)d2_txt,
104                                                     DISPLAY_FILL_B,0,8);
105                                 break;
106                         default:
107                                 display_clear_screen();
108                                 break;
109                 }
110         }
111 }
112
113 /*
114  * main function
115  */
116
117 int main() {
118
119         /* variables */
120         t_button button;
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,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 }