diff options
| author | 2019-04-10 14:04:17 -0400 | |
|---|---|---|
| committer | 2019-07-07 21:38:33 -0400 | |
| commit | 5d6bf75296984eb2d4c7e1486daeb306a5fefa32 (patch) | |
| tree | 57ac5a24e12212a09ef06ee367d380629b350e62 /src | |
| parent | es: Implement ETicket CountPersonalizedTicket (10) (diff) | |
| download | yuzu-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.cpp | 25 |
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 | ||
| 149 | void InstallInterfaces(SM::ServiceManager& service_manager) { | 172 | void InstallInterfaces(SM::ServiceManager& service_manager) { |