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.
5 #ifndef MEDIA_MIDI_USB_MIDI_OUTPUT_STREAM_H_
6 #define MEDIA_MIDI_USB_MIDI_OUTPUT_STREAM_H_
10 #include "base/basictypes.h"
11 #include "media/base/media_export.h"
12 #include "media/midi/usb_midi_jack.h"
16 // UsbMidiOutputStream converts MIDI data to USB-MIDI data.
17 // See "USB Device Class Definition for MIDI Devices" Release 1.0,
18 // Section 4 "USB-MIDI Event Packets" for details.
19 class MEDIA_EXPORT UsbMidiOutputStream
{
21 explicit UsbMidiOutputStream(const UsbMidiJack
& jack
);
23 // Converts |data| to USB-MIDI data and send it to the jack.
24 void Send(const std::vector
<uint8
>& data
);
26 const UsbMidiJack
& jack() const { return jack_
; }
29 size_t GetSize(const std::vector
<uint8
>& data
) const;
30 uint8_t Get(const std::vector
<uint8
>& data
, size_t index
) const;
32 bool PushSysExMessage(const std::vector
<uint8
>& data
,
34 std::vector
<uint8
>* data_to_send
);
35 bool PushSysCommonMessage(const std::vector
<uint8
>& data
,
37 std::vector
<uint8
>* data_to_send
);
38 void PushSysRTMessage(const std::vector
<uint8
>& data
,
40 std::vector
<uint8
>* data_to_send
);
41 bool PushChannelMessage(const std::vector
<uint8
>& data
,
43 std::vector
<uint8
>* data_to_send
);
45 static const size_t kPacketContentSize
= 3;
49 uint8 pending_data_
[kPacketContentSize
];
50 bool is_sending_sysex_
;
52 DISALLOW_COPY_AND_ASSIGN(UsbMidiOutputStream
);
57 #endif // MEDIA_MIDI_USB_MIDI_OUTPUT_STREAM_H_