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
5#ifndef MEDIA_MIDI_USB_MIDI_DEVICE_ANDROID_H_
6#define MEDIA_MIDI_USB_MIDI_DEVICE_ANDROID_H_
7
8#include <jni.h>
9#include <vector>
10
11#include "base/android/scoped_java_ref.h"
12#include "base/basictypes.h"
13#include "base/callback.h"
14#include "media/base/media_export.h"
15#include "media/midi/usb_midi_device.h"
16
17namespace media {
18
19class MEDIA_EXPORT UsbMidiDeviceAndroid : public UsbMidiDevice {
20 public:
21  typedef base::android::ScopedJavaLocalRef<jobject> ObjectRef;
22
23  static scoped_ptr<Factory> CreateFactory();
24
25  UsbMidiDeviceAndroid(ObjectRef raw_device, UsbMidiDeviceDelegate* delegate);
26  virtual ~UsbMidiDeviceAndroid();
27
28  // UsbMidiDevice implementation.
29  virtual std::vector<uint8> GetDescriptor() OVERRIDE;
30  virtual void Send(int endpoint_number,
31                    const std::vector<uint8>& data) OVERRIDE;
32
33  // Called by the Java world.
34  void OnData(JNIEnv* env,
35              jobject caller,
36              jint endpoint_number,
37              jbyteArray data);
38
39  static bool RegisterUsbMidiDevice(JNIEnv* env);
40
41 private:
42  // The actual device object.
43  base::android::ScopedJavaGlobalRef<jobject> raw_device_;
44  UsbMidiDeviceDelegate* delegate_;
45
46  DISALLOW_IMPLICIT_CONSTRUCTORS(UsbMidiDeviceAndroid);
47};
48
49}  // namespace media
50
51#endif  // MEDIA_MIDI_USB_MIDI_DEVICE_ANDROID_H_
52