mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	Fixed serialization runtime exceptions
This commit is contained in:
		
							parent
							
								
									ca971ff31f
								
							
						
					
					
						commit
						e4f05884c3
					
				
					 23 changed files with 140 additions and 24 deletions
				
			
		
							
								
								
									
										19
									
								
								TODO
									
										
									
									
									
								
							
							
						
						
									
										19
									
								
								TODO
									
										
									
									
									
								
							|  | @ -3,14 +3,15 @@ | ||||||
|     ☐ Multiple slots etc. |     ☐ Multiple slots etc. | ||||||
| ☐ Custom texture cache | ☐ Custom texture cache | ||||||
| ☐ Review constructor/initialization code | ☐ Review constructor/initialization code | ||||||
| ☐ Review core timing events | ☐ Core timing events | ||||||
|  | ☐ Serialize codeset with an apploader reference instead | ||||||
| ✔ Review base class serialization everywhere @done(20-01-10 23:47) | ✔ Review base class serialization everywhere @done(20-01-10 23:47) | ||||||
|     Make sure that all base/derived relationships are registered |     Make sure that all base/derived relationships are registered | ||||||
| ☐ Serialize codeset with an apploader reference instead | ✔ Additional stuff to serialize @done(20-01-11 16:32) | ||||||
| ☐ Additional stuff to serialize |     ✔ Self-NCCH archive @done(20-01-11 16:32) | ||||||
|     ☐ Self-NCCH archive |     ✔ File backends @done(20-01-11 16:32) | ||||||
|     ☐ File backends |     ✘ Directory backends @cancelled(20-01-11 16:32) | ||||||
|     ☐ Directory backends |         Not needed for now | ||||||
|     ✔ File/directory 'services' @done(20-01-10 23:46) |     ✔ File/directory 'services' @done(20-01-10 23:46) | ||||||
| ✔ CPU @done(19-08-13 15:41) | ✔ CPU @done(19-08-13 15:41) | ||||||
| ✔ Memory @done(19-08-13 15:41) | ✔ Memory @done(19-08-13 15:41) | ||||||
|  | @ -37,10 +38,8 @@ | ||||||
|     ✔ SDMC @done(20-01-02 23:34) |     ✔ SDMC @done(20-01-02 23:34) | ||||||
|         ✔ Normal @done(20-01-02 23:34) |         ✔ Normal @done(20-01-02 23:34) | ||||||
|         ✔ Write-only @done(20-01-02 23:34) |         ✔ Write-only @done(20-01-02 23:34) | ||||||
|     ✘ IVFC @cancelled(20-01-03 13:22) |     ✔ IVFC @done(20-01-11 16:33) | ||||||
|         Seems IVFCArchive is never used.. which is good because it has a file reference! |     ✔ File refs @done(20-01-11 16:33) | ||||||
|     ✘ File refs @cancelled(20-01-03 13:22) |  | ||||||
|         Not needed as nothing serializes file buffers |  | ||||||
|     ✘ Replace delay generator with virtual fns @cancelled(20-01-03 13:16) |     ✘ Replace delay generator with virtual fns @cancelled(20-01-03 13:16) | ||||||
|         While they have no state, the extra refactoring here is unneeded |         While they have no state, the extra refactoring here is unneeded | ||||||
| ✘ MMIO @cancelled(20-01-01 01:06) | ✘ MMIO @cancelled(20-01-01 01:06) | ||||||
|  |  | ||||||
|  | @ -334,6 +334,7 @@ private: | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     BOOST_SERIALIZATION_SPLIT_MEMBER() |     BOOST_SERIALIZATION_SPLIT_MEMBER() | ||||||
|  |     friend class boost::serialization::access; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| } // namespace FileUtil
 | } // namespace FileUtil
 | ||||||
|  |  | ||||||
|  | @ -30,6 +30,7 @@ | ||||||
| // FileSys namespace
 | // FileSys namespace
 | ||||||
| 
 | 
 | ||||||
| SERIALIZE_EXPORT_IMPL(FileSys::NCCHArchive) | SERIALIZE_EXPORT_IMPL(FileSys::NCCHArchive) | ||||||
|  | SERIALIZE_EXPORT_IMPL(FileSys::NCCHFile) | ||||||
| SERIALIZE_EXPORT_IMPL(FileSys::ArchiveFactory_NCCH) | SERIALIZE_EXPORT_IMPL(FileSys::ArchiveFactory_NCCH) | ||||||
| 
 | 
 | ||||||
| namespace FileSys { | namespace FileSys { | ||||||
|  |  | ||||||
|  | @ -95,9 +95,16 @@ public: | ||||||
|     void Flush() const override {} |     void Flush() const override {} | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     NCCHFile() = default; // NOTE: If the public ctor has behaviour, need to replace this with
 |     std::vector<u8> file_buffer; | ||||||
|                           // *_construct_data
 | 
 | ||||||
|     std::vector<u8> file_buffer; // TODO: Replace with file ref for serialization
 |     NCCHFile() = default; | ||||||
|  | 
 | ||||||
|  |     template <class Archive> | ||||||
|  |     void serialize(Archive& ar, const unsigned int) { | ||||||
|  |         ar& boost::serialization::base_object<FileBackend>(*this); | ||||||
|  |         ar& file_buffer; // TODO: See about a more efficient way to do this
 | ||||||
|  |     } | ||||||
|  |     friend class boost::serialization::access; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /// File system interface to the NCCH archive
 | /// File system interface to the NCCH archive
 | ||||||
|  | @ -125,4 +132,5 @@ private: | ||||||
| } // namespace FileSys
 | } // namespace FileSys
 | ||||||
| 
 | 
 | ||||||
| BOOST_CLASS_EXPORT_KEY(FileSys::NCCHArchive) | BOOST_CLASS_EXPORT_KEY(FileSys::NCCHArchive) | ||||||
|  | BOOST_CLASS_EXPORT_KEY(FileSys::NCCHFile) | ||||||
| BOOST_CLASS_EXPORT_KEY(FileSys::ArchiveFactory_NCCH) | BOOST_CLASS_EXPORT_KEY(FileSys::ArchiveFactory_NCCH) | ||||||
|  |  | ||||||
|  | @ -77,6 +77,15 @@ public: | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     std::shared_ptr<std::vector<u8>> data; |     std::shared_ptr<std::vector<u8>> data; | ||||||
|  | 
 | ||||||
|  |     ExeFSSectionFile() = default; | ||||||
|  | 
 | ||||||
|  |     template <class Archive> | ||||||
|  |     void serialize(Archive& ar, const unsigned int) { | ||||||
|  |         ar& boost::serialization::base_object<FileBackend>(*this); | ||||||
|  |         ar& data; | ||||||
|  |     } | ||||||
|  |     friend class boost::serialization::access; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| // SelfNCCHArchive represents the running application itself. From this archive the application can
 | // SelfNCCHArchive represents the running application itself. From this archive the application can
 | ||||||
|  | @ -234,6 +243,15 @@ private: | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     NCCHData ncch_data; |     NCCHData ncch_data; | ||||||
|  | 
 | ||||||
|  |     SelfNCCHArchive() = default; | ||||||
|  | 
 | ||||||
|  |     template <class Archive> | ||||||
|  |     void serialize(Archive& ar, const unsigned int) { | ||||||
|  |         ar& boost::serialization::base_object<ArchiveBackend>(*this); | ||||||
|  |         ar& ncch_data; | ||||||
|  |     } | ||||||
|  |     friend class boost::serialization::access; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| void ArchiveFactory_SelfNCCH::Register(Loader::AppLoader& app_loader) { | void ArchiveFactory_SelfNCCH::Register(Loader::AppLoader& app_loader) { | ||||||
|  | @ -300,3 +318,6 @@ ResultVal<ArchiveFormatInfo> ArchiveFactory_SelfNCCH::GetFormatInfo(const Path&, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| } // namespace FileSys
 | } // namespace FileSys
 | ||||||
|  | 
 | ||||||
|  | SERIALIZE_EXPORT_IMPL(FileSys::ExeFSSectionFile) | ||||||
|  | SERIALIZE_EXPORT_IMPL(FileSys::SelfNCCHArchive) | ||||||
|  |  | ||||||
|  | @ -9,6 +9,8 @@ | ||||||
| #include <unordered_map> | #include <unordered_map> | ||||||
| #include <vector> | #include <vector> | ||||||
| #include <boost/serialization/export.hpp> | #include <boost/serialization/export.hpp> | ||||||
|  | #include <boost/serialization/shared_ptr.hpp> | ||||||
|  | #include <boost/serialization/vector.hpp> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "core/file_sys/archive_backend.h" | #include "core/file_sys/archive_backend.h" | ||||||
| #include "core/hle/result.h" | #include "core/hle/result.h" | ||||||
|  | @ -25,6 +27,17 @@ struct NCCHData { | ||||||
|     std::shared_ptr<std::vector<u8>> banner; |     std::shared_ptr<std::vector<u8>> banner; | ||||||
|     std::shared_ptr<RomFSReader> romfs_file; |     std::shared_ptr<RomFSReader> romfs_file; | ||||||
|     std::shared_ptr<RomFSReader> update_romfs_file; |     std::shared_ptr<RomFSReader> update_romfs_file; | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     template <class Archive> | ||||||
|  |     void serialize(Archive& ar, const unsigned int) { | ||||||
|  |         ar& icon; | ||||||
|  |         ar& logo; | ||||||
|  |         ar& banner; | ||||||
|  |         ar& romfs_file; | ||||||
|  |         ar& update_romfs_file; | ||||||
|  |     } | ||||||
|  |     friend class boost::serialization::access; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /// File system interface to the SelfNCCH archive
 | /// File system interface to the SelfNCCH archive
 | ||||||
|  | @ -55,6 +68,11 @@ private: | ||||||
|     friend class boost::serialization::access; |     friend class boost::serialization::access; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | class ExeFSSectionFile; | ||||||
|  | class SelfNCCHArchive; | ||||||
|  | 
 | ||||||
| } // namespace FileSys
 | } // namespace FileSys
 | ||||||
| 
 | 
 | ||||||
| BOOST_CLASS_EXPORT_KEY(FileSys::ArchiveFactory_SelfNCCH) | BOOST_CLASS_EXPORT_KEY(FileSys::ArchiveFactory_SelfNCCH) | ||||||
|  | BOOST_CLASS_EXPORT_KEY(FileSys::ExeFSSectionFile) | ||||||
|  | BOOST_CLASS_EXPORT_KEY(FileSys::SelfNCCHArchive) | ||||||
|  |  | ||||||
|  | @ -5,6 +5,7 @@ | ||||||
| #include <cstring> | #include <cstring> | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <utility> | #include <utility> | ||||||
|  | #include "common/archives.h" | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "common/logging/log.h" | #include "common/logging/log.h" | ||||||
| #include "core/file_sys/ivfc_archive.h" | #include "core/file_sys/ivfc_archive.h" | ||||||
|  | @ -12,6 +13,11 @@ | ||||||
| ////////////////////////////////////////////////////////////////////////////////////////////////////
 | ////////////////////////////////////////////////////////////////////////////////////////////////////
 | ||||||
| // FileSys namespace
 | // FileSys namespace
 | ||||||
| 
 | 
 | ||||||
|  | SERIALIZE_EXPORT_IMPL(FileSys::IVFCFile) | ||||||
|  | SERIALIZE_EXPORT_IMPL(FileSys::IVFCDelayGenerator) | ||||||
|  | SERIALIZE_EXPORT_IMPL(FileSys::RomFSDelayGenerator) | ||||||
|  | SERIALIZE_EXPORT_IMPL(FileSys::ExeFSDelayGenerator) | ||||||
|  | 
 | ||||||
| namespace FileSys { | namespace FileSys { | ||||||
| 
 | 
 | ||||||
| IVFCArchive::IVFCArchive(std::shared_ptr<RomFSReader> file, | IVFCArchive::IVFCArchive(std::shared_ptr<RomFSReader> file, | ||||||
|  |  | ||||||
|  | @ -8,6 +8,8 @@ | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <string> | #include <string> | ||||||
| #include <vector> | #include <vector> | ||||||
|  | #include <boost/serialization/export.hpp> | ||||||
|  | #include <boost/serialization/shared_ptr.hpp> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "common/file_util.h" | #include "common/file_util.h" | ||||||
| #include "core/file_sys/archive_backend.h" | #include "core/file_sys/archive_backend.h" | ||||||
|  | @ -38,6 +40,8 @@ class IVFCDelayGenerator : public DelayGenerator { | ||||||
|         static constexpr u64 IPCDelayNanoseconds(9438006); |         static constexpr u64 IPCDelayNanoseconds(9438006); | ||||||
|         return IPCDelayNanoseconds; |         return IPCDelayNanoseconds; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     SERIALIZE_DELAY_GENERATOR | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| class RomFSDelayGenerator : public DelayGenerator { | class RomFSDelayGenerator : public DelayGenerator { | ||||||
|  | @ -60,6 +64,8 @@ public: | ||||||
|         static constexpr u64 IPCDelayNanoseconds(9438006); |         static constexpr u64 IPCDelayNanoseconds(9438006); | ||||||
|         return IPCDelayNanoseconds; |         return IPCDelayNanoseconds; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     SERIALIZE_DELAY_GENERATOR | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| class ExeFSDelayGenerator : public DelayGenerator { | class ExeFSDelayGenerator : public DelayGenerator { | ||||||
|  | @ -82,6 +88,8 @@ public: | ||||||
|         static constexpr u64 IPCDelayNanoseconds(9438006); |         static constexpr u64 IPCDelayNanoseconds(9438006); | ||||||
|         return IPCDelayNanoseconds; |         return IPCDelayNanoseconds; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     SERIALIZE_DELAY_GENERATOR | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  | @ -128,6 +136,15 @@ public: | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     std::shared_ptr<RomFSReader> romfs_file; |     std::shared_ptr<RomFSReader> romfs_file; | ||||||
|  | 
 | ||||||
|  |     IVFCFile() = default; | ||||||
|  | 
 | ||||||
|  |     template <class Archive> | ||||||
|  |     void serialize(Archive& ar, const unsigned int) { | ||||||
|  |         ar& boost::serialization::base_object<FileBackend>(*this); | ||||||
|  |         ar& romfs_file; | ||||||
|  |     } | ||||||
|  |     friend class boost::serialization::access; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| class IVFCDirectory : public DirectoryBackend { | class IVFCDirectory : public DirectoryBackend { | ||||||
|  | @ -162,3 +179,8 @@ private: | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| } // namespace FileSys
 | } // namespace FileSys
 | ||||||
|  | 
 | ||||||
|  | BOOST_CLASS_EXPORT_KEY(FileSys::IVFCFile) | ||||||
|  | BOOST_CLASS_EXPORT_KEY(FileSys::IVFCDelayGenerator) | ||||||
|  | BOOST_CLASS_EXPORT_KEY(FileSys::RomFSDelayGenerator) | ||||||
|  | BOOST_CLASS_EXPORT_KEY(FileSys::ExeFSDelayGenerator) | ||||||
|  |  | ||||||
|  | @ -1,6 +1,7 @@ | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #include <array> | #include <array> | ||||||
|  | #include <boost/serialization/array.hpp> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "common/file_util.h" | #include "common/file_util.h" | ||||||
| 
 | 
 | ||||||
|  | @ -29,9 +30,23 @@ private: | ||||||
|     FileUtil::IOFile file; |     FileUtil::IOFile file; | ||||||
|     std::array<u8, 16> key; |     std::array<u8, 16> key; | ||||||
|     std::array<u8, 16> ctr; |     std::array<u8, 16> ctr; | ||||||
|     std::size_t file_offset; |     u64 file_offset; | ||||||
|     std::size_t crypto_offset; |     u64 crypto_offset; | ||||||
|     std::size_t data_size; |     u64 data_size; | ||||||
|  | 
 | ||||||
|  |     RomFSReader() = default; | ||||||
|  | 
 | ||||||
|  |     template <class Archive> | ||||||
|  |     void serialize(Archive& ar, const unsigned int) { | ||||||
|  |         ar& is_encrypted; | ||||||
|  |         ar& file; | ||||||
|  |         ar& key; | ||||||
|  |         ar& ctr; | ||||||
|  |         ar& file_offset; | ||||||
|  |         ar& crypto_offset; | ||||||
|  |         ar& data_size; | ||||||
|  |     } | ||||||
|  |     friend class boost::serialization::access; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| } // namespace FileSys
 | } // namespace FileSys
 | ||||||
|  |  | ||||||
|  | @ -3,10 +3,13 @@ | ||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
| 
 | 
 | ||||||
| #include <cstring> | #include <cstring> | ||||||
|  | #include "common/archives.h" | ||||||
| #include "core/hle/kernel/config_mem.h" | #include "core/hle/kernel/config_mem.h" | ||||||
| 
 | 
 | ||||||
| ////////////////////////////////////////////////////////////////////////////////////////////////////
 | ////////////////////////////////////////////////////////////////////////////////////////////////////
 | ||||||
| 
 | 
 | ||||||
|  | SERIALIZE_EXPORT_IMPL(ConfigMem::Handler) | ||||||
|  | 
 | ||||||
| namespace ConfigMem { | namespace ConfigMem { | ||||||
| 
 | 
 | ||||||
| Handler::Handler() { | Handler::Handler() { | ||||||
|  |  | ||||||
|  | @ -10,6 +10,7 @@ | ||||||
| // putting this as a subset of HLE for now.
 | // putting this as a subset of HLE for now.
 | ||||||
| 
 | 
 | ||||||
| #include <boost/serialization/binary_object.hpp> | #include <boost/serialization/binary_object.hpp> | ||||||
|  | #include <boost/serialization/export.hpp> | ||||||
| #include "common/common_funcs.h" | #include "common/common_funcs.h" | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "common/memory_ref.h" | #include "common/memory_ref.h" | ||||||
|  | @ -76,3 +77,5 @@ private: | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| } // namespace ConfigMem
 | } // namespace ConfigMem
 | ||||||
|  | 
 | ||||||
|  | BOOST_CLASS_EXPORT_KEY(ConfigMem::Handler) | ||||||
|  |  | ||||||
|  | @ -14,6 +14,8 @@ | ||||||
| 
 | 
 | ||||||
| ////////////////////////////////////////////////////////////////////////////////////////////////////
 | ////////////////////////////////////////////////////////////////////////////////////////////////////
 | ||||||
| 
 | 
 | ||||||
|  | SERIALIZE_EXPORT_IMPL(SharedPage::Handler) | ||||||
|  | 
 | ||||||
| namespace boost::serialization { | namespace boost::serialization { | ||||||
| 
 | 
 | ||||||
| template <class Archive> | template <class Archive> | ||||||
|  |  | ||||||
|  | @ -14,6 +14,7 @@ | ||||||
| #include <ctime> | #include <ctime> | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <boost/serialization/binary_object.hpp> | #include <boost/serialization/binary_object.hpp> | ||||||
|  | #include <boost/serialization/export.hpp> | ||||||
| #include "common/bit_field.h" | #include "common/bit_field.h" | ||||||
| #include "common/common_funcs.h" | #include "common/common_funcs.h" | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
|  | @ -131,3 +132,5 @@ template <class Archive> | ||||||
| void load_construct_data(Archive& ar, SharedPage::Handler* t, const unsigned int); | void load_construct_data(Archive& ar, SharedPage::Handler* t, const unsigned int); | ||||||
| 
 | 
 | ||||||
| } // namespace boost::serialization
 | } // namespace boost::serialization
 | ||||||
|  | 
 | ||||||
|  | BOOST_CLASS_EXPORT_KEY(SharedPage::Handler) | ||||||
|  |  | ||||||
|  | @ -12,6 +12,9 @@ class GSP_LCD final : public ServiceFramework<GSP_LCD> { | ||||||
| public: | public: | ||||||
|     GSP_LCD(); |     GSP_LCD(); | ||||||
|     ~GSP_LCD() = default; |     ~GSP_LCD() = default; | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     SERVICE_SERIALIZATION_SIMPLE | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| } // namespace Service::GSP
 | } // namespace Service::GSP
 | ||||||
|  |  | ||||||
|  | @ -29,7 +29,6 @@ void IR_RST::serialize(Archive& ar, const unsigned int) { | ||||||
|     // update_callback_id and input devices are set separately
 |     // update_callback_id and input devices are set separately
 | ||||||
|     ReloadInputDevices(); |     ReloadInputDevices(); | ||||||
| } | } | ||||||
| SERIALIZE_IMPL(IR_RST) |  | ||||||
| 
 | 
 | ||||||
| struct PadDataEntry { | struct PadDataEntry { | ||||||
|     PadState current_state; |     PadState current_state; | ||||||
|  |  | ||||||
|  | @ -12,6 +12,9 @@ namespace Service::IR { | ||||||
| class IR_U final : public ServiceFramework<IR_U> { | class IR_U final : public ServiceFramework<IR_U> { | ||||||
| public: | public: | ||||||
|     IR_U(); |     IR_U(); | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     SERVICE_SERIALIZATION_SIMPLE | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| } // namespace Service::IR
 | } // namespace Service::IR
 | ||||||
|  |  | ||||||
|  | @ -4,6 +4,8 @@ | ||||||
| 
 | 
 | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <boost/crc.hpp> | #include <boost/crc.hpp> | ||||||
|  | #include <boost/serialization/shared_ptr.hpp> | ||||||
|  | #include <boost/serialization/unique_ptr.hpp> | ||||||
| #include "common/string_util.h" | #include "common/string_util.h" | ||||||
| #include "common/swap.h" | #include "common/swap.h" | ||||||
| #include "core/core.h" | #include "core/core.h" | ||||||
|  | @ -13,6 +15,9 @@ | ||||||
| #include "core/hle/service/ir/extra_hid.h" | #include "core/hle/service/ir/extra_hid.h" | ||||||
| #include "core/hle/service/ir/ir_user.h" | #include "core/hle/service/ir/ir_user.h" | ||||||
| 
 | 
 | ||||||
|  | SERIALIZE_EXPORT_IMPL(Service::IR::IR_USER) | ||||||
|  | SERVICE_CONSTRUCT_IMPL(Service::IR::IR_USER) | ||||||
|  | 
 | ||||||
| namespace Service::IR { | namespace Service::IR { | ||||||
| 
 | 
 | ||||||
| template <class Archive> | template <class Archive> | ||||||
|  | @ -23,10 +28,9 @@ void IR_USER::serialize(Archive& ar, const unsigned int) { | ||||||
|     ar& receive_event; |     ar& receive_event; | ||||||
|     ar& shared_memory; |     ar& shared_memory; | ||||||
|     ar& connected_device; |     ar& connected_device; | ||||||
|     ar&* receive_buffer.get(); |     ar& receive_buffer; | ||||||
|     ar&* extra_hid.get(); |     ar&* extra_hid.get(); | ||||||
| } | } | ||||||
| SERIALIZE_IMPL(IR_USER) |  | ||||||
| 
 | 
 | ||||||
| // This is a header that will present in the ir:USER shared memory if it is initialized with
 | // This is a header that will present in the ir:USER shared memory if it is initialized with
 | ||||||
| // InitializeIrNopShared service function. Otherwise the shared memory doesn't have this header if
 | // InitializeIrNopShared service function. Otherwise the shared memory doesn't have this header if
 | ||||||
|  | @ -204,6 +208,8 @@ private: | ||||||
|     u32 max_data_size; |     u32 max_data_size; | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|  |     BufferManager() = default; | ||||||
|  | 
 | ||||||
|     template <class Archive> |     template <class Archive> | ||||||
|     void serialize(Archive& ar, const unsigned int) { |     void serialize(Archive& ar, const unsigned int) { | ||||||
|         ar& info; |         ar& info; | ||||||
|  | @ -449,6 +455,7 @@ IR_USER::IR_USER(Core::System& system) : ServiceFramework("ir:USER", 1) { | ||||||
| 
 | 
 | ||||||
|     using namespace Kernel; |     using namespace Kernel; | ||||||
| 
 | 
 | ||||||
|  |     connected_device = false; | ||||||
|     conn_status_event = system.Kernel().CreateEvent(ResetType::OneShot, "IR:ConnectionStatusEvent"); |     conn_status_event = system.Kernel().CreateEvent(ResetType::OneShot, "IR:ConnectionStatusEvent"); | ||||||
|     send_event = system.Kernel().CreateEvent(ResetType::OneShot, "IR:SendEvent"); |     send_event = system.Kernel().CreateEvent(ResetType::OneShot, "IR:SendEvent"); | ||||||
|     receive_event = system.Kernel().CreateEvent(ResetType::OneShot, "IR:ReceiveEvent"); |     receive_event = system.Kernel().CreateEvent(ResetType::OneShot, "IR:ReceiveEvent"); | ||||||
|  |  | ||||||
|  | @ -7,7 +7,6 @@ | ||||||
| #include <functional> | #include <functional> | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <vector> | #include <vector> | ||||||
| #include <boost/serialization/shared_ptr.hpp> |  | ||||||
| #include "core/hle/service/service.h" | #include "core/hle/service/service.h" | ||||||
| 
 | 
 | ||||||
| namespace Kernel { | namespace Kernel { | ||||||
|  | @ -177,3 +176,6 @@ private: | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| } // namespace Service::IR
 | } // namespace Service::IR
 | ||||||
|  | 
 | ||||||
|  | BOOST_CLASS_EXPORT_KEY(Service::IR::IR_USER) | ||||||
|  | SERVICE_CONSTRUCT(Service::IR::IR_USER) | ||||||
|  |  | ||||||
|  | @ -28,7 +28,6 @@ void MIC_U::serialize(Archive& ar, const unsigned int) { | ||||||
|     ar& boost::serialization::base_object<Kernel::SessionRequestHandler>(*this); |     ar& boost::serialization::base_object<Kernel::SessionRequestHandler>(*this); | ||||||
|     ar&* impl.get(); |     ar&* impl.get(); | ||||||
| } | } | ||||||
| SERIALIZE_IMPL(MIC_U) |  | ||||||
| 
 | 
 | ||||||
| /// Microphone audio encodings.
 | /// Microphone audio encodings.
 | ||||||
| enum class Encoding : u8 { | enum class Encoding : u8 { | ||||||
|  |  | ||||||
|  | @ -24,6 +24,9 @@ | ||||||
| #include "core/hle/service/nwm/uds_data.h" | #include "core/hle/service/nwm/uds_data.h" | ||||||
| #include "core/memory.h" | #include "core/memory.h" | ||||||
| 
 | 
 | ||||||
|  | SERIALIZE_EXPORT_IMPL(Service::NWM::NWM_UDS) | ||||||
|  | SERVICE_CONSTRUCT_IMPL(Service::NWM::NWM_UDS) | ||||||
|  | 
 | ||||||
| namespace Service::NWM { | namespace Service::NWM { | ||||||
| 
 | 
 | ||||||
| template <class Archive> | template <class Archive> | ||||||
|  | @ -34,7 +37,6 @@ void NWM_UDS::serialize(Archive& ar, const unsigned int) { | ||||||
|     ar& received_beacons; |     ar& received_beacons; | ||||||
|     // wifi_packet_received set in constructor
 |     // wifi_packet_received set in constructor
 | ||||||
| } | } | ||||||
| SERIALIZE_IMPL(NWM_UDS) |  | ||||||
| 
 | 
 | ||||||
| namespace ErrCodes { | namespace ErrCodes { | ||||||
| enum { | enum { | ||||||
|  |  | ||||||
|  | @ -557,6 +557,7 @@ private: | ||||||
| 
 | 
 | ||||||
|     template <class Archive> |     template <class Archive> | ||||||
|     void serialize(Archive& ar, const unsigned int); |     void serialize(Archive& ar, const unsigned int); | ||||||
|  |     friend class boost::serialization::access; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| } // namespace Service::NWM
 | } // namespace Service::NWM
 | ||||||
|  |  | ||||||
|  | @ -35,7 +35,6 @@ void SRV::serialize(Archive& ar, const unsigned int) { | ||||||
|     ar& notification_semaphore; |     ar& notification_semaphore; | ||||||
|     ar& get_service_handle_delayed_map; |     ar& get_service_handle_delayed_map; | ||||||
| } | } | ||||||
| SERIALIZE_IMPL(SRV) |  | ||||||
| 
 | 
 | ||||||
| constexpr int MAX_PENDING_NOTIFICATIONS = 16; | constexpr int MAX_PENDING_NOTIFICATIONS = 16; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -28,7 +28,6 @@ void Y2R_U::serialize(Archive& ar, const unsigned int) { | ||||||
|     ar& transfer_end_interrupt_enabled; |     ar& transfer_end_interrupt_enabled; | ||||||
|     ar& spacial_dithering_enabled; |     ar& spacial_dithering_enabled; | ||||||
| } | } | ||||||
| SERIALIZE_IMPL(Y2R_U) |  | ||||||
| 
 | 
 | ||||||
| static const CoefficientSet standard_coefficients[4] = { | static const CoefficientSet standard_coefficients[4] = { | ||||||
|     {{0x100, 0x166, 0xB6, 0x58, 0x1C5, -0x166F, 0x10EE, -0x1C5B}}, // ITU_Rec601
 |     {{0x100, 0x166, 0xB6, 0x58, 0x1C5, -0x166F, 0x10EE, -0x1C5B}}, // ITU_Rec601
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue