-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathArduinoBleOtaClass.cpp
111 lines (91 loc) · 3.63 KB
/
ArduinoBleOtaClass.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include "BleOtaDefines.h"
#ifdef USE_ARDUINO_BLE_LIB
#include "ArduinoBleOtaClass.h"
#include "BleOtaUploader.h"
#include "BleOtaUuids.h"
#include "BleOtaSizes.h"
namespace
{
BLEService service(BLE_OTA_SERVICE_UUID);
BLECharacteristic rxCharacteristic(BLE_OTA_CHARACTERISTIC_UUID_RX, BLEWriteWithoutResponse, BLE_OTA_MAX_ATTR_SIZE);
BLECharacteristic txCharacteristic(BLE_OTA_CHARACTERISTIC_UUID_TX, BLERead | BLENotify, BLE_OTA_MAX_ATTR_SIZE);
BLEStringCharacteristic hwNameCharacteristic(BLE_OTA_CHARACTERISTIC_UUID_HW_NAME, BLERead, BLE_OTA_MAX_ATTR_SIZE);
BLEStringCharacteristic swNameCharacteristic(BLE_OTA_CHARACTERISTIC_UUID_SW_NAME, BLERead, BLE_OTA_MAX_ATTR_SIZE);
BLECharacteristic hwVerCharacteristic(BLE_OTA_CHARACTERISTIC_UUID_HW_VER, BLERead, sizeof(BleOtaVersion), true);
BLECharacteristic swVerCharacteristic(BLE_OTA_CHARACTERISTIC_UUID_SW_VER, BLERead, sizeof(BleOtaVersion), true);
static BleOtaSecurityCallbacks dummySecurityCallbacks{};
static BleOtaUploadCallbacks dummyUploadCallbacks{};
void onWrite(BLEDevice central, BLECharacteristic characteristic)
{
bleOtaUploader.onData(rxCharacteristic.value(), rxCharacteristic.valueLength());
}
}
ArduinoBleOTAClass::ArduinoBleOTAClass() :
securityCallbacks(&dummySecurityCallbacks),
uploadCallbacks(&dummyUploadCallbacks)
{}
bool ArduinoBleOTAClass::begin(const String& deviceName, OTAStorage& storage,
const String& hwName, BleOtaVersion hwVersion,
const String& swName, BleOtaVersion swVersion,
bool enableUpload)
{
if (!BLE.begin())
return false;
BLE.setLocalName(deviceName.c_str());
BLE.setDeviceName(deviceName.c_str());
if(!begin(storage, hwName, hwVersion, swName, swVersion, enableUpload))
return false;
return BLE.advertise();
}
bool ArduinoBleOTAClass::begin(OTAStorage& storage,
const String& hwName, BleOtaVersion hwVersion,
const String& swName, BleOtaVersion swVersion,
bool enableUpload)
{
bleOtaUploader.begin(storage);
bleOtaUploader.setEnabling(enableUpload);
service.addCharacteristic(rxCharacteristic);
service.addCharacteristic(txCharacteristic);
rxCharacteristic.setEventHandler(BLEWritten, onWrite);
begin(hwName, hwVersion, swName, swVersion);
BLE.addService(service);
return BLE.setAdvertisedService(service);
}
void ArduinoBleOTAClass::begin(const String& hwName, BleOtaVersion hwVersion,
const String& swName, BleOtaVersion swVersion)
{
service.addCharacteristic(hwNameCharacteristic);
hwNameCharacteristic.setValue(hwName);
service.addCharacteristic(swNameCharacteristic);
swNameCharacteristic.setValue(swName);
service.addCharacteristic(hwVerCharacteristic);
hwVerCharacteristic.setValue((const uint8_t*)(&hwVersion), sizeof(BleOtaVersion));
service.addCharacteristic(swVerCharacteristic);
swVerCharacteristic.setValue((const uint8_t*)(&swVersion), sizeof(BleOtaVersion));
}
void ArduinoBleOTAClass::pull()
{
bleOtaUploader.pull();
}
void ArduinoBleOTAClass::enableUpload()
{
bleOtaUploader.setEnabling(true);
}
void ArduinoBleOTAClass::disableUpload()
{
bleOtaUploader.setEnabling(false);
}
void ArduinoBleOTAClass::setSecurityCallbacks(BleOtaSecurityCallbacks& cb)
{
securityCallbacks = &cb;
}
void ArduinoBleOTAClass::setUploadCallbacks(BleOtaUploadCallbacks& cb)
{
uploadCallbacks = &cb;
}
void ArduinoBleOTAClass::send(const uint8_t* data, size_t length)
{
txCharacteristic.setValue(data, length);
}
ArduinoBleOTAClass ArduinoBleOTA{};
#endif