- Phase 1 core protocol: temp_table, neg8, sensor_state, s300_parser, kpro_parser, dtc_map, sensor_defs (50/50 tests passing) - BT layer: bt_service.dart, bt_poller.dart (100ms poll, NEG8 validation) - Connection test UI: device picker, protocol selector, live sensor screen with LIVE DATA + DEBUG LOG tabs - Runtime BT permission request (Android 12+) + auto-enable Bluetooth - Android: minSdk=26, all BT+location permissions in manifest - Fixed flutter_bluetooth_serial namespace for AGP compatibility
37 lines
1.0 KiB
Dart
37 lines
1.0 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:hvbt_dash/core/protocol/temp_table.dart';
|
|
|
|
double decodeTemp(int raw) => (tempXlt[raw] + 40).toDouble();
|
|
|
|
void main() {
|
|
group('Temperature lookup table', () {
|
|
test('tempXlt has exactly 256 entries', () {
|
|
expect(tempXlt.length, equals(256));
|
|
});
|
|
|
|
test('decodeTemp(0x00) = tempXlt[0] + 40 = 190 + 40 = 230°C', () {
|
|
expect(decodeTemp(0x00), equals(230.0));
|
|
});
|
|
|
|
test('decodeTemp(0xA0) = tempXlt[160] + 40', () {
|
|
// 0xA0 = 160 decimal; tempXlt[160] = 60
|
|
expect(decodeTemp(0xA0), equals(60 + 40.0));
|
|
});
|
|
|
|
test('decodeTemp(0xFF) = tempXlt[255] + 40 = 0 + 40 = 40°C', () {
|
|
expect(decodeTemp(0xFF), equals(40.0));
|
|
});
|
|
|
|
test('decodeTemp(0x80) = tempXlt[128] + 40', () {
|
|
// 0x80 = 128; tempXlt[128] = 73
|
|
expect(decodeTemp(0x80), equals(73 + 40.0));
|
|
});
|
|
|
|
test('all table values are non-negative', () {
|
|
for (final v in tempXlt) {
|
|
expect(v, greaterThanOrEqualTo(0));
|
|
}
|
|
});
|
|
});
|
|
}
|