MCPcopy Create free account
hub / github.com/PCSX2/pcsx2 / DoPacketState

Method DoPacketState

pcsx2/USB/USB.cpp:289–372  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

287}
288
289void USB::DoPacketState(USBPacket* p, StateWrapper& sw, const std::array<bool, 2>& valid_devices)
290{
291 if (!sw.DoMarker("USBPacket"))
292 return;
293
294 s32 dev_index = -1;
295 s32 ep_index = -1;
296 bool queued = false;
297 if (sw.IsWriting())
298 {
299 USBEndpoint* ep = p->ep;
300 if (ep)
301 {
302 for (u32 i = 0; i < NUM_PORTS; i++)
303 {
304 USBDevice* dev = s_usb_device[i];
305 if (valid_devices[i] && ep->dev == dev)
306 {
307 dev_index = static_cast<s32>(i);
308 if (ep == &dev->ep_ctl)
309 ep_index = 0;
310 else if (ep >= &dev->ep_in[0] && ep <= &dev->ep_in[USB_MAX_ENDPOINTS - 1])
311 ep_index = static_cast<s32>(ep - &dev->ep_in[0]) + 1;
312 else if (ep >= &dev->ep_out[0] && ep <= &dev->ep_out[USB_MAX_ENDPOINTS - 1])
313 ep_index = static_cast<s32>(ep - &dev->ep_out[0]) + 1 + USB_MAX_ENDPOINTS;
314
315 USBPacket* pp;
316 QTAILQ_FOREACH(pp, &ep->queue, queue)
317 {
318 if (pp == p)
319 queued = true;
320 }
321
322 break;
323 }
324 }
325 if (dev_index < 0 || ep_index < 0)
326 Console.Error("Failed to save USB packet from unknown endpoint");
327 }
328 }
329
330 sw.Do(&dev_index);
331 sw.Do(&ep_index);
332 sw.Do(&p->buffer_size);
333 sw.Do(&queued);
334
335 sw.Do(&p->pid);
336 sw.Do(&p->id);
337 sw.Do(&p->stream);
338 sw.Do(&p->parameter);
339 sw.Do(&p->short_not_ok);
340 sw.Do(&p->int_req);
341 sw.Do(&p->status);
342 sw.Do(&p->actual_length);
343 sw.Do(&p->state);
344
345 if (sw.IsReading())
346 {

Callers

nothing calls this directly

Calls 5

DoMarkerMethod · 0.80
IsWritingMethod · 0.80
IsReadingMethod · 0.80
ErrorMethod · 0.45
DoMethod · 0.45

Tested by

no test coverage detected