iobroker.yamaha 2.3.0 → 2.3.2

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.
@@ -59,7 +59,14 @@ const YXC_AMP_CATALOG = [
59
59
  },
60
60
  {
61
61
  state: "soundProgram",
62
- common: { nameKey: "soundProgram", type: "string", role: "state", read: true, write: true },
62
+ common: {
63
+ nameKey: "soundProgram",
64
+ descKey: "descSoundProgram",
65
+ type: "string",
66
+ role: "state",
67
+ read: true,
68
+ write: true
69
+ },
63
70
  create: { kind: "func", func: "sound_program" },
64
71
  read: { field: "sound_program" },
65
72
  fromStatus: str,
@@ -67,7 +74,7 @@ const YXC_AMP_CATALOG = [
67
74
  },
68
75
  {
69
76
  state: "sound.enhancer",
70
- common: { nameKey: "enhancer", type: "boolean", role: "switch", read: true, write: true },
77
+ common: { nameKey: "enhancer", descKey: "descEnhancer", type: "boolean", role: "switch", read: true, write: true },
71
78
  create: { kind: "func", func: "enhancer" },
72
79
  read: { field: "enhancer" },
73
80
  fromStatus: bool,
@@ -75,7 +82,14 @@ const YXC_AMP_CATALOG = [
75
82
  },
76
83
  {
77
84
  state: "sound.pureDirect",
78
- common: { nameKey: "pureDirect", type: "boolean", role: "switch", read: true, write: true },
85
+ common: {
86
+ nameKey: "pureDirect",
87
+ descKey: "descPureDirect",
88
+ type: "boolean",
89
+ role: "switch",
90
+ read: true,
91
+ write: true
92
+ },
79
93
  create: { kind: "func", func: "pure_direct" },
80
94
  read: { field: "pure_direct" },
81
95
  fromStatus: bool,
@@ -83,7 +97,15 @@ const YXC_AMP_CATALOG = [
83
97
  },
84
98
  {
85
99
  state: "subwooferVolume",
86
- common: { nameKey: "subwooferTrim", type: "number", unit: "dB", role: "level", read: true, write: true },
100
+ common: {
101
+ nameKey: "subwooferTrim",
102
+ descKey: "descSubwooferTrim",
103
+ type: "number",
104
+ unit: "dB",
105
+ role: "level",
106
+ read: true,
107
+ write: true
108
+ },
87
109
  create: { kind: "func", func: "subwoofer_volume" },
88
110
  read: { field: "subwoofer_volume" },
89
111
  fromStatus: num,
@@ -99,7 +121,14 @@ const YXC_AMP_CATALOG = [
99
121
  },
100
122
  {
101
123
  state: "sound.toneMode",
102
- common: { nameKey: "toneControlMode", type: "string", role: "state", read: true, write: false },
124
+ common: {
125
+ nameKey: "toneControlMode",
126
+ descKey: "descToneControlMode",
127
+ type: "string",
128
+ role: "state",
129
+ read: true,
130
+ write: false
131
+ },
103
132
  create: { kind: "func", func: "tone_control" },
104
133
  read: { path: ["tone_control", "mode"] },
105
134
  fromStatus: str
@@ -122,70 +151,134 @@ const YXC_AMP_CATALOG = [
122
151
  },
123
152
  {
124
153
  state: "sound.dialogueLevel",
125
- common: { nameKey: "dialogueLevel", type: "number", role: "value", read: true, write: false },
154
+ common: {
155
+ nameKey: "dialogueLevel",
156
+ descKey: "descDialogueLevel",
157
+ type: "number",
158
+ role: "value",
159
+ read: true,
160
+ write: false
161
+ },
126
162
  create: { kind: "func", func: "dialogue_level" },
127
163
  read: { field: "dialogue_level" },
128
164
  fromStatus: num
129
165
  },
130
166
  {
131
167
  state: "actualVolume",
132
- common: { nameKey: "volumeDB", type: "number", unit: "dB", role: "value", read: true, write: false },
168
+ common: {
169
+ nameKey: "volumeDB",
170
+ descKey: "descVolumeDB",
171
+ type: "number",
172
+ unit: "dB",
173
+ role: "value",
174
+ read: true,
175
+ write: false
176
+ },
133
177
  create: { kind: "func", func: "actual_volume" },
134
178
  read: { path: ["actual_volume", "value"] },
135
179
  fromStatus: num
136
180
  },
137
181
  {
138
182
  state: "actualVolumeMode",
139
- common: { nameKey: "volumeDisplayMode", type: "string", role: "state", read: true, write: false },
183
+ common: {
184
+ nameKey: "volumeDisplayMode",
185
+ descKey: "descVolumeDisplayMode",
186
+ type: "string",
187
+ role: "state",
188
+ read: true,
189
+ write: false
190
+ },
140
191
  create: { kind: "func", func: "actual_volume" },
141
192
  read: { path: ["actual_volume", "mode"] },
142
193
  fromStatus: str
143
194
  },
144
195
  {
145
196
  state: "sound.contentsDisplay",
146
- common: { nameKey: "contentsDisplay", type: "boolean", role: "indicator", read: true, write: false },
197
+ common: {
198
+ nameKey: "contentsDisplay",
199
+ descKey: "descContentsDisplay",
200
+ type: "boolean",
201
+ role: "indicator",
202
+ read: true,
203
+ write: false
204
+ },
147
205
  create: { kind: "func", func: "contents_display" },
148
206
  read: { field: "contents_display" },
149
207
  fromStatus: bool
150
208
  },
151
209
  {
152
210
  state: "sound.surroundDecoder",
153
- common: { nameKey: "surroundDecoder", type: "string", role: "text", read: true, write: false },
211
+ common: {
212
+ nameKey: "surroundDecoder",
213
+ descKey: "descSurroundDecoder",
214
+ type: "string",
215
+ role: "text",
216
+ read: true,
217
+ write: false
218
+ },
154
219
  create: { kind: "func", func: "surr_decoder_type" },
155
220
  read: { field: "surr_decoder_type" },
156
221
  fromStatus: str
157
222
  },
158
223
  {
159
224
  state: "sound.audioSelect",
160
- common: { nameKey: "audioSelect", type: "string", role: "text", read: true, write: false },
225
+ common: {
226
+ nameKey: "audioSelect",
227
+ descKey: "descAudioSelect",
228
+ type: "string",
229
+ role: "text",
230
+ read: true,
231
+ write: false
232
+ },
161
233
  create: { kind: "func", func: "audio_select" },
162
234
  read: { field: "audio_select" },
163
235
  fromStatus: str
164
236
  },
165
237
  {
166
238
  state: "sound.linkControl",
167
- common: { nameKey: "linkControl", type: "string", role: "text", read: true, write: false },
239
+ common: {
240
+ nameKey: "linkControl",
241
+ descKey: "descLinkControl",
242
+ type: "string",
243
+ role: "text",
244
+ read: true,
245
+ write: false
246
+ },
168
247
  create: { kind: "func", func: "link_control" },
169
248
  read: { field: "link_control" },
170
249
  fromStatus: str
171
250
  },
172
251
  {
173
252
  state: "sound.linkAudioDelay",
174
- common: { nameKey: "linkAudioDelay", type: "string", role: "text", read: true, write: false },
253
+ common: {
254
+ nameKey: "linkAudioDelay",
255
+ descKey: "descLinkAudioDelay",
256
+ type: "string",
257
+ role: "text",
258
+ read: true,
259
+ write: false
260
+ },
175
261
  create: { kind: "func", func: "link_audio_delay" },
176
262
  read: { field: "link_audio_delay" },
177
263
  fromStatus: str
178
264
  },
179
265
  {
180
266
  state: "sound.linkAudioQuality",
181
- common: { nameKey: "linkAudioQuality", type: "string", role: "text", read: true, write: false },
267
+ common: {
268
+ nameKey: "linkAudioQuality",
269
+ descKey: "descLinkAudioQuality",
270
+ type: "string",
271
+ role: "text",
272
+ read: true,
273
+ write: false
274
+ },
182
275
  create: { kind: "func", func: "link_audio_quality" },
183
276
  read: { field: "link_audio_quality" },
184
277
  fromStatus: str
185
278
  },
186
279
  {
187
280
  state: "sound.direct",
188
- common: { nameKey: "direct", type: "boolean", role: "switch", read: true, write: true },
281
+ common: { nameKey: "direct", descKey: "descDirect", type: "boolean", role: "switch", read: true, write: true },
189
282
  create: { kind: "func", func: "direct" },
190
283
  read: { field: "direct" },
191
284
  fromStatus: bool,
@@ -193,7 +286,14 @@ const YXC_AMP_CATALOG = [
193
286
  },
194
287
  {
195
288
  state: "sound.clearVoice",
196
- common: { nameKey: "clearVoice", type: "boolean", role: "switch", read: true, write: true },
289
+ common: {
290
+ nameKey: "clearVoice",
291
+ descKey: "descClearVoice",
292
+ type: "boolean",
293
+ role: "switch",
294
+ read: true,
295
+ write: true
296
+ },
197
297
  create: { kind: "func", func: "clear_voice" },
198
298
  read: { field: "clear_voice" },
199
299
  fromStatus: bool,
@@ -201,7 +301,14 @@ const YXC_AMP_CATALOG = [
201
301
  },
202
302
  {
203
303
  state: "sound.bassExtension",
204
- common: { nameKey: "bassExtension", type: "boolean", role: "switch", read: true, write: true },
304
+ common: {
305
+ nameKey: "bassExtension",
306
+ descKey: "descBassExtension",
307
+ type: "boolean",
308
+ role: "switch",
309
+ read: true,
310
+ write: true
311
+ },
205
312
  create: { kind: "func", func: "bass_extension" },
206
313
  read: { field: "bass_extension" },
207
314
  fromStatus: bool,
@@ -217,21 +324,42 @@ const YXC_AMP_CATALOG = [
217
324
  },
218
325
  {
219
326
  state: "sound.adaptiveDrc",
220
- common: { nameKey: "adaptiveDRC", type: "boolean", role: "indicator", read: true, write: false },
327
+ common: {
328
+ nameKey: "adaptiveDRC",
329
+ descKey: "descAdaptiveDRC",
330
+ type: "boolean",
331
+ role: "indicator",
332
+ read: true,
333
+ write: false
334
+ },
221
335
  create: { kind: "func", func: "adaptive_drc" },
222
336
  read: { field: "adaptive_drc" },
223
337
  fromStatus: bool
224
338
  },
225
339
  {
226
340
  state: "sound.adaptiveDspLevel",
227
- common: { nameKey: "adaptiveDSPLevel", type: "boolean", role: "indicator", read: true, write: false },
341
+ common: {
342
+ nameKey: "adaptiveDSPLevel",
343
+ descKey: "descAdaptiveDSPLevel",
344
+ type: "boolean",
345
+ role: "indicator",
346
+ read: true,
347
+ write: false
348
+ },
228
349
  create: { kind: "func", func: "adaptive_dsp_level" },
229
350
  read: { field: "adaptive_dsp_level" },
230
351
  fromStatus: bool
231
352
  },
232
353
  {
233
354
  state: "sound.extraBass",
234
- common: { nameKey: "extraBass", type: "boolean", role: "indicator", read: true, write: false },
355
+ common: {
356
+ nameKey: "extraBass",
357
+ descKey: "descExtraBass",
358
+ type: "boolean",
359
+ role: "indicator",
360
+ read: true,
361
+ write: false
362
+ },
235
363
  create: { kind: "func", func: "extra_bass" },
236
364
  read: { field: "extra_bass" },
237
365
  fromStatus: bool
@@ -245,7 +373,14 @@ const YXC_AMP_CATALOG = [
245
373
  },
246
374
  {
247
375
  state: "sound.surround3d",
248
- common: { nameKey: "surround3D", type: "boolean", role: "indicator", read: true, write: false },
376
+ common: {
377
+ nameKey: "surround3D",
378
+ descKey: "descSurround3D",
379
+ type: "boolean",
380
+ role: "indicator",
381
+ read: true,
382
+ write: false
383
+ },
249
384
  create: { kind: "func", func: "surround_3d" },
250
385
  read: { field: "surround_3d" },
251
386
  fromStatus: bool
@@ -269,14 +404,28 @@ const YXC_AMP_CATALOG = [
269
404
  },
270
405
  {
271
406
  state: "sound.dtsDialogueControl",
272
- common: { nameKey: "dtsDialogueControl", type: "number", role: "value", read: true, write: false },
407
+ common: {
408
+ nameKey: "dtsDialogueControl",
409
+ descKey: "descDtsDialogueControl",
410
+ type: "number",
411
+ role: "value",
412
+ read: true,
413
+ write: false
414
+ },
273
415
  create: { kind: "func", func: "dts_dialogue_control" },
274
416
  read: { field: "dts_dialogue_control" },
275
417
  fromStatus: num
276
418
  },
277
419
  {
278
420
  state: "sound.equalizer.mode",
279
- common: { nameKey: "equalizerMode", type: "string", role: "state", read: true, write: false },
421
+ common: {
422
+ nameKey: "equalizerMode",
423
+ descKey: "descEqualizerMode",
424
+ type: "string",
425
+ role: "state",
426
+ read: true,
427
+ write: false
428
+ },
280
429
  create: { kind: "func", func: "equalizer" },
281
430
  read: { path: ["equalizer", "mode"] },
282
431
  fromStatus: str
@@ -304,7 +453,14 @@ const YXC_AMP_CATALOG = [
304
453
  },
305
454
  {
306
455
  state: "advanced.maxVolume",
307
- common: { nameKey: "maximumVolume", type: "number", role: "value", read: true, write: false },
456
+ common: {
457
+ nameKey: "maximumVolume",
458
+ descKey: "descMaximumVolume",
459
+ type: "number",
460
+ role: "value",
461
+ read: true,
462
+ write: false
463
+ },
308
464
  create: { kind: "always" },
309
465
  read: { field: "max_volume" },
310
466
  fromStatus: num
@@ -322,14 +478,28 @@ const YXC_AMP_CATALOG = [
322
478
  // distribution_enable says the zone MAY be used for Link streaming — proven on a live
323
479
  // device reporting true while in no group (role none) — not that it streams right now.
324
480
  state: "multiroom.group.streamingEnabled",
325
- common: { nameKey: "multiroomStreamingEnabled", type: "boolean", role: "indicator", read: true, write: false },
481
+ common: {
482
+ nameKey: "multiroomStreamingEnabled",
483
+ descKey: "descMultiroomStreamingEnabled",
484
+ type: "boolean",
485
+ role: "indicator",
486
+ read: true,
487
+ write: false
488
+ },
326
489
  create: { kind: "always" },
327
490
  read: { field: "distribution_enable" },
328
491
  fromStatus: bool
329
492
  },
330
493
  {
331
494
  state: "multiroom.partyEnable",
332
- common: { nameKey: "partyModeAllZones", type: "boolean", role: "switch", read: true, write: true },
495
+ common: {
496
+ nameKey: "partyModeAllZones",
497
+ descKey: "descPartyModeAllZones",
498
+ type: "boolean",
499
+ role: "switch",
500
+ read: true,
501
+ write: true
502
+ },
333
503
  create: { kind: "always" },
334
504
  read: { field: "party_enable" },
335
505
  fromStatus: bool,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/yxc/catalog.ts"],
4
- "sourcesContent": ["import type { ObjectDef } from \"../catalog/types\";\nimport type { I18nKey } from \"../i18n\";\nimport type { YxcClientLike } from \"./client-contract\";\n\n/**\n * The single source for YXC (MusicCast) amplifier states: one entry per unified\n * state carries BOTH its ioBroker object (`common`) AND its getStatus read + write\n * mapping \u2014 replacing the former `YXC_STATES` (object-mapper) / `YXC_STATE_MAPPINGS`\n * (command-mapper) pair that had to be kept in sync by hand. The object-mapper reads\n * `create`/`common`, the command-mapper reads `read`/`fromStatus`/`write`.\n *\n * Value types are verified against the bundled device captures\n * (`yamaha-yxc-nodejs/lib/data/*.json`): e.g. `adaptive_drc`/`extra_bass` are real\n * booleans, `sleep` is minutes, `link_control`/`surr_decoder_type` are strings.\n */\nexport interface YxcAmpEntry {\n /** Unified state id, relative to the zone prefix. */\n state: string;\n /**\n * ioBroker common for the object, carrying its name as a translation KEY: this catalog is a\n * module-level constant, so the object-mapper resolves the key when it creates the object.\n */\n common: Omit<ObjectDef[\"common\"], \"name\"> & { nameKey: I18nKey; descKey?: I18nKey };\n /**\n * When the state is created: `func` = only if the zone's func_list advertises that\n * feature key; `always` = a core status field created for every active zone;\n * `input` = only if the zone offers inputs (from input_list, not func_list).\n */\n create: { kind: \"func\"; func: string } | { kind: \"always\" } | { kind: \"input\" };\n /** Where to read the value in a getStatus response: a flat field or a nested path. */\n read: { field: string } | { path: string[] };\n /** Convert a raw getStatus value into the typed state value. */\n fromStatus: (value: unknown) => boolean | number | string;\n /**\n * Write mapping \u2014 absent means the state is read-only (no library setter). The entry\n * calls the client DIRECTLY (value coercion inline), so there is no method-name string\n * to keep in sync with a dispatch switch and no \"unknown command\" runtime path.\n */\n write?: { apply: (client: YxcClientLike, value: unknown, zone: string) => Promise<unknown> };\n}\n\nconst bool = (value: unknown): boolean => Boolean(value);\nconst num = (value: unknown): number => Number(value);\nconst str = (value: unknown): string => String(value);\n\n/** The unified YXC amplifier catalog \u2014 object + read/write mapping in one list. */\nexport const YXC_AMP_CATALOG: YxcAmpEntry[] = [\n {\n state: \"power\",\n common: { nameKey: \"power\", type: \"boolean\", role: \"switch.power\", read: true, write: true },\n create: { kind: \"func\", func: \"power\" },\n read: { field: \"power\" },\n fromStatus: value => value === \"on\",\n write: { apply: (c, v, z) => c.power(Boolean(v), z) },\n },\n {\n state: \"volume\",\n common: { nameKey: \"volume\", type: \"number\", role: \"level.volume\", read: true, write: true },\n create: { kind: \"func\", func: \"volume\" },\n read: { field: \"volume\" },\n fromStatus: num,\n write: { apply: (c, v, z) => c.setVolumeTo(Number(v), z) },\n },\n {\n state: \"mute\",\n common: { nameKey: \"mute\", type: \"boolean\", role: \"media.mute\", read: true, write: true },\n create: { kind: \"func\", func: \"mute\" },\n read: { field: \"mute\" },\n fromStatus: bool,\n write: { apply: (c, v, z) => c.mute(Boolean(v), z) },\n },\n {\n state: \"input\",\n common: { nameKey: \"input\", type: \"string\", role: \"media.input\", read: true, write: true },\n create: { kind: \"input\" },\n read: { field: \"input\" },\n fromStatus: str,\n write: { apply: (c, v, z) => c.setInput(String(v), z) },\n },\n {\n state: \"soundProgram\",\n common: { nameKey: \"soundProgram\", type: \"string\", role: \"state\", read: true, write: true },\n create: { kind: \"func\", func: \"sound_program\" },\n read: { field: \"sound_program\" },\n fromStatus: str,\n write: { apply: (c, v, z) => c.setSound(String(v), z) },\n },\n {\n state: \"sound.enhancer\",\n common: { nameKey: \"enhancer\", type: \"boolean\", role: \"switch\", read: true, write: true },\n create: { kind: \"func\", func: \"enhancer\" },\n read: { field: \"enhancer\" },\n fromStatus: bool,\n write: { apply: (c, v, z) => c.setEnhancer(Boolean(v), z) },\n },\n {\n state: \"sound.pureDirect\",\n common: { nameKey: \"pureDirect\", type: \"boolean\", role: \"switch\", read: true, write: true },\n create: { kind: \"func\", func: \"pure_direct\" },\n read: { field: \"pure_direct\" },\n fromStatus: bool,\n write: { apply: (c, v, z) => c.setPureDirect(Boolean(v), z) },\n },\n {\n state: \"subwooferVolume\",\n common: { nameKey: \"subwooferTrim\", type: \"number\", unit: \"dB\", role: \"level\", read: true, write: true },\n create: { kind: \"func\", func: \"subwoofer_volume\" },\n read: { field: \"subwoofer_volume\" },\n fromStatus: num,\n write: { apply: (c, v, z) => c.setSubwooferVolumeTo(Number(v), z) },\n },\n {\n state: \"sound.bass\",\n common: { nameKey: \"bass\", type: \"number\", unit: \"dB\", role: \"level\", read: true, write: true },\n create: { kind: \"func\", func: \"tone_control\" },\n read: { path: [\"tone_control\", \"bass\"] },\n fromStatus: num,\n write: { apply: (c, v, z) => c.setBassTo(Number(v), z) },\n },\n {\n state: \"sound.toneMode\",\n common: { nameKey: \"toneControlMode\", type: \"string\", role: \"state\", read: true, write: false },\n create: { kind: \"func\", func: \"tone_control\" },\n read: { path: [\"tone_control\", \"mode\"] },\n fromStatus: str,\n },\n {\n state: \"sound.treble\",\n common: { nameKey: \"treble\", type: \"number\", unit: \"dB\", role: \"level\", read: true, write: true },\n create: { kind: \"func\", func: \"tone_control\" },\n read: { path: [\"tone_control\", \"treble\"] },\n fromStatus: num,\n write: { apply: (c, v, z) => c.setTrebleTo(Number(v), z) },\n },\n {\n state: \"sleep\",\n common: { nameKey: \"sleepTimer\", type: \"number\", unit: \"min\", role: \"level\", read: true, write: true },\n create: { kind: \"func\", func: \"sleep\" },\n read: { field: \"sleep\" },\n fromStatus: num,\n write: { apply: (c, v, z) => c.sleep(Number(v), z) },\n },\n {\n state: \"sound.dialogueLevel\",\n common: { nameKey: \"dialogueLevel\", type: \"number\", role: \"value\", read: true, write: false },\n create: { kind: \"func\", func: \"dialogue_level\" },\n read: { field: \"dialogue_level\" },\n fromStatus: num,\n },\n {\n state: \"actualVolume\",\n common: { nameKey: \"volumeDB\", type: \"number\", unit: \"dB\", role: \"value\", read: true, write: false },\n create: { kind: \"func\", func: \"actual_volume\" },\n read: { path: [\"actual_volume\", \"value\"] },\n fromStatus: num,\n },\n {\n state: \"actualVolumeMode\",\n common: { nameKey: \"volumeDisplayMode\", type: \"string\", role: \"state\", read: true, write: false },\n create: { kind: \"func\", func: \"actual_volume\" },\n read: { path: [\"actual_volume\", \"mode\"] },\n fromStatus: str,\n },\n {\n state: \"sound.contentsDisplay\",\n common: { nameKey: \"contentsDisplay\", type: \"boolean\", role: \"indicator\", read: true, write: false },\n create: { kind: \"func\", func: \"contents_display\" },\n read: { field: \"contents_display\" },\n fromStatus: bool,\n },\n {\n state: \"sound.surroundDecoder\",\n common: { nameKey: \"surroundDecoder\", type: \"string\", role: \"text\", read: true, write: false },\n create: { kind: \"func\", func: \"surr_decoder_type\" },\n read: { field: \"surr_decoder_type\" },\n fromStatus: str,\n },\n {\n state: \"sound.audioSelect\",\n common: { nameKey: \"audioSelect\", type: \"string\", role: \"text\", read: true, write: false },\n create: { kind: \"func\", func: \"audio_select\" },\n read: { field: \"audio_select\" },\n fromStatus: str,\n },\n {\n state: \"sound.linkControl\",\n common: { nameKey: \"linkControl\", type: \"string\", role: \"text\", read: true, write: false },\n create: { kind: \"func\", func: \"link_control\" },\n read: { field: \"link_control\" },\n fromStatus: str,\n },\n {\n state: \"sound.linkAudioDelay\",\n common: { nameKey: \"linkAudioDelay\", type: \"string\", role: \"text\", read: true, write: false },\n create: { kind: \"func\", func: \"link_audio_delay\" },\n read: { field: \"link_audio_delay\" },\n fromStatus: str,\n },\n {\n state: \"sound.linkAudioQuality\",\n common: { nameKey: \"linkAudioQuality\", type: \"string\", role: \"text\", read: true, write: false },\n create: { kind: \"func\", func: \"link_audio_quality\" },\n read: { field: \"link_audio_quality\" },\n fromStatus: str,\n },\n {\n state: \"sound.direct\",\n common: { nameKey: \"direct\", type: \"boolean\", role: \"switch\", read: true, write: true },\n create: { kind: \"func\", func: \"direct\" },\n read: { field: \"direct\" },\n fromStatus: bool,\n write: { apply: (c, v, z) => c.setDirect(Boolean(v), z) },\n },\n {\n state: \"sound.clearVoice\",\n common: { nameKey: \"clearVoice\", type: \"boolean\", role: \"switch\", read: true, write: true },\n create: { kind: \"func\", func: \"clear_voice\" },\n read: { field: \"clear_voice\" },\n fromStatus: bool,\n write: { apply: (c, v, z) => c.setClearVoice(Boolean(v), z) },\n },\n {\n state: \"sound.bassExtension\",\n common: { nameKey: \"bassExtension\", type: \"boolean\", role: \"switch\", read: true, write: true },\n create: { kind: \"func\", func: \"bass_extension\" },\n read: { field: \"bass_extension\" },\n fromStatus: bool,\n write: { apply: (c, v, z) => c.setBassExtension(Boolean(v), z) },\n },\n {\n state: \"sound.balance\",\n common: { nameKey: \"balance\", type: \"number\", role: \"level\", read: true, write: true },\n create: { kind: \"func\", func: \"balance\" },\n read: { field: \"balance\" },\n fromStatus: num,\n write: { apply: (c, v, z) => c.setBalance(Number(v), z) },\n },\n {\n state: \"sound.adaptiveDrc\",\n common: { nameKey: \"adaptiveDRC\", type: \"boolean\", role: \"indicator\", read: true, write: false },\n create: { kind: \"func\", func: \"adaptive_drc\" },\n read: { field: \"adaptive_drc\" },\n fromStatus: bool,\n },\n {\n state: \"sound.adaptiveDspLevel\",\n common: { nameKey: \"adaptiveDSPLevel\", type: \"boolean\", role: \"indicator\", read: true, write: false },\n create: { kind: \"func\", func: \"adaptive_dsp_level\" },\n read: { field: \"adaptive_dsp_level\" },\n fromStatus: bool,\n },\n {\n state: \"sound.extraBass\",\n common: { nameKey: \"extraBass\", type: \"boolean\", role: \"indicator\", read: true, write: false },\n create: { kind: \"func\", func: \"extra_bass\" },\n read: { field: \"extra_bass\" },\n fromStatus: bool,\n },\n {\n state: \"sound.monaural\",\n common: { nameKey: \"monaural\", type: \"boolean\", role: \"indicator\", read: true, write: false },\n create: { kind: \"func\", func: \"mono\" },\n read: { field: \"mono\" },\n fromStatus: bool,\n },\n {\n state: \"sound.surround3d\",\n common: { nameKey: \"surround3D\", type: \"boolean\", role: \"indicator\", read: true, write: false },\n create: { kind: \"func\", func: \"surround_3d\" },\n read: { field: \"surround_3d\" },\n fromStatus: bool,\n },\n {\n state: \"sound.dialogueLift\",\n common: {\n nameKey: \"dialogueLift\",\n descKey: \"descDialogueLift\",\n type: \"number\",\n role: \"value\",\n read: true,\n write: false,\n min: 0,\n max: 5,\n step: 1,\n },\n create: { kind: \"func\", func: \"dialogue_lift\" },\n read: { field: \"dialogue_lift\" },\n fromStatus: num,\n },\n {\n state: \"sound.dtsDialogueControl\",\n common: { nameKey: \"dtsDialogueControl\", type: \"number\", role: \"value\", read: true, write: false },\n create: { kind: \"func\", func: \"dts_dialogue_control\" },\n read: { field: \"dts_dialogue_control\" },\n fromStatus: num,\n },\n {\n state: \"sound.equalizer.mode\",\n common: { nameKey: \"equalizerMode\", type: \"string\", role: \"state\", read: true, write: false },\n create: { kind: \"func\", func: \"equalizer\" },\n read: { path: [\"equalizer\", \"mode\"] },\n fromStatus: str,\n },\n {\n state: \"sound.equalizer.low\",\n common: { nameKey: \"equalizerLow\", type: \"number\", unit: \"dB\", role: \"level\", read: true, write: true },\n create: { kind: \"func\", func: \"equalizer\" },\n read: { path: [\"equalizer\", \"low\"] },\n fromStatus: num,\n },\n {\n state: \"sound.equalizer.mid\",\n common: { nameKey: \"equalizerMid\", type: \"number\", unit: \"dB\", role: \"level\", read: true, write: true },\n create: { kind: \"func\", func: \"equalizer\" },\n read: { path: [\"equalizer\", \"mid\"] },\n fromStatus: num,\n },\n {\n state: \"sound.equalizer.high\",\n common: { nameKey: \"equalizerHigh\", type: \"number\", unit: \"dB\", role: \"level\", read: true, write: true },\n create: { kind: \"func\", func: \"equalizer\" },\n read: { path: [\"equalizer\", \"high\"] },\n fromStatus: num,\n },\n {\n state: \"advanced.maxVolume\",\n common: { nameKey: \"maximumVolume\", type: \"number\", role: \"value\", read: true, write: false },\n create: { kind: \"always\" },\n read: { field: \"max_volume\" },\n fromStatus: num,\n },\n {\n state: \"inputText\",\n common: { nameKey: \"inputNameDisplay\", type: \"string\", role: \"text\", read: true, write: false },\n create: { kind: \"always\" },\n read: { field: \"input_text\" },\n fromStatus: str,\n },\n // The two device-global entries: their id starts with \"multiroom.\" (no zone prefix ever\n // applies), so the mapper and the status parser emit them for the main zone only.\n {\n // distribution_enable says the zone MAY be used for Link streaming \u2014 proven on a live\n // device reporting true while in no group (role none) \u2014 not that it streams right now.\n state: \"multiroom.group.streamingEnabled\",\n common: { nameKey: \"multiroomStreamingEnabled\", type: \"boolean\", role: \"indicator\", read: true, write: false },\n create: { kind: \"always\" },\n read: { field: \"distribution_enable\" },\n fromStatus: bool,\n },\n {\n state: \"multiroom.partyEnable\",\n common: { nameKey: \"partyModeAllZones\", type: \"boolean\", role: \"switch\", read: true, write: true },\n create: { kind: \"always\" },\n read: { field: \"party_enable\" },\n fromStatus: bool,\n write: { apply: (c, v) => c.setPartyMode(Boolean(v)) },\n },\n];\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { ObjectDef } from \"../catalog/types\";\nimport type { I18nKey } from \"../i18n\";\nimport type { YxcClientLike } from \"./client-contract\";\n\n/**\n * The single source for YXC (MusicCast) amplifier states: one entry per unified\n * state carries BOTH its ioBroker object (`common`) AND its getStatus read + write\n * mapping \u2014 replacing the former `YXC_STATES` (object-mapper) / `YXC_STATE_MAPPINGS`\n * (command-mapper) pair that had to be kept in sync by hand. The object-mapper reads\n * `create`/`common`, the command-mapper reads `read`/`fromStatus`/`write`.\n *\n * Value types are verified against the bundled device captures\n * (`yamaha-yxc-nodejs/lib/data/*.json`): e.g. `adaptive_drc`/`extra_bass` are real\n * booleans, `sleep` is minutes, `link_control`/`surr_decoder_type` are strings.\n */\nexport interface YxcAmpEntry {\n /** Unified state id, relative to the zone prefix. */\n state: string;\n /**\n * ioBroker common for the object, carrying its name as a translation KEY: this catalog is a\n * module-level constant, so the object-mapper resolves the key when it creates the object.\n */\n common: Omit<ObjectDef[\"common\"], \"name\"> & { nameKey: I18nKey; descKey?: I18nKey };\n /**\n * When the state is created: `func` = only if the zone's func_list advertises that\n * feature key; `always` = a core status field created for every active zone;\n * `input` = only if the zone offers inputs (from input_list, not func_list).\n */\n create: { kind: \"func\"; func: string } | { kind: \"always\" } | { kind: \"input\" };\n /** Where to read the value in a getStatus response: a flat field or a nested path. */\n read: { field: string } | { path: string[] };\n /** Convert a raw getStatus value into the typed state value. */\n fromStatus: (value: unknown) => boolean | number | string;\n /**\n * Write mapping \u2014 absent means the state is read-only (no library setter). The entry\n * calls the client DIRECTLY (value coercion inline), so there is no method-name string\n * to keep in sync with a dispatch switch and no \"unknown command\" runtime path.\n */\n write?: { apply: (client: YxcClientLike, value: unknown, zone: string) => Promise<unknown> };\n}\n\nconst bool = (value: unknown): boolean => Boolean(value);\nconst num = (value: unknown): number => Number(value);\nconst str = (value: unknown): string => String(value);\n\n/** The unified YXC amplifier catalog \u2014 object + read/write mapping in one list. */\nexport const YXC_AMP_CATALOG: YxcAmpEntry[] = [\n {\n state: \"power\",\n common: { nameKey: \"power\", type: \"boolean\", role: \"switch.power\", read: true, write: true },\n create: { kind: \"func\", func: \"power\" },\n read: { field: \"power\" },\n fromStatus: value => value === \"on\",\n write: { apply: (c, v, z) => c.power(Boolean(v), z) },\n },\n {\n state: \"volume\",\n common: { nameKey: \"volume\", type: \"number\", role: \"level.volume\", read: true, write: true },\n create: { kind: \"func\", func: \"volume\" },\n read: { field: \"volume\" },\n fromStatus: num,\n write: { apply: (c, v, z) => c.setVolumeTo(Number(v), z) },\n },\n {\n state: \"mute\",\n common: { nameKey: \"mute\", type: \"boolean\", role: \"media.mute\", read: true, write: true },\n create: { kind: \"func\", func: \"mute\" },\n read: { field: \"mute\" },\n fromStatus: bool,\n write: { apply: (c, v, z) => c.mute(Boolean(v), z) },\n },\n {\n state: \"input\",\n common: { nameKey: \"input\", type: \"string\", role: \"media.input\", read: true, write: true },\n create: { kind: \"input\" },\n read: { field: \"input\" },\n fromStatus: str,\n write: { apply: (c, v, z) => c.setInput(String(v), z) },\n },\n {\n state: \"soundProgram\",\n common: {\n nameKey: \"soundProgram\",\n descKey: \"descSoundProgram\",\n type: \"string\",\n role: \"state\",\n read: true,\n write: true,\n },\n create: { kind: \"func\", func: \"sound_program\" },\n read: { field: \"sound_program\" },\n fromStatus: str,\n write: { apply: (c, v, z) => c.setSound(String(v), z) },\n },\n {\n state: \"sound.enhancer\",\n common: { nameKey: \"enhancer\", descKey: \"descEnhancer\", type: \"boolean\", role: \"switch\", read: true, write: true },\n create: { kind: \"func\", func: \"enhancer\" },\n read: { field: \"enhancer\" },\n fromStatus: bool,\n write: { apply: (c, v, z) => c.setEnhancer(Boolean(v), z) },\n },\n {\n state: \"sound.pureDirect\",\n common: {\n nameKey: \"pureDirect\",\n descKey: \"descPureDirect\",\n type: \"boolean\",\n role: \"switch\",\n read: true,\n write: true,\n },\n create: { kind: \"func\", func: \"pure_direct\" },\n read: { field: \"pure_direct\" },\n fromStatus: bool,\n write: { apply: (c, v, z) => c.setPureDirect(Boolean(v), z) },\n },\n {\n state: \"subwooferVolume\",\n common: {\n nameKey: \"subwooferTrim\",\n descKey: \"descSubwooferTrim\",\n type: \"number\",\n unit: \"dB\",\n role: \"level\",\n read: true,\n write: true,\n },\n create: { kind: \"func\", func: \"subwoofer_volume\" },\n read: { field: \"subwoofer_volume\" },\n fromStatus: num,\n write: { apply: (c, v, z) => c.setSubwooferVolumeTo(Number(v), z) },\n },\n {\n state: \"sound.bass\",\n common: { nameKey: \"bass\", type: \"number\", unit: \"dB\", role: \"level\", read: true, write: true },\n create: { kind: \"func\", func: \"tone_control\" },\n read: { path: [\"tone_control\", \"bass\"] },\n fromStatus: num,\n write: { apply: (c, v, z) => c.setBassTo(Number(v), z) },\n },\n {\n state: \"sound.toneMode\",\n common: {\n nameKey: \"toneControlMode\",\n descKey: \"descToneControlMode\",\n type: \"string\",\n role: \"state\",\n read: true,\n write: false,\n },\n create: { kind: \"func\", func: \"tone_control\" },\n read: { path: [\"tone_control\", \"mode\"] },\n fromStatus: str,\n },\n {\n state: \"sound.treble\",\n common: { nameKey: \"treble\", type: \"number\", unit: \"dB\", role: \"level\", read: true, write: true },\n create: { kind: \"func\", func: \"tone_control\" },\n read: { path: [\"tone_control\", \"treble\"] },\n fromStatus: num,\n write: { apply: (c, v, z) => c.setTrebleTo(Number(v), z) },\n },\n {\n state: \"sleep\",\n common: { nameKey: \"sleepTimer\", type: \"number\", unit: \"min\", role: \"level\", read: true, write: true },\n create: { kind: \"func\", func: \"sleep\" },\n read: { field: \"sleep\" },\n fromStatus: num,\n write: { apply: (c, v, z) => c.sleep(Number(v), z) },\n },\n {\n state: \"sound.dialogueLevel\",\n common: {\n nameKey: \"dialogueLevel\",\n descKey: \"descDialogueLevel\",\n type: \"number\",\n role: \"value\",\n read: true,\n write: false,\n },\n create: { kind: \"func\", func: \"dialogue_level\" },\n read: { field: \"dialogue_level\" },\n fromStatus: num,\n },\n {\n state: \"actualVolume\",\n common: {\n nameKey: \"volumeDB\",\n descKey: \"descVolumeDB\",\n type: \"number\",\n unit: \"dB\",\n role: \"value\",\n read: true,\n write: false,\n },\n create: { kind: \"func\", func: \"actual_volume\" },\n read: { path: [\"actual_volume\", \"value\"] },\n fromStatus: num,\n },\n {\n state: \"actualVolumeMode\",\n common: {\n nameKey: \"volumeDisplayMode\",\n descKey: \"descVolumeDisplayMode\",\n type: \"string\",\n role: \"state\",\n read: true,\n write: false,\n },\n create: { kind: \"func\", func: \"actual_volume\" },\n read: { path: [\"actual_volume\", \"mode\"] },\n fromStatus: str,\n },\n {\n state: \"sound.contentsDisplay\",\n common: {\n nameKey: \"contentsDisplay\",\n descKey: \"descContentsDisplay\",\n type: \"boolean\",\n role: \"indicator\",\n read: true,\n write: false,\n },\n create: { kind: \"func\", func: \"contents_display\" },\n read: { field: \"contents_display\" },\n fromStatus: bool,\n },\n {\n state: \"sound.surroundDecoder\",\n common: {\n nameKey: \"surroundDecoder\",\n descKey: \"descSurroundDecoder\",\n type: \"string\",\n role: \"text\",\n read: true,\n write: false,\n },\n create: { kind: \"func\", func: \"surr_decoder_type\" },\n read: { field: \"surr_decoder_type\" },\n fromStatus: str,\n },\n {\n state: \"sound.audioSelect\",\n common: {\n nameKey: \"audioSelect\",\n descKey: \"descAudioSelect\",\n type: \"string\",\n role: \"text\",\n read: true,\n write: false,\n },\n create: { kind: \"func\", func: \"audio_select\" },\n read: { field: \"audio_select\" },\n fromStatus: str,\n },\n {\n state: \"sound.linkControl\",\n common: {\n nameKey: \"linkControl\",\n descKey: \"descLinkControl\",\n type: \"string\",\n role: \"text\",\n read: true,\n write: false,\n },\n create: { kind: \"func\", func: \"link_control\" },\n read: { field: \"link_control\" },\n fromStatus: str,\n },\n {\n state: \"sound.linkAudioDelay\",\n common: {\n nameKey: \"linkAudioDelay\",\n descKey: \"descLinkAudioDelay\",\n type: \"string\",\n role: \"text\",\n read: true,\n write: false,\n },\n create: { kind: \"func\", func: \"link_audio_delay\" },\n read: { field: \"link_audio_delay\" },\n fromStatus: str,\n },\n {\n state: \"sound.linkAudioQuality\",\n common: {\n nameKey: \"linkAudioQuality\",\n descKey: \"descLinkAudioQuality\",\n type: \"string\",\n role: \"text\",\n read: true,\n write: false,\n },\n create: { kind: \"func\", func: \"link_audio_quality\" },\n read: { field: \"link_audio_quality\" },\n fromStatus: str,\n },\n {\n state: \"sound.direct\",\n common: { nameKey: \"direct\", descKey: \"descDirect\", type: \"boolean\", role: \"switch\", read: true, write: true },\n create: { kind: \"func\", func: \"direct\" },\n read: { field: \"direct\" },\n fromStatus: bool,\n write: { apply: (c, v, z) => c.setDirect(Boolean(v), z) },\n },\n {\n state: \"sound.clearVoice\",\n common: {\n nameKey: \"clearVoice\",\n descKey: \"descClearVoice\",\n type: \"boolean\",\n role: \"switch\",\n read: true,\n write: true,\n },\n create: { kind: \"func\", func: \"clear_voice\" },\n read: { field: \"clear_voice\" },\n fromStatus: bool,\n write: { apply: (c, v, z) => c.setClearVoice(Boolean(v), z) },\n },\n {\n state: \"sound.bassExtension\",\n common: {\n nameKey: \"bassExtension\",\n descKey: \"descBassExtension\",\n type: \"boolean\",\n role: \"switch\",\n read: true,\n write: true,\n },\n create: { kind: \"func\", func: \"bass_extension\" },\n read: { field: \"bass_extension\" },\n fromStatus: bool,\n write: { apply: (c, v, z) => c.setBassExtension(Boolean(v), z) },\n },\n {\n state: \"sound.balance\",\n common: { nameKey: \"balance\", type: \"number\", role: \"level\", read: true, write: true },\n create: { kind: \"func\", func: \"balance\" },\n read: { field: \"balance\" },\n fromStatus: num,\n write: { apply: (c, v, z) => c.setBalance(Number(v), z) },\n },\n {\n state: \"sound.adaptiveDrc\",\n common: {\n nameKey: \"adaptiveDRC\",\n descKey: \"descAdaptiveDRC\",\n type: \"boolean\",\n role: \"indicator\",\n read: true,\n write: false,\n },\n create: { kind: \"func\", func: \"adaptive_drc\" },\n read: { field: \"adaptive_drc\" },\n fromStatus: bool,\n },\n {\n state: \"sound.adaptiveDspLevel\",\n common: {\n nameKey: \"adaptiveDSPLevel\",\n descKey: \"descAdaptiveDSPLevel\",\n type: \"boolean\",\n role: \"indicator\",\n read: true,\n write: false,\n },\n create: { kind: \"func\", func: \"adaptive_dsp_level\" },\n read: { field: \"adaptive_dsp_level\" },\n fromStatus: bool,\n },\n {\n state: \"sound.extraBass\",\n common: {\n nameKey: \"extraBass\",\n descKey: \"descExtraBass\",\n type: \"boolean\",\n role: \"indicator\",\n read: true,\n write: false,\n },\n create: { kind: \"func\", func: \"extra_bass\" },\n read: { field: \"extra_bass\" },\n fromStatus: bool,\n },\n {\n state: \"sound.monaural\",\n common: { nameKey: \"monaural\", type: \"boolean\", role: \"indicator\", read: true, write: false },\n create: { kind: \"func\", func: \"mono\" },\n read: { field: \"mono\" },\n fromStatus: bool,\n },\n {\n state: \"sound.surround3d\",\n common: {\n nameKey: \"surround3D\",\n descKey: \"descSurround3D\",\n type: \"boolean\",\n role: \"indicator\",\n read: true,\n write: false,\n },\n create: { kind: \"func\", func: \"surround_3d\" },\n read: { field: \"surround_3d\" },\n fromStatus: bool,\n },\n {\n state: \"sound.dialogueLift\",\n common: {\n nameKey: \"dialogueLift\",\n descKey: \"descDialogueLift\",\n type: \"number\",\n role: \"value\",\n read: true,\n write: false,\n min: 0,\n max: 5,\n step: 1,\n },\n create: { kind: \"func\", func: \"dialogue_lift\" },\n read: { field: \"dialogue_lift\" },\n fromStatus: num,\n },\n {\n state: \"sound.dtsDialogueControl\",\n common: {\n nameKey: \"dtsDialogueControl\",\n descKey: \"descDtsDialogueControl\",\n type: \"number\",\n role: \"value\",\n read: true,\n write: false,\n },\n create: { kind: \"func\", func: \"dts_dialogue_control\" },\n read: { field: \"dts_dialogue_control\" },\n fromStatus: num,\n },\n {\n state: \"sound.equalizer.mode\",\n common: {\n nameKey: \"equalizerMode\",\n descKey: \"descEqualizerMode\",\n type: \"string\",\n role: \"state\",\n read: true,\n write: false,\n },\n create: { kind: \"func\", func: \"equalizer\" },\n read: { path: [\"equalizer\", \"mode\"] },\n fromStatus: str,\n },\n {\n state: \"sound.equalizer.low\",\n common: { nameKey: \"equalizerLow\", type: \"number\", unit: \"dB\", role: \"level\", read: true, write: true },\n create: { kind: \"func\", func: \"equalizer\" },\n read: { path: [\"equalizer\", \"low\"] },\n fromStatus: num,\n },\n {\n state: \"sound.equalizer.mid\",\n common: { nameKey: \"equalizerMid\", type: \"number\", unit: \"dB\", role: \"level\", read: true, write: true },\n create: { kind: \"func\", func: \"equalizer\" },\n read: { path: [\"equalizer\", \"mid\"] },\n fromStatus: num,\n },\n {\n state: \"sound.equalizer.high\",\n common: { nameKey: \"equalizerHigh\", type: \"number\", unit: \"dB\", role: \"level\", read: true, write: true },\n create: { kind: \"func\", func: \"equalizer\" },\n read: { path: [\"equalizer\", \"high\"] },\n fromStatus: num,\n },\n {\n state: \"advanced.maxVolume\",\n common: {\n nameKey: \"maximumVolume\",\n descKey: \"descMaximumVolume\",\n type: \"number\",\n role: \"value\",\n read: true,\n write: false,\n },\n create: { kind: \"always\" },\n read: { field: \"max_volume\" },\n fromStatus: num,\n },\n {\n state: \"inputText\",\n common: { nameKey: \"inputNameDisplay\", type: \"string\", role: \"text\", read: true, write: false },\n create: { kind: \"always\" },\n read: { field: \"input_text\" },\n fromStatus: str,\n },\n // The two device-global entries: their id starts with \"multiroom.\" (no zone prefix ever\n // applies), so the mapper and the status parser emit them for the main zone only.\n {\n // distribution_enable says the zone MAY be used for Link streaming \u2014 proven on a live\n // device reporting true while in no group (role none) \u2014 not that it streams right now.\n state: \"multiroom.group.streamingEnabled\",\n common: {\n nameKey: \"multiroomStreamingEnabled\",\n descKey: \"descMultiroomStreamingEnabled\",\n type: \"boolean\",\n role: \"indicator\",\n read: true,\n write: false,\n },\n create: { kind: \"always\" },\n read: { field: \"distribution_enable\" },\n fromStatus: bool,\n },\n {\n state: \"multiroom.partyEnable\",\n common: {\n nameKey: \"partyModeAllZones\",\n descKey: \"descPartyModeAllZones\",\n type: \"boolean\",\n role: \"switch\",\n read: true,\n write: true,\n },\n create: { kind: \"always\" },\n read: { field: \"party_enable\" },\n fromStatus: bool,\n write: { apply: (c, v) => c.setPartyMode(Boolean(v)) },\n },\n];\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -241,22 +241,64 @@ const PLAYER_CLEAR = [
241
241
  { id: "player.shuffle", value: false }
242
242
  ];
243
243
  const DAB_FIELDS = [
244
- { field: "service_label", id: "tuner.dab.serviceLabel", type: "string", nameKey: "serviceLabel" },
245
- { field: "ensemble_label", id: "tuner.dab.ensembleLabel", type: "string", nameKey: "ensembleLabel" },
246
- { field: "ch_label", id: "tuner.dab.channelLabel", type: "string", nameKey: "channelLabel" },
247
- { field: "dls", id: "tuner.dab.dls", type: "string", nameKey: "dlsText" },
248
- { field: "program_type", id: "tuner.dab.programType", type: "string", nameKey: "programmeType" },
244
+ {
245
+ field: "service_label",
246
+ id: "tuner.dab.serviceLabel",
247
+ type: "string",
248
+ nameKey: "serviceLabel",
249
+ descKey: "descDabService"
250
+ },
251
+ {
252
+ field: "ensemble_label",
253
+ id: "tuner.dab.ensembleLabel",
254
+ type: "string",
255
+ nameKey: "ensembleLabel",
256
+ descKey: "descDabEnsemble"
257
+ },
258
+ {
259
+ field: "ch_label",
260
+ id: "tuner.dab.channelLabel",
261
+ type: "string",
262
+ nameKey: "channelLabel",
263
+ descKey: "descDabChannel"
264
+ },
265
+ { field: "dls", id: "tuner.dab.dls", type: "string", nameKey: "dlsText", descKey: "descDabDLSText" },
266
+ {
267
+ field: "program_type",
268
+ id: "tuner.dab.programType",
269
+ type: "string",
270
+ nameKey: "programmeType",
271
+ descKey: "descDabProgramType"
272
+ },
249
273
  // preset and audio_mode are NOT listed here: the active-band parse feeds the
250
274
  // unified flat tuner.preset / tuner.audioMode states (v2.0.0).
251
- { field: "status", id: "tuner.dab.status", type: "string", nameKey: "dabStatus" },
252
- { field: "bit_rate", id: "tuner.dab.bitRate", type: "number", nameKey: "bitRate" },
253
- { field: "quality", id: "tuner.dab.quality", type: "number", nameKey: "signalQuality" },
254
- { field: "off_air", id: "tuner.dab.offAir", type: "boolean", nameKey: "offAir" },
255
- { field: "dab_plus", id: "tuner.dab.dabPlus", type: "boolean", nameKey: "dabPlus" },
256
- { field: "category", id: "tuner.dab.category", type: "string", nameKey: "serviceCategory" },
257
- { field: "total_station_num", id: "tuner.dab.totalStations", type: "number", nameKey: "totalStations" },
258
- { field: "initial_scan_progress", id: "tuner.dab.scanProgress", type: "number", nameKey: "initialScanProgress" },
259
- { field: "tune_aid", id: "tuner.dab.tuneAid", type: "number", nameKey: "tuneAidLevel" }
275
+ { field: "status", id: "tuner.dab.status", type: "string", nameKey: "dabStatus", descKey: "descDabStatus" },
276
+ { field: "bit_rate", id: "tuner.dab.bitRate", type: "number", nameKey: "bitRate", descKey: "descBitRate" },
277
+ { field: "quality", id: "tuner.dab.quality", type: "number", nameKey: "signalQuality", descKey: "descSignalQuality" },
278
+ { field: "off_air", id: "tuner.dab.offAir", type: "boolean", nameKey: "offAir", descKey: "descOffAir" },
279
+ { field: "dab_plus", id: "tuner.dab.dabPlus", type: "boolean", nameKey: "dabPlus", descKey: "descDabPlus" },
280
+ {
281
+ field: "category",
282
+ id: "tuner.dab.category",
283
+ type: "string",
284
+ nameKey: "serviceCategory",
285
+ descKey: "descServiceCategory"
286
+ },
287
+ {
288
+ field: "total_station_num",
289
+ id: "tuner.dab.totalStations",
290
+ type: "number",
291
+ nameKey: "totalStations",
292
+ descKey: "descTotalStations"
293
+ },
294
+ {
295
+ field: "initial_scan_progress",
296
+ id: "tuner.dab.scanProgress",
297
+ type: "number",
298
+ nameKey: "initialScanProgress",
299
+ descKey: "descInitialScanProgress"
300
+ },
301
+ { field: "tune_aid", id: "tuner.dab.tuneAid", type: "number", nameKey: "tuneAidLevel", descKey: "descTuneAidLevel" }
260
302
  ];
261
303
  function parseYxcTunerInfo(tunerInfo) {
262
304
  if (typeof tunerInfo !== "object" || tunerInfo === null) {