@@ -56,7 +56,7 @@ void GAPClass::setManufacturerData(const uint8_t manufacturerData[], int manufac
56
56
57
57
void GAPClass::setManufacturerData (const uint16_t companyId, const uint8_t manufacturerData[], int manufacturerDataLength)
58
58
{
59
- uint8_t tmpManufacturerData[ manufacturerDataLength + 2 ] ;
59
+ uint8_t * tmpManufacturerData = ( uint8_t *) malloc ( manufacturerDataLength + 2 ) ;
60
60
tmpManufacturerData[0 ] = companyId & 0xff ;
61
61
tmpManufacturerData[1 ] = companyId >> 8 ;
62
62
memcpy (&tmpManufacturerData[2 ], manufacturerData, manufacturerDataLength);
@@ -79,7 +79,7 @@ int GAPClass::advertise()
79
79
80
80
uint8_t type = (_connectable) ? 0x00 : (_localName ? 0x02 : 0x03 );
81
81
82
- _advertising = false ;
82
+ stopAdvertise () ;
83
83
84
84
if (HCI.leSetAdvertisingParameters (_advertisingInterval, _advertisingInterval, type, 0x00 , 0x00 , directBdaddr, 0x07 , 0 ) != 0 ) {
85
85
return 0 ;
@@ -97,20 +97,20 @@ int GAPClass::advertise()
97
97
BLEUuid uuid (_advertisedServiceUuid);
98
98
int uuidLen = uuid.length ();
99
99
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);
103
103
104
- advertisingDataLen += ( 2 + uuidLen) ;
104
+ advertisingDataLen += uuidLen;
105
105
} 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);
109
109
110
- advertisingDataLen += ( 2 + _manufacturerDataLength) ;
110
+ advertisingDataLen += _manufacturerDataLength;
111
111
}
112
112
113
- if (_serviceData && _serviceDataLength > 0 && advertisingDataLen >= (_serviceDataLength + 4 )) {
113
+ if (_serviceData && _serviceDataLength > 0 && ( sizeof (advertisingData) - advertisingDataLen) >= (_serviceDataLength + 4 )) {
114
114
advertisingData[advertisingDataLen++] = _serviceDataLength + 3 ;
115
115
advertisingData[advertisingDataLen++] = 0x16 ;
116
116
0 commit comments