Skip to content

Commit 0c079de

Browse files
authored
Merge branch 'master' into fix_media_input_accessinterface
2 parents 287a52a + 4c78d07 commit 0c079de

13 files changed

+124
-814
lines changed

examples/darwin-framework-tool/commands/clusters/ModelCommandBridge.mm

+3-2
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,10 @@
2525

2626
CHIP_ERROR ModelCommand::RunCommand()
2727
{
28-
MTRDeviceController * commissioner = CurrentCommissioner();
2928
ChipLogProgress(chipTool, "Sending command to node 0x" ChipLogFormatX64, ChipLogValueX64(mNodeId));
30-
auto * device = [MTRBaseDevice deviceWithNodeID:@(mNodeId) controller:commissioner];
29+
auto * device = BaseDeviceWithNodeId(mNodeId);
30+
VerifyOrReturnError(device != nil, CHIP_ERROR_INCORRECT_STATE);
31+
3132
CHIP_ERROR err = SendCommand(device, mEndPointId);
3233

3334
if (err != CHIP_NO_ERROR) {

examples/darwin-framework-tool/commands/common/CHIPCommandBridge.h

+5-2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
*/
1818

1919
#pragma once
20+
2021
#import <Matter/Matter.h>
2122
#include <commands/common/Command.h>
2223
#include <commands/common/CredentialIssuerCommands.h>
@@ -26,8 +27,6 @@
2627

2728
#include "../provider/OTAProviderDelegate.h"
2829

29-
#pragma once
30-
3130
inline constexpr char kIdentityAlpha[] = "alpha";
3231
inline constexpr char kIdentityBeta[] = "beta";
3332
inline constexpr char kIdentityGamma[] = "gamma";
@@ -91,6 +90,10 @@ class CHIPCommandBridge : public Command {
9190

9291
MTRDeviceController * GetCommissioner(const char * identity);
9392

93+
// Returns the MTRBaseDevice for the specified node ID.
94+
// Will utilize an existing PASE connection if the device is being commissioned.
95+
MTRBaseDevice * BaseDeviceWithNodeId(chip::NodeId nodeId);
96+
9497
// Will log the given string and given error (as progress if success, error
9598
// if failure).
9699
void LogNSError(const char * logString, NSError * error);

examples/darwin-framework-tool/commands/common/CHIPCommandBridge.mm

+8
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,14 @@
195195

196196
MTRDeviceController * CHIPCommandBridge::GetCommissioner(const char * identity) { return mControllers[identity]; }
197197

198+
MTRBaseDevice * CHIPCommandBridge::BaseDeviceWithNodeId(chip::NodeId nodeId)
199+
{
200+
MTRDeviceController * controller = CurrentCommissioner();
201+
VerifyOrReturnValue(controller != nil, nil);
202+
return [controller deviceBeingCommissionedWithNodeID:@(nodeId) error:nullptr]
203+
?: [MTRBaseDevice deviceWithNodeID:@(nodeId) controller:controller];
204+
}
205+
198206
void CHIPCommandBridge::StopCommissioners()
199207
{
200208
for (auto & pair : mControllers) {

examples/darwin-framework-tool/commands/delay/WaitForCommissioneeCommand.mm

+1-4
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,7 @@
2222

2323
CHIP_ERROR WaitForCommissioneeCommand::RunCommand()
2424
{
25-
MTRDeviceController * commissioner = CurrentCommissioner();
26-
VerifyOrReturnError(nil != commissioner, CHIP_ERROR_INCORRECT_STATE);
27-
28-
auto * base_device = [MTRBaseDevice deviceWithNodeID:@(mNodeId) controller:commissioner];
25+
auto * base_device = BaseDeviceWithNodeId(mNodeId);
2926
VerifyOrReturnError(base_device != nil, CHIP_ERROR_INCORRECT_STATE);
3027

3128
if (mExpireExistingSession.ValueOr(true)) {

examples/darwin-framework-tool/commands/pairing/Commands.h

+25-9
Original file line numberDiff line numberDiff line change
@@ -28,61 +28,75 @@
2828
class PairCode : public PairingCommandBridge
2929
{
3030
public:
31-
PairCode() : PairingCommandBridge("code", PairingMode::Code, PairingNetworkType::None) {}
31+
PairCode() : PairingCommandBridge("code", PairingMode::Code, CommissioningType::NoNetwork) {}
32+
};
33+
34+
class PairCodePASEOnly : public PairingCommandBridge
35+
{
36+
public:
37+
PairCodePASEOnly() : PairingCommandBridge("code-paseonly", PairingMode::Code, CommissioningType::None) {}
3238
};
3339

3440
class PairCodeWifi : public PairingCommandBridge
3541
{
3642
public:
37-
PairCodeWifi() : PairingCommandBridge("code-wifi", PairingMode::Code, PairingNetworkType::WiFi) {}
43+
PairCodeWifi() : PairingCommandBridge("code-wifi", PairingMode::Code, CommissioningType::WiFi) {}
3844
};
3945

4046
class PairCodeThread : public PairingCommandBridge
4147
{
4248
public:
43-
PairCodeThread() : PairingCommandBridge("code-thread", PairingMode::Code, PairingNetworkType::Thread) {}
49+
PairCodeThread() : PairingCommandBridge("code-thread", PairingMode::Code, CommissioningType::Thread) {}
4450
};
4551

4652
class PairBleWiFi : public PairingCommandBridge
4753
{
4854
public:
49-
PairBleWiFi() : PairingCommandBridge("ble-wifi", PairingMode::Ble, PairingNetworkType::WiFi) {}
55+
PairBleWiFi() : PairingCommandBridge("ble-wifi", PairingMode::Ble, CommissioningType::WiFi) {}
5056
};
5157

5258
class PairBleThread : public PairingCommandBridge
5359
{
5460
public:
55-
PairBleThread() : PairingCommandBridge("ble-thread", PairingMode::Ble, PairingNetworkType::Thread) {}
61+
PairBleThread() : PairingCommandBridge("ble-thread", PairingMode::Ble, CommissioningType::Thread) {}
5662
};
5763

5864
class PairAlreadyDiscoveredByIndex : public PairingCommandBridge
5965
{
6066
public:
6167
PairAlreadyDiscoveredByIndex() :
62-
PairingCommandBridge("by-index", PairingMode::AlreadyDiscoveredByIndex, PairingNetworkType::None)
68+
PairingCommandBridge("by-index", PairingMode::AlreadyDiscoveredByIndex, CommissioningType::NoNetwork)
69+
{}
70+
};
71+
72+
class PairAlreadyDiscoveredByIndexPASEOnly : public PairingCommandBridge
73+
{
74+
public:
75+
PairAlreadyDiscoveredByIndexPASEOnly() :
76+
PairingCommandBridge("by-index-paseonly", PairingMode::AlreadyDiscoveredByIndex, CommissioningType::None)
6377
{}
6478
};
6579

6680
class PairAlreadyDiscoveredByIndexWithWiFi : public PairingCommandBridge
6781
{
6882
public:
6983
PairAlreadyDiscoveredByIndexWithWiFi() :
70-
PairingCommandBridge("by-index-with-wifi", PairingMode::AlreadyDiscoveredByIndex, PairingNetworkType::WiFi)
84+
PairingCommandBridge("by-index-with-wifi", PairingMode::AlreadyDiscoveredByIndex, CommissioningType::WiFi)
7185
{}
7286
};
7387

7488
class PairAlreadyDiscoveredByIndexWithThread : public PairingCommandBridge
7589
{
7690
public:
7791
PairAlreadyDiscoveredByIndexWithThread() :
78-
PairingCommandBridge("by-index-with-thread", PairingMode::AlreadyDiscoveredByIndex, PairingNetworkType::Thread)
92+
PairingCommandBridge("by-index-with-thread", PairingMode::AlreadyDiscoveredByIndex, CommissioningType::Thread)
7993
{}
8094
};
8195

8296
class Unpair : public PairingCommandBridge
8397
{
8498
public:
85-
Unpair() : PairingCommandBridge("unpair", PairingMode::None, PairingNetworkType::None) {}
99+
Unpair() : PairingCommandBridge("unpair", PairingMode::Unpair, CommissioningType::None) {}
86100
};
87101

88102
void registerCommandsPairing(Commands & commands)
@@ -91,11 +105,13 @@ void registerCommandsPairing(Commands & commands)
91105

92106
commands_list clusterCommands = {
93107
make_unique<PairCode>(),
108+
make_unique<PairCodePASEOnly>(),
94109
make_unique<PairCodeWifi>(),
95110
make_unique<PairCodeThread>(),
96111
make_unique<PairBleWiFi>(),
97112
make_unique<PairBleThread>(),
98113
make_unique<PairAlreadyDiscoveredByIndex>(),
114+
make_unique<PairAlreadyDiscoveredByIndexPASEOnly>(),
99115
make_unique<Unpair>(),
100116
make_unique<OpenCommissioningWindowCommand>(),
101117
make_unique<PreWarmCommissioningCommand>(),

examples/darwin-framework-tool/commands/pairing/DeviceControllerDelegateBridge.mm

+5
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ - (void)controller:(MTRDeviceController *)controller commissioningSessionEstabli
5050
}
5151
ChipLogProgress(chipTool, "Pairing Success");
5252
ChipLogProgress(chipTool, "PASE establishment successful");
53+
if (_params == nil) {
54+
_commandBridge->SetCommandExitStatus(nil);
55+
return;
56+
}
57+
5358
NSError * commissionError;
5459
[_commissioner commissionNodeWithID:@(_deviceID) commissioningParams:_params error:&commissionError];
5560
if (commissionError != nil) {

examples/darwin-framework-tool/commands/pairing/PairingCommandBridge.h

+20-19
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,16 @@
2222

2323
enum class PairingMode
2424
{
25-
None,
25+
Unpair,
2626
Code,
2727
Ble,
2828
AlreadyDiscoveredByIndex,
2929
};
3030

31-
enum class PairingNetworkType
31+
enum class CommissioningType
3232
{
33-
None,
33+
None, // establish PASE only
34+
NoNetwork,
3435
WiFi,
3536
Thread,
3637
Ethernet,
@@ -39,27 +40,28 @@ enum class PairingNetworkType
3940
class PairingCommandBridge : public CHIPCommandBridge
4041
{
4142
public:
42-
PairingCommandBridge(const char * commandName, PairingMode mode, PairingNetworkType networkType) :
43-
CHIPCommandBridge(commandName), mPairingMode(mode), mNetworkType(networkType)
43+
PairingCommandBridge(const char * commandName, PairingMode mode, CommissioningType commissioningType) :
44+
CHIPCommandBridge(commandName), mPairingMode(mode), mCommissioningType(commissioningType)
4445
{
4546
AddArgument("node-id", 0, UINT64_MAX, &mNodeId);
46-
switch (networkType)
47+
switch (commissioningType)
4748
{
48-
case PairingNetworkType::None:
49-
case PairingNetworkType::Ethernet:
49+
case CommissioningType::None:
50+
case CommissioningType::NoNetwork:
51+
case CommissioningType::Ethernet:
5052
break;
51-
case PairingNetworkType::WiFi:
53+
case CommissioningType::WiFi:
5254
AddArgument("ssid", &mSSID);
5355
AddArgument("password", &mPassword);
5456
break;
55-
case PairingNetworkType::Thread:
57+
case CommissioningType::Thread:
5658
AddArgument("operationalDataset", &mOperationalDataset);
5759
break;
5860
}
5961

6062
switch (mode)
6163
{
62-
case PairingMode::None:
64+
case PairingMode::Unpair:
6365
break;
6466
case PairingMode::Code:
6567
AddArgument("payload", &mOnboardingPayload);
@@ -74,17 +76,16 @@ class PairingCommandBridge : public CHIPCommandBridge
7476
break;
7577
}
7678

77-
if (mode != PairingMode::None)
79+
if (commissioningType != CommissioningType::None)
7880
{
7981
AddArgument("country-code", &mCountryCode,
8082
"Country code to use to set the Basic Information cluster's Location attribute");
83+
AddArgument("use-device-attestation-delegate", 0, 1, &mUseDeviceAttestationDelegate,
84+
"If true, use a device attestation delegate that always wants to be notified about attestation results. "
85+
"Defaults to false.");
86+
AddArgument("device-attestation-failsafe-time", 0, UINT16_MAX, &mDeviceAttestationFailsafeTime,
87+
"If set, the time to extend the failsafe to before calling the device attestation delegate");
8188
}
82-
83-
AddArgument("use-device-attestation-delegate", 0, 1, &mUseDeviceAttestationDelegate,
84-
"If true, use a device attestation delegate that always wants to be notified about attestation results. "
85-
"Defaults to false.");
86-
AddArgument("device-attestation-failsafe-time", 0, UINT16_MAX, &mDeviceAttestationFailsafeTime,
87-
"If set, the time to extend the failsafe to before calling the device attestation delegate");
8889
}
8990

9091
/////////// CHIPCommandBridge Interface /////////
@@ -99,7 +100,7 @@ class PairingCommandBridge : public CHIPCommandBridge
99100
void SetUpDeviceControllerDelegate();
100101

101102
const PairingMode mPairingMode;
102-
const PairingNetworkType mNetworkType;
103+
const CommissioningType mCommissioningType;
103104
chip::ByteSpan mOperationalDataset;
104105
chip::ByteSpan mSSID;
105106
chip::ByteSpan mPassword;

examples/darwin-framework-tool/commands/pairing/PairingCommandBridge.mm

+31-29
Original file line numberDiff line numberDiff line change
@@ -48,48 +48,51 @@ - (void)deviceAttestationCompletedForController:(MTRDeviceController *)controlle
4848

4949
void PairingCommandBridge::SetUpDeviceControllerDelegate()
5050
{
51-
dispatch_queue_t callbackQueue = dispatch_queue_create("com.chip.pairing", DISPATCH_QUEUE_SERIAL);
5251
CHIPToolDeviceControllerDelegate * deviceControllerDelegate = [[CHIPToolDeviceControllerDelegate alloc] init];
53-
MTRCommissioningParameters * params = [[MTRCommissioningParameters alloc] init];
54-
MTRDeviceController * commissioner = CurrentCommissioner();
55-
52+
[deviceControllerDelegate setCommandBridge:this];
5653
[deviceControllerDelegate setDeviceID:mNodeId];
57-
switch (mNetworkType) {
58-
case PairingNetworkType::None:
59-
case PairingNetworkType::Ethernet:
60-
break;
61-
case PairingNetworkType::WiFi:
62-
[params setWifiSSID:[NSData dataWithBytes:mSSID.data() length:mSSID.size()]];
63-
[params setWifiCredentials:[NSData dataWithBytes:mPassword.data() length:mPassword.size()]];
64-
break;
65-
case PairingNetworkType::Thread:
66-
[params setThreadOperationalDataset:[NSData dataWithBytes:mOperationalDataset.data() length:mOperationalDataset.size()]];
67-
break;
68-
}
6954

70-
if (mUseDeviceAttestationDelegate.ValueOr(false)) {
71-
params.deviceAttestationDelegate = [[NoOpAttestationDelegate alloc] init];
72-
if (mDeviceAttestationFailsafeTime.HasValue()) {
73-
params.failSafeTimeout = @(mDeviceAttestationFailsafeTime.Value());
55+
if (mCommissioningType != CommissioningType::None) {
56+
MTRCommissioningParameters * params = [[MTRCommissioningParameters alloc] init];
57+
switch (mCommissioningType) {
58+
case CommissioningType::None:
59+
case CommissioningType::NoNetwork:
60+
case CommissioningType::Ethernet:
61+
break;
62+
case CommissioningType::WiFi:
63+
[params setWifiSSID:[NSData dataWithBytes:mSSID.data() length:mSSID.size()]];
64+
[params setWifiCredentials:[NSData dataWithBytes:mPassword.data() length:mPassword.size()]];
65+
break;
66+
case CommissioningType::Thread:
67+
[params setThreadOperationalDataset:[NSData dataWithBytes:mOperationalDataset.data() length:mOperationalDataset.size()]];
68+
break;
7469
}
75-
}
7670

77-
if (mCountryCode.HasValue()) {
78-
params.countryCode = [NSString stringWithUTF8String:mCountryCode.Value()];
71+
if (mUseDeviceAttestationDelegate.ValueOr(false)) {
72+
params.deviceAttestationDelegate = [[NoOpAttestationDelegate alloc] init];
73+
if (mDeviceAttestationFailsafeTime.HasValue()) {
74+
params.failSafeTimeout = @(mDeviceAttestationFailsafeTime.Value());
75+
}
76+
}
77+
78+
if (mCountryCode.HasValue()) {
79+
params.countryCode = [NSString stringWithUTF8String:mCountryCode.Value()];
80+
}
81+
82+
[deviceControllerDelegate setParams:params];
7983
}
8084

81-
[deviceControllerDelegate setCommandBridge:this];
82-
[deviceControllerDelegate setParams:params];
85+
MTRDeviceController * commissioner = CurrentCommissioner();
8386
[deviceControllerDelegate setCommissioner:commissioner];
84-
87+
dispatch_queue_t callbackQueue = dispatch_queue_create("com.chip.pairing", DISPATCH_QUEUE_SERIAL);
8588
[commissioner setDeviceControllerDelegate:deviceControllerDelegate queue:callbackQueue];
8689
}
8790

8891
CHIP_ERROR PairingCommandBridge::RunCommand()
8992
{
9093
NSError * error;
9194
switch (mPairingMode) {
92-
case PairingMode::None:
95+
case PairingMode::Unpair:
9396
Unpair();
9497
break;
9598
case PairingMode::Code:
@@ -155,8 +158,7 @@ - (void)deviceAttestationCompletedForController:(MTRDeviceController *)controlle
155158
void PairingCommandBridge::Unpair()
156159
{
157160
dispatch_queue_t callbackQueue = dispatch_queue_create("com.chip-tool.command", DISPATCH_QUEUE_SERIAL);
158-
MTRDeviceController * commissioner = CurrentCommissioner();
159-
auto * device = [MTRBaseDevice deviceWithNodeID:@(mNodeId) controller:commissioner];
161+
auto * device = BaseDeviceWithNodeId(mNodeId);
160162

161163
ChipLogProgress(chipTool, "Attempting to unpair device %llu", mNodeId);
162164
MTRBaseClusterOperationalCredentials * opCredsCluster =

src/controller/CommissionerDiscoveryController.cpp

+8-1
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,13 @@ void CommissionerDiscoveryController::OnUserDirectedCommissioningRequest(UDCClie
155155
return;
156156
}
157157

158+
if (state.GetProductId() == 0 && state.GetVendorId() == 0)
159+
{
160+
// this is an invalid request and should be ignored
161+
ChipLogDetail(Controller, "Ignoring the request as it's invalid. product and vendor id cannot be 0");
162+
return;
163+
}
164+
158165
mReady = false;
159166
Platform::CopyString(mCurrentInstance, state.GetInstanceName());
160167
mPendingConsent = true;
@@ -163,7 +170,7 @@ void CommissionerDiscoveryController::OnUserDirectedCommissioningRequest(UDCClie
163170
sizeof(rotatingIdString));
164171
if (err != CHIP_NO_ERROR)
165172
{
166-
ChipLogError(AppServer, "On UDC: could not convert rotating id to hex");
173+
ChipLogError(Controller, "On UDC: could not convert rotating id to hex");
167174
rotatingIdString[0] = '\0';
168175
}
169176
else

0 commit comments

Comments
 (0)