diff --git a/apps/settings.c b/apps/settings.c index 826d87ab60..274a124d31 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -553,8 +553,10 @@ void set_option(char* string, int* variable, char* options[], int numoptions ) #ifdef HAVE_RTC #define INDEX_X 0 #define INDEX_Y 1 +#define INDEX_WIDTH 2 char *dayname[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"}; -char cursor[][2]={{9, 1}, {12, 1}, {15, 1}, {9, 2}, {12, 2}, {15, 2}}; +char *monthname[]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}; +char cursor[][3]={{0, 1, 2}, {3, 1, 2}, {6, 1, 2}, {4, 2, 4}, {9, 2, 3}, {13, 2, 2}}; char daysinmonth[]={31,28,31,30,31,30,31,31,30,31,30,31}; void set_time(char* string, int timedate[]) @@ -574,36 +576,36 @@ void set_time(char* string, int timedate[]) while ( !done ) { /* calculate the number of days in febuary */ - realyear=timedate[5]+2000; + realyear=timedate[3]+2000; if((realyear%4==0 && !(realyear%100 == 0)) || realyear%400 == 0) /* for february depends on year */ daysinmonth[1]=29; else daysinmonth[1]=28; /* fix day if month or year changed */ - timedate[3]=timedate[3]> 4) * 10 + (timedate[0] & 0x0f); /* hour */ timedate[1] = ((timedate[1] & 0xf0) >> 4) * 10 + (timedate[1] & 0x0f); /* minute */ timedate[2] = ((timedate[2] & 0x30) >> 4) * 10 + (timedate[2] & 0x0f); /* second */ - timedate[3] = ((timedate[3] & 0x30) >> 4) * 10 + (timedate[3] & 0x0f); /* day */ + timedate[3] = ((timedate[3] & 0x30) >> 4) * 10 + (timedate[3] & 0x0f); /* year */ timedate[4] = ((timedate[4] & 0x30) >> 4) * 10 + (timedate[4] & 0x0f); /* month */ - timedate[5] = ((timedate[5] & 0x30) >> 4) * 10 + (timedate[5] & 0x0f); /* year */ + timedate[5] = ((timedate[5] & 0x30) >> 4) * 10 + (timedate[5] & 0x0f); /* day */ set_time("[Set time/date]",timedate); @@ -110,16 +110,16 @@ static void timedate_set(void) timedate[0] = ((timedate[0]/10) << 4 | timedate[0]%10) & 0x3f; /* hour */ timedate[1] = ((timedate[1]/10) << 4 | timedate[1]%10) & 0x7f; /* minute */ timedate[2] = ((timedate[2]/10) << 4 | timedate[2]%10) & 0x7f; /* second */ - timedate[3] = ((timedate[3]/10) << 4 | timedate[3]%10) & 0x3f; /* day */ + timedate[3] = ((timedate[3]/10) << 4 | timedate[3]%10) & 0xff; /* year */ timedate[4] = ((timedate[4]/10) << 4 | timedate[4]%10) & 0x1f; /* month */ - timedate[5] = ((timedate[5]/10) << 4 | timedate[5]%10) & 0xff; /* year */ + timedate[5] = ((timedate[5]/10) << 4 | timedate[5]%10) & 0x3f; /* day */ rtc_write(0x03, timedate[0] | (rtc_read(0x03) & 0xc0)); /* hour */ rtc_write(0x02, timedate[1] | (rtc_read(0x02) & 0x80)); /* minute */ rtc_write(0x01, timedate[2] | (rtc_read(0x01) & 0x80)); /* second */ - rtc_write(0x05, timedate[3] | (rtc_read(0x05) & 0xc0)); /* day */ + rtc_write(0x07, timedate[3]); /* year */ rtc_write(0x06, timedate[4] | (rtc_read(0x06) & 0xe0)); /* month */ - rtc_write(0x07, timedate[5]); /* year */ - rtc_write(0x04, timedate[6] | (rtc_read(0x04) & 0x07)); /* dayofweek */ + rtc_write(0x05, timedate[5] | (rtc_read(0x05) & 0xc0)); /* day */ + rtc_write(0x04, timedate[6] | (rtc_read(0x04) & 0xf8)); /* dayofweek */ rtc_write(0x00, 0x00); /* 0.1 + 0.01 seconds */ } }