1010#include " SecretsHelper.h"
1111#include " Arduino_DebugUtils.h"
1212#include " Utility/LEDFeedback/LEDFeedback.h"
13+ #if !defined(ARDUINO_SAMD_MKRGSM1400) && !defined(ARDUINO_SAMD_MKRNB1500) && !defined(ARDUINO_SAMD_MKRWAN1300) && !defined(ARDUINO_SAMD_MKRWAN1310)
14+ #define BOARD_HAS_BLE
15+ #endif
16+ #ifdef BOARD_HAS_BLE
17+ #include < ArduinoBLE.h>
18+ #include " utility/HCI.h"
19+ #endif
20+
1321#define PROVISIONING_SERVICEID_FOR_AGENTMANAGER 0xB1
1422
15- ClaimingHandlerClass::ClaimingHandlerClass (AgentsManagerClass &agc ) {
16- _agentManager = &agc ;
23+ ClaimingHandlerClass::ClaimingHandlerClass () {
24+ _agentManager = &AgentsManagerClass::getInstance () ;
1725}
1826
1927bool ClaimingHandlerClass::begin (SecureElement *secureElement, String *uhwid, ClearStoredCredentialsHandler clearStoredCredentials) {
@@ -29,6 +37,10 @@ bool ClaimingHandlerClass::begin(SecureElement *secureElement, String *uhwid, Cl
2937 return false ;
3038 }
3139
40+ if (!_agentManager->addRequestHandler (RequestType::GET_BLE_MAC_ADDRESS, getBLEMacAddressRequestCb)) {
41+ return false ;
42+ }
43+
3244 if (!_agentManager->addReturnTimestampCallback (setTimestamp)) {
3345 return false ;
3446 }
@@ -55,8 +67,9 @@ void ClaimingHandlerClass::poll() {
5567 _agentManager->poll ();
5668
5769 switch (_receivedEvent) {
58- case ClaimingReqEvents::GET_ID: getIdReqHandler (); break ;
59- case ClaimingReqEvents::RESET: resetStoredCredReqHandler (); break ;
70+ case ClaimingReqEvents::GET_ID: getIdReqHandler (); break ;
71+ case ClaimingReqEvents::RESET: resetStoredCredReqHandler (); break ;
72+ case ClaimingReqEvents::GET_BLE_MAC_ADDRESS: getBLEMacAddressReqHandler (); break ;
6073 }
6174 _receivedEvent = ClaimingReqEvents::NONE;
6275 return ;
@@ -117,6 +130,35 @@ void ClaimingHandlerClass::resetStoredCredReqHandler() {
117130
118131}
119132
133+ void ClaimingHandlerClass::getBLEMacAddressReqHandler () {
134+ uint8_t mac[6 ] = { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 };
135+ #ifdef BOARD_HAS_BLE
136+ bool activated = false ;
137+ ConfiguratorAgent * connectedAgent = _agentManager->getConnectedAgent ();
138+ if (!_agentManager->isBLEAgentEnabled () || (connectedAgent != nullptr &&
139+ connectedAgent->getAgentType () != ConfiguratorAgent::AgentTypes::BLE)) {
140+ activated = true ;
141+ BLE.begin ();
142+ }
143+
144+ HCI.readBdAddr (mac);
145+
146+ for (int i = 0 ; i < 3 ; i++){
147+ uint8_t byte = mac[i];
148+ mac[i] = mac[5 -i];
149+ mac[5 -i] = byte;
150+ }
151+ if (activated) {
152+ BLE.end ();
153+ }
154+ #endif
155+
156+ ProvisioningOutputMessage outputMsg;
157+ outputMsg.type = MessageOutputType::BLE_MAC_ADDRESS;
158+ outputMsg.m .BLEMacAddress = mac;
159+ _agentManager->sendMsg (outputMsg);
160+ }
161+
120162void ClaimingHandlerClass::getIdRequestCb () {
121163 _receivedEvent = ClaimingReqEvents::GET_ID;
122164}
@@ -129,6 +171,10 @@ void ClaimingHandlerClass::resetStoredCredRequestCb() {
129171 _receivedEvent = ClaimingReqEvents::RESET;
130172}
131173
174+ void ClaimingHandlerClass::getBLEMacAddressRequestCb () {
175+ _receivedEvent = ClaimingReqEvents::GET_BLE_MAC_ADDRESS;
176+ }
177+
132178bool ClaimingHandlerClass::sendStatus (StatusMessage msg) {
133179 ProvisioningOutputMessage statusMsg = { MessageOutputType::STATUS, { msg } };
134180 return _agentManager->sendMsg (statusMsg);
0 commit comments