@@ -56,7 +56,7 @@ void GAPClass::setManufacturerData(const uint8_t manufacturerData[], int manufac
5656
5757void GAPClass::setManufacturerData (const uint16_t companyId, const uint8_t manufacturerData[], int manufacturerDataLength)
5858{
59- uint8_t tmpManufacturerData[ manufacturerDataLength + 2 ] ;
59+ uint8_t * tmpManufacturerData = ( uint8_t *) malloc ( manufacturerDataLength + 2 ) ;
6060 tmpManufacturerData[0 ] = companyId & 0xff ;
6161 tmpManufacturerData[1 ] = companyId >> 8 ;
6262 memcpy (&tmpManufacturerData[2 ], manufacturerData, manufacturerDataLength);
@@ -79,7 +79,7 @@ int GAPClass::advertise()
7979
8080 uint8_t type = (_connectable) ? 0x00 : (_localName ? 0x02 : 0x03 );
8181
82- _advertising = false ;
82+ stopAdvertise () ;
8383
8484 if (HCI.leSetAdvertisingParameters (_advertisingInterval, _advertisingInterval, type, 0x00 , 0x00 , directBdaddr, 0x07 , 0 ) != 0 ) {
8585 return 0 ;
@@ -97,20 +97,20 @@ int GAPClass::advertise()
9797 BLEUuid uuid (_advertisedServiceUuid);
9898 int uuidLen = uuid.length ();
9999
100- advertisingData[3 ] = 1 + uuidLen;
101- advertisingData[4 ] = (uuidLen > 2 ) ? 0x06 : 0x02 ;
102- memcpy (&advertisingData[5 ], uuid.data (), uuidLen);
100+ advertisingData[advertisingDataLen++ ] = 1 + uuidLen;
101+ advertisingData[advertisingDataLen++ ] = (uuidLen > 2 ) ? 0x06 : 0x02 ;
102+ memcpy (&advertisingData[advertisingDataLen ], uuid.data (), uuidLen);
103103
104- advertisingDataLen += ( 2 + uuidLen) ;
104+ advertisingDataLen += uuidLen;
105105 } else if (_manufacturerData && _manufacturerDataLength) {
106- advertisingData[3 ] = 1 + _manufacturerDataLength;
107- advertisingData[4 ] = 0xff ;
108- memcpy (&advertisingData[5 ], _manufacturerData, _manufacturerDataLength);
106+ advertisingData[advertisingDataLen++ ] = 1 + _manufacturerDataLength;
107+ advertisingData[advertisingDataLen++ ] = 0xff ;
108+ memcpy (&advertisingData[advertisingDataLen ], _manufacturerData, _manufacturerDataLength);
109109
110- advertisingDataLen += ( 2 + _manufacturerDataLength) ;
110+ advertisingDataLen += _manufacturerDataLength;
111111 }
112112
113- if (_serviceData && _serviceDataLength > 0 && advertisingDataLen >= (_serviceDataLength + 4 )) {
113+ if (_serviceData && _serviceDataLength > 0 && ( sizeof (advertisingData) - advertisingDataLen) >= (_serviceDataLength + 4 )) {
114114 advertisingData[advertisingDataLen++] = _serviceDataLength + 3 ;
115115 advertisingData[advertisingDataLen++] = 0x16 ;
116116
0 commit comments