1 // Copyright 2019 yuzu emulator team 2 // Licensed under GPLv2 or any later version 3 // Refer to the license.txt file included. 4 5 #pragma once 6 7 #include <array> 8 9 #include "common/common_funcs.h" 10 #include "common/common_types.h" 11 #include "common/swap.h" 12 13 namespace Service::Time::TimeZone { 14 15 using LocationName = std::array<char, 0x24>; 16 17 /// https://switchbrew.org/wiki/Glue_services#ttinfo 18 struct TimeTypeInfo { 19 s32 gmt_offset{}; 20 u8 is_dst{}; 21 INSERT_PADDING_BYTES(3); 22 s32 abbreviation_list_index{}; 23 u8 is_standard_time_daylight{}; 24 u8 is_gmt{}; 25 INSERT_PADDING_BYTES(2); 26 }; 27 static_assert(sizeof(TimeTypeInfo) == 0x10, "TimeTypeInfo is incorrect size"); 28 29 /// https://switchbrew.org/wiki/Glue_services#TimeZoneRule 30 struct TimeZoneRule { 31 s32 time_count{}; 32 s32 type_count{}; 33 s32 char_count{}; 34 u8 go_back{}; 35 u8 go_ahead{}; 36 INSERT_PADDING_BYTES(2); 37 std::array<s64, 1000> ats{}; 38 std::array<s8, 1000> types{}; 39 std::array<TimeTypeInfo, 128> ttis{}; 40 std::array<char, 512> chars{}; 41 s32 default_type{}; 42 INSERT_PADDING_BYTES(0x12C4); 43 }; 44 static_assert(sizeof(TimeZoneRule) == 0x4000, "TimeZoneRule is incorrect size"); 45 46 /// https://switchbrew.org/wiki/Glue_services#CalendarAdditionalInfo 47 struct CalendarAdditionalInfo { 48 u32 day_of_week{}; 49 u32 day_of_year{}; 50 std::array<char, 8> timezone_name; 51 u32 is_dst{}; 52 s32 gmt_offset{}; 53 }; 54 static_assert(sizeof(CalendarAdditionalInfo) == 0x18, "CalendarAdditionalInfo is incorrect size"); 55 56 /// https://switchbrew.org/wiki/Glue_services#CalendarTime 57 struct CalendarTime { 58 s16 year{}; 59 s8 month{}; 60 s8 day{}; 61 s8 hour{}; 62 s8 minute{}; 63 s8 second{}; 64 INSERT_PADDING_BYTES(1); 65 }; 66 static_assert(sizeof(CalendarTime) == 0x8, "CalendarTime is incorrect size"); 67 68 struct CalendarInfo { 69 CalendarTime time{}; 70 CalendarAdditionalInfo additiona_info{}; 71 }; 72 static_assert(sizeof(CalendarInfo) == 0x20, "CalendarInfo is incorrect size"); 73 74 struct TzifHeader { 75 u32_be magic{}; 76 u8 version{}; 77 INSERT_PADDING_BYTES(15); 78 s32_be ttis_gmt_count{}; 79 s32_be ttis_std_count{}; 80 s32_be leap_count{}; 81 s32_be time_count{}; 82 s32_be type_count{}; 83 s32_be char_count{}; 84 }; 85 static_assert(sizeof(TzifHeader) == 0x2C, "TzifHeader is incorrect size"); 86 87 } // namespace Service::Time::TimeZone 88