Skip to content

Commit badbcc0

Browse files
committed
Air quality DFU match with RangerEdge HW type
1 parent 36a31b1 commit badbcc0

File tree

3 files changed

+36
-8
lines changed

3 files changed

+36
-8
lines changed

dfu/dfu.js

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,20 @@ const FwTypeEnum = {
4747
default: 0,
4848
};
4949

50+
function normalizeHwTypeName(name) {
51+
if (name === 'rangeredge_airq_nrf52840') {
52+
return 'rangeredge_nrf52840';
53+
}
54+
return name;
55+
}
56+
57+
function formatHwTypeLabel(name) {
58+
if (name === 'rangeredge_airq_nrf52840') {
59+
return 'rangeredge_nrf52840 (AirQ)';
60+
}
61+
return name;
62+
}
63+
5064
const dfuCheckMessages = {
5165
[DfuFileCheckResult.ok]: 'DFU file looks good for this device.',
5266
[DfuFileCheckResult.warnOlderFirmware]: 'Selected firmware is older than the current device firmware. You can continue, but downgrading may not be supported.',
@@ -179,7 +193,8 @@ function setBundledStatus(message) {
179193

180194
function buildBundledLabel(entry) {
181195
const release = entry.releaseId || entry.firmwareVersion || 'unknown';
182-
const hw = entry.hwType ? `${entry.hwType}@${entry.hwVersion || '?'}` : 'unknown hardware';
196+
const hwTypeLabel = entry.hwType ? formatHwTypeLabel(entry.hwType) : 'unknown hardware';
197+
const hw = entry.hwType ? `${hwTypeLabel}@${entry.hwVersion || '?'}` : 'unknown hardware';
183198
return `${release}${hw}`;
184199
}
185200

@@ -246,7 +261,10 @@ function shouldIncludeBundledEntry(entry) {
246261
const deviceHwVersion = normalizeVersionString(dfuState.deviceInfo?.hwVersion || '');
247262
const deviceFwVersion = normalizeVersionString(dfuState.deviceInfo?.fwVersion || '');
248263

249-
if (deviceHwTypeName && entry.hwType && entry.hwType !== deviceHwTypeName) {
264+
const normalizedEntryHwType = entry.hwType ? normalizeHwTypeName(entry.hwType) : '';
265+
const normalizedDeviceHwType = deviceHwTypeName ? normalizeHwTypeName(deviceHwTypeName) : '';
266+
267+
if (normalizedDeviceHwType && normalizedEntryHwType && normalizedEntryHwType !== normalizedDeviceHwType) {
250268
return false;
251269
}
252270

@@ -543,7 +561,9 @@ function checkDfuFileName(fileName, deviceType, deviceFwVersion, deviceHwType, d
543561

544562
if (deviceHwType !== HwTypeEnum.unknown) {
545563
const hwTypeString = FileNameHwEnum[deviceHwType];
546-
if (hwTypeString !== fileHwType) {
564+
const normalizedDeviceHw = normalizeHwTypeName(hwTypeString);
565+
const normalizedFileHw = normalizeHwTypeName(fileHwType);
566+
if (normalizedDeviceHw !== normalizedFileHw) {
547567
return DfuFileCheckResult.deviceHwTypeMismatch;
548568
}
549569

hardware-types.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,13 @@ const HW_DFU_MANIFEST_URL = 'assets/dfu/manifest.json';
1717
let cachedManifest = null;
1818
let cachedHwVersionsByType = null;
1919

20+
function normalizeHwTypeName(name) {
21+
if (name === 'rangeredge_airq_nrf52840') {
22+
return 'rangeredge_nrf52840';
23+
}
24+
return name;
25+
}
26+
2027
function getHwTypeLabel(hwType) {
2128
if (Number.isFinite(hwType) && HW_TYPES.byId[hwType]) {
2229
return HW_TYPES.byId[hwType].label;
@@ -52,10 +59,11 @@ function buildHwVersionsByType(manifest) {
5259
if (!file?.hwType || !file?.hwVersion) {
5360
return;
5461
}
55-
if (!map.has(file.hwType)) {
56-
map.set(file.hwType, new Set());
62+
const normalizedHwType = normalizeHwTypeName(file.hwType);
63+
if (!map.has(normalizedHwType)) {
64+
map.set(normalizedHwType, new Set());
5765
}
58-
map.get(file.hwType).add(file.hwVersion);
66+
map.get(normalizedHwType).add(file.hwVersion);
5967
});
6068
});
6169
return map;

to-do.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
2. Decide if we should auto-generate `assets/dfu/manifest.json` from `assets/dfu/releases/` (script or manual). (Done: manifest regenerated from releases)
55
3. Add device-aware filtering so the bundled selector only shows matching `hwType` + `hwVersion`. (Done, includes v5 migration gating for v6+)
66
4. Update DFU UI copy if needed (hint text currently says `.bin or .zip` but bundled flow is `.bin`). (Partially done: “bundled” wording updated to “built‑in update”; hint still says `.bin or .zip`)
7-
5. Test service worker caching with offline mode and verify bundled DFU selection works end-to-end. (Pending)
8-
6. Add `rangeredge_airq_nrf52840` hardware type mapping (need numeric hwType ID from device firmware). (Pending)
7+
5. Test service worker caching with offline mode and verify bundled DFU selection works end-to-end. (Done)
8+
6. Treat `rangeredge_airq_nrf52840` as `rangeredge_nrf52840` for DFU selection and file checks. (Done)
99

1010
Additional changes completed:
1111
- Single source of truth for hardware types and versions via `hardware-types.js`.

0 commit comments

Comments
 (0)