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 <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 #include <memory> | 9 #include <memory> |
10 #include <string> | 10 #include <string> |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
258 0x02, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x06, 0x25, 0x01, 0x02, 0x02, | 258 0x02, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x06, 0x25, 0x01, 0x02, 0x02, |
259 0x03, 0x09, 0x05, 0x82, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, | 259 0x03, 0x09, 0x05, 0x82, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, |
260 0x01, 0x01, 0x07, | 260 0x01, 0x01, 0x07, |
261 }; | 261 }; |
262 device->SetDescriptors(ToVector(descriptors)); | 262 device->SetDescriptors(ToVector(descriptors)); |
263 device->SetManufacturer("vendor1"); | 263 device->SetManufacturer("vendor1"); |
264 device->SetProductName("device1"); | 264 device->SetProductName("device1"); |
265 device->SetDeviceVersion("1.02"); | 265 device->SetDeviceVersion("1.02"); |
266 | 266 |
267 Initialize(); | 267 Initialize(); |
268 ScopedVector<UsbMidiDevice> devices; | 268 UsbMidiDevice::Devices devices; |
269 devices.push_back(std::move(device)); | 269 devices.push_back(std::move(device)); |
270 EXPECT_FALSE(IsInitializationCallbackInvoked()); | 270 EXPECT_FALSE(IsInitializationCallbackInvoked()); |
271 RunCallbackUntilCallbackInvoked(true, &devices); | 271 RunCallbackUntilCallbackInvoked(true, &devices); |
272 EXPECT_EQ(Result::OK, GetInitializationResult()); | 272 EXPECT_EQ(Result::OK, GetInitializationResult()); |
273 | 273 |
274 ASSERT_EQ(1u, input_ports().size()); | 274 ASSERT_EQ(1u, input_ports().size()); |
275 EXPECT_EQ("usb:port-0-2", input_ports()[0].id); | 275 EXPECT_EQ("usb:port-0-2", input_ports()[0].id); |
276 EXPECT_EQ("vendor1", input_ports()[0].manufacturer); | 276 EXPECT_EQ("vendor1", input_ports()[0].manufacturer); |
277 EXPECT_EQ("device1", input_ports()[0].name); | 277 EXPECT_EQ("device1", input_ports()[0].name); |
278 EXPECT_EQ("1.02", input_ports()[0].version); | 278 EXPECT_EQ("1.02", input_ports()[0].version); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
318 device1->SetDescriptors(ToVector(descriptors)); | 318 device1->SetDescriptors(ToVector(descriptors)); |
319 device1->SetManufacturer("vendor1"); | 319 device1->SetManufacturer("vendor1"); |
320 device1->SetProductName("device1"); | 320 device1->SetProductName("device1"); |
321 device1->SetDeviceVersion("1.02"); | 321 device1->SetDeviceVersion("1.02"); |
322 device2->SetDescriptors(ToVector(descriptors)); | 322 device2->SetDescriptors(ToVector(descriptors)); |
323 device2->SetManufacturer("vendor2"); | 323 device2->SetManufacturer("vendor2"); |
324 device2->SetProductName("device2"); | 324 device2->SetProductName("device2"); |
325 device2->SetDeviceVersion("98.76"); | 325 device2->SetDeviceVersion("98.76"); |
326 | 326 |
327 Initialize(); | 327 Initialize(); |
328 ScopedVector<UsbMidiDevice> devices; | 328 UsbMidiDevice::Devices devices; |
329 devices.push_back(std::move(device1)); | 329 devices.push_back(std::move(device1)); |
330 devices.push_back(std::move(device2)); | 330 devices.push_back(std::move(device2)); |
331 EXPECT_FALSE(IsInitializationCallbackInvoked()); | 331 EXPECT_FALSE(IsInitializationCallbackInvoked()); |
332 RunCallbackUntilCallbackInvoked(true, &devices); | 332 RunCallbackUntilCallbackInvoked(true, &devices); |
333 EXPECT_EQ(Result::OK, GetInitializationResult()); | 333 EXPECT_EQ(Result::OK, GetInitializationResult()); |
334 | 334 |
335 ASSERT_EQ(2u, input_ports().size()); | 335 ASSERT_EQ(2u, input_ports().size()); |
336 EXPECT_EQ("usb:port-0-2", input_ports()[0].id); | 336 EXPECT_EQ("usb:port-0-2", input_ports()[0].id); |
337 EXPECT_EQ("vendor1", input_ports()[0].manufacturer); | 337 EXPECT_EQ("vendor1", input_ports()[0].manufacturer); |
338 EXPECT_EQ("device1", input_ports()[0].name); | 338 EXPECT_EQ("device1", input_ports()[0].name); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
381 RunCallbackUntilCallbackInvoked(false, NULL); | 381 RunCallbackUntilCallbackInvoked(false, NULL); |
382 EXPECT_EQ(Result::INITIALIZATION_ERROR, GetInitializationResult()); | 382 EXPECT_EQ(Result::INITIALIZATION_ERROR, GetInitializationResult()); |
383 } | 383 } |
384 | 384 |
385 TEST_F(MidiManagerUsbTest, InitializeFailBecauseOfInvalidDescriptors) { | 385 TEST_F(MidiManagerUsbTest, InitializeFailBecauseOfInvalidDescriptors) { |
386 std::unique_ptr<FakeUsbMidiDevice> device(new FakeUsbMidiDevice(&logger_)); | 386 std::unique_ptr<FakeUsbMidiDevice> device(new FakeUsbMidiDevice(&logger_)); |
387 uint8_t descriptors[] = {0x04}; | 387 uint8_t descriptors[] = {0x04}; |
388 device->SetDescriptors(ToVector(descriptors)); | 388 device->SetDescriptors(ToVector(descriptors)); |
389 | 389 |
390 Initialize(); | 390 Initialize(); |
391 ScopedVector<UsbMidiDevice> devices; | 391 UsbMidiDevice::Devices devices; |
392 devices.push_back(std::move(device)); | 392 devices.push_back(std::move(device)); |
393 EXPECT_FALSE(IsInitializationCallbackInvoked()); | 393 EXPECT_FALSE(IsInitializationCallbackInvoked()); |
394 RunCallbackUntilCallbackInvoked(true, &devices); | 394 RunCallbackUntilCallbackInvoked(true, &devices); |
395 EXPECT_EQ(Result::INITIALIZATION_ERROR, GetInitializationResult()); | 395 EXPECT_EQ(Result::INITIALIZATION_ERROR, GetInitializationResult()); |
396 EXPECT_EQ("UsbMidiDevice::GetDescriptors\n", logger_.TakeLog()); | 396 EXPECT_EQ("UsbMidiDevice::GetDescriptors\n", logger_.TakeLog()); |
397 } | 397 } |
398 | 398 |
399 TEST_F(MidiManagerUsbTest, Send) { | 399 TEST_F(MidiManagerUsbTest, Send) { |
400 Initialize(); | 400 Initialize(); |
401 std::unique_ptr<FakeUsbMidiDevice> device(new FakeUsbMidiDevice(&logger_)); | 401 std::unique_ptr<FakeUsbMidiDevice> device(new FakeUsbMidiDevice(&logger_)); |
(...skipping 10 matching lines...) Expand all Loading... |
412 0x02, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x06, 0x25, 0x01, 0x02, 0x02, | 412 0x02, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x06, 0x25, 0x01, 0x02, 0x02, |
413 0x03, 0x09, 0x05, 0x82, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, | 413 0x03, 0x09, 0x05, 0x82, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, |
414 0x01, 0x01, 0x07, | 414 0x01, 0x01, 0x07, |
415 }; | 415 }; |
416 | 416 |
417 device->SetDescriptors(ToVector(descriptors)); | 417 device->SetDescriptors(ToVector(descriptors)); |
418 uint8_t data[] = { | 418 uint8_t data[] = { |
419 0x90, 0x45, 0x7f, 0xf0, 0x00, 0x01, 0xf7, | 419 0x90, 0x45, 0x7f, 0xf0, 0x00, 0x01, 0xf7, |
420 }; | 420 }; |
421 | 421 |
422 ScopedVector<UsbMidiDevice> devices; | 422 UsbMidiDevice::Devices devices; |
423 devices.push_back(std::move(device)); | 423 devices.push_back(std::move(device)); |
424 EXPECT_FALSE(IsInitializationCallbackInvoked()); | 424 EXPECT_FALSE(IsInitializationCallbackInvoked()); |
425 RunCallbackUntilCallbackInvoked(true, &devices); | 425 RunCallbackUntilCallbackInvoked(true, &devices); |
426 EXPECT_EQ(Result::OK, GetInitializationResult()); | 426 EXPECT_EQ(Result::OK, GetInitializationResult()); |
427 ASSERT_EQ(2u, manager_->output_streams().size()); | 427 ASSERT_EQ(2u, manager_->output_streams().size()); |
428 | 428 |
429 manager_->DispatchSendMidiData(client_.get(), 1, ToVector(data), 0); | 429 manager_->DispatchSendMidiData(client_.get(), 1, ToVector(data), 0); |
430 // Since UsbMidiDevice::Send is posted as a task, RunLoop should run to | 430 // Since UsbMidiDevice::Send is posted as a task, RunLoop should run to |
431 // invoke the task. | 431 // invoke the task. |
432 base::RunLoop run_loop; | 432 base::RunLoop run_loop; |
(...skipping 23 matching lines...) Expand all Loading... |
456 0x03, 0x09, 0x05, 0x82, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, | 456 0x03, 0x09, 0x05, 0x82, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, |
457 0x01, 0x01, 0x07, | 457 0x01, 0x01, 0x07, |
458 }; | 458 }; |
459 | 459 |
460 device->SetDescriptors(ToVector(descriptors)); | 460 device->SetDescriptors(ToVector(descriptors)); |
461 uint8_t data[] = { | 461 uint8_t data[] = { |
462 0x90, 0x45, 0x7f, 0xf0, 0x00, 0x01, 0xf7, | 462 0x90, 0x45, 0x7f, 0xf0, 0x00, 0x01, 0xf7, |
463 }; | 463 }; |
464 | 464 |
465 Initialize(); | 465 Initialize(); |
466 ScopedVector<UsbMidiDevice> devices; | 466 UsbMidiDevice::Devices devices; |
467 devices.push_back(std::move(device)); | 467 devices.push_back(std::move(device)); |
468 EXPECT_FALSE(IsInitializationCallbackInvoked()); | 468 EXPECT_FALSE(IsInitializationCallbackInvoked()); |
469 RunCallbackUntilCallbackInvoked(true, &devices); | 469 RunCallbackUntilCallbackInvoked(true, &devices); |
470 EXPECT_EQ(Result::OK, GetInitializationResult()); | 470 EXPECT_EQ(Result::OK, GetInitializationResult()); |
471 ASSERT_EQ(2u, manager_->output_streams().size()); | 471 ASSERT_EQ(2u, manager_->output_streams().size()); |
472 EXPECT_EQ("UsbMidiDevice::GetDescriptors\n", logger_.TakeLog()); | 472 EXPECT_EQ("UsbMidiDevice::GetDescriptors\n", logger_.TakeLog()); |
473 | 473 |
474 // The specified port index is invalid. The manager must ignore the request. | 474 // The specified port index is invalid. The manager must ignore the request. |
475 manager_->DispatchSendMidiData(client_.get(), 99, ToVector(data), 0); | 475 manager_->DispatchSendMidiData(client_.get(), 99, ToVector(data), 0); |
476 EXPECT_EQ("", logger_.TakeLog()); | 476 EXPECT_EQ("", logger_.TakeLog()); |
(...skipping 21 matching lines...) Expand all Loading... |
498 }; | 498 }; |
499 | 499 |
500 device->SetDescriptors(ToVector(descriptors)); | 500 device->SetDescriptors(ToVector(descriptors)); |
501 uint8_t data[] = { | 501 uint8_t data[] = { |
502 0x09, 0x90, 0x45, 0x7f, 0x04, 0xf0, 0x00, | 502 0x09, 0x90, 0x45, 0x7f, 0x04, 0xf0, 0x00, |
503 0x01, 0x49, 0x90, 0x88, 0x99, // This data should be ignored (CN = 4). | 503 0x01, 0x49, 0x90, 0x88, 0x99, // This data should be ignored (CN = 4). |
504 0x05, 0xf7, 0x00, 0x00, | 504 0x05, 0xf7, 0x00, 0x00, |
505 }; | 505 }; |
506 | 506 |
507 Initialize(); | 507 Initialize(); |
508 ScopedVector<UsbMidiDevice> devices; | 508 UsbMidiDevice::Devices devices; |
509 UsbMidiDevice* device_raw = device.get(); | 509 UsbMidiDevice* device_raw = device.get(); |
510 devices.push_back(std::move(device)); | 510 devices.push_back(std::move(device)); |
511 EXPECT_FALSE(IsInitializationCallbackInvoked()); | 511 EXPECT_FALSE(IsInitializationCallbackInvoked()); |
512 RunCallbackUntilCallbackInvoked(true, &devices); | 512 RunCallbackUntilCallbackInvoked(true, &devices); |
513 EXPECT_EQ(Result::OK, GetInitializationResult()); | 513 EXPECT_EQ(Result::OK, GetInitializationResult()); |
514 | 514 |
515 manager_->ReceiveUsbMidiData(device_raw, 2, data, arraysize(data), | 515 manager_->ReceiveUsbMidiData(device_raw, 2, data, arraysize(data), |
516 base::TimeTicks()); | 516 base::TimeTicks()); |
517 Finalize(); | 517 Finalize(); |
518 | 518 |
(...skipping 17 matching lines...) Expand all Loading... |
536 0x00, 0x06, 0x24, 0x02, 0x01, 0x02, 0x00, 0x06, 0x24, 0x02, 0x01, 0x03, | 536 0x00, 0x06, 0x24, 0x02, 0x01, 0x02, 0x00, 0x06, 0x24, 0x02, 0x01, 0x03, |
537 0x00, 0x06, 0x24, 0x02, 0x02, 0x06, 0x00, 0x09, 0x24, 0x03, 0x01, 0x07, | 537 0x00, 0x06, 0x24, 0x02, 0x02, 0x06, 0x00, 0x09, 0x24, 0x03, 0x01, 0x07, |
538 0x01, 0x06, 0x01, 0x00, 0x09, 0x24, 0x03, 0x02, 0x04, 0x01, 0x02, 0x01, | 538 0x01, 0x06, 0x01, 0x00, 0x09, 0x24, 0x03, 0x02, 0x04, 0x01, 0x02, 0x01, |
539 0x00, 0x09, 0x24, 0x03, 0x02, 0x05, 0x01, 0x03, 0x01, 0x00, 0x09, 0x05, | 539 0x00, 0x09, 0x24, 0x03, 0x02, 0x05, 0x01, 0x03, 0x01, 0x00, 0x09, 0x05, |
540 0x02, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x06, 0x25, 0x01, 0x02, 0x02, | 540 0x02, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x06, 0x25, 0x01, 0x02, 0x02, |
541 0x03, 0x09, 0x05, 0x82, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, | 541 0x03, 0x09, 0x05, 0x82, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, |
542 0x01, 0x01, 0x07, | 542 0x01, 0x01, 0x07, |
543 }; | 543 }; |
544 | 544 |
545 Initialize(); | 545 Initialize(); |
546 ScopedVector<UsbMidiDevice> devices; | 546 UsbMidiDevice::Devices devices; |
547 EXPECT_FALSE(IsInitializationCallbackInvoked()); | 547 EXPECT_FALSE(IsInitializationCallbackInvoked()); |
548 RunCallbackUntilCallbackInvoked(true, &devices); | 548 RunCallbackUntilCallbackInvoked(true, &devices); |
549 EXPECT_EQ(Result::OK, GetInitializationResult()); | 549 EXPECT_EQ(Result::OK, GetInitializationResult()); |
550 | 550 |
551 ASSERT_EQ(0u, input_ports().size()); | 551 ASSERT_EQ(0u, input_ports().size()); |
552 ASSERT_EQ(0u, output_ports().size()); | 552 ASSERT_EQ(0u, output_ports().size()); |
553 ASSERT_TRUE(manager_->input_stream()); | 553 ASSERT_TRUE(manager_->input_stream()); |
554 std::vector<UsbMidiJack> jacks = manager_->input_stream()->jacks(); | 554 std::vector<UsbMidiJack> jacks = manager_->input_stream()->jacks(); |
555 ASSERT_EQ(0u, manager_->output_streams().size()); | 555 ASSERT_EQ(0u, manager_->output_streams().size()); |
556 ASSERT_EQ(0u, jacks.size()); | 556 ASSERT_EQ(0u, jacks.size()); |
(...skipping 12 matching lines...) Expand all Loading... |
569 EXPECT_EQ(2u, manager_->output_streams()[0]->jack().jack_id); | 569 EXPECT_EQ(2u, manager_->output_streams()[0]->jack().jack_id); |
570 EXPECT_EQ(3u, manager_->output_streams()[1]->jack().jack_id); | 570 EXPECT_EQ(3u, manager_->output_streams()[1]->jack().jack_id); |
571 ASSERT_EQ(1u, jacks.size()); | 571 ASSERT_EQ(1u, jacks.size()); |
572 EXPECT_EQ(2, jacks[0].endpoint_number()); | 572 EXPECT_EQ(2, jacks[0].endpoint_number()); |
573 EXPECT_EQ("UsbMidiDevice::GetDescriptors\n", logger_.TakeLog()); | 573 EXPECT_EQ("UsbMidiDevice::GetDescriptors\n", logger_.TakeLog()); |
574 } | 574 } |
575 | 575 |
576 } // namespace | 576 } // namespace |
577 | 577 |
578 } // namespace midi | 578 } // namespace midi |
OLD | NEW |