blob: f71cab0bf0e1c6bcbcc3b81939f55c175a1d4925 [file] [log] [blame]
/**
*
* Copyright (c) 2020-2022 Project CHIP Authors
*
* 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.
*/
#import <Foundation/Foundation.h>
#import "ConversionUtils.hpp"
@implementation ConversionUtils
+ (CHIP_ERROR)convertToCppAppParamsInfoFrom:(AppParameters * _Nonnull)objCAppParameters outAppParams:(AppParams &)outAppParams
{
VerifyOrReturnError(objCAppParameters != nil, CHIP_ERROR_INVALID_ARGUMENT);
if (objCAppParameters.rotatingDeviceIdUniqueId != nil) {
chip::ByteSpan rotatingDeviceIdUniqueId
= chip::ByteSpan(static_cast<const uint8_t *>(objCAppParameters.rotatingDeviceIdUniqueId.bytes),
objCAppParameters.rotatingDeviceIdUniqueId.length);
outAppParams.SetRotatingDeviceIdUniqueId(MakeOptional(rotatingDeviceIdUniqueId));
}
return CHIP_NO_ERROR;
}
+ (CHIP_ERROR)convertToCppTargetEndpointInfoFrom:(ContentApp * _Nonnull)objCContentApp
outTargetEndpointInfo:(TargetEndpointInfo &)outTargetEndpointInfo
{
VerifyOrReturnError(objCContentApp.isInitialized, CHIP_ERROR_INVALID_ARGUMENT);
outTargetEndpointInfo.Initialize(objCContentApp.endpointId);
for (NSNumber * clusterId in objCContentApp.clusterIds) {
VerifyOrReturnError(outTargetEndpointInfo.AddCluster([clusterId unsignedIntValue]), CHIP_ERROR_INVALID_ARGUMENT);
}
return CHIP_NO_ERROR;
}
+ (CHIP_ERROR)convertToCppDiscoveredNodeDataFrom:(DiscoveredNodeData * _Nonnull)objCDiscoveredNodeData
outDiscoveredNodeData:(chip::Dnssd::DiscoveredNodeData &)outDiscoveredNodeData
{
// setting CommissionNodeData
outDiscoveredNodeData.commissionData.deviceType = objCDiscoveredNodeData.deviceType;
outDiscoveredNodeData.commissionData.vendorId = objCDiscoveredNodeData.vendorId;
outDiscoveredNodeData.commissionData.productId = objCDiscoveredNodeData.productId;
outDiscoveredNodeData.commissionData.longDiscriminator = objCDiscoveredNodeData.longDiscriminator;
outDiscoveredNodeData.commissionData.commissioningMode = objCDiscoveredNodeData.commissioningMode;
outDiscoveredNodeData.commissionData.pairingHint = objCDiscoveredNodeData.pairingHint;
chip::Platform::CopyString(outDiscoveredNodeData.commissionData.deviceName, chip::Dnssd::kMaxDeviceNameLen + 1,
[objCDiscoveredNodeData.deviceName UTF8String]);
outDiscoveredNodeData.commissionData.rotatingIdLen = objCDiscoveredNodeData.rotatingIdLen;
memcpy(
outDiscoveredNodeData.commissionData.rotatingId, objCDiscoveredNodeData.rotatingId, objCDiscoveredNodeData.rotatingIdLen);
// setting CommonResolutionData
outDiscoveredNodeData.resolutionData.port = objCDiscoveredNodeData.port;
chip::Platform::CopyString(outDiscoveredNodeData.resolutionData.hostName, chip::Dnssd::kHostNameMaxLength + 1,
[objCDiscoveredNodeData.hostName UTF8String]);
outDiscoveredNodeData.resolutionData.interfaceId = chip::Inet::InterfaceId(objCDiscoveredNodeData.platformInterface);
outDiscoveredNodeData.resolutionData.numIPs = objCDiscoveredNodeData.numIPs;
for (size_t i = 0; i < objCDiscoveredNodeData.numIPs; i++) {
chip::Inet::IPAddress::FromString(
[objCDiscoveredNodeData.ipAddresses[i] UTF8String], outDiscoveredNodeData.resolutionData.ipAddress[i]);
}
return CHIP_NO_ERROR;
}
+ (CHIP_ERROR)convertToCppTargetVideoPlayerInfoFrom:(VideoPlayer * _Nonnull)objCVideoPlayer
outTargetVideoPlayerInfo:(TargetVideoPlayerInfo &)outTargetVideoPlayerInfo
{
VerifyOrReturnError(objCVideoPlayer.isInitialized, CHIP_ERROR_INVALID_ARGUMENT);
ReturnErrorOnFailure(outTargetVideoPlayerInfo.Initialize(objCVideoPlayer.nodeId, objCVideoPlayer.fabricIndex, nullptr, nullptr,
objCVideoPlayer.vendorId, objCVideoPlayer.productId, objCVideoPlayer.deviceType, [objCVideoPlayer.deviceName UTF8String]));
for (ContentApp * contentApp in objCVideoPlayer.contentApps) {
TargetEndpointInfo * endpoint = outTargetVideoPlayerInfo.GetOrAddEndpoint(contentApp.endpointId);
VerifyOrReturnError(endpoint != nullptr, CHIP_ERROR_INCORRECT_STATE);
ReturnErrorOnFailure([ConversionUtils convertToCppTargetEndpointInfoFrom:contentApp outTargetEndpointInfo:*endpoint]);
}
return CHIP_NO_ERROR;
}
+ (ContentApp *)convertToObjCContentAppFrom:(TargetEndpointInfo * _Nonnull)cppTargetEndpointInfo
{
ContentApp * objCContentApp = [ContentApp new];
if (cppTargetEndpointInfo->IsInitialized()) {
objCContentApp.endpointId = cppTargetEndpointInfo->GetEndpointId();
objCContentApp.clusterIds = [NSMutableArray new];
chip::ClusterId * clusterIds = cppTargetEndpointInfo->GetClusters();
for (size_t i = 0; i < kMaxNumberOfClustersPerEndpoint && clusterIds[i] != chip::kInvalidClusterId; i++) {
objCContentApp.clusterIds[i] = @(clusterIds[i]);
}
objCContentApp.isInitialized = true;
}
return objCContentApp;
}
+ (DiscoveredNodeData *)convertToObjCDiscoveredNodeDataFrom:(const chip::Dnssd::DiscoveredNodeData * _Nonnull)cppDiscoveredNodedata
{
DiscoveredNodeData * objCDiscoveredNodeData = [DiscoveredNodeData new];
// from CommissionNodeData
objCDiscoveredNodeData.deviceType = cppDiscoveredNodedata->commissionData.deviceType;
objCDiscoveredNodeData.vendorId = cppDiscoveredNodedata->commissionData.vendorId;
objCDiscoveredNodeData.productId = cppDiscoveredNodedata->commissionData.productId;
objCDiscoveredNodeData.longDiscriminator = cppDiscoveredNodedata->commissionData.longDiscriminator;
objCDiscoveredNodeData.commissioningMode = cppDiscoveredNodedata->commissionData.commissioningMode;
objCDiscoveredNodeData.pairingHint = cppDiscoveredNodedata->commissionData.pairingHint;
objCDiscoveredNodeData.deviceName = [NSString stringWithCString:cppDiscoveredNodedata->commissionData.deviceName
encoding:NSASCIIStringEncoding];
objCDiscoveredNodeData.rotatingIdLen = cppDiscoveredNodedata->commissionData.rotatingIdLen;
objCDiscoveredNodeData.rotatingId = cppDiscoveredNodedata->commissionData.rotatingId;
objCDiscoveredNodeData.instanceName = [NSString stringWithCString:cppDiscoveredNodedata->commissionData.instanceName
encoding:NSASCIIStringEncoding];
// from CommonResolutionData
objCDiscoveredNodeData.port = cppDiscoveredNodedata->resolutionData.port;
objCDiscoveredNodeData.hostName = [NSString stringWithCString:cppDiscoveredNodedata->resolutionData.hostName
encoding:NSASCIIStringEncoding];
objCDiscoveredNodeData.platformInterface = cppDiscoveredNodedata->resolutionData.interfaceId.GetPlatformInterface();
objCDiscoveredNodeData.numIPs = cppDiscoveredNodedata->resolutionData.numIPs;
if (cppDiscoveredNodedata->resolutionData.numIPs > 0) {
objCDiscoveredNodeData.ipAddresses = [NSMutableArray new];
}
for (size_t i = 0; i < cppDiscoveredNodedata->resolutionData.numIPs; i++) {
char addrCString[chip::Inet::IPAddress::kMaxStringLength];
cppDiscoveredNodedata->resolutionData.ipAddress->ToString(addrCString, chip::Inet::IPAddress::kMaxStringLength);
objCDiscoveredNodeData.ipAddresses[i] = [NSString stringWithCString:addrCString encoding:NSASCIIStringEncoding];
}
return objCDiscoveredNodeData;
}
+ (VideoPlayer *)convertToObjCVideoPlayerFrom:(TargetVideoPlayerInfo * _Nonnull)cppTargetVideoPlayerInfo
{
VideoPlayer * objCVideoPlayer = [VideoPlayer new];
if (cppTargetVideoPlayerInfo->IsInitialized()) {
objCVideoPlayer.nodeId = cppTargetVideoPlayerInfo->GetNodeId();
objCVideoPlayer.fabricIndex = cppTargetVideoPlayerInfo->GetFabricIndex();
objCVideoPlayer.vendorId = cppTargetVideoPlayerInfo->GetVendorId();
objCVideoPlayer.productId = cppTargetVideoPlayerInfo->GetProductId();
objCVideoPlayer.deviceType = cppTargetVideoPlayerInfo->GetDeviceType();
objCVideoPlayer.isConnected = (cppTargetVideoPlayerInfo->GetOperationalDeviceProxy() != nil);
objCVideoPlayer.deviceName = [NSString stringWithCString:cppTargetVideoPlayerInfo->GetDeviceName()
encoding:NSASCIIStringEncoding];
objCVideoPlayer.contentApps = [NSMutableArray new];
TargetEndpointInfo * cppTargetEndpointInfos = cppTargetVideoPlayerInfo->GetEndpoints();
for (size_t i = 0; i < kMaxNumberOfEndpoints && cppTargetEndpointInfos[i].IsInitialized(); i++) {
objCVideoPlayer.contentApps[i] = [ConversionUtils convertToObjCContentAppFrom:&cppTargetEndpointInfos[i]];
}
objCVideoPlayer.isInitialized = true;
}
return objCVideoPlayer;
}
@end