Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Link attribute reads to Content Apps, refactor content app platform to leverage latest cluster lib conventions #12969

Merged
merged 63 commits into from
Jan 27, 2022
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
4ef5cdd
link attribute reads to Content Apps
chrisdecenzo Dec 13, 2021
8cb6fb7
Merge branch 'master' of github.com:project-chip/connectedhomeip into…
chrisdecenzo Dec 15, 2021
43ea264
address some comments
chrisdecenzo Dec 15, 2021
ec99cc2
Merge branch 'master' of github.com:project-chip/connectedhomeip into…
chrisdecenzo Dec 16, 2021
7478963
route attribute reads and writes to per-cluster handlers
chrisdecenzo Dec 16, 2021
5e5a152
Merge branch 'master' of github.com:project-chip/connectedhomeip into…
decenzo Dec 17, 2021
8505e03
refactor content app
decenzo Dec 21, 2021
8a11b4e
straggler
decenzo Dec 21, 2021
03868a3
use MEI log format commands
decenzo Dec 22, 2021
c0e2690
Merge branch 'master' of github.com:project-chip/connectedhomeip into…
decenzo Dec 22, 2021
cdc026a
fix tv-app test suites
chrisdecenzo Dec 23, 2021
5b1ea4e
fix tv-app test suites
chrisdecenzo Dec 23, 2021
ba53262
sync to TOT
chrisdecenzo Dec 23, 2021
6ded4c7
fix CI test suites
chrisdecenzo Dec 23, 2021
f31ce97
fix CI test suites
chrisdecenzo Dec 24, 2021
0152677
add bindings call
chrisdecenzo Jan 4, 2022
efd362d
sync to TOT
chrisdecenzo Jan 4, 2022
0507e85
migrate content app to use new account login delegate
chrisdecenzo Jan 4, 2022
2356cc9
refactor ContentApp to use delegates
chrisdecenzo Jan 5, 2022
d4ef9c9
Merge branch 'master' of github.com:project-chip/connectedhomeip into…
chrisdecenzo Jan 5, 2022
aa395e8
fix CI errors
chrisdecenzo Jan 5, 2022
07da92d
fix CI errors
chrisdecenzo Jan 5, 2022
71b9a43
fix CI errors
chrisdecenzo Jan 5, 2022
b8e6657
more ContentApp to app-platform directory
chrisdecenzo Jan 6, 2022
4fe3715
address issue 13144
chrisdecenzo Jan 6, 2022
bd5db22
address issue 12543
chrisdecenzo Jan 7, 2022
db9d88d
sync to TOT
chrisdecenzo Jan 12, 2022
5a97eb1
address comments
chrisdecenzo Jan 12, 2022
b04b81c
address comments
chrisdecenzo Jan 14, 2022
edd266e
fix handling of application launcher, application basic status and co…
chrisdecenzo Jan 16, 2022
55f37a7
sync TOT
chrisdecenzo Jan 16, 2022
04e3793
fix build
chrisdecenzo Jan 16, 2022
159ec20
fix android build
chrisdecenzo Jan 16, 2022
dffd77b
fix android build
chrisdecenzo Jan 16, 2022
840df4a
Merge branch 'master' of github.com:project-chip/connectedhomeip into…
chrisdecenzo Jan 17, 2022
2d39958
add Commissioner Discovery Controller to manage UDC workflow
chrisdecenzo Jan 20, 2022
0d0c71d
address comments
chrisdecenzo Jan 23, 2022
fa48726
address comments
chrisdecenzo Jan 24, 2022
fb76264
fix builds
chrisdecenzo Jan 24, 2022
d0b5b7f
fix builds
chrisdecenzo Jan 24, 2022
514cbcf
fix builds
chrisdecenzo Jan 24, 2022
9c20d42
address comments
chrisdecenzo Jan 24, 2022
024f5dd
fix potential leak on commands
chrisdecenzo Jan 24, 2022
0b147d2
fix potential leak on attribute reads
chrisdecenzo Jan 25, 2022
ea68629
fix potential leak on attribute reads
chrisdecenzo Jan 25, 2022
e176842
merge with TOT
chrisdecenzo Jan 25, 2022
f165fc7
Merge branch 'master' of github.com:project-chip/connectedhomeip into…
chrisdecenzo Jan 25, 2022
98326ef
argument and naming consistency
chrisdecenzo Jan 25, 2022
58929fd
fix android build
chrisdecenzo Jan 25, 2022
dad1adc
fix android build
chrisdecenzo Jan 25, 2022
76f19fd
fix android build
chrisdecenzo Jan 25, 2022
9edc45a
fix android build
chrisdecenzo Jan 25, 2022
8c5df04
address easy comments
chrisdecenzo Jan 25, 2022
d3cb64a
fix android build
chrisdecenzo Jan 26, 2022
f71f4ba
sync to TOT
chrisdecenzo Jan 26, 2022
c6bc7b9
fix android
chrisdecenzo Jan 26, 2022
4988e77
fix merge issue
chrisdecenzo Jan 26, 2022
b7dc8fb
optimize image size
chrisdecenzo Jan 26, 2022
6514946
fix build
chrisdecenzo Jan 26, 2022
940011d
attempt to fix CI build
chrisdecenzo Jan 26, 2022
7abcd0f
attempt to fix CI build
chrisdecenzo Jan 26, 2022
9de31b4
attempt to fix CI build
chrisdecenzo Jan 26, 2022
d37b84b
reduce dependencies
chrisdecenzo Jan 27, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 0 additions & 11 deletions examples/tv-app/linux/AppImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -206,17 +206,6 @@ ApplicationLauncherResponse ApplicationLauncherImpl::LaunchApp(Application appli
return response;
}

LaunchResponse ContentLauncherImpl::LaunchContent(std::list<Parameter> parameterList, bool autoplay, std::string data)
{
ChipLogProgress(DeviceLayer, "ContentLauncherImpl: LaunchContent autoplay=%d data=\"%s\"", autoplay ? 1 : 0, data.c_str());

LaunchResponse response;
response.err = CHIP_NO_ERROR;
response.data = "Example app data";
response.status = chip::app::Clusters::ContentLauncher::StatusEnum::kSuccess;
return response;
}

ContentAppFactoryImpl::ContentAppFactoryImpl()
{
mContentApps[1].GetAccountLogin()->SetSetupPIN(34567890);
Expand Down
22 changes: 10 additions & 12 deletions examples/tv-app/linux/AppImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@
#include <stdbool.h>
#include <stdint.h>

#include "include/content-launcher/ContentLauncherManager.h"

#if CHIP_DEVICE_CONFIG_APP_PLATFORM_ENABLED

namespace chip {
Expand Down Expand Up @@ -103,16 +105,6 @@ class DLL_EXPORT ApplicationLauncherImpl : public ApplicationLauncher
protected:
};

class DLL_EXPORT ContentLauncherImpl : public ContentLauncher
{
public:
virtual ~ContentLauncherImpl() {}

LaunchResponse LaunchContent(std::list<Parameter> parameterList, bool autoplay, std::string data) override;

protected:
};

class DLL_EXPORT MediaPlaybackImpl : public MediaPlayback
{
public:
Expand Down Expand Up @@ -143,26 +135,32 @@ class DLL_EXPORT ContentAppImpl : public ContentApp
public:
ContentAppImpl(const char * szVendorName, uint16_t vendorId, const char * szApplicationName, uint16_t productId,
bzbarsky-apple marked this conversation as resolved.
Show resolved Hide resolved
const char * szApplicationVersion);
// mContentLauncherDelegate({ "image/*", "video/*" }){};
chrisdecenzo marked this conversation as resolved.
Show resolved Hide resolved
virtual ~ContentAppImpl() {}

inline ApplicationBasic * GetApplicationBasic() override { return &mApplicationBasic; };
inline AccountLogin * GetAccountLogin() override { return &mAccountLogin; };
inline KeypadInput * GetKeypadInput() override { return &mKeypadInput; };
inline ApplicationLauncher * GetApplicationLauncher() override { return &mApplicationLauncher; };
inline ContentLauncher * GetContentLauncher() override { return &mContentLauncher; };
inline MediaPlayback * GetMediaPlayback() override { return &mMediaPlayback; };
inline TargetNavigator * GetTargetNavigator() override { return &mTargetNavigator; };
inline Channel * GetChannel() override { return &mChannel; };

inline chip::app::Clusters::ContentLauncher::Delegate * GetContentLauncherDelegate() override
{
return &mContentLauncherDelegate;
};

protected:
ApplicationBasicImpl mApplicationBasic;
AccountLoginImpl mAccountLogin;
KeypadInputImpl mKeypadInput;
ApplicationLauncherImpl mApplicationLauncher;
ContentLauncherImpl mContentLauncher;
MediaPlaybackImpl mMediaPlayback;
TargetNavigatorImpl mTargetNavigator;
ChannelImpl mChannel;

ContentLauncherManager mContentLauncherDelegate;
};

class DLL_EXPORT ContentAppFactoryImpl : public ContentAppFactory
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,20 +38,18 @@
using namespace std;
using namespace chip::AppPlatform;

ContentLauncherManager::ContentLauncherManager(std::list<std::string> acceptHeaderList, uint32_t supportedStreamingProtocols)
{
mAcceptHeaderList = acceptHeaderList;
mSupportedStreamingProtocols = supportedStreamingProtocols;
}

LaunchResponse ContentLauncherManager::HandleLaunchContent(chip::EndpointId endpointId, const std::list<Parameter> & parameterList,
bool autoplay, const chip::CharSpan & data)
{
ChipLogProgress(Zcl, "ContentLauncherManager::HandleLaunchContent ");
string dataString(data.data(), data.size());

#if CHIP_DEVICE_CONFIG_APP_PLATFORM_ENABLED
ContentApp * app = chip::AppPlatform::AppPlatform::GetInstance().GetContentAppByEndpointId(endpointId);
if (app != NULL)
{
return app->GetContentLauncher()->LaunchContent(parameterList, autoplay, dataString);
}
#endif // CHIP_DEVICE_CONFIG_APP_PLATFORM_ENABLED

// TODO: Insert code here
LaunchResponse response;
response.err = CHIP_NO_ERROR;
Expand Down Expand Up @@ -79,12 +77,11 @@ LaunchResponse ContentLauncherManager::HandleLaunchUrl(const chip::CharSpan & co
std::list<std::string> ContentLauncherManager::HandleGetAcceptHeaderList()
{
ChipLogProgress(Zcl, "ContentLauncherManager::HandleGetAcceptHeaderList");
return { "example", "example" };
return mAcceptHeaderList;
}

uint32_t ContentLauncherManager::HandleGetSupportedStreamingProtocols()
{
ChipLogProgress(Zcl, "ContentLauncherManager::HandleGetSupportedStreamingProtocols");
uint32_t streamingProtocols = 0;
return streamingProtocols;
return mSupportedStreamingProtocols;
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,22 @@
class ContentLauncherManager : public chip::app::Clusters::ContentLauncher::Delegate
{
public:
ContentLauncherManager() : ContentLauncherManager({ "example", "example" }){};
ContentLauncherManager(std::list<std::string> acceptHeaderList) :
ContentLauncherManager(
acceptHeaderList,
// chip::app::Clusters::ContentLauncher::SupportedStreamingProtocol::kDash |
chrisdecenzo marked this conversation as resolved.
Show resolved Hide resolved
static_cast<uint32_t>(chip::app::Clusters::ContentLauncher::SupportedStreamingProtocol::kHls)){};
ContentLauncherManager(std::list<std::string> acceptHeaderList, uint32_t supportedStreamingProtocols);

LaunchResponse HandleLaunchContent(chip::EndpointId endpointId, const std::list<Parameter> & parameterList, bool autoplay,
const chip::CharSpan & data) override;
LaunchResponse HandleLaunchUrl(const chip::CharSpan & contentUrl, const chip::CharSpan & displayString,
chrisdecenzo marked this conversation as resolved.
Show resolved Hide resolved
const std::list<BrandingInformation> & brandingInformation) override;
std::list<std::string> HandleGetAcceptHeaderList() override;
uint32_t HandleGetSupportedStreamingProtocols() override;

protected:
std::list<std::string> mAcceptHeaderList;
uint32_t mSupportedStreamingProtocols;
bzbarsky-apple marked this conversation as resolved.
Show resolved Hide resolved
};
5 changes: 2 additions & 3 deletions examples/tv-app/linux/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ bool emberAfBasicClusterMfgSpecificPingCallback(chip::app::CommandHandler * comm

namespace {
static ContentLauncherManager contentLauncherManager;
constexpr chip::EndpointId kContentLauncherEndpoint = 1;
} // namespace

void ApplicationInit() {}
Expand Down Expand Up @@ -121,6 +120,6 @@ int main(int argc, char * argv[])

void emberAfContentLauncherClusterInitCallback(EndpointId endpoint)
{
ChipLogProgress(Zcl, "TV Linux App: ContentLauncherManager::SetDelegate");
chip::app::Clusters::ContentLauncher::SetDelegate(kContentLauncherEndpoint, &contentLauncherManager);
ChipLogProgress(Zcl, "TV Linux App: ContentLauncherManager::SetDefaultDelegate");
chip::app::Clusters::ContentLauncher::SetDefaultDelegate(&contentLauncherManager);
chrisdecenzo marked this conversation as resolved.
Show resolved Hide resolved
}
28 changes: 16 additions & 12 deletions src/app/clusters/content-launch-server/content-launch-server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
#include <app/CommandHandler.h>
#include <app/ConcreteCommandPath.h>
#include <app/data-model/Encode.h>
#include <app/util/ContentAppPlatform.h>
#include <app/util/af.h>
#include <app/util/attribute-storage.h>
#include <list>
Expand All @@ -59,15 +60,25 @@ using namespace chip::app;
// Delegate Implementation

using chip::app::Clusters::ContentLauncher::Delegate;
using namespace chip::AppPlatform;

namespace {

Delegate * gDelegateTable[EMBER_AF_CONTENT_LAUNCH_CLUSTER_SERVER_ENDPOINT_COUNT] = { nullptr };
Delegate * gDelegate = NULL;

Delegate * GetDelegate(EndpointId endpoint)
{
uint16_t ep = emberAfFindClusterServerEndpointIndex(endpoint, chip::app::Clusters::ContentLauncher::Id);
return (ep == 0xFFFF ? NULL : gDelegateTable[ep]);
#if CHIP_DEVICE_CONFIG_APP_PLATFORM_ENABLED
ContentApp * app = chip::AppPlatform::AppPlatform::GetInstance().GetContentAppByEndpointId(endpoint);
if (app != NULL && app->GetContentLauncherDelegate() != NULL)
{
ChipLogError(Zcl, "Content Launcher returning ContentApp delegate for endpoint:%" PRIu16, endpoint);
return app->GetContentLauncherDelegate();
}
#endif // CHIP_DEVICE_CONFIG_APP_PLATFORM_ENABLED
ChipLogError(Zcl, "Content Launcher NOT returning ContentApp delegate for endpoint:%" PRIu16, endpoint);

return gDelegate;
}

bool isDelegateNull(Delegate * delegate, EndpointId endpoint)
Expand All @@ -86,16 +97,9 @@ namespace app {
namespace Clusters {
namespace ContentLauncher {

void SetDelegate(EndpointId endpoint, Delegate * delegate)
void SetDefaultDelegate(Delegate * delegate)
{
uint16_t ep = emberAfFindClusterServerEndpointIndex(endpoint, chip::app::Clusters::ContentLauncher::Id);
if (ep != 0xFFFF)
{
gDelegateTable[ep] = delegate;
}
else
{
}
gDelegate = delegate;
}

} // namespace ContentLauncher
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ namespace app {
namespace Clusters {
namespace ContentLauncher {

void SetDelegate(EndpointId endpoint, Delegate * delegate);
void SetDefaultDelegate(Delegate * delegate);

} // namespace ContentLauncher
} // namespace Clusters
Expand Down
35 changes: 9 additions & 26 deletions src/app/util/ContentApp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
*/

/**
* @file Contains shell commands for a commissionee (eg. end device) related to commissioning.
* @file Contains shell commands for a ContentApp relating to Content App platform of the Video Player.
*/

#include <app-common/zap-generated/attribute-id.h>
Expand Down Expand Up @@ -46,20 +46,18 @@ namespace AppPlatform {
EmberAfStatus ContentApp::HandleReadAttribute(ClusterId clusterId, chip::AttributeId attributeId, uint8_t * buffer,
uint16_t maxReadLength)
{
ChipLogProgress(DeviceLayer, "Read Attribute for device %s cluster %d attribute=%d)",
GetApplicationBasic()->GetApplicationName(), static_cast<uint16_t>(clusterId),
static_cast<uint16_t>(attributeId));
ChipLogProgress(DeviceLayer, "Read Attribute for device %s cluster " ChipLogFormatMEI " attribute=" ChipLogFormatMEI,
GetApplicationBasic()->GetApplicationName(), ChipLogValueMEI(clusterId), ChipLogValueMEI(attributeId));

EmberAfStatus ret = EMBER_ZCL_STATUS_FAILURE;
if (clusterId == ZCL_APPLICATION_BASIC_CLUSTER_ID)
chrisdecenzo marked this conversation as resolved.
Show resolved Hide resolved
{
ret = GetApplicationBasic()->HandleReadAttribute(attributeId, buffer, maxReadLength);
return GetApplicationBasic()->HandleReadAttribute(attributeId, buffer, maxReadLength);
}
if (clusterId == ZCL_ACCOUNT_LOGIN_CLUSTER_ID)
{
ret = GetAccountLogin()->HandleReadAttribute(attributeId, buffer, maxReadLength);
return GetAccountLogin()->HandleReadAttribute(attributeId, buffer, maxReadLength);
}
return ret;
return EMBER_ZCL_STATUS_FAILURE;
}

EmberAfStatus ContentApp::HandleWriteAttribute(ClusterId clusterId, chip::AttributeId attributeId, uint8_t * buffer)
Expand All @@ -68,17 +66,15 @@ EmberAfStatus ContentApp::HandleWriteAttribute(ClusterId clusterId, chip::Attrib
GetApplicationBasic()->GetApplicationName(), static_cast<uint16_t>(clusterId),
static_cast<uint16_t>(attributeId));

EmberAfStatus ret = EMBER_ZCL_STATUS_FAILURE;

if (clusterId == ZCL_APPLICATION_BASIC_CLUSTER_ID)
{
ret = GetApplicationBasic()->HandleWriteAttribute(attributeId, buffer);
return GetApplicationBasic()->HandleWriteAttribute(attributeId, buffer);
}
if (clusterId == ZCL_ACCOUNT_LOGIN_CLUSTER_ID)
{
ret = GetAccountLogin()->HandleWriteAttribute(attributeId, buffer);
return GetAccountLogin()->HandleWriteAttribute(attributeId, buffer);
}
return ret;
return EMBER_ZCL_STATUS_FAILURE;
}

EmberAfStatus ApplicationBasic::HandleReadAttribute(chip::AttributeId attributeId, uint8_t * buffer, uint16_t maxReadLength)
Expand Down Expand Up @@ -186,19 +182,6 @@ EmberAfStatus ApplicationLauncher::HandleWriteAttribute(chip::AttributeId attrib
return EMBER_ZCL_STATUS_FAILURE;
}

EmberAfStatus ContentLauncher::HandleReadAttribute(chip::AttributeId attributeId, uint8_t * buffer, uint16_t maxReadLength)
{
ChipLogProgress(DeviceLayer, "ContentLauncher::HandleReadAttribute: attrId=%d, maxReadLength=%d",
static_cast<uint16_t>(attributeId), maxReadLength);
return EMBER_ZCL_STATUS_FAILURE;
}

EmberAfStatus ContentLauncher::HandleWriteAttribute(chip::AttributeId attributeId, uint8_t * buffer)
{
ChipLogProgress(DeviceLayer, "ContentLauncher::HandleWriteAttribute: attrId=%d", static_cast<uint16_t>(attributeId));
return EMBER_ZCL_STATUS_FAILURE;
}

EmberAfStatus MediaPlayback::HandleReadAttribute(chip::AttributeId attributeId, uint8_t * buffer, uint16_t maxReadLength)
{
ChipLogProgress(DeviceLayer, "MediaPlayback::HandleReadAttribute: attrId=%d, maxReadLength=%d",
Expand Down
15 changes: 3 additions & 12 deletions src/app/util/ContentApp.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#include <app-common/zap-generated/cluster-objects.h>
#include <app-common/zap-generated/enums.h>
#include <app/clusters/application-launcher-server/application-launcher-server.h>
#include <app/clusters/content-launch-server/content-launch-delegate.h>
#include <app/clusters/content-launch-server/content-launch-server.h>
#include <app/clusters/target-navigator-server/target-navigator-server.h>
#include <app/util/attribute-storage.h>
Expand Down Expand Up @@ -97,17 +98,6 @@ class DLL_EXPORT ApplicationLauncher : public ContentAppCluster
EmberAfStatus HandleWriteAttribute(chip::AttributeId attributeId, uint8_t * buffer) override;
};

class DLL_EXPORT ContentLauncher : public ContentAppCluster
{
public:
virtual ~ContentLauncher() = default;

virtual LaunchResponse LaunchContent(std::list<Parameter> parameterList, bool autoplay, std::string data) = 0;

EmberAfStatus HandleReadAttribute(chip::AttributeId attributeId, uint8_t * buffer, uint16_t maxReadLength) override;
EmberAfStatus HandleWriteAttribute(chip::AttributeId attributeId, uint8_t * buffer) override;
};

class DLL_EXPORT MediaPlayback : public ContentAppCluster
{
public:
Expand Down Expand Up @@ -155,11 +145,12 @@ class DLL_EXPORT ContentApp
virtual AccountLogin * GetAccountLogin() = 0;
virtual KeypadInput * GetKeypadInput() = 0;
virtual ApplicationLauncher * GetApplicationLauncher() = 0;
virtual ContentLauncher * GetContentLauncher() = 0;
virtual MediaPlayback * GetMediaPlayback() = 0;
virtual TargetNavigator * GetTargetNavigator() = 0;
virtual Channel * GetChannel() = 0;

virtual chip::app::Clusters::ContentLauncher::Delegate * GetContentLauncherDelegate() = 0;

EmberAfStatus HandleReadAttribute(ClusterId clusterId, chip::AttributeId attributeId, uint8_t * buffer, uint16_t maxReadLength);
EmberAfStatus HandleWriteAttribute(ClusterId clusterId, chip::AttributeId attributeId, uint8_t * buffer);

Expand Down
10 changes: 1 addition & 9 deletions src/app/util/ContentAppPlatform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
*/

/**
* @file Contains shell commands for a commissionee (eg. end device) related to commissioning.
* @file Contains shell commands for a ContentApp relating to Content App platform of the Video Player.
*/

#include <app-common/zap-generated/attribute-id.h>
Expand Down Expand Up @@ -172,14 +172,6 @@ void AppPlatform::SetupAppPlatform()
static_cast<int>(emberAfEndpointFromIndex(static_cast<uint16_t>(emberAfFixedEndpointCount() - 1))) + 1);
mCurrentEndpointId = mFirstDynamicEndpointId;

{
for (int i = 0; i < emberAfFixedEndpointCount(); i++)
{
ChipLogProgress(DeviceLayer, "endpoint index=%d, id=%d", i,
static_cast<chip::EndpointId>(static_cast<int>(emberAfEndpointFromIndex(static_cast<uint16_t>(i)))));
}
}

if (mCurrentEndpointId < emberAfFixedEndpointCount())
{
mCurrentEndpointId = emberAfFixedEndpointCount();
Expand Down