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 <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
11 #include "base/strings/stringprintf.h" | 11 #include "base/strings/stringprintf.h" |
12 #include "media/midi/midi_scheduler.h" | 12 #include "media/midi/midi_scheduler.h" |
13 #include "media/midi/usb_midi_descriptor_parser.h" | 13 #include "media/midi/usb_midi_descriptor_parser.h" |
14 | 14 |
15 namespace midi { | 15 namespace midi { |
16 | 16 |
| 17 using mojom::PortState; |
17 using mojom::Result; | 18 using mojom::Result; |
18 | 19 |
19 MidiManagerUsb::MidiManagerUsb(std::unique_ptr<UsbMidiDevice::Factory> factory) | 20 MidiManagerUsb::MidiManagerUsb(std::unique_ptr<UsbMidiDevice::Factory> factory) |
20 : device_factory_(std::move(factory)) {} | 21 : device_factory_(std::move(factory)) {} |
21 | 22 |
22 MidiManagerUsb::~MidiManagerUsb() { | 23 MidiManagerUsb::~MidiManagerUsb() { |
23 base::AutoLock auto_lock(scheduler_lock_); | 24 base::AutoLock auto_lock(scheduler_lock_); |
24 CHECK(!scheduler_); | 25 CHECK(!scheduler_); |
25 } | 26 } |
26 | 27 |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 AddPorts(devices_.back(), device_id); | 89 AddPorts(devices_.back(), device_id); |
89 } | 90 } |
90 | 91 |
91 void MidiManagerUsb::OnDeviceDetached(size_t index) { | 92 void MidiManagerUsb::OnDeviceDetached(size_t index) { |
92 if (index >= devices_.size()) { | 93 if (index >= devices_.size()) { |
93 return; | 94 return; |
94 } | 95 } |
95 UsbMidiDevice* device = devices_[index]; | 96 UsbMidiDevice* device = devices_[index]; |
96 for (size_t i = 0; i < output_streams_.size(); ++i) { | 97 for (size_t i = 0; i < output_streams_.size(); ++i) { |
97 if (output_streams_[i]->jack().device == device) { | 98 if (output_streams_[i]->jack().device == device) { |
98 SetOutputPortState(static_cast<uint32_t>(i), MIDI_PORT_DISCONNECTED); | 99 SetOutputPortState(static_cast<uint32_t>(i), PortState::DISCONNECTED); |
99 } | 100 } |
100 } | 101 } |
101 const std::vector<UsbMidiJack>& input_jacks = input_stream_->jacks(); | 102 const std::vector<UsbMidiJack>& input_jacks = input_stream_->jacks(); |
102 for (size_t i = 0; i < input_jacks.size(); ++i) { | 103 for (size_t i = 0; i < input_jacks.size(); ++i) { |
103 if (input_jacks[i].device == device) { | 104 if (input_jacks[i].device == device) { |
104 SetInputPortState(static_cast<uint32_t>(i), MIDI_PORT_DISCONNECTED); | 105 SetInputPortState(static_cast<uint32_t>(i), PortState::DISCONNECTED); |
105 } | 106 } |
106 } | 107 } |
107 } | 108 } |
108 | 109 |
109 void MidiManagerUsb::OnReceivedData(size_t jack_index, | 110 void MidiManagerUsb::OnReceivedData(size_t jack_index, |
110 const uint8_t* data, | 111 const uint8_t* data, |
111 size_t size, | 112 size_t size, |
112 base::TimeTicks time) { | 113 base::TimeTicks time) { |
113 ReceiveMidiData(static_cast<uint32_t>(jack_index), data, size, time); | 114 ReceiveMidiData(static_cast<uint32_t>(jack_index), data, size, time); |
114 } | 115 } |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 | 150 |
150 for (size_t j = 0; j < jacks.size(); ++j) { | 151 for (size_t j = 0; j < jacks.size(); ++j) { |
151 // Port ID must be unique in a MIDI manager. This ID setting is | 152 // Port ID must be unique in a MIDI manager. This ID setting is |
152 // sufficiently unique although there is no user-friendly meaning. | 153 // sufficiently unique although there is no user-friendly meaning. |
153 // TODO(yhirano): Use a hashed string as ID. | 154 // TODO(yhirano): Use a hashed string as ID. |
154 std::string id( | 155 std::string id( |
155 base::StringPrintf("usb:port-%d-%ld", device_id, static_cast<long>(j))); | 156 base::StringPrintf("usb:port-%d-%ld", device_id, static_cast<long>(j))); |
156 if (jacks[j].direction() == UsbMidiJack::DIRECTION_OUT) { | 157 if (jacks[j].direction() == UsbMidiJack::DIRECTION_OUT) { |
157 output_streams_.push_back(new UsbMidiOutputStream(jacks[j])); | 158 output_streams_.push_back(new UsbMidiOutputStream(jacks[j])); |
158 AddOutputPort(MidiPortInfo(id, manufacturer, product_name, version, | 159 AddOutputPort(MidiPortInfo(id, manufacturer, product_name, version, |
159 MIDI_PORT_OPENED)); | 160 PortState::OPENED)); |
160 } else { | 161 } else { |
161 DCHECK_EQ(jacks[j].direction(), UsbMidiJack::DIRECTION_IN); | 162 DCHECK_EQ(jacks[j].direction(), UsbMidiJack::DIRECTION_IN); |
162 input_stream_->Add(jacks[j]); | 163 input_stream_->Add(jacks[j]); |
163 AddInputPort(MidiPortInfo(id, manufacturer, product_name, version, | 164 AddInputPort(MidiPortInfo(id, manufacturer, product_name, version, |
164 MIDI_PORT_OPENED)); | 165 PortState::OPENED)); |
165 } | 166 } |
166 } | 167 } |
167 return true; | 168 return true; |
168 } | 169 } |
169 | 170 |
170 } // namespace midi | 171 } // namespace midi |
OLD | NEW |