@robdobsn/raftjs 1.8.5 → 1.11.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +14 -0
- package/.gitattributes +11 -0
- package/.nvmrc +1 -0
- package/TODO.md +1 -0
- package/dist/react-native/RaftAttributeHandler.d.ts +14 -0
- package/dist/react-native/RaftAttributeHandler.js +375 -0
- package/dist/react-native/RaftAttributeHandler.js.map +1 -0
- package/dist/react-native/RaftChannel.d.ts +20 -0
- package/dist/react-native/RaftChannel.js +12 -0
- package/dist/react-native/RaftChannel.js.map +1 -0
- package/dist/react-native/RaftChannelBLE.native.d.ts +95 -0
- package/dist/react-native/RaftChannelBLE.native.js +483 -0
- package/dist/react-native/RaftChannelBLE.native.js.map +1 -0
- package/dist/react-native/RaftChannelBLE.web.d.ts +40 -0
- package/dist/react-native/RaftChannelBLE.web.js +302 -0
- package/dist/react-native/RaftChannelBLE.web.js.map +1 -0
- package/dist/react-native/RaftChannelBLEFactory.d.ts +10 -0
- package/dist/react-native/RaftChannelBLEFactory.js +17 -0
- package/dist/react-native/RaftChannelBLEFactory.js.map +1 -0
- package/dist/react-native/RaftChannelBLEScanner.native.d.ts +18 -0
- package/dist/react-native/RaftChannelBLEScanner.native.js +138 -0
- package/dist/react-native/RaftChannelBLEScanner.native.js.map +1 -0
- package/dist/react-native/RaftChannelSimulated.d.ts +42 -0
- package/dist/react-native/RaftChannelSimulated.js +1001 -0
- package/dist/react-native/RaftChannelSimulated.js.map +1 -0
- package/dist/react-native/RaftChannelWebSerial.d.ts +39 -0
- package/dist/react-native/RaftChannelWebSerial.js +329 -0
- package/dist/react-native/RaftChannelWebSerial.js.map +1 -0
- package/dist/react-native/RaftChannelWebSocket.d.ts +30 -0
- package/dist/react-native/RaftChannelWebSocket.js +222 -0
- package/dist/react-native/RaftChannelWebSocket.js.map +1 -0
- package/dist/react-native/RaftCommsStats.d.ts +39 -0
- package/dist/react-native/RaftCommsStats.js +128 -0
- package/dist/react-native/RaftCommsStats.js.map +1 -0
- package/dist/react-native/RaftConnEvents.d.ts +39 -0
- package/dist/react-native/RaftConnEvents.js +54 -0
- package/dist/react-native/RaftConnEvents.js.map +1 -0
- package/dist/react-native/RaftConnector.d.ts +257 -0
- package/dist/react-native/RaftConnector.js +671 -0
- package/dist/react-native/RaftConnector.js.map +1 -0
- package/dist/react-native/RaftCustomAttrHandler.d.ts +6 -0
- package/dist/react-native/RaftCustomAttrHandler.js +93 -0
- package/dist/react-native/RaftCustomAttrHandler.js.map +1 -0
- package/dist/react-native/RaftDeviceInfo.d.ts +71 -0
- package/dist/react-native/RaftDeviceInfo.js +50 -0
- package/dist/react-native/RaftDeviceInfo.js.map +1 -0
- package/dist/react-native/RaftDeviceManager.d.ts +73 -0
- package/dist/react-native/RaftDeviceManager.js +812 -0
- package/dist/react-native/RaftDeviceManager.js.map +1 -0
- package/dist/react-native/RaftDeviceMgrIF.d.ts +19 -0
- package/dist/react-native/RaftDeviceMgrIF.js +11 -0
- package/dist/react-native/RaftDeviceMgrIF.js.map +1 -0
- package/dist/react-native/RaftDeviceMsg.d.ts +9 -0
- package/dist/react-native/RaftDeviceMsg.js +11 -0
- package/dist/react-native/RaftDeviceMsg.js.map +1 -0
- package/dist/react-native/RaftDeviceStates.d.ts +55 -0
- package/dist/react-native/RaftDeviceStates.js +81 -0
- package/dist/react-native/RaftDeviceStates.js.map +1 -0
- package/dist/react-native/RaftFileHandler.d.ts +52 -0
- package/dist/react-native/RaftFileHandler.js +502 -0
- package/dist/react-native/RaftFileHandler.js.map +1 -0
- package/dist/react-native/RaftLog.d.ts +22 -0
- package/dist/react-native/RaftLog.js +63 -0
- package/dist/react-native/RaftLog.js.map +1 -0
- package/dist/react-native/RaftMiniHDLC.d.ts +18 -0
- package/dist/react-native/RaftMiniHDLC.js +383 -0
- package/dist/react-native/RaftMiniHDLC.js.map +1 -0
- package/dist/react-native/RaftMsgHandler.d.ts +62 -0
- package/dist/react-native/RaftMsgHandler.js +511 -0
- package/dist/react-native/RaftMsgHandler.js.map +1 -0
- package/dist/react-native/RaftMsgTrackInfo.d.ts +17 -0
- package/dist/react-native/RaftMsgTrackInfo.js +42 -0
- package/dist/react-native/RaftMsgTrackInfo.js.map +1 -0
- package/dist/react-native/RaftProtocolDefs.d.ts +30 -0
- package/dist/react-native/RaftProtocolDefs.js +48 -0
- package/dist/react-native/RaftProtocolDefs.js.map +1 -0
- package/dist/react-native/RaftPublish.d.ts +2 -0
- package/dist/react-native/RaftPublish.js +81 -0
- package/dist/react-native/RaftPublish.js.map +1 -0
- package/dist/react-native/RaftStreamHandler.d.ts +49 -0
- package/dist/react-native/RaftStreamHandler.js +324 -0
- package/dist/react-native/RaftStreamHandler.js.map +1 -0
- package/dist/react-native/RaftStruct.d.ts +3 -0
- package/dist/react-native/RaftStruct.js +258 -0
- package/dist/react-native/RaftStruct.js.map +1 -0
- package/dist/react-native/RaftSysTypeManager.d.ts +16 -0
- package/dist/react-native/RaftSysTypeManager.js +78 -0
- package/dist/react-native/RaftSysTypeManager.js.map +1 -0
- package/dist/react-native/RaftSystemType.d.ts +30 -0
- package/dist/react-native/RaftSystemType.js +3 -0
- package/dist/react-native/RaftSystemType.js.map +1 -0
- package/dist/react-native/RaftSystemUtils.d.ts +152 -0
- package/dist/react-native/RaftSystemUtils.js +463 -0
- package/dist/react-native/RaftSystemUtils.js.map +1 -0
- package/dist/react-native/RaftTypes.d.ts +216 -0
- package/dist/react-native/RaftTypes.js +153 -0
- package/dist/react-native/RaftTypes.js.map +1 -0
- package/dist/react-native/RaftUpdateEvents.d.ts +33 -0
- package/dist/react-native/RaftUpdateEvents.js +46 -0
- package/dist/react-native/RaftUpdateEvents.js.map +1 -0
- package/dist/react-native/RaftUpdateManager.d.ts +61 -0
- package/dist/react-native/RaftUpdateManager.js +621 -0
- package/dist/react-native/RaftUpdateManager.js.map +1 -0
- package/dist/react-native/RaftUtils.d.ts +128 -0
- package/dist/react-native/RaftUtils.js +487 -0
- package/dist/react-native/RaftUtils.js.map +1 -0
- package/dist/react-native/RaftWifiTypes.d.ts +23 -0
- package/dist/react-native/RaftWifiTypes.js +43 -0
- package/dist/react-native/RaftWifiTypes.js.map +1 -0
- package/dist/react-native/main.d.ts +27 -0
- package/dist/react-native/main.js +52 -0
- package/dist/react-native/main.js.map +1 -0
- package/dist/web/RaftAttributeHandler.js +1 -1
- package/dist/web/RaftAttributeHandler.js.map +1 -1
- package/dist/web/RaftChannelBLE.web.js +8 -6
- package/dist/web/RaftChannelBLE.web.js.map +1 -1
- package/dist/web/RaftChannelSimulated.d.ts +10 -0
- package/dist/web/RaftChannelSimulated.js +665 -82
- package/dist/web/RaftChannelSimulated.js.map +1 -1
- package/dist/web/RaftChannelWebSerial.js +2 -2
- package/dist/web/RaftChannelWebSerial.js.map +1 -1
- package/dist/web/RaftChannelWebSocket.js +16 -1
- package/dist/web/RaftChannelWebSocket.js.map +1 -1
- package/dist/web/RaftConnector.d.ts +12 -1
- package/dist/web/RaftConnector.js +45 -9
- package/dist/web/RaftConnector.js.map +1 -1
- package/dist/web/RaftCustomAttrHandler.d.ts +2 -0
- package/dist/web/RaftCustomAttrHandler.js +54 -26
- package/dist/web/RaftCustomAttrHandler.js.map +1 -1
- package/dist/web/RaftDeviceInfo.d.ts +3 -1
- package/dist/web/RaftDeviceInfo.js +17 -3
- package/dist/web/RaftDeviceInfo.js.map +1 -1
- package/dist/web/RaftDeviceManager.d.ts +32 -2
- package/dist/web/RaftDeviceManager.js +307 -74
- package/dist/web/RaftDeviceManager.js.map +1 -1
- package/dist/web/RaftDeviceMgrIF.d.ts +5 -1
- package/dist/web/RaftDeviceStates.d.ts +20 -2
- package/dist/web/RaftDeviceStates.js +25 -4
- package/dist/web/RaftDeviceStates.js.map +1 -1
- package/dist/web/RaftMsgHandler.js.map +1 -1
- package/dist/web/RaftPublish.d.ts +2 -0
- package/dist/web/RaftPublish.js +81 -0
- package/dist/web/RaftPublish.js.map +1 -0
- package/dist/web/RaftStreamHandler.d.ts +11 -0
- package/dist/web/RaftStreamHandler.js +68 -1
- package/dist/web/RaftStreamHandler.js.map +1 -1
- package/dist/web/RaftStruct.js +197 -147
- package/dist/web/RaftStruct.js.map +1 -1
- package/dist/web/RaftSystemUtils.d.ts +17 -1
- package/dist/web/RaftSystemUtils.js +51 -0
- package/dist/web/RaftSystemUtils.js.map +1 -1
- package/dist/web/RaftTypes.d.ts +21 -0
- package/dist/web/RaftTypes.js.map +1 -1
- package/dist/web/RaftUpdateManager.js +1 -1
- package/dist/web/RaftUpdateManager.js.map +1 -1
- package/dist/web/RaftUtils.d.ts +2 -0
- package/dist/web/RaftUtils.js +20 -0
- package/dist/web/RaftUtils.js.map +1 -1
- package/dist/web/main.d.ts +2 -0
- package/dist/web/main.js +1 -0
- package/dist/web/main.js.map +1 -1
- package/eslint.config.mjs +33 -0
- package/examples/dashboard/package.json +36 -0
- package/examples/dashboard/src/CommandPanel.tsx +147 -0
- package/examples/dashboard/src/ConnManager.ts +166 -0
- package/examples/dashboard/src/DeviceActionsForm.tsx +133 -0
- package/examples/dashboard/src/DeviceAttrsForm.tsx +49 -0
- package/examples/dashboard/src/DeviceLineChart.tsx +163 -0
- package/examples/dashboard/src/DevicePanel.tsx +247 -0
- package/examples/dashboard/src/DeviceStatsPanel.tsx +65 -0
- package/examples/dashboard/src/DevicesPanel.tsx +69 -0
- package/examples/dashboard/src/DispLedGrid.tsx +110 -0
- package/examples/dashboard/src/DispOneLed.tsx +20 -0
- package/examples/dashboard/src/LatencyTest.ts +130 -0
- package/examples/dashboard/src/LatencyTestPanel.tsx +92 -0
- package/examples/dashboard/src/Main.tsx +234 -0
- package/examples/dashboard/src/SettingsManager.ts +67 -0
- package/examples/dashboard/src/SettingsScreen.tsx +179 -0
- package/examples/dashboard/src/StatusPanel.tsx +71 -0
- package/examples/dashboard/src/SystemTypeCog/CogStateInfo.ts +170 -0
- package/examples/dashboard/src/SystemTypeCog/SystemTypeCog.ts +125 -0
- package/examples/dashboard/src/SystemTypeGeneric/StateInfoGeneric.ts +38 -0
- package/examples/dashboard/src/SystemTypeGeneric/SystemTypeGeneric.ts +125 -0
- package/examples/dashboard/src/SystemTypeMarty/RICAddOn.ts +70 -0
- package/examples/dashboard/src/SystemTypeMarty/RICAddOnBase.ts +33 -0
- package/examples/dashboard/src/SystemTypeMarty/RICAddOnManager.ts +342 -0
- package/examples/dashboard/src/SystemTypeMarty/RICCommsStats.ts +170 -0
- package/examples/dashboard/src/SystemTypeMarty/RICHWElem.ts +123 -0
- package/examples/dashboard/src/SystemTypeMarty/RICLEDPatternChecker.ts +207 -0
- package/examples/dashboard/src/SystemTypeMarty/RICROSSerial.ts +464 -0
- package/examples/dashboard/src/SystemTypeMarty/RICServoFaultDetector.ts +146 -0
- package/examples/dashboard/src/SystemTypeMarty/RICStateInfo.ts +105 -0
- package/examples/dashboard/src/SystemTypeMarty/RICSystemUtils.ts +371 -0
- package/examples/dashboard/src/SystemTypeMarty/RICTypes.ts +20 -0
- package/examples/dashboard/src/SystemTypeMarty/SystemTypeMarty.ts +119 -0
- package/examples/dashboard/src/index.html +15 -0
- package/examples/dashboard/src/index.tsx +13 -0
- package/examples/dashboard/src/styles.css +570 -0
- package/examples/dashboard/tsconfig.json +18 -0
- package/jest.config.js +11 -0
- package/package.json +49 -52
- package/src/RaftAttributeHandler.ts +450 -0
- package/src/RaftChannel.ts +32 -0
- package/src/RaftChannelBLE.native.ts +617 -0
- package/src/RaftChannelBLE.web.ts +374 -0
- package/src/RaftChannelBLEFactory.ts +13 -0
- package/src/RaftChannelBLEScanner.native.ts +184 -0
- package/src/RaftChannelSimulated.ts +1177 -0
- package/src/RaftChannelWebSerial.ts +420 -0
- package/src/RaftChannelWebSocket.ts +272 -0
- package/src/RaftCommsStats.ts +142 -0
- package/src/RaftConnEvents.ts +58 -0
- package/src/RaftConnector.ts +806 -0
- package/src/RaftCustomAttrHandler.ts +117 -0
- package/src/RaftDeviceInfo.ts +125 -0
- package/src/RaftDeviceManager.ts +1014 -0
- package/src/RaftDeviceMgrIF.ts +37 -0
- package/src/RaftDeviceMsg.ts +20 -0
- package/src/RaftDeviceStates.ts +122 -0
- package/src/RaftFileHandler.ts +668 -0
- package/src/RaftLog.ts +70 -0
- package/src/RaftMiniHDLC.ts +396 -0
- package/src/RaftMsgHandler.ts +812 -0
- package/src/RaftMsgTrackInfo.ts +51 -0
- package/src/RaftProtocolDefs.ts +46 -0
- package/src/RaftPublish.ts +92 -0
- package/src/RaftStreamHandler.ts +412 -0
- package/src/RaftStruct.ts +282 -0
- package/src/RaftSysTypeManager.ts +87 -0
- package/src/RaftSystemType.ts +34 -0
- package/src/RaftSystemUtils.ts +548 -0
- package/src/RaftTypes.ts +306 -0
- package/src/RaftUpdateEvents.ts +48 -0
- package/src/RaftUpdateManager.ts +781 -0
- package/src/RaftUtils.ts +514 -0
- package/src/RaftWifiTypes.ts +36 -0
- package/src/main.ts +40 -0
- package/testdata/TestDeviceTypeRecs.json +492 -0
- package/tsconfig.json +30 -0
- package/tsconfig.react-native.json +29 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
2
|
+
//
|
|
3
|
+
// RaftDeviceMgrIF.ts
|
|
4
|
+
// Interface to devices state
|
|
5
|
+
//
|
|
6
|
+
// Rob Dobson (C) 2024
|
|
7
|
+
//
|
|
8
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
9
|
+
|
|
10
|
+
import { DeviceTypeAction } from "./RaftDeviceInfo";
|
|
11
|
+
import { DeviceAttributeState, DevicesState, DeviceState, DeviceStats } from "./RaftDeviceStates";
|
|
12
|
+
|
|
13
|
+
export default interface RaftDeviceMgrIF {
|
|
14
|
+
|
|
15
|
+
// Get state of devices
|
|
16
|
+
getDevicesState(): DevicesState;
|
|
17
|
+
getDeviceState(deviceKey: string): DeviceState;
|
|
18
|
+
getDeviceStats(deviceKey: string): DeviceStats;
|
|
19
|
+
resetDeviceStats(deviceKey: string): void;
|
|
20
|
+
|
|
21
|
+
// Settings
|
|
22
|
+
setMaxDataPointsToStore(maxDataPointsToStore: number): void;
|
|
23
|
+
|
|
24
|
+
// Callbacks
|
|
25
|
+
addNewDeviceCallback(callback: (deviceKey: string, state: DeviceState) => void): void;
|
|
26
|
+
removeNewDeviceCallback(callback: (deviceKey: string, state: DeviceState) => void): void;
|
|
27
|
+
addNewAttributeCallback(callback: (deviceKey: string, attrState: DeviceAttributeState) => void): void;
|
|
28
|
+
removeNewAttributeCallback(callback: (deviceKey: string, attrState: DeviceAttributeState) => void): void;
|
|
29
|
+
addAttributeDataCallback(callback: (deviceKey: string, attrState: DeviceAttributeState) => void): void;
|
|
30
|
+
removeAttributeDataCallback(callback: (deviceKey: string, attrState: DeviceAttributeState) => void): void;
|
|
31
|
+
addDeviceRemovedCallback(callback: (deviceKey: string, state: DeviceState) => void): void;
|
|
32
|
+
removeDeviceRemovedCallback(callback: (deviceKey: string, state: DeviceState) => void): void;
|
|
33
|
+
|
|
34
|
+
// Send action to device
|
|
35
|
+
sendAction(deviceKey: string, action: DeviceTypeAction, data: number[]): void;
|
|
36
|
+
sendCompoundAction(deviceKey: string, action: DeviceTypeAction, data: number[][]): void;
|
|
37
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
2
|
+
//
|
|
3
|
+
// RaftDeviceMsg
|
|
4
|
+
// Device message for Raft devices
|
|
5
|
+
//
|
|
6
|
+
// Rob Dobson (C) 2024
|
|
7
|
+
//
|
|
8
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
9
|
+
|
|
10
|
+
export interface DeviceMsgJsonElem {
|
|
11
|
+
[attrGroupName: string]: string | number | boolean; // Attribute group name and value
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface DeviceMsgJsonBus {
|
|
15
|
+
[devAddr: string]: DeviceMsgJsonElem;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface DeviceMsgJson {
|
|
19
|
+
[busName: string]: DeviceMsgJsonBus;
|
|
20
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
2
|
+
//
|
|
3
|
+
// RaftDeviceStates
|
|
4
|
+
// Device states for Raft devices
|
|
5
|
+
//
|
|
6
|
+
// Rob Dobson (C) 2024
|
|
7
|
+
//
|
|
8
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
9
|
+
|
|
10
|
+
import { DeviceTypeInfo } from "./RaftDeviceInfo";
|
|
11
|
+
|
|
12
|
+
export function deviceAttrGetLatestFormatted(attrState: DeviceAttributeState): string {
|
|
13
|
+
|
|
14
|
+
if (attrState.values.length === 0) {
|
|
15
|
+
return 'N/A';
|
|
16
|
+
}
|
|
17
|
+
if (attrState.format.length === 0) {
|
|
18
|
+
return attrState.values[attrState.values.length - 1].toString();
|
|
19
|
+
}
|
|
20
|
+
const value = attrState.values[attrState.values.length - 1];
|
|
21
|
+
let format = attrState.format;
|
|
22
|
+
if (format.startsWith("%")) {
|
|
23
|
+
format = format.slice(1);
|
|
24
|
+
}
|
|
25
|
+
if (format.endsWith('f')) {
|
|
26
|
+
// Floating point number formatting
|
|
27
|
+
const parts = format.split('.');
|
|
28
|
+
let decimalPlaces = 0;
|
|
29
|
+
if (parts.length === 2) {
|
|
30
|
+
decimalPlaces = parseInt(parts[1], 10);
|
|
31
|
+
}
|
|
32
|
+
const formattedNumber = value.toFixed(decimalPlaces);
|
|
33
|
+
const fieldWidth = parseInt(parts[0], 10);
|
|
34
|
+
return fieldWidth ? formattedNumber.padStart(fieldWidth, ' ') : formattedNumber;
|
|
35
|
+
} else if (format.endsWith('x')) {
|
|
36
|
+
// Hexadecimal formatting
|
|
37
|
+
const totalLength = parseInt(format.slice(0, -1), 10);
|
|
38
|
+
return Math.floor(value).toString(16).padStart(totalLength, format.startsWith('0') ? '0' : ' ');
|
|
39
|
+
} else if (format.endsWith('d')) {
|
|
40
|
+
// Decimal integer formatting
|
|
41
|
+
const totalLength = parseInt(format.slice(0, -1), 10);
|
|
42
|
+
return Math.floor(value).toString(10).padStart(totalLength, format.startsWith('0') ? '0' : ' ');
|
|
43
|
+
} else if (format.endsWith('b')) {
|
|
44
|
+
// Binary formatting
|
|
45
|
+
return Math.floor(value) === 0 ? 'no' : 'yes';
|
|
46
|
+
}
|
|
47
|
+
return value.toString();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface DeviceAttributeState {
|
|
51
|
+
name: string;
|
|
52
|
+
newAttribute: boolean;
|
|
53
|
+
newData: boolean;
|
|
54
|
+
numNewValues: number;
|
|
55
|
+
values: number[];
|
|
56
|
+
units: string;
|
|
57
|
+
range: number[];
|
|
58
|
+
format: string;
|
|
59
|
+
visibleSeries: boolean;
|
|
60
|
+
visibleForm: boolean;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export interface DeviceAttributesState {
|
|
64
|
+
[attributeName: string]: DeviceAttributeState;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export interface DeviceTimeline {
|
|
68
|
+
timestampsUs: number[];
|
|
69
|
+
lastReportTimestampUs: number;
|
|
70
|
+
reportTimestampOffsetUs: number;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export interface DeviceStats {
|
|
74
|
+
totalSamples: number;
|
|
75
|
+
windowMs: number;
|
|
76
|
+
windowSamples: number;
|
|
77
|
+
sampleRateHz: number;
|
|
78
|
+
lastSampleTimeMs: number | null;
|
|
79
|
+
lastUpdateTimeMs: number | null;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export enum DeviceOnlineState {
|
|
83
|
+
Offline = 0,
|
|
84
|
+
Online = 1,
|
|
85
|
+
PendingDeletion = 2,
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export interface DeviceState {
|
|
89
|
+
deviceTypeInfo: DeviceTypeInfo | undefined;
|
|
90
|
+
deviceTimeline: DeviceTimeline;
|
|
91
|
+
deviceAttributes: DeviceAttributesState;
|
|
92
|
+
deviceIsNew: boolean;
|
|
93
|
+
stateChanged: boolean;
|
|
94
|
+
onlineState: DeviceOnlineState;
|
|
95
|
+
deviceAddress: string;
|
|
96
|
+
deviceType: string;
|
|
97
|
+
busName: string;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export class DevicesState {
|
|
101
|
+
[deviceKey: string]: DeviceState;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Format a numeric device address as canonical hex string:
|
|
105
|
+
// lowercase, no "0x" prefix, no leading zeros
|
|
106
|
+
export function formatDeviceAddrHex(addr: number): string {
|
|
107
|
+
return addr.toString(16);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Generate a composite device key from bus number and hex address
|
|
111
|
+
export function getDeviceKey(busNumberAsString: string, devAddrHexStr: string): string {
|
|
112
|
+
return `${busNumberAsString}_${devAddrHexStr}`;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Parse a device key into its bus and address components
|
|
116
|
+
export function parseDeviceKey(deviceKey: string): { bus: string; addr: string } {
|
|
117
|
+
const sep = deviceKey.indexOf('_');
|
|
118
|
+
if (sep < 0) {
|
|
119
|
+
return { bus: deviceKey, addr: '' };
|
|
120
|
+
}
|
|
121
|
+
return { bus: deviceKey.substring(0, sep), addr: deviceKey.substring(sep + 1) };
|
|
122
|
+
}
|