diff --git a/examples/tv-app/android/java/OnOffManager.cpp b/examples/tv-app/android/java/OnOffManager.cpp index 822f058f647ef0..64a02a5128add9 100644 --- a/examples/tv-app/android/java/OnOffManager.cpp +++ b/examples/tv-app/android/java/OnOffManager.cpp @@ -83,6 +83,7 @@ void OnOffManager::PostOnOffChanged(chip::EndpointId endpoint, bool value) jboolean OnOffManager::SetOnOff(jint endpoint, bool value) { + chip::DeviceLayer::StackLock stack; EmberAfStatus status = app::Clusters::OnOff::Attributes::OnOff::Set(static_cast(endpoint), value); return status == EMBER_ZCL_STATUS_SUCCESS; } diff --git a/examples/tv-app/tv-common/clusters/channel/ChannelManager.cpp b/examples/tv-app/tv-common/clusters/channel/ChannelManager.cpp index a278de45489112..7599bc48ef5d29 100644 --- a/examples/tv-app/tv-common/clusters/channel/ChannelManager.cpp +++ b/examples/tv-app/tv-common/clusters/channel/ChannelManager.cpp @@ -69,29 +69,39 @@ ChannelManager::ChannelManager() program1.title = chip::CharSpan::fromCharString("ABC Title1"); program1.subtitle = MakeOptional(chip::CharSpan::fromCharString("My Program Subtitle1")); program1.startTime = 0; - program1.endTime = 30 * 60 * 60; + program1.endTime = 30 * 60; mPrograms.push_back(program1); - ProgramType program_abc1; - program_abc1.identifier = chip::CharSpan::fromCharString("progid-pbs1"); - program_abc1.channel = pbs; - program_abc1.title = chip::CharSpan::fromCharString("PBS Title1"); - program_abc1.subtitle = MakeOptional(chip::CharSpan::fromCharString("My Program Subtitle1")); - program_abc1.startTime = 0; - program_abc1.endTime = 30 * 60 * 60; + ProgramType program_pbs1; + program_pbs1.identifier = chip::CharSpan::fromCharString("progid-pbs1"); + program_pbs1.channel = pbs; + program_pbs1.title = chip::CharSpan::fromCharString("PBS Title1"); + program_pbs1.subtitle = MakeOptional(chip::CharSpan::fromCharString("My Program Subtitle1")); + program_pbs1.startTime = 0; + program_pbs1.endTime = 30 * 60; - mPrograms.push_back(program_abc1); + mPrograms.push_back(program_pbs1); ProgramType program2; program2.identifier = chip::CharSpan::fromCharString("progid-abc2"); program2.channel = abc; program2.title = chip::CharSpan::fromCharString("My Program Title2"); program2.subtitle = MakeOptional(chip::CharSpan::fromCharString("My Program Subtitle2")); - program2.startTime = 30 * 60 * 60; - program2.endTime = 30 * 60 * 60; + program2.startTime = 30 * 60; + program2.endTime = 60 * 60; mPrograms.push_back(program2); + + ProgramType program3; + program3.identifier = chip::CharSpan::fromCharString("progid-abc3"); + program3.channel = abc; + program3.title = chip::CharSpan::fromCharString("My Program Title3"); + program3.subtitle = MakeOptional(chip::CharSpan::fromCharString("My Program Subtitle3")); + program3.startTime = 0; + program3.endTime = 60 * 60; + + mPrograms.push_back(program3); } CHIP_ERROR ChannelManager::HandleGetChannelList(AttributeValueEncoder & aEncoder) @@ -182,7 +192,6 @@ void ChannelManager::HandleChangeChannel(CommandResponseHelper>(paging); - ProgramGuideResponseType response; - // response.channelPagingStruct = channelPaging; - response.programList = DataModel::List(mPrograms.data(), mPrograms.size()); + std::vector matches; + for (auto const & program : mPrograms) + { + if (startTime.ValueOr(0) > program.startTime) + { + continue; + } + if (endTime.HasValue() && endTime.ValueOr(0) < program.endTime) + { + continue; + } + if (channelList.HasValue()) + { + auto iter = channelList.Value().begin(); + bool match = false; + int listCount = 0; + while (iter.Next() && !match) + { + listCount++; + auto & channel = iter.GetValue(); + if (channel.minorNumber != program.channel.minorNumber || channel.majorNumber != program.channel.majorNumber) + { + continue; + } + // this sample code does not currently check OTT + match = true; + } + if (!match && listCount > 0) + { + continue; + } + } + // this sample code does not currently filter on external id list + matches.push_back(program); + } + ProgramGuideResponseType response; + response.programList = DataModel::List(matches.data(), matches.size()); helper.Success(response); } @@ -258,7 +301,7 @@ bool ChannelManager::HandleRecordProgram(const chip::CharSpan & programIdentifie for (auto & program : mPrograms) { std::string nextIdString(program.identifier.data(), program.identifier.size()); - if (strcmp(idString.c_str(), nextIdString.c_str()) == 0) + if (nextIdString == idString) { program.recordingFlag = MakeOptional(static_cast(shouldRecordSeries ? 2 : 1)); } @@ -276,7 +319,7 @@ bool ChannelManager::HandleCancelRecordProgram(const chip::CharSpan & programIde for (auto & program : mPrograms) { std::string nextIdString(program.identifier.data(), program.identifier.size()); - if (strcmp(idString.c_str(), nextIdString.c_str()) == 0) + if (nextIdString == idString) { program.recordingFlag = MakeOptional(static_cast(0)); } diff --git a/examples/tv-app/tv-common/clusters/media-playback/MediaPlaybackManager.cpp b/examples/tv-app/tv-common/clusters/media-playback/MediaPlaybackManager.cpp index 6eb71bd53a96bd..fe220ce612e7d5 100644 --- a/examples/tv-app/tv-common/clusters/media-playback/MediaPlaybackManager.cpp +++ b/examples/tv-app/tv-common/clusters/media-playback/MediaPlaybackManager.cpp @@ -277,42 +277,32 @@ void MediaPlaybackManager::HandleStartOver(CommandResponseHelper>( { chip::app::DataModel::MakeNullable(chip::CharSpan("displayName2", 12)) }) }) } }; - TrackType mActiveTextTrack = { chip::CharSpan("activeTextTrackId_0", 19), - chip::app::DataModel::Nullable( - { chip::CharSpan("languageCode1", 13), - chip::Optional>( - { chip::app::DataModel::MakeNullable(chip::CharSpan("displayName1", 12)) }) }) }; + TrackType mActiveTextTrack = {}; std::vector mAvailableTextTracks = { { chip::CharSpan("activeTextTrackId_0", 19), chip::app::DataModel::Nullable( diff --git a/src/app/clusters/media-playback-server/media-playback-server.cpp b/src/app/clusters/media-playback-server/media-playback-server.cpp index a23a2d9e2a5c77..ea8f00270aaf30 100644 --- a/src/app/clusters/media-playback-server/media-playback-server.cpp +++ b/src/app/clusters/media-playback-server/media-playback-server.cpp @@ -575,7 +575,10 @@ bool emberAfMediaPlaybackClusterActivateAudioTrackCallback( Delegate * delegate = GetDelegate(endpoint); VerifyOrExit(isDelegateNull(delegate, endpoint) != true, err = CHIP_ERROR_INCORRECT_STATE); { - delegate->HandleActivateAudioTrack(trackId, audioOutputIndex); + if (!delegate->HandleActivateAudioTrack(trackId, audioOutputIndex)) + { + status = Status::InvalidInState; + } } exit: @@ -605,7 +608,10 @@ bool emberAfMediaPlaybackClusterActivateTextTrackCallback( Delegate * delegate = GetDelegate(endpoint); VerifyOrExit(isDelegateNull(delegate, endpoint) != true, err = CHIP_ERROR_INCORRECT_STATE); { - delegate->HandleActivateTextTrack(trackId); + if (!delegate->HandleActivateTextTrack(trackId)) + { + status = Status::InvalidInState; + } } exit: