-
-
Notifications
You must be signed in to change notification settings - Fork 262
Expand file tree
/
Copy pathConfigModels.swift
More file actions
433 lines (376 loc) · 10.8 KB
/
Copy pathConfigModels.swift
File metadata and controls
433 lines (376 loc) · 10.8 KB
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
//
// ConfigModels.swift
// Meshtastic
//
// SwiftData models for all device and module configuration entities.
//
import Foundation
import SwiftData
@Model
final class AmbientLightingConfigEntity {
var blue: Int32 = 0
var current: Int32 = 0
var green: Int32 = 0
var ledState: Bool = false
var red: Int32 = 0
var ambientLightingConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class AudioConfigEntity {
var codec2Enabled: Bool = false
var pttPin: Int32 = 0
var bitrate: Int32 = 0
var i2sWs: Int32 = 0
var i2sSd: Int32 = 0
var i2sDin: Int32 = 0
var i2sSck: Int32 = 0
var audioConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class BluetoothConfigEntity {
var deviceLoggingEnabled: Bool = false
var enabled: Bool = false
var fixedPin: Int32 = 123456
var mode: Int32 = 0
var bluetoothConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class CannedMessageConfigEntity {
/// Deprecated (no successor, removed from active use — #2021). Retained to
/// preserve the SwiftData schema; no longer surfaced, written, or persisted.
var enabled: Bool = false
var inputbrokerEventCcw: Int32 = 0
var inputbrokerEventCw: Int32 = 0
var inputbrokerEventPress: Int32 = 0
var inputbrokerPinA: Int32 = 0
var inputbrokerPinB: Int32 = 0
var inputbrokerPinPress: Int32 = 0
var messages: String?
var rotary1Enabled: Bool = false
var sendBell: Bool = false
var updown1Enabled: Bool = false
var cannedMessagesConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class DetectionSensorConfigEntity {
var enabled: Bool = false
var minimumBroadcastSecs: Int32 = 0
var monitorPin: Int32 = 0
var name: String?
var sendBell: Bool = false
var stateBroadcastSecs: Int32 = 0
var triggerType: Int32 = 0
var usePullup: Bool = false
var detectionSensorConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class MeshBeaconConfigEntity {
/// Bitwise-OR of `ModuleConfig.MeshBeaconConfig.Flags` (listen / broadcast / legacy-split).
var flags: Int32 = 0
/// Human-readable text broadcast in each beacon (firmware limit: 100 UTF-8 bytes).
var broadcastMessage: String = ""
/// Channel the beacon *advertises* to listeners (offer_channel). Empty name = no offer.
var broadcastOfferChannelName: String = ""
var broadcastOfferChannelPSK: Data = Data()
/// RegionCodes raw value advertised in offer_region; 0 = unset / not offered.
var broadcastOfferRegion: Int32 = 0
/// ModemPresets raw value advertised in offer_preset, or -1 when not offered (0 = LongFast).
var broadcastOfferPreset: Int32 = -1
/// Single-target TX channel (broadcast_on_channel); used only when `broadcastTargets` is empty.
var broadcastOnChannelName: String = ""
var broadcastOnChannelPSK: Data = Data()
/// RegionCodes raw value for single-target TX (broadcast_on_region); 0 = unset (running config).
var broadcastOnRegion: Int32 = 0
/// ModemPresets raw value for single-target TX, or -1 when unset (running config).
var broadcastOnPreset: Int32 = -1
/// How often to broadcast; firmware minimum & default is 3600 s.
var broadcastIntervalSecs: Int32 = 3600
/// Spoof the `from` of outgoing beacons as this node id; 0 = local node.
var broadcastSendAsNode: Int64 = 0
@Relationship(deleteRule: .cascade, inverse: \BroadcastTargetEntity.meshBeaconConfig)
var broadcastTargets: [BroadcastTargetEntity] = []
var meshBeaconConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class BroadcastTargetEntity {
/// ModemPresets raw value for this target, or -1 when unset (falls back to running config).
var preset: Int32 = -1
/// RegionCodes raw value for this target; 0 = unset (running config).
var region: Int32 = 0
/// Index into the node's channel table to transmit this target on, or -1 when unset.
var channelIndex: Int32 = -1
var meshBeaconConfig: MeshBeaconConfigEntity?
init() {}
init(preset: Int32, region: Int32, channelIndex: Int32) {
self.preset = preset
self.region = region
self.channelIndex = channelIndex
}
}
@Model
final class DeviceConfigEntity {
var buttonGpio: Int32 = 0
var buzzerGpio: Int32 = 0
var debugLogEnabled: Bool = false
var disableTripleClick: Bool = false
var doubleTapAsButtonPress: Bool = false
var isManaged: Bool = false
var ledHeartbeatEnabled: Bool = true
var nodeInfoBroadcastSecs: Int32 = 0
var rebroadcastMode: Int32 = 0
var role: Int32 = 0
var serialEnabled: Bool = false
var tripleClickAsAdHocPing: Bool = true
var tzdef: String?
var deviceConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class DisplayConfigEntity {
var compassNorthTop: Bool = false
var compassOrientation: Int32 = 0
var displayMode: Int32 = 0
var flipScreen: Bool = false
var headingBold: Bool = true
var oledType: Int32 = 0
var screenCarouselInterval: Int32 = 0
var screenOnSeconds: Int32 = 0
var units: Int32 = 0
var use12HClock: Bool = false
var wakeOnTapOrMotion: Bool = false
var displayConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class ExternalNotificationConfigEntity {
var active: Bool = false
var alertBell: Bool = false
var alertBellBuzzer: Bool = false
var alertBellVibra: Bool = false
var alertMessage: Bool = false
var alertMessageBuzzer: Bool = false
var alertMessageVibra: Bool = false
var enabled: Bool = false
var nagTimeout: Int32 = 0
var output: Int32 = 0
var outputBuzzer: Int32 = 0
var outputMilliseconds: Int32 = 0
var outputVibra: Int32 = 0
var useI2SAsBuzzer: Bool = false
var usePWM: Bool = true
var externalNotificationConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class LoRaConfigEntity {
var bandwidth: Int32 = 0
var channelNum: Int32 = 0
var codingRate: Int32 = 0
var frequencyOffset: Float = 0
var hopLimit: Int32 = 0
var ignoreMqtt: Bool = false
var modemPreset: Int32 = 0
var okToMqtt: Bool = false
var overrideDutyCycle: Bool = false
var overrideFrequency: Float = 0.0
var regionCode: Int32 = 0
var spreadFactor: Int32 = 0
var sx126xRxBoostedGain: Bool = false
var txEnabled: Bool = true
var txPower: Int32 = 0
var usePreset: Bool = true
var loRaConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class MQTTConfigEntity {
var address: String?
var enabled: Bool = false
var encryptionEnabled: Bool = false
var jsonEnabled: Bool = false
var mapPositionPrecision: Int32 = 13
var mapPublishIntervalSecs: Int32 = 0
var mapReportingEnabled: Bool = false
var mapReportingShouldReportLocation: Bool = false
var password: String?
var proxyToClientEnabled: Bool = false
var root: String? = "msh"
var tlsEnabled: Bool = false
var username: String?
var mqttConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class NetworkConfigEntity {
var addressMode: Int32 = 0
var dns: Int32 = 0
var enabledProtocols: Int32 = 0
var ethEnabled: Bool = false
var gateway: Int32 = 0
var ip: Int32 = 0
var ntpServer: String?
var rsyslogServer: String?
var subnet: Int32 = 0
var wifiEnabled: Bool = false
var wifiMode: Int32 = 0
var wifiPsk: String?
var wifiSsid: String?
var networkConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class NeighborInfoConfigEntity {
var enabled: Bool = false
var transmitOverLora: Bool = false
var updateInterval: Int32 = 0
var neighborInfoConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class PaxCounterConfigEntity {
var bleThreshold: Int32 = 0
var enabled: Bool = false
var updateInterval: Int32 = 0
var wifiThreshold: Int32 = -80
var paxCounterConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class PositionConfigEntity {
var broadcastSmartMinimumDistance: Int32 = 0
var broadcastSmartMinimumIntervalSecs: Int32 = 0
var deviceGpsEnabled: Bool = false
var fixedPosition: Bool = false
var gpsAttemptTime: Int32 = 0
var gpsEnGpio: Int32 = 0
var gpsMode: Int32 = 0
var gpsUpdateInterval: Int32 = 0
var positionBroadcastSeconds: Int32 = 0
var positionFlags: Int32 = 0
var rxGpio: Int32 = 0
var smartPositionEnabled: Bool = false
var txGpio: Int32 = 0
var positionConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class PowerConfigEntity {
var adcMultiplierOverride: Float = 0
var deviceBatteryInaAddress: Int32 = 0
var isPowerSaving: Bool = false
var lsSecs: Int32 = 0
var minWakeSecs: Int32 = 0
var onBatteryShutdownAfterSecs: Int32 = 0
var waitBluetoothSecs: Int32 = 0
var powerConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class RangeTestConfigEntity {
var enabled: Bool = false
var save: Bool = false
var sender: Int32 = 0
var rangeTestConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class RTTTLConfigEntity {
var ringtone: String?
var rtttlConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class SecurityConfigEntity {
var adminChannelEnabled: Bool = false
var adminKey: Data?
var adminKey2: Data?
var adminKey3: Data?
var bluetoothLoggingEnabled: Bool = false
var debugLogApiEnabled: Bool = false
var isManaged: Bool = false
var privateKey: Data?
var publicKey: Data?
var serialEnabled: Bool = false
var securityConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class SerialConfigEntity {
var baudRate: Int32 = 0
var echo: Bool = false
var enabled: Bool = false
var mode: Int32 = 0
var overrideConsoleSerialPort: Bool = false
var rxd: Int32 = 0
var timeout: Int32 = 0
var txd: Int32 = 0
var serialConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class StoreForwardConfigEntity {
var enabled: Bool = false
var heartbeat: Bool = false
var historyReturnMax: Int32 = 0
var historyReturnWindow: Int32 = 0
var isRouter: Bool = false
var lastHeartbeat: Date?
var lastRequest: Int32 = 0
var records: Int32 = 0
var storeForwardConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class StatusMessageConfigEntity {
var nodeStatus: String = ""
var statusMessageConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class TAKConfigEntity {
var role: Int32 = 0
var team: Int32 = 0
var takConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class TrafficManagementConfigEntity {
var enabled: Bool = false
var positionDedupEnabled: Bool = false
var positionPrecisionBits: Int32 = 0
var positionMinIntervalSecs: Int32 = 0
var nodeinfoDirectResponse: Bool = false
var nodeinfoDirectResponseMaxHops: Int32 = 0
var rateLimitEnabled: Bool = false
var rateLimitWindowSecs: Int32 = 0
var rateLimitMaxPackets: Int32 = 0
var dropUnknownEnabled: Bool = false
var unknownPacketThreshold: Int32 = 0
var exhaustHopTelemetry: Bool = false
var exhaustHopPosition: Bool = false
var routerPreserveHops: Bool = false
var trafficManagementConfigNode: NodeInfoEntity?
init() {}
}
@Model
final class TelemetryConfigEntity {
var airQualityEnabled: Bool = false
var airQualityInterval: Int32 = 0
var deviceTelemetryEnabled: Bool = false
var deviceUpdateInterval: Int32 = 0
var environmentDisplayFahrenheit: Bool = false
var environmentMeasurementEnabled: Bool = false
var environmentScreenEnabled: Bool = false
var environmentUpdateInterval: Int32 = 0
var powerMeasurementEnabled: Bool = false
var powerScreenEnabled: Bool = false
var powerUpdateInterval: Int32 = 0
var telemetryConfigNode: NodeInfoEntity?
init() {}
}