mirror of
https://github.com/skyline-emu/skyline.git
synced 2024-11-26 15:54:18 +01:00
Refactor time services
Use the new service naming convention. Split out each sub-service into it's own file. Fix some incorrect comments.
This commit is contained in:
parent
704a5bdcb1
commit
ab33f692c6
@ -62,7 +62,9 @@ add_library(skyline SHARED
|
|||||||
${source_DIR}/skyline/services/am/applet.cpp
|
${source_DIR}/skyline/services/am/applet.cpp
|
||||||
${source_DIR}/skyline/services/am/appletController.cpp
|
${source_DIR}/skyline/services/am/appletController.cpp
|
||||||
${source_DIR}/skyline/services/hid/hid.cpp
|
${source_DIR}/skyline/services/hid/hid.cpp
|
||||||
${source_DIR}/skyline/services/time/time.cpp
|
${source_DIR}/skyline/services/timesrv/IStaticService.cpp
|
||||||
|
${source_DIR}/skyline/services/timesrv/ISystemClock.cpp
|
||||||
|
${source_DIR}/skyline/services/timesrv/ITimeZoneService.cpp
|
||||||
${source_DIR}/skyline/services/fs/fs.cpp
|
${source_DIR}/skyline/services/fs/fs.cpp
|
||||||
${source_DIR}/skyline/services/nvdrv/nvdrv.cpp
|
${source_DIR}/skyline/services/nvdrv/nvdrv.cpp
|
||||||
${source_DIR}/skyline/services/nvnflinger/dispdrv.cpp
|
${source_DIR}/skyline/services/nvnflinger/dispdrv.cpp
|
||||||
|
@ -44,9 +44,9 @@ namespace skyline::service {
|
|||||||
IAudioRenderer,
|
IAudioRenderer,
|
||||||
hid,
|
hid,
|
||||||
hid_IAppletResource,
|
hid_IAppletResource,
|
||||||
time,
|
timesrv_IStaticService,
|
||||||
time_ISystemClock,
|
timesrv_ISystemClock,
|
||||||
time_ITimeZoneService,
|
timesrv_ITimeZoneService,
|
||||||
fs_fsp,
|
fs_fsp,
|
||||||
fs_IFileSystem,
|
fs_IFileSystem,
|
||||||
nvdrv,
|
nvdrv,
|
||||||
@ -69,8 +69,9 @@ namespace skyline::service {
|
|||||||
{"audout:u", Service::audout_u},
|
{"audout:u", Service::audout_u},
|
||||||
{"audren:u", Service::IAudioRendererManager},
|
{"audren:u", Service::IAudioRendererManager},
|
||||||
{"hid", Service::hid},
|
{"hid", Service::hid},
|
||||||
{"time:s", Service::time},
|
{"time:s", Service::timesrv_IStaticService},
|
||||||
{"time:a", Service::time},
|
{"time:a", Service::timesrv_IStaticService},
|
||||||
|
{"time:u", Service::timesrv_IStaticService},
|
||||||
{"fsp-srv", Service::fs_fsp},
|
{"fsp-srv", Service::fs_fsp},
|
||||||
{"nvdrv", Service::nvdrv},
|
{"nvdrv", Service::nvdrv},
|
||||||
{"nvdrv:a", Service::nvdrv},
|
{"nvdrv:a", Service::nvdrv},
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
#include "audout/audout.h"
|
#include "audout/audout.h"
|
||||||
#include "fatal/fatal.h"
|
#include "fatal/fatal.h"
|
||||||
#include "hid/hid.h"
|
#include "hid/hid.h"
|
||||||
#include "time/timesrv.h"
|
#include "timesrv/IStaticService.h"
|
||||||
#include "fs/fs.h"
|
#include "fs/fs.h"
|
||||||
#include "nvdrv/nvdrv.h"
|
#include "nvdrv/nvdrv.h"
|
||||||
#include "vi/vi_m.h"
|
#include "vi/vi_m.h"
|
||||||
@ -50,8 +50,8 @@ namespace skyline::service {
|
|||||||
case Service::hid:
|
case Service::hid:
|
||||||
serviceObj = std::make_shared<hid::hid>(state, *this);
|
serviceObj = std::make_shared<hid::hid>(state, *this);
|
||||||
break;
|
break;
|
||||||
case Service::time:
|
case Service::timesrv_IStaticService:
|
||||||
serviceObj = std::make_shared<time::time>(state, *this);
|
serviceObj = std::make_shared<timesrv::IStaticService>(state, *this);
|
||||||
break;
|
break;
|
||||||
case Service::fs_fsp:
|
case Service::fs_fsp:
|
||||||
serviceObj = std::make_shared<fs::fsp>(state, *this);
|
serviceObj = std::make_shared<fs::fsp>(state, *this);
|
||||||
|
@ -1,59 +0,0 @@
|
|||||||
#include "timesrv.h"
|
|
||||||
|
|
||||||
namespace skyline::service::time {
|
|
||||||
time::time(const DeviceState &state, ServiceManager &manager) : BaseService(state, manager, Service::time, "time", {
|
|
||||||
{0x0, SFUNC(time::GetStandardUserSystemClock)},
|
|
||||||
{0x1, SFUNC(time::GetStandardNetworkSystemClock)},
|
|
||||||
{0x3, SFUNC(time::GetTimeZoneService)},
|
|
||||||
{0x4, SFUNC(time::GetStandardLocalSystemClock)}
|
|
||||||
}) {}
|
|
||||||
|
|
||||||
void time::GetStandardUserSystemClock(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
|
||||||
manager.RegisterService(std::make_shared<ISystemClock>(SystemClockType::User, state, manager), session, response);
|
|
||||||
}
|
|
||||||
|
|
||||||
void time::GetStandardNetworkSystemClock(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
|
||||||
manager.RegisterService(std::make_shared<ISystemClock>(SystemClockType::Network, state, manager), session, response);
|
|
||||||
}
|
|
||||||
|
|
||||||
void time::GetTimeZoneService(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
|
||||||
manager.RegisterService(std::make_shared<ITimeZoneService>(state, manager), session, response);
|
|
||||||
}
|
|
||||||
|
|
||||||
void time::GetStandardLocalSystemClock(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
|
||||||
manager.RegisterService(std::make_shared<ISystemClock>(SystemClockType::Local, state, manager), session, response);
|
|
||||||
}
|
|
||||||
|
|
||||||
ISystemClock::ISystemClock(SystemClockType clockType, const DeviceState &state, ServiceManager &manager) : type(clockType), BaseService(state, manager, Service::time_ISystemClock, "time:ISystemClock", {
|
|
||||||
{0x0, SFUNC(ISystemClock::GetCurrentTime)}
|
|
||||||
}) {}
|
|
||||||
|
|
||||||
void ISystemClock::GetCurrentTime(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
|
||||||
response.Push<u64>(static_cast<u64>(std::time(nullptr)));
|
|
||||||
}
|
|
||||||
|
|
||||||
ITimeZoneService::ITimeZoneService(const DeviceState &state, ServiceManager &manager) : BaseService(state, manager, Service::time_ITimeZoneService, "time:ITimeZoneService", {
|
|
||||||
{0x65, SFUNC(ITimeZoneService::ToCalendarTimeWithMyRule)}
|
|
||||||
}) {}
|
|
||||||
|
|
||||||
void ITimeZoneService::ToCalendarTimeWithMyRule(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
|
||||||
time_t curTime = std::time(nullptr);
|
|
||||||
tm calender = *std::gmtime(&curTime);
|
|
||||||
CalendarTime calendarTime{
|
|
||||||
.year = static_cast<u16>(calender.tm_year),
|
|
||||||
.month = static_cast<u8>(calender.tm_mon),
|
|
||||||
.day = static_cast<u8>(calender.tm_hour),
|
|
||||||
.minute = static_cast<u8>(calender.tm_min),
|
|
||||||
.second = static_cast<u8>(calender.tm_sec)
|
|
||||||
};
|
|
||||||
response.Push(calendarTime);
|
|
||||||
CalendarAdditionalInfo calendarInfo{
|
|
||||||
.day_week = static_cast<u32>(calender.tm_wday),
|
|
||||||
.day_month = static_cast<u32>(calender.tm_mday),
|
|
||||||
.name = *reinterpret_cast<const u64 *>(calender.tm_zone),
|
|
||||||
.dst = static_cast<i32>(calender.tm_isdst),
|
|
||||||
.utc_rel = static_cast<u32>(calender.tm_gmtoff)
|
|
||||||
};
|
|
||||||
response.Push(calendarInfo);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,97 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <services/base_service.h>
|
|
||||||
#include <services/serviceman.h>
|
|
||||||
|
|
||||||
namespace skyline::service::time {
|
|
||||||
/**
|
|
||||||
* @brief The type of a #SystemClockType
|
|
||||||
*/
|
|
||||||
enum class SystemClockType {
|
|
||||||
User, //!< Use time provided by user
|
|
||||||
Network, //!< Use network time
|
|
||||||
Local, //!< Use local time
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief time (This covers both time:a and time:s) is responsible for providing handles to various clock services (https://switchbrew.org/wiki/PSC_services#time:su.2C_time:s)
|
|
||||||
*/
|
|
||||||
class time : public BaseService {
|
|
||||||
public:
|
|
||||||
time(const DeviceState &state, ServiceManager &manager);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This returns a handle to a ISystemClock for user time (https://switchbrew.org/wiki/Services_API#GetStandardUserSystemClock)
|
|
||||||
*/
|
|
||||||
void GetStandardUserSystemClock(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This returns a handle to a ISystemClock for user time (https://switchbrew.org/wiki/Services_API#GetStandardNetworkSystemClock)
|
|
||||||
*/
|
|
||||||
void GetStandardNetworkSystemClock(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This returns a handle to a ISystemClock for user time (https://switchbrew.org/wiki/Services_API#GetStandardNetworkSystemClock)
|
|
||||||
*/
|
|
||||||
void GetTimeZoneService(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This returns a handle to a ISystemClock for user time (https://switchbrew.org/wiki/Services_API#GetStandardNetworkSystemClock)
|
|
||||||
*/
|
|
||||||
void GetStandardLocalSystemClock(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief ISystemClock is used to retrieve and set time (https://switchbrew.org/wiki/PSC_services#ISystemClock)
|
|
||||||
*/
|
|
||||||
class ISystemClock : public BaseService {
|
|
||||||
public:
|
|
||||||
SystemClockType type; //!< The type of the system clock
|
|
||||||
|
|
||||||
ISystemClock(SystemClockType clockType, const DeviceState &state, ServiceManager &manager);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This returns the amount of seconds since epoch
|
|
||||||
*/
|
|
||||||
void GetCurrentTime(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief ITimeZoneService is used to retrieve and set time (https://switchbrew.org/wiki/PSC_services#ITimeZoneService)
|
|
||||||
*/
|
|
||||||
class ITimeZoneService : public BaseService {
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* @brief This holds a particular time point in calendar format
|
|
||||||
*/
|
|
||||||
struct CalendarTime {
|
|
||||||
u16 year;
|
|
||||||
u8 month;
|
|
||||||
u8 day;
|
|
||||||
u8 hour;
|
|
||||||
u8 minute;
|
|
||||||
u8 second;
|
|
||||||
u8 : 8;
|
|
||||||
};
|
|
||||||
static_assert(sizeof(CalendarTime) == 8);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This is passed in addition to CalendarTime
|
|
||||||
*/
|
|
||||||
struct CalendarAdditionalInfo {
|
|
||||||
u32 day_week;
|
|
||||||
u32 day_month;
|
|
||||||
u64 name;
|
|
||||||
i32 dst;
|
|
||||||
u32 utc_rel;
|
|
||||||
};
|
|
||||||
static_assert(sizeof(CalendarAdditionalInfo) == 24);
|
|
||||||
|
|
||||||
ITimeZoneService(const DeviceState &state, ServiceManager &manager);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This receives a u64 #PosixTime (https://switchbrew.org/wiki/PSC_services#PosixTime), and returns a #CalendarTime (https://switchbrew.org/wiki/PSC_services#CalendarTime), #CalendarAdditionalInfo (https://switchbrew.org/wiki/PSC_services#CalendarAdditionalInfo)
|
|
||||||
*/
|
|
||||||
void ToCalendarTimeWithMyRule(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
|
|
||||||
};
|
|
||||||
}
|
|
28
app/src/main/cpp/skyline/services/timesrv/IStaticService.cpp
Normal file
28
app/src/main/cpp/skyline/services/timesrv/IStaticService.cpp
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#include "IStaticService.h"
|
||||||
|
#include "ISystemClock.h"
|
||||||
|
#include "ITimeZoneService.h"
|
||||||
|
|
||||||
|
namespace skyline::service::timesrv {
|
||||||
|
IStaticService::IStaticService(const DeviceState &state, ServiceManager &manager) : BaseService(state, manager, Service::timesrv_IStaticService, "timesrv:IStaticService", {
|
||||||
|
{0x0, SFUNC(IStaticService::GetStandardUserSystemClock)},
|
||||||
|
{0x1, SFUNC(IStaticService::GetStandardNetworkSystemClock)},
|
||||||
|
{0x3, SFUNC(IStaticService::GetTimeZoneService)},
|
||||||
|
{0x4, SFUNC(IStaticService::GetStandardLocalSystemClock)}
|
||||||
|
}) {}
|
||||||
|
|
||||||
|
void IStaticService::GetStandardUserSystemClock(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
||||||
|
manager.RegisterService(std::make_shared<ISystemClock>(SystemClockType::User, state, manager), session, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IStaticService::GetStandardNetworkSystemClock(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
||||||
|
manager.RegisterService(std::make_shared<ISystemClock>(SystemClockType::Network, state, manager), session, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IStaticService::GetTimeZoneService(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
||||||
|
manager.RegisterService(std::make_shared<ITimeZoneService>(state, manager), session, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IStaticService::GetStandardLocalSystemClock(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
||||||
|
manager.RegisterService(std::make_shared<ISystemClock>(SystemClockType::Local, state, manager), session, response);
|
||||||
|
}
|
||||||
|
}
|
34
app/src/main/cpp/skyline/services/timesrv/IStaticService.h
Normal file
34
app/src/main/cpp/skyline/services/timesrv/IStaticService.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <services/base_service.h>
|
||||||
|
#include <services/serviceman.h>
|
||||||
|
|
||||||
|
namespace skyline::service::timesrv {
|
||||||
|
/**
|
||||||
|
* @brief IStaticService (This covers time:u, time:a and time:s) is responsible for providing handles to various clock services (https://switchbrew.org/wiki/PSC_services#time:su.2C_time:s)
|
||||||
|
*/
|
||||||
|
class IStaticService : public BaseService {
|
||||||
|
public:
|
||||||
|
IStaticService(const DeviceState &state, ServiceManager &manager);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This returns a handle to a ISystemClock for user time
|
||||||
|
*/
|
||||||
|
void GetStandardUserSystemClock(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This returns a handle to a ISystemClock for network time
|
||||||
|
*/
|
||||||
|
void GetStandardNetworkSystemClock(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This returns a handle to a ITimeZoneService for reading time zone information
|
||||||
|
*/
|
||||||
|
void GetTimeZoneService(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This returns a handle to a ISystemClock for local time
|
||||||
|
*/
|
||||||
|
void GetStandardLocalSystemClock(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
|
||||||
|
};
|
||||||
|
}
|
11
app/src/main/cpp/skyline/services/timesrv/ISystemClock.cpp
Normal file
11
app/src/main/cpp/skyline/services/timesrv/ISystemClock.cpp
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#include "ISystemClock.h"
|
||||||
|
|
||||||
|
namespace skyline::service::timesrv {
|
||||||
|
ISystemClock::ISystemClock(const SystemClockType clockType, const DeviceState &state, ServiceManager &manager) : type(clockType), BaseService(state, manager, Service::timesrv_ISystemClock, "timesrv:ISystemClock", {
|
||||||
|
{0x0, SFUNC(ISystemClock::GetCurrentTime)}
|
||||||
|
}) {}
|
||||||
|
|
||||||
|
void ISystemClock::GetCurrentTime(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
||||||
|
response.Push<u64>(static_cast<u64>(std::time(nullptr)));
|
||||||
|
}
|
||||||
|
}
|
30
app/src/main/cpp/skyline/services/timesrv/ISystemClock.h
Normal file
30
app/src/main/cpp/skyline/services/timesrv/ISystemClock.h
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <services/base_service.h>
|
||||||
|
#include <services/serviceman.h>
|
||||||
|
|
||||||
|
namespace skyline::service::timesrv {
|
||||||
|
/**
|
||||||
|
* @brief The type of a #SystemClockType
|
||||||
|
*/
|
||||||
|
enum class SystemClockType {
|
||||||
|
User, //!< Use time provided by user
|
||||||
|
Network, //!< Use network time
|
||||||
|
Local, //!< Use local time
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ISystemClock is used to retrieve and set time (https://switchbrew.org/wiki/PSC_services#ISystemClock)
|
||||||
|
*/
|
||||||
|
class ISystemClock : public BaseService {
|
||||||
|
public:
|
||||||
|
const SystemClockType type; //!< The type of the system clock
|
||||||
|
|
||||||
|
ISystemClock(const SystemClockType clockType, const DeviceState &state, ServiceManager &manager);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This returns the amount of seconds since epoch
|
||||||
|
*/
|
||||||
|
void GetCurrentTime(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
|
||||||
|
};
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
#include "ITimeZoneService.h"
|
||||||
|
|
||||||
|
namespace skyline::service::timesrv {
|
||||||
|
ITimeZoneService::ITimeZoneService(const DeviceState &state, ServiceManager &manager) : BaseService(state, manager, Service::timesrv_ITimeZoneService, "timesrv:ITimeZoneService", {
|
||||||
|
{0x65, SFUNC(ITimeZoneService::ToCalendarTimeWithMyRule)}
|
||||||
|
}) {}
|
||||||
|
|
||||||
|
void ITimeZoneService::ToCalendarTimeWithMyRule(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
||||||
|
time_t curTime = std::time(nullptr);
|
||||||
|
tm calender = *std::gmtime(&curTime);
|
||||||
|
CalendarTime calendarTime{
|
||||||
|
.year = static_cast<u16>(calender.tm_year),
|
||||||
|
.month = static_cast<u8>(calender.tm_mon),
|
||||||
|
.day = static_cast<u8>(calender.tm_hour),
|
||||||
|
.minute = static_cast<u8>(calender.tm_min),
|
||||||
|
.second = static_cast<u8>(calender.tm_sec)
|
||||||
|
};
|
||||||
|
response.Push(calendarTime);
|
||||||
|
CalendarAdditionalInfo calendarInfo{
|
||||||
|
.day_week = static_cast<u32>(calender.tm_wday),
|
||||||
|
.day_month = static_cast<u32>(calender.tm_mday),
|
||||||
|
.name = *reinterpret_cast<const u64 *>(calender.tm_zone),
|
||||||
|
.dst = static_cast<i32>(calender.tm_isdst),
|
||||||
|
.utc_rel = static_cast<u32>(calender.tm_gmtoff)
|
||||||
|
};
|
||||||
|
response.Push(calendarInfo);
|
||||||
|
}
|
||||||
|
}
|
46
app/src/main/cpp/skyline/services/timesrv/ITimeZoneService.h
Normal file
46
app/src/main/cpp/skyline/services/timesrv/ITimeZoneService.h
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <services/base_service.h>
|
||||||
|
#include <services/serviceman.h>
|
||||||
|
|
||||||
|
namespace skyline::service::timesrv {
|
||||||
|
/**
|
||||||
|
* @brief ITimeZoneService is used to retrieve and set time (https://switchbrew.org/wiki/PSC_services#ITimeZoneService)
|
||||||
|
*/
|
||||||
|
class ITimeZoneService : public BaseService {
|
||||||
|
private:
|
||||||
|
/**
|
||||||
|
* @brief This holds a particular time point in calendar format
|
||||||
|
*/
|
||||||
|
struct CalendarTime {
|
||||||
|
u16 year;
|
||||||
|
u8 month;
|
||||||
|
u8 day;
|
||||||
|
u8 hour;
|
||||||
|
u8 minute;
|
||||||
|
u8 second;
|
||||||
|
u8 _pad_;
|
||||||
|
};
|
||||||
|
static_assert(sizeof(CalendarTime) == 0x8);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This is passed in addition to CalendarTime
|
||||||
|
*/
|
||||||
|
struct CalendarAdditionalInfo {
|
||||||
|
u32 day_week;
|
||||||
|
u32 day_month;
|
||||||
|
u64 name;
|
||||||
|
i32 dst;
|
||||||
|
u32 utc_rel;
|
||||||
|
};
|
||||||
|
static_assert(sizeof(CalendarAdditionalInfo) == 0x18);
|
||||||
|
|
||||||
|
public:
|
||||||
|
ITimeZoneService(const DeviceState &state, ServiceManager &manager);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This receives a u64 #PosixTime (https://switchbrew.org/wiki/PSC_services#PosixTime), and returns a #CalendarTime (https://switchbrew.org/wiki/PSC_services#CalendarTime), #CalendarAdditionalInfo (https://switchbrew.org/wiki/PSC_services#CalendarAdditionalInfo)
|
||||||
|
*/
|
||||||
|
void ToCalendarTimeWithMyRule(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user