(&mut self, app: &mut S, event: JoyConEvent)
| 541 | raw_report: raw_dump_enabled() |
| 542 | .then(|| RawJoyConReport::new(data)) |
| 543 | .flatten(), |
| 544 | }); |
| 545 | } |
| 546 | } |
| 547 | _ => {} |
| 548 | } |
| 549 | } |
| 550 | } |
| 551 | } |
| 552 | |
| 553 | let _ = tx.send(JoyConEvent::Disconnected { index }); |
| 554 | let _ = tx.send(JoyConEvent::HidWorkerStopped { |
| 555 | key: slot_key_thread, |
| 556 | index, |
| 557 | token, |
| 558 | }); |
| 559 | }); |
| 560 | |
| 561 | self.devices |
| 562 | .insert(slot_key.clone(), DeviceHandle { stop, token }); |
| 563 | self.output_txs.insert(slot_key, cmd_tx); |
| 564 | } |
| 565 | |
| 566 | fn drain_events<S: JoyConSink>(&mut self, app: &mut S) { |
| 567 | let Some(rx) = self.rx.take() else { |
| 568 | return; |
| 569 | }; |
| 570 | |
| 571 | for _ in 0..MAX_JOYCON_EVENTS_PER_FRAME { |
| 572 | let Ok(event) = rx.try_recv() else { |
| 573 | break; |
| 574 | }; |
| 575 | self.handle_event(app, event); |
| 576 | } |
| 577 | |
| 578 | self.rx = Some(rx); |
| 579 | } |
| 580 | |
| 581 | fn handle_event<S: JoyConSink>(&mut self, app: &mut S, event: JoyConEvent) { |
| 582 | match event { |
| 583 | JoyConEvent::OutputReady { key, tx } => { |
| 584 | self.output_txs.insert(key, tx); |
| 585 | } |
| 586 | JoyConEvent::Connected { |
| 587 | index, |
| 588 | side, |
| 589 | generation, |
| 590 | serial, |
| 591 | device_key, |
no test coverage detected