Skip to content

Commit 186a816

Browse files
committed
Fix CurrentState(Playback Cluster) not report data
1 parent 77e6189 commit 186a816

File tree

4 files changed

+73
-36
lines changed

4 files changed

+73
-36
lines changed

examples/chef/common/clusters/media-input/MediaInputManager.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ MediaInputManager::MediaInputManager(chip::EndpointId endpoint):mEndpoint(endpoi
4343
Status status = Attributes::CurrentInput::Get(endpoint, &mCurrentInput);
4444

4545
if (Status::Success != status) {
46-
ChipLogError(Zcl, "Unable to save CurrentInput attribute ");
46+
ChipLogError(Zcl, "Unable to save CurrentInput attribute, err:0x%x", to_underlying(status));
4747
mCurrentInput = 1;
4848
}
4949
}
@@ -78,7 +78,7 @@ bool MediaInputManager::HandleSelectInput(const uint8_t index)
7878
// Sync the CurrentInput to attribute storage while reporting changes
7979
Status status = chip::app::Clusters::MediaInput::Attributes::CurrentInput::Set(mEndpoint, index);
8080
if (Status::Success != status) {
81-
ChipLogError(Zcl, "CurrentInput is not stored successfully");
81+
ChipLogError(Zcl, "CurrentInput is not stored successfully, err:0x%x", to_underlying(status));
8282
}
8383
return true;
8484
}
@@ -120,6 +120,7 @@ bool MediaInputManager::HandleRenameInput(const uint8_t index, const chip::CharS
120120
}
121121

122122
static std::map<chip::EndpointId, std::unique_ptr<MediaInputManager>> gMediaInputManagerInstance{};
123+
123124
void emberAfMediaInputClusterInitCallback(EndpointId endpoint)
124125
{
125126
ChipLogProgress(Zcl, "TV Linux App: MediaInput::SetDefaultDelegate, endpoint=%x", endpoint);

examples/chef/common/clusters/media-playback/MediaPlaybackManager.cpp

+64-23
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,23 @@
1616
*/
1717

1818
#include <app/util/config.h>
19-
#ifdef MATTER_DM_PLUGIN_MEDIA_PLAYBACK_SERVER
20-
#include "MediaPlaybackManager.h"
19+
#include <map>
20+
#include <string>
2121
#include <app-common/zap-generated/attributes/Accessors.h>
2222
#include <app/util/config.h>
23-
24-
#include <string>
23+
#ifdef MATTER_DM_PLUGIN_MEDIA_PLAYBACK_SERVER
24+
#include "MediaPlaybackManager.h"
2525

2626
using namespace std;
27+
using namespace chip;
28+
using namespace chip::app;
2729
using namespace chip::app::DataModel;
2830
using namespace chip::app::Clusters::MediaPlayback;
29-
using namespace chip::Uint8;
3031

3132
using chip::CharSpan;
3233
using chip::app::AttributeValueEncoder;
3334
using chip::app::CommandResponseHelper;
35+
using chip::Protocols::InteractionModel::Status;
3436

3537
PlaybackStateEnum MediaPlaybackManager::HandleGetCurrentState()
3638
{
@@ -98,11 +100,37 @@ CHIP_ERROR MediaPlaybackManager::HandleGetAvailableTextTracks(AttributeValueEnco
98100
return CHIP_NO_ERROR;
99101
});
100102
}
103+
104+
CHIP_ERROR MediaPlaybackManager::HandleSetCurrentState(chip::app::Clusters::MediaPlayback::PlaybackStateEnum currentState)
105+
{
106+
mCurrentState = currentState;
107+
108+
Status status = Attributes::CurrentState::Set(mEndpoint, currentState);
109+
110+
if (Status::Success != status) {
111+
ChipLogError(Zcl, "Unable to save CurrentState attribute, 0x%x", to_underlying(status));
112+
}
113+
114+
return CHIP_NO_ERROR;
115+
}
116+
117+
CHIP_ERROR MediaPlaybackManager::HandleSetPlaybackSpeed(float playbackSpeed)
118+
{
119+
mPlaybackSpeed = playbackSpeed;
120+
121+
Status status = Attributes::PlaybackSpeed::Set(mEndpoint, playbackSpeed);
122+
123+
if (Status::Success != status) {
124+
ChipLogError(Zcl, "Unable to set PlaybackSpeed attribute, 0x%x", to_underlying(status));
125+
}
126+
127+
return CHIP_NO_ERROR;
128+
}
101129

102130
void MediaPlaybackManager::HandlePlay(CommandResponseHelper<Commands::PlaybackResponse::Type> & helper)
103131
{
104-
mCurrentState = PlaybackStateEnum::kPlaying;
105-
mPlaybackSpeed = 1;
132+
HandleSetCurrentState(PlaybackStateEnum::kPlaying);
133+
HandleSetPlaybackSpeed(1);
106134

107135
Commands::PlaybackResponse::Type response;
108136
response.data = chip::MakeOptional(CharSpan::fromCharString("data response"));
@@ -112,8 +140,8 @@ void MediaPlaybackManager::HandlePlay(CommandResponseHelper<Commands::PlaybackRe
112140

113141
void MediaPlaybackManager::HandlePause(CommandResponseHelper<Commands::PlaybackResponse::Type> & helper)
114142
{
115-
mCurrentState = PlaybackStateEnum::kPaused;
116-
mPlaybackSpeed = 0;
143+
HandleSetCurrentState(PlaybackStateEnum::kPaused);
144+
HandleSetPlaybackSpeed(0);
117145

118146
Commands::PlaybackResponse::Type response;
119147
response.data = chip::MakeOptional(CharSpan::fromCharString("data response"));
@@ -123,8 +151,8 @@ void MediaPlaybackManager::HandlePause(CommandResponseHelper<Commands::PlaybackR
123151

124152
void MediaPlaybackManager::HandleStop(CommandResponseHelper<Commands::PlaybackResponse::Type> & helper)
125153
{
126-
mCurrentState = PlaybackStateEnum::kNotPlaying;
127-
mPlaybackSpeed = 0;
154+
HandleSetCurrentState(PlaybackStateEnum::kNotPlaying);
155+
HandleSetPlaybackSpeed(0);
128156
mPlaybackPosition = { 0, chip::app::DataModel::Nullable<uint64_t>(0) };
129157

130158
Commands::PlaybackResponse::Type response;
@@ -146,13 +174,14 @@ void MediaPlaybackManager::HandleFastForward(CommandResponseHelper<Commands::Pla
146174
return;
147175
}
148176

149-
mCurrentState = PlaybackStateEnum::kPlaying;
150-
mPlaybackSpeed = (mPlaybackSpeed <= 0 ? 1 : mPlaybackSpeed * 2);
151-
if (mPlaybackSpeed > kPlaybackMaxForwardSpeed)
177+
HandleSetCurrentState(PlaybackStateEnum::kPlaying);
178+
float playbackSpeed = (mPlaybackSpeed <= 0 ? 1 : mPlaybackSpeed * 2);
179+
if (playbackSpeed > kPlaybackMaxForwardSpeed)
152180
{
153181
// don't exceed max speed
154-
mPlaybackSpeed = kPlaybackMaxForwardSpeed;
182+
playbackSpeed = kPlaybackMaxForwardSpeed;
155183
}
184+
HandleSetPlaybackSpeed(playbackSpeed);
156185

157186
Commands::PlaybackResponse::Type response;
158187
response.data = chip::MakeOptional(CharSpan::fromCharString("data response"));
@@ -162,8 +191,8 @@ void MediaPlaybackManager::HandleFastForward(CommandResponseHelper<Commands::Pla
162191

163192
void MediaPlaybackManager::HandlePrevious(CommandResponseHelper<Commands::PlaybackResponse::Type> & helper)
164193
{
165-
mCurrentState = PlaybackStateEnum::kPlaying;
166-
mPlaybackSpeed = 1;
194+
HandleSetCurrentState(PlaybackStateEnum::kPlaying);
195+
HandleSetPlaybackSpeed(1);
167196
mPlaybackPosition = { 0, chip::app::DataModel::Nullable<uint64_t>(0) };
168197

169198
Commands::PlaybackResponse::Type response;
@@ -185,13 +214,14 @@ void MediaPlaybackManager::HandleRewind(CommandResponseHelper<Commands::Playback
185214
return;
186215
}
187216

188-
mCurrentState = PlaybackStateEnum::kPlaying;
189-
mPlaybackSpeed = (mPlaybackSpeed >= 0 ? -1 : mPlaybackSpeed * 2);
190-
if (mPlaybackSpeed < kPlaybackMaxRewindSpeed)
217+
HandleSetCurrentState(PlaybackStateEnum::kPlaying);
218+
float playbackSpeed = (mPlaybackSpeed >= 0 ? -1 : mPlaybackSpeed * 2);
219+
if (playbackSpeed < kPlaybackMaxRewindSpeed)
191220
{
192221
// don't exceed max rewind speed
193-
mPlaybackSpeed = kPlaybackMaxRewindSpeed;
222+
playbackSpeed = kPlaybackMaxRewindSpeed;
194223
}
224+
HandleSetPlaybackSpeed(playbackSpeed);
195225

196226
Commands::PlaybackResponse::Type response;
197227
response.data = chip::MakeOptional(CharSpan::fromCharString("data response"));
@@ -249,8 +279,8 @@ void MediaPlaybackManager::HandleSeek(CommandResponseHelper<Commands::PlaybackRe
249279

250280
void MediaPlaybackManager::HandleNext(CommandResponseHelper<Commands::PlaybackResponse::Type> & helper)
251281
{
252-
mCurrentState = PlaybackStateEnum::kPlaying;
253-
mPlaybackSpeed = 1;
282+
HandleSetCurrentState(PlaybackStateEnum::kPlaying);
283+
HandleSetPlaybackSpeed(1);
254284
mPlaybackPosition = { 0, chip::app::DataModel::Nullable<uint64_t>(0) };
255285

256286
Commands::PlaybackResponse::Type response;
@@ -338,4 +368,15 @@ uint16_t MediaPlaybackManager::GetClusterRevision(chip::EndpointId endpoint)
338368
return clusterRevision;
339369
}
340370

371+
static std::map<chip::EndpointId, std::unique_ptr<MediaPlaybackManager>> gMediaPlaybackManagerInstance{};
372+
373+
void emberAfMediaPlaybackClusterInitCallback(EndpointId endpoint)
374+
{
375+
ChipLogProgress(Zcl, "TV Linux App: MediaPlayback::SetDefaultDelegate, endpoint=%x", endpoint);
376+
377+
gMediaPlaybackManagerInstance[endpoint] = std::make_unique<MediaPlaybackManager>(endpoint);
378+
379+
chip::app::Clusters::MediaPlayback::SetDefaultDelegate(endpoint, gMediaPlaybackManagerInstance[endpoint].get());
380+
}
381+
341382
#endif /// MATTER_DM_PLUGIN_MEDIA_PLAYBACK_SERVER

examples/chef/common/clusters/media-playback/MediaPlaybackManager.h

+6
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ class MediaPlaybackManager : public chip::app::Clusters::MediaPlayback::Delegate
3030
using Feature = chip::app::Clusters::MediaPlayback::Feature;
3131

3232
public:
33+
MediaPlaybackManager(chip::EndpointId endpoint): mEndpoint(endpoint) { };
34+
3335
chip::app::Clusters::MediaPlayback::PlaybackStateEnum HandleGetCurrentState() override;
3436
uint64_t HandleGetStartTime() override;
3537
uint64_t HandleGetDuration() override;
@@ -42,6 +44,9 @@ class MediaPlaybackManager : public chip::app::Clusters::MediaPlayback::Delegate
4244
CHIP_ERROR HandleGetActiveTextTrack(chip::app::AttributeValueEncoder & aEncoder) override;
4345
CHIP_ERROR HandleGetAvailableTextTracks(chip::app::AttributeValueEncoder & aEncoder) override;
4446

47+
CHIP_ERROR HandleSetCurrentState(chip::app::Clusters::MediaPlayback::PlaybackStateEnum currentState);
48+
CHIP_ERROR HandleSetPlaybackSpeed(float playbackSpeed);
49+
4550
void HandlePlay(chip::app::CommandResponseHelper<PlaybackResponseType> & helper) override;
4651
void HandlePause(chip::app::CommandResponseHelper<PlaybackResponseType> & helper) override;
4752
void HandleStop(chip::app::CommandResponseHelper<PlaybackResponseType> & helper) override;
@@ -66,6 +71,7 @@ class MediaPlaybackManager : public chip::app::Clusters::MediaPlayback::Delegate
6671
uint16_t GetClusterRevision(chip::EndpointId endpoint) override;
6772

6873
protected:
74+
chip::EndpointId mEndpoint;
6975
// NOTE: it does not make sense to have default state of playing with a speed of 0, but
7076
// the CI test cases expect these values, and need to be fixed.
7177
chip::app::Clusters::MediaPlayback::PlaybackStateEnum mCurrentState =

examples/chef/common/stubs.cpp

-11
Original file line numberDiff line numberDiff line change
@@ -238,17 +238,6 @@ void emberAfLowPowerClusterInitCallback(EndpointId endpoint)
238238
}
239239
#endif
240240

241-
#ifdef MATTER_DM_PLUGIN_MEDIA_PLAYBACK_SERVER
242-
#include "media-playback/MediaPlaybackManager.h"
243-
static MediaPlaybackManager mediaPlaybackManager;
244-
245-
void emberAfMediaPlaybackClusterInitCallback(EndpointId endpoint)
246-
{
247-
ChipLogProgress(Zcl, "TV Linux App: MediaPlayback::SetDefaultDelegate");
248-
MediaPlayback::SetDefaultDelegate(endpoint, &mediaPlaybackManager);
249-
}
250-
#endif
251-
252241
#ifdef MATTER_DM_PLUGIN_TARGET_NAVIGATOR_SERVER
253242
#include "target-navigator/TargetNavigatorManager.h"
254243
static TargetNavigatorManager targetNavigatorManager;

0 commit comments

Comments
 (0)