static uint8_t mainloop() { uint32_t ioconbak = IOCON_PIO1_11; uint32_t volatile oldCount=IntCtr; uint32_t perMin=0; // counts in last 60 s uint32_t startTime=_timectr; uint8_t button; IOCON_PIO1_11 = 0; while (1) { //GPIO_GPIO0DATA&=~(1<<11); IOCON_PIO1_11 = ioconbak; GPIO_GPIO1DATA &= ~(1 << 7); GPIO_GPIO1DATA &= ~(1 << 11); lcdClear(); lcdPrintln(" Geiger"); lcdPrintln(" Counter"); // #### for (int i=0; i< (14*( _timectr-startTime))/(60*100);i++) { lcdPrint("#"); } lcdPrintln(""); lcdPrintln("Counts:"); lcdPrint(" "); lcdPrintInt(IntCtr); lcdPrintln(" total"); lcdPrint(" "); lcdPrintInt( perMin); lcdPrintln("/min"); // remember: We have a 10ms Timer counter if ((startTime+60 *100 ) < _timectr) { // dumb algo: Just use last 60 seconds count perMin=IntCtr-oldCount; startTime=_timectr; oldCount=IntCtr; } lcdRefresh(); delayms(42); button = getInputRaw(); if (button != BTN_NONE) { delayms(23);// debounce and wait till user release button while (getInputRaw()!=BTN_NONE) delayms(23); break; } } IOCON_PIO1_11 = ioconbak; return button; }
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 playGame(void) { int len; struct packet p; while(1){ uint8_t button = getInputRaw(); sendButton(button); while(1){ if( flags & FLAGS_LONG_RECV ) len = nrf_rcv_pkt_time(64,sizeof(p),(uint8_t*)&p); else len = nrf_rcv_pkt_time(32,sizeof(p),(uint8_t*)&p); if(len==sizeof(p)){ processPacket(&p); }else{ break; } } int rnd = getRandom() % jitter; delayms(interval+rnd); }; }
void ram() { lcdClear(); lcdPrintln("SPAM:"); while(getInputRaw() != BTN_LEFT) { char c[2] = {0, 0}; c[0] = (char)getRandom(); uint8_t pkt[32]; MO_TYPE_set(pkt, c[0]); MO_GEN_set(pkt, 0xFF); if (c[0] >= 'A' && c[0] <= 'Z') MO_TIME_set(pkt, 1313803870); else if (c[0] >= 'a' && c[0] <= 'z') MO_TIME_set(pkt, getRandom() % 16777216); else MO_TIME_set(pkt, (uint32_t)getRandom()); strcpy((char *)MO_BODY(pkt), "chaosbay.camp.ccc.de"); if (!mesh_sanity(pkt)) { lcdPrint("Sending: "); lcdPrintln(c); lcdRefresh(); MPKT *mpkt = meshGetMessage(c[0]); mpkt->flags = MF_USED; memcpy(mpkt->pkt, pkt, 32); } } }
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; }
void ram(void) { FRESULT ret; FATFS FatFs[1]; /* File system object for logical drive */ //gpioSetValue (RB_LED1, CFG_LED_OFF); //backlightInit(); // lcdFill(0); ret=f_mount(0, &FatFs[0]); if(ret) { return; } // lcdLoadLZOImage("TESTLZO.ILZ"); // lcdDisplay(); ret = lcdShowLZOAnim("LZOANIM.VLZ", 80); #ifdef SIMULAT0R fprintf(stderr, "ret=%d\n", ret); #endif while(!getInputRaw()){ /* nothing Yet */ getInputWaitTimeout(1000); } return; }
void playGame(void) { int len; struct packet p; lcdPrintln("Now playing:"); lcdPrintln(gameTitle); lcdRefresh(); while(1){ uint8_t button = getInputRaw(); sendButton(button); while(1){ if( flags & FLAGS_LONG_RECV ) len = nrf_rcv_pkt_time(64,sizeof(p),(uint8_t*)&p); else len = nrf_rcv_pkt_time(32,sizeof(p),(uint8_t*)&p); if(len==sizeof(p)){ processPacket(&p); }else{ break; } } int rnd = getRandom() % jitter; delayms(interval*5+rnd); volatile uint16_t i; i = getRandom()&0xfff; while(i--); }; }
//# 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(); };
void ram(void) { struct NRF_CFG config; uint8_t buf[16]; // Space to save signal strength and username. uint8_t count = 0; char usernames[8][16]; uint8_t strength[8]; config.nrmacs=1; config.maclen[0] = 16; config.channel = 81; memcpy(config.mac0, "\x01\x02\x03\x02\x01", 5); nrf_config_set(&config); lcdClear(); lcdPrintln("Track it:"); lcdPrintln("---------"); lcdRefresh(); do{ if( nrf_rcv_pkt_time(64,sizeof(buf),buf) == 16 ){ buf[14] = 0; // TODO: allow last package parameter 0x25 if( buf[1] == 0x23 || buf[1] == 0x24){ if(0==insertUser(usernames, strength, (char *)buf+6, buf[3], count)) { if(count<8) ++count; printNames(usernames, strength, count); } } } }while ((getInputRaw())==BTN_NONE); }
//# MENU SD_USB void menu_sdcard(void){ lcdClear(); sdmmc_setup(); uint32_t r = sdmmc_acquire(); if(r) { lcdPrintln("SD card found."); lcdPrintln("No. of blocks:"); lcdPrintln(IntToStr(Chip_SDMMC_GetDeviceBlocks(LPC_SDMMC), 10, 0)); lcdPrintln("in USB MSC mode"); // SD I/O needs higher interrupt prio than USB so it works within // the USB callbacks NVIC_SetPriority(USB0_IRQn, 2); NVIC_SetPriority(SDIO_IRQn, 0); SD_MSCenable(); } else { lcdPrintln("No SD card found."); } lcdDisplay(); while(getInputRaw()==BTN_NONE){ /* wait */ __asm__ volatile ("nop"); }; lcdPrintln("goodbye!"); lcdDisplay(); MSCdisable(); Chip_SDIF_DeInit(LPC_SDMMC); }
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(); }; };
void ram(void) { lcdClear(); lcdPrintln("r0ket"); lcdPrintln("Release: "); lcdPrintln(IntToStrX(getrelease(),8)); lcdRefresh(); while(!getInputRaw())work_queue(); }
//# 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(); }
//# MENU usb_storage void msc_menu(void){ lcdClear(); lcdPrintln("MSC Enabled."); lcdRefresh(); usbMSCInit(); while(!getInputRaw())delayms(10); DoString(0,16,"MSC Disabled."); usbMSCOff(); fsReInit(); };
void main(void) { // Configure cpu and mandatory peripherals cpuInit(); // Configure the CPU // we do it later // systickInit(CFG_SYSTICK_DELAY_IN_MS); // Start systick timer // cpuInit already calls this // gpioInit(); // Enable GPIO pmuInit(); // Configure power management adcInit(); // Config adc pins to save power // initialise basic badge functions rbInit(); initUUID(); // Cache UUID values. lcdInit(); // display lcdFill(0); lcdDisplay(); switch(getInputRaw()){ case BTN_ENTER: lcdPrint("ISP active"); lcdRefresh(); ReinvokeISP(); break; case BTN_DOWN: lcdPrint("MSC active"); lcdRefresh(); usbMSCInit(); while(1); break; }; fsInit(); if( getInputRaw() == BTN_UP ){ // Reset config saveConfig(); } wrapper(); // see applications/ subdirectory }
void full_msc() { MSCenable(); lcdPrintln("MSC enabled."); lcdDisplay(); while(getInputRaw()!=BTN_ENTER) { __WFI(); }; lcdPrintln("MSC disabled"); lcdDisplay(); MSCdisable(); };
void ram() { char key; int x = 0; for(key = 0; key = getInputRaw(), key != BTN_DOWN; ) { x = (x + 1) % 64; lcdFill(0); DoString(x, 0, "scr0llr"); lcdDisplay(); delayms_queue(20); } }
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 handle_input() { int key = getInputRaw(), dir_old = snake.dir; if (key&BTN_UP && dir_old != 1) snake.dir = 3; else if (key&BTN_DOWN && dir_old != 3) snake.dir = 1; else if (key&BTN_LEFT && dir_old != 0) snake.dir = 2; else if (key&BTN_RIGHT && dir_old !=2) snake.dir = 0; }
static int showHighscore() { int key = getInputRaw(); //throw away pending keypress char nick[20]; uint32_t score = 0; highscore_set(points,GLOBAL(nickname)); score = highscore_get(nick); lcdClear(); setTextColor(0xff,0x00); DoString(0,RESY/2-33, " Your Score"); // Display own score in green color, if it's higher than high score, else red if (points > score) { setTextColor(0xff,0b00011100); } else { setTextColor(0xff,0b11100000); } DoString(RESX/2-4, RESY/2-25, IntToStr(points,6,0)); setTextColor(0xff,0x00); DoString(0,RESY/2-10, " Highscore"); setTextColor(0xff,0b11100000); DoString(RESX/2-4, RESY/2-2, IntToStr(score,6,0)); setTextColor(0xff,0x00); DoString(0, RESY/2+18, " UP to play "); DoString(0, RESY/2+26, "DOWN to quit "); lcdDisplay(); while(1) { key = getInputRaw(); if (key&BTN_DOWN) { return 1; } else if (key&BTN_UP) { return 0; } } }
// //# MENU lcdread void lcdrtest(void){ lcdClear(); lcdPrint("ID1:"); lcdPrintInt(lcdRead(128+64+16+8 +2 )); lcdNl(); lcdPrint("ID2:"); lcdPrintInt(lcdRead(128+64+16+8 +2+1)); lcdNl(); lcdPrint("ID3:"); lcdPrintInt(lcdRead(128+64+16+8+4 )); lcdNl(); lcdPrint("ID4:"); lcdPrintInt(lcdRead(128+64+16+8+4 +1)); lcdNl(); lcdPrint("Tmp:"); lcdPrintInt(lcdRead(128+64+16+8+4+2 )); lcdNl(); lcdPrint("VM:"); lcdPrintInt(lcdRead(128+64+16+8+4+2+1)); lcdNl(); // lcd_select(); mylcdWrite(0,128+32+8+4+1); lcd_deselect(); delayms(10); lcdInit(); lcdRefresh(); while(!getInputRaw())delayms(10); };
void ram(void) { int key; mandelInit(); while (1) { lcdDisplay(); mandelMove(); mandelUpdate(); // Exit on enter+left key=getInputRaw(); if(key== BTN_ENTER + BTN_LEFT) return; } return; }
//# 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); }
int main(uint32_t startloc) { cpu_clock_init(); ssp_clock_init(); systick_set_reload(208000); systick_set_clocksource(0); systick_interrupt_enable(); systick_counter_enable(); // cpu_clock_pll1_max_speed(); SETUPgout(EN_VDD); SETUPgout(MIXER_EN); 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 */ if (getInputRaw()!=BTN_LEFT){ char filename[FLEN]; readTextFile(BOOTCFG, filename, FLEN); lcdPrintln("Fname"); lcdPrintln(filename); bootFile(filename,0); }; }; static const struct MENU main={ "Bootloader", { { "Info", &doInfo}, { "Exec", &doExec}, { "Flash", &doFlash}, {NULL,NULL} }}; handleMenu(&main); return 0; }
//# 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; }
void ram(void) { int dx=0; int dy=0; static uint32_t ctr=0; ctr++; setExtFont(GLOBAL(nickfont)); dx=DoString(0,0,GLOBAL(nickname)); dx=(RESX-dx)/2; if(dx<0) dx=0; dy=(RESY-getFontHeight())/2; lcdClear(); DoString(dx,dy,GLOBAL(nickname)); lcdRefresh(); while(getInputRaw()==BTN_NONE){ delayms_queue_plus(10,0); }; return; }
void f_recv(void){ __attribute__ ((aligned (4))) uint8_t buf[32]; int len; do{ lcdClear(); len=nrf_rcv_pkt_time_encr(1000,sizeof(buf),buf,enctoggle?testkey:NULL); if(len==0){ lcdPrintln("No pkt (Timeout)"); }; lcdPrint("Size:");lcdPrintInt(len);lcdNl(); lcdPrint("1:");lcdPrintIntHex( *(int*)(buf+ 0) ); lcdNl(); lcdPrint("2:");lcdPrintIntHex( *(int*)(buf+ 4) ); lcdNl(); lcdPrint("3:");lcdPrintIntHex( *(int*)(buf+ 8) ); lcdNl(); lcdPrint("4:");lcdPrintIntHex( *(int*)(buf+12) ); lcdNl(); len=crc16(buf,14); lcdPrint("crc:");lcdPrintShortHex(len); lcdNl(); lcdDisplay(); }while ((getInputRaw())==BTN_NONE); };
void full_msc(){ MSCenable(); lcdPrintln("FLASHMSC enabled."); lcdNl(); lcdNl(); lcdDisplay(); while(getInputRaw()!=BTN_ENTER){ uint32_t min = mscDisk_minAddressWR(); uint32_t max = mscDisk_maxAddressWR(); lcdMoveCrsr(0,-16); lcdPrint("MIN:"); lcdPrintln(IntToStr(min,8,F_SSPACE)); lcdPrint("MAX:"); lcdPrintln(IntToStr(max,8,F_SSPACE)); lcdDisplay(); if(min == 0 && max == 2097151) { break; } }; lcdPrintln("FLASHMSC disabled"); lcdDisplay(); MSCdisable(); };
void ram(void) { struct NRF_CFG config; uint8_t buf[16]; config.nrmacs=1; config.maclen[0] = 16; config.channel = 81; memcpy(config.mac0, "\x01\x02\x03\x02\x01", 5); nrf_config_set(&config); lcdClear(); lcdPrintln("People nearby:"); //lcdPrint("nearby:"); lcdRefresh(); do{ if( nrf_rcv_pkt_time(64,sizeof(buf),buf) == 16 ){ buf[14] = 0; if( buf[1] == 0x23 || buf[1] == 0x24){ lcdPrintln((char*)(buf+6)); //lcdPrintln("foo"); } lcdRefresh(); } }while ((getInputRaw())==BTN_NONE); }