@@ -142,10 +142,22 @@ int BLELocalDevice::begin()
142142 randomAddress [4 ] = randomNumber[4 ];
143143 randomAddress [5 ] = randomNumber[5 ];
144144
145- if (HCI.leSetRandomAddress ((uint8_t *)randomNumber) != 0 ) {
145+ // Set Random address only when type is STATIC_RANDOM_ADDR
146+ if ((_ownBdaddrType == STATIC_RANDOM_ADDR) && (HCI.leSetRandomAddress ((uint8_t *)randomNumber) != 0 )) {
146147 end ();
147148 return 0 ;
148149 }
150+ // Save address to HCI.localAddr variable, which is used to encryption in pairing
151+ if (_ownBdaddrType == PUBLIC_ADDR){
152+ if (HCI.readBdAddr () != 0 ) {
153+ end ();
154+ return 0 ;
155+ }
156+ } else {
157+ for (int k=0 ; k<6 ; k++){
158+ HCI.localAddr [5 -k] = randomAddress[k];
159+ }
160+ }
149161
150162 uint8_t hciVer;
151163 uint16_t hciRev;
@@ -301,7 +313,17 @@ bool BLELocalDevice::disconnect()
301313String BLELocalDevice::address () const
302314{
303315 uint8_t addr[6 ] = { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 };
304- HCI.readBdAddr (addr);
316+ // return correct device address when is set to STATIC RANDOM (set by HCI)
317+ if (_ownBdaddrType == PUBLIC_ADDR) {
318+ HCI.readBdAddr (addr);
319+ } else {
320+ addr[0 ] = randomAddress[0 ];
321+ addr[1 ] = randomAddress[1 ];
322+ addr[2 ] = randomAddress[2 ];
323+ addr[3 ] = randomAddress[3 ];
324+ addr[4 ] = randomAddress[4 ];
325+ addr[5 ] = randomAddress[5 ];
326+ }
305327
306328 char result[18 ];
307329 sprintf (result, " %02x:%02x:%02x:%02x:%02x:%02x" , addr[5 ], addr[4 ], addr[3 ], addr[2 ], addr[1 ], addr[0 ]);
0 commit comments