Skip to content

Commit

Permalink
Make commissioner passcode commissioning work for casting app using s…
Browse files Browse the repository at this point in the history
…hell commands
  • Loading branch information
chrisdecenzo committed Apr 12, 2024
1 parent b5c1885 commit 6e9862c
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 0 deletions.
33 changes: 33 additions & 0 deletions examples/tv-casting-app/linux/CastingShellCommands.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include "CastingServer.h"
#include "CastingUtils.h"
#include "app/clusters/bindings/BindingManager.h"
#include <CommissionableInit.h>
#include <inttypes.h>
#include <lib/core/CHIPCore.h>
#include <lib/shell/Commands.h>
Expand All @@ -34,6 +35,13 @@
#include <lib/support/CodeUtils.h>
#include <platform/CHIPDeviceLayer.h>

using namespace chip;
using namespace chip::DeviceLayer;

namespace {
LinuxCommissionableDataProvider gCommissionableDataProvider;
}

namespace chip {
namespace Shell {

Expand Down Expand Up @@ -120,6 +128,17 @@ static CHIP_ERROR CastingHandler(int argc, char ** argv)
int index = (int) strtol(argv[1], &eptr, 10);
return RequestCommissioning(index);
}
if (strcmp(argv[0], "setusecommissionerpasscode") == 0)
{
ChipLogProgress(DeviceLayer, "setusecommissionerpasscode");
if (argc < 2)
{
return PrintAllCommands();
}
char * eptr;
int useCP = (int) strtol(argv[1], &eptr, 10);
CastingServer::GetInstance()->SetCommissionerPasscodeEnabled(useCP == 1);
}
if (strcmp(argv[0], "launch") == 0)
{
ChipLogProgress(DeviceLayer, "launch");
Expand Down Expand Up @@ -204,6 +223,20 @@ static CHIP_ERROR CastingHandler(int argc, char ** argv)
return Server::GetInstance().SendUserDirectedCommissioningRequest(chip::Transport::PeerAddress::UDP(commissioner, port),
id);
}
if (strcmp(argv[0], "setcommissionerpasscode") == 0)
{

char * eptr;
uint32_t passcode = (uint32_t) strtol(argv[1], &eptr, 10);
LinuxDeviceOptions::GetInstance().payload.setUpPINCode = passcode;

VerifyOrDie(chip::examples::InitCommissionableDataProvider(gCommissionableDataProvider,
LinuxDeviceOptions::GetInstance()) == CHIP_NO_ERROR);

DeviceLayer::SetCommissionableDataProvider(&gCommissionableDataProvider);

CastingServer::GetInstance()->SetCommissionerPasscodeReady();
}
if (strcmp(argv[0], "testudc") == 0)
{
char * eptr;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,10 @@ class CastingServer : public AppDelegate
CHIP_ERROR InitBindingHandlers();
void InitAppDelegation();

void SetCommissionerPasscodeEnabled(bool enabled) { mUdcCommissionerPasscodeEnabled = enabled; };

void SetCommissionerPasscodeReady() { mUdcCommissionerPasscodeReady = true; };

CHIP_ERROR DiscoverCommissioners(chip::Controller::DeviceDiscoveryDelegate * deviceDiscoveryDelegate = nullptr);
const chip::Dnssd::DiscoveredNodeData *
GetDiscoveredCommissioner(int index, chip::Optional<TargetVideoPlayerInfo *> & outAssociatedConnectableVideoPlayer);
Expand Down Expand Up @@ -470,6 +474,10 @@ class CastingServer : public AppDelegate
PersistenceManager mPersistenceManager;
bool mInited = false;
bool mUdcInProgress = false;
bool mUdcCommissionerPasscodeEnabled = false;
bool mUdcCommissionerPasscodeReady = false;
char mUdcCommissionerPasscodeInstanceName[chip::Dnssd::Commission::kInstanceNameMaxLength + 1] = "";

chip::Dnssd::DiscoveredNodeData mStrNodeDataList[kMaxCachedVideoPlayers];
TargetVideoPlayerInfo mActiveTargetVideoPlayerInfo;
TargetVideoPlayerInfo mCachedTargetVideoPlayerInfo[kMaxCachedVideoPlayers];
Expand Down
24 changes: 24 additions & 0 deletions examples/tv-casting-app/tv-casting-common/src/CastingServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include "ConversionUtils.h"

#include "app/clusters/bindings/BindingManager.h"
#include <app/server/Dnssd.h>

using namespace chip;
using namespace chip::Controller;
Expand Down Expand Up @@ -193,6 +194,29 @@ CHIP_ERROR CastingServer::SendUserDirectedCommissioningRequest(chip::Transport::
{
// TODO: expose options to the higher layer
Protocols::UserDirectedCommissioning::IdentificationDeclaration id;
if (mUdcCommissionerPasscodeEnabled)
{
id.SetCommissionerPasscode(true);
if (mUdcCommissionerPasscodeReady)
{
id.SetCommissionerPasscodeReady(true);
id.SetInstanceName(mUdcCommissionerPasscodeInstanceName);
mUdcCommissionerPasscodeReady = false;
}
else
{
CHIP_ERROR err = app::DnssdServer::Instance().GetCommissionableInstanceName(
mUdcCommissionerPasscodeInstanceName, sizeof(mUdcCommissionerPasscodeInstanceName));
if (err != CHIP_NO_ERROR)
{
ChipLogError(AppServer, "Failed to get mdns instance name error: %" CHIP_ERROR_FORMAT, err.Format());
}
else
{
id.SetInstanceName(mUdcCommissionerPasscodeInstanceName);
}
}
}
return Server::GetInstance().SendUserDirectedCommissioningRequest(commissioner, id);
}

Expand Down

0 comments on commit 6e9862c

Please sign in to comment.