26
26
#include < lib/support/Span.h>
27
27
#include < lib/support/ThreadOperationalDataset.h>
28
28
29
+ #include < optional>
30
+
29
31
enum class PairingMode
30
32
{
31
33
None,
@@ -44,6 +46,7 @@ enum class PairingNetworkType
44
46
None,
45
47
WiFi,
46
48
Thread,
49
+ WiFiOrThread,
47
50
};
48
51
49
52
class PairingCommand : public CHIPCommand ,
@@ -85,6 +88,11 @@ class PairingCommand : public CHIPCommand,
85
88
case PairingNetworkType::Thread:
86
89
AddArgument (" operationalDataset" , &mOperationalDataset );
87
90
break ;
91
+ case PairingNetworkType::WiFiOrThread:
92
+ AddArgument (" ssid" , &mSSID );
93
+ AddArgument (" password" , &mPassword );
94
+ AddArgument (" operationalDataset" , &mOperationalDataset );
95
+ break ;
88
96
}
89
97
90
98
switch (mode)
@@ -101,32 +109,32 @@ class PairingCommand : public CHIPCommand,
101
109
break ;
102
110
case PairingMode::Ble:
103
111
AddArgument (" skip-commissioning-complete" , 0 , 1 , &mSkipCommissioningComplete );
104
- AddArgument (" setup-pin-code" , 0 , 134217727 , &mSetupPINCode );
105
- AddArgument (" discriminator" , 0 , 4096 , &mDiscriminator );
112
+ AddArgument (" setup-pin-code" , 0 , 134217727 , &mSetupPINCode . emplace () );
113
+ AddArgument (" discriminator" , 0 , 4096 , &mDiscriminator . emplace () );
106
114
break ;
107
115
case PairingMode::OnNetwork:
108
116
AddArgument (" skip-commissioning-complete" , 0 , 1 , &mSkipCommissioningComplete );
109
- AddArgument (" setup-pin-code" , 0 , 134217727 , &mSetupPINCode );
117
+ AddArgument (" setup-pin-code" , 0 , 134217727 , &mSetupPINCode . emplace () );
110
118
AddArgument (" pase-only" , 0 , 1 , &mPaseOnly );
111
119
break ;
112
120
case PairingMode::SoftAP:
113
121
AddArgument (" skip-commissioning-complete" , 0 , 1 , &mSkipCommissioningComplete );
114
- AddArgument (" setup-pin-code" , 0 , 134217727 , &mSetupPINCode );
115
- AddArgument (" discriminator" , 0 , 4096 , &mDiscriminator );
122
+ AddArgument (" setup-pin-code" , 0 , 134217727 , &mSetupPINCode . emplace () );
123
+ AddArgument (" discriminator" , 0 , 4096 , &mDiscriminator . emplace () );
116
124
AddArgument (" device-remote-ip" , &mRemoteAddr );
117
125
AddArgument (" device-remote-port" , 0 , UINT16_MAX, &mRemotePort );
118
126
AddArgument (" pase-only" , 0 , 1 , &mPaseOnly );
119
127
break ;
120
128
case PairingMode::AlreadyDiscovered:
121
129
AddArgument (" skip-commissioning-complete" , 0 , 1 , &mSkipCommissioningComplete );
122
- AddArgument (" setup-pin-code" , 0 , 134217727 , &mSetupPINCode );
130
+ AddArgument (" setup-pin-code" , 0 , 134217727 , &mSetupPINCode . emplace () );
123
131
AddArgument (" device-remote-ip" , &mRemoteAddr );
124
132
AddArgument (" device-remote-port" , 0 , UINT16_MAX, &mRemotePort );
125
133
AddArgument (" pase-only" , 0 , 1 , &mPaseOnly );
126
134
break ;
127
135
case PairingMode::AlreadyDiscoveredByIndex:
128
136
AddArgument (" skip-commissioning-complete" , 0 , 1 , &mSkipCommissioningComplete );
129
- AddArgument (" setup-pin-code" , 0 , 134217727 , &mSetupPINCode );
137
+ AddArgument (" setup-pin-code" , 0 , 134217727 , &mSetupPINCode . emplace () );
130
138
AddArgument (" index" , 0 , UINT16_MAX, &mIndex );
131
139
AddArgument (" pase-only" , 0 , 1 , &mPaseOnly );
132
140
break ;
@@ -246,8 +254,14 @@ class PairingCommand : public CHIPCommand,
246
254
mComplex_DSTOffsets ;
247
255
248
256
uint16_t mRemotePort ;
249
- uint16_t mDiscriminator ;
250
- uint32_t mSetupPINCode ;
257
+ // mDiscriminator is only used for some situations, but in those situations
258
+ // it's mandatory. Track whether we're actually using it; the cases that do
259
+ // will emplace this optional.
260
+ std::optional<uint16_t > mDiscriminator ;
261
+ // mSetupPINCode is only used for some situations, but in those situations
262
+ // it's mandatory. Track whether we're actually using it; the cases that do
263
+ // will emplace this optional.
264
+ std::optional<uint32_t > mSetupPINCode ;
251
265
uint16_t mIndex ;
252
266
chip::ByteSpan mOperationalDataset ;
253
267
chip::ByteSpan mSSID ;
0 commit comments