| 236 | } |
| 237 | |
| 238 | Result DSP_ReadPipeIfPossible(u32 channel, u32 peer, void* buffer, u16 length, u16* length_read) |
| 239 | { |
| 240 | Result ret = 0; |
| 241 | u32* cmdbuf = getThreadCommandBuffer(); |
| 242 | cmdbuf[0] = IPC_MakeHeader(0x10,3,0); |
| 243 | cmdbuf[1] = channel; |
| 244 | cmdbuf[2] = peer; |
| 245 | cmdbuf[3] = length; |
| 246 | |
| 247 | u32 * staticbufs = getThreadStaticBuffers(); |
| 248 | |
| 249 | u32 saved1 = staticbufs[0]; |
| 250 | u32 saved2 = staticbufs[1]; |
| 251 | |
| 252 | staticbufs[0] = IPC_Desc_StaticBuffer(length,0); |
| 253 | staticbufs[1] = (u32)buffer; |
| 254 | |
| 255 | ret = svcSendSyncRequest(dspHandle); |
| 256 | |
| 257 | staticbufs[0] = saved1; |
| 258 | staticbufs[1] = saved2; |
| 259 | |
| 260 | if (R_FAILED(ret)) return ret; |
| 261 | |
| 262 | if (length_read) |
| 263 | *length_read = cmdbuf[2] & 0xFFFF; |
| 264 | return cmdbuf[1]; |
| 265 | } |
| 266 | |
| 267 | Result DSP_WriteProcessPipe(u32 channel, const void* buffer, u32 length) |
| 268 | { |
no test coverage detected