void main_cdc(void) { int dx = 0; //lastTick = systickGetTicks(); // Used to control output/printf timing lcdPrintln("Init USB"); lcdRefresh(); CDC_Init(); // Initialise VCOM USB_Init(); // USB Initialization USB_Connect(TRUE); // USB Connect // Wait until USB is configured or timeout occurs uint32_t usbTimeout = 0; while ( usbTimeout < CFG_USBCDC_INITTIMEOUT / 10 ) { if (USB_Configuration) break; delayms(10); // Wait 10ms usbTimeout++; } lcdPrintln("Done"); lcdRefresh(); uint8_t buf[2] = {0,0}; int l; while(1){ CDC_OutBufAvailChar(&l); if( l ){ l = 1; CDC_RdOutBuf (buf, &l); puts(buf); dx=DoString(dx,0,buf); lcdDisplay(); } //puts("hello world\r\n"); //delayms(1); } }
/** 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; };
// //# MENU img img void t_img(void){ char fname[FILENAMELEN]; selectFile(fname, "LCD"); lcdLoadImage(fname); lcdRefresh(); getInputWait(); };
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--); }; }
void displayPopup(const pm_char * pstr) { s_warning = pstr; displayBox(); s_warning = NULL; lcdRefresh(); }
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); }
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() { 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 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; }
void startServer(void){ mode = MODE_SERVER; lcdClear(); lcdPrintln("Server started"); lcdRefresh(); configNrf(); }
void ram(void) { lcdClear(); lcdPrintln("r0ket"); lcdPrintln("Release: "); lcdPrintln(IntToStrX(getrelease(),8)); lcdRefresh(); while(!getInputRaw())work_queue(); }
void updateProgressBar(int num, int den) { if (num > 0 && den > 0) { int width = (200*num)/den; lcd_hline(5, 6*FH+6, width, FORCE); lcd_hline(5, 6*FH+7, width, FORCE); lcd_hline(5, 6*FH+8, width, FORCE); lcdRefresh(); } }
//# 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 startClient(void){ mode = MODE_CLIENT; lcdClear(); lcdPrintln("Client started"); lcdRefresh(); configNrf(); receive = 1; }
void processText(struct text *t) { if( t->flags & FLAGS_CLS ) lcdClear() ; lcdSetCrsr(t->x, t->y); t->text[16] = 0; lcdPrint(t->text); lcdRefresh(); }
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 }
//# MENU config void changer(void){ if(execute_file("config.int")){ lcdClear(); lcdPrintln("config"); lcdPrintln("l0dable"); lcdPrintln("not found"); lcdRefresh(); getInputWait(); getInputWaitRelease(); } }
void printNames(char (*usernames)[16], uint8_t * strength, uint8_t count) { int i; lcdPrintln("Track it:"); lcdPrintln("-------------------"); lcdPrintln(IntToStr(count,5,0)); for(i=0; i<count; ++i) { lcdPrint(usernames[i]); lcdPrint(" strength "); lcdPrintln(IntToStr(strength[i],5,0)); } lcdRefresh(); }
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 fsInit(){ FRESULT i; DIR dir; /* Directory object */ f_mount(0, &FatFs); i = f_opendir(&dir, "0:"); if( i == FR_NO_FILESYSTEM ){ lcdPrintln("filesystm b0rk"); lcdPrintln("Formating..."); lcdRefresh(); format_formatDF(); lcdPrintln("Done."); lcdPrintln("Now copy files"); lcdPrintln("to drive. See"); lcdPrintln(""); lcdPrintln("r0ket.de/init"); lcdRefresh(); usbMSCInit(); while(1); } };
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; }
// //# 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) { 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); }
uint8_t check_end(void){ if(player1.score >= MAX_POINTS || player2.score >= MAX_POINTS){ receive = 0; lcdClear(); lcdNl(); lcdPrintln(" GAME OVER"); lcdNl(); lcdPrint(" Player "); lcdPrint(IntToStr(2 - (player1.score > player2.score),1,0)); lcdPrintln(" won"); lcdRefresh(); return 1; } return 0; }
void showGames(uint8_t selected) { int i; lcdClear(); lcdPrintln("Games:"); if( gamecount ){ for(i=0;i<gamecount;i++){ if( i==selected ) lcdPrint("*"); else lcdPrint(" "); char buf[9]; memcpy(buf, games[i].gameTitle, 8); buf[8] = 0; lcdPrintln(buf); } }else{ lcdPrint("*No Games"); } lcdRefresh(); }
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; }
static bool screen_overview() { char key = 0; while (key != BTN_ENTER) { lcdClear(); lcdPrintln("Privacy:"); lcdPrintln(levels[(int)GLOBAL(privacy)]); lcdPrintln(""); lcdPrintln("Nickname:"); lcdPrintln(GLOBAL(nickname)); lcdPrintln(""); lcdPrintln("LEFT: cancel"); lcdPrintln("ENTER: OK"); lcdRefresh(); key = getInputWait(); if (key == BTN_LEFT) { //getInputWaitRelease(); return true; } } return false; }
static void intro(int num){ #if 0 FIL file; int res; UINT readbytes=RESX*RESY_B; res=f_open(&file,"ranim.lcd",FA_OPEN_EXISTING|FA_READ); if (res) return; do { lcdFill(0x55); res = f_read(&file, (char *)lcdBuffer, RESX*RESY_B, &readbytes); if(res) return; if(readbytes<RESX*RESY_B) { f_lseek(&file,0); continue; }; lcdRefresh(); delayms_queue(23*7); } while (--num); #endif }
void ram(void) { char pw[PW_LEN+1]; uint16_t k[8]; int button; memset(k, 0, 16); while(1){ lcdClear(); lcdNl(); lcdPrintln(" password"); lcdPrintln(" generator"); lcdNl(); lcdNl(); pw_set(pw,k); pw_cleanup(pw); lcdPrint(" "); lcdPrintln(pw); lcdRefresh(); delayms(23); while((button=getInputRaw())==BTN_NONE) delayms(23); if(button==BTN_LEFT) return; } }