blob: f3bdc6edfa3bc90323e53a7b69dd027ecbc41781 [file] [log] [blame]
/*
*
* Copyright (c) 2023-2024 Project CHIP Authors
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include "core/CastingPlayer.h"
#include "core/CastingPlayerDiscovery.h"
#include "core/IdentificationDeclarationOptions.h"
#include "core/Types.h"
#include <LinuxCommissionableDataProvider.h>
#include <Options.h>
#include <platform/CHIPDeviceLayer.h>
/**
* @brief Matter deviceType that the Linux tv-casting-app will discover over Commissionable Node discovery (DNS-SD)
*
* 35 represents device type of Matter Video Player
*/
const uint64_t kTargetPlayerDeviceType = 35;
/**
* @brief Test values used for demo command and attribute read/subscribe calls
*/
const char kContentURL[] = "https://www.test.com/videoid";
const char kContentDisplayStr[] = "Test video";
const unsigned short kTimedInvokeCommandTimeoutMs = 5 * 1000;
const uint16_t kMinIntervalFloorSeconds = 0;
const uint16_t kMaxIntervalCeilingSeconds = 1;
/**
* @brief Singleton that reacts to CastingPlayer discovery results
*/
class DiscoveryDelegateImpl : public matter::casting::core::DiscoveryDelegate
{
private:
DiscoveryDelegateImpl(){};
static DiscoveryDelegateImpl * _discoveryDelegateImpl;
int commissionersCount = 0;
public:
static DiscoveryDelegateImpl * GetInstance();
/**
* @brief Called when a new CastingPlayer is discovered
*
* @param player the discovered CastingPlayer
*/
void HandleOnAdded(matter::casting::memory::Strong<matter::casting::core::CastingPlayer> player) override;
/**
* @brief Called when there are updates to the Attributes of a previously discovered CastingPlayer
*
* @param player the updated CastingPlayer
*/
void HandleOnUpdated(matter::casting::memory::Strong<matter::casting::core::CastingPlayer> player) override;
};
/**
* @brief Initializes a LinuxCommissionableDataProvider using configuration options provided via a LinuxDeviceOptions. It first
* checks if a setup PIN code is specified; if not, it attempts to use a temporary default passcode.
*/
CHIP_ERROR InitCommissionableDataProvider(LinuxCommissionableDataProvider & provider, LinuxDeviceOptions & options);
/**
* @brief Linux tv-casting-app's onCompleted handler for CastingPlayer.VerifyOrEstablishConnection API
*/
void ConnectionHandler(CHIP_ERROR err, matter::casting::core::CastingPlayer * castingPlayer);
#if defined(ENABLE_CHIP_SHELL)
/**
* @brief Register CHIP Shell commands for the Linux tv-casting-app CLI
*/
void RegisterCommands();
/**
* @brief Top level handler that parses text entered on the Linux tv-casting-app CLI and invokes the appropriate handler
*/
CHIP_ERROR CommandHandler(int argc, char ** argv);
/**
* @brief Prints all the commands available on the Linux tv-casting-app CLI
*/
CHIP_ERROR PrintAllCommands();
/**
* @brief Implements the "print-bindings" command
*/
void PrintBindings();
/**
* @brief Implements the "print-fabrics" command
*/
void PrintFabrics();
#endif