569 lines
16 KiB
C
Executable File
569 lines
16 KiB
C
Executable File
////////////////////////////////////////////////////////////////////////////////
|
|
#include "SysCommon.h"
|
|
//#include "AppCommon.h"
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
#include "PStore.h"
|
|
#include "WiFiIpc/nvtwifi.h"
|
|
#include "UIInfo.h"
|
|
#include "DateTimeInfo.h"
|
|
#include <comm/hwclock.h>
|
|
#include "GxGfx/GxRect.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Date Time
|
|
//-----------------------------------------------------------------------------
|
|
#define THIS_DBGLVL 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
#define __MODULE__ DateTimeInfo
|
|
#define __DBGLVL__ ((THIS_DBGLVL>=PRJ_DBG_LVL)?THIS_DBGLVL:PRJ_DBG_LVL)
|
|
#define __DBGFLT__ "*" //*=All, [mark]=CustomClass
|
|
#include <kwrap/debug.h>
|
|
|
|
#define DbgMsg_UISetDate DBG_IND
|
|
#define RANGE_YEAR (MAX_YEAR-MIN_YEAR+1)
|
|
//struct tm gUIDateTime = {0, 0, 0, DEF_DAY, DEF_MONTH, DEF_YEAR, 0, 0, 0};
|
|
|
|
INT32 gUIDateYear = DEF_YEAR;
|
|
INT32 gUIDateMonth = DEF_MONTH;
|
|
INT32 gUIDateDay = DEF_DAY;
|
|
INT32 gUITimeHour = 0;
|
|
INT32 gUITimeMinute = 0;
|
|
INT32 gUITimeSecond = 0;
|
|
|
|
INT32 gUIDateSetFmt = DATEFMT_YMD;
|
|
INT32 gUITimeSetFmt = TIMEFMT_24HR;
|
|
|
|
void Validate_Date(INT32 *pYear, INT32 *pMonth, INT32 *pDay,
|
|
BOOL bClampY, BOOL bClampM, BOOL bClampD);
|
|
void Validate_Time(INT32 *pHour, INT32 *pMinute,
|
|
BOOL bClampH, BOOL bClampM);
|
|
|
|
void DateTime_Init(void)
|
|
{
|
|
gUIDateYear = DEF_YEAR;
|
|
gUIDateMonth = DEF_MONTH;
|
|
gUIDateDay = DEF_DAY;
|
|
gUITimeHour = gUITimeMinute = gUITimeSecond = 0;
|
|
gUIDateSetFmt = DATEFMT_YMD;
|
|
gUITimeSetFmt = TIMEFMT_24HR;
|
|
}
|
|
|
|
void DateTime_Load(void)
|
|
{
|
|
struct tm cUIDateTime;
|
|
|
|
//load date-time
|
|
cUIDateTime = hwclock_get_time(TIME_ID_CURRENT);
|
|
gUIDateYear = cUIDateTime.tm_year;
|
|
gUIDateMonth = cUIDateTime.tm_mon;
|
|
gUIDateDay = cUIDateTime.tm_mday;
|
|
gUITimeHour = cUIDateTime.tm_hour;
|
|
gUITimeMinute = cUIDateTime.tm_min;
|
|
gUITimeSecond = cUIDateTime.tm_sec;
|
|
DbgMsg_UISetDate(("Curr Date:Y=%d,M=%d,D=%d\r\n", gUIDateYear, gUIDateMonth, gUIDateDay));
|
|
DbgMsg_UISetDate(("Curr Time:H=%d,M=%d,S=%d\r\n", gUITimeHour, gUITimeMinute, gUITimeSecond));
|
|
|
|
//load format
|
|
gUIDateSetFmt = UI_GetData(FL_DateFormatIndex);
|
|
gUITimeSetFmt = UI_GetData(FL_TimeFormatIndex);
|
|
DbgMsg_UISetDate(("Curr DateFmt:%d\r\n", gUIDateSetFmt));
|
|
DbgMsg_UISetDate(("Curr TimeFmt:%d\r\n", gUITimeSetFmt));
|
|
|
|
//validate date
|
|
{
|
|
INT32 y, m, d;
|
|
y = gUIDateYear;
|
|
m = gUIDateMonth;
|
|
d = gUIDateDay;
|
|
Validate_Date(&y, &m, &d, 1, 1, 1);
|
|
if ((y != gUIDateYear) && (m != gUIDateMonth) && (d != gUIDateDay)) {
|
|
DBG_ERR("Date is invalidate=%d,M=%d,D=%d\r\n", gUIDateYear, gUIDateMonth, gUIDateDay);
|
|
DBG_ERR("Date is clamped=%d,M=%d,D=%d\r\n", y, m, d);
|
|
gUIDateYear = y;
|
|
gUIDateMonth = m;
|
|
gUIDateDay = d;;
|
|
DateTime_Save();
|
|
DBG_ERR("Date is saved\r\n");
|
|
}
|
|
}
|
|
}
|
|
|
|
void DateTime_Save(void)
|
|
{
|
|
struct tm cUIDateTime = {0};
|
|
|
|
DbgMsg_UISetDate(("Save Date:Y=%d,M=%d,D=%d\r\n", gUIDateYear, gUIDateMonth, gUIDateDay));
|
|
DbgMsg_UISetDate(("Save Time:H=%d,M=%d\r\n", gUITimeHour, gUITimeMinute));
|
|
//save date-time
|
|
cUIDateTime.tm_year = gUIDateYear;
|
|
cUIDateTime.tm_mon = gUIDateMonth;
|
|
cUIDateTime.tm_mday = gUIDateDay;
|
|
cUIDateTime.tm_hour = gUITimeHour;
|
|
cUIDateTime.tm_min = gUITimeMinute;
|
|
cUIDateTime.tm_sec = gUITimeSecond;
|
|
hwclock_set_time(TIME_ID_CURRENT, cUIDateTime, 0);
|
|
|
|
DbgMsg_UISetDate(("Save DateFmt:%d\r\n", gUIDateSetFmt));
|
|
DbgMsg_UISetDate(("Save TimeFmt:%d\r\n", gUITimeSetFmt));
|
|
//save format
|
|
UI_SetData(FL_DateFormatIndex, gUIDateSetFmt);
|
|
UI_SetData(FL_TimeFormatIndex, gUITimeSetFmt);
|
|
|
|
}
|
|
|
|
void DateTime_SaveToDefault(void)
|
|
{
|
|
DateTime_Init();
|
|
DateTime_Save();
|
|
DateTime_Load();
|
|
}
|
|
|
|
void Validate_Date(INT32 *pYear, INT32 *pMonth, INT32 *pDay,
|
|
BOOL bClampY, BOOL bClampM, BOOL bClampD)
|
|
{
|
|
#define LOC_Y (*pYear)
|
|
#define LOC_M (*pMonth)
|
|
#define LOC_D (*pDay)
|
|
|
|
INT32 maxDay = 0;
|
|
|
|
//clamp/loop year to MIN_YEAR ~ MAX_YEAR
|
|
if (bClampY) {
|
|
LOC_Y = RANGE_Clamp(MIN_YEAR, MAX_YEAR, LOC_Y);
|
|
} else {
|
|
LOC_Y = ((LOC_Y - MIN_YEAR + RANGE_YEAR) % RANGE_YEAR) + MIN_YEAR;
|
|
}
|
|
|
|
//clamp/loop month to 1~12
|
|
if (bClampM) {
|
|
LOC_M = RANGE_Clamp(1, 12, LOC_M);
|
|
} else {
|
|
LOC_M = ((LOC_M - 1 + 12) % 12) + 1;
|
|
}
|
|
|
|
//clamp/loop day to 1~maxday
|
|
maxDay = timeutil_calc_month_days(LOC_Y, LOC_M);
|
|
if (bClampD) {
|
|
LOC_D = RANGE_Clamp(1, maxDay, LOC_D);
|
|
} else {
|
|
LOC_D = ((LOC_D - 1 + maxDay) % maxDay) + 1;
|
|
}
|
|
}
|
|
|
|
void Validate_Time(INT32 *pHour, INT32 *pMinute,
|
|
BOOL bClampH, BOOL bClampM)
|
|
{
|
|
#define LOC_h (*pHour)
|
|
#define LOC_m (*pMinute)
|
|
|
|
//clamp/loop hour to 0~23
|
|
if (bClampH) {
|
|
LOC_h = RANGE_Clamp(0, 23, LOC_h);
|
|
} else {
|
|
LOC_h = (LOC_h + 24) % 24;
|
|
}
|
|
|
|
//clamp/loop minute to 0~59
|
|
if (bClampM) {
|
|
LOC_m = RANGE_Clamp(0, 59, LOC_m);
|
|
} else {
|
|
LOC_m = (LOC_m + 60) % 60;
|
|
}
|
|
}
|
|
|
|
INT32 DateTime_Get(int element)
|
|
{
|
|
INT32 rvalue;
|
|
switch (element) {
|
|
case DATETIME_YEAR:
|
|
rvalue = gUIDateYear;
|
|
break;
|
|
case DATETIME_MONTH:
|
|
rvalue = gUIDateYear;
|
|
break;
|
|
case DATETIME_DAY:
|
|
rvalue = gUIDateDay;
|
|
break;
|
|
case DATETIME_HOUR:
|
|
rvalue = gUITimeHour;
|
|
break;
|
|
case DATETIME_MINUTE:
|
|
rvalue = gUITimeMinute;
|
|
break;
|
|
case DATETIME_DATEFMT:
|
|
rvalue = gUIDateSetFmt;
|
|
break;
|
|
case DATETIME_TIMEFMT:
|
|
rvalue = gUITimeSetFmt;
|
|
break;
|
|
default:
|
|
rvalue = 0;
|
|
break;
|
|
}
|
|
return rvalue;
|
|
}
|
|
|
|
void DateTime_Edit(int element, int bias)
|
|
{
|
|
switch (element) {
|
|
case DATETIME_YEAR:
|
|
gUIDateYear += bias;
|
|
Validate_Date(&gUIDateYear, &gUIDateMonth, &gUIDateDay, 0, 1, 1);
|
|
break;
|
|
case DATETIME_MONTH:
|
|
gUIDateMonth += bias;
|
|
Validate_Date(&gUIDateYear, &gUIDateMonth, &gUIDateDay, 0, 0, 1);
|
|
break;
|
|
case DATETIME_DAY:
|
|
gUIDateDay += bias;
|
|
Validate_Date(&gUIDateYear, &gUIDateMonth, &gUIDateDay, 0, 0, 0);
|
|
break;
|
|
case DATETIME_HOUR:
|
|
gUITimeHour += bias;
|
|
Validate_Time(&gUITimeHour, &gUITimeMinute, 0, 0);
|
|
break;
|
|
case DATETIME_MINUTE:
|
|
gUITimeMinute += bias;
|
|
Validate_Time(&gUITimeHour, &gUITimeMinute, 0, 0);
|
|
break;
|
|
case DATETIME_DATEFMT:
|
|
gUIDateSetFmt += bias;
|
|
gUIDateSetFmt = ((gUIDateSetFmt + 3) % 3);
|
|
break;
|
|
case DATETIME_TIMEFMT:
|
|
gUITimeSetFmt += bias;
|
|
gUITimeSetFmt = ((gUITimeSetFmt + 2) % 2);
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
char gUIDateTime_StrBuf[60];
|
|
|
|
char TimeFmtNameTable[2][5] = {
|
|
"24HR",
|
|
"12HR",
|
|
};
|
|
char Time12HRNameTable[3][4] = {
|
|
"",
|
|
"AM",
|
|
"PM"
|
|
};
|
|
|
|
UINT32 DateTime_StrBuf_Size(void)
|
|
{
|
|
return sizeof(gUIDateTime_StrBuf);
|
|
}
|
|
|
|
//using by date-stamp
|
|
char *DateTime_MakeYMD(void)
|
|
{
|
|
if (gUIDateSetFmt == DATEFMT_YMD) { //YMD
|
|
snprintf((char *)gUIDateTime_StrBuf, sizeof(gUIDateTime_StrBuf) - 1, "%04ld/%02ld/%02ld",
|
|
gUIDateYear, gUIDateMonth, gUIDateDay);
|
|
} else if (gUIDateSetFmt == DATEFMT_MDY) { //MDY
|
|
snprintf((char *)gUIDateTime_StrBuf, sizeof(gUIDateTime_StrBuf) - 1, "%02ld/%02ld/%04ld",
|
|
gUIDateMonth, gUIDateDay, gUIDateYear);
|
|
} else { //if(gUIDateSetFmt == DATEFMT_DMY) //DMY
|
|
snprintf((char *)gUIDateTime_StrBuf, sizeof(gUIDateTime_StrBuf) - 1, "%02ld/%02ld/%04ld",
|
|
gUIDateDay, gUIDateMonth, gUIDateYear);
|
|
}
|
|
|
|
return gUIDateTime_StrBuf;
|
|
}
|
|
|
|
//using by setup menu
|
|
char *DateTime_MakeYMDHM(void)
|
|
{
|
|
INT32 hr, ti;
|
|
|
|
hr = gUITimeHour;
|
|
ti = 0;
|
|
if (gUITimeSetFmt == TIMEFMT_12HR) { //apply Time Format
|
|
if (gUITimeHour < 12) {
|
|
ti = 1;
|
|
}
|
|
if (gUITimeHour >= 12) {
|
|
ti = 2;
|
|
}
|
|
hr = hr % 12;
|
|
if (hr == 0) {
|
|
hr = 12;
|
|
}
|
|
}
|
|
|
|
if (gUIDateSetFmt == DATEFMT_YMD) { //YMD
|
|
snprintf((char *)gUIDateTime_StrBuf, sizeof(gUIDateTime_StrBuf) - 1, "%04ld/%02ld/%02ld %02ld:%02ld%s",
|
|
gUIDateYear, gUIDateMonth, gUIDateDay, hr, gUITimeMinute, Time12HRNameTable[ti]);
|
|
} else if (gUIDateSetFmt == DATEFMT_MDY) { //MDY
|
|
snprintf((char *)gUIDateTime_StrBuf, sizeof(gUIDateTime_StrBuf) - 1, "%02ld/%02ld/%04ld %02ld:%02ld%s",
|
|
gUIDateMonth, gUIDateDay, gUIDateYear, hr, gUITimeMinute, Time12HRNameTable[ti]);
|
|
} else { //if(gUIDateSetFmt == DATEFMT_DMY) //DMY
|
|
snprintf((char *)gUIDateTime_StrBuf, sizeof(gUIDateTime_StrBuf) - 1, "%02ld/%02ld/%04ld %02ld:%02ld%s",
|
|
gUIDateDay, gUIDateMonth, gUIDateYear, hr, gUITimeMinute, Time12HRNameTable[ti]);
|
|
}
|
|
|
|
return gUIDateTime_StrBuf;
|
|
}
|
|
|
|
|
|
//using by date-time dialog
|
|
char *DateTime_MakeYMDHM_Edit(void)
|
|
{
|
|
INT32 hr;
|
|
|
|
hr = gUITimeHour;
|
|
if (gUITimeSetFmt == TIMEFMT_12HR) { //apply Time Format
|
|
hr = hr % 12;
|
|
if (hr == 0) {
|
|
hr = 12;
|
|
}
|
|
}
|
|
|
|
snprintf((char *)gUIDateTime_StrBuf + 0, sizeof(gUIDateTime_StrBuf) - 1, "%04ld", gUIDateYear);
|
|
snprintf((char *)gUIDateTime_StrBuf + 5, sizeof(gUIDateTime_StrBuf) - 6, "%02ld", gUIDateMonth);
|
|
snprintf((char *)gUIDateTime_StrBuf + 8, sizeof(gUIDateTime_StrBuf) - 9, "%02ld", gUIDateDay);
|
|
snprintf((char *)gUIDateTime_StrBuf + 11, sizeof(gUIDateTime_StrBuf) - 12, "%02ld", hr);
|
|
snprintf((char *)gUIDateTime_StrBuf + 14, sizeof(gUIDateTime_StrBuf) - 15, "%02ld", gUITimeMinute);
|
|
|
|
return gUIDateTime_StrBuf;
|
|
}
|
|
|
|
//using by date-stamp, show time.second
|
|
char *DateTime_MakeYMDHMS(void)
|
|
{
|
|
INT32 hr, ti;
|
|
|
|
hr = gUITimeHour;
|
|
ti = 0;
|
|
if (gUITimeSetFmt == TIMEFMT_12HR) { //apply Time Format
|
|
if (gUITimeHour < 12) {
|
|
ti = 1;
|
|
}
|
|
if (gUITimeHour >= 12) {
|
|
ti = 2;
|
|
}
|
|
hr = hr % 12;
|
|
if (hr == 0) {
|
|
hr = 12;
|
|
}
|
|
}
|
|
|
|
if (gUIDateSetFmt == DATEFMT_YMD) { //YMD
|
|
snprintf((char *)gUIDateTime_StrBuf, sizeof(gUIDateTime_StrBuf) - 1, "%04ld/%02ld/%02ld %02ld:%02ld:%02ld%s",
|
|
gUIDateYear, gUIDateMonth, gUIDateDay, hr, gUITimeMinute, gUITimeSecond, Time12HRNameTable[ti]);
|
|
} else if (gUIDateSetFmt == DATEFMT_MDY) { //MDY
|
|
snprintf((char *)gUIDateTime_StrBuf, sizeof(gUIDateTime_StrBuf) - 1, "%02ld/%02ld/%04ld %02ld:%02ld:%02ld%s",
|
|
gUIDateMonth, gUIDateDay, gUIDateYear, hr, gUITimeMinute, gUITimeSecond, Time12HRNameTable[ti]);
|
|
} else { //if(gUIDateSetFmt == DATEFMT_DMY) //DMY
|
|
snprintf((char *)gUIDateTime_StrBuf, sizeof(gUIDateTime_StrBuf) - 1, "%02ld/%02ld/%04ld %02ld:%02ld:%02ld%s",
|
|
gUIDateDay, gUIDateMonth, gUIDateYear, hr, gUITimeMinute, gUITimeSecond, Time12HRNameTable[ti]);
|
|
}
|
|
|
|
return gUIDateTime_StrBuf;
|
|
}
|
|
|
|
|
|
//using by playback, using short year
|
|
char *User_MakeYMDHM(UINT32 Year, UINT32 Month, UINT32 Day, UINT32 Hour, UINT32 Minute)
|
|
{
|
|
INT32 hr, ti;
|
|
|
|
//load format
|
|
gUIDateSetFmt = UI_GetData(FL_DateFormatIndex);
|
|
gUITimeSetFmt = UI_GetData(FL_TimeFormatIndex);
|
|
|
|
hr = Hour;
|
|
ti = 0;
|
|
if (gUITimeSetFmt == TIMEFMT_12HR) { //apply Time Format
|
|
if (Hour < 12) {
|
|
ti = 1;
|
|
}
|
|
if (Hour >= 12) {
|
|
ti = 2;
|
|
}
|
|
hr = hr % 12;
|
|
if (hr == 0) {
|
|
hr = 12;
|
|
}
|
|
}
|
|
if (Year >= 2000) {
|
|
Year -= 2000;
|
|
}
|
|
|
|
if (gUIDateSetFmt == DATEFMT_YMD) { //YMD
|
|
snprintf((char *)gUIDateTime_StrBuf, sizeof(gUIDateTime_StrBuf) - 1, "%02ld/%02ld/%02ld %02ld:%02ld%s",
|
|
Year, Month, Day, hr, Minute, Time12HRNameTable[ti]);
|
|
} else if (gUIDateSetFmt == DATEFMT_MDY) { //MDY
|
|
snprintf((char *)gUIDateTime_StrBuf, sizeof(gUIDateTime_StrBuf) - 1, "%02ld/%02ld/%02ld %02ld:%02ld%s",
|
|
Month, Day, Year, hr, Minute, Time12HRNameTable[ti]);
|
|
} else { //if(gUIDateSetFmt == DATEFMT_DMY) //DMY
|
|
snprintf((char *)gUIDateTime_StrBuf, sizeof(gUIDateTime_StrBuf) - 1, "%02ld/%02ld/%02ld %02ld:%02ld%s",
|
|
Day, Month, Year, hr, Minute, Time12HRNameTable[ti]);
|
|
}
|
|
|
|
return gUIDateTime_StrBuf;
|
|
}
|
|
|
|
|
|
//using by playback, using short year, ignore AM/PM!
|
|
char *User_MakeYMDHM_short(UINT32 Year, UINT32 Month, UINT32 Day, UINT32 Hour, UINT32 Minute)
|
|
{
|
|
INT32 hr;
|
|
|
|
//load format
|
|
gUIDateSetFmt = UI_GetData(FL_DateFormatIndex);
|
|
gUITimeSetFmt = UI_GetData(FL_TimeFormatIndex);
|
|
|
|
hr = Hour;
|
|
if (gUITimeSetFmt == TIMEFMT_12HR) { //apply Time Format
|
|
hr = hr % 12;
|
|
if (hr == 0) {
|
|
hr = 12;
|
|
}
|
|
}
|
|
if (Year >= 2000) {
|
|
Year -= 2000;
|
|
}
|
|
|
|
if (gUIDateSetFmt == DATEFMT_YMD) { //YMD
|
|
snprintf((char *)gUIDateTime_StrBuf, sizeof(gUIDateTime_StrBuf) - 1, "%02ld/%02ld/%02ld %02ld:%02ld",
|
|
Year, Month, Day, hr, Minute);
|
|
} else if (gUIDateSetFmt == DATEFMT_MDY) { //MDY
|
|
snprintf((char *)gUIDateTime_StrBuf, sizeof(gUIDateTime_StrBuf) - 1, "%02ld/%02ld/%02ld %02ld:%02ld",
|
|
Month, Day, Year, hr, Minute);
|
|
} else { //if(gUIDateSetFmt == DATEFMT_DMY) //DMY
|
|
snprintf((char *)gUIDateTime_StrBuf, sizeof(gUIDateTime_StrBuf) - 1, "%02ld/%02ld/%02ld %02ld:%02ld",
|
|
Day, Month, Year, hr, Minute);
|
|
}
|
|
|
|
return gUIDateTime_StrBuf;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Home/Traval Time Zone
|
|
//-----------------------------------------------------------------------------
|
|
|
|
TIME_RECORD gTimeRecord[TIME_RECORD_CNT]; //index 0 is Home
|
|
static INT32 g_iTid = 0;
|
|
|
|
static INT32 TimeZoneMapping[24] =
|
|
{12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
|
|
|
|
void _TimeRecord_Load(INT32 iTid)
|
|
{
|
|
TIME_RECORD *ti = &(gTimeRecord[iTid]);
|
|
//load date-time
|
|
ti->Curr_DateTime = hwclock_get_time(TIME_ID_CURRENT);
|
|
}
|
|
|
|
void _TimeRecord_Save(INT32 iTid)
|
|
{
|
|
TIME_RECORD *ti = &(gTimeRecord[iTid]);
|
|
//save date-time
|
|
hwclock_set_time(TIME_ID_CURRENT, ti->Curr_DateTime, 0);
|
|
}
|
|
|
|
INT32 _TimeRecord_CalcTimeDiff(INT32 iNewTid, INT32 iOldTid)
|
|
{
|
|
return (TimeZoneMapping[iNewTid] - TimeZoneMapping[iOldTid]);
|
|
}
|
|
void _TimeRecord_AddTimeDiff(INT32 iTid, INT32 TimeDiff)
|
|
{
|
|
TIME_RECORD *ti = &(gTimeRecord[iTid]);
|
|
struct tm cUIDateTime = hwclock_get_time(TIME_ID_CURRENT);
|
|
DbgMsg_UISetDate(("Old Date:Y=%ld,M=%ld,D=%ld\r\n", cUIDateTime.tm_year, cUIDateTime.tm_mon, cUIDateTime.tm_mday));
|
|
DbgMsg_UISetDate(("Old Time:H=%ld,M=%ld\r\n", cUIDateTime.tm_hour, cUIDateTime.tm_min));
|
|
|
|
DbgMsg_UISetDate(("TimeDiff=%ld\r\n", TimeDiff));
|
|
if (cUIDateTime.tm_hour + TimeDiff < 0) {
|
|
INT32 TmpDays;
|
|
if (cUIDateTime.tm_year >= 2000) {
|
|
TmpDays = timeutil_tm_to_days(cUIDateTime);
|
|
//DbgMsg_UISetDate(("Days=%ld\r\n",TmpDays));
|
|
TmpDays--;
|
|
//DbgMsg_UISetDate(("Days-1=%ld\r\n",TmpDays));
|
|
ti->Curr_DateTime = timeutil_days_to_tm(TmpDays);
|
|
//DbgMsg_UISetDate(("Convert Time:H=%ld,M=%ld\r\n",ti->Curr_DateTime.tm_hour,ti->Curr_DateTime.tm_min));
|
|
ti->Curr_DateTime.tm_hour = cUIDateTime.tm_hour + TimeDiff + 24;
|
|
//DbgMsg_UISetDate(("New H = %ld +%ld + 24 = %ld\r\n",cUIDateTime.tm_hour, TimeDiff, ti->Curr_DateTime.tm_hour));
|
|
} else {
|
|
DBG_ERR("^RZone Calc Error!! Date can not before 2000/1/1\r\n");
|
|
}
|
|
} else if (cUIDateTime.tm_hour + TimeDiff > 23) {
|
|
INT32 TmpDays;
|
|
if (cUIDateTime.tm_year < 2099) {
|
|
TmpDays = timeutil_tm_to_days(cUIDateTime);
|
|
//DbgMsg_UISetDate(("Days=%ld\r\n",TmpDays));
|
|
TmpDays++;
|
|
//DbgMsg_UISetDate(("Days+1=%ld\r\n",TmpDays));
|
|
ti->Curr_DateTime = timeutil_days_to_tm(TmpDays);
|
|
//DbgMsg_UISetDate(("Convert Time:H=%ld,M=%ld\r\n",ti->Curr_DateTime.tm_hour,ti->Curr_DateTime.tm_min));
|
|
ti->Curr_DateTime.tm_hour = cUIDateTime.tm_hour + TimeDiff - 24;
|
|
//DbgMsg_UISetDate(("New H = %ld +%ld - 24 = %ld\r\n",cUIDateTime.tm_hour, TimeDiff, ti->Curr_DateTime.tm_hour));
|
|
} else {
|
|
DBG_ERR("^RZone Calc Error!! Date can not after 2099/1/1\r\n");
|
|
}
|
|
} else {
|
|
ti->Curr_DateTime.tm_hour = cUIDateTime.tm_hour + TimeDiff;
|
|
//DbgMsg_UISetDate(("New H = %ld +%ld = %ld\r\n",cUIDateTime.tm_hour, TimeDiff, ti->Curr_DateTime.tm_hour));
|
|
}
|
|
|
|
ti->Curr_DateTime.tm_min = cUIDateTime.tm_min;
|
|
ti->Curr_DateTime.tm_sec = cUIDateTime.tm_sec;
|
|
DbgMsg_UISetDate(("New Date:Y=%ld,M=%ld,D=%ld\r\n", ti->Curr_DateTime.tm_year, ti->Curr_DateTime.tm_mon, ti->Curr_DateTime.tm_mday));
|
|
DbgMsg_UISetDate(("New Time:H=%ld,M=%ld\r\n", ti->Curr_DateTime.tm_hour, ti->Curr_DateTime.tm_min));
|
|
}
|
|
|
|
void TimeRecord_BeginChange(INT32 iOldTid)
|
|
{
|
|
int i;
|
|
for (i = 0; i < TIME_RECORD_CNT; i++) {
|
|
gTimeRecord[i].new_TimeZone = gTimeRecord[i].TimeZone;
|
|
_TimeRecord_Load(i);
|
|
}
|
|
g_iTid = iOldTid;
|
|
}
|
|
|
|
void TimeRecord_SetZone(INT32 iTid, INT32 v)
|
|
{
|
|
gTimeRecord[iTid].TimeZone = v;
|
|
}
|
|
|
|
void TimeRecord_SetNewZone(INT32 iTid, INT32 v)
|
|
{
|
|
gTimeRecord[iTid].new_TimeZone = v;
|
|
}
|
|
|
|
void TimeRecord_EndChange(INT32 iNewTid)
|
|
{
|
|
INT32 TimeDiff = 0;
|
|
INT32 iOldTid = g_iTid;
|
|
if (iNewTid != iOldTid) {
|
|
DbgMsg_UISetDate(("(OLD) LOCALE=%s, ZONE=%ld\r\n", (iOldTid == 0) ? "HOME" : "TRAVAL", gTimeRecord[iOldTid].TimeZone));
|
|
DbgMsg_UISetDate(("(NEW) LOCALE=%s, ZONE=%ld\r\n", (iNewTid == 0) ? "HOME" : "TRAVAL", gTimeRecord[iNewTid].new_TimeZone));
|
|
TimeDiff = _TimeRecord_CalcTimeDiff
|
|
(gTimeRecord[iNewTid].new_TimeZone, gTimeRecord[iOldTid].TimeZone);
|
|
} else { //if equal tid
|
|
DbgMsg_UISetDate(("(OLD) LOCALE=%s, ZONE=%ld\r\n", (iNewTid == 0) ? "HOME" : "TRAVAL", gTimeRecord[iNewTid].TimeZone));
|
|
DbgMsg_UISetDate(("(NEW) LOCALE=%s, ZONE=%ld\r\n", (iNewTid == 0) ? "HOME" : "TRAVAL", gTimeRecord[iNewTid].new_TimeZone));
|
|
TimeDiff = _TimeRecord_CalcTimeDiff
|
|
(gTimeRecord[iNewTid].new_TimeZone, gTimeRecord[iNewTid].TimeZone);
|
|
if (iNewTid == 0) { //when chage Home Zone, but not change Locale
|
|
TimeDiff = 0; //the time date should be not change
|
|
}
|
|
}
|
|
|
|
DbgMsg_UISetDate((">>> DIFF=%ld\r\n", TimeDiff));
|
|
_TimeRecord_AddTimeDiff(iNewTid, TimeDiff);
|
|
|
|
_TimeRecord_Save(iNewTid);
|
|
}
|
|
|
|
|
|
|