2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.rotel.internal.communication;
15 import java.util.ArrayList;
16 import java.util.List;
18 import org.eclipse.jdt.annotation.NonNullByDefault;
19 import org.eclipse.jdt.annotation.Nullable;
20 import org.openhab.binding.rotel.internal.RotelException;
23 * Represents the different sources available for the Rotel device
25 * @author Laurent Garnier - Initial contribution
28 public enum RotelSource {
30 CAT0_CD(0, "CD", "CD", RotelCommand.SOURCE_CD),
32 CAT1_CD(1, "CD", "CD", RotelCommand.SOURCE_CD, RotelCommand.RECORD_SOURCE_CD, RotelCommand.MAIN_ZONE_SOURCE_CD,
33 RotelCommand.ZONE2_SOURCE_CD, RotelCommand.ZONE3_SOURCE_CD, RotelCommand.ZONE4_SOURCE_CD),
34 CAT1_TUNER(1, "TUNER", "TUNER", RotelCommand.SOURCE_TUNER, RotelCommand.RECORD_SOURCE_TUNER,
35 RotelCommand.MAIN_ZONE_SOURCE_TUNER, RotelCommand.ZONE2_SOURCE_TUNER, RotelCommand.ZONE3_SOURCE_TUNER,
36 RotelCommand.ZONE4_SOURCE_TUNER),
37 CAT1_TAPE(1, "TAPE", "TAPE", RotelCommand.SOURCE_TAPE, RotelCommand.RECORD_SOURCE_TAPE,
38 RotelCommand.MAIN_ZONE_SOURCE_TAPE, RotelCommand.ZONE2_SOURCE_TAPE, RotelCommand.ZONE3_SOURCE_TAPE,
39 RotelCommand.ZONE4_SOURCE_TAPE),
40 CAT1_VIDEO1(1, "VIDEO1", "VIDEO 1", RotelCommand.SOURCE_VIDEO1, RotelCommand.RECORD_SOURCE_VIDEO1,
41 RotelCommand.MAIN_ZONE_SOURCE_VIDEO1, RotelCommand.ZONE2_SOURCE_VIDEO1, RotelCommand.ZONE3_SOURCE_VIDEO1,
42 RotelCommand.ZONE4_SOURCE_VIDEO1),
43 CAT1_VIDEO2(1, "VIDEO2", "VIDEO 2", RotelCommand.SOURCE_VIDEO2, RotelCommand.RECORD_SOURCE_VIDEO2,
44 RotelCommand.MAIN_ZONE_SOURCE_VIDEO2, RotelCommand.ZONE2_SOURCE_VIDEO2, RotelCommand.ZONE3_SOURCE_VIDEO2,
45 RotelCommand.ZONE4_SOURCE_VIDEO2),
46 CAT1_VIDEO3(1, "VIDEO3", "VIDEO 3", RotelCommand.SOURCE_VIDEO3, RotelCommand.RECORD_SOURCE_VIDEO3,
47 RotelCommand.MAIN_ZONE_SOURCE_VIDEO3, RotelCommand.ZONE2_SOURCE_VIDEO3, RotelCommand.ZONE3_SOURCE_VIDEO3,
48 RotelCommand.ZONE4_SOURCE_VIDEO3),
49 CAT1_VIDEO4(1, "VIDEO4", "VIDEO 4", RotelCommand.SOURCE_VIDEO4, RotelCommand.RECORD_SOURCE_VIDEO4,
50 RotelCommand.MAIN_ZONE_SOURCE_VIDEO4, RotelCommand.ZONE2_SOURCE_VIDEO4, RotelCommand.ZONE3_SOURCE_VIDEO4,
51 RotelCommand.ZONE4_SOURCE_VIDEO4),
52 CAT1_VIDEO5(1, "VIDEO5", "VIDEO 5", RotelCommand.SOURCE_VIDEO5, RotelCommand.RECORD_SOURCE_VIDEO5,
53 RotelCommand.MAIN_ZONE_SOURCE_VIDEO5, RotelCommand.ZONE2_SOURCE_VIDEO5, RotelCommand.ZONE3_SOURCE_VIDEO5,
54 RotelCommand.ZONE4_SOURCE_VIDEO5),
55 CAT1_MULTI(1, "MULTI", "MULTI", RotelCommand.SOURCE_MULTI_INPUT, null, RotelCommand.MAIN_ZONE_SOURCE_MULTI_INPUT,
57 CAT1_FOLLOW_MAIN(1, "MAIN", "Follow Main Zone Source", null, RotelCommand.RECORD_SOURCE_MAIN, null,
58 RotelCommand.ZONE2_SOURCE_MAIN, RotelCommand.ZONE3_SOURCE_MAIN, RotelCommand.ZONE4_SOURCE_MAIN),
60 CAT2_CD(2, "CD", "CD", RotelCommand.SOURCE_CD, RotelCommand.RECORD_SOURCE_CD, RotelCommand.MAIN_ZONE_SOURCE_CD,
61 RotelCommand.ZONE2_SOURCE_CD, RotelCommand.ZONE3_SOURCE_CD, RotelCommand.ZONE4_SOURCE_CD),
62 CAT2_TUNER(2, "TUNER", "TUNER", RotelCommand.SOURCE_TUNER, RotelCommand.RECORD_SOURCE_TUNER,
63 RotelCommand.MAIN_ZONE_SOURCE_TUNER, RotelCommand.ZONE2_SOURCE_TUNER, RotelCommand.ZONE3_SOURCE_TUNER,
64 RotelCommand.ZONE4_SOURCE_TUNER),
65 CAT2_VIDEO1(2, "VIDEO1", "VIDEO 1", RotelCommand.SOURCE_VIDEO1, RotelCommand.RECORD_SOURCE_VIDEO1,
66 RotelCommand.MAIN_ZONE_SOURCE_VIDEO1, RotelCommand.ZONE2_SOURCE_VIDEO1, RotelCommand.ZONE3_SOURCE_VIDEO1,
67 RotelCommand.ZONE4_SOURCE_VIDEO1),
68 CAT2_VIDEO2(2, "VIDEO2", "VIDEO 2", RotelCommand.SOURCE_VIDEO2, RotelCommand.RECORD_SOURCE_VIDEO2,
69 RotelCommand.MAIN_ZONE_SOURCE_VIDEO2, RotelCommand.ZONE2_SOURCE_VIDEO2, RotelCommand.ZONE3_SOURCE_VIDEO2,
70 RotelCommand.ZONE4_SOURCE_VIDEO2),
71 CAT2_VIDEO3(2, "VIDEO3", "VIDEO 3", RotelCommand.SOURCE_VIDEO3, RotelCommand.RECORD_SOURCE_VIDEO3,
72 RotelCommand.MAIN_ZONE_SOURCE_VIDEO3, RotelCommand.ZONE2_SOURCE_VIDEO3, RotelCommand.ZONE3_SOURCE_VIDEO3,
73 RotelCommand.ZONE4_SOURCE_VIDEO3),
74 CAT2_VIDEO4(2, "VIDEO4", "VIDEO 4", RotelCommand.SOURCE_VIDEO4, RotelCommand.RECORD_SOURCE_VIDEO4,
75 RotelCommand.MAIN_ZONE_SOURCE_VIDEO4, RotelCommand.ZONE2_SOURCE_VIDEO4, RotelCommand.ZONE3_SOURCE_VIDEO4,
76 RotelCommand.ZONE4_SOURCE_VIDEO4),
77 CAT2_VIDEO5(2, "VIDEO5", "VIDEO 5", RotelCommand.SOURCE_VIDEO5, RotelCommand.RECORD_SOURCE_VIDEO5,
78 RotelCommand.MAIN_ZONE_SOURCE_VIDEO5, RotelCommand.ZONE2_SOURCE_VIDEO5, RotelCommand.ZONE3_SOURCE_VIDEO5,
79 RotelCommand.ZONE4_SOURCE_VIDEO5),
80 CAT2_VIDEO6(2, "VIDEO6", "VIDEO 6", RotelCommand.SOURCE_VIDEO6, RotelCommand.RECORD_SOURCE_VIDEO6,
81 RotelCommand.MAIN_ZONE_SOURCE_VIDEO6, RotelCommand.ZONE2_SOURCE_VIDEO6, RotelCommand.ZONE3_SOURCE_VIDEO6,
82 RotelCommand.ZONE4_SOURCE_VIDEO6),
83 CAT2_USB(2, "USB", "USB", RotelCommand.SOURCE_USB, RotelCommand.RECORD_SOURCE_USB,
84 RotelCommand.MAIN_ZONE_SOURCE_USB, RotelCommand.ZONE2_SOURCE_USB, RotelCommand.ZONE3_SOURCE_USB,
85 RotelCommand.ZONE4_SOURCE_USB),
86 CAT2_MULTI(2, "MULTI", "MULTI", RotelCommand.SOURCE_MULTI_INPUT, null, RotelCommand.MAIN_ZONE_SOURCE_MULTI_INPUT,
88 CAT2_FOLLOW_MAIN(2, "MAIN", "Follow Main Zone Source", null, RotelCommand.RECORD_SOURCE_MAIN, null,
89 RotelCommand.ZONE2_SOURCE_MAIN, RotelCommand.ZONE3_SOURCE_MAIN, RotelCommand.ZONE4_SOURCE_MAIN),
91 CAT3_CD(3, "CD", "CD", RotelCommand.SOURCE_CD, RotelCommand.RECORD_SOURCE_CD, RotelCommand.MAIN_ZONE_SOURCE_CD,
92 RotelCommand.ZONE2_SOURCE_CD, RotelCommand.ZONE3_SOURCE_CD, RotelCommand.ZONE4_SOURCE_CD),
93 CAT3_TUNER(3, "TUNER", "TUNER", RotelCommand.SOURCE_TUNER, RotelCommand.RECORD_SOURCE_TUNER,
94 RotelCommand.MAIN_ZONE_SOURCE_TUNER, RotelCommand.ZONE2_SOURCE_TUNER, RotelCommand.ZONE3_SOURCE_TUNER,
95 RotelCommand.ZONE4_SOURCE_TUNER),
96 CAT3_TAPE(3, "TAPE", "TAPE", RotelCommand.SOURCE_TAPE, RotelCommand.RECORD_SOURCE_TAPE,
97 RotelCommand.MAIN_ZONE_SOURCE_TAPE, RotelCommand.ZONE2_SOURCE_TAPE, RotelCommand.ZONE3_SOURCE_TAPE,
98 RotelCommand.ZONE4_SOURCE_TAPE),
99 CAT3_VIDEO1(3, "VIDEO1", "VIDEO 1", RotelCommand.SOURCE_VIDEO1, RotelCommand.RECORD_SOURCE_VIDEO1,
100 RotelCommand.MAIN_ZONE_SOURCE_VIDEO1, RotelCommand.ZONE2_SOURCE_VIDEO1, RotelCommand.ZONE3_SOURCE_VIDEO1,
101 RotelCommand.ZONE4_SOURCE_VIDEO1),
102 CAT3_VIDEO2(3, "VIDEO2", "VIDEO 2", RotelCommand.SOURCE_VIDEO2, RotelCommand.RECORD_SOURCE_VIDEO2,
103 RotelCommand.MAIN_ZONE_SOURCE_VIDEO2, RotelCommand.ZONE2_SOURCE_VIDEO2, RotelCommand.ZONE3_SOURCE_VIDEO2,
104 RotelCommand.ZONE4_SOURCE_VIDEO2),
105 CAT3_VIDEO3(3, "VIDEO3", "VIDEO 3", RotelCommand.SOURCE_VIDEO3, RotelCommand.RECORD_SOURCE_VIDEO3,
106 RotelCommand.MAIN_ZONE_SOURCE_VIDEO3, RotelCommand.ZONE2_SOURCE_VIDEO3, RotelCommand.ZONE3_SOURCE_VIDEO3,
107 RotelCommand.ZONE4_SOURCE_VIDEO3),
108 CAT3_VIDEO4(3, "VIDEO4", "VIDEO 4", RotelCommand.SOURCE_VIDEO4, RotelCommand.RECORD_SOURCE_VIDEO4,
109 RotelCommand.MAIN_ZONE_SOURCE_VIDEO4, RotelCommand.ZONE2_SOURCE_VIDEO4, RotelCommand.ZONE3_SOURCE_VIDEO4,
110 RotelCommand.ZONE4_SOURCE_VIDEO4),
111 CAT3_VIDEO5(3, "VIDEO5", "VIDEO 5", RotelCommand.SOURCE_VIDEO5, RotelCommand.RECORD_SOURCE_VIDEO5,
112 RotelCommand.MAIN_ZONE_SOURCE_VIDEO5, RotelCommand.ZONE2_SOURCE_VIDEO5, RotelCommand.ZONE3_SOURCE_VIDEO5,
113 RotelCommand.ZONE4_SOURCE_VIDEO5),
114 CAT3_MULTI(3, "MULTI", "MULTI", RotelCommand.SOURCE_MULTI_INPUT, null, RotelCommand.MAIN_ZONE_SOURCE_MULTI_INPUT,
117 CAT4_CD(4, "CD", "CD", RotelCommand.SOURCE_CD),
118 CAT4_AUX1(4, "AUX1", "Aux 1", RotelCommand.SOURCE_AUX1),
119 CAT4_TUNER(4, "TUNER", "Tuner", RotelCommand.SOURCE_TUNER),
120 CAT4_PHONO(4, "PHONO", "Phono", RotelCommand.SOURCE_PHONO),
121 CAT4_BLUETOOTH(4, "BLUETOOTH", "Bluetooth", RotelCommand.SOURCE_BLUETOOTH),
123 CAT5_CD(5, "CD", "CD", RotelCommand.SOURCE_CD),
124 CAT5_COAX1(5, "COAX1", "Coax 1", RotelCommand.SOURCE_COAX1),
125 CAT5_COAX2(5, "COAX2", "Coax 2", RotelCommand.SOURCE_COAX2),
126 CAT5_OPTICAL1(5, "OPTICAL1", "Optical 1", RotelCommand.SOURCE_OPT1),
127 CAT5_OPTICAL2(5, "OPTICAL2", "Optical 2", RotelCommand.SOURCE_OPT2),
128 CAT5_AUX1(5, "AUX1", "Aux 1", RotelCommand.SOURCE_AUX1),
129 CAT5_AUX2(5, "AUX2", "Aux 2", RotelCommand.SOURCE_AUX2),
130 CAT5_TUNER(5, "TUNER", "Tuner", RotelCommand.SOURCE_TUNER),
131 CAT5_PHONO(5, "PHONO", "Phono", RotelCommand.SOURCE_PHONO),
132 CAT5_USB(5, "USB", "Front USB", RotelCommand.SOURCE_USB),
133 CAT5_PCUSB(5, "PCUSB", "PC USB", RotelCommand.SOURCE_PCUSB),
134 CAT5_BLUETOOTH(5, "BLUETOOTH", "Bluetooth", RotelCommand.SOURCE_BLUETOOTH),
136 CAT6_RCD(6, "RCD", "Rotel CD", RotelCommand.SOURCE_ROTEL_CD),
137 CAT6_CD(6, "CD", "CD", RotelCommand.SOURCE_CD),
138 CAT6_COAX1(6, "COAX1", "Coax 1", RotelCommand.SOURCE_COAX1),
139 CAT6_COAX2(6, "COAX2", "Coax 2", RotelCommand.SOURCE_COAX2),
140 CAT6_OPTICAL1(6, "OPTICAL1", "Optical 1", RotelCommand.SOURCE_OPT1),
141 CAT6_OPTICAL2(6, "OPTICAL2", "Optical 2", RotelCommand.SOURCE_OPT2),
142 CAT6_AUX1(6, "AUX1", "Aux 1", RotelCommand.SOURCE_AUX1),
143 CAT6_AUX2(6, "AUX2", "Aux 2", RotelCommand.SOURCE_AUX2),
144 CAT6_TUNER(6, "TUNER", "Tuner", RotelCommand.SOURCE_TUNER),
145 CAT6_PHONO(6, "PHONO", "Phono", RotelCommand.SOURCE_PHONO),
146 CAT6_USB(6, "USB", "Front USB", RotelCommand.SOURCE_USB),
148 CAT7_RCD(7, "RCD", "Rotel CD", RotelCommand.SOURCE_ROTEL_CD),
149 CAT7_CD(7, "CD", "CD", RotelCommand.SOURCE_CD),
150 CAT7_COAX1(7, "COAX1", "Coax 1", RotelCommand.SOURCE_COAX1),
151 CAT7_COAX2(7, "COAX2", "Coax 2", RotelCommand.SOURCE_COAX2),
152 CAT7_OPTICAL1(7, "OPTICAL1", "Optical 1", RotelCommand.SOURCE_OPT1),
153 CAT7_OPTICAL2(7, "OPTICAL2", "Optical 2", RotelCommand.SOURCE_OPT2),
154 CAT7_AUX1(7, "AUX1", "Aux 1", RotelCommand.SOURCE_AUX1),
155 CAT7_AUX2(7, "AUX2", "Aux 2", RotelCommand.SOURCE_AUX2),
156 CAT7_TUNER(7, "TUNER", "Tuner", RotelCommand.SOURCE_TUNER),
157 CAT7_PHONO(7, "PHONO", "Phono", RotelCommand.SOURCE_PHONO),
158 CAT7_USB(7, "USB", "Front USB", RotelCommand.SOURCE_USB),
159 CAT7_PCUSB(7, "PCUSB", "PC USB", RotelCommand.SOURCE_PCUSB),
160 CAT7_XLR(7, "XLR", "XLR", RotelCommand.SOURCE_XLR),
162 CAT8_CD(8, "CD", "CD", RotelCommand.SOURCE_CD),
163 CAT8_COAX1(8, "COAX1", "Coax 1", RotelCommand.SOURCE_COAX1),
164 CAT8_COAX2(8, "COAX2", "Coax 2", RotelCommand.SOURCE_COAX2),
165 CAT8_OPTICAL1(8, "OPTICAL1", "Optical 1", RotelCommand.SOURCE_OPT1),
166 CAT8_OPTICAL2(8, "OPTICAL2", "Optical 2", RotelCommand.SOURCE_OPT2),
167 CAT8_AUX(8, "AUX", "Aux", RotelCommand.SOURCE_AUX),
168 CAT8_TUNER(8, "TUNER", "Tuner", RotelCommand.SOURCE_TUNER),
169 CAT8_PHONO(8, "PHONO", "Phono", RotelCommand.SOURCE_PHONO),
170 CAT8_USB(8, "USB", "Front USB", RotelCommand.SOURCE_USB),
171 CAT8_PCUSB(8, "PCUSB", "PC USB", RotelCommand.SOURCE_PCUSB),
172 CAT8_BLUETOOTH(8, "BLUETOOTH", "Bluetooth", RotelCommand.SOURCE_BLUETOOTH),
173 CAT8_XLR(8, "XLR", "XLR", RotelCommand.SOURCE_XLR),
175 CAT9_RCD(9, "RCD", "Rotel CD", RotelCommand.SOURCE_ROTEL_CD),
176 CAT9_CD(9, "CD", "CD", RotelCommand.SOURCE_CD),
177 CAT9_COAX1(9, "COAX1", "Coax 1", RotelCommand.SOURCE_COAX1),
178 CAT9_COAX2(9, "COAX2", "Coax 2", RotelCommand.SOURCE_COAX2),
179 CAT9_COAX3(9, "COAX3", "Coax 3", RotelCommand.SOURCE_COAX3),
180 CAT9_OPTICAL1(9, "OPTICAL1", "Optical 1", RotelCommand.SOURCE_OPT1),
181 CAT9_OPTICAL2(9, "OPTICAL2", "Optical 2", RotelCommand.SOURCE_OPT2),
182 CAT9_OPTICAL3(9, "OPTICAL3", "Optical 3", RotelCommand.SOURCE_OPT3),
183 CAT9_AUX(9, "AUX", "Aux", RotelCommand.SOURCE_AUX),
184 CAT9_TUNER(9, "TUNER", "Tuner", RotelCommand.SOURCE_TUNER),
185 CAT9_PHONO(9, "PHONO", "Phono", RotelCommand.SOURCE_PHONO),
186 CAT9_USB(9, "USB", "Front USB", RotelCommand.SOURCE_USB),
187 CAT9_PCUSB(9, "PCUSB", "PC USB", RotelCommand.SOURCE_PCUSB),
188 CAT9_BLUETOOTH(9, "BLUETOOTH", "Bluetooth", RotelCommand.SOURCE_BLUETOOTH),
189 CAT9_XLR(9, "XLR", "XLR", RotelCommand.SOURCE_XLR),
191 CAT10_CD(10, "CD", "CD", RotelCommand.SOURCE_CD),
192 CAT10_TUNER(10, "TUNER", "Tuner", RotelCommand.SOURCE_TUNER),
193 CAT10_PHONO(10, "PHONO", "Phono", RotelCommand.SOURCE_PHONO),
194 CAT10_VIDEO1(10, "VIDEO1", "VIDEO 1", RotelCommand.SOURCE_VIDEO1),
195 CAT10_VIDEO2(10, "VIDEO2", "VIDEO 2", RotelCommand.SOURCE_VIDEO2),
196 CAT10_VIDEO3(10, "VIDEO3", "VIDEO 3", RotelCommand.SOURCE_VIDEO3),
197 CAT10_VIDEO4(10, "VIDEO4", "VIDEO 4", RotelCommand.SOURCE_VIDEO4),
198 CAT10_VIDEO5(10, "VIDEO5", "VIDEO 5", RotelCommand.SOURCE_VIDEO5),
199 CAT10_VIDEO6(10, "VIDEO6", "VIDEO 6", RotelCommand.SOURCE_VIDEO6),
200 CAT10_VIDEO7(10, "VIDEO7", "VIDEO 7", RotelCommand.SOURCE_VIDEO7),
201 CAT10_USB(10, "USB", "Front USB", RotelCommand.SOURCE_USB),
202 CAT10_PCUSB(10, "PCUSB", "PC USB", RotelCommand.SOURCE_PCUSB),
203 CAT10_BLUETOOTH(10, "BLUETOOTH", "Bluetooth", RotelCommand.SOURCE_BLUETOOTH),
204 CAT10_XLR(10, "XLR", "XLR", RotelCommand.SOURCE_XLR),
205 CAT10_MULTI(10, "MULTI", "MULTI", RotelCommand.SOURCE_MULTI_INPUT),
207 CAT11_CD(11, "CD", "CD", RotelCommand.SOURCE_CD),
208 CAT11_TUNER(11, "TUNER", "Tuner", RotelCommand.SOURCE_TUNER),
209 CAT11_PHONO(11, "PHONO", "Phono", RotelCommand.SOURCE_PHONO),
210 CAT11_VIDEO1(11, "VIDEO1", "VIDEO 1", RotelCommand.SOURCE_VIDEO1),
211 CAT11_VIDEO2(11, "VIDEO2", "VIDEO 2", RotelCommand.SOURCE_VIDEO2),
212 CAT11_VIDEO3(11, "VIDEO3", "VIDEO 3", RotelCommand.SOURCE_VIDEO3),
213 CAT11_VIDEO4(11, "VIDEO4", "VIDEO 4", RotelCommand.SOURCE_VIDEO4),
214 CAT11_VIDEO5(11, "VIDEO5", "VIDEO 5", RotelCommand.SOURCE_VIDEO5),
215 CAT11_VIDEO6(11, "VIDEO6", "VIDEO 6", RotelCommand.SOURCE_VIDEO6),
216 CAT11_VIDEO7(11, "VIDEO7", "VIDEO 7", RotelCommand.SOURCE_VIDEO7),
217 CAT11_VIDEO8(11, "VIDEO8", "VIDEO 8", RotelCommand.SOURCE_VIDEO8),
218 CAT11_USB(11, "USB", "Front USB", RotelCommand.SOURCE_USB),
219 CAT11_PCUSB(11, "PCUSB", "PC USB", RotelCommand.SOURCE_PCUSB),
220 CAT11_BLUETOOTH(11, "BLUETOOTH", "Bluetooth", RotelCommand.SOURCE_BLUETOOTH),
221 CAT11_XLR(11, "XLR", "XLR", RotelCommand.SOURCE_XLR),
222 CAT11_MULTI(11, "MULTI", "MULTI", RotelCommand.SOURCE_MULTI_INPUT),
224 CAT12_FM(12, "FM", "FM", RotelCommand.SOURCE_FM),
225 CAT12_DAB(12, "DAB", "DAB", RotelCommand.SOURCE_DAB),
227 CAT13_FM(13, "FM", "FM", RotelCommand.SOURCE_FM),
228 CAT13_DAB(13, "DAB", "DAB", RotelCommand.SOURCE_DAB),
229 CAT13_PLAYFI(13, "PLAYFI", "PlayFi", RotelCommand.SOURCE_PLAYFI),
231 CAT14_FM(14, "FM", "FM", RotelCommand.SOURCE_FM),
232 CAT14_DAB(14, "DAB", "DAB", RotelCommand.SOURCE_DAB),
233 CAT14_IRADIO(14, "IRADIO", "iRadio", RotelCommand.SOURCE_IRADIO),
234 CAT14_NETWORK(14, "NETWORK", "Network", RotelCommand.SOURCE_NETWORK),
236 CAT15_COAX1(15, "COAX1", "Coax 1", RotelCommand.SOURCE_COAX1),
237 CAT15_COAX2(15, "COAX2", "Coax 2", RotelCommand.SOURCE_COAX2),
238 CAT15_OPTICAL1(15, "OPTICAL1", "Optical 1", RotelCommand.SOURCE_OPT1),
239 CAT15_OPTICAL2(15, "OPTICAL2", "Optical 2", RotelCommand.SOURCE_OPT2),
240 CAT15_USB(15, "USB", "Front USB", RotelCommand.SOURCE_USB),
241 CAT15_PCUSB(15, "PCUSB", "PC USB", RotelCommand.SOURCE_PCUSB),
243 CAT16_IRADIO(16, "IRADIO", "iRadio", RotelCommand.SOURCE_IRADIO),
244 CAT16_NETWORK(16, "NETWORK", "Network", RotelCommand.SOURCE_NETWORK),
245 CAT16_AUX1_COAX(16, "AUX1_COAX", "Aux 1 Coax", RotelCommand.SOURCE_AUX1_COAX),
246 CAT16_AUX1_OPTICAL(16, "AUX1_OPTICAL", "Aux 1 Optical", RotelCommand.SOURCE_AUX1_OPT),
247 CAT16_FM(16, "FM", "FM", RotelCommand.SOURCE_FM),
248 CAT16_DAB(16, "DAB", "DAB", RotelCommand.SOURCE_DAB),
249 CAT16_USB(16, "USB", "USB", RotelCommand.SOURCE_USB),
251 CAT17_CD(17, "CD", "CD", RotelCommand.SOURCE_CD),
252 CAT17_IRADIO(17, "IRADIO", "iRadio", RotelCommand.SOURCE_IRADIO),
253 CAT17_NETWORK(17, "NETWORK", "Network", RotelCommand.SOURCE_NETWORK),
254 CAT17_AUX1_COAX(17, "AUX1_COAX", "Aux 1 Coax", RotelCommand.SOURCE_AUX1_COAX),
255 CAT17_AUX1_OPTICAL(17, "AUX1_OPTICAL", "Aux 1 Optical", RotelCommand.SOURCE_AUX1_OPT),
256 CAT17_AUX2(17, "AUX2", "Aux 2", RotelCommand.SOURCE_AUX2),
257 CAT17_FM(17, "FM", "FM", RotelCommand.SOURCE_FM),
258 CAT17_DAB(17, "DAB", "DAB", RotelCommand.SOURCE_DAB),
259 CAT17_USB(17, "USB", "USB", RotelCommand.SOURCE_USB),
261 CAT18_CD(18, "CD", "CD", RotelCommand.SOURCE_CD),
262 CAT18_COAX1(18, "COAX1", "Coax 1", RotelCommand.SOURCE_COAX1),
263 CAT18_COAX2(18, "COAX2", "Coax 2", RotelCommand.SOURCE_COAX2),
264 CAT18_COAX3(18, "COAX3", "Coax 3", RotelCommand.SOURCE_COAX3),
265 CAT18_OPTICAL1(18, "OPTICAL1", "Optical 1", RotelCommand.SOURCE_OPT1),
266 CAT18_OPTICAL2(18, "OPTICAL2", "Optical 2", RotelCommand.SOURCE_OPT2),
267 CAT18_OPTICAL3(18, "OPTICAL3", "Optical 3", RotelCommand.SOURCE_OPT3),
268 CAT18_AUX(18, "AUX", "Aux", RotelCommand.SOURCE_AUX),
269 CAT18_TUNER(18, "TUNER", "Tuner", RotelCommand.SOURCE_TUNER),
270 CAT18_PHONO(18, "PHONO", "Phono", RotelCommand.SOURCE_PHONO),
271 CAT18_BLUETOOTH(18, "BLUETOOTH", "Bluetooth", RotelCommand.SOURCE_BLUETOOTH),
272 CAT18_XLR(18, "XLR", "XLR", RotelCommand.SOURCE_XLR),
273 CAT18_PCUSB(18, "PCUSB", "PC USB", RotelCommand.SOURCE_PCUSB),
275 CAT19_CD(19, "CD", "CD", RotelCommand.SOURCE_CD),
276 CAT19_COAX1(19, "COAX1", "Coax 1", RotelCommand.SOURCE_COAX1),
277 CAT19_COAX2(19, "COAX2", "Coax 2", RotelCommand.SOURCE_COAX2),
278 CAT19_COAX3(19, "COAX3", "Coax 3", RotelCommand.SOURCE_COAX3),
279 CAT19_OPTICAL1(19, "OPTICAL1", "Optical 1", RotelCommand.SOURCE_OPT1),
280 CAT19_OPTICAL2(19, "OPTICAL2", "Optical 2", RotelCommand.SOURCE_OPT2),
281 CAT19_OPTICAL3(19, "OPTICAL3", "Optical 3", RotelCommand.SOURCE_OPT3),
282 CAT19_AUX1(19, "AUX1", "Aux 1", RotelCommand.SOURCE_AUX1),
283 CAT19_AUX2(19, "AUX2", "Aux 2", RotelCommand.SOURCE_AUX2),
284 CAT19_TUNER(19, "TUNER", "Tuner", RotelCommand.SOURCE_TUNER),
285 CAT19_PHONO(19, "PHONO", "Phono", RotelCommand.SOURCE_PHONO),
286 CAT19_BLUETOOTH(19, "BLUETOOTH", "Bluetooth", RotelCommand.SOURCE_BLUETOOTH),
287 CAT19_XLR(19, "XLR", "XLR", RotelCommand.SOURCE_XLR),
288 CAT19_PCUSB(19, "PCUSB", "PC USB", RotelCommand.SOURCE_PCUSB),
290 CAT20_CD(20, "CD", "CD", RotelCommand.SOURCE_CD),
291 CAT20_COAX1(20, "COAX1", "Coax 1", RotelCommand.SOURCE_COAX1),
292 CAT20_COAX2(20, "COAX2", "Coax 2", RotelCommand.SOURCE_COAX2),
293 CAT20_COAX3(20, "COAX3", "Coax 3", RotelCommand.SOURCE_COAX3),
294 CAT20_OPTICAL1(20, "OPTICAL1", "Optical 1", RotelCommand.SOURCE_OPT1),
295 CAT20_OPTICAL2(20, "OPTICAL2", "Optical 2", RotelCommand.SOURCE_OPT2),
296 CAT20_OPTICAL3(20, "OPTICAL3", "Optical 3", RotelCommand.SOURCE_OPT3),
297 CAT20_AUX1(20, "AUX1", "Aux 1", RotelCommand.SOURCE_AUX1),
298 CAT20_AUX2(20, "AUX2", "Aux 2", RotelCommand.SOURCE_AUX2),
299 CAT20_TUNER(20, "TUNER", "Tuner", RotelCommand.SOURCE_TUNER),
300 CAT20_PHONO(20, "PHONO", "Phono", RotelCommand.SOURCE_PHONO),
301 CAT20_BLUETOOTH(20, "BLUETOOTH", "Bluetooth", RotelCommand.SOURCE_BLUETOOTH),
302 CAT20_XLR1(20, "XLR1", "XLR 1", RotelCommand.SOURCE_XLR1),
303 CAT20_XLR2(20, "XLR2", "XLR 2", RotelCommand.SOURCE_XLR1),
304 CAT20_PCUSB(20, "PCUSB", "PC USB", RotelCommand.SOURCE_PCUSB),
306 CAT21_INPUTA(21, "INPUTA", "Input A", RotelCommand.SOURCE_INPUT_A, null, RotelCommand.ZONE1_SOURCE_INPUT_A,
307 RotelCommand.ZONE2_SOURCE_INPUT_A, RotelCommand.ZONE3_SOURCE_INPUT_A, RotelCommand.ZONE4_SOURCE_INPUT_A),
308 CAT21_INPUTB(21, "INPUTB", "Input B", RotelCommand.SOURCE_INPUT_B, null, RotelCommand.ZONE1_SOURCE_INPUT_B,
309 RotelCommand.ZONE2_SOURCE_INPUT_B, RotelCommand.ZONE3_SOURCE_INPUT_B, RotelCommand.ZONE4_SOURCE_INPUT_B),
310 CAT21_INPUTC(21, "INPUTC", "Input C", RotelCommand.SOURCE_INPUT_C, null, RotelCommand.ZONE1_SOURCE_INPUT_C,
311 RotelCommand.ZONE2_SOURCE_INPUT_C, RotelCommand.ZONE3_SOURCE_INPUT_C, RotelCommand.ZONE4_SOURCE_INPUT_C),
312 CAT21_INPUTD(21, "INPUTD", "Input D", RotelCommand.SOURCE_INPUT_D, null, RotelCommand.ZONE1_SOURCE_INPUT_D,
313 RotelCommand.ZONE2_SOURCE_INPUT_D, RotelCommand.ZONE3_SOURCE_INPUT_D, RotelCommand.ZONE4_SOURCE_INPUT_D);
315 private int category;
317 private String label;
318 private @Nullable RotelCommand command;
319 private @Nullable RotelCommand recordCommand;
320 private @Nullable RotelCommand zone1Command;
321 private @Nullable RotelCommand zone2Command;
322 private @Nullable RotelCommand zone3Command;
323 private @Nullable RotelCommand zone4Command;
328 * @param category a category of models for which the source is available
329 * @param name the name of the source
330 * @param label the label of the source
331 * @param command the command to select the source
333 private RotelSource(int category, String name, String label, @Nullable RotelCommand command) {
334 this(category, name, label, command, null, null, null, null, null);
340 * @param category a category of models for which the source is available
341 * @param name the name of the source
342 * @param label the label of the source
343 * @param command the command to select the source
344 * @param recordCommand the command to select the source as source to be recorded
345 * @param zone1Command the command to select the source in the zone 1 or main zone
346 * @param zone2Command the command to select the source in the zone 2
347 * @param zone3Command the command to select the source in the zone 3
348 * @param zone4Command the command to select the source in the zone 4
350 private RotelSource(int category, String name, String label, @Nullable RotelCommand command,
351 @Nullable RotelCommand recordCommand, @Nullable RotelCommand zone1Command,
352 @Nullable RotelCommand zone2Command, @Nullable RotelCommand zone3Command,
353 @Nullable RotelCommand zone4Command) {
354 this.category = category;
357 this.command = command;
358 this.recordCommand = recordCommand;
359 this.zone1Command = zone1Command;
360 this.zone2Command = zone2Command;
361 this.zone3Command = zone3Command;
362 this.zone4Command = zone4Command;
366 * Get the category of models for the source
368 * @return the category of models
370 public int getCategory() {
375 * Get the name of the source
379 public String getName() {
384 * Get the label of the source
388 public String getLabel() {
393 * Get the command to select the source
395 * @return the command
397 public @Nullable RotelCommand getCommand() {
402 * Get the command to select the source as source to be recorded
404 * @return the command
406 public @Nullable RotelCommand getRecordCommand() {
407 return recordCommand;
411 * Get the command to select the source in a zone
413 * @param numZone the zone number, 1 for main zone or zone 1, 2 for zone 2, 3 for zone 3, 4 for zone 4
415 * @return the command
417 public @Nullable RotelCommand getZoneCommand(int numZone) {
428 throw new IllegalArgumentException("numZone must be a value between 1 and 4");
433 * Get the list of {@link RotelSource} available for a particular category of models
435 * @param category a category of models
436 * @param type a source type (0 for global source, 1 for main zone or zone 1, 2 for zone 2, 3 for zone 3, 4 for zone
437 * 4 and 5 for record source)
439 * @return the list of {@link RotelSource} available in a zone for a provided category of models
441 public static List<RotelSource> getSources(int category, int type) {
442 List<RotelSource> sources = new ArrayList<>();
443 for (RotelSource value : RotelSource.values()) {
444 if (value.getCategory() == category && ((type == 0 && value.getCommand() != null)
445 || (type == 1 && value.getZoneCommand(1) != null) || (type == 2 && value.getZoneCommand(2) != null)
446 || (type == 3 && value.getZoneCommand(3) != null) || (type == 4 && value.getZoneCommand(4) != null)
447 || (type == 5 && value.getRecordCommand() != null))) {
455 * Get the source associated to a name for a particular category of models
457 * @param category a category of models
458 * @param name the name used to identify the source
460 * @return the source associated to the searched name for the provided category of models
462 * @throws RotelException - If no source is associated to the searched name for the provided category
464 public static RotelSource getFromName(int category, String name) throws RotelException {
465 for (RotelSource value : RotelSource.values()) {
466 if (value.getCategory() == category && value.getName().equals(name)) {
470 throw new RotelException("Invalid name for a source: " + name);
474 * Get the source associated to a command for a particular category of models
476 * @param category a category of models
477 * @param command the command used to identify the source
478 * @param type a source type (0 for global source, 1 for main zone or zone 1, 2 for zone 2, 3 for zone 3,
479 * 4 for zone 4 and 5 for record source)
481 * @return the source associated to the searched command for the provided category of models
483 * @throws RotelException - If no source is associated to the searched command for the provided category
485 public static RotelSource getFromCommand(int category, RotelCommand command, int type) throws RotelException {
486 for (RotelSource value : RotelSource.values()) {
487 if (value.getCategory() == category && ((type == 0 && value.getCommand() == command)
488 || (type == 1 && value.getZoneCommand(1) == command)
489 || (type == 2 && value.getZoneCommand(2) == command)
490 || (type == 3 && value.getZoneCommand(3) == command)
491 || (type == 4 && value.getZoneCommand(4) == command)
492 || (type == 5 && value.getRecordCommand() == command))) {
496 throw new RotelException("Invalid command for a source: " + command.getLabel());