| 235 | } |
| 236 | |
| 237 | void USB::DoDeviceState(USBDevice* dev, StateWrapper& sw) |
| 238 | { |
| 239 | if (!sw.DoMarker("USBDevice")) |
| 240 | return; |
| 241 | |
| 242 | sw.Do(&dev->speed); |
| 243 | sw.Do(&dev->addr); |
| 244 | sw.Do(&dev->state); |
| 245 | sw.DoBytes(&dev->setup_buf, sizeof(dev->setup_buf)); |
| 246 | sw.DoBytes(&dev->data_buf, sizeof(dev->data_buf)); |
| 247 | sw.Do(&dev->remote_wakeup); |
| 248 | sw.Do(&dev->setup_state); |
| 249 | sw.Do(&dev->setup_len); |
| 250 | sw.Do(&dev->setup_index); |
| 251 | |
| 252 | sw.Do(&dev->configuration); |
| 253 | if (sw.IsReading()) |
| 254 | usb_desc_set_config(dev, dev->configuration); |
| 255 | |
| 256 | int altsetting[USB_MAX_INTERFACES]; |
| 257 | std::memcpy(altsetting, dev->altsetting, sizeof(altsetting)); |
| 258 | sw.DoPODArray(altsetting, std::size(altsetting)); |
| 259 | if (sw.IsReading()) |
| 260 | { |
| 261 | for (u32 i = 0; i < USB_MAX_INTERFACES; i++) |
| 262 | { |
| 263 | dev->altsetting[i] = altsetting[i]; |
| 264 | usb_desc_set_interface(dev, i, altsetting[i]); |
| 265 | } |
| 266 | } |
| 267 | |
| 268 | DoEndpointState(&dev->ep_ctl, sw); |
| 269 | for (u32 i = 0; i < USB_MAX_ENDPOINTS; i++) |
| 270 | DoEndpointState(&dev->ep_in[i], sw); |
| 271 | for (u32 i = 0; i < USB_MAX_ENDPOINTS; i++) |
| 272 | DoEndpointState(&dev->ep_out[i], sw); |
| 273 | } |
| 274 | |
| 275 | void USB::DoEndpointState(USBEndpoint* ep, StateWrapper& sw) |
| 276 | { |
nothing calls this directly
no test coverage detected