X-Git-Url: https://hackdaworld.org/gitweb/?p=my-code%2Farm.git;a=blobdiff_plain;f=betty%2Fbetty.c;h=bac66143a21d14c53f875da34132b7375c49e396;hp=f2ce2e5fba098487845e8c310c3252c7ca91b999;hb=b75b1bf631a3bb68f50f65c65736b1bf743f51b7;hpb=90fa4f3eca580f497dd24e9b3afd818d3b1f7054 diff --git a/betty/betty.c b/betty/betty.c index f2ce2e5..bac6614 100644 --- a/betty/betty.c +++ b/betty/betty.c @@ -5,10 +5,189 @@ * */ +/* includes */ +#include "betty.h" + +/* + * global variables + */ + +const char announce[]="betty - live from flash at 0x80000000! ;)\r\n"; +const char d1_txt[]="betty"; +const char d2_txt[]="- alphablend -"; +u8 contrast; +t_button button; + +/* + * functions + */ + +#define cc1100_init spi1_init(8,SPI_MASTER,8) + +void display_string_page(u8 x,u8 p,u8 *s,u8 f,u8 o,u8 sp) { + + while(*(s)) { + if(x==DISPLAY_DIMX) { + p+=1; + x=o; + } + display_font_page(x,p,(u8 *)default_font+(*(s)<<3),f); + x+=sp; + s++; + } +} + +void __attribute__ ((interrupt("IRQ"))) input_event(void) { + + u8 noret,tries; + + /* button scan */ + if(button_get_event(&button)) { + switch(button.key[0]) { + case BUTTON_POWER: + display_logo((u8 *)default_logo); + break; + case BUTTON_DOWN: + if(contrast>0x00) + contrast-=1; + DISPLAY_SET_CONTRAST(contrast); + break; + case BUTTON_UP: + if(contrast<0x3f) + contrast+=1; + DISPLAY_SET_CONTRAST(contrast); + break; + case BUTTON_A: + display_fill_screen(DISPLAY_FILL_W); + break; + case BUTTON_B: + display_fill_screen(DISPLAY_FILL_LG); + break; + case BUTTON_C: + display_fill_screen(DISPLAY_FILL_DG); + break; + case BUTTON_D: + display_fill_screen(DISPLAY_FILL_B); + break; + case BUTTON_1: + display_rectangle_page(4,2,60,5, + DISPLAY_FILL_B,0xff); + break; + case BUTTON_2: + display_rectangle_page(40,5,50,5, + DISPLAY_FILL_LG,0x7f); + break; + case BUTTON_3: + break; + case BUTTON_4: + display_font_page(42,18, + (u8 *)default_font+(0x34<<3), + DISPLAY_FILL_B); + break; + case BUTTON_5: + display_font_page(50,18, + (u8 *)default_font+(0x35<<3), + DISPLAY_FILL_DG); + break; + case BUTTON_6: + display_font_page(58,18, + (u8 *)default_font+(0x36<<3), + DISPLAY_FILL_W); + break; + case BUTTON_7: + break; + case BUTTON_8: + break; + case BUTTON_BETTY: + display_string_page(50,13,(u8 *)d1_txt, + DISPLAY_FILL_B,0,8); + break; + case BUTTON_EXIT: + display_string_page(10,8,(u8 *)d2_txt, + DISPLAY_FILL_B,0,8); + break; + default: + display_clear_screen(); + break; + } + } + + /* resume the interrupt at button release */ + noret=1; + while(noret) { + tries=0xff; + noret=1; + while(tries--) { + noret=IOPIN0&(1<<30)?0:1; + if(noret) + break; + } + } + interrupt_ack(); + interrupt_ext_ir_set(INTERRUPT_EXT3); +} + +/* + * main function + */ + int main() { + /* variables */ + + /* system init */ + pll_init(); + pin_init(); + ext_mem_init(); + + /* memory mapping - dirty! */ + if((void *)announce<(void *)FLASH_BANK0) + mmap_init(MEMTYPE_RAM); + else + mmap_init(MEMTYPE_EXT); + + /* uart init */ + uart0_init(); + + /* display init */ + display_bl_init(); + + /* button init */ + button.mode=BUTTON_INT; + button_init(&button); + button_set_retries(&button,30); + /* flash init */ + flash_init(); + + /* display init */ + display_init(); + contrast=0x38; + + /* interrupt init */ + interrupt_init(); + interrupt_ext_ir_config(INTERRUPT_EXT3,INTERRUPT_EXT_NOWAKE, + INTERRUPT_EXT_MODE_EDGE, + INTERRUPT_EXT_POLAR_LOW); + interrupt_ext_ir_set(INTERRUPT_EXT3); + interrupt_enable(INTERRUPT_EINT3,INTERRUPT_MODE_VIRQ, + 0,(u32)input_event); + + /* + * start it ... + */ + + /* toggle the display back light */ + display_bl_toggle(); + + /* announce */ + uart0_send_string((char *)announce); + + + while(1) { + pause(0xffffff); + uart0_send_string((char *)announce); + } return 0; } -