still leaking in the BT stack but better

This commit is contained in:
geeksville 2020-02-23 13:54:40 -08:00
parent f9ce6a53e1
commit a45d7be922
4 changed files with 29 additions and 6 deletions

View File

@ -189,12 +189,27 @@ class MySecurity : public BLESecurityCallbacks
}
};
BLEServer *pServer;
BLEService *pDevInfo, *pUpdate;
void deinitBLE()
{
assert(pServer);
// First shutdown bluetooth
BLEDevice::deinit(false);
// do not delete this - it is dynamically allocated, but only once - statically in BLEDevice
// delete pServer->getAdvertising();
delete pUpdate;
delete pDevInfo;
delete pServer;
batteryLevelC = NULL; // Don't let anyone generate bogus notifies
destroyUpdateService();
BLEDevice::deinit(false);
btPool.reset();
}
@ -210,16 +225,16 @@ BLEServer *initBLE(std::string deviceName, std::string hwVendor, std::string swV
BLEDevice::setSecurityCallbacks(&mySecurity);
// Create the BLE Server
BLEServer *pServer = BLEDevice::createServer();
pServer = BLEDevice::createServer();
static MyServerCallbacks myCallbacks;
pServer->setCallbacks(&myCallbacks);
BLEService *pDevInfo = createDeviceInfomationService(pServer, hwVendor, swVersion, hwVersion);
pDevInfo = createDeviceInfomationService(pServer, hwVendor, swVersion, hwVersion);
// We now let users create the battery service only if they really want (not all devices have a battery)
// BLEService *pBattery = createBatteryService(pServer);
BLEService *pUpdate = createUpdateService(pServer); // We need to advertise this so our android ble scan operation can see it
pUpdate = createUpdateService(pServer); // We need to advertise this so our android ble scan operation can see it
// It seems only one service can be advertised - so for now don't advertise our updater
// pServer->getAdvertising()->addServiceUUID(pUpdate->getUUID());

View File

@ -1,7 +1,7 @@
#pragma once
#include <Arduino.h>
#define POOL_SIZE 32768
#define POOL_SIZE 16384
/**
* An allocator (and placement new operator) that allocates storage from a fixed sized buffer.

View File

@ -236,6 +236,8 @@ void bluetoothNotifyFromNum(uint32_t newValue)
}
}
BLEService *meshService;
/*
MeshBluetoothService UUID 6ba1b218-15a8-461f-9fa8-5dcae273eafd
@ -317,9 +319,13 @@ BLEService *createMeshBluetoothService(BLEServer *server)
DEBUG_MSG("*** Mesh service:\n");
service->dump();
meshService = service;
return service;
}
void destroyMeshBluetoothService() {
assert(meshService);
delete meshService;
meshFromNumCharacteristic = NULL;
}

View File

@ -284,6 +284,7 @@ void setBluetoothEnable(bool on)
bluetoothOn = on;
if (on)
{
Serial.printf("Pre BT: %u heap size", ESP.getFreeHeap());
initBluetooth();
}
else
@ -291,6 +292,7 @@ void setBluetoothEnable(bool on)
// We have to totally teardown our bluetooth objects to prevent leaks
destroyMeshBluetoothService();
deinitBLE();
Serial.printf("Shutdown BT: %u heap size", ESP.getFreeHeap());
}
}
}