void main_final(void) { init_nick(); if(GLOBAL(privacy)>2){ //firstboot if(execute_file("1boot.int",0,0)){ lcdPrintln("Badge SETUP"); lcdPrintln("error."); lcdPrintln("Features may"); lcdPrintln("be broken."); lcdRefresh(); getInputWait(); getInputWaitRelease(); GLOBAL(privacy)=0; }else{ saveConfig(); }; }; //checkFirstBoot(); init_final(); menuflags|=MENU_TIMEOUT; while(1){ #ifndef FINAL if(getInputRaw()==BTN_LEFT) ISPandReset(); #endif if(getInput()){ handleMenu(&mainmenu); getInputWaitRelease(); init_nick(); }; work_queue(); fancyNickname(); }; };
/** reaction.c * First l0dable for my r0ket * Improvement is welcome * * AUTHOR: hubba */ void ram(void) { char x = gpioGetValue(RB_LED1); int rand_wait = 0; int react_time=0; int start_time = 0; int end_time = 0; gpioSetValue (RB_LED1,0); //upperleft LED off lcdClear(); lcdPrintln("Hello"); lcdPrintln(GLOBAL(nickname)); lcdPrintln("ReACTION"); lcdRefresh(); delayms(500); while(1) { react_time = 0; lcdPrintln("Press ENTER if "); lcdPrintln("LED is on!"); lcdRefresh(); rand_wait = getRandom(); rand_wait = rand_wait%50; rand_wait = 40 + rand_wait*4; // Minimum pause time is 400ms for(int i =0; i<=rand_wait; i++) //directly calling delayms(rand_wait) didn't work { delayms(10); } gpioSetValue (RB_LED1, 1); //upperleft LED ON getInputWaitRelease(); start_time = getTimer()*(SYSTICKSPEED); while (getInputWait() != BTN_ENTER); //wait for user input { } end_time = getTimer()*(SYSTICKSPEED); react_time = end_time - start_time; //measure used time lcdClear(); lcdPrint("Needed "); lcdPrintInt(react_time); lcdPrintln(" ms"); lcdPrintln("DOWN: Exit"); lcdPrintln("0ther: New game"); lcdRefresh(); gpioSetValue (RB_LED1,0); //upperleft LED off getInputWaitRelease(); if(getInputWait() == BTN_DOWN) //Check for Exit/new game { gpioSetValue (RB_LED1, x); //upperleft LED as before l0dable executed return; } } /* NEVER LAND HERE */ lcdPrintln("Flow-Error"); lcdRefresh(); return; };
void msc_menu(void){ MSCenable(); lcdPrintln("MSC enabled."); lcdDisplay(); getInputWaitRelease(); getInputWait(); lcdPrintln("disconnect"); lcdDisplay(); MSCdisable(); fsReInit(); getInputWaitRelease(); }
//# MENU nick chooseAnim void doAnim(void){ getInputWaitRelease(); if( selectFile(GLOBAL(nickl0),"N1K") != 0){ lcdPrintln("No file selected."); GLOBAL(l0nick)=0; return; }; writeFile("l0nick.cfg",GLOBAL(nickl0),strlen(GLOBAL(nickl0))); GLOBAL(l0nick)=1; saveConfig(); getInputWaitRelease(); }
//# MENU led void led_menu(){ getInputWaitRelease(); uint8_t leds=0; uint8_t adc=0; while(1){ lcdClear(); lcdPrintln("LED:"); lcdPrintln(""); lcdPrintln("U Toggle LEDs"); lcdPrintln("D Toggle ADC"); lcdPrintln(""); lcdDisplay(); switch(getInput()){ case BTN_UP: adc=0; leds=1-leds; SETUPgout(LED4); if(leds){ ON(LED1); ON(LED2); ON(LED3); ON(LED4); }else{ OFF(LED1); OFF(LED2); OFF(LED3); OFF(LED4); }; break; case BTN_DOWN: adc=1; SETUPadc(LED4); break; case BTN_ENTER: SETUPgout(LED1); SETUPgout(LED2); SETUPgout(LED3); SETUPgout(LED4); return; }; if(adc){ lcdPrint("LED4: "); lcdPrint(IntToStr(adc_get_single(ADC0,ADC_CR_CH6)*2*330/1023,4,F_LONG)); lcdNl(); lcdDisplay(); }; getInputWaitRelease(); }; };
uint8_t lcdShowAnim(char *fname) { FIL file; /* File object */ int res; UINT readbytes; uint8_t state=0; uint16_t framems=0; res=f_open(&file, fname, FA_OPEN_EXISTING|FA_READ); if(res != FR_OK) return 1; getInputWaitRelease(); while(!getInputRaw()){ res = f_read(&file, &framems, sizeof(framems), &readbytes); /* lcdPrint("ms=");lcdPrintln(IntToStr(framems,4,0)); lcdPrint("off=");lcdPrintln(IntToStr(f_tell(&file),4,0)); */ if(res != FR_OK) return 1; if(readbytes<sizeof(framems)){ f_lseek(&file,0); continue; }; lcdShowImage(&file); getInputWaitTimeout(framems); } return 0; }
static bool screen_intro() { uint32_t highscore; char highnick[20]; char key=0; bool step = false; //getInputWaitRelease(); while(key==0) { getInputWaitRelease(); lcdFill(0); font = &Font_Invaders; DoString(28,25,step?"ABC":"abc"); font = &Font_7x8; DoString (28,40,"SPACE"); DoString (18,50,"INVADERS"); highscore = highscore_get(highnick); DoInt(0, 0, highscore); DoString (0, 9, highnick); lcdDisplay(); step = !step; key=getInputWaitTimeout(1000); } //getInputWaitRelease(); return !(key==BTN_LEFT); }
int main(void) { cpuClockInit(); /* CPU Clock is now 104 MHz */ ssp_clock_init(); systickInit(); // cpu_clock_set(204); SETUPgout(EN_VDD); SETUPgout(MIXER_EN); SETUPgout(MIC_AMP_DIS); SETUPgout(LED1); SETUPgout(LED2); SETUPgout(LED3); SETUPgout(LED4); inputInit(); lcdInit(); fsInit(); lcdFill(0xff); readConfig(); generated_init(); while(1) { handleMenu(&menu_main); getInputWaitRelease(); } return 0; }
static void splash_scene() { uint32_t highscore; char highnick[20]; char key = 0; while(key == 0) { getInputWaitRelease(); int dy = getFontHeight(); int s1x = DoString(0, 0, "r0ket"); s1x = (RESX-s1x)/2; int s2x = DoString(0, 0, "JUMP!"); s2x = (RESX-s2x)/2; lcdFill(0); DoString(s1x, 3*dy, "r0ket"); DoString(s2x, 4*dy, "JUMP!"); DoString(0, 7*dy, "by webholics"); highscore = highscore_get(highnick); int s3x = DoInt(0, 0, highscore); DoChar(s3x, 0, 'm'); DoString (0, dy, highnick); lcdDisplay(); key = getInputWaitTimeout(1000); } }
//# MENU MSC void msc_menu(){ MSCenable(); lcdPrintln("MSC enabled."); getInputWaitRelease(); while(getInputRaw()!=BTN_ENTER){ if(getInputRaw()==BTN_RIGHT) lcdPrintln("."); lcdDisplay(); __WFI(); }; lcdPrintln("disconnect"); lcdDisplay(); MSCdisable(); fsReInit(); getInputWaitRelease(); };
static int showHighscore() { int key = getInputRaw(); renderHighscore(); if (points>highscore) { // Save highscore if higher highscore_set(points); } while(1) { key = getInputWait(); getInputWaitRelease(); if (key&BTN_DOWN) { return 1; } else if (key&BTN_UP) { return 0; } else if (key&BTN_RIGHT) { highscore = 0; highscore_set(highscore); setTextColor(0xff,0b00000011); DoString(RESX/2-4, RESY/2-2, IntToStr(highscore,6,0)); } renderHighscore(); } }
void ram(void){ bool again = true; FIL file; menuflags|=(MENU_JUSTONCE|MENU_BIG); screen_intro(); while (again) { color_set = false; if( f_open(&file, "yell0w", FA_OPEN_EXISTING|FA_READ) == 0 ){ yellow(); color_set = true; } if( f_open(&file, "green", FA_OPEN_EXISTING|FA_READ) == 0 ){ yellow(); color_set = true; } while (!color_set) { handleMenu(&submenu_color); } privacy_set = false; while (!privacy_set) { handleMenu(&submenu_privacy); } input("Nickname?", GLOBAL(nickname), 32, 127, MAXNICK-1); getInputWaitRelease(); again = screen_overview(); } menuflags&= (~(MENU_JUSTONCE|MENU_BIG)); writeFile("nick.cfg",GLOBAL(nickname),strlen(GLOBAL(nickname))); saveConfig(); }
static bool screen_intro() { uint32_t highscore; char highnick[20]; char key=0; bool step = false; //getInputWaitRelease(); while(key==0) { getInputWaitRelease(); lcdFill(0x00); setIntFont(&Font_Invaders); setTextColor(0x00,0b11100000); lcdSetCrsr(28+18,25+15);lcdPrint(step?"ABC":"abc"); setIntFont(&Font_7x8); setTextColor(0x00,0b00011000); lcdSetCrsr(28+18,40+15);lcdPrint("SPACE"); setTextColor(0x00,0b11111000); lcdSetCrsr(18+18,50+15);lcdPrint("INVADERS"); highscore = highscore_get(highnick); setTextColor(0x00,0xff); lcdSetCrsr(0,0);lcdPrint(IntToStr(highscore,6,F_LONG)); // lcdSetCrsr(0,9);lcdPrint(highnick); lcdDisplay(); step = !step; key=getInputWaitTimeout(1000); } //getInputWaitRelease(); return !(key==BTN_LEFT); }
//# MENU cpld void cpld_menu(){ getInputWaitRelease(); SETUPgout(EN_1V8); ON(EN_1V8); delayNop(1000000); /* wait until cpld boot */ cpu_clock_set(204); lcdClear(); lcdPrintln("CPLD"); lcdNl(); lcdNl(); bytes=0; lcdPrint(IntToStr(bytes,5,F_LONG)); lcdPrint(" bytes..."); lcdNl(); #define WAIT_LOOP_DELAY (6000000) #define ALL_LEDS (PIN_LED1|PIN_LED2|PIN_LED3) int i; int error; FRESULT res; res=f_open(&file, "cpld.xsv", FA_OPEN_EXISTING|FA_READ); if(res!=FR_OK){ lcdPrintln("FOPEN ERROR"); lcdPrintln(f_get_rc_string(res)); lcdDisplay(); getInputWait(); return; }; refill_cpld_buffer_fs(); error = cpld_jtag_program(sizeof(cpld_xsvf_buffer), cpld_xsvf_buffer, refill_cpld_buffer_fs); if(error){ lcdPrintln("Programming failed!"); lcdPrintln(IntToStr(error,5,0)); lcdDisplay(); /* LED3 (Red) steady on error */ ON(LED3); while (1); }; lcdPrintln("Success."); lcdDisplay(); for (res=0;res<10;res++){ /* blink LED1, LED2, and LED3 on success */ TOGGLE(LED1); TOGGLE(LED2); TOGGLE(LED3); for (i = 0; i < WAIT_LOOP_DELAY; i++) /* Wait a bit. */ __asm__("nop"); }; /* XXX: Maybe power toggle needed to start CPLD? */ OFF(EN_1V8); };
uint8_t joinGame() { int i; struct packet p; struct packet ack; memset((void*)&p, 0, sizeof(p)); memset((void*)&ack, 0, sizeof(ack)); p.len=sizeof(p); p.protocol='G'; p.command='J'; p.id= id; p.ctr= ++ctr; p.c.join.gameId=gameId; lcdPrintln("Joining game"); lcdRefresh(); for(i=0; i<10; i++){ nrf_snd_pkt_crc(sizeof(p),(uint8_t*)&p); int len = nrf_rcv_pkt_time(30,sizeof(ack),(uint8_t*)&ack); if( len==sizeof(ack) ){ if( (ack.len==32) && (ack.protocol=='G') && ack.command=='a' ){ //check sanity, protocol if( ack.id == id && ack.ctr == ctr ){ if( ack.c.ack.flags & FLAGS_ACK_JOINOK ){ lcdPrintln("Join OK"); lcdRefresh(); return 1; }else{ lcdPrintln("Join rejected"); lcdRefresh(); getInputWait(); getInputWaitRelease(); return 0; } } } } delayms(70); } lcdPrintln("timeout :("); lcdRefresh(); getInputWait(); getInputWaitRelease(); return 0; }
//# MENU CDC void cdc_menu(){ uint32_t prompt = 0, rdCnt = 0; static uint8_t g_rxBuff[256]; CDCenable(); lcdPrintln("CDC enabled."); lcdDisplay(); getInputWaitRelease(); while(getInputRaw()!=BTN_ENTER){ if(getInputRaw()==BTN_RIGHT){ lcdPrint("status:"); lcdPrint(IntToStr(g_vCOM.tx_flags,3,F_HEX)); lcdPrint(", "); lcdPrint("c="); lcdPrint(IntToStr(prompt,1,F_LONG)); lcdPrintln("."); lcdDisplay(); getInputWaitRelease(); }; if(getInputRaw()==BTN_LEFT){ vcom_write((uint8_t *)"Hello World!\r\n", 14); getInputWaitRelease(); }; if ((vcom_connected() != 0) && (prompt == 0)) { prompt = 1; } /* If VCOM port is opened echo whatever we receive back to host. */ if (prompt) { rdCnt = vcom_bread(&g_rxBuff[0], 256); if (rdCnt) { vcom_write((uint8_t*)"[", 1); while(g_vCOM.tx_flags & VCOM_TX_BUSY) __WFI(); // Wait for buffer emtpy vcom_write(&g_rxBuff[0], rdCnt); while(g_vCOM.tx_flags & VCOM_TX_BUSY) __WFI(); // Wait for buffer emtpy vcom_write((uint8_t*)"]", 1); } } /* Sleep until next IRQ happens */ __WFI(); }; lcdPrintln("disconnect"); lcdDisplay(); CDCdisable(); getInputWaitRelease(); }
uint8_t selectGame() { int len, i, selected; struct packet p; int a = 0; config.channel = ANNOUNCE_CHANNEL; memcpy(config.mac0, ANNOUNCE_MAC, 5); nrf_config_set(&config); gamecount = 0; for(i=0;i<60;i++){ len= nrf_rcv_pkt_time(30, sizeof(p), (uint8_t*)&p); if (len==sizeof(p)){ if( a ) a = 0; else a = 1; gpioSetValue (RB_LED2, a); processPacket(&p); } } selected = 0; while(1){ showGames(selected); int key=getInputWait(); getInputWaitRelease(); switch(key){ case BTN_DOWN: if( selected < gamecount-1 ){ selected++; } break; case BTN_UP: if( selected > 0 ){ selected--; } break; case BTN_LEFT: return 0; case BTN_ENTER: case BTN_RIGHT: if( gamecount == 0 ) return 0; gameId = games[selected].gameId; memcpy(config.txmac, games[selected].gameMac, 5); memcpy(config.mac0, games[selected].gameMac, 5); config.mac0[4]++; config.channel = games[selected].gameChannel; interval = games[selected].interval; jitter = games[selected].jitter; flags = games[selected].gameFlags; nrf_config_set(&config); if( games[selected].gameFlags & FLAGS_MASS_GAME ) return 1; else return joinGame(); } } }
//# MENU spectrum void spectrum_menu() { lcdClear(); lcdDisplay(); getInputWaitRelease(); // RF initialization from ppack.c: dac_init(false); cpu_clock_set(204); // WARP SPEED! :-) hackrf_clock_init(); rf_path_pin_setup(); /* Configure external clock in */ scu_pinmux(SCU_PINMUX_GP_CLKIN, SCU_CLK_IN | SCU_CONF_FUNCTION1); sgpio_configure_pin_functions(); ON(EN_VDD); ON(EN_1V8); OFF(MIC_AMP_DIS); delayms(500); // doesn't work without cpu_clock_set(204); // WARP SPEED! :-) si5351_init(); portapack_init(); while(1) { switch(getInput()) { case BTN_UP: displayMode=MODE_WATERFALL; break; case BTN_DOWN: displayMode=MODE_SPECTRUM; break; case BTN_LEFT: freq -= 2000000; ssp1_set_mode_max2837(); set_freq(freq); break; case BTN_RIGHT: freq += 2000000; ssp1_set_mode_max2837(); set_freq(freq); break; case BTN_ENTER: //FIXME: unset the callback, reset the clockspeed, tidy up nvic_disable_irq(NVIC_DMA_IRQ); OFF(EN_VDD); OFF(EN_1V8); ON(MIC_AMP_DIS); systick_set_clocksource(0); systick_set_reload(12e6/SYSTICKSPEED/1000); return; } } }
//# MENU config void changer(void){ if(execute_file("config.int")){ lcdClear(); lcdPrintln("config"); lcdPrintln("l0dable"); lcdPrintln("not found"); lcdRefresh(); getInputWait(); getInputWaitRelease(); } }
int main(uint32_t startloc) { cpu_clock_init(); ssp_clock_init(); systickInit(); // cpu_clock_set(204); SETUPgout(EN_VDD); SETUPgout(MIXER_EN); SETUPgout(MIC_AMP_DIS); SETUPgout(LED1); SETUPgout(LED2); SETUPgout(LED3); SETUPgout(LED4); inputInit(); flashInit(); lcdInit(); fsInit(); lcdFill(0xff); /* Display BL Image here */ sli=startloc; if (startloc != (uintptr_t)&_app_start){ /* not booted via DFU, do autoboot */ char filename[FLEN]; switch(getInputRaw()){ case BTN_LEFT: getInputWaitRelease(); doRealExec(1); break; case BTN_UP: doMSC(); default: case BTN_NONE: readTextFile(BOOTCFG, filename, FLEN); lcdPrintln("Booting:"); lcdPrintln(filename); bootFile(filename); break; }; }; static const struct MENU main={ "Bootloader", { { "Exec Firmware", &doExec}, { "MSC", &doMSC}, { "Flash Boot Ldr", &doFlash}, { "Info", &doInfo}, {NULL,NULL} }}; do { handleMenu(&main); }while(1); }
//# MENU Apack void ppack_menu() { lcdClear(); lcdPrintln("PPack port"); lcdPrintln(""); lcdPrintln("up=enable"); lcdDisplay(); dac_init(false); cpu_clock_set(204); // WARP SPEED! :-) hackrf_clock_init(); rf_path_pin_setup(); /* Configure external clock in */ scu_pinmux(SCU_PINMUX_GP_CLKIN, SCU_CLK_IN | SCU_CONF_FUNCTION1); sgpio_configure_pin_functions(); ON(EN_VDD); ON(EN_1V8); OFF(MIC_AMP_DIS); complex_s8_t * samples; while(1){ switch(getInputRaw()){ case BTN_UP: // ON(MIXER_EN); // hackrf does this cpu_clock_set(204); // WARP SPEED! :-) si5351_init(); portapack_init(); getInputWaitRelease(); break; case BTN_DOWN: lcdPrintln("file"); writeFile("samples.8", (char*)0x20000000,(uintptr_t)s8ram-0x20000000); break; case BTN_LEFT: lcdPrintln("reset"); s8ram=(complex_s8_t*)0x20000000; break; case BTN_RIGHT: break; case BTN_ENTER: return; }; TOGGLE(LED2); delayms(40); lcdPrint(IntToStr((uintptr_t)s8ram,8,F_HEX)); lcdPrint(" "); lcdPrintln(IntToStr(sctr,7,F_LONG)); lcdDisplay(); }; };
static void screen_intro() { lcdClear(); lcdPrintln(""); lcdPrintln(" r0ket"); lcdPrintln(""); lcdPrintln("launch config"); lcdPrintln(""); lcdPrintln("press any key"); lcdPrintln("to continue"); lcdRefresh(); getInputWait(); getInputWaitRelease(); }
void ram(void) { uint8_t spiBuf=0; int failed = 0, progmode = 0; uint8_t sigbyte = 0, partfam = 0, partnum = 0; lcdClear(); lcdPrintln("avrisp + spi"); lcdRefresh(); getInputWait(); getInputWaitRelease(); };
void doMSC(){ MSCenable(); lcdPrintln("MSC enabled."); lcdDisplay(); getInputWaitRelease(); while(getInputRaw()!=BTN_ENTER){ uint32_t max = mscDisk_maxAddressWR(); lcdPrint("MAX:"); lcdPrintln(IntToStr(max,8,F_SSPACE)); lcdDisplay(); lcdMoveCrsr(0,-8); if(max == 1572863) { break; } //__WFI(); }; lcdPrintln("disconnect"); lcdDisplay(); MSCdisable(); fsReInit(); getInputWaitRelease(); };
//# MENU nick changeFont void doFont(void){ getInputWaitRelease(); if( selectFile(GLOBAL(nickfont),"F0N") != 0){ lcdPrintln("No file selected."); return; }; writeFile("font.cfg",GLOBAL(nickfont),strlen(GLOBAL(nickfont))); lcdClear(); setIntFont(&Font_7x8); lcdPrintln("Test:"); setExtFont(GLOBAL(nickfont)); lcdPrintln(GLOBAL(nickname)); lcdDisplay(); setIntFont(&Font_7x8); while(!getInputRaw())delayms(10); }
//# MENU ws2812b void ws1812b_menu(){ uint8_t pattern[] = { 255, 255, 0, 255, 255, 0, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 255, 0, 0 }; uint8_t green[] = {255, 0, 0}; getInputWaitRelease(); //cpu_clock_set(17); cpu_clock_set(51); SETUPgout(RGB_LED); while(1){ lcdClear(0xff); lcdPrintln("WS2812B test"); lcdPrintln("UP: pattern"); lcdPrintln("DOWN: green"); lcdPrintln("ENTER: exit"); lcdDisplay(); switch(getInput()){ case BTN_UP: ws2812_sendarray(pattern, sizeof(pattern)); break; case BTN_DOWN: ws2812_sendarray(green, sizeof(green)); break; case BTN_LEFT: break; case BTN_RIGHT: break; case BTN_ENTER: return; break; }; }; return; };
//# MENU BPSK void bfsk_menu() { lcdClear(); lcdPrintln("ENTER to go back"); lcdPrintln("L/R/U/D to xmit"); rflib_lcdDisplay(); getInputWaitRelease(); cpu_clock_set(204); CDCenable(); rflib_init(); rflib_bfsk_init(); rflib_set_freq(FREQSTART); rflib_bfsk_receive(); while(1) { switch (getInputRaw()) { case BTN_UP: transmit("up"); break; case BTN_DOWN: transmit("down"); break; case BTN_RIGHT: transmit("right"); break; case BTN_LEFT: transmit("left"); break; case BTN_ENTER: goto stop; } if(vcom_connected()) { /* check if we got data from USB-CDC, transmit it, if so. */ uint8_t sendbuf[255]; uint32_t read = vcom_bread(sendbuf, 255); if(read > 0) rflib_bfsk_transmit(sendbuf, read, true); } receive(); } stop: rflib_shutdown(); return; }
static bool screen_intro(void) { char key=0; while(key==0) { getInputWaitRelease(); lcdFill(0); int ct = 0; for (int i = 0; i < SHIP_HEIGHT; i++){ for(int d = 0; d < SHIP_WIDTH; d++){ lcdSetPixel((40+d)%RESX,(10+i)%RESY,SHIP[ct]); ct++; } } DoString (13,25,"R0KET TYPE"); uint32_t highscore; char highnick[20]; highscore = highscore_get(highnick); DoInt(13, 40, highscore); DoString (13, 50, highnick); lcdDisplay(); key=getInputWaitTimeout(1000); } //getInputWaitRelease(); return !(key==BTN_LEFT); }
//# MENU img void img_menu() { char filename[FLEN]; FATFS FatFs; FRESULT res; int ct=0x3a; lcdClear(); lcdPrintln("Image"); lcdPrintln("up: 16bit"); lcdPrintln("down: 12bit"); lcdPrintln("l/r: contrast"); lcdDisplay(); getInputWaitRelease(); while(1){ switch(getInput()){ case BTN_UP: lcd_select(); lcdWrite(TYPE_CMD,0x3a); lcdWrite(TYPE_DATA,2); lcd_deselect(); getInputWaitRelease(); if(selectFile(filename,"L16")){ lcdPrintln("Select ERROR"); lcdDisplay(); getInputWait(); return; }; lcd_select(); lcdWrite(TYPE_CMD,0x3a); lcdWrite(TYPE_DATA,5); lcd_deselect(); do_image(filename); break; case BTN_DOWN: lcd_select(); lcdWrite(TYPE_CMD,0x3a); lcdWrite(TYPE_DATA,2); lcd_deselect(); getInputWaitRelease(); if(selectFile(filename,"LCD")){ lcdPrintln("Select ERROR"); lcdDisplay(); getInputWait(); return; }; lcd_select(); lcdWrite(TYPE_CMD,0x3a); lcdWrite(TYPE_DATA,3); lcd_deselect(); do_image(filename); break; case BTN_LEFT: ct-=1; lcd_select(); lcdWrite(TYPE_CMD,0x25); lcdWrite(TYPE_DATA, ct); lcd_deselect(); break; case BTN_RIGHT: ct+=1; lcd_select(); lcdWrite(TYPE_CMD,0x25); lcdWrite(TYPE_DATA, ct); lcd_deselect(); break; case BTN_ENTER: lcd_select(); lcdWrite(TYPE_CMD,0x3a); lcdWrite(TYPE_DATA,2); lcd_deselect(); return; }; }; };
//# MENU lcd void lcd_menu() { getInputWaitRelease(); lcdClear(); lcdPrintln("LCD:"); lcdDisplay(); ON(LED1); uint16_t x,y; uint8_t rgb=0; uint8_t ct=0x3a; uint16_t rgba[]= { RGB(0xff,0,0), RGB(0,0xff,0), RGB(0,0,0xff), RGB(0,0xff,0xff),RGB(0xff,0,0xff),RGB(0xff,0xff,0), RGB(0xff,0xff,0xff),0 }; while(1) { switch(getInputWaitRepeat()) { case BTN_DOWN: lcd_select(); lcdWrite(TYPE_CMD,0x3a); lcdWrite(TYPE_DATA,5); lcdWrite(TYPE_CMD,0x2C); for (y=0; y<128; y++) { for (x=0; x<RESX; x++) { if (x<20) { if(y<64) { PIX(0xff,(0xff-(0xff&(y<<2))),(0xff-(0xff&(y<<2)))); } else { PIX((0xff-(0xff&(y<<2))),0,0); }; } else if (x <40) { if(y<64) { PIX((0xff-(0xff&(y<<2))),0xff,(0xff-(0xff&(y<<2)))); } else { PIX(0,(0xff-(0xff&(y<<2))),0); }; } else if (x <60) { if(y<64) { PIX((0xff-(0xff&(y<<2))),(0xff-(0xff&(y<<2))),0xff); } else { PIX(0,0,(0xff-(0xff&(y<<2)))); }; } else if (x <80) { if(y<64) { PIX(((0xff&(y<<2))),0,0); } else { PIX(0xff,((0xff&(y<<2))),((0xff&(y<<2)))); }; } else if (x <100) { if(y<64) { PIX(0,((0xff&(y<<2))),0); } else { PIX(((0xff&(y<<2))),0xff,((0xff&(y<<2)))); }; } else if (x <120) { if(y<64) { PIX(0,0,((0xff&(y<<2)))); } else { PIX(((0xff&(y<<2))),((0xff&(y<<2))),0xff); }; } else { PIX(0,0,0); } }; }; for (y=128; y<RESY; y++) { for (x=0; x<RESX; x++) { PIX(0,0,0); }; }; lcd_deselect(); break; case BTN_LEFT: ct--; lcd_select(); lcdWrite(TYPE_CMD,0x25); lcdWrite(TYPE_DATA, ct); lcd_deselect(); break; case BTN_RIGHT: ct++; lcd_select(); lcdWrite(TYPE_CMD,0x25); lcdWrite(TYPE_DATA, ct); lcd_deselect(); break; case BTN_UP: lcd_select(); lcdWrite(TYPE_CMD,0x3a); lcdWrite(TYPE_DATA,5); lcdWrite(TYPE_CMD,0x2C); if(rgb==0) { for (y=0; y<RESY; y++) { for (x=0; x<RESX; x++) { if(x==0 || x==RESX-1 || y==0 || y==RESY-1) { PIX(0xff,0,0); } else if(x==1 || x==RESX-2 || y==1 || y==RESY-2) { PIX(0xff,0xff,0); } else if(x==2 || x==RESX-3 || y==2 || y==RESY-3) { PIX(0,0,0xff); } else { PIX(0xff,0xff,0xff); }; }; }; } else { for (y=0; y<RESY; y++) { for (x=0; x<RESX; x++) { lcdWrite(TYPE_DATA,rgba[rgb-1]>>8); lcdWrite(TYPE_DATA,rgba[rgb-1]&0xff); }; }; }; lcd_deselect(); rgb=(rgb+1)%(1+(sizeof(rgba)/sizeof(*rgba))); break; case BTN_ENTER: lcd_select(); lcdWrite(TYPE_CMD,0x3a); lcdWrite(TYPE_DATA,2); lcd_deselect(); return; }; getInputWaitRelease(); }; };