OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/midi/midi_manager_usb.h" | 5 #include "media/midi/midi_manager_usb.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
10 #include "media/midi/midi_scheduler.h" | 10 #include "media/midi/midi_scheduler.h" |
11 #include "media/midi/usb_midi_descriptor_parser.h" | 11 #include "media/midi/usb_midi_descriptor_parser.h" |
12 | 12 |
13 namespace media { | 13 namespace media { |
14 namespace midi { | 14 namespace midi { |
15 | 15 |
16 MidiManagerUsb::MidiManagerUsb(scoped_ptr<UsbMidiDevice::Factory> factory) | 16 MidiManagerUsb::MidiManagerUsb(scoped_ptr<UsbMidiDevice::Factory> factory) |
17 : device_factory_(factory.Pass()) { | 17 : device_factory_(factory.Pass()) { |
18 } | 18 } |
19 | 19 |
20 MidiManagerUsb::~MidiManagerUsb() { | 20 MidiManagerUsb::~MidiManagerUsb() { |
21 } | 21 } |
22 | 22 |
23 void MidiManagerUsb::StartInitialization() { | 23 void MidiManagerUsb::StartInitialization() { |
24 Initialize( | 24 Initialize( |
25 base::Bind(&MidiManager::CompleteInitialization, base::Unretained(this))); | 25 base::Bind(&MidiManager::CompleteInitialization, base::Unretained(this))); |
26 } | 26 } |
27 | 27 |
28 void MidiManagerUsb::Initialize( | 28 void MidiManagerUsb::Initialize(base::Callback<void(Result result)> callback) { |
29 base::Callback<void(MidiResult result)> callback) { | |
30 initialize_callback_ = callback; | 29 initialize_callback_ = callback; |
31 scheduler_.reset(new MidiScheduler(this)); | 30 scheduler_.reset(new MidiScheduler(this)); |
32 // This is safe because EnumerateDevices cancels the operation on destruction. | 31 // This is safe because EnumerateDevices cancels the operation on destruction. |
33 device_factory_->EnumerateDevices( | 32 device_factory_->EnumerateDevices( |
34 this, | 33 this, |
35 base::Bind(&MidiManagerUsb::OnEnumerateDevicesDone, | 34 base::Bind(&MidiManagerUsb::OnEnumerateDevicesDone, |
36 base::Unretained(this))); | 35 base::Unretained(this))); |
37 } | 36 } |
38 | 37 |
39 void MidiManagerUsb::DispatchSendMidiData(MidiManagerClient* client, | 38 void MidiManagerUsb::DispatchSendMidiData(MidiManagerClient* client, |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 const uint8* data, | 95 const uint8* data, |
97 size_t size, | 96 size_t size, |
98 base::TimeTicks time) { | 97 base::TimeTicks time) { |
99 ReceiveMidiData(static_cast<uint32>(jack_index), data, size, time); | 98 ReceiveMidiData(static_cast<uint32>(jack_index), data, size, time); |
100 } | 99 } |
101 | 100 |
102 | 101 |
103 void MidiManagerUsb::OnEnumerateDevicesDone(bool result, | 102 void MidiManagerUsb::OnEnumerateDevicesDone(bool result, |
104 UsbMidiDevice::Devices* devices) { | 103 UsbMidiDevice::Devices* devices) { |
105 if (!result) { | 104 if (!result) { |
106 initialize_callback_.Run(MIDI_INITIALIZATION_ERROR); | 105 initialize_callback_.Run(Result::INITIALIZATION_ERROR); |
107 return; | 106 return; |
108 } | 107 } |
109 input_stream_.reset(new UsbMidiInputStream(this)); | 108 input_stream_.reset(new UsbMidiInputStream(this)); |
110 devices->swap(devices_); | 109 devices->swap(devices_); |
111 for (size_t i = 0; i < devices_.size(); ++i) { | 110 for (size_t i = 0; i < devices_.size(); ++i) { |
112 if (!AddPorts(devices_[i], static_cast<int>(i))) { | 111 if (!AddPorts(devices_[i], static_cast<int>(i))) { |
113 initialize_callback_.Run(MIDI_INITIALIZATION_ERROR); | 112 initialize_callback_.Run(Result::INITIALIZATION_ERROR); |
114 return; | 113 return; |
115 } | 114 } |
116 } | 115 } |
117 initialize_callback_.Run(MIDI_OK); | 116 initialize_callback_.Run(Result::OK); |
118 } | 117 } |
119 | 118 |
120 bool MidiManagerUsb::AddPorts(UsbMidiDevice* device, int device_id) { | 119 bool MidiManagerUsb::AddPorts(UsbMidiDevice* device, int device_id) { |
121 UsbMidiDescriptorParser parser; | 120 UsbMidiDescriptorParser parser; |
122 std::vector<uint8> descriptor = device->GetDescriptors(); | 121 std::vector<uint8> descriptor = device->GetDescriptors(); |
123 const uint8* data = descriptor.size() > 0 ? &descriptor[0] : NULL; | 122 const uint8* data = descriptor.size() > 0 ? &descriptor[0] : NULL; |
124 std::vector<UsbMidiJack> jacks; | 123 std::vector<UsbMidiJack> jacks; |
125 bool parse_result = parser.Parse(device, | 124 bool parse_result = parser.Parse(device, |
126 data, | 125 data, |
127 descriptor.size(), | 126 descriptor.size(), |
(...skipping 20 matching lines...) Expand all Loading... |
148 input_stream_->Add(jacks[j]); | 147 input_stream_->Add(jacks[j]); |
149 AddInputPort(MidiPortInfo(id, manufacturer, product_name, version, | 148 AddInputPort(MidiPortInfo(id, manufacturer, product_name, version, |
150 MIDI_PORT_OPENED)); | 149 MIDI_PORT_OPENED)); |
151 } | 150 } |
152 } | 151 } |
153 return true; | 152 return true; |
154 } | 153 } |
155 | 154 |
156 } // namespace midi | 155 } // namespace midi |
157 } // namespace media | 156 } // namespace media |
OLD | NEW |