| 450 | } |
| 451 | |
| 452 | void reset_controller(u32 gem_num) |
| 453 | { |
| 454 | if (gem_num >= CELL_GEM_MAX_NUM) |
| 455 | { |
| 456 | return; |
| 457 | } |
| 458 | |
| 459 | gem_controller& controller = ::at32(controllers, gem_num); |
| 460 | controller = {}; |
| 461 | controller.sphere_rgb = gem_color::get_default_color(gem_num); |
| 462 | |
| 463 | bool is_connected = false; |
| 464 | |
| 465 | switch (g_cfg.io.move) |
| 466 | { |
| 467 | case move_handler::real: |
| 468 | { |
| 469 | connected_controllers = 0; |
| 470 | std::lock_guard lock(pad::g_pad_mutex); |
| 471 | const auto handler = pad::get_pad_thread(); |
| 472 | for (u32 i = 0; i < std::min<u32>(attribute.max_connect, CELL_GEM_MAX_NUM); i++) |
| 473 | { |
| 474 | const auto& pad = ::at32(handler->GetPads(), pad_num(i)); |
| 475 | if (pad && pad->m_pad_handler == pad_handler::move && (pad->m_port_status & CELL_PAD_STATUS_CONNECTED)) |
| 476 | { |
| 477 | connected_controllers++; |
| 478 | |
| 479 | if (gem_num == i) |
| 480 | { |
| 481 | pad->move_data.magnetometer_enabled = controller.enabled_magnetometer; |
| 482 | is_connected = true; |
| 483 | } |
| 484 | } |
| 485 | } |
| 486 | break; |
| 487 | } |
| 488 | case move_handler::fake: |
| 489 | { |
| 490 | connected_controllers = 0; |
| 491 | std::lock_guard lock(pad::g_pad_mutex); |
| 492 | const auto handler = pad::get_pad_thread(); |
| 493 | for (u32 i = 0; i < std::min<u32>(attribute.max_connect, CELL_GEM_MAX_NUM); i++) |
| 494 | { |
| 495 | const auto& pad = ::at32(handler->GetPads(), pad_num(i)); |
| 496 | if (pad && (pad->m_port_status & CELL_PAD_STATUS_CONNECTED)) |
| 497 | { |
| 498 | connected_controllers++; |
| 499 | |
| 500 | if (gem_num == i) |
| 501 | { |
| 502 | is_connected = true; |
| 503 | } |
| 504 | } |
| 505 | } |
| 506 | break; |
| 507 | } |
| 508 | case move_handler::mouse: |
| 509 | case move_handler::raw_mouse: |
no test coverage detected