summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorGravatar german772023-09-10 20:43:26 -0600
committerGravatar german772023-09-10 20:43:26 -0600
commit0cdc8b13b743e4d7256d9337c7f01296cb98b7bd (patch)
tree7ac4cd88f9d0d43f3e832939ba6fad8733d13815 /src/core
parentMerge pull request #11450 from lat9nq/no-vk-device-fix (diff)
downloadyuzu-0cdc8b13b743e4d7256d9337c7f01296cb98b7bd.tar.gz
yuzu-0cdc8b13b743e4d7256d9337c7f01296cb98b7bd.tar.xz
yuzu-0cdc8b13b743e4d7256d9337c7f01296cb98b7bd.zip
service: mii: Add mii util and result
Diffstat (limited to 'src/core')
-rw-r--r--src/core/CMakeLists.txt2
-rw-r--r--src/core/hle/service/mii/mii.cpp11
-rw-r--r--src/core/hle/service/mii/mii_manager.cpp9
-rw-r--r--src/core/hle/service/mii/mii_result.h20
-rw-r--r--src/core/hle/service/mii/mii_util.h58
5 files changed, 89 insertions, 11 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 012648d69..e9095ac52 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -588,6 +588,8 @@ add_library(core STATIC
588 hle/service/mii/mii.h 588 hle/service/mii/mii.h
589 hle/service/mii/mii_manager.cpp 589 hle/service/mii/mii_manager.cpp
590 hle/service/mii/mii_manager.h 590 hle/service/mii/mii_manager.h
591 hle/service/mii/mii_result.h
592 hle/service/mii/mii_util.h
591 hle/service/mii/raw_data.cpp 593 hle/service/mii/raw_data.cpp
592 hle/service/mii/raw_data.h 594 hle/service/mii/raw_data.h
593 hle/service/mii/types.h 595 hle/service/mii/types.h
diff --git a/src/core/hle/service/mii/mii.cpp b/src/core/hle/service/mii/mii.cpp
index 65c11a2f3..bf3ee5907 100644
--- a/src/core/hle/service/mii/mii.cpp
+++ b/src/core/hle/service/mii/mii.cpp
@@ -7,13 +7,12 @@
7#include "core/hle/service/ipc_helpers.h" 7#include "core/hle/service/ipc_helpers.h"
8#include "core/hle/service/mii/mii.h" 8#include "core/hle/service/mii/mii.h"
9#include "core/hle/service/mii/mii_manager.h" 9#include "core/hle/service/mii/mii_manager.h"
10#include "core/hle/service/mii/mii_result.h"
10#include "core/hle/service/server_manager.h" 11#include "core/hle/service/server_manager.h"
11#include "core/hle/service/service.h" 12#include "core/hle/service/service.h"
12 13
13namespace Service::Mii { 14namespace Service::Mii {
14 15
15constexpr Result ERROR_INVALID_ARGUMENT{ErrorModule::Mii, 1};
16
17class IDatabaseService final : public ServiceFramework<IDatabaseService> { 16class IDatabaseService final : public ServiceFramework<IDatabaseService> {
18public: 17public:
19 explicit IDatabaseService(Core::System& system_) 18 explicit IDatabaseService(Core::System& system_)
@@ -162,21 +161,21 @@ private:
162 161
163 if (age > Age::All) { 162 if (age > Age::All) {
164 IPC::ResponseBuilder rb{ctx, 2}; 163 IPC::ResponseBuilder rb{ctx, 2};
165 rb.Push(ERROR_INVALID_ARGUMENT); 164 rb.Push(ResultInvalidArgument);
166 LOG_ERROR(Service_Mii, "invalid age={}", age); 165 LOG_ERROR(Service_Mii, "invalid age={}", age);
167 return; 166 return;
168 } 167 }
169 168
170 if (gender > Gender::All) { 169 if (gender > Gender::All) {
171 IPC::ResponseBuilder rb{ctx, 2}; 170 IPC::ResponseBuilder rb{ctx, 2};
172 rb.Push(ERROR_INVALID_ARGUMENT); 171 rb.Push(ResultInvalidArgument);
173 LOG_ERROR(Service_Mii, "invalid gender={}", gender); 172 LOG_ERROR(Service_Mii, "invalid gender={}", gender);
174 return; 173 return;
175 } 174 }
176 175
177 if (race > Race::All) { 176 if (race > Race::All) {
178 IPC::ResponseBuilder rb{ctx, 2}; 177 IPC::ResponseBuilder rb{ctx, 2};
179 rb.Push(ERROR_INVALID_ARGUMENT); 178 rb.Push(ResultInvalidArgument);
180 LOG_ERROR(Service_Mii, "invalid race={}", race); 179 LOG_ERROR(Service_Mii, "invalid race={}", race);
181 return; 180 return;
182 } 181 }
@@ -196,7 +195,7 @@ private:
196 LOG_ERROR(Service_Mii, "invalid argument, index cannot be greater than 5 but is {:08X}", 195 LOG_ERROR(Service_Mii, "invalid argument, index cannot be greater than 5 but is {:08X}",
197 index); 196 index);
198 IPC::ResponseBuilder rb{ctx, 2}; 197 IPC::ResponseBuilder rb{ctx, 2};
199 rb.Push(ERROR_INVALID_ARGUMENT); 198 rb.Push(ResultInvalidArgument);
200 return; 199 return;
201 } 200 }
202 201
diff --git a/src/core/hle/service/mii/mii_manager.cpp b/src/core/hle/service/mii/mii_manager.cpp
index dd632df50..392aa78da 100644
--- a/src/core/hle/service/mii/mii_manager.cpp
+++ b/src/core/hle/service/mii/mii_manager.cpp
@@ -10,14 +10,13 @@
10 10
11#include "core/hle/service/acc/profile_manager.h" 11#include "core/hle/service/acc/profile_manager.h"
12#include "core/hle/service/mii/mii_manager.h" 12#include "core/hle/service/mii/mii_manager.h"
13#include "core/hle/service/mii/mii_result.h"
13#include "core/hle/service/mii/raw_data.h" 14#include "core/hle/service/mii/raw_data.h"
14 15
15namespace Service::Mii { 16namespace Service::Mii {
16 17
17namespace { 18namespace {
18 19
19constexpr Result ERROR_CANNOT_FIND_ENTRY{ErrorModule::Mii, 4};
20
21constexpr std::size_t DefaultMiiCount{RawData::DefaultMii.size()}; 20constexpr std::size_t DefaultMiiCount{RawData::DefaultMii.size()};
22 21
23constexpr MiiStoreData::Name DefaultMiiName{u'n', u'o', u' ', u'n', u'a', u'm', u'e'}; 22constexpr MiiStoreData::Name DefaultMiiName{u'n', u'o', u' ', u'n', u'a', u'm', u'e'};
@@ -410,11 +409,11 @@ u32 MiiManager::GetCount(SourceFlag source_flag) const {
410 409
411Result MiiManager::UpdateLatest(CharInfo* out_info, const CharInfo& info, SourceFlag source_flag) { 410Result MiiManager::UpdateLatest(CharInfo* out_info, const CharInfo& info, SourceFlag source_flag) {
412 if ((source_flag & SourceFlag::Database) == SourceFlag::None) { 411 if ((source_flag & SourceFlag::Database) == SourceFlag::None) {
413 return ERROR_CANNOT_FIND_ENTRY; 412 return ResultNotFound;
414 } 413 }
415 414
416 // TODO(bunnei): We don't implement the Mii database, so we can't have an entry 415 // TODO(bunnei): We don't implement the Mii database, so we can't have an entry
417 return ERROR_CANNOT_FIND_ENTRY; 416 return ResultNotFound;
418} 417}
419 418
420CharInfo MiiManager::BuildRandom(Age age, Gender gender, Race race) { 419CharInfo MiiManager::BuildRandom(Age age, Gender gender, Race race) {
@@ -695,7 +694,7 @@ Result MiiManager::GetIndex([[maybe_unused]] const CharInfo& info, u32& index) {
695 index = INVALID_INDEX; 694 index = INVALID_INDEX;
696 695
697 // TODO(bunnei): We don't implement the Mii database, so we can't have an index 696 // TODO(bunnei): We don't implement the Mii database, so we can't have an index
698 return ERROR_CANNOT_FIND_ENTRY; 697 return ResultNotFound;
699} 698}
700 699
701} // namespace Service::Mii 700} // namespace Service::Mii
diff --git a/src/core/hle/service/mii/mii_result.h b/src/core/hle/service/mii/mii_result.h
new file mode 100644
index 000000000..021cb76da
--- /dev/null
+++ b/src/core/hle/service/mii/mii_result.h
@@ -0,0 +1,20 @@
1// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6#include "core/hle/result.h"
7
8namespace Service::Mii {
9
10constexpr Result ResultInvalidArgument{ErrorModule::Mii, 1};
11constexpr Result ResultInvalidArgumentSize{ErrorModule::Mii, 2};
12constexpr Result ResultNotUpdated{ErrorModule::Mii, 3};
13constexpr Result ResultNotFound{ErrorModule::Mii, 4};
14constexpr Result ResultDatabaseFull{ErrorModule::Mii, 5};
15constexpr Result ResultInvalidCharInfo{ErrorModule::Mii, 100};
16constexpr Result ResultInvalidStoreData{ErrorModule::Mii, 109};
17constexpr Result ResultInvalidOperation{ErrorModule::Mii, 202};
18constexpr Result ResultPermissionDenied{ErrorModule::Mii, 203};
19
20}; // namespace Service::Mii
diff --git a/src/core/hle/service/mii/mii_util.h b/src/core/hle/service/mii/mii_util.h
new file mode 100644
index 000000000..5eb6df317
--- /dev/null
+++ b/src/core/hle/service/mii/mii_util.h
@@ -0,0 +1,58 @@
1// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6#include <random>
7
8#include "common/common_types.h"
9#include "common/swap.h"
10#include "common/uuid.h"
11#include "core/hle/service/mii/mii_types.h"
12
13namespace Service::Mii {
14class MiiUtil {
15public:
16 static u16 CalculateCrc16(const void* data, std::size_t size) {
17 s32 crc{};
18 for (std::size_t i = 0; i < size; i++) {
19 crc ^= static_cast<const u8*>(data)[i] << 8;
20 for (std::size_t j = 0; j < 8; j++) {
21 crc <<= 1;
22 if ((crc & 0x10000) != 0) {
23 crc = (crc ^ 0x1021) & 0xFFFF;
24 }
25 }
26 }
27 return Common::swap16(static_cast<u16>(crc));
28 }
29
30 static Common::UUID MakeCreateId() {
31 return Common::UUID::MakeRandomRFC4122V4();
32 }
33
34 static Common::UUID GetDeviceId() {
35 // This should be nn::settings::detail::GetMiiAuthorId()
36 return Common::UUID::MakeDefault();
37 }
38
39 template <typename T>
40 static T GetRandomValue(T min, T max) {
41 std::random_device device;
42 std::mt19937 gen(device());
43 std::uniform_int_distribution<u64> distribution(static_cast<u64>(min),
44 static_cast<u64>(max));
45 return static_cast<T>(distribution(gen));
46 }
47
48 template <typename T>
49 static T GetRandomValue(T max) {
50 return GetRandomValue<T>({}, max);
51 }
52
53 static bool IsFontRegionValid(FontRegion font, std::span<const char16_t> text) {
54 // Todo:: This function needs to check against the font tables
55 return true;
56 }
57};
58} // namespace Service::Mii