gamepad_data_fetcher.cc 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. // Copyright (c) 2015 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "device/gamepad/gamepad_data_fetcher.h"
  5. #include "base/bind.h"
  6. #include "base/no_destructor.h"
  7. #include "base/strings/stringprintf.h"
  8. #include "base/strings/utf_string_conversions.h"
  9. #include "base/time/time.h"
  10. namespace device {
  11. namespace {
  12. void RunCallbackOnCallbackThread(
  13. mojom::GamepadHapticsManager::PlayVibrationEffectOnceCallback callback,
  14. mojom::GamepadHapticsResult result) {
  15. std::move(callback).Run(result);
  16. }
  17. GamepadDataFetcher::HidManagerBinder& GetHidManagerBinder() {
  18. static base::NoDestructor<GamepadDataFetcher::HidManagerBinder> binder;
  19. return *binder;
  20. }
  21. } // namespace
  22. GamepadDataFetcher::GamepadDataFetcher() = default;
  23. GamepadDataFetcher::~GamepadDataFetcher() = default;
  24. // static
  25. void GamepadDataFetcher::SetHidManagerBinder(HidManagerBinder binder) {
  26. GetHidManagerBinder() = std::move(binder);
  27. }
  28. void GamepadDataFetcher::InitializeProvider(GamepadPadStateProvider* provider) {
  29. DCHECK(provider);
  30. provider_ = provider;
  31. OnAddedToProvider();
  32. }
  33. void GamepadDataFetcher::BindHidManager(
  34. mojo::PendingReceiver<mojom::HidManager> receiver) {
  35. const auto& binder = GetHidManagerBinder();
  36. if (binder)
  37. binder.Run(std::move(receiver));
  38. }
  39. void GamepadDataFetcher::PlayEffect(
  40. int source_id,
  41. mojom::GamepadHapticEffectType type,
  42. mojom::GamepadEffectParametersPtr params,
  43. mojom::GamepadHapticsManager::PlayVibrationEffectOnceCallback callback,
  44. scoped_refptr<base::SequencedTaskRunner> callback_runner) {
  45. RunVibrationCallback(std::move(callback), std::move(callback_runner),
  46. mojom::GamepadHapticsResult::GamepadHapticsResultError);
  47. }
  48. void GamepadDataFetcher::ResetVibration(
  49. int source_id,
  50. mojom::GamepadHapticsManager::ResetVibrationActuatorCallback callback,
  51. scoped_refptr<base::SequencedTaskRunner> callback_runner) {
  52. RunVibrationCallback(std::move(callback), std::move(callback_runner),
  53. mojom::GamepadHapticsResult::GamepadHapticsResultError);
  54. }
  55. bool GamepadDataFetcher::DisconnectUnrecognizedGamepad(int source_id) {
  56. return false;
  57. }
  58. // static
  59. int64_t GamepadDataFetcher::TimeInMicroseconds(base::TimeTicks update_time) {
  60. return update_time.since_origin().InMicroseconds();
  61. }
  62. // static
  63. int64_t GamepadDataFetcher::CurrentTimeInMicroseconds() {
  64. return TimeInMicroseconds(base::TimeTicks::Now());
  65. }
  66. // static
  67. void GamepadDataFetcher::UpdateGamepadStrings(const std::string& product_name,
  68. uint16_t vendor_id,
  69. uint16_t product_id,
  70. bool has_standard_mapping,
  71. Gamepad& pad) {
  72. // The ID contains the device name, vendor and product IDs,
  73. // and an indication of whether the standard mapping is in use.
  74. std::string id = base::StringPrintf(
  75. "%s (%sVendor: %04x Product: %04x)", product_name.c_str(),
  76. has_standard_mapping ? "STANDARD GAMEPAD " : "", vendor_id, product_id);
  77. pad.SetID(base::UTF8ToUTF16(id));
  78. // Set GamepadMapping::kStandard if the gamepad has a standard mapping, or
  79. // GamepadMapping::kNone otherwise.
  80. pad.mapping =
  81. has_standard_mapping ? GamepadMapping::kStandard : GamepadMapping::kNone;
  82. }
  83. // static
  84. void GamepadDataFetcher::RunVibrationCallback(
  85. base::OnceCallback<void(mojom::GamepadHapticsResult)> callback,
  86. scoped_refptr<base::SequencedTaskRunner> callback_runner,
  87. mojom::GamepadHapticsResult result) {
  88. callback_runner->PostTask(FROM_HERE,
  89. base::BindOnce(&RunCallbackOnCallbackThread,
  90. std::move(callback), result));
  91. }
  92. GamepadDataFetcherFactory::GamepadDataFetcherFactory() = default;
  93. } // namespace device