diff options
author | yhirano <yhirano@chromium.org> | 2015-02-25 07:32:38 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-02-25 15:33:25 +0000 |
commit | 34d00754b9a79bcec3099737c851a07c3cfaa7fd (patch) | |
tree | 11a8311c359896e2752d8be6a01db01ff24d1a68 /media | |
parent | 1075b2d37b3433f43f86ac09c74afd230e3e2abb (diff) | |
download | chromium_src-34d00754b9a79bcec3099737c851a07c3cfaa7fd.zip chromium_src-34d00754b9a79bcec3099737c851a07c3cfaa7fd.tar.gz chromium_src-34d00754b9a79bcec3099737c851a07c3cfaa7fd.tar.bz2 |
MidiManagerUsb should be able to accept multiple devices.
This CL fixes MidiManagerUsb's bug which prevented the manager from
listening input events coming from multiple MIDI devices.
BUG=None
R=toyoshim@chromium.org
Review URL: https://codereview.chromium.org/943333006
Cr-Commit-Position: refs/heads/master@{#318048}
Diffstat (limited to 'media')
-rw-r--r-- | media/midi/midi_manager_usb.cc | 4 | ||||
-rw-r--r-- | media/midi/midi_manager_usb_unittest.cc | 45 |
2 files changed, 47 insertions, 2 deletions
diff --git a/media/midi/midi_manager_usb.cc b/media/midi/midi_manager_usb.cc index 67953e4..5e08d1d 100644 --- a/media/midi/midi_manager_usb.cc +++ b/media/midi/midi_manager_usb.cc @@ -83,6 +83,7 @@ void MidiManagerUsb::OnEnumerateDevicesDone(bool result, return; } devices->swap(devices_); + std::vector<UsbMidiJack> input_jacks; for (size_t i = 0; i < devices_.size(); ++i) { UsbMidiDescriptorParser parser; std::vector<uint8> descriptor = devices_[i]->GetDescriptor(); @@ -96,7 +97,6 @@ void MidiManagerUsb::OnEnumerateDevicesDone(bool result, initialize_callback_.Run(MIDI_INITIALIZATION_ERROR); return; } - std::vector<UsbMidiJack> input_jacks; for (size_t j = 0; j < jacks.size(); ++j) { if (jacks[j].direction() == UsbMidiJack::DIRECTION_OUT) { output_streams_.push_back(new UsbMidiOutputStream(jacks[j])); @@ -123,8 +123,8 @@ void MidiManagerUsb::OnEnumerateDevicesDone(bool result, AddInputPort(port); } } - input_stream_.reset(new UsbMidiInputStream(input_jacks, this)); } + input_stream_.reset(new UsbMidiInputStream(input_jacks, this)); initialize_callback_.Run(MIDI_OK); } diff --git a/media/midi/midi_manager_usb_unittest.cc b/media/midi/midi_manager_usb_unittest.cc index d59f857..202bead 100644 --- a/media/midi/midi_manager_usb_unittest.cc +++ b/media/midi/midi_manager_usb_unittest.cc @@ -254,6 +254,51 @@ TEST_F(MidiManagerUsbTest, Initialize) { EXPECT_EQ("UsbMidiDevice::GetDescriptor\n", logger_.TakeLog()); } +TEST_F(MidiManagerUsbTest, InitializeMultipleDevices) { + scoped_ptr<FakeUsbMidiDevice> device1(new FakeUsbMidiDevice(&logger_)); + scoped_ptr<FakeUsbMidiDevice> device2(new FakeUsbMidiDevice(&logger_)); + uint8 descriptor[] = { + 0x12, 0x01, 0x10, 0x01, 0x00, 0x00, 0x00, 0x08, 0x86, 0x1a, 0x2d, 0x75, + 0x54, 0x02, 0x00, 0x02, 0x00, 0x01, 0x09, 0x02, 0x75, 0x00, 0x02, 0x01, + 0x00, 0x80, 0x30, 0x09, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x09, 0x24, 0x01, 0x00, 0x01, 0x09, 0x00, 0x01, 0x01, 0x09, 0x04, 0x01, + 0x00, 0x02, 0x01, 0x03, 0x00, 0x00, 0x07, 0x24, 0x01, 0x00, 0x01, 0x51, + 0x00, 0x06, 0x24, 0x02, 0x01, 0x02, 0x00, 0x06, 0x24, 0x02, 0x01, 0x03, + 0x00, 0x06, 0x24, 0x02, 0x02, 0x06, 0x00, 0x09, 0x24, 0x03, 0x01, 0x07, + 0x01, 0x06, 0x01, 0x00, 0x09, 0x24, 0x03, 0x02, 0x04, 0x01, 0x02, 0x01, + 0x00, 0x09, 0x24, 0x03, 0x02, 0x05, 0x01, 0x03, 0x01, 0x00, 0x09, 0x05, + 0x02, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x06, 0x25, 0x01, 0x02, 0x02, + 0x03, 0x09, 0x05, 0x82, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, + 0x01, 0x01, 0x07, + }; + device1->SetDescriptor(ToVector(descriptor)); + device2->SetDescriptor(ToVector(descriptor)); + + Initialize(); + ScopedVector<UsbMidiDevice> devices; + devices.push_back(device1.release()); + devices.push_back(device2.release()); + EXPECT_FALSE(IsInitializationCallbackInvoked()); + RunCallbackUntilCallbackInvoked(true, &devices); + EXPECT_EQ(MIDI_OK, GetInitializationResult()); + + ASSERT_EQ(2u, input_ports().size()); + ASSERT_EQ(4u, output_ports().size()); + ASSERT_TRUE(manager_->input_stream()); + std::vector<UsbMidiInputStream::JackUniqueKey> keys = + manager_->input_stream()->RegisteredJackKeysForTesting(); + ASSERT_EQ(4u, manager_->output_streams().size()); + EXPECT_EQ(2u, manager_->output_streams()[0]->jack().jack_id); + EXPECT_EQ(3u, manager_->output_streams()[1]->jack().jack_id); + ASSERT_EQ(2u, keys.size()); + EXPECT_EQ(2, keys[0].endpoint_number); + + EXPECT_EQ( + "UsbMidiDevice::GetDescriptor\n" + "UsbMidiDevice::GetDescriptor\n", + logger_.TakeLog()); +} + TEST_F(MidiManagerUsbTest, InitializeFail) { Initialize(); |