You will probably hate me, but commit new, global config framework
hopefully it will be stable now. Sorry for breaking your stuff
This commit is contained in:
parent
2c62859a60
commit
cfe6e328e5
|
@ -38,10 +38,17 @@ void tick_default(void) {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
if(isNight())
|
if(ctr>100/SYSTICKSPEED){
|
||||||
backlightSetBrightness(globalconfig.backlightvalue);
|
if(isNight()){
|
||||||
else
|
backlightSetBrightness(GLOBAL(lcdbacklight));
|
||||||
backlightSetBrightness(0);
|
if(GLOBAL(nightinvert))
|
||||||
|
lcdSetInvert(0);
|
||||||
|
} else {
|
||||||
|
backlightSetBrightness(0);
|
||||||
|
if(GLOBAL(nightinvert))
|
||||||
|
lcdSetInvert(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(ctr%(50/SYSTICKSPEED)==0){
|
if(ctr%(50/SYSTICKSPEED)==0){
|
||||||
|
|
||||||
|
|
|
@ -187,21 +187,31 @@ void handleMenu(const struct MENU *the_menu);
|
||||||
|
|
||||||
// config.c
|
// config.c
|
||||||
|
|
||||||
struct config_t {
|
|
||||||
time_t time;
|
|
||||||
uint16_t backlighttrigger;
|
|
||||||
char backlightvalue;
|
|
||||||
char lcdstate;
|
|
||||||
char privacy;
|
|
||||||
} __attribute__((__packed__));
|
|
||||||
|
|
||||||
typedef struct config_t CONFIG;
|
|
||||||
|
|
||||||
extern CONFIG globalconfig;
|
|
||||||
|
|
||||||
int readConfig(void);
|
int readConfig(void);
|
||||||
int saveConfig(void);
|
int saveConfig(void);
|
||||||
int applyConfig(void);
|
void applyConfig(void);
|
||||||
|
|
||||||
|
|
||||||
|
struct CDESC {
|
||||||
|
char *name;
|
||||||
|
char value;
|
||||||
|
char min;
|
||||||
|
char max;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern struct CDESC the_config[];
|
||||||
|
|
||||||
|
#define GLOBALversion (the_config[0].value)
|
||||||
|
#define GLOBALprivacy (the_config[1].value)
|
||||||
|
#define GLOBALnighttrigger (the_config[2].value)
|
||||||
|
#define GLOBALnightinvert (the_config[3].value)
|
||||||
|
#define GLOBALlcdbacklight (the_config[4].value)
|
||||||
|
#define GLOBALlcdmirror (the_config[5].value)
|
||||||
|
#define GLOBALlcdinvert (the_config[6].value)
|
||||||
|
#define GLOBALlcdcontrast (the_config[7].value)
|
||||||
|
|
||||||
|
#define GLOBAL(x) GLOBAL ## x
|
||||||
|
|
||||||
|
|
||||||
#define SYSTICKSPEED 10
|
#define SYSTICKSPEED 10
|
||||||
|
|
||||||
|
|
|
@ -1,21 +1,38 @@
|
||||||
#include <sysinit.h>
|
#include <sysinit.h>
|
||||||
#include "basic/basic.h"
|
#include "basic/basic.h"
|
||||||
|
|
||||||
#include "lcd/lcd.h"
|
|
||||||
#include "lcd/fonts/smallfonts.h"
|
|
||||||
#include "lcd/print.h"
|
#include "lcd/print.h"
|
||||||
#include "filesystem/ff.h"
|
#include "filesystem/ff.h"
|
||||||
#include "basic/random.h"
|
#include "basic/random.h"
|
||||||
|
|
||||||
CONFIG globalconfig = { 0,310,50,0,0};
|
#define CFGVER 23
|
||||||
|
|
||||||
|
struct CDESC the_config[]= {
|
||||||
|
{"version", CFGVER, CFGVER, CFGVER},
|
||||||
|
{"privacy", 3, 0, 2 },
|
||||||
|
{"nighttrigger", 310/2, 0, 255},
|
||||||
|
{"nightinvert", 1, 0, 1 },
|
||||||
|
{"lcdbacklight", 50, 0, 100},
|
||||||
|
{"lcdmirror", 0, 0, 1 },
|
||||||
|
{"lcdinvert", 0, 0, 1 },
|
||||||
|
{"lcdcontrast", 3, 1, 6 },
|
||||||
|
{ NULL, 0, 0, 0 },
|
||||||
|
};
|
||||||
|
|
||||||
#define CONFFILE "r0ket.cfg"
|
#define CONFFILE "r0ket.cfg"
|
||||||
|
#define CONF_ITER for(int i=0;the_config[i].name!=NULL;i++)
|
||||||
|
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
|
|
||||||
|
void applyConfig(){
|
||||||
|
lcdSetContrast(GLOBAL(lcdcontrast));
|
||||||
|
return 0;
|
||||||
|
};
|
||||||
|
|
||||||
int saveConfig(void){
|
int saveConfig(void){
|
||||||
FIL file; /* File object */
|
FIL file; /* File object */
|
||||||
UINT writebytes;
|
UINT writebytes;
|
||||||
|
UINT allwrite=0;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
res=f_open(&file, CONFFILE, FA_OPEN_ALWAYS|FA_WRITE);
|
res=f_open(&file, CONFFILE, FA_OPEN_ALWAYS|FA_WRITE);
|
||||||
|
@ -25,16 +42,20 @@ int saveConfig(void){
|
||||||
return 1;
|
return 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
res = f_write(&file, &globalconfig, sizeof(CONFIG), &writebytes);
|
CONF_ITER{
|
||||||
|
res = f_write(&file, &the_config[i].value, sizeof(uint8_t), &writebytes);
|
||||||
|
allwrite+=writebytes;
|
||||||
|
if(res){
|
||||||
|
lcdPrint("write:");
|
||||||
|
lcdPrintln(f_get_rc_string(res));
|
||||||
|
return 1;
|
||||||
|
};
|
||||||
|
};
|
||||||
lcdPrint("write:");
|
lcdPrint("write:");
|
||||||
lcdPrintln(f_get_rc_string(res));
|
lcdPrintln(f_get_rc_string(res));
|
||||||
if(res){
|
lcdPrint(" (");
|
||||||
return 1;
|
lcdPrintInt(allwrite);
|
||||||
};
|
lcdPrintln("b)");
|
||||||
|
|
||||||
lcdPrint("wrote:");
|
|
||||||
lcdPrintInt(writebytes);
|
|
||||||
lcdPrintln("b");
|
|
||||||
|
|
||||||
res=f_close(&file);
|
res=f_close(&file);
|
||||||
lcdPrint("close:");
|
lcdPrint("close:");
|
||||||
|
@ -48,34 +69,32 @@ int saveConfig(void){
|
||||||
int readConfig(void){
|
int readConfig(void){
|
||||||
FIL file; /* File object */
|
FIL file; /* File object */
|
||||||
UINT readbytes;
|
UINT readbytes;
|
||||||
|
UINT allread;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
lcdFill(0); // clear display buffer
|
|
||||||
|
|
||||||
res=f_open(&file, CONFFILE, FA_OPEN_EXISTING|FA_READ);
|
res=f_open(&file, CONFFILE, FA_OPEN_EXISTING|FA_READ);
|
||||||
lcdPrint("open:");
|
|
||||||
lcdPrintln(f_get_rc_string(res));
|
|
||||||
if(res){
|
if(res){
|
||||||
return 1;
|
return 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
res = f_read(&file, &globalconfig, sizeof(CONFIG), &readbytes);
|
CONF_ITER{
|
||||||
lcdPrint("read:");
|
res = f_read(&file, &the_config[i].value, sizeof(uint8_t), &readbytes);
|
||||||
lcdPrintln(f_get_rc_string(res));
|
allread+=readbytes;
|
||||||
if(res){
|
if(GLOBAL(version) != CFGVER){
|
||||||
return 1;
|
GLOBAL(version) =CFGVER;
|
||||||
|
return 1;
|
||||||
|
};
|
||||||
|
if(res || GLOBAL(version) != CFGVER)
|
||||||
|
return 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
res=f_close(&file);
|
res=f_close(&file);
|
||||||
lcdPrint("close:");
|
|
||||||
lcdPrintln(f_get_rc_string(res));
|
|
||||||
if(res){
|
if(res){
|
||||||
return 1;
|
return 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
applyConfig();
|
||||||
return 0;
|
return 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
int applyConfig(){
|
|
||||||
return 0;
|
|
||||||
};
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
uint32_t light=300*HYST;
|
uint32_t light=300*HYST;
|
||||||
char _isnight=1;
|
char _isnight=1;
|
||||||
|
|
||||||
#define threshold globalconfig.backlighttrigger
|
#define threshold GLOBAL(nighttrigger)
|
||||||
|
|
||||||
void LightCheck(void){
|
void LightCheck(void){
|
||||||
int iocon;
|
int iocon;
|
||||||
|
@ -22,7 +22,7 @@ void LightCheck(void){
|
||||||
gpioSetDir(RB_LED3, gpioDirection_Input);
|
gpioSetDir(RB_LED3, gpioDirection_Input);
|
||||||
IOCON_PIO1_11 = IOCON_PIO1_11_FUNC_AD7|IOCON_PIO1_11_ADMODE_ANALOG;
|
IOCON_PIO1_11 = IOCON_PIO1_11_FUNC_AD7|IOCON_PIO1_11_ADMODE_ANALOG;
|
||||||
light-=light/HYST;
|
light-=light/HYST;
|
||||||
light += adcRead(7);
|
light += (adcRead(7)/2);
|
||||||
|
|
||||||
gpioSetDir(RB_LED3, iodir);
|
gpioSetDir(RB_LED3, iodir);
|
||||||
IOCON_PIO1_11=iocon;
|
IOCON_PIO1_11=iocon;
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
|
|
||||||
uint8_t lcdBuffer[RESX*RESY_B];
|
uint8_t lcdBuffer[RESX*RESY_B];
|
||||||
#define lcd_layout globalconfig.lcdstate
|
|
||||||
uint32_t intstatus; // Caches USB interrupt state
|
uint32_t intstatus; // Caches USB interrupt state
|
||||||
// (need to disable MSC while displaying)
|
// (need to disable MSC while displaying)
|
||||||
|
|
||||||
|
@ -153,12 +152,12 @@ void lcdDisplay(void) {
|
||||||
uint16_t i,page;
|
uint16_t i,page;
|
||||||
for(page=0; page<RESY_B;page++) {
|
for(page=0; page<RESY_B;page++) {
|
||||||
for(i=0; i<RESX; i++) {
|
for(i=0; i<RESX; i++) {
|
||||||
if (lcd_layout & LCD_MIRRORX)
|
if (GLOBAL(lcdmirror))
|
||||||
byte=lcdBuffer[page*RESX+RESX-1-(i)];
|
byte=lcdBuffer[page*RESX+RESX-1-(i)];
|
||||||
else
|
else
|
||||||
byte=lcdBuffer[page*RESX+(i)];
|
byte=lcdBuffer[page*RESX+(i)];
|
||||||
|
|
||||||
if (lcd_layout & LCD_INVERTED)
|
if (GLOBAL(lcdinvert))
|
||||||
byte=~byte;
|
byte=~byte;
|
||||||
|
|
||||||
lcdWrite(TYPE_DATA,byte);
|
lcdWrite(TYPE_DATA,byte);
|
||||||
|
@ -169,13 +168,36 @@ void lcdDisplay(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void lcdInvert(void) {
|
inline void lcdInvert(void) {
|
||||||
lcdToggleFlag(LCD_INVERTED);
|
GLOBAL(lcdinvert)=!GLOBAL(lcdinvert);
|
||||||
}
|
}
|
||||||
|
|
||||||
void lcdToggleFlag(int flag) {
|
void lcdSetContrast(int c) {
|
||||||
lcd_layout=lcd_layout ^ flag;
|
c+=0x20;
|
||||||
}
|
if(c>0x2e) c=0x24;
|
||||||
|
lcd_select();
|
||||||
|
lcdWrite(TYPE_CMD,c);
|
||||||
|
lcd_deselect();
|
||||||
|
};
|
||||||
|
|
||||||
|
void lcdSetInvert(int c) {
|
||||||
|
if(c>1)
|
||||||
|
c=1;
|
||||||
|
if(c<0)
|
||||||
|
c=1;
|
||||||
|
|
||||||
|
c+=0xa6;
|
||||||
|
lcd_select();
|
||||||
|
lcdWrite(TYPE_CMD,c);
|
||||||
|
lcd_deselect();
|
||||||
|
};
|
||||||
|
|
||||||
|
/* deprecated */
|
||||||
|
void __attribute__((__deprecated__)) lcdToggleFlag(int flag) {
|
||||||
|
if(flag==LCD_MIRRORX)
|
||||||
|
GLOBAL(lcdmirror)=!GLOBAL(lcdmirror);
|
||||||
|
if(flag==LCD_INVERTED)
|
||||||
|
GLOBAL(lcdinvert)=!GLOBAL(lcdinvert);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void lcdShiftH(bool right, bool wrap) {
|
void lcdShiftH(bool right, bool wrap) {
|
||||||
|
|
|
@ -29,4 +29,5 @@ void lcdSetPixel(char x, char y, bool f);
|
||||||
void lcdSafeSetPixel(char x, char y, bool f);
|
void lcdSafeSetPixel(char x, char y, bool f);
|
||||||
bool lcdGetPixel(char x, char y);
|
bool lcdGetPixel(char x, char y);
|
||||||
void lcdShift(int x, int y, bool wrap);
|
void lcdShift(int x, int y, bool wrap);
|
||||||
|
void lcdSetContrast(int c);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -34,6 +34,12 @@ void setExtFont(const char *fname){
|
||||||
font=NULL;
|
font=NULL;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int getFontHeight(void){
|
||||||
|
if(font)
|
||||||
|
return font->u8Height;
|
||||||
|
return 8; // XXX: Should be done right.
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
int _getFontData(int type, int offset){
|
int _getFontData(int type, int offset){
|
||||||
UINT readbytes;
|
UINT readbytes;
|
||||||
|
|
|
@ -36,6 +36,7 @@ int DoCharX(int sx, int sy, unsigned char num);
|
||||||
int DoShortX(int sx, int sy, uint16_t num);
|
int DoShortX(int sx, int sy, uint16_t num);
|
||||||
void setIntFont(const struct FONT_DEF * font);
|
void setIntFont(const struct FONT_DEF * font);
|
||||||
void setExtFont(const char *file);
|
void setExtFont(const char *file);
|
||||||
|
int getFontHeight(void);
|
||||||
|
|
||||||
#define START_FONT 0
|
#define START_FONT 0
|
||||||
#define SEEK_EXTRAS 1
|
#define SEEK_EXTRAS 1
|
||||||
|
|
Loading…
Reference in New Issue