summaryrefslogtreecommitdiff
path: root/src/core/hle/service/psc
diff options
context:
space:
mode:
authorGravatar Kelebek12024-01-30 19:08:47 +0000
committerGravatar Kelebek12024-01-31 01:41:59 +0000
commit9ed82a280e8f22dbd119b4b7becd3582b50f3ffa (patch)
tree723a135615c95aeee9a775742466eab86f54ce82 /src/core/hle/service/psc
parentMerge pull request #12856 from liamwhite/serialization (diff)
downloadyuzu-9ed82a280e8f22dbd119b4b7becd3582b50f3ffa.tar.gz
yuzu-9ed82a280e8f22dbd119b4b7becd3582b50f3ffa.tar.xz
yuzu-9ed82a280e8f22dbd119b4b7becd3582b50f3ffa.zip
Remove a few hacks for clock setups, which seem to no longer be needed, but fix network clock to local clock on every boot. Also fix some logging strings.
Diffstat (limited to 'src/core/hle/service/psc')
-rw-r--r--src/core/hle/service/psc/time/common.h24
-rw-r--r--src/core/hle/service/psc/time/service_manager.cpp14
-rw-r--r--src/core/hle/service/psc/time/time_zone.cpp41
-rw-r--r--src/core/hle/service/psc/time/time_zone.h12
-rw-r--r--src/core/hle/service/psc/time/time_zone_service.cpp20
-rw-r--r--src/core/hle/service/psc/time/time_zone_service.h4
6 files changed, 52 insertions, 63 deletions
diff --git a/src/core/hle/service/psc/time/common.h b/src/core/hle/service/psc/time/common.h
index 596828b8b..3e13144a0 100644
--- a/src/core/hle/service/psc/time/common.h
+++ b/src/core/hle/service/psc/time/common.h
@@ -189,7 +189,7 @@ struct fmt::formatter<Service::PSC::Time::SteadyClockTimePoint> : fmt::formatter
189 template <typename FormatContext> 189 template <typename FormatContext>
190 auto format(const Service::PSC::Time::SteadyClockTimePoint& time_point, 190 auto format(const Service::PSC::Time::SteadyClockTimePoint& time_point,
191 FormatContext& ctx) const { 191 FormatContext& ctx) const {
192 return fmt::format_to(ctx.out(), "time_point={}", time_point.time_point); 192 return fmt::format_to(ctx.out(), "[time_point={}]", time_point.time_point);
193 } 193 }
194}; 194};
195 195
@@ -197,7 +197,7 @@ template <>
197struct fmt::formatter<Service::PSC::Time::SystemClockContext> : fmt::formatter<fmt::string_view> { 197struct fmt::formatter<Service::PSC::Time::SystemClockContext> : fmt::formatter<fmt::string_view> {
198 template <typename FormatContext> 198 template <typename FormatContext>
199 auto format(const Service::PSC::Time::SystemClockContext& context, FormatContext& ctx) const { 199 auto format(const Service::PSC::Time::SystemClockContext& context, FormatContext& ctx) const {
200 return fmt::format_to(ctx.out(), "offset={} steady_time_point={}", context.offset, 200 return fmt::format_to(ctx.out(), "[offset={} steady_time_point={}]", context.offset,
201 context.steady_time_point.time_point); 201 context.steady_time_point.time_point);
202 } 202 }
203}; 203};
@@ -206,8 +206,9 @@ template <>
206struct fmt::formatter<Service::PSC::Time::CalendarTime> : fmt::formatter<fmt::string_view> { 206struct fmt::formatter<Service::PSC::Time::CalendarTime> : fmt::formatter<fmt::string_view> {
207 template <typename FormatContext> 207 template <typename FormatContext>
208 auto format(const Service::PSC::Time::CalendarTime& calendar, FormatContext& ctx) const { 208 auto format(const Service::PSC::Time::CalendarTime& calendar, FormatContext& ctx) const {
209 return fmt::format_to(ctx.out(), "{}/{}/{} {}:{}:{}", calendar.day, calendar.month, 209 return fmt::format_to(ctx.out(), "[{:02}/{:02}/{:04} {:02}:{:02}:{:02}]", calendar.day,
210 calendar.year, calendar.hour, calendar.minute, calendar.second); 210 calendar.month, calendar.year, calendar.hour, calendar.minute,
211 calendar.second);
211 } 212 }
212}; 213};
213 214
@@ -217,7 +218,7 @@ struct fmt::formatter<Service::PSC::Time::CalendarAdditionalInfo>
217 template <typename FormatContext> 218 template <typename FormatContext>
218 auto format(const Service::PSC::Time::CalendarAdditionalInfo& additional, 219 auto format(const Service::PSC::Time::CalendarAdditionalInfo& additional,
219 FormatContext& ctx) const { 220 FormatContext& ctx) const {
220 return fmt::format_to(ctx.out(), "weekday={} yearday={} name={} is_dst={} ut_offset={}", 221 return fmt::format_to(ctx.out(), "[weekday={} yearday={} name={} is_dst={} ut_offset={}]",
221 additional.day_of_week, additional.day_of_year, 222 additional.day_of_week, additional.day_of_year,
222 additional.name.data(), additional.is_dst, additional.ut_offset); 223 additional.name.data(), additional.is_dst, additional.ut_offset);
223 } 224 }
@@ -227,8 +228,7 @@ template <>
227struct fmt::formatter<Service::PSC::Time::LocationName> : fmt::formatter<fmt::string_view> { 228struct fmt::formatter<Service::PSC::Time::LocationName> : fmt::formatter<fmt::string_view> {
228 template <typename FormatContext> 229 template <typename FormatContext>
229 auto format(const Service::PSC::Time::LocationName& name, FormatContext& ctx) const { 230 auto format(const Service::PSC::Time::LocationName& name, FormatContext& ctx) const {
230 std::string_view n{name.data(), name.size()}; 231 return formatter<string_view>::format(name.data(), ctx);
231 return formatter<string_view>::format(n, ctx);
232 } 232 }
233}; 233};
234 234
@@ -236,8 +236,7 @@ template <>
236struct fmt::formatter<Service::PSC::Time::RuleVersion> : fmt::formatter<fmt::string_view> { 236struct fmt::formatter<Service::PSC::Time::RuleVersion> : fmt::formatter<fmt::string_view> {
237 template <typename FormatContext> 237 template <typename FormatContext>
238 auto format(const Service::PSC::Time::RuleVersion& version, FormatContext& ctx) const { 238 auto format(const Service::PSC::Time::RuleVersion& version, FormatContext& ctx) const {
239 std::string_view v{version.data(), version.size()}; 239 return formatter<string_view>::format(version.data(), ctx);
240 return formatter<string_view>::format(v, ctx);
241 } 240 }
242}; 241};
243 242
@@ -247,10 +246,11 @@ struct fmt::formatter<Service::PSC::Time::ClockSnapshot> : fmt::formatter<fmt::s
247 auto format(const Service::PSC::Time::ClockSnapshot& snapshot, FormatContext& ctx) const { 246 auto format(const Service::PSC::Time::ClockSnapshot& snapshot, FormatContext& ctx) const {
248 return fmt::format_to( 247 return fmt::format_to(
249 ctx.out(), 248 ctx.out(),
250 "user_context={} network_context={} user_time={} network_time={} user_calendar_time={} " 249 "[user_context={} network_context={} user_time={} network_time={} "
250 "user_calendar_time={} "
251 "network_calendar_time={} user_calendar_additional_time={} " 251 "network_calendar_time={} user_calendar_additional_time={} "
252 "network_calendar_additional_time={} steady_clock_time_point={} location={} " 252 "network_calendar_additional_time={} steady_clock_time_point={} location={} "
253 "is_automatic_correction_enabled={} type={}", 253 "is_automatic_correction_enabled={} type={}]",
254 snapshot.user_context, snapshot.network_context, snapshot.user_time, 254 snapshot.user_context, snapshot.network_context, snapshot.user_time,
255 snapshot.network_time, snapshot.user_calendar_time, snapshot.network_calendar_time, 255 snapshot.network_time, snapshot.user_calendar_time, snapshot.network_calendar_time,
256 snapshot.user_calendar_additional_time, snapshot.network_calendar_additional_time, 256 snapshot.user_calendar_additional_time, snapshot.network_calendar_additional_time,
@@ -266,7 +266,7 @@ struct fmt::formatter<Service::PSC::Time::ContinuousAdjustmentTimePoint>
266 auto format(const Service::PSC::Time::ContinuousAdjustmentTimePoint& time_point, 266 auto format(const Service::PSC::Time::ContinuousAdjustmentTimePoint& time_point,
267 FormatContext& ctx) const { 267 FormatContext& ctx) const {
268 return fmt::format_to(ctx.out(), 268 return fmt::format_to(ctx.out(),
269 "rtc_offset={} diff_scale={} shift_amount={} lower={} upper={}", 269 "[rtc_offset={} diff_scale={} shift_amount={} lower={} upper={}]",
270 time_point.rtc_offset, time_point.diff_scale, time_point.shift_amount, 270 time_point.rtc_offset, time_point.diff_scale, time_point.shift_amount,
271 time_point.lower, time_point.upper); 271 time_point.lower, time_point.upper);
272 } 272 }
diff --git a/src/core/hle/service/psc/time/service_manager.cpp b/src/core/hle/service/psc/time/service_manager.cpp
index ec906b723..4e1643fcb 100644
--- a/src/core/hle/service/psc/time/service_manager.cpp
+++ b/src/core/hle/service/psc/time/service_manager.cpp
@@ -120,11 +120,8 @@ Result ServiceManager::SetupStandardNetworkSystemClockCore(SystemClockContext& c
120 context, context.steady_time_point.clock_source_id.RawString(), accuracy); 120 context, context.steady_time_point.clock_source_id.RawString(), accuracy);
121 121
122 // TODO this is a hack! The network clock should be updated independently, from the ntc service 122 // TODO this is a hack! The network clock should be updated independently, from the ntc service
123 // and maybe elsewhere. We do not do that, so fix the clock to the local clock on first boot 123 // and maybe elsewhere. We do not do that, so fix the clock to the local clock.
124 // to avoid it being stuck at 0. 124 m_local_system_clock.GetContext(context);
125 if (context == Service::PSC::Time::SystemClockContext{}) {
126 m_local_system_clock.GetContext(context);
127 }
128 125
129 m_network_system_clock.SetContextWriter(m_network_system_context_writer); 126 m_network_system_clock.SetContextWriter(m_network_system_context_writer);
130 m_network_system_clock.Initialize(context, accuracy); 127 m_network_system_clock.Initialize(context, accuracy);
@@ -138,13 +135,6 @@ Result ServiceManager::SetupStandardUserSystemClockCore(bool automatic_correctio
138 LOG_DEBUG(Service_Time, "called. automatic_correction={} time_point={} clock_source_id={}", 135 LOG_DEBUG(Service_Time, "called. automatic_correction={} time_point={} clock_source_id={}",
139 automatic_correction, time_point, time_point.clock_source_id.RawString()); 136 automatic_correction, time_point, time_point.clock_source_id.RawString());
140 137
141 // TODO this is a hack! The user clock should be updated independently, from the ntc service
142 // and maybe elsewhere. We do not do that, so fix the clock to the local clock on first boot
143 // to avoid it being stuck at 0.
144 if (time_point == Service::PSC::Time::SteadyClockTimePoint{}) {
145 m_local_system_clock.GetCurrentTimePoint(time_point);
146 }
147
148 m_user_system_clock.SetAutomaticCorrection(automatic_correction); 138 m_user_system_clock.SetAutomaticCorrection(automatic_correction);
149 m_user_system_clock.SetTimePointAndSignal(time_point); 139 m_user_system_clock.SetTimePointAndSignal(time_point);
150 m_user_system_clock.SetInitialized(); 140 m_user_system_clock.SetInitialized();
diff --git a/src/core/hle/service/psc/time/time_zone.cpp b/src/core/hle/service/psc/time/time_zone.cpp
index 82ddba42f..cc855c763 100644
--- a/src/core/hle/service/psc/time/time_zone.cpp
+++ b/src/core/hle/service/psc/time/time_zone.cpp
@@ -140,11 +140,11 @@ Result TimeZone::ParseBinaryInto(Tz::Rule& out_rule, std::span<const u8> binary)
140 R_RETURN(ParseBinaryImpl(out_rule, binary)); 140 R_RETURN(ParseBinaryImpl(out_rule, binary));
141} 141}
142 142
143Result TimeZone::ToPosixTime(u32& out_count, std::span<s64> out_times, u32 out_times_count, 143Result TimeZone::ToPosixTime(u32& out_count, std::span<s64> out_times, size_t out_times_max_count,
144 CalendarTime& calendar, const Tz::Rule& rule) { 144 const CalendarTime& calendar, const Tz::Rule& rule) {
145 std::scoped_lock l{m_mutex}; 145 std::scoped_lock l{m_mutex};
146 146
147 auto res = ToPosixTimeImpl(out_count, out_times, out_times_count, calendar, rule, -1); 147 auto res = ToPosixTimeImpl(out_count, out_times, out_times_max_count, calendar, rule, -1);
148 148
149 if (res != ResultSuccess) { 149 if (res != ResultSuccess) {
150 if (res == ResultTimeZoneNotFound) { 150 if (res == ResultTimeZoneNotFound) {
@@ -158,10 +158,10 @@ Result TimeZone::ToPosixTime(u32& out_count, std::span<s64> out_times, u32 out_t
158} 158}
159 159
160Result TimeZone::ToPosixTimeWithMyRule(u32& out_count, std::span<s64> out_times, 160Result TimeZone::ToPosixTimeWithMyRule(u32& out_count, std::span<s64> out_times,
161 u32 out_times_count, CalendarTime& calendar) { 161 size_t out_times_max_count, const CalendarTime& calendar) {
162 std::scoped_lock l{m_mutex}; 162 std::scoped_lock l{m_mutex};
163 163
164 auto res = ToPosixTimeImpl(out_count, out_times, out_times_count, calendar, m_my_rule, -1); 164 auto res = ToPosixTimeImpl(out_count, out_times, out_times_max_count, calendar, m_my_rule, -1);
165 165
166 if (res != ResultSuccess) { 166 if (res != ResultSuccess) {
167 if (res == ResultTimeZoneNotFound) { 167 if (res == ResultTimeZoneNotFound) {
@@ -212,20 +212,23 @@ Result TimeZone::ToCalendarTimeImpl(CalendarTime& out_calendar_time,
212 R_SUCCEED(); 212 R_SUCCEED();
213} 213}
214 214
215Result TimeZone::ToPosixTimeImpl(u32& out_count, std::span<s64> out_times, u32 out_times_count, 215Result TimeZone::ToPosixTimeImpl(u32& out_count, std::span<s64> out_times,
216 CalendarTime& calendar, const Tz::Rule& rule, s32 is_dst) { 216 size_t out_times_max_count, const CalendarTime& calendar,
217 const Tz::Rule& rule, s32 is_dst) {
217 R_TRY(ValidateRule(rule)); 218 R_TRY(ValidateRule(rule));
218 219
219 calendar.month -= 1; 220 CalendarTime local_calendar{calendar};
220 calendar.year -= 1900; 221
222 local_calendar.month -= 1;
223 local_calendar.year -= 1900;
221 224
222 Tz::CalendarTimeInternal internal{ 225 Tz::CalendarTimeInternal internal{
223 .tm_sec = calendar.second, 226 .tm_sec = local_calendar.second,
224 .tm_min = calendar.minute, 227 .tm_min = local_calendar.minute,
225 .tm_hour = calendar.hour, 228 .tm_hour = local_calendar.hour,
226 .tm_mday = calendar.day, 229 .tm_mday = local_calendar.day,
227 .tm_mon = calendar.month, 230 .tm_mon = local_calendar.month,
228 .tm_year = calendar.year, 231 .tm_year = local_calendar.year,
229 .tm_wday = 0, 232 .tm_wday = 0,
230 .tm_yday = 0, 233 .tm_yday = 0,
231 .tm_isdst = is_dst, 234 .tm_isdst = is_dst,
@@ -243,9 +246,9 @@ Result TimeZone::ToPosixTimeImpl(u32& out_count, std::span<s64> out_times, u32 o
243 R_RETURN(ResultTimeZoneNotFound); 246 R_RETURN(ResultTimeZoneNotFound);
244 } 247 }
245 248
246 if (internal.tm_sec != calendar.second || internal.tm_min != calendar.minute || 249 if (internal.tm_sec != local_calendar.second || internal.tm_min != local_calendar.minute ||
247 internal.tm_hour != calendar.hour || internal.tm_mday != calendar.day || 250 internal.tm_hour != local_calendar.hour || internal.tm_mday != local_calendar.day ||
248 internal.tm_mon != calendar.month || internal.tm_year != calendar.year) { 251 internal.tm_mon != local_calendar.month || internal.tm_year != local_calendar.year) {
249 R_RETURN(ResultTimeZoneNotFound); 252 R_RETURN(ResultTimeZoneNotFound);
250 } 253 }
251 254
@@ -254,7 +257,7 @@ Result TimeZone::ToPosixTimeImpl(u32& out_count, std::span<s64> out_times, u32 o
254 } 257 }
255 258
256 out_times[0] = time; 259 out_times[0] = time;
257 if (out_times_count < 2) { 260 if (out_times_max_count < 2) {
258 out_count = 1; 261 out_count = 1;
259 R_SUCCEED(); 262 R_SUCCEED();
260 } 263 }
diff --git a/src/core/hle/service/psc/time/time_zone.h b/src/core/hle/service/psc/time/time_zone.h
index 6bd8f2fda..6248e45f9 100644
--- a/src/core/hle/service/psc/time/time_zone.h
+++ b/src/core/hle/service/psc/time/time_zone.h
@@ -38,18 +38,18 @@ public:
38 CalendarAdditionalInfo& calendar_additional, s64 time); 38 CalendarAdditionalInfo& calendar_additional, s64 time);
39 Result ParseBinary(LocationName& name, std::span<const u8> binary); 39 Result ParseBinary(LocationName& name, std::span<const u8> binary);
40 Result ParseBinaryInto(Tz::Rule& out_rule, std::span<const u8> binary); 40 Result ParseBinaryInto(Tz::Rule& out_rule, std::span<const u8> binary);
41 Result ToPosixTime(u32& out_count, std::span<s64> out_times, u32 out_times_count, 41 Result ToPosixTime(u32& out_count, std::span<s64> out_times, size_t out_times_max_count,
42 CalendarTime& calendar, const Tz::Rule& rule); 42 const CalendarTime& calendar, const Tz::Rule& rule);
43 Result ToPosixTimeWithMyRule(u32& out_count, std::span<s64> out_times, u32 out_times_count, 43 Result ToPosixTimeWithMyRule(u32& out_count, std::span<s64> out_times,
44 CalendarTime& calendar); 44 size_t out_times_max_count, const CalendarTime& calendar);
45 45
46private: 46private:
47 Result ParseBinaryImpl(Tz::Rule& out_rule, std::span<const u8> binary); 47 Result ParseBinaryImpl(Tz::Rule& out_rule, std::span<const u8> binary);
48 Result ToCalendarTimeImpl(CalendarTime& out_calendar_time, 48 Result ToCalendarTimeImpl(CalendarTime& out_calendar_time,
49 CalendarAdditionalInfo& out_additional_info, s64 time, 49 CalendarAdditionalInfo& out_additional_info, s64 time,
50 const Tz::Rule& rule); 50 const Tz::Rule& rule);
51 Result ToPosixTimeImpl(u32& out_count, std::span<s64> out_times, u32 out_times_count, 51 Result ToPosixTimeImpl(u32& out_count, std::span<s64> out_times, size_t out_times_max_count,
52 CalendarTime& calendar, const Tz::Rule& rule, s32 is_dst); 52 const CalendarTime& calendar, const Tz::Rule& rule, s32 is_dst);
53 53
54 bool m_initialized{}; 54 bool m_initialized{};
55 std::recursive_mutex m_mutex; 55 std::recursive_mutex m_mutex;
diff --git a/src/core/hle/service/psc/time/time_zone_service.cpp b/src/core/hle/service/psc/time/time_zone_service.cpp
index 9376a0324..eb81f5b03 100644
--- a/src/core/hle/service/psc/time/time_zone_service.cpp
+++ b/src/core/hle/service/psc/time/time_zone_service.cpp
@@ -138,32 +138,28 @@ Result TimeZoneService::ToCalendarTimeWithMyRule(Out<CalendarTime> out_calendar_
138 138
139Result TimeZoneService::ToPosixTime(Out<u32> out_count, 139Result TimeZoneService::ToPosixTime(Out<u32> out_count,
140 OutArray<s64, BufferAttr_HipcPointer> out_times, 140 OutArray<s64, BufferAttr_HipcPointer> out_times,
141 Out<u32> out_times_count, CalendarTime& calendar_time, 141 const CalendarTime& calendar_time, InRule rule) {
142 InRule rule) {
143 SCOPE_EXIT({ 142 SCOPE_EXIT({
144 LOG_DEBUG(Service_Time, 143 LOG_DEBUG(Service_Time,
145 "called. calendar_time={} out_count={} out_times[0]={} out_times[1]={} " 144 "called. calendar_time={} out_count={} out_times[0]={} out_times[1]={} ",
146 "out_times_count={}", 145 calendar_time, *out_count, out_times[0], out_times[1]);
147 calendar_time, *out_count, out_times[0], out_times[1], *out_times_count);
148 }); 146 });
149 147
150 R_RETURN( 148 R_RETURN(
151 m_time_zone.ToPosixTime(*out_count, out_times, *out_times_count, calendar_time, *rule)); 149 m_time_zone.ToPosixTime(*out_count, out_times, out_times.size(), calendar_time, *rule));
152} 150}
153 151
154Result TimeZoneService::ToPosixTimeWithMyRule(Out<u32> out_count, 152Result TimeZoneService::ToPosixTimeWithMyRule(Out<u32> out_count,
155 OutArray<s64, BufferAttr_HipcPointer> out_times, 153 OutArray<s64, BufferAttr_HipcPointer> out_times,
156 Out<u32> out_times_count, 154 const CalendarTime& calendar_time) {
157 CalendarTime& calendar_time) {
158 SCOPE_EXIT({ 155 SCOPE_EXIT({
159 LOG_DEBUG(Service_Time, 156 LOG_DEBUG(Service_Time,
160 "called. calendar_time={} out_count={} out_times[0]={} out_times[1]={} " 157 "called. calendar_time={} out_count={} out_times[0]={} out_times[1]={} ",
161 "out_times_count={}", 158 calendar_time, *out_count, out_times[0], out_times[1]);
162 calendar_time, *out_count, out_times[0], out_times[1], *out_times_count);
163 }); 159 });
164 160
165 R_RETURN( 161 R_RETURN(
166 m_time_zone.ToPosixTimeWithMyRule(*out_count, out_times, *out_times_count, calendar_time)); 162 m_time_zone.ToPosixTimeWithMyRule(*out_count, out_times, out_times.size(), calendar_time));
167} 163}
168 164
169} // namespace Service::PSC::Time 165} // namespace Service::PSC::Time
diff --git a/src/core/hle/service/psc/time/time_zone_service.h b/src/core/hle/service/psc/time/time_zone_service.h
index 084e3f907..6eb9ddc4b 100644
--- a/src/core/hle/service/psc/time/time_zone_service.h
+++ b/src/core/hle/service/psc/time/time_zone_service.h
@@ -50,10 +50,10 @@ public:
50 Result ToCalendarTimeWithMyRule(Out<CalendarTime> out_calendar_time, 50 Result ToCalendarTimeWithMyRule(Out<CalendarTime> out_calendar_time,
51 Out<CalendarAdditionalInfo> out_additional_info, s64 time); 51 Out<CalendarAdditionalInfo> out_additional_info, s64 time);
52 Result ToPosixTime(Out<u32> out_count, OutArray<s64, BufferAttr_HipcPointer> out_times, 52 Result ToPosixTime(Out<u32> out_count, OutArray<s64, BufferAttr_HipcPointer> out_times,
53 Out<u32> out_times_count, CalendarTime& calendar_time, InRule rule); 53 const CalendarTime& calendar_time, InRule rule);
54 Result ToPosixTimeWithMyRule(Out<u32> out_count, 54 Result ToPosixTimeWithMyRule(Out<u32> out_count,
55 OutArray<s64, BufferAttr_HipcPointer> out_times, 55 OutArray<s64, BufferAttr_HipcPointer> out_times,
56 Out<u32> out_times_count, CalendarTime& calendar_time); 56 const CalendarTime& calendar_time);
57 57
58private: 58private:
59 Core::System& m_system; 59 Core::System& m_system;