@@ -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