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