summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Zach Hilman2019-04-10 14:05:12 -0400
committerGravatar Zach Hilman2019-07-07 21:38:33 -0400
commit669a21babb89c670746ed0a3ba89543a70f8e05e (patch)
treee5756017612c3ea21a62079b0a6d62799641dff0 /src
parentes: Implement ETicket ListCommonTicket (11) (diff)
downloadyuzu-669a21babb89c670746ed0a3ba89543a70f8e05e.tar.gz
yuzu-669a21babb89c670746ed0a3ba89543a70f8e05e.tar.xz
yuzu-669a21babb89c670746ed0a3ba89543a70f8e05e.zip
es: Implement ETicket ListPersonalizedTicket (12)
Returns an application-specific number of entries of personal 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 9a481f41f..d136566fc 100644
--- a/src/core/hle/service/es/es.cpp
+++ b/src/core/hle/service/es/es.cpp
@@ -27,7 +27,7 @@ public:
27 {9, &ETicket::CountCommonTicket, "CountCommonTicket"}, 27 {9, &ETicket::CountCommonTicket, "CountCommonTicket"},
28 {10, &ETicket::CountPersonalizedTicket, "CountPersonalizedTicket"}, 28 {10, &ETicket::CountPersonalizedTicket, "CountPersonalizedTicket"},
29 {11, &ETicket::ListCommonTicket, "ListCommonTicket"}, 29 {11, &ETicket::ListCommonTicket, "ListCommonTicket"},
30 {12, nullptr, "ListPersonalizedTicket"}, 30 {12, &ETicket::ListPersonalizedTicket, "ListPersonalizedTicket"},
31 {13, nullptr, "ListMissingPersonalizedTicket"}, 31 {13, nullptr, "ListMissingPersonalizedTicket"},
32 {14, nullptr, "GetCommonTicketSize"}, 32 {14, nullptr, "GetCommonTicketSize"},
33 {15, nullptr, "GetPersonalizedTicketSize"}, 33 {15, nullptr, "GetPersonalizedTicketSize"},
@@ -167,6 +167,29 @@ private:
167 rb.Push<u32>(out_entries); 167 rb.Push<u32>(out_entries);
168 } 168 }
169 169
170 void ListPersonalizedTicket(Kernel::HLERequestContext& ctx) {
171 u32 out_entries;
172 if (keys.GetPersonalizedTickets().empty())
173 out_entries = 0;
174 else
175 out_entries = ctx.GetWriteBufferSize() / sizeof(u128);
176
177 LOG_DEBUG(Service_ETicket, "called, entries={:016X}", out_entries);
178
179 keys.PopulateTickets();
180 const auto tickets = keys.GetPersonalizedTickets();
181 std::vector<u128> ids;
182 std::transform(tickets.begin(), tickets.end(), std::back_inserter(ids),
183 [](const auto& pair) { return pair.first; });
184
185 out_entries = std::min<u32>(ids.size(), out_entries);
186 ctx.WriteBuffer(ids.data(), out_entries * sizeof(u128));
187
188 IPC::ResponseBuilder rb{ctx, 3};
189 rb.Push(RESULT_SUCCESS);
190 rb.Push<u32>(out_entries);
191 }
192
170}; 193};
171 194
172void InstallInterfaces(SM::ServiceManager& service_manager) { 195void InstallInterfaces(SM::ServiceManager& service_manager) {