UDS: implement GetApplicationData (#5533)
This commit is contained in:
parent
664f5da105
commit
6f45b402e7
|
@ -1275,6 +1275,25 @@ void NWM_UDS::SetApplicationData(Kernel::HLERequestContext& ctx) {
|
|||
rb.Push(RESULT_SUCCESS);
|
||||
}
|
||||
|
||||
void NWM_UDS::GetApplicationData(Kernel::HLERequestContext& ctx) {
|
||||
IPC::RequestParser rp(ctx, 0x11, 1, 0);
|
||||
u32 input_size = rp.Pop<u32>();
|
||||
u8 appdata_size = network_info.application_data_size;
|
||||
|
||||
IPC::RequestBuilder rb = rp.MakeBuilder(2, 2);
|
||||
rb.Push(RESULT_SUCCESS);
|
||||
|
||||
if (input_size < appdata_size) {
|
||||
rb.Push(0);
|
||||
return;
|
||||
}
|
||||
|
||||
rb.Push(appdata_size);
|
||||
std::vector<u8> appdata(appdata_size);
|
||||
std::memcpy(appdata.data(), network_info.application_data.data(), appdata_size);
|
||||
rb.PushStaticBuffer(std::move(appdata), 0);
|
||||
}
|
||||
|
||||
void NWM_UDS::DecryptBeaconData(Kernel::HLERequestContext& ctx, u16 command_id) {
|
||||
IPC::RequestParser rp(ctx, command_id, 0, 6);
|
||||
|
||||
|
@ -1386,7 +1405,7 @@ NWM_UDS::NWM_UDS(Core::System& system) : ServiceFramework("nwm::UDS"), system(sy
|
|||
{0x000E0006, &NWM_UDS::DecryptBeaconData<0x0E>, "DecryptBeaconData (deprecated)"},
|
||||
{0x000F0404, &NWM_UDS::RecvBeaconBroadcastData, "RecvBeaconBroadcastData"},
|
||||
{0x00100042, &NWM_UDS::SetApplicationData, "SetApplicationData"},
|
||||
{0x00110040, nullptr, "GetApplicationData"},
|
||||
{0x00110040, &NWM_UDS::GetApplicationData, "GetApplicationData"},
|
||||
{0x00120100, &NWM_UDS::Bind, "Bind"},
|
||||
{0x00130040, &NWM_UDS::Unbind, "Unbind"},
|
||||
{0x001400C0, &NWM_UDS::PullPacket, "PullPacket"},
|
||||
|
|
|
@ -229,6 +229,18 @@ private:
|
|||
*/
|
||||
void SetApplicationData(Kernel::HLERequestContext& ctx);
|
||||
|
||||
/**
|
||||
* NWM_UDS::GetApplicationData service function.
|
||||
* Loads the application data from the current beacon.
|
||||
* Inputs:
|
||||
* 1 : Data size.
|
||||
* Outputs:
|
||||
* 0 : Return header
|
||||
* 1 : Result of function, always 0
|
||||
* 2 : Actual data size
|
||||
*/
|
||||
void GetApplicationData(Kernel::HLERequestContext& ctx);
|
||||
|
||||
/**
|
||||
* NWM_UDS::Bind service function.
|
||||
* Binds a BindNodeId to a data channel and retrieves a data event.
|
||||
|
|
Reference in New Issue