diff --git a/TODO b/TODO index 4a07c0608..5a483dc84 100644 --- a/TODO +++ b/TODO @@ -77,7 +77,7 @@ ✔ DLP @done(19-12-26 18:02) ✔ DSP @done(19-12-26 18:10) ✔ ERR @done(19-12-26 18:14) - ☐ FRD + ✔ FRD @done(19-12-26 19:09) ☐ FS ☐ GSP ☐ HID diff --git a/src/core/hle/service/frd/frd.h b/src/core/hle/service/frd/frd.h index 200b51ebe..46dc96cad 100644 --- a/src/core/hle/service/frd/frd.h +++ b/src/core/hle/service/frd/frd.h @@ -18,10 +18,28 @@ struct FriendKey { u32 friend_id; u32 unknown; u64 friend_code; + +private: + template + void serialize(Archive& ar, const unsigned int) + { + ar & friend_id; + ar & unknown; + ar & friend_code; + } + friend class boost::serialization::access; }; struct MyPresence { u8 unknown[0x12C]; + +private: + template + void serialize(Archive& ar, const unsigned int) + { + ar & unknown; + } + friend class boost::serialization::access; }; struct Profile { @@ -130,13 +148,21 @@ public: */ void SetClientSdkVersion(Kernel::HLERequestContext& ctx); - private: + protected: std::shared_ptr frd; }; private: FriendKey my_friend_key = {0, 0, 0ull}; MyPresence my_presence = {}; + + template + void serialize(Archive& ar, const unsigned int) + { + ar & my_friend_key; + ar & my_presence; + } + friend class boost::serialization::access; }; void InstallInterfaces(Core::System& system); diff --git a/src/core/hle/service/frd/frd_a.cpp b/src/core/hle/service/frd/frd_a.cpp index c68689cc0..6248891af 100644 --- a/src/core/hle/service/frd/frd_a.cpp +++ b/src/core/hle/service/frd/frd_a.cpp @@ -3,6 +3,9 @@ // Refer to the license.txt file included. #include "core/hle/service/frd/frd_a.h" +#include "common/archives.h" + +SERIALIZE_EXPORT_IMPL(Service::FRD::FRD_A) namespace Service::FRD { diff --git a/src/core/hle/service/frd/frd_a.h b/src/core/hle/service/frd/frd_a.h index 97657a072..133d40dc1 100644 --- a/src/core/hle/service/frd/frd_a.h +++ b/src/core/hle/service/frd/frd_a.h @@ -11,6 +11,11 @@ namespace Service::FRD { class FRD_A final : public Module::Interface { public: explicit FRD_A(std::shared_ptr frd); +private: + SERVICE_SERIALIZATION(FRD_A, frd, Module) }; } // namespace Service::FRD + +BOOST_CLASS_EXPORT_KEY(Service::FRD::FRD_A) +BOOST_SERIALIZATION_CONSTRUCT(Service::FRD::FRD_A) diff --git a/src/core/hle/service/frd/frd_u.cpp b/src/core/hle/service/frd/frd_u.cpp index 2cbc64243..ba499dd2b 100644 --- a/src/core/hle/service/frd/frd_u.cpp +++ b/src/core/hle/service/frd/frd_u.cpp @@ -3,6 +3,9 @@ // Refer to the license.txt file included. #include "core/hle/service/frd/frd_u.h" +#include "common/archives.h" + +SERIALIZE_EXPORT_IMPL(Service::FRD::FRD_U) namespace Service::FRD { diff --git a/src/core/hle/service/frd/frd_u.h b/src/core/hle/service/frd/frd_u.h index 5704d5e11..281334f51 100644 --- a/src/core/hle/service/frd/frd_u.h +++ b/src/core/hle/service/frd/frd_u.h @@ -11,6 +11,11 @@ namespace Service::FRD { class FRD_U final : public Module::Interface { public: explicit FRD_U(std::shared_ptr frd); +private: + SERVICE_SERIALIZATION(FRD_U, frd, Module) }; } // namespace Service::FRD + +BOOST_CLASS_EXPORT_KEY(Service::FRD::FRD_U) +BOOST_SERIALIZATION_CONSTRUCT(Service::FRD::FRD_U)