summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Zach Hilman2019-04-10 14:04:17 -0400
committerGravatar Zach Hilman2019-07-07 21:38:33 -0400
commit5d6bf75296984eb2d4c7e1486daeb306a5fefa32 (patch)
tree57ac5a24e12212a09ef06ee367d380629b350e62 /src
parentes: Implement ETicket CountPersonalizedTicket (10) (diff)
downloadyuzu-5d6bf75296984eb2d4c7e1486daeb306a5fefa32.tar.gz
yuzu-5d6bf75296984eb2d4c7e1486daeb306a5fefa32.tar.xz
yuzu-5d6bf75296984eb2d4c7e1486daeb306a5fefa32.zip
es: Implement ETicket ListCommonTicket (11)
Returns an application specified count of entries of common tickets, starting at offset 0.
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/service/es/es.cpp25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/core/hle/service/es/es.cpp b/src/core/hle/service/es/es.cpp
index 9adb39ac3..9a481f41f 100644
--- a/src/core/hle/service/es/es.cpp
+++ b/src/core/hle/service/es/es.cpp
@@ -26,7 +26,7 @@ public:
26 {8, &ETicket::GetTitleKey, "GetTitleKey"}, 26 {8, &ETicket::GetTitleKey, "GetTitleKey"},
27 {9, &ETicket::CountCommonTicket, "CountCommonTicket"}, 27 {9, &ETicket::CountCommonTicket, "CountCommonTicket"},
28 {10, &ETicket::CountPersonalizedTicket, "CountPersonalizedTicket"}, 28 {10, &ETicket::CountPersonalizedTicket, "CountPersonalizedTicket"},
29 {11, nullptr, "ListCommonTicket"}, 29 {11, &ETicket::ListCommonTicket, "ListCommonTicket"},
30 {12, nullptr, "ListPersonalizedTicket"}, 30 {12, nullptr, "ListPersonalizedTicket"},
31 {13, nullptr, "ListMissingPersonalizedTicket"}, 31 {13, nullptr, "ListMissingPersonalizedTicket"},
32 {14, nullptr, "GetCommonTicketSize"}, 32 {14, nullptr, "GetCommonTicketSize"},
@@ -144,6 +144,29 @@ private:
144 rb.Push<u32>(count); 144 rb.Push<u32>(count);
145 } 145 }
146 146
147 void ListCommonTicket(Kernel::HLERequestContext& ctx) {
148 u32 out_entries;
149 if (keys.GetCommonTickets().empty())
150 out_entries = 0;
151 else
152 out_entries = ctx.GetWriteBufferSize() / sizeof(u128);
153
154 LOG_DEBUG(Service_ETicket, "called, entries={:016X}", out_entries);
155
156 keys.PopulateTickets();
157 const auto tickets = keys.GetCommonTickets();
158 std::vector<u128> ids;
159 std::transform(tickets.begin(), tickets.end(), std::back_inserter(ids),
160 [](const auto& pair) { return pair.first; });
161
162 out_entries = std::min<u32>(ids.size(), out_entries);
163 ctx.WriteBuffer(ids.data(), out_entries * sizeof(u128));
164
165 IPC::ResponseBuilder rb{ctx, 3};
166 rb.Push(RESULT_SUCCESS);
167 rb.Push<u32>(out_entries);
168 }
169
147}; 170};
148 171
149void InstallInterfaces(SM::ServiceManager& service_manager) { 172void InstallInterfaces(SM::ServiceManager& service_manager) {