Loading system/packet/tests/avrcp/avrcp_test_packets.h +10 −2 Original line number Diff line number Diff line Loading @@ -291,9 +291,17 @@ std::vector<uint8_t> set_browsed_player_response = { 0x70, 0x00, 0x0a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x6a, 0x00}; // AVRCP Get Total Number of Items Request with Scope = Media Player List std::vector<uint8_t> get_total_number_of_items_request_media_players = { 0x75, 0x00, 0x01, 0x00}; // AVRCP Get Total Number of Items Request with Scope = VFS std::vector<uint8_t> get_total_number_of_items_request_vfs = {0x75, 0x00, 0x01, 0x01}; // AVRCP Get Total Number of Items Request with Scope = Now Playing List std::vector<uint8_t> get_total_number_of_items_request = {0x75, 0x00, 0x01, 0x03}; std::vector<uint8_t> get_total_number_of_items_request_now_playing = { 0x75, 0x00, 0x01, 0x03}; // AVRCP Get Total number of Items Response with 5 items in folder std::vector<uint8_t> get_total_number_of_items_response = { Loading system/packet/tests/avrcp/get_total_number_of_items_packet_test.cc +5 −5 Original line number Diff line number Diff line Loading @@ -48,19 +48,19 @@ TEST(GetTotalNumberOfItemsResponseBuilderTest, errorStatusTest) { } TEST(GetTotalNumberOfItemsRequestTest, getterTest) { auto test_packet = TestGetTotalNumItemsReqPacket::Make(get_total_number_of_items_request); auto test_packet = TestGetTotalNumItemsReqPacket::Make( get_total_number_of_items_request_now_playing); ASSERT_EQ(test_packet->GetScope(), Scope::NOW_PLAYING); } TEST(GetTotalNumberOfItemsRequestTest, validTest) { auto test_packet = TestGetTotalNumItemsReqPacket::Make(get_total_number_of_items_request); auto test_packet = TestGetTotalNumItemsReqPacket::Make( get_total_number_of_items_request_now_playing); ASSERT_TRUE(test_packet->IsValid()); } TEST(GetTotalNumberOfItemsRequestTest, invalidTest) { auto packet_copy = get_total_number_of_items_request; auto packet_copy = get_total_number_of_items_request_now_playing; packet_copy.push_back(0x00); auto test_packet = TestGetTotalNumItemsReqPacket::Make(packet_copy); ASSERT_FALSE(test_packet->IsValid()); Loading system/profile/avrcp/device.cc +60 −1 Original line number Diff line number Diff line Loading @@ -578,8 +578,12 @@ void Device::BrowseMessageReceived(uint8_t label, HandleGetItemAttributes( label, Packet::Specialize<GetItemAttributesRequest>(pkt)); break; case BrowsePdu::GET_TOTAL_NUMBER_OF_ITEMS: HandleGetTotalNumberOfItems( label, Packet::Specialize<GetTotalNumberOfItemsRequest>(pkt)); break; default: DEVICE_LOG(WARNING) << __func__ << ": " << pkt->GetPdu(); DEVICE_LOG(FATAL) << __func__ << ": " << pkt->GetPdu(); break; } } Loading Loading @@ -611,6 +615,61 @@ void Device::HandleGetFolderItems(uint8_t label, } } void Device::HandleGetTotalNumberOfItems( uint8_t label, std::shared_ptr<GetTotalNumberOfItemsRequest> pkt) { DEVICE_VLOG(2) << __func__ << ": scope=" << pkt->GetScope(); switch (pkt->GetScope()) { case Scope::MEDIA_PLAYER_LIST: { media_interface_->GetMediaPlayerList( base::Bind(&Device::GetTotalNumberOfItemsMediaPlayersResponse, base::Unretained(this), label)); break; } case Scope::VFS: media_interface_->GetFolderItems( curr_browsed_player_id_, CurrentFolder(), base::Bind(&Device::GetTotalNumberOfItemsVFSResponse, base::Unretained(this), label)); break; case Scope::NOW_PLAYING: media_interface_->GetNowPlayingList( base::Bind(&Device::GetTotalNumberOfItemsNowPlayingResponse, base::Unretained(this), label)); break; default: DEVICE_LOG(ERROR) << __func__ << ": " << pkt->GetScope(); break; } } void Device::GetTotalNumberOfItemsMediaPlayersResponse( uint8_t label, uint16_t curr_player, std::vector<MediaPlayerInfo> list) { DEVICE_VLOG(2) << __func__ << ": num_items=" << list.size(); auto builder = GetTotalNumberOfItemsResponseBuilder::MakeBuilder( Status::NO_ERROR, 0x0000, list.size()); send_message(label, true, std::move(builder)); } void Device::GetTotalNumberOfItemsVFSResponse(uint8_t label, std::vector<ListItem> list) { DEVICE_VLOG(2) << __func__ << ": num_items=" << list.size(); auto builder = GetTotalNumberOfItemsResponseBuilder::MakeBuilder( Status::NO_ERROR, 0x0000, list.size()); send_message(label, true, std::move(builder)); } void Device::GetTotalNumberOfItemsNowPlayingResponse( uint8_t label, std::string curr_song_id, std::vector<SongInfo> list) { DEVICE_VLOG(2) << __func__ << ": num_items=" << list.size(); auto builder = GetTotalNumberOfItemsResponseBuilder::MakeBuilder( Status::NO_ERROR, 0x0000, list.size()); send_message(label, true, std::move(builder)); } void Device::HandleChangePath(uint8_t label, std::shared_ptr<ChangePathRequest> pkt) { DEVICE_VLOG(2) << __func__ << ": direction=" << pkt->GetDirection() Loading system/profile/avrcp/device.h +10 −0 Original line number Diff line number Diff line Loading @@ -163,6 +163,16 @@ class Device { uint8_t label, std::shared_ptr<GetFolderItemsRequest> pkt, std::string curr_song_id, std::vector<SongInfo> song_list); // GET TOTAL NUMBER OF ITEMS virtual void HandleGetTotalNumberOfItems( uint8_t label, std::shared_ptr<GetTotalNumberOfItemsRequest> pkt); virtual void GetTotalNumberOfItemsMediaPlayersResponse( uint8_t label, uint16_t curr_player, std::vector<MediaPlayerInfo> list); virtual void GetTotalNumberOfItemsVFSResponse(uint8_t label, std::vector<ListItem> items); virtual void GetTotalNumberOfItemsNowPlayingResponse( uint8_t label, std::string curr_song_id, std::vector<SongInfo> song_list); // GET ITEM ATTRIBUTES virtual void HandleGetItemAttributes( uint8_t label, std::shared_ptr<GetItemAttributesRequest> request); Loading system/profile/avrcp/tests/avrcp_device_test.cc +73 −0 Original line number Diff line number Diff line Loading @@ -355,6 +355,79 @@ TEST_F(AvrcpDeviceTest, getElementAttributesMtuTest) { 1, TestAvrcpPacket::Make(get_element_attributes_request_full)); } TEST_F(AvrcpDeviceTest, getTotalNumberOfItemsMediaPlayersTest) { MockMediaInterface interface; NiceMock<MockA2dpInterface> a2dp_interface; test_device->RegisterInterfaces(&interface, &a2dp_interface, nullptr); std::vector<MediaPlayerInfo> player_list = { {0, "player1", true}, {1, "player2", true}, {2, "player3", true}, }; EXPECT_CALL(interface, GetMediaPlayerList(_)) .Times(1) .WillOnce(InvokeCb<0>(0, player_list)); auto expected_response = GetTotalNumberOfItemsResponseBuilder::MakeBuilder( Status::NO_ERROR, 0, player_list.size()); EXPECT_CALL(response_cb, Call(1, true, matchPacket(std::move(expected_response)))) .Times(1); SendBrowseMessage(1, TestBrowsePacket::Make( get_total_number_of_items_request_media_players)); } TEST_F(AvrcpDeviceTest, getTotalNumberOfItemsVFSTest) { MockMediaInterface interface; NiceMock<MockA2dpInterface> a2dp_interface; test_device->RegisterInterfaces(&interface, &a2dp_interface, nullptr); std::vector<ListItem> vfs_list = { {ListItem::FOLDER, {"id1", true, "folder1"}, SongInfo()}, {ListItem::FOLDER, {"id2", true, "folder2"}, SongInfo()}, }; EXPECT_CALL(interface, GetFolderItems(_, "", _)) .Times(1) .WillOnce(InvokeCb<2>(vfs_list)); auto expected_response = GetTotalNumberOfItemsResponseBuilder::MakeBuilder( Status::NO_ERROR, 0, vfs_list.size()); EXPECT_CALL(response_cb, Call(1, true, matchPacket(std::move(expected_response)))) .Times(1); SendBrowseMessage( 1, TestBrowsePacket::Make(get_total_number_of_items_request_vfs)); } TEST_F(AvrcpDeviceTest, getTotalNumberOfItemsNowPlayingTest) { MockMediaInterface interface; NiceMock<MockA2dpInterface> a2dp_interface; test_device->RegisterInterfaces(&interface, &a2dp_interface, nullptr); std::vector<SongInfo> now_playing_list = { {"test_id1", {}}, {"test_id2", {}}, {"test_id3", {}}, {"test_id4", {}}, {"test_id5", {}}, }; EXPECT_CALL(interface, GetNowPlayingList(_)) .WillRepeatedly(InvokeCb<0>("test_id1", now_playing_list)); auto expected_response = GetTotalNumberOfItemsResponseBuilder::MakeBuilder( Status::NO_ERROR, 0, now_playing_list.size()); EXPECT_CALL(response_cb, Call(1, true, matchPacket(std::move(expected_response)))) .Times(1); SendBrowseMessage( 1, TestBrowsePacket::Make(get_total_number_of_items_request_now_playing)); } TEST_F(AvrcpDeviceTest, getMediaPlayerListTest) { MockMediaInterface interface; NiceMock<MockA2dpInterface> a2dp_interface; Loading Loading
system/packet/tests/avrcp/avrcp_test_packets.h +10 −2 Original line number Diff line number Diff line Loading @@ -291,9 +291,17 @@ std::vector<uint8_t> set_browsed_player_response = { 0x70, 0x00, 0x0a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x6a, 0x00}; // AVRCP Get Total Number of Items Request with Scope = Media Player List std::vector<uint8_t> get_total_number_of_items_request_media_players = { 0x75, 0x00, 0x01, 0x00}; // AVRCP Get Total Number of Items Request with Scope = VFS std::vector<uint8_t> get_total_number_of_items_request_vfs = {0x75, 0x00, 0x01, 0x01}; // AVRCP Get Total Number of Items Request with Scope = Now Playing List std::vector<uint8_t> get_total_number_of_items_request = {0x75, 0x00, 0x01, 0x03}; std::vector<uint8_t> get_total_number_of_items_request_now_playing = { 0x75, 0x00, 0x01, 0x03}; // AVRCP Get Total number of Items Response with 5 items in folder std::vector<uint8_t> get_total_number_of_items_response = { Loading
system/packet/tests/avrcp/get_total_number_of_items_packet_test.cc +5 −5 Original line number Diff line number Diff line Loading @@ -48,19 +48,19 @@ TEST(GetTotalNumberOfItemsResponseBuilderTest, errorStatusTest) { } TEST(GetTotalNumberOfItemsRequestTest, getterTest) { auto test_packet = TestGetTotalNumItemsReqPacket::Make(get_total_number_of_items_request); auto test_packet = TestGetTotalNumItemsReqPacket::Make( get_total_number_of_items_request_now_playing); ASSERT_EQ(test_packet->GetScope(), Scope::NOW_PLAYING); } TEST(GetTotalNumberOfItemsRequestTest, validTest) { auto test_packet = TestGetTotalNumItemsReqPacket::Make(get_total_number_of_items_request); auto test_packet = TestGetTotalNumItemsReqPacket::Make( get_total_number_of_items_request_now_playing); ASSERT_TRUE(test_packet->IsValid()); } TEST(GetTotalNumberOfItemsRequestTest, invalidTest) { auto packet_copy = get_total_number_of_items_request; auto packet_copy = get_total_number_of_items_request_now_playing; packet_copy.push_back(0x00); auto test_packet = TestGetTotalNumItemsReqPacket::Make(packet_copy); ASSERT_FALSE(test_packet->IsValid()); Loading
system/profile/avrcp/device.cc +60 −1 Original line number Diff line number Diff line Loading @@ -578,8 +578,12 @@ void Device::BrowseMessageReceived(uint8_t label, HandleGetItemAttributes( label, Packet::Specialize<GetItemAttributesRequest>(pkt)); break; case BrowsePdu::GET_TOTAL_NUMBER_OF_ITEMS: HandleGetTotalNumberOfItems( label, Packet::Specialize<GetTotalNumberOfItemsRequest>(pkt)); break; default: DEVICE_LOG(WARNING) << __func__ << ": " << pkt->GetPdu(); DEVICE_LOG(FATAL) << __func__ << ": " << pkt->GetPdu(); break; } } Loading Loading @@ -611,6 +615,61 @@ void Device::HandleGetFolderItems(uint8_t label, } } void Device::HandleGetTotalNumberOfItems( uint8_t label, std::shared_ptr<GetTotalNumberOfItemsRequest> pkt) { DEVICE_VLOG(2) << __func__ << ": scope=" << pkt->GetScope(); switch (pkt->GetScope()) { case Scope::MEDIA_PLAYER_LIST: { media_interface_->GetMediaPlayerList( base::Bind(&Device::GetTotalNumberOfItemsMediaPlayersResponse, base::Unretained(this), label)); break; } case Scope::VFS: media_interface_->GetFolderItems( curr_browsed_player_id_, CurrentFolder(), base::Bind(&Device::GetTotalNumberOfItemsVFSResponse, base::Unretained(this), label)); break; case Scope::NOW_PLAYING: media_interface_->GetNowPlayingList( base::Bind(&Device::GetTotalNumberOfItemsNowPlayingResponse, base::Unretained(this), label)); break; default: DEVICE_LOG(ERROR) << __func__ << ": " << pkt->GetScope(); break; } } void Device::GetTotalNumberOfItemsMediaPlayersResponse( uint8_t label, uint16_t curr_player, std::vector<MediaPlayerInfo> list) { DEVICE_VLOG(2) << __func__ << ": num_items=" << list.size(); auto builder = GetTotalNumberOfItemsResponseBuilder::MakeBuilder( Status::NO_ERROR, 0x0000, list.size()); send_message(label, true, std::move(builder)); } void Device::GetTotalNumberOfItemsVFSResponse(uint8_t label, std::vector<ListItem> list) { DEVICE_VLOG(2) << __func__ << ": num_items=" << list.size(); auto builder = GetTotalNumberOfItemsResponseBuilder::MakeBuilder( Status::NO_ERROR, 0x0000, list.size()); send_message(label, true, std::move(builder)); } void Device::GetTotalNumberOfItemsNowPlayingResponse( uint8_t label, std::string curr_song_id, std::vector<SongInfo> list) { DEVICE_VLOG(2) << __func__ << ": num_items=" << list.size(); auto builder = GetTotalNumberOfItemsResponseBuilder::MakeBuilder( Status::NO_ERROR, 0x0000, list.size()); send_message(label, true, std::move(builder)); } void Device::HandleChangePath(uint8_t label, std::shared_ptr<ChangePathRequest> pkt) { DEVICE_VLOG(2) << __func__ << ": direction=" << pkt->GetDirection() Loading
system/profile/avrcp/device.h +10 −0 Original line number Diff line number Diff line Loading @@ -163,6 +163,16 @@ class Device { uint8_t label, std::shared_ptr<GetFolderItemsRequest> pkt, std::string curr_song_id, std::vector<SongInfo> song_list); // GET TOTAL NUMBER OF ITEMS virtual void HandleGetTotalNumberOfItems( uint8_t label, std::shared_ptr<GetTotalNumberOfItemsRequest> pkt); virtual void GetTotalNumberOfItemsMediaPlayersResponse( uint8_t label, uint16_t curr_player, std::vector<MediaPlayerInfo> list); virtual void GetTotalNumberOfItemsVFSResponse(uint8_t label, std::vector<ListItem> items); virtual void GetTotalNumberOfItemsNowPlayingResponse( uint8_t label, std::string curr_song_id, std::vector<SongInfo> song_list); // GET ITEM ATTRIBUTES virtual void HandleGetItemAttributes( uint8_t label, std::shared_ptr<GetItemAttributesRequest> request); Loading
system/profile/avrcp/tests/avrcp_device_test.cc +73 −0 Original line number Diff line number Diff line Loading @@ -355,6 +355,79 @@ TEST_F(AvrcpDeviceTest, getElementAttributesMtuTest) { 1, TestAvrcpPacket::Make(get_element_attributes_request_full)); } TEST_F(AvrcpDeviceTest, getTotalNumberOfItemsMediaPlayersTest) { MockMediaInterface interface; NiceMock<MockA2dpInterface> a2dp_interface; test_device->RegisterInterfaces(&interface, &a2dp_interface, nullptr); std::vector<MediaPlayerInfo> player_list = { {0, "player1", true}, {1, "player2", true}, {2, "player3", true}, }; EXPECT_CALL(interface, GetMediaPlayerList(_)) .Times(1) .WillOnce(InvokeCb<0>(0, player_list)); auto expected_response = GetTotalNumberOfItemsResponseBuilder::MakeBuilder( Status::NO_ERROR, 0, player_list.size()); EXPECT_CALL(response_cb, Call(1, true, matchPacket(std::move(expected_response)))) .Times(1); SendBrowseMessage(1, TestBrowsePacket::Make( get_total_number_of_items_request_media_players)); } TEST_F(AvrcpDeviceTest, getTotalNumberOfItemsVFSTest) { MockMediaInterface interface; NiceMock<MockA2dpInterface> a2dp_interface; test_device->RegisterInterfaces(&interface, &a2dp_interface, nullptr); std::vector<ListItem> vfs_list = { {ListItem::FOLDER, {"id1", true, "folder1"}, SongInfo()}, {ListItem::FOLDER, {"id2", true, "folder2"}, SongInfo()}, }; EXPECT_CALL(interface, GetFolderItems(_, "", _)) .Times(1) .WillOnce(InvokeCb<2>(vfs_list)); auto expected_response = GetTotalNumberOfItemsResponseBuilder::MakeBuilder( Status::NO_ERROR, 0, vfs_list.size()); EXPECT_CALL(response_cb, Call(1, true, matchPacket(std::move(expected_response)))) .Times(1); SendBrowseMessage( 1, TestBrowsePacket::Make(get_total_number_of_items_request_vfs)); } TEST_F(AvrcpDeviceTest, getTotalNumberOfItemsNowPlayingTest) { MockMediaInterface interface; NiceMock<MockA2dpInterface> a2dp_interface; test_device->RegisterInterfaces(&interface, &a2dp_interface, nullptr); std::vector<SongInfo> now_playing_list = { {"test_id1", {}}, {"test_id2", {}}, {"test_id3", {}}, {"test_id4", {}}, {"test_id5", {}}, }; EXPECT_CALL(interface, GetNowPlayingList(_)) .WillRepeatedly(InvokeCb<0>("test_id1", now_playing_list)); auto expected_response = GetTotalNumberOfItemsResponseBuilder::MakeBuilder( Status::NO_ERROR, 0, now_playing_list.size()); EXPECT_CALL(response_cb, Call(1, true, matchPacket(std::move(expected_response)))) .Times(1); SendBrowseMessage( 1, TestBrowsePacket::Make(get_total_number_of_items_request_now_playing)); } TEST_F(AvrcpDeviceTest, getMediaPlayerListTest) { MockMediaInterface interface; NiceMock<MockA2dpInterface> a2dp_interface; Loading