16
16
*/
17
17
18
18
#include < app/util/config.h>
19
- #ifdef MATTER_DM_PLUGIN_MEDIA_PLAYBACK_SERVER
20
- #include " MediaPlaybackManager.h "
19
+ #include < map >
20
+ #include < string >
21
21
#include < app-common/zap-generated/attributes/Accessors.h>
22
22
#include < app/util/config.h>
23
-
24
- #include < string >
23
+ # ifdef MATTER_DM_PLUGIN_MEDIA_PLAYBACK_SERVER
24
+ #include " MediaPlaybackManager.h "
25
25
26
26
using namespace std ;
27
+ using namespace chip ;
28
+ using namespace chip ::app;
27
29
using namespace chip ::app::DataModel;
28
30
using namespace chip ::app::Clusters::MediaPlayback;
29
- using namespace chip ::Uint8;
30
31
31
32
using chip::CharSpan;
32
33
using chip::app::AttributeValueEncoder;
33
34
using chip::app::CommandResponseHelper;
35
+ using chip::Protocols::InteractionModel::Status;
34
36
35
37
PlaybackStateEnum MediaPlaybackManager::HandleGetCurrentState ()
36
38
{
@@ -98,11 +100,37 @@ CHIP_ERROR MediaPlaybackManager::HandleGetAvailableTextTracks(AttributeValueEnco
98
100
return CHIP_NO_ERROR;
99
101
});
100
102
}
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
+ }
101
129
102
130
void MediaPlaybackManager::HandlePlay (CommandResponseHelper<Commands::PlaybackResponse::Type> & helper)
103
131
{
104
- mCurrentState = PlaybackStateEnum::kPlaying ;
105
- mPlaybackSpeed = 1 ;
132
+ HandleSetCurrentState ( PlaybackStateEnum::kPlaying ) ;
133
+ HandleSetPlaybackSpeed ( 1 ) ;
106
134
107
135
Commands::PlaybackResponse::Type response;
108
136
response.data = chip::MakeOptional (CharSpan::fromCharString (" data response" ));
@@ -112,8 +140,8 @@ void MediaPlaybackManager::HandlePlay(CommandResponseHelper<Commands::PlaybackRe
112
140
113
141
void MediaPlaybackManager::HandlePause (CommandResponseHelper<Commands::PlaybackResponse::Type> & helper)
114
142
{
115
- mCurrentState = PlaybackStateEnum::kPaused ;
116
- mPlaybackSpeed = 0 ;
143
+ HandleSetCurrentState ( PlaybackStateEnum::kPaused ) ;
144
+ HandleSetPlaybackSpeed ( 0 ) ;
117
145
118
146
Commands::PlaybackResponse::Type response;
119
147
response.data = chip::MakeOptional (CharSpan::fromCharString (" data response" ));
@@ -123,8 +151,8 @@ void MediaPlaybackManager::HandlePause(CommandResponseHelper<Commands::PlaybackR
123
151
124
152
void MediaPlaybackManager::HandleStop (CommandResponseHelper<Commands::PlaybackResponse::Type> & helper)
125
153
{
126
- mCurrentState = PlaybackStateEnum::kNotPlaying ;
127
- mPlaybackSpeed = 0 ;
154
+ HandleSetCurrentState ( PlaybackStateEnum::kNotPlaying ) ;
155
+ HandleSetPlaybackSpeed ( 0 ) ;
128
156
mPlaybackPosition = { 0 , chip::app::DataModel::Nullable<uint64_t >(0 ) };
129
157
130
158
Commands::PlaybackResponse::Type response;
@@ -146,13 +174,14 @@ void MediaPlaybackManager::HandleFastForward(CommandResponseHelper<Commands::Pla
146
174
return ;
147
175
}
148
176
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 )
152
180
{
153
181
// don't exceed max speed
154
- mPlaybackSpeed = kPlaybackMaxForwardSpeed ;
182
+ playbackSpeed = kPlaybackMaxForwardSpeed ;
155
183
}
184
+ HandleSetPlaybackSpeed (playbackSpeed);
156
185
157
186
Commands::PlaybackResponse::Type response;
158
187
response.data = chip::MakeOptional (CharSpan::fromCharString (" data response" ));
@@ -162,8 +191,8 @@ void MediaPlaybackManager::HandleFastForward(CommandResponseHelper<Commands::Pla
162
191
163
192
void MediaPlaybackManager::HandlePrevious (CommandResponseHelper<Commands::PlaybackResponse::Type> & helper)
164
193
{
165
- mCurrentState = PlaybackStateEnum::kPlaying ;
166
- mPlaybackSpeed = 1 ;
194
+ HandleSetCurrentState ( PlaybackStateEnum::kPlaying ) ;
195
+ HandleSetPlaybackSpeed ( 1 ) ;
167
196
mPlaybackPosition = { 0 , chip::app::DataModel::Nullable<uint64_t >(0 ) };
168
197
169
198
Commands::PlaybackResponse::Type response;
@@ -185,13 +214,14 @@ void MediaPlaybackManager::HandleRewind(CommandResponseHelper<Commands::Playback
185
214
return ;
186
215
}
187
216
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 )
191
220
{
192
221
// don't exceed max rewind speed
193
- mPlaybackSpeed = kPlaybackMaxRewindSpeed ;
222
+ playbackSpeed = kPlaybackMaxRewindSpeed ;
194
223
}
224
+ HandleSetPlaybackSpeed (playbackSpeed);
195
225
196
226
Commands::PlaybackResponse::Type response;
197
227
response.data = chip::MakeOptional (CharSpan::fromCharString (" data response" ));
@@ -249,8 +279,8 @@ void MediaPlaybackManager::HandleSeek(CommandResponseHelper<Commands::PlaybackRe
249
279
250
280
void MediaPlaybackManager::HandleNext (CommandResponseHelper<Commands::PlaybackResponse::Type> & helper)
251
281
{
252
- mCurrentState = PlaybackStateEnum::kPlaying ;
253
- mPlaybackSpeed = 1 ;
282
+ HandleSetCurrentState ( PlaybackStateEnum::kPlaying ) ;
283
+ HandleSetPlaybackSpeed ( 1 ) ;
254
284
mPlaybackPosition = { 0 , chip::app::DataModel::Nullable<uint64_t >(0 ) };
255
285
256
286
Commands::PlaybackResponse::Type response;
@@ -338,4 +368,15 @@ uint16_t MediaPlaybackManager::GetClusterRevision(chip::EndpointId endpoint)
338
368
return clusterRevision;
339
369
}
340
370
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
+
341
382
#endif // / MATTER_DM_PLUGIN_MEDIA_PLAYBACK_SERVER
0 commit comments