diff --git a/firmware/l0dable/fahrplan.c b/firmware/l0dable/fahrplan.c new file mode 100644 index 0000000..79079a7 --- /dev/null +++ b/firmware/l0dable/fahrplan.c @@ -0,0 +1,186 @@ +#include + +#include "basic/basic.h" + +#include "lcd/print.h" +#include "lcd/render.h" +#include "lcd/display.h" +#include "filesystem/ff.h" +#include "filesystem/diskio.h" + +#include "basic/config.h" + +#include "usetable.h" + +#define one ((uint32_t)1) + +typedef uint8_t uchar; + +static unsigned long iter=0; + +void ram(void) { + getInputWaitRelease(); + + static char delay=15; + + char buf[20]; + + int line; + char startline=0; + char *message=NULL; + char filvers; + char favers[5]; + unsigned char ob; + int eventid; + int evnext; + int evprv; + int evcur=5; + + + lcdClear(); + setExtFont(GLOBAL(nickfont)); + + /* nickheight=getFontHeight(); */ + + lcdClear(); + + FIL file; + FRESULT res; + UINT readbytes; + + res=f_open(&file, "FAHRPLAN.SCD", FA_OPEN_EXISTING|FA_READ|FA_WRITE); + if(res) message="FOPEN ERROR"; + res=f_read(&file, &filvers, 1, &readbytes); + res+=f_read(&file, (char *)favers, 4, &readbytes); + favers[4]=0; + + res+=f_read(&file, (char *)&ob, 1, &readbytes); + evcur=ob; + res+=f_read(&file, (char *)&ob, 1, &readbytes); + evcur+=ob*256; + + lcdClear(); + DoString(0,0,"Fahrplan "); + DoString(60,0,favers); + DoString(0,16,"SW Rel. V0.001"); + if(filvers!=1) { + DoString(0,24,"Incompatible "); + DoString(0,32,"Binary. Get "); + DoString(0,40,"update from "); + DoString(0,48,"r0ket.de "); + DoString(0,56,"Filefmt.: "); + DoInt(60,56,filvers); + lcdDisplay(); + getInputWait(); + getInputWaitRelease(); + return; + } + DoString(0,24,"On C3 get new "); + DoString(0,32,"version from "); + DoString(0,40,"r0ket.de for "); + DoString(0,48,"better UI "); + /* DoInt(0,24,filvers); */ + lcdDisplay(); + delayms(1000); + DoString(0,56," PRESS BUTTON "); + lcdDisplay(); + getInputWait(); + getInputWaitRelease(); + + while (1) { + ++iter; + lcdDisplay(); + lcdClear(); + char title[15]; + char info[15]; + int evtext; + +#ifdef SIMULATOR +#endif +#ifndef SIMULATOR + f_lseek(&file,evcur); + + res+=f_read(&file, (char *)&ob, 1, &readbytes); + eventid=ob; + res+=f_read(&file, (char *)&ob, 1, &readbytes); + eventid+=ob*256; + + res+=f_read(&file, (char *)&ob, 1, &readbytes); + evprv=ob; + res+=f_read(&file, (char *)&ob, 1, &readbytes); + evprv+=ob*256; + + res+=f_read(&file, (char *)&ob, 1, &readbytes); + evnext=ob; + res+=f_read(&file, (char *)&ob, 1, &readbytes); + evnext+=ob*256; + + res+=f_read(&file, (char *)title, 15, &readbytes); + res+=f_read(&file, (char *)info, 15, &readbytes); + evtext=f_tell(&file); + +#endif + /* for(line=0; line<4; line++) { + DoString(0, 8*line+8,tdes[0][line+startline]); + } */ +#ifndef SIMULATOR + title[14]=0; + DoString(0,0,title); + info[14]=0; + DoString(0,8,info); + + int notend=1; + for(line=0; line<6 && notend; line++) { + f_lseek(&file,evtext+(startline+line)*14); + res+=f_read(&file, (char *)buf, 15, &readbytes); + if(res) message="READ ERROR"; else message="READ: 0"; + buf[14]=0; + DoString(0,8*line+20,buf); + if(!buf[0])notend=0; + } + +/* Debug: + DoInt(0,32,eventid); + DoInt(0,40,evprv); + DoInt(50,40,evnext); + if(message) DoString(0, 8*5+8,message); +*/ +#endif + lcdDisplay(); + + // char key=stepmode?getInputWait():getInputRaw(); + // + char key=getInputWait(); + switch(key) { + // Buttons: Right change speed, Up hold scrolling + case BTN_ENTER: + getInputWaitRelease(); + f_lseek(&file,5); + ob=evcur%256; + res+=f_write(&file, (char *)&ob, 1, &readbytes); + ob=evcur>>8; + res+=f_write(&file, (char *)&ob, 1, &readbytes); + return; + case BTN_RIGHT: + getInputWaitRelease(); + if(evnext)evcur=evnext; + startline=0; + break; + case BTN_UP: + getInputWaitRelease(); + if(startline)startline--; + break; + case BTN_LEFT: + getInputWaitRelease(); + if(evprv)evcur=evprv; + startline=0; + break; + case BTN_DOWN: + getInputWaitRelease(); + if(notend)startline++; + break; + } + delayms_queue_plus(delay,0); + } + return; +} diff --git a/firmware/l0dable/files/fahrplan.scd b/firmware/l0dable/files/fahrplan.scd new file mode 100644 index 0000000..90577e4 Binary files /dev/null and b/firmware/l0dable/files/fahrplan.scd differ