| 562 | } |
| 563 | |
| 564 | static UpdateResult EngineUpdate(void* _engine) |
| 565 | { |
| 566 | EngineCtx* engine = (EngineCtx*)_engine; |
| 567 | const uint32_t status_buffer_size = 16 * 1024; |
| 568 | char status_buffer[16 * 1024]; |
| 569 | uint32_t status_offset = 0; |
| 570 | uint32_t connected_keyboard_count = 0; |
| 571 | uint32_t connected_gamepad_count = 0; |
| 572 | |
| 573 | dmHID::Update(engine->m_HidContext); |
| 574 | |
| 575 | dmPlatform::PollEvents(engine->m_Window); |
| 576 | |
| 577 | if (engine->m_InteractiveOutput) |
| 578 | { |
| 579 | AppendStatusLine(status_buffer, status_buffer_size, &status_offset, "HID input status\n"); |
| 580 | AppendStatusLine(status_buffer, status_buffer_size, &status_offset, "Last event: %s\n", engine->m_LastEvent); |
| 581 | AppendStatusLine(status_buffer, status_buffer_size, &status_offset, "\nKeyboards\n"); |
| 582 | } |
| 583 | |
| 584 | for (int i = 0; i < dmHID::MAX_KEYBOARD_COUNT; ++i) |
| 585 | { |
| 586 | dmHID::HKeyboard keyboard = dmHID::GetKeyboard(engine->m_HidContext, i); |
| 587 | if (!keyboard) |
| 588 | continue; |
| 589 | if (!dmHID::IsKeyboardConnected(keyboard)) |
| 590 | continue; |
| 591 | |
| 592 | dmHID::KeyboardPacket packet; |
| 593 | if (!GetKeyboardPacket(keyboard, &packet)) |
| 594 | { |
| 595 | printf("failed to get keyboard packet\n"); |
| 596 | continue; |
| 597 | } |
| 598 | |
| 599 | int packet_changed = memcmp(&packet, &engine->m_OldKeyboardPackets[i], sizeof(dmHID::KeyboardPacket)) != 0; |
| 600 | memcpy(&engine->m_OldKeyboardPackets[i], &packet, sizeof(dmHID::KeyboardPacket)); |
| 601 | |
| 602 | if (engine->m_InteractiveOutput) |
| 603 | { |
| 604 | ++connected_keyboard_count; |
| 605 | AppendKeyboardStatus(status_buffer, status_buffer_size, &status_offset, i, &packet); |
| 606 | } |
| 607 | else if (packet_changed) |
| 608 | { |
| 609 | printf("KEYBOARD %d:", i); |
| 610 | |
| 611 | bool has_pressed_keys = false; |
| 612 | for (int j = dmHID::KEY_SPACE; j < dmHID::MAX_KEY_COUNT; ++j) |
| 613 | { |
| 614 | if (GetKey(&packet, (dmHID::Key)j)) |
| 615 | { |
| 616 | printf(" KEY %s (%d)", KeyToStr((dmHID::Key)j), j); |
| 617 | has_pressed_keys = true; |
| 618 | } |
| 619 | } |
| 620 | |
| 621 | if (!has_pressed_keys) |
nothing calls this directly
no test coverage detected