usb_midi_device_android.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // Copyright 2014 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. #ifndef MEDIA_MIDI_USB_MIDI_DEVICE_ANDROID_H_
  5. #define MEDIA_MIDI_USB_MIDI_DEVICE_ANDROID_H_
  6. #include <jni.h>
  7. #include <stdint.h>
  8. #include <memory>
  9. #include <string>
  10. #include <vector>
  11. #include "base/android/scoped_java_ref.h"
  12. #include "base/callback.h"
  13. #include "base/memory/raw_ptr.h"
  14. #include "media/midi/usb_midi_device.h"
  15. #include "media/midi/usb_midi_export.h"
  16. namespace midi {
  17. class USB_MIDI_EXPORT UsbMidiDeviceAndroid : public UsbMidiDevice {
  18. public:
  19. static std::unique_ptr<Factory> CreateFactory();
  20. UsbMidiDeviceAndroid() = delete;
  21. UsbMidiDeviceAndroid(const base::android::JavaRef<jobject>& raw_device,
  22. UsbMidiDeviceDelegate* delegate);
  23. UsbMidiDeviceAndroid(const UsbMidiDeviceAndroid&) = delete;
  24. UsbMidiDeviceAndroid& operator=(const UsbMidiDeviceAndroid&) = delete;
  25. ~UsbMidiDeviceAndroid() override;
  26. // UsbMidiDevice implementation.
  27. std::vector<uint8_t> GetDescriptors() override;
  28. std::string GetManufacturer() override;
  29. std::string GetProductName() override;
  30. std::string GetDeviceVersion() override;
  31. void Send(int endpoint_number, const std::vector<uint8_t>& data) override;
  32. // Called by the Java world.
  33. void OnData(JNIEnv* env,
  34. jint endpoint_number,
  35. const base::android::JavaParamRef<jbyteArray>& data);
  36. private:
  37. void GetDescriptorsInternal();
  38. void InitDeviceInfo();
  39. std::vector<uint8_t> GetStringDescriptor(int index);
  40. std::string GetString(int index, const std::string& backup);
  41. // The actual device object.
  42. base::android::ScopedJavaGlobalRef<jobject> raw_device_;
  43. raw_ptr<UsbMidiDeviceDelegate> delegate_;
  44. std::vector<uint8_t> descriptors_;
  45. std::string manufacturer_;
  46. std::string product_;
  47. std::string device_version_;
  48. };
  49. } // namespace midi
  50. #endif // MEDIA_MIDI_USB_MIDI_DEVICE_ANDROID_H_