blob: ab5321319aeda54fbccb509639fda978d27cd738 [file] [log] [blame]
yhirano@chromium.org881fec42014-02-12 08:23:48 +00001// 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
5#ifndef MEDIA_MIDI_USB_MIDI_DEVICE_ANDROID_H_
6#define MEDIA_MIDI_USB_MIDI_DEVICE_ANDROID_H_
7
8#include <jni.h>
avi793390d2015-12-22 22:22:36 -08009#include <stdint.h>
danakj75afea02016-04-25 20:36:04 -070010#include <memory>
yhirano8e5f3742015-04-23 23:06:15 -070011#include <string>
yhirano@chromium.org881fec42014-02-12 08:23:48 +000012#include <vector>
13
14#include "base/android/scoped_java_ref.h"
yhirano@chromium.org881fec42014-02-12 08:23:48 +000015#include "base/callback.h"
avieea95e82015-12-18 20:27:08 -080016#include "base/macros.h"
yhirano@chromium.org881fec42014-02-12 08:23:48 +000017#include "media/midi/usb_midi_device.h"
brettw49ff0172015-05-05 12:43:04 -070018#include "media/midi/usb_midi_export.h"
yhirano@chromium.org881fec42014-02-12 08:23:48 +000019
toyoshime147c5e2015-05-07 21:58:31 -070020namespace midi {
yhirano@chromium.org881fec42014-02-12 08:23:48 +000021
brettw49ff0172015-05-05 12:43:04 -070022class USB_MIDI_EXPORT UsbMidiDeviceAndroid : public UsbMidiDevice {
yhirano@chromium.org881fec42014-02-12 08:23:48 +000023 public:
danakj75afea02016-04-25 20:36:04 -070024 static std::unique_ptr<Factory> CreateFactory();
yhirano@chromium.org881fec42014-02-12 08:23:48 +000025
tornedb299dd2015-11-25 06:17:43 -080026 UsbMidiDeviceAndroid(const base::android::JavaRef<jobject>& raw_device,
27 UsbMidiDeviceDelegate* delegate);
dcheng0e670102015-02-05 02:08:17 -080028 ~UsbMidiDeviceAndroid() override;
yhirano@chromium.org881fec42014-02-12 08:23:48 +000029
30 // UsbMidiDevice implementation.
Avi Drissman3528fd02015-12-18 20:11:31 -050031 std::vector<uint8_t> GetDescriptors() override;
yhirano8e5f3742015-04-23 23:06:15 -070032 std::string GetManufacturer() override;
33 std::string GetProductName() override;
34 std::string GetDeviceVersion() override;
Avi Drissman3528fd02015-12-18 20:11:31 -050035 void Send(int endpoint_number, const std::vector<uint8_t>& data) override;
yhirano@chromium.org881fec42014-02-12 08:23:48 +000036
yhirano@chromium.orgeb330d12014-03-27 16:14:00 +000037 // Called by the Java world.
38 void OnData(JNIEnv* env,
yhirano@chromium.orgeb330d12014-03-27 16:14:00 +000039 jint endpoint_number,
tornedb299dd2015-11-25 06:17:43 -080040 const base::android::JavaParamRef<jbyteArray>& data);
yhirano@chromium.orgeb330d12014-03-27 16:14:00 +000041
yhirano@chromium.org881fec42014-02-12 08:23:48 +000042 private:
yhirano8e5f3742015-04-23 23:06:15 -070043 void GetDescriptorsInternal();
44 void InitDeviceInfo();
Avi Drissman3528fd02015-12-18 20:11:31 -050045 std::vector<uint8_t> GetStringDescriptor(int index);
yhirano8e5f3742015-04-23 23:06:15 -070046 std::string GetString(int index, const std::string& backup);
47
yhirano@chromium.org881fec42014-02-12 08:23:48 +000048 // The actual device object.
49 base::android::ScopedJavaGlobalRef<jobject> raw_device_;
50 UsbMidiDeviceDelegate* delegate_;
51
Avi Drissman3528fd02015-12-18 20:11:31 -050052 std::vector<uint8_t> descriptors_;
yhirano8e5f3742015-04-23 23:06:15 -070053 std::string manufacturer_;
54 std::string product_;
55 std::string device_version_;
56
yhirano@chromium.org881fec42014-02-12 08:23:48 +000057 DISALLOW_IMPLICIT_CONSTRUCTORS(UsbMidiDeviceAndroid);
58};
59
toyoshime147c5e2015-05-07 21:58:31 -070060} // namespace midi
yhirano@chromium.org881fec42014-02-12 08:23:48 +000061
62#endif // MEDIA_MIDI_USB_MIDI_DEVICE_ANDROID_H_