Skip to content

Commit 0df8838

Browse files
authored
Merge branch 'master' into bms-cell-low-temps
2 parents 536e847 + 50ef221 commit 0df8838

7 files changed

Lines changed: 0 additions & 296 deletions

File tree

inc/sp140/ble/ble_ids.h

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,27 +26,9 @@
2626

2727
// BMS service
2828
#define BMS_TELEMETRY_SERVICE_UUID "9E0F2FA3-3F2B-49C0-A6A3-3D8923062133"
29-
#define BMS_SOC_UUID "ACDEB138-3BD0-4BB3-B159-19F6F70871ED"
30-
#define BMS_VOLTAGE_UUID "AC0768DF-2F49-43D4-B23D-1DC82C90A9E9"
31-
#define BMS_CURRENT_UUID "6FEEC926-BA3C-4E65-BC71-5DB481811186"
32-
#define BMS_POWER_UUID "9DEA1343-434F-4555-A0A1-BB43FCBC68A6"
33-
#define BMS_HIGH_CELL_UUID "49267B41-560F-4CFF-ADC8-90EF85D2BE20"
34-
#define BMS_LOW_CELL_UUID "B9D01E5C-3751-4092-8B06-6D1FFF479E77"
35-
#define BMS_HIGH_TEMP_UUID "0EA08B6D-C905-4D9D-93F8-51E35DA096FC"
36-
#define BMS_LOW_TEMP_UUID "26CD6E8A-175D-4C8E-B487-DEFF0B034F2A"
37-
#define BMS_FAILURE_LEVEL_UUID "396C768B-F348-44CC-9D46-92388F25A557"
38-
#define BMS_VOLTAGE_DIFF_UUID "1C45825B-7C81-430B-8D5F-B644FFFC71BB"
39-
#define BMS_CHARGE_MOS_UUID "4D0C3E4D-E7E2-41EF-8DDD-38C4B0948F9E"
40-
#define BMS_DISCHARGE_MOS_UUID "175A2989-3442-4B69-9C84-0CE4F1BD4F4F"
41-
#define BMS_CELL_VOLTAGES_UUID "4337e58b-8462-49b2-b061-c3bf379ef4af"
42-
#define BMS_TEMPERATURES_UUID "C53898C0-C10D-435B-8B5D-B46A2E06EB53"
4329

4430
// ESC service
4531
#define ESC_TELEMETRY_SERVICE_UUID "C154DAE9-1984-40EA-B20F-5B23F9CBA0A9"
46-
#define ESC_VOLTAGE_UUID "0528ecd8-9337-4249-95e4-9aba69f6c1f4"
47-
#define ESC_CURRENT_UUID "3889e01e-7d2d-4478-b5cc-a06b803e2788"
48-
#define ESC_RPM_UUID "24dc4a84-0be3-4eba-a8c3-ed9748daa599"
49-
#define ESC_TEMPS_UUID "d087f190-5450-4fea-b9ff-17133a0b6f64"
5032

5133
// ============================================================================
5234
// Binary Packed Telemetry Characteristics (V1)

inc/sp140/ble/bms_service.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@ class NimBLEServer;
77

88
void initBmsBleService(NimBLEServer* server);
99

10-
// Legacy individual characteristic updates (can be disabled with DISABLE_LEGACY_BLE_TELEMETRY)
11-
void updateBMSTelemetry(const STR_BMS_TELEMETRY_140& telemetry);
12-
1310
// Binary packed telemetry update (V1 protocol)
1411
// bms_id: 0-3 for multi-BMS support
1512
void updateBMSPackedTelemetry(const STR_BMS_TELEMETRY_140& telemetry, uint8_t bms_id = 0);

inc/sp140/ble/esc_service.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@ class NimBLEServer;
77

88
void initEscBleService(NimBLEServer* server);
99

10-
// Legacy individual characteristic updates (can be disabled with DISABLE_LEGACY_BLE_TELEMETRY)
11-
void updateESCTelemetryBLE(const STR_ESC_TELEMETRY_140& telemetry);
12-
1310
// Binary packed telemetry update (V1 protocol)
1411
void updateESCPackedTelemetry(const STR_ESC_TELEMETRY_140& telemetry);
1512

platformio.ini

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ build_flags =
3636
-D LV_CONF_INCLUDE_SIMPLE
3737
-I inc/sp140/lvgl
3838
-D LV_LVGL_H_INCLUDE_SIMPLE
39-
; Disable legacy individual BLE characteristics (use packed binary only)
40-
-D DISABLE_LEGACY_BLE_TELEMETRY
4139

4240
build_type = debug
4341
debug_speed = 12000

src/sp140/ble/bms_service.cpp

Lines changed: 0 additions & 183 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
#include "sp140/ble.h"
66
#include "sp140/ble/ble_ids.h"
7-
#include "sp140/ble/ble_utils.h"
87

98
namespace {
109

@@ -13,29 +12,6 @@ NimBLEService* pBmsService = nullptr;
1312
// Binary packed telemetry characteristic (V1)
1413
NimBLECharacteristic* pBMSPackedTelemetry = nullptr;
1514

16-
#ifndef DISABLE_LEGACY_BLE_TELEMETRY
17-
// Legacy individual characteristics
18-
NimBLECharacteristic* pBMSSOC = nullptr;
19-
NimBLECharacteristic* pBMSVoltage = nullptr;
20-
NimBLECharacteristic* pBMSCurrent = nullptr;
21-
NimBLECharacteristic* pBMSPower = nullptr;
22-
NimBLECharacteristic* pBMSHighCell = nullptr;
23-
NimBLECharacteristic* pBMSLowCell = nullptr;
24-
NimBLECharacteristic* pBMSHighTemp = nullptr;
25-
NimBLECharacteristic* pBMSLowTemp = nullptr;
26-
NimBLECharacteristic* pBMSFailureLevel = nullptr;
27-
NimBLECharacteristic* pBMSVoltageDiff = nullptr;
28-
NimBLECharacteristic* pBMSCellVoltages = nullptr;
29-
NimBLECharacteristic* pBMSChargeMos = nullptr;
30-
NimBLECharacteristic* pBMSDischargeMos = nullptr;
31-
NimBLECharacteristic* pBMSTemperatures = nullptr;
32-
33-
// Track previous values to only notify on change
34-
uint8_t lastFailureLevel = 0;
35-
uint8_t lastChargeMos = 0;
36-
uint8_t lastDischargeMos = 0;
37-
#endif // DISABLE_LEGACY_BLE_TELEMETRY
38-
3915
} // namespace
4016

4117
void initBmsBleService(NimBLEServer* server) {
@@ -58,66 +34,6 @@ void initBmsBleService(NimBLEServer* server) {
5834
reinterpret_cast<uint8_t*>(&initialPacket),
5935
sizeof(BLE_BMS_Telemetry_V1));
6036

61-
#ifndef DISABLE_LEGACY_BLE_TELEMETRY
62-
// Legacy individual characteristics
63-
pBMSSOC = pBmsService->createCharacteristic(
64-
NimBLEUUID(BMS_SOC_UUID), NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY);
65-
66-
pBMSVoltage = pBmsService->createCharacteristic(
67-
NimBLEUUID(BMS_VOLTAGE_UUID), NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY);
68-
69-
pBMSCurrent = pBmsService->createCharacteristic(
70-
NimBLEUUID(BMS_CURRENT_UUID), NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY);
71-
72-
pBMSPower = pBmsService->createCharacteristic(
73-
NimBLEUUID(BMS_POWER_UUID), NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY);
74-
75-
pBMSHighCell = pBmsService->createCharacteristic(
76-
NimBLEUUID(BMS_HIGH_CELL_UUID), NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY);
77-
78-
pBMSLowCell = pBmsService->createCharacteristic(
79-
NimBLEUUID(BMS_LOW_CELL_UUID), NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY);
80-
81-
pBMSHighTemp = pBmsService->createCharacteristic(
82-
NimBLEUUID(BMS_HIGH_TEMP_UUID), NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY);
83-
84-
pBMSLowTemp = pBmsService->createCharacteristic(
85-
NimBLEUUID(BMS_LOW_TEMP_UUID), NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY);
86-
87-
pBMSFailureLevel = pBmsService->createCharacteristic(
88-
NimBLEUUID(BMS_FAILURE_LEVEL_UUID), NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY);
89-
90-
pBMSVoltageDiff = pBmsService->createCharacteristic(
91-
NimBLEUUID(BMS_VOLTAGE_DIFF_UUID), NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY);
92-
93-
pBMSCellVoltages = pBmsService->createCharacteristic(
94-
NimBLEUUID(BMS_CELL_VOLTAGES_UUID), NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY);
95-
96-
pBMSChargeMos = pBmsService->createCharacteristic(
97-
NimBLEUUID(BMS_CHARGE_MOS_UUID), NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY);
98-
99-
pBMSDischargeMos = pBmsService->createCharacteristic(
100-
NimBLEUUID(BMS_DISCHARGE_MOS_UUID), NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY);
101-
102-
pBMSTemperatures = pBmsService->createCharacteristic(
103-
NimBLEUUID(BMS_TEMPERATURES_UUID),
104-
NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY);
105-
106-
// Ensure characteristics have deterministic startup values.
107-
uint16_t initial_cell_values[BMS_CELLS_NUM] = {0};
108-
pBMSCellVoltages->setValue(
109-
reinterpret_cast<uint8_t*>(initial_cell_values),
110-
BMS_CELLS_NUM * sizeof(uint16_t));
111-
112-
uint8_t initial_flag = 0;
113-
pBMSChargeMos->setValue(&initial_flag, sizeof(initial_flag));
114-
pBMSDischargeMos->setValue(&initial_flag, sizeof(initial_flag));
115-
116-
uint8_t initial_temps[17] = {0};
117-
initial_temps[0] = 0x00; // No valid sensors initially (bitmap = 0x00)
118-
pBMSTemperatures->setValue(initial_temps, 17);
119-
#endif // DISABLE_LEGACY_BLE_TELEMETRY
120-
12137
pBmsService->start();
12238
}
12339

@@ -156,102 +72,3 @@ void updateBMSPackedTelemetry(const STR_BMS_TELEMETRY_140& telemetry, uint8_t bm
15672
pBMSPackedTelemetry->notify();
15773
}
15874
}
159-
160-
#ifndef DISABLE_LEGACY_BLE_TELEMETRY
161-
// Legacy individual characteristic updates
162-
void updateBMSTelemetry(const STR_BMS_TELEMETRY_140& telemetry) {
163-
if (pBmsService == nullptr) {
164-
return; // Not initialized yet.
165-
}
166-
167-
float soc = telemetry.soc;
168-
float voltage = telemetry.battery_voltage;
169-
float current = telemetry.battery_current;
170-
float power = telemetry.power;
171-
float highCell = telemetry.highest_cell_voltage;
172-
float lowCell = telemetry.lowest_cell_voltage;
173-
float highTemp = telemetry.highest_temperature;
174-
float lowTemp = telemetry.lowest_temperature;
175-
float voltageDiff = telemetry.voltage_differential;
176-
177-
if (pBMSSOC) pBMSSOC->setValue(soc);
178-
if (pBMSVoltage) pBMSVoltage->setValue(voltage);
179-
if (pBMSCurrent) pBMSCurrent->setValue(current);
180-
if (pBMSPower) pBMSPower->setValue(power);
181-
if (pBMSHighCell) pBMSHighCell->setValue(highCell);
182-
if (pBMSLowCell) pBMSLowCell->setValue(lowCell);
183-
if (pBMSHighTemp) pBMSHighTemp->setValue(highTemp);
184-
if (pBMSLowTemp) pBMSLowTemp->setValue(lowTemp);
185-
if (pBMSVoltageDiff) pBMSVoltageDiff->setValue(voltageDiff);
186-
187-
if (pBMSCellVoltages) {
188-
uint16_t cell_millivolts[BMS_CELLS_NUM];
189-
for (uint8_t i = 0; i < BMS_CELLS_NUM; i++) {
190-
cell_millivolts[i] = static_cast<uint16_t>(telemetry.cell_voltages[i] * 1000.0f);
191-
}
192-
pBMSCellVoltages->setValue(
193-
reinterpret_cast<uint8_t*>(cell_millivolts),
194-
BMS_CELLS_NUM * sizeof(uint16_t));
195-
}
196-
197-
// Update temperatures characteristic
198-
// Format (17 bytes): bitmap(1) + 8×int16_t temperatures (deci-degrees C)
199-
// Sensor mapping: [0]=MOS, [1]=Balance, [2]=T1, [3]=T2, [4]=T3, [5]=T4, [6-7]=Reserved
200-
if (pBMSTemperatures) {
201-
uint8_t temp_buffer[17];
202-
uint8_t validBitmap = 0;
203-
204-
// Bytes 1-16: 8×int16_t temperatures in deci-degrees C (0.1°C resolution)
205-
int16_t* temps = reinterpret_cast<int16_t*>(&temp_buffer[1]);
206-
const float sensorTemps[6] = {
207-
telemetry.mos_temperature,
208-
telemetry.balance_temperature,
209-
telemetry.t1_temperature,
210-
telemetry.t2_temperature,
211-
telemetry.t3_temperature,
212-
telemetry.t4_temperature
213-
};
214-
215-
for (uint8_t i = 0; i < 6; i++) {
216-
bool isValid = !isnan(sensorTemps[i]);
217-
218-
if (isValid) {
219-
validBitmap |= static_cast<uint8_t>(1U << i);
220-
}
221-
temps[i] = isValid ? static_cast<int16_t>(sensorTemps[i] * 10.0f) : 0;
222-
}
223-
224-
temp_buffer[0] = validBitmap;
225-
temps[6] = 0; // [6] Reserved
226-
temps[7] = 0; // [7] Reserved
227-
228-
pBMSTemperatures->setValue(temp_buffer, 17);
229-
}
230-
231-
// Handle state-change characteristics - only notify on change
232-
setAndNotifyOnChange(pBMSFailureLevel, telemetry.battery_fail_level, lastFailureLevel);
233-
setAndNotifyOnChange(pBMSChargeMos, static_cast<uint8_t>(telemetry.is_charge_mos ? 1 : 0), lastChargeMos);
234-
setAndNotifyOnChange(pBMSDischargeMos, static_cast<uint8_t>(telemetry.is_discharge_mos ? 1 : 0), lastDischargeMos);
235-
236-
if (!deviceConnected) {
237-
return; // No notifications needed without a subscriber.
238-
}
239-
240-
if (pBMSSOC) pBMSSOC->notify();
241-
if (pBMSVoltage) pBMSVoltage->notify();
242-
if (pBMSCurrent) pBMSCurrent->notify();
243-
if (pBMSPower) pBMSPower->notify();
244-
if (pBMSHighCell) pBMSHighCell->notify();
245-
if (pBMSLowCell) pBMSLowCell->notify();
246-
if (pBMSHighTemp) pBMSHighTemp->notify();
247-
if (pBMSLowTemp) pBMSLowTemp->notify();
248-
if (pBMSVoltageDiff) pBMSVoltageDiff->notify();
249-
if (pBMSTemperatures) pBMSTemperatures->notify();
250-
// Note: pBMSFailureLevel, pBMSChargeMos, pBMSDischargeMos notify separately above, only on change
251-
}
252-
#else
253-
// Stub when legacy telemetry is disabled
254-
void updateBMSTelemetry(const STR_BMS_TELEMETRY_140& telemetry) {
255-
(void)telemetry; // Suppress unused parameter warning
256-
}
257-
#endif // DISABLE_LEGACY_BLE_TELEMETRY

src/sp140/ble/esc_service.cpp

Lines changed: 0 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,6 @@ NimBLEService* pEscService = nullptr;
1212
// Binary packed telemetry characteristic (V1)
1313
NimBLECharacteristic* pESCPackedTelemetry = nullptr;
1414

15-
#ifndef DISABLE_LEGACY_BLE_TELEMETRY
16-
// Legacy individual characteristics
17-
NimBLECharacteristic* pESCVoltage = nullptr;
18-
NimBLECharacteristic* pESCCurrent = nullptr;
19-
NimBLECharacteristic* pESCRPM = nullptr;
20-
NimBLECharacteristic* pESCTemps = nullptr;
21-
22-
struct EscTempsPacket {
23-
float mos_temp;
24-
float cap_temp;
25-
float mcu_temp;
26-
float motor_temp;
27-
};
28-
#endif // DISABLE_LEGACY_BLE_TELEMETRY
29-
3015
} // namespace
3116

3217
void initEscBleService(NimBLEServer* server) {
@@ -48,33 +33,6 @@ void initEscBleService(NimBLEServer* server) {
4833
reinterpret_cast<uint8_t*>(&initialPacket),
4934
sizeof(BLE_ESC_Telemetry_V1));
5035

51-
#ifndef DISABLE_LEGACY_BLE_TELEMETRY
52-
// Legacy individual characteristics
53-
pESCVoltage = pEscService->createCharacteristic(
54-
NimBLEUUID(ESC_VOLTAGE_UUID), NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY);
55-
56-
pESCCurrent = pEscService->createCharacteristic(
57-
NimBLEUUID(ESC_CURRENT_UUID), NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY);
58-
59-
pESCRPM = pEscService->createCharacteristic(
60-
NimBLEUUID(ESC_RPM_UUID), NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY);
61-
62-
pESCTemps = pEscService->createCharacteristic(
63-
NimBLEUUID(ESC_TEMPS_UUID), NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::NOTIFY);
64-
65-
// Ensure deterministic startup values.
66-
float initialFloat = 0.0f;
67-
int32_t initialRpm = 0;
68-
69-
if (pESCVoltage) pESCVoltage->setValue(initialFloat);
70-
if (pESCCurrent) pESCCurrent->setValue(initialFloat);
71-
if (pESCRPM) pESCRPM->setValue(initialRpm);
72-
if (pESCTemps) {
73-
EscTempsPacket temps = {0.0f, 0.0f, 0.0f, 0.0f};
74-
pESCTemps->setValue(reinterpret_cast<uint8_t*>(&temps), sizeof(temps));
75-
}
76-
#endif // DISABLE_LEGACY_BLE_TELEMETRY
77-
7836
pEscService->start();
7937
}
8038

@@ -108,42 +66,3 @@ void updateESCPackedTelemetry(const STR_ESC_TELEMETRY_140& telemetry) {
10866
pESCPackedTelemetry->notify();
10967
}
11068
}
111-
112-
#ifndef DISABLE_LEGACY_BLE_TELEMETRY
113-
// Legacy individual characteristic updates
114-
void updateESCTelemetryBLE(const STR_ESC_TELEMETRY_140& telemetry) {
115-
if (pEscService == nullptr) {
116-
return;
117-
}
118-
119-
float voltage = telemetry.volts;
120-
float current = telemetry.amps;
121-
int32_t rpm = static_cast<int32_t>(telemetry.eRPM);
122-
// motor_temp is NaN when sensor is disconnected/invalid.
123-
EscTempsPacket temps = {
124-
telemetry.mos_temp,
125-
telemetry.cap_temp,
126-
telemetry.mcu_temp,
127-
telemetry.motor_temp
128-
};
129-
130-
if (pESCVoltage) pESCVoltage->setValue(voltage);
131-
if (pESCCurrent) pESCCurrent->setValue(current);
132-
if (pESCRPM) pESCRPM->setValue(rpm);
133-
if (pESCTemps) pESCTemps->setValue(reinterpret_cast<uint8_t*>(&temps), sizeof(temps));
134-
135-
if (!deviceConnected) {
136-
return; // No notifications needed without a subscriber.
137-
}
138-
139-
if (pESCVoltage) pESCVoltage->notify();
140-
if (pESCCurrent) pESCCurrent->notify();
141-
if (pESCRPM) pESCRPM->notify();
142-
if (pESCTemps) pESCTemps->notify();
143-
}
144-
#else
145-
// Stub when legacy telemetry is disabled
146-
void updateESCTelemetryBLE(const STR_ESC_TELEMETRY_140& telemetry) {
147-
(void)telemetry; // Suppress unused parameter warning
148-
}
149-
#endif // DISABLE_LEGACY_BLE_TELEMETRY

src/sp140/sp140.ino

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -393,9 +393,6 @@ void updateBLETask(void *pvParameters) {
393393
// Update packed binary telemetry (always enabled)
394394
updateBMSPackedTelemetry(newBmsTelemetry, 0); // bms_id=0 for primary BMS
395395

396-
// Update legacy BLE characteristics (can be disabled with DISABLE_LEGACY_BLE_TELEMETRY)
397-
updateBMSTelemetry(newBmsTelemetry);
398-
399396
// Update controller telemetry at same 10Hz rate as BMS
400397
// Gather sensor data from barometer and ESP32
401398
float altitude = getAltitude(deviceData);
@@ -1234,9 +1231,6 @@ void updateESCBLETask(void *pvParameters) {
12341231
updateESCPackedTelemetry(newEscTelemetry);
12351232
lastPackedUpdateMs = now;
12361233
}
1237-
1238-
// Update legacy BLE characteristics (can be disabled with DISABLE_LEGACY_BLE_TELEMETRY)
1239-
updateESCTelemetryBLE(newEscTelemetry);
12401234
}
12411235

12421236
// Add a small delay to prevent task starvation

0 commit comments

Comments
 (0)