12
12
// See the License for the specific language governing permissions and
13
13
// limitations under the License.
14
14
15
+ #include < credentials/FabricTable.h>
15
16
#include < esp_log.h>
16
17
#include < esp_matter_controller_client.h>
17
18
#include < esp_matter_controller_pairing_command.h>
19
+ #include < optional>
18
20
19
21
static const char *TAG = " pairing_command" ;
20
22
@@ -24,71 +26,48 @@ using namespace chip::Controller;
24
26
namespace esp_matter {
25
27
namespace controller {
26
28
27
- void pairing_command::OnStatusUpdate (DevicePairingDelegate::Status status)
28
- {
29
- switch (status) {
30
- case DevicePairingDelegate::Status::SecurePairingSuccess:
31
- ESP_LOGI (TAG, " Secure Pairing Success" );
32
- break ;
33
- case DevicePairingDelegate::Status::SecurePairingFailed:
34
- ESP_LOGI (TAG, " Secure Pairing Failed" );
35
- break ;
36
- }
37
- }
38
-
39
29
void pairing_command::OnPairingComplete (CHIP_ERROR err)
40
30
{
41
31
if (err == CHIP_NO_ERROR) {
42
- ESP_LOGI (TAG, " Pairing Success " );
32
+ ESP_LOGI (TAG, " PASE session establishment success " );
43
33
} else {
44
- ESP_LOGI (TAG, " Pairing Failure: Matter-%s" , ErrorStr (err));
34
+ ESP_LOGI (TAG, " PASE session establishment failure: Matter-%s" , ErrorStr (err));
35
+ auto &controller_instance = esp_matter::controller::matter_controller_client::get_instance ();
36
+ controller_instance.get_commissioner ()->RegisterPairingDelegate (nullptr );
45
37
}
46
- }
47
-
48
- void pairing_command::OnPairingDeleted (CHIP_ERROR err)
49
- {
50
- if (err == CHIP_NO_ERROR) {
51
- ESP_LOGI (TAG, " Pairing Deleted Success" );
52
- } else {
53
- ESP_LOGI (TAG, " Pairing Deleted Failure: Matter-%s" , ErrorStr (err));
38
+ if (m_callbacks.pase_callback ) {
39
+ m_callbacks.pase_callback (err);
54
40
}
55
41
}
56
42
57
- void pairing_command::OnCommissioningComplete (NodeId nodeId, CHIP_ERROR err )
43
+ void pairing_command::OnCommissioningSuccess (chip::PeerId peerId )
58
44
{
59
- if (err == CHIP_NO_ERROR) {
60
- ESP_LOGI (TAG, " Device commissioning completed with success - getting OperationalDeviceProxy" );
61
- auto &controller_instance = esp_matter::controller::matter_controller_client::get_instance ();
62
- controller_instance.get_commissioner ()->GetConnectedDevice (nodeId, &mOnDeviceConnectedCallback ,
63
- &mOnDeviceConnectionFailureCallback );
64
- } else {
65
- ESP_LOGI (TAG, " Device commissioning Failure: Matter%s" , ErrorStr (err));
45
+ ESP_LOGI (TAG, " Commissioning success with node %" PRIX64 " -%" PRIX64, peerId.GetCompressedFabricId (),
46
+ peerId.GetNodeId ());
47
+ auto &controller_instance = esp_matter::controller::matter_controller_client::get_instance ();
48
+ controller_instance.get_commissioner ()->RegisterPairingDelegate (nullptr );
49
+ if (m_callbacks.commissioning_success_callback ) {
50
+ auto fabric = controller_instance.get_commissioner ()->GetFabricTable ()->FindFabricWithCompressedId (
51
+ peerId.GetCompressedFabricId ());
52
+ m_callbacks.commissioning_success_callback (ScopedNodeId (fabric->GetFabricIndex (), peerId.GetNodeId ()));
66
53
}
67
54
}
68
55
69
- void pairing_command::OnDeviceConnectedFn (void *context, ExchangeManager &exchangeMgr,
70
- const SessionHandle &sessionHandle)
71
- {
72
- ESP_LOGI (TAG, " OnDeviceConnectedFn" );
73
- }
74
-
75
- void pairing_command::OnDeviceConnectionFailureFn (void *context, const ScopedNodeId &peerId, CHIP_ERROR err)
76
- {
77
- ESP_LOGI (TAG, " OnDeviceConnectionFailureFn - attempt to get OperationalDeviceProxy failed" );
78
- }
79
-
80
- CommissioningParameters pairing_command::get_commissioning_params ()
56
+ void pairing_command::OnCommissioningFailure (
57
+ chip::PeerId peerId, CHIP_ERROR error, chip::Controller::CommissioningStage stageFailed,
58
+ chip::Optional<chip::Credentials::AttestationVerificationResult> additionalErrorInfo)
81
59
{
82
- switch (m_pairing_network_type) {
83
- case NETWORK_TYPE_ETHERNET:
84
- case NETWORK_TYPE_NONE:
85
- return CommissioningParameters ();
86
- break ;
87
- default :
88
- ESP_LOGE (TAG, " Unsuppoted pairing network type" );
89
- break ;
60
+ ESP_LOGI (TAG, " Commissioning failure with node %" PRIX64 " -%" PRIX64, peerId.GetCompressedFabricId (),
61
+ peerId.GetNodeId ());
62
+ auto &controller_instance = esp_matter::controller::matter_controller_client::get_instance ();
63
+ controller_instance.get_commissioner ()->RegisterPairingDelegate (nullptr );
64
+ if (m_callbacks.commissioning_failure_callback ) {
65
+ auto fabric = controller_instance.get_commissioner ()->GetFabricTable ()->FindFabricWithCompressedId (
66
+ peerId.GetCompressedFabricId ());
67
+ m_callbacks.commissioning_failure_callback (
68
+ ScopedNodeId (fabric->GetFabricIndex (), peerId.GetNodeId ()), error, stageFailed,
69
+ additionalErrorInfo.HasValue () ? std::make_optional (additionalErrorInfo.Value ()) : std::nullopt);
90
70
}
91
- return CommissioningParameters ();
92
71
}
93
72
94
73
void pairing_command::OnDiscoveredDevice (const Dnssd::CommissionNodeData &nodeData)
@@ -104,12 +83,11 @@ void pairing_command::OnDiscoveredDevice(const Dnssd::CommissionNodeData &nodeDa
104
83
// Stop Mdns discovery. TODO: Check whether it is a right method
105
84
controller_instance.get_commissioner ()->RegisterDeviceDiscoveryDelegate (nullptr );
106
85
107
- Inet::InterfaceId interfaceId = nodeData.ipAddress [0 ].IsIPv6LinkLocal ()
108
- ? nodeData.interfaceId
109
- : Inet::InterfaceId::Null ();
86
+ Inet::InterfaceId interfaceId =
87
+ nodeData.ipAddress [0 ].IsIPv6LinkLocal () ? nodeData.interfaceId : Inet::InterfaceId::Null ();
110
88
PeerAddress peerAddress = PeerAddress::UDP (nodeData.ipAddress [0 ], port, interfaceId);
111
89
RendezvousParameters params = RendezvousParameters ().SetSetupPINCode (m_setup_pincode).SetPeerAddress (peerAddress);
112
- CommissioningParameters commissioning_params = get_commissioning_params ();
90
+ CommissioningParameters commissioning_params = CommissioningParameters ();
113
91
controller_instance.get_commissioner ()->PairDevice (m_remote_node_id, params, commissioning_params);
114
92
}
115
93
@@ -118,10 +96,9 @@ esp_err_t pairing_on_network(NodeId node_id, uint32_t pincode)
118
96
Dnssd::DiscoveryFilter filter (Dnssd::DiscoveryFilterType::kNone );
119
97
auto &controller_instance = esp_matter::controller::matter_controller_client::get_instance ();
120
98
controller_instance.get_commissioner ()->RegisterDeviceDiscoveryDelegate (&pairing_command::get_instance ());
121
- pairing_command::get_instance (). m_pairing_mode = PAIRING_MODE_ONNETWORK ;
99
+ controller_instance. get_commissioner ()-> RegisterPairingDelegate (& pairing_command::get_instance ()) ;
122
100
pairing_command::get_instance ().m_setup_pincode = pincode;
123
101
pairing_command::get_instance ().m_remote_node_id = node_id;
124
- pairing_command::get_instance ().m_pairing_network_type = NETWORK_TYPE_NONE;
125
102
if (CHIP_NO_ERROR != controller_instance.get_commissioner ()->DiscoverCommissionableNodes (filter)) {
126
103
ESP_LOGE (TAG, " Failed to discover commissionable nodes" );
127
104
return ESP_FAIL;
@@ -134,12 +111,13 @@ esp_err_t pairing_ble_wifi(NodeId node_id, uint32_t pincode, uint16_t disc, cons
134
111
{
135
112
RendezvousParameters params = RendezvousParameters ().SetSetupPINCode (pincode).SetDiscriminator (disc).SetPeerAddress (
136
113
Transport::PeerAddress::BLE ());
114
+ auto &controller_instance = esp_matter::controller::matter_controller_client::get_instance ();
115
+ controller_instance.get_commissioner ()->RegisterPairingDelegate (&pairing_command::get_instance ());
137
116
138
117
ByteSpan nameSpan (reinterpret_cast <const uint8_t *>(ssid), strlen (ssid));
139
118
ByteSpan pwdSpan (reinterpret_cast <const uint8_t *>(pwd), strlen (pwd));
140
119
CommissioningParameters commissioning_params =
141
120
CommissioningParameters ().SetWiFiCredentials (Controller::WiFiCredentials (nameSpan, pwdSpan));
142
- auto &controller_instance = esp_matter::controller::matter_controller_client::get_instance ();
143
121
controller_instance.get_commissioner ()->PairDevice (node_id, params, commissioning_params);
144
122
return ESP_OK;
145
123
}
@@ -149,10 +127,11 @@ esp_err_t pairing_ble_thread(NodeId node_id, uint32_t pincode, uint16_t disc, ui
149
127
{
150
128
RendezvousParameters params = RendezvousParameters ().SetSetupPINCode (pincode).SetDiscriminator (disc).SetPeerAddress (
151
129
Transport::PeerAddress::BLE ());
130
+ auto &controller_instance = esp_matter::controller::matter_controller_client::get_instance ();
131
+ controller_instance.get_commissioner ()->RegisterPairingDelegate (&pairing_command::get_instance ());
152
132
153
133
ByteSpan dataset_span (dataset_tlvs, dataset_len);
154
134
CommissioningParameters commissioning_params = CommissioningParameters ().SetThreadOperationalDataset (dataset_span);
155
- auto &controller_instance = esp_matter::controller::matter_controller_client::get_instance ();
156
135
controller_instance.get_commissioner ()->PairDevice (node_id, params, commissioning_params);
157
136
return ESP_OK;
158
137
}
@@ -162,7 +141,9 @@ esp_err_t pairing_code(NodeId nodeId, const char *payload)
162
141
{
163
142
CommissioningParameters commissioning_params = CommissioningParameters ();
164
143
auto &controller_instance = esp_matter::controller::matter_controller_client::get_instance ();
165
- controller_instance.get_commissioner ()->PairDevice (nodeId, payload, commissioning_params, DiscoveryType::kDiscoveryNetworkOnly );
144
+ controller_instance.get_commissioner ()->RegisterPairingDelegate (&pairing_command::get_instance ());
145
+ controller_instance.get_commissioner ()->PairDevice (nodeId, payload, commissioning_params,
146
+ DiscoveryType::kDiscoveryNetworkOnly );
166
147
return ESP_OK;
167
148
}
168
149
@@ -172,6 +153,7 @@ esp_err_t pairing_code_thread(NodeId nodeId, const char *payload, uint8_t *datas
172
153
173
154
CommissioningParameters commissioning_params = CommissioningParameters ().SetThreadOperationalDataset (dataset_span);
174
155
auto &controller_instance = esp_matter::controller::matter_controller_client::get_instance ();
156
+ controller_instance.get_commissioner ()->RegisterPairingDelegate (&pairing_command::get_instance ());
175
157
controller_instance.get_commissioner ()->PairDevice (nodeId, payload, commissioning_params, DiscoveryType::kAll );
176
158
177
159
return ESP_OK;
@@ -185,22 +167,25 @@ esp_err_t pairing_code_wifi(NodeId nodeId, const char *ssid, const char *passwor
185
167
CommissioningParameters commissioning_params =
186
168
CommissioningParameters ().SetWiFiCredentials (Controller::WiFiCredentials (nameSpan, pwdSpan));
187
169
auto &controller_instance = esp_matter::controller::matter_controller_client::get_instance ();
170
+ controller_instance.get_commissioner ()->RegisterPairingDelegate (&pairing_command::get_instance ());
188
171
controller_instance.get_commissioner ()->PairDevice (nodeId, payload, commissioning_params, DiscoveryType::kAll );
189
172
190
173
return ESP_OK;
191
174
}
192
175
193
176
esp_err_t pairing_code_wifi_thread (NodeId nodeId, const char *ssid, const char *password, const char *payload,
194
- uint8_t *dataset_buf, uint8_t dataset_len)
177
+ uint8_t *dataset_buf, uint8_t dataset_len)
195
178
{
196
179
ByteSpan nameSpan (reinterpret_cast <const uint8_t *>(ssid), strlen (ssid));
197
180
ByteSpan pwdSpan (reinterpret_cast <const uint8_t *>(password), strlen (password));
198
181
ByteSpan dataset_span (dataset_buf, dataset_len);
199
182
200
183
CommissioningParameters commissioning_params =
201
- CommissioningParameters ().SetWiFiCredentials (Controller::WiFiCredentials (nameSpan, pwdSpan)).SetThreadOperationalDataset (
202
- dataset_span);
184
+ CommissioningParameters ()
185
+ .SetWiFiCredentials (Controller::WiFiCredentials (nameSpan, pwdSpan))
186
+ .SetThreadOperationalDataset (dataset_span);
203
187
auto &controller_instance = esp_matter::controller::matter_controller_client::get_instance ();
188
+ controller_instance.get_commissioner ()->RegisterPairingDelegate (&pairing_command::get_instance ());
204
189
controller_instance.get_commissioner ()->PairDevice (nodeId, payload, commissioning_params, DiscoveryType::kAll );
205
190
206
191
return ESP_OK;
0 commit comments