| 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 |