21 #include <sys/fcntl.h>
22 #include <sys/unistd.h>
41 #ifdef F__config_internals
45 static void __t10KConfigInitialize(
void)
47 g_t10KConfig.timezoneOffset = 540;
48 g_t10KConfig.screenType = TV_SCREEN_43;
49 g_t10KConfig.dateFormat = DATE_YYYYMMDD;
50 g_t10KConfig.language = LANGUAGE_JAPANESE;
55 static inline unsigned char tobcd(
unsigned char dec)
57 return dec + (dec / 10) * 6;
62 time->second = tobcd(time->second);
63 time->minute = tobcd(time->minute);
64 time->hour = tobcd(time->hour);
65 time->day = tobcd(time->day);
66 time->month = tobcd(time->month);
67 time->year = tobcd(time->year);
73 #ifdef F_convertfrombcd
74 static inline unsigned char frombcd(
unsigned char bcd)
76 return bcd - (bcd >> 4) * 6;
82 time->second = frombcd(time->second);
83 time->minute = frombcd(time->minute);
84 time->hour = frombcd(time->hour);
85 time->day = frombcd(time->day);
86 time->month = frombcd(time->month);
87 time->year = frombcd(time->year);
94 static const unsigned char gDaysInMonths[12] = {
95 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
100 unsigned char days_in_months[12];
101 memcpy(days_in_months, gDaysInMonths, 12);
102 if ((time->year & 3) == 0)
103 days_in_months[1] = 29;
107 if (time->day > days_in_months[time->month - 1]) {
112 if (time->month == 13) {
117 if (time->year == 100) {
127 unsigned char days_in_months[12];
128 memcpy(days_in_months, gDaysInMonths, 12);
129 if ((time->year & 3) == 0)
130 days_in_months[1] = 29;
134 if (time->day == 0) {
137 if (time->month == 0) {
147 time->day = days_in_months[time->month - 1];
154 if (time->hour == 24) {
162 if (time->hour == 0) {
169 void __adjustTime(
sceCdCLOCK *time,
int offset)
171 convertfrombcd(time);
172 offset += time->minute;
175 while (offset >= 60) {
179 time->minute = offset;
185 time->minute = offset;
191 extern void __adjustTime(
sceCdCLOCK *time,
int offset);
201 #ifdef F_configGetLanguage
207 return g_t10KConfig.language;
209 GetOsdConfigParam(&config);
216 #ifdef F_configSetLanguage
222 if (language < LANGUAGE_JAPANESE || language > LANGUAGE_PORTUGUESE)
225 g_t10KConfig.language = language;
228 GetOsdConfigParam(&config);
233 SetOsdConfigParam(&config);
237 #ifdef F_configGetTvScreenType
243 return g_t10KConfig.screenType;
245 GetOsdConfigParam(&config);
250 #ifdef F_configSetTvScreenType
256 if (screenType < TV_SCREEN_43 || screenType > TV_SCREEN_169)
259 g_t10KConfig.screenType = screenType;
262 GetOsdConfigParam(&config);
264 SetOsdConfigParam(&config);
268 #ifdef F_configGetDateFormat
275 return g_t10KConfig.dateFormat;
277 GetOsdConfigParam(&config);
280 GetOsdConfigParam2(&config2,
sizeof(config2), 0);
285 #ifdef F_configSetDateFormat
292 if (dateFormat < DATE_YYYYMMDD || dateFormat > DATE_DDMMYYYY)
295 g_t10KConfig.dateFormat = dateFormat;
298 GetOsdConfigParam(&config);
301 GetOsdConfigParam2(&config2,
sizeof(config2), 0);
303 SetOsdConfigParam2(&config2,
sizeof(config2), 0);
307 #ifdef F_configGetTimeFormat
314 return g_t10KConfig.timeFormat;
316 GetOsdConfigParam(&config);
319 GetOsdConfigParam2(&config2,
sizeof(config2), 0);
324 #ifdef F_configSetTimeFormat
331 if (timeFormat < TIME_24H || timeFormat > TIME_12H)
334 g_t10KConfig.timeFormat = timeFormat;
337 GetOsdConfigParam(&config);
340 GetOsdConfigParam2(&config2,
sizeof(config2), 0);
342 SetOsdConfigParam2(&config2,
sizeof(config2), 0);
346 #ifdef F_configGetTimezone
354 timezoneOffset = g_t10KConfig.timezoneOffset;
358 GetOsdConfigParam(&config);
361 timezoneOffset = 540;
367 if ((timezoneOffset & 0x400) != 0)
370 timezoneOffset ^= 0x7ff;
374 timezoneOffset *= -1;
378 return timezoneOffset;
382 #ifdef F_configSetTimezone
389 g_t10KConfig.timezoneOffset = timezoneOffset;
391 GetOsdConfigParam(&config);
396 u32 wantedTimezoneOffset;
399 if (timezoneOffset < 0)
402 wantedTimezoneOffset = -timezoneOffset;
404 wantedTimezoneOffset -= 1;
406 wantedTimezoneOffset ^= 0x7ff;
410 wantedTimezoneOffset = timezoneOffset;
416 SetOsdConfigParam(&config);
420 #ifdef F_configIsSpdifEnabled
426 return g_t10KConfig.spdifMode ^ 1;
428 GetOsdConfigParam(&config);
433 #ifdef F_configSetSpdifEnabled
439 g_t10KConfig.spdifMode = enabled ^ 1;
441 GetOsdConfigParam(&config);
443 SetOsdConfigParam(&config);
447 #ifdef F_configIsDaylightSavingEnabled
454 return g_t10KConfig.daylightSaving;
456 GetOsdConfigParam(&config);
459 GetOsdConfigParam2(&config2,
sizeof(config2), 0);
465 #ifdef F_configSetDaylightSavingEnabled
472 g_t10KConfig.daylightSaving = daylightSaving;
474 GetOsdConfigParam(&config);
477 GetOsdConfigParam2(&config2,
sizeof(config2), 0);
479 SetOsdConfigParam2(&config2,
sizeof(config2), 0);
483 #ifdef F_configConvertToGmtTime
486 __adjustTime(time, -540);
490 #ifdef F_configConvertToLocalTime
495 __adjustTime(time, timezone_offset - 540 + (daylight_saving * 60));