Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / media / midi / usb_midi_output_stream.h
blob6fc71716d66f20fdf11470a801b7e17925d3ebd3
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_
8 #include <vector>
10 #include "base/basictypes.h"
11 #include "media/midi/usb_midi_export.h"
12 #include "media/midi/usb_midi_jack.h"
14 namespace media {
15 namespace midi {
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 {
21 public:
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_; }
29 private:
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,
34 size_t* current,
35 std::vector<uint8>* data_to_send);
36 bool PushSysCommonMessage(const std::vector<uint8>& data,
37 size_t* current,
38 std::vector<uint8>* data_to_send);
39 void PushSysRTMessage(const std::vector<uint8>& data,
40 size_t* current,
41 std::vector<uint8>* data_to_send);
42 bool PushChannelMessage(const std::vector<uint8>& data,
43 size_t* current,
44 std::vector<uint8>* data_to_send);
46 static const size_t kPacketContentSize = 3;
48 UsbMidiJack jack_;
49 size_t pending_size_;
50 uint8 pending_data_[kPacketContentSize];
51 bool is_sending_sysex_;
53 DISALLOW_COPY_AND_ASSIGN(UsbMidiOutputStream);
56 } // namespace midi
57 } // namespace media
59 #endif // MEDIA_MIDI_USB_MIDI_OUTPUT_STREAM_H_