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/midi/usb_midi_export.h"
12 #include "media/midi/usb_midi_jack.h"
17 // UsbMidiOutputStream converts MIDI data to USB-MIDI data.
18 // See "USB Device Class Definition for MIDI Devices" Release 1.0,
19 // Section 4 "USB-MIDI Event Packets" for details.
20 class USB_MIDI_EXPORT UsbMidiOutputStream
{
22 explicit UsbMidiOutputStream(const UsbMidiJack
& jack
);
24 // Converts |data| to USB-MIDI data and send it to the jack.
25 void Send(const std::vector
<uint8
>& data
);
27 const UsbMidiJack
& jack() const { return jack_
; }
30 size_t GetSize(const std::vector
<uint8
>& data
) const;
31 uint8_t Get(const std::vector
<uint8
>& data
, size_t index
) const;
33 bool PushSysExMessage(const std::vector
<uint8
>& data
,
35 std::vector
<uint8
>* data_to_send
);
36 bool PushSysCommonMessage(const std::vector
<uint8
>& data
,
38 std::vector
<uint8
>* data_to_send
);
39 void PushSysRTMessage(const std::vector
<uint8
>& data
,
41 std::vector
<uint8
>* data_to_send
);
42 bool PushChannelMessage(const std::vector
<uint8
>& data
,
44 std::vector
<uint8
>* data_to_send
);
46 static const size_t kPacketContentSize
= 3;
50 uint8 pending_data_
[kPacketContentSize
];
51 bool is_sending_sysex_
;
53 DISALLOW_COPY_AND_ASSIGN(UsbMidiOutputStream
);
59 #endif // MEDIA_MIDI_USB_MIDI_OUTPUT_STREAM_H_