From 0e3a9f3c7ef2f91ace75a064618920fd61468970 Mon Sep 17 00:00:00 2001 From: lolodomo Date: Sun, 7 Aug 2022 22:50:19 +0200 Subject: [PATCH] [rotel] Other commands added for RSP-1576, RSP-1582, RAP-1580, RDD-1580, RA-1592, RC-1590 (#13223) Signed-off-by: Laurent Garnier --- bundles/org.openhab.binding.rotel/README.md | 36 +++-- .../rotel/internal/RotelBindingConstants.java | 14 ++ .../binding/rotel/internal/RotelModel.java | 68 +++++---- .../internal/communication/RotelCommand.java | 49 +++++-- .../communication/RotelSimuConnector.java | 131 ++++++++++++++++++ .../rotel/internal/handler/RotelHandler.java | 92 ++++++++---- .../resources/OH-INF/i18n/rotel.properties | 24 ++++ .../main/resources/OH-INF/thing/ra1592.xml | 1 + .../main/resources/OH-INF/thing/rap1580.xml | 1 + .../main/resources/OH-INF/thing/rc1590.xml | 1 + .../main/resources/OH-INF/thing/rdd1580.xml | 1 + .../main/resources/OH-INF/thing/rsp1576.xml | 1 + .../main/resources/OH-INF/thing/rsp1582.xml | 1 + 13 files changed, 349 insertions(+), 71 deletions(-) diff --git a/bundles/org.openhab.binding.rotel/README.md b/bundles/org.openhab.binding.rotel/README.md index 1a586359e08..cf002594e1c 100644 --- a/bundles/org.openhab.binding.rotel/README.md +++ b/bundles/org.openhab.binding.rotel/README.md @@ -191,15 +191,15 @@ Here are the list of channels available for each thing type: | ra12 | power, source, volume, mute, bass, treble, playControl, frequency, brightness, tcbypass, balance, otherCommand | | ra1570 | power, source, volume, mute, bass, treble, playControl, frequency, brightness, tcbypass, balance, speakera, speakerb, otherCommand | | ra1572 | power, source, volume, mute, bass, treble, frequency, brightness, tcbypass, balance, speakera, speakerb, otherCommand | -| ra1592 | power, source, volume, mute, bass, treble, frequency, brightness, tcbypass, balance, speakera, speakerb | -| rap1580 | power, source, dsp, volume, mute, brightness | +| ra1592 | power, source, volume, mute, bass, treble, frequency, brightness, tcbypass, balance, speakera, speakerb, otherCommand | +| rap1580 | power, source, dsp, volume, mute, brightness, otherCommand | | rc1570 | power, source, volume, mute, bass, treble, playControl, frequency, brightness, tcbypass, balance, otherCommand | | rc1572 | power, source, volume, mute, bass, treble, frequency, brightness, tcbypass, balance, otherCommand | -| rc1590 | power, source, volume, mute, bass, treble, frequency, brightness, tcbypass, balance | +| rc1590 | power, source, volume, mute, bass, treble, frequency, brightness, tcbypass, balance, otherCommand | | rcd1570 | power, playControl, brightness | | rcd1572 | power, playControl, track, random, repeat, brightness, otherCommand | | rcx1500 | power, source, volume, mute, playControl | -| rdd1580 | power, source, playControl, frequency | +| rdd1580 | power, source, playControl, frequency, otherCommand | | rdg1520 | power, source, playControl | | rsp1066 | mainZone#power, mainZone#source, mainZone#recordSource, mainZone#dsp, mainZone#volumeUpDown, mainZone#mute, mainZone#bass, mainZone#treble, mainZone#line1, mainZone#otherCommand, zone2#power, zone2#source, zone2#volumeUpDown | | rsp1068 | mainZone#power, mainZone#source, mainZone#recordSource, mainZone#dsp, mainZone#volume, mainZone#mute, mainZone#bass, mainZone#treble, mainZone#line1, mainZone#line2, mainZone#otherCommand, zone2#power, zone2#source, zone2#volume, zone2#mute, zone3#power, zone3#source, zone3#volume, zone3#mute, zone4#power, zone4#source, zone4#volume, zone4#mute | @@ -207,8 +207,8 @@ Here are the list of channels available for each thing type: | rsp1098 | mainZone#power, mainZone#source, mainZone#recordSource, mainZone#dsp, mainZone#volume, mainZone#mute, mainZone#bass, mainZone#treble, mainZone#line1, mainZone#otherCommand, zone2#power, zone2#source, zone2#volume, zone2#mute | | rsp1570 | mainZone#power, mainZone#source, mainZone#recordSource, mainZone#dsp, mainZone#volume, mainZone#mute, mainZone#bass, mainZone#treble, mainZone#line1, mainZone#line2, mainZone#otherCommand, zone2#power, zone2#source, zone2#volume, zone2#mute, zone3#power, zone3#source, zone3#volume, zone3#mute, zone4#power, zone4#source, zone4#volume, zone4#mute | | rsp1572 | mainZone#power, mainZone#source, mainZone#recordSource, mainZone#dsp, mainZone#volume, mainZone#mute, mainZone#line1, mainZone#line2, mainZone#otherCommand, zone2#power, zone2#source, zone2#volume, zone2#mute, zone3#power, zone3#source, zone3#volume, zone3#mute, zone4#power, zone4#source, zone4#volume, zone4#mute | -| rsp1576 | power, source, dsp, volume, mute, brightness | -| rsp1582 | power, source, dsp, volume, mute, brightness | +| rsp1576 | power, source, dsp, volume, mute, brightness, otherCommand | +| rsp1582 | power, source, dsp, volume, mute, brightness, otherCommand | | rsx1055 | mainZone#power, mainZone#source, mainZone#recordSource, mainZone#dsp, mainZone#volumeUpDown, mainZone#mute, mainZone#bass, mainZone#treble, mainZone#line1, mainZone#otherCommand, zone2#power, zone2#source, zone2#volumeUpDown | | rsx1056 | mainZone#power, mainZone#source, mainZone#recordSource, mainZone#dsp, mainZone#volume, mainZone#mute, mainZone#bass, mainZone#treble, mainZone#line1, mainZone#otherCommand, zone2#power, zone2#source, zone2#volume, zone2#mute | | rsx1057 | mainZone#power, mainZone#source, mainZone#recordSource, mainZone#dsp, mainZone#volume, mainZone#mute, mainZone#bass, mainZone#treble, mainZone#line1, mainZone#otherCommand, zone2#power, zone2#source, zone2#volume, zone2#mute | @@ -232,27 +232,35 @@ Here are the available commands for the otherCommand channel depending on the th | Thing Type | Available commands for the otherCommand channel | |--------------------|-------------------------------------------------------------------------------| | a11 | PLAY, PAUSE, STOP, TRACK_FWD, TRACK_BACK | -| a12 | PLAY, PAUSE, STOP, TRACK_FWD, TRACK_BACK | -| a14 | PLAY, PAUSE, STOP, TRACK_FWD, TRACK_BACK | +| a12 | PLAY, PAUSE, STOP, TRACK_FWD, TRACK_BACK, PCUSB_CLASS | +| a14 | PLAY, PAUSE, STOP, TRACK_FWD, TRACK_BACK, PCUSB_CLASS | | cd11 | FAST_FWD, FAST_BACK, EJECT, TIME_TOGGLE, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6, KEY7, KEY8, KEY9, KEY0 | | cd14 | FAST_FWD, FAST_BACK, EJECT, TIME_TOGGLE, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6, KEY7, KEY8, KEY9, KEY0 | | p5 | PLAY, PAUSE, STOP, TRACK_FWD, TRACK_BACK | | ra11 | FAST_FWD, FAST_BACK, RANDOM_TOGGLE, REPEAT_TOGGLE, MENU, EXIT, UP, DOWN, LEFT, RIGHT, ENTER, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6, KEY7, KEY8, KEY9, KEY0 | | ra12 | FAST_FWD, FAST_BACK, RANDOM_TOGGLE, REPEAT_TOGGLE, MENU, EXIT, UP, DOWN, LEFT, RIGHT, ENTER, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6, KEY7, KEY8, KEY9, KEY0 | -| ra1570 | FAST_FWD, FAST_BACK, RANDOM_TOGGLE, REPEAT_TOGGLE, MENU, EXIT, UP, DOWN, LEFT, RIGHT, ENTER, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6, KEY7, KEY8, KEY9, KEY0, PCUSB_CLASS_1, PCUSB_CLASS_2 | -| ra1572 (ASCII V1) | PLAY, PAUSE, STOP, TRACK_FWD, TRACK_BACK, MENU, EXIT, UP, DOWN, LEFT, RIGHT, ENTER, PCUSB_CLASS_1, PCUSB_CLASS_2, RESET_FACTORY | -| ra1572 (ASCII V2) | PLAY, PAUSE, STOP, TRACK_FWD, TRACK_BACK, PCUSB_CLASS_1, PCUSB_CLASS_2, RESET_FACTORY | -| rc1570 | FAST_FWD, FAST_BACK, RANDOM_TOGGLE, REPEAT_TOGGLE, MENU, EXIT, UP, DOWN, LEFT, RIGHT, ENTER, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6, KEY7, KEY8, KEY9, KEY0, PCUSB_CLASS_1, PCUSB_CLASS_2 | -| rc1572 (ASCII V1) | PLAY, PAUSE, STOP, TRACK_FWD, TRACK_BACK, MENU, EXIT, UP, DOWN, LEFT, RIGHT, ENTER, PCUSB_CLASS_1, PCUSB_CLASS_2, RESET_FACTORY | -| rc1572 (ASCII V2) | PLAY, PAUSE, STOP, TRACK_FWD, TRACK_BACK, PCUSB_CLASS_1, PCUSB_CLASS_2, RESET_FACTORY | +| ra1570 | FAST_FWD, FAST_BACK, RANDOM_TOGGLE, REPEAT_TOGGLE, MENU, EXIT, UP, DOWN, LEFT, RIGHT, ENTER, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6, KEY7, KEY8, KEY9, KEY0, PCUSB_CLASS, PCUSB_CLASS_1, PCUSB_CLASS_2 | +| ra1572 (ASCII V1) | PLAY, PAUSE, STOP, TRACK_FWD, TRACK_BACK, MENU, EXIT, UP, DOWN, LEFT, RIGHT, ENTER, PCUSB_CLASS, PCUSB_CLASS_1, PCUSB_CLASS_2, POWER_MODE, RESET_FACTORY | +| ra1572 (ASCII V2) | PLAY, PAUSE, STOP, TRACK_FWD, TRACK_BACK, PCUSB_CLASS, PCUSB_CLASS_1, PCUSB_CLASS_2, RESET_FACTORY | +| ra1592 (ASCII V1) | PLAY, PAUSE, STOP, TRACK_FWD, TRACK_BACK, FAST_FWD, FAST_BACK, MENU, EXIT, UP, DOWN, LEFT, RIGHT, ENTER, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6, KEY7, KEY8, KEY9, KEY0, PCUSB_CLASS, PCUSB_CLASS_1, PCUSB_CLASS_2, POWER_MODE, POWER_MODE_QUICK, POWER_MODE_NORMAL, RESET_FACTORY | +| ra1592 (ASCII V2) | PLAY, PAUSE, STOP, TRACK_FWD, TRACK_BACK, PCUSB_CLASS, PCUSB_CLASS_1, PCUSB_CLASS_2 | +| rap1580 | PLAY, PAUSE, STOP, TRACK_FWD, TRACK_BACK, MENU, EXIT, UP, DOWN, LEFT, RIGHT, ENTER, SUB_LEVEL_UP, SUB_LEVEL_DOWN, C_LEVEL_UP, C_LEVEL_DOWN, SR_LEVEL_UP, SR_LEVEL_DOWN, SL_LEVEL_UP, SL_LEVEL_DOWN, CBR_LEVEL_UP, CBR_LEVEL_DOWN, CBL_LEVEL_UP, CBL_LEVEL_DOWN, CFR_LEVEL_UP, CFR_LEVEL_DOWN, CFL_LEVEL_UP, CFL_LEVEL_DOWN, CRR_LEVEL_UP, CRR_LEVEL_DOWN, CRL_LEVEL_UP, CRL_LEVEL_DOWN, NEXT_MODE, RESET_FACTORY | +| rc1570 | FAST_FWD, FAST_BACK, RANDOM_TOGGLE, REPEAT_TOGGLE, MENU, EXIT, UP, DOWN, LEFT, RIGHT, ENTER, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6, KEY7, KEY8, KEY9, KEY0, PCUSB_CLASS, PCUSB_CLASS_1, PCUSB_CLASS_2 | +| rc1572 (ASCII V1) | PLAY, PAUSE, STOP, TRACK_FWD, TRACK_BACK, MENU, EXIT, UP, DOWN, LEFT, RIGHT, ENTER, PCUSB_CLASS, PCUSB_CLASS_1, PCUSB_CLASS_2, POWER_MODE, RESET_FACTORY | +| rc1572 (ASCII V2) | PLAY, PAUSE, STOP, TRACK_FWD, TRACK_BACK, PCUSB_CLASS, PCUSB_CLASS_1, PCUSB_CLASS_2, RESET_FACTORY | +| rc1590 (ASCII V1) | PLAY, PAUSE, STOP, TRACK_FWD, TRACK_BACK, FAST_FWD, FAST_BACK, MENU, EXIT, UP, DOWN, LEFT, RIGHT, ENTER, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6, KEY7, KEY8, KEY9, KEY0, PCUSB_CLASS, PCUSB_CLASS_1, PCUSB_CLASS_2, POWER_MODE, POWER_MODE_QUICK, POWER_MODE_NORMAL, RESET_FACTORY | +| rc1590 (ASCII V2) | PLAY, PAUSE, STOP, TRACK_FWD, TRACK_BACK, PCUSB_CLASS, PCUSB_CLASS_1, PCUSB_CLASS_2 | | rcd1572 (ASCII V1) | FAST_FWD, FAST_BACK, EJECT, TIME_TOGGLE, PROGRAM, MENU, EXIT, UP, DOWN, LEFT, RIGHT, ENTER, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6, KEY7, KEY8, KEY9, KEY0 | | rcd1572 (ASCII V2) | FAST_FWD, FAST_BACK, EJECT, TIME_TOGGLE, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6, KEY7, KEY8, KEY9, KEY0 | +| rdd1580 | RANDOM_TOGGLE, REPEAT_TOGGLE, PCUSB_CLASS, PCUSB_CLASS_1, PCUSB_CLASS_2 | | rsp1066 | DSP_TOGGLE, PROLOGIC_TOGGLE, DOLBY_TOGGLE, PLII_PANORAMA_TOGGLE, PLII_DIMENSION_UP, PLII_DIMENSION_DOWN, PLII_CENTER_WIDTH_UP, PLII_CENTER_WIDTH_DOWN, DDEX_TOGGLE, NEO6_TOGGLE, NEXT_MODE, MENU, UP, DOWN, LEFT, RIGHT, ENTER, RECORD_FONCTION_SELECT, TONE_CONTROL_SELECT, DYNAMIC_RANGE, DIGITAL_INPUT_SELECT, ZONE_TOGGLE, CENTER_TRIM, SUB_TRIM, SURROUND_TRIM, CINEMA_EQ_TOGGLE | | rsp1068 | DSP_TOGGLE, PROLOGIC_TOGGLE, DOLBY_TOGGLE, PLII_PANORAMA_TOGGLE, PLII_DIMENSION_UP, PLII_DIMENSION_DOWN, PLII_CENTER_WIDTH_UP, PLII_CENTER_WIDTH_DOWN, DDEX_TOGGLE, NEO6_TOGGLE, NEXT_MODE, MENU, UP, DOWN, LEFT, RIGHT, ENTER, RECORD_FONCTION_SELECT, TONE_CONTROL_SELECT, DYNAMIC_RANGE, DIGITAL_INPUT_SELECT, ZONE_TOGGLE, CENTER_TRIM, SUB_TRIM, SURROUND_TRIM, CINEMA_EQ_TOGGLE | | rsp1069 | DSP_TOGGLE, PROLOGIC_TOGGLE, DOLBY_TOGGLE, PLII_PANORAMA_TOGGLE, PLII_DIMENSION_UP, PLII_DIMENSION_DOWN, PLII_CENTER_WIDTH_UP, PLII_CENTER_WIDTH_DOWN, DDEX_TOGGLE, NEO6_TOGGLE, NEXT_MODE, MENU, UP, DOWN, LEFT, RIGHT, ENTER, RECORD_FONCTION_SELECT, TONE_CONTROL_SELECT, DYNAMIC_RANGE, DIGITAL_INPUT_SELECT, ZONE_TOGGLE, CENTER_TRIM, SUB_TRIM, SURROUND_TRIM, CINEMA_EQ_TOGGLE, POWER_OFF_ALL_ZONES, PARTY_MODE_TOGGLE, ZONE2_PARTY_MODE_TOGGLE, ZONE3_PARTY_MODE_TOGGLE, ZONE4_PARTY_MODE_TOGGLE, OUTPUT_RESOLUTION, HDMI_AMP_MODE, HDMI_TV_MODE | | rsp1098 | DSP_TOGGLE, PROLOGIC_TOGGLE, DOLBY_TOGGLE, PLII_PANORAMA_TOGGLE, PLII_DIMENSION_UP, PLII_DIMENSION_DOWN, PLII_CENTER_WIDTH_UP, PLII_CENTER_WIDTH_DOWN, DDEX_TOGGLE, NEO6_TOGGLE, NEXT_MODE, MENU, UP, DOWN, LEFT, RIGHT, ENTER, RECORD_FONCTION_SELECT, TONE_CONTROL_SELECT, DYNAMIC_RANGE, DIGITAL_INPUT_SELECT, ZONE_TOGGLE, CENTER_TRIM, SUB_TRIM, SURROUND_TRIM, CINEMA_EQ_TOGGLE, REMOTE_VOLUME_UP, REMOTE_VOLUME_DOWN | | rsp1570 | STEREO_BYPASS_TOGGLE, DSP_TOGGLE, PROLOGIC_TOGGLE, DOLBY_TOGGLE, PLII_PANORAMA_TOGGLE, PLII_DIMENSION_UP, PLII_DIMENSION_DOWN, PLII_CENTER_WIDTH_UP, PLII_CENTER_WIDTH_DOWN, DDEX_TOGGLE, NEO6_TOGGLE, NEXT_MODE, MENU, UP, DOWN, LEFT, RIGHT, ENTER, RECORD_FONCTION_SELECT, TONE_CONTROL_SELECT, DYNAMIC_RANGE, DIGITAL_INPUT_SELECT, ZONE_TOGGLE, CENTER_TRIM, SUB_TRIM, SURROUND_TRIM, CINEMA_EQ_TOGGLE, POWER_OFF_ALL_ZONES, PARTY_MODE_TOGGLE, ZONE2_PARTY_MODE_TOGGLE, ZONE3_PARTY_MODE_TOGGLE, ZONE4_PARTY_MODE_TOGGLE, OUTPUT_RESOLUTION, HDMI_AMP_MODE, HDMI_TV_MODE, RESET_FACTORY | | rsp1572 | STEREO_BYPASS_TOGGLE, DSP_TOGGLE, PROLOGIC_TOGGLE, DOLBY_TOGGLE, PLII_PANORAMA_TOGGLE, PLII_DIMENSION_UP, PLII_DIMENSION_DOWN, PLII_CENTER_WIDTH_UP, PLII_CENTER_WIDTH_DOWN, DDEX_TOGGLE, NEO6_TOGGLE, NEXT_MODE, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6, KEY7, KEY8, KEY9, KEY0, MENU, EXIT, UP_PRESSED, UP_RELEASED, DOWN_PRESSED, DOWN_RELEASED, LEFT_PRESSED, LEFT_RELEASED, RIGHT_PRESSED, RIGHT_RELEASED, ENTER, RECORD_FONCTION_SELECT, TONE_CONTROL_SELECT, DYNAMIC_RANGE, DIGITAL_INPUT_SELECT, ZONE_TOGGLE, CENTER_TRIM, SUB_TRIM, SURROUND_TRIM, CINEMA_EQ_TOGGLE, POWER_OFF_ALL_ZONES, PARTY_MODE_TOGGLE, ZONE2_PARTY_MODE_TOGGLE, ZONE3_PARTY_MODE_TOGGLE, ZONE4_PARTY_MODE_TOGGLE, OUTPUT_RESOLUTION, HDMI_AMP_MODE, HDMI_TV_MODE, ROOM_EQ_TOGGLE, SPEAKER_SETTING_TOGGLE, RESET_FACTORY | +| rsp1576 | PLAY, PAUSE, STOP, TRACK_FWD, TRACK_BACK, MENU, EXIT, UP, DOWN, LEFT, RIGHT, ENTER, SUB_LEVEL_UP, SUB_LEVEL_DOWN, C_LEVEL_UP, C_LEVEL_DOWN, SR_LEVEL_UP, SR_LEVEL_DOWN, SL_LEVEL_UP, SL_LEVEL_DOWN, CBR_LEVEL_UP, CBR_LEVEL_DOWN, CBL_LEVEL_UP, CBL_LEVEL_DOWN, CFR_LEVEL_UP, CFR_LEVEL_DOWN, CFL_LEVEL_UP, CFL_LEVEL_DOWN, CRR_LEVEL_UP, CRR_LEVEL_DOWN, CRL_LEVEL_UP, CRL_LEVEL_DOWN, NEXT_MODE, RESET_FACTORY | +| rsp1582 | PLAY, PAUSE, STOP, TRACK_FWD, TRACK_BACK, MENU, EXIT, UP, DOWN, LEFT, RIGHT, ENTER, SUB_LEVEL_UP, SUB_LEVEL_DOWN, C_LEVEL_UP, C_LEVEL_DOWN, SR_LEVEL_UP, SR_LEVEL_DOWN, SL_LEVEL_UP, SL_LEVEL_DOWN, CBR_LEVEL_UP, CBR_LEVEL_DOWN, CBL_LEVEL_UP, CBL_LEVEL_DOWN, NEXT_MODE, RESET_FACTORY | | rsx1055 | DSP_TOGGLE, PROLOGIC_TOGGLE, DOLBY_TOGGLE, PLII_PANORAMA_TOGGLE, PLII_DIMENSION_UP, PLII_DIMENSION_DOWN, PLII_CENTER_WIDTH_UP, PLII_CENTER_WIDTH_DOWN, DDEX_TOGGLE, NEO6_TOGGLE, NEXT_MODE, TUNE_UP, TUNE_DOWN, MEMORY, BAND_TOGGLE, AM, FM, TUNE_PRESET_TOGGLE, TUNING_MODE_SELECT, PRESET_MODE_SELECT, FREQUENCY_DIRECT, PRESET_SCAN, TUNER_DISPLAY, RDS_PTY, RDS_TP, RDS_TA, FM_MONO_TOGGLE, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6, KEY7, KEY8, KEY9, KEY0, MENU, UP, DOWN, LEFT, RIGHT, ENTER, RECORD_FONCTION_SELECT, TONE_CONTROL_SELECT, DYNAMIC_RANGE, DIGITAL_INPUT_SELECT, ZONE_TOGGLE, CENTER_TRIM, SUB_TRIM, SURROUND_TRIM, CINEMA_EQ_TOGGLE | | rsx1056 | DSP_TOGGLE, PROLOGIC_TOGGLE, DOLBY_TOGGLE, PLII_PANORAMA_TOGGLE, PLII_DIMENSION_UP, PLII_DIMENSION_DOWN, PLII_CENTER_WIDTH_UP, PLII_CENTER_WIDTH_DOWN, DDEX_TOGGLE, NEO6_TOGGLE, NEXT_MODE, TUNE_UP, TUNE_DOWN, MEMORY, BAND_TOGGLE, AM, FM, TUNE_PRESET_TOGGLE, TUNING_MODE_SELECT, PRESET_MODE_SELECT, FREQUENCY_DIRECT, PRESET_SCAN, TUNER_DISPLAY, RDS_PTY, RDS_TP, RDS_TA, FM_MONO_TOGGLE, ZONE2_TUNE_UP, ZONE2_TUNE_DOWN, ZONE2_BAND_TOGGLE, ZONE2_AM, ZONE2_FM, ZONE2_TUNE_PRESET_TOGGLE, ZONE2_TUNING_MODE_SELECT, ZONE2_PRESET_MODE_SELECT, ZONE2_PRESET_SCAN, ZONE2_FM_MONO_TOGGLE, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6, KEY7, KEY8, KEY9, KEY0, ZONE2_KEY1, ZONE2_KEY2, ZONE2_KEY3, ZONE2_KEY4, ZONE2_KEY5, ZONE2_KEY6, ZONE2_KEY7, ZONE2_KEY8, ZONE2_KEY9, ZONE2_KEY0, MENU, UP, DOWN, LEFT, RIGHT, ENTER, RECORD_FONCTION_SELECT, TONE_CONTROL_SELECT, DYNAMIC_RANGE, DIGITAL_INPUT_SELECT, ZONE_TOGGLE, CENTER_TRIM, SUB_TRIM, SURROUND_TRIM, CINEMA_EQ_TOGGLE | | rsx1057 | DSP_TOGGLE, PROLOGIC_TOGGLE, DOLBY_TOGGLE, PLII_PANORAMA_TOGGLE, PLII_DIMENSION_UP, PLII_DIMENSION_DOWN, PLII_CENTER_WIDTH_UP, PLII_CENTER_WIDTH_DOWN, DDEX_TOGGLE, NEO6_TOGGLE, NEXT_MODE, TUNE_UP, TUNE_DOWN, PRESET_UP, PRESET_DOWN, FREQUENCY_UP, FREQUENCY_DOWN, MEMORY, BAND_TOGGLE, AM, FM, TUNE_PRESET_TOGGLE, TUNING_MODE_SELECT, PRESET_MODE_SELECT, FREQUENCY_DIRECT, PRESET_SCAN, TUNER_DISPLAY, RDS_PTY, RDS_TP, RDS_TA, FM_MONO_TOGGLE, ZONE2_TUNE_UP, ZONE2_TUNE_DOWN, ZONE2_PRESET_UP, ZONE2_PRESET_DOWN, ZONE2_FREQUENCY_UP, ZONE2_FREQUENCY_DOWN, ZONE2_BAND_TOGGLE, ZONE2_AM, ZONE2_FM, ZONE2_TUNE_PRESET_TOGGLE, ZONE2_TUNING_MODE_SELECT, ZONE2_PRESET_MODE_SELECT, ZONE2_PRESET_SCAN, ZONE2_FM_MONO_TOGGLE, KEY1, KEY2, KEY3, KEY4, KEY5, KEY6, KEY7, KEY8, KEY9, KEY0, ZONE2_KEY1, ZONE2_KEY2, ZONE2_KEY3, ZONE2_KEY4, ZONE2_KEY5, ZONE2_KEY6, ZONE2_KEY7, ZONE2_KEY8, ZONE2_KEY9, ZONE2_KEY0, MENU, UP, DOWN, LEFT, RIGHT, ENTER, RECORD_FONCTION_SELECT, TONE_CONTROL_SELECT, DYNAMIC_RANGE, DIGITAL_INPUT_SELECT, ZONE_TOGGLE, CENTER_TRIM, SUB_TRIM, SURROUND_TRIM, CINEMA_EQ_TOGGLE | diff --git a/bundles/org.openhab.binding.rotel/src/main/java/org/openhab/binding/rotel/internal/RotelBindingConstants.java b/bundles/org.openhab.binding.rotel/src/main/java/org/openhab/binding/rotel/internal/RotelBindingConstants.java index 962b4e04ef2..80b180a2254 100644 --- a/bundles/org.openhab.binding.rotel/src/main/java/org/openhab/binding/rotel/internal/RotelBindingConstants.java +++ b/bundles/org.openhab.binding.rotel/src/main/java/org/openhab/binding/rotel/internal/RotelBindingConstants.java @@ -240,6 +240,7 @@ public class RotelBindingConstants { public static final String KEY_DSP_MODE = "dsp_mode"; public static final String KEY_ERROR = "error"; // Keys only used by the ASCII protocol + public static final String KEY_POWER_MODE = "power_mode"; public static final String KEY_INPUT = "input"; public static final String KEY_INPUT_ZONE1 = "input_zone1"; public static final String KEY_INPUT_ZONE2 = "input_zone2"; @@ -279,6 +280,17 @@ public class RotelBindingConstants { public static final String KEY_BALANCE_ZONE3 = "balance_zone3"; public static final String KEY_BALANCE_ZONE4 = "balance_zone4"; public static final String KEY_SPEAKER = "speaker"; + public static final String KEY_SUB_LEVEL = "subwoofer_level"; + public static final String KEY_CENTER_LEVEL = "center_level"; + public static final String KEY_SURROUND_RIGHT_LEVEL = "surround_right"; + public static final String KEY_SURROUND_LEFT_LEVEL = "surround_left"; + public static final String KEY_CENTER_BACK_RIGHT_LEVEL = "center_back_right"; + public static final String KEY_CENTER_BACK_LEFT_LEVEL = "center_back_left"; + public static final String KEY_CEILING_FRONT_RIGHT_LEVEL = "ceiling_front_right"; + public static final String KEY_CEILING_FRONT_LEFT_LEVEL = "ceiling_front_left"; + public static final String KEY_CEILING_REAR_RIGHT_LEVEL = "ceiling_rear_right"; + public static final String KEY_CEILING_REAR_LEFT_LEVEL = "ceiling_rear_left"; + public static final String KEY_PCUSB_CLASS = "pcusb_class"; public static final String KEY_MODEL = "model"; public static final String KEY_VERSION = "version"; // Output keys only used by the HEX protocol @@ -299,6 +311,8 @@ public class RotelBindingConstants { public static final String MSG_VALUE_ON = "on"; public static final String MSG_VALUE_NONE = "none"; public static final String POWER_ON = "on"; + public static final String POWER_QUICK = "quick"; + public static final String POWER_NORMAL = "normal"; public static final String STANDBY = "standby"; public static final String POWER_OFF_DELAYED = "off_delayed"; public static final String MSG_VALUE_SPEAKER_A = "a"; diff --git a/bundles/org.openhab.binding.rotel/src/main/java/org/openhab/binding/rotel/internal/RotelModel.java b/bundles/org.openhab.binding.rotel/src/main/java/org/openhab/binding/rotel/internal/RotelModel.java index 9c860b12b44..816e86e9c82 100644 --- a/bundles/org.openhab.binding.rotel/src/main/java/org/openhab/binding/rotel/internal/RotelModel.java +++ b/bundles/org.openhab.binding.rotel/src/main/java/org/openhab/binding/rotel/internal/RotelModel.java @@ -50,10 +50,12 @@ public enum RotelModel { concatenate(DSP_CMDS_SET1, MENU2_CTRL_CMDS, OTHER_CMDS_SET1, List.of(REMOTE_VOLUME_UP, REMOTE_VOLUME_DOWN)), (byte) 0xA0, 13, 8, true, RotelFlagsMapping.MAPPING1), RSP1570("RSP-1570", 115200, 1, 3, true, 96, true, 6, false, RECORD_FONCTION_SELECT, 3, - concatenate(DSP_CMDS_SET2, MENU2_CTRL_CMDS, OTHER_CMDS_SET1, OTHER_CMDS_SET2, List.of(RESET_FACTORY)), + concatenate(DSP_CMDS_SET2, DSP_CMDS_SET1, MENU2_CTRL_CMDS, OTHER_CMDS_SET1, OTHER_CMDS_SET2, + List.of(RESET_FACTORY)), (byte) 0xA3, 42, 5, true, RotelFlagsMapping.MAPPING5), RSP1572("RSP-1572", 115200, 2, 3, true, 96, true, null, false, RECORD_FONCTION_SELECT, 4, - concatenate(DSP_CMDS_SET2, NUMERIC_KEY_CMDS, MENU3_CTRL_CMDS, OTHER_CMDS_SET1, OTHER_CMDS_SET4), + concatenate(DSP_CMDS_SET2, DSP_CMDS_SET1, NUMERIC_KEY_CMDS, MENU3_CTRL_CMDS, OTHER_CMDS_SET1, + OTHER_CMDS_SET4), (byte) 0xA5, 42, 5, true, RotelFlagsMapping.MAPPING5), RSX1055("RSX-1055", 19200, 3, 1, false, 90, false, 12, false, ZONE_SELECT, 1, concatenate(DSP_CMDS_SET1, TUNER_CMDS_SET1, NUMERIC_KEY_CMDS, MENU2_CTRL_CMDS, OTHER_CMDS_SET1), @@ -88,47 +90,65 @@ public enum RotelModel { List.of(RESET_FACTORY)), (byte) 0xCA, 42, 5, true, RotelFlagsMapping.MAPPING5), RSX1562("RSX-1562", 115200, 2, 3, true, 96, true, null, false, RECORD_FONCTION_SELECT, 4, - concatenate(DSP_CMDS_SET2, TUNER_CMDS_SET2, ZONE234_TUNER_CMDS_SET1, NUMERIC_KEY_CMDS, + concatenate(DSP_CMDS_SET2, DSP_CMDS_SET1, TUNER_CMDS_SET2, ZONE234_TUNER_CMDS_SET1, NUMERIC_KEY_CMDS, ZONE234_NUMERIC_KEY_CMDS, MENU3_CTRL_CMDS, OTHER_CMDS_SET1, OTHER_CMDS_SET4), (byte) 0xCC, 42, 5, true, RotelFlagsMapping.MAPPING5), A11("A11", 115200, 4, 96, true, 10, 15, false, -1, false, true, true, 6, 0, SRC_CTRL_CMDS_SET1, NO_SPECIAL_CHARACTERS), - A12("A12", 115200, 5, 96, true, 10, 15, false, -1, true, true, true, 6, 0, SRC_CTRL_CMDS_SET1, - NO_SPECIAL_CHARACTERS), - A14("A14", 115200, 5, 96, true, 10, 15, false, -1, true, true, true, 6, 0, SRC_CTRL_CMDS_SET1, - NO_SPECIAL_CHARACTERS), + A12("A12", 115200, 5, 96, true, 10, 15, false, -1, true, true, true, 6, 0, + concatenate(SRC_CTRL_CMDS_SET1, List.of(PCUSB_CLASS)), NO_SPECIAL_CHARACTERS), + A14("A14", 115200, 5, 96, true, 10, 15, false, -1, true, true, true, 6, 0, + concatenate(SRC_CTRL_CMDS_SET1, List.of(PCUSB_CLASS)), NO_SPECIAL_CHARACTERS), CD11("CD11", 57600, 0, null, false, null, true, -1, false, true, 6, 0, - concatenate(SRC_CTRL_CMDS_SET3, NUMERIC_KEY_CMDS), NO_SPECIAL_CHARACTERS), + concatenate(SRC_CTRL_CMDS_SET2, SRC_CTRL_CMDS_SET4, NUMERIC_KEY_CMDS), NO_SPECIAL_CHARACTERS), CD14("CD14", 57600, 0, null, false, null, true, -1, false, true, 6, 0, - concatenate(SRC_CTRL_CMDS_SET3, NUMERIC_KEY_CMDS), NO_SPECIAL_CHARACTERS), + concatenate(SRC_CTRL_CMDS_SET2, SRC_CTRL_CMDS_SET4, NUMERIC_KEY_CMDS), NO_SPECIAL_CHARACTERS), RA11("RA-11", 115200, 6, 96, true, 10, 15, true, -1, true, false, false, 6, 0, - concatenate(SRC_CTRL_CMDS_SET2, MENU_CTRL_CMDS, NUMERIC_KEY_CMDS), SPECIAL_CHARACTERS), + concatenate(SRC_CTRL_CMDS_SET2, SRC_CTRL_CMDS_SET3, MENU_CTRL_CMDS, NUMERIC_KEY_CMDS), SPECIAL_CHARACTERS), RA12("RA-12", 115200, 6, 96, true, 10, 15, true, -1, true, false, false, 6, 0, - concatenate(SRC_CTRL_CMDS_SET2, MENU_CTRL_CMDS, NUMERIC_KEY_CMDS), SPECIAL_CHARACTERS), + concatenate(SRC_CTRL_CMDS_SET2, SRC_CTRL_CMDS_SET3, MENU_CTRL_CMDS, NUMERIC_KEY_CMDS), SPECIAL_CHARACTERS), RA1570("RA-1570", 115200, 7, 96, true, 10, 15, true, -1, true, true, false, 6, 0, - concatenate(SRC_CTRL_CMDS_SET2, MENU_CTRL_CMDS, NUMERIC_KEY_CMDS, PCUSB_CLASS_CMDS), SPECIAL_CHARACTERS), + concatenate(SRC_CTRL_CMDS_SET2, SRC_CTRL_CMDS_SET3, MENU_CTRL_CMDS, NUMERIC_KEY_CMDS, PCUSB_CLASS_CMDS), + SPECIAL_CHARACTERS), RA1572("RA-1572", 115200, 8, 96, true, 10, 15, false, -1, true, true, true, 6, 0, - concatenate(SRC_CTRL_CMDS_SET1, MENU_CTRL_CMDS, PCUSB_CLASS_CMDS, List.of(RESET_FACTORY)), + concatenate(SRC_CTRL_CMDS_SET1, MENU_CTRL_CMDS, PCUSB_CLASS_CMDS, OTHER_CMDS_SET6), SPECIAL_CHARACTERS), + RA1592_V1("RA-1592", 115200, 9, 96, true, 10, 15, false, -1, true, true, true, 6, 0, + concatenate(SRC_CTRL_CMDS_SET1, SRC_CTRL_CMDS_SET2, MENU_CTRL_CMDS, NUMERIC_KEY_CMDS, PCUSB_CLASS_CMDS, + OTHER_CMDS_SET5), SPECIAL_CHARACTERS), - RA1592("RA-1592", 115200, 9, 96, true, 10, 15, false, -1, true, true, true, 6, 0, List.of(), SPECIAL_CHARACTERS), - RAP1580("RAP-1580", 115200, 11, 96, true, null, false, 5, false, false, -10, 10, List.of(), NO_SPECIAL_CHARACTERS), + RA1592_V2("RA-1592", 115200, 9, 96, true, 10, 15, false, -1, true, true, true, 6, 0, + concatenate(SRC_CTRL_CMDS_SET1, PCUSB_CLASS_CMDS), SPECIAL_CHARACTERS), + RAP1580("RAP-1580", 115200, 11, 96, true, null, false, 5, false, false, -10, 10, + concatenate(SRC_CTRL_CMDS_SET1, MENU_CTRL_CMDS, LEVEL_TRIM_CMDS_SET1, LEVEL_TRIM_CMDS_SET2, + OTHER_CMDS_SET7), + NO_SPECIAL_CHARACTERS), RC1570("RC-1570", 115200, 7, 96, true, 10, 15, true, -1, true, false, false, 6, 0, - concatenate(SRC_CTRL_CMDS_SET2, MENU_CTRL_CMDS, NUMERIC_KEY_CMDS, PCUSB_CLASS_CMDS), SPECIAL_CHARACTERS), - RC1572("RC-1572", 115200, 8, 96, true, 10, 15, false, -1, true, false, true, 6, 0, - concatenate(SRC_CTRL_CMDS_SET1, MENU_CTRL_CMDS, PCUSB_CLASS_CMDS, List.of(RESET_FACTORY)), + concatenate(SRC_CTRL_CMDS_SET2, SRC_CTRL_CMDS_SET3, MENU_CTRL_CMDS, NUMERIC_KEY_CMDS, PCUSB_CLASS_CMDS), SPECIAL_CHARACTERS), - RC1590("RC-1590", 115200, 9, 96, true, 10, 15, false, -1, true, false, true, 6, 0, List.of(), SPECIAL_CHARACTERS), + RC1572("RC-1572", 115200, 8, 96, true, 10, 15, false, -1, true, false, true, 6, 0, + concatenate(SRC_CTRL_CMDS_SET1, MENU_CTRL_CMDS, PCUSB_CLASS_CMDS, OTHER_CMDS_SET6), SPECIAL_CHARACTERS), + RC1590_V1("RC-1590", 115200, 9, 96, true, 10, 15, false, -1, true, false, true, 6, 0, + concatenate(SRC_CTRL_CMDS_SET1, SRC_CTRL_CMDS_SET2, MENU_CTRL_CMDS, NUMERIC_KEY_CMDS, PCUSB_CLASS_CMDS, + OTHER_CMDS_SET5), + SPECIAL_CHARACTERS), + RC1590_V2("RC-1590", 115200, 9, 96, true, 10, 15, false, -1, true, false, true, 6, 0, + concatenate(SRC_CTRL_CMDS_SET1, PCUSB_CLASS_CMDS), SPECIAL_CHARACTERS), RCD1570("RCD-1570", 115200, 0, null, false, null, true, -1, false, true, 6, 0, List.of(), SPECIAL_CHARACTERS), RCD1572("RCD-1572", 57600, 0, null, false, null, true, -1, false, true, 6, 0, - concatenate(SRC_CTRL_CMDS_SET3, List.of(PROGRAM), MENU_CTRL_CMDS, NUMERIC_KEY_CMDS), + concatenate(SRC_CTRL_CMDS_SET2, SRC_CTRL_CMDS_SET4, List.of(PROGRAM), MENU_CTRL_CMDS, NUMERIC_KEY_CMDS), SPECIAL_CHARACTERS_RCD1572), RCX1500("RCX-1500", 115200, 17, 86, true, null, true, -1, false, false, null, null, List.of(), SPECIAL_CHARACTERS), - RDD1580("RDD-1580", 115200, 15, null, false, null, true, -1, true, false, null, null, List.of(), - NO_SPECIAL_CHARACTERS), + RDD1580("RDD-1580", 115200, 15, null, false, null, true, -1, true, false, null, null, + concatenate(SRC_CTRL_CMDS_SET3, PCUSB_CLASS_CMDS), NO_SPECIAL_CHARACTERS), RDG1520("RDG-1520", 115200, 16, null, false, null, true, -1, false, false, null, null, List.of(), SPECIAL_CHARACTERS), - RSP1576("RSP-1576", 115200, 10, 96, true, null, false, 5, false, false, -10, 10, List.of(), NO_SPECIAL_CHARACTERS), - RSP1582("RSP-1582", 115200, 11, 96, true, null, false, 6, false, false, -10, 10, List.of(), NO_SPECIAL_CHARACTERS), + RSP1576("RSP-1576", 115200, 10, 96, true, null, false, 5, false, false, -10, 10, + concatenate(SRC_CTRL_CMDS_SET1, MENU_CTRL_CMDS, LEVEL_TRIM_CMDS_SET1, LEVEL_TRIM_CMDS_SET2, + OTHER_CMDS_SET7), + NO_SPECIAL_CHARACTERS), + RSP1582("RSP-1582", 115200, 11, 96, true, null, false, 6, false, false, -10, 10, + concatenate(SRC_CTRL_CMDS_SET1, MENU_CTRL_CMDS, LEVEL_TRIM_CMDS_SET1, OTHER_CMDS_SET7), + NO_SPECIAL_CHARACTERS), RT11("RT-11", 115200, 12, null, false, null, false, -1, false, true, 6, 0, List.of(), NO_SPECIAL_CHARACTERS), RT1570("RT-1570", 115200, 14, null, false, null, false, -1, false, true, 6, 0, List.of(), NO_SPECIAL_CHARACTERS), T11("T11", 115200, 12, null, false, null, false, -1, false, true, 6, 0, List.of(), NO_SPECIAL_CHARACTERS), diff --git a/bundles/org.openhab.binding.rotel/src/main/java/org/openhab/binding/rotel/internal/communication/RotelCommand.java b/bundles/org.openhab.binding.rotel/src/main/java/org/openhab/binding/rotel/internal/communication/RotelCommand.java index ba7f514fa7f..7907eb1f34a 100644 --- a/bundles/org.openhab.binding.rotel/src/main/java/org/openhab/binding/rotel/internal/communication/RotelCommand.java +++ b/bundles/org.openhab.binding.rotel/src/main/java/org/openhab/binding/rotel/internal/communication/RotelCommand.java @@ -36,6 +36,9 @@ public enum RotelCommand { POWER_ON("Power On", PRIMARY_CMD, (byte) 0x4B, "power_on", "power_on"), POWER_OFF_ALL_ZONES("Power Off All Zones", PRIMARY_CMD, (byte) 0x71), POWER("Request current power status", "get_current_power", "power?"), + POWER_MODE_QUICK("Set power mode to quick", "power_mode_quick", null), + POWER_MODE_NORMAL("Set power mode to normal", "power_mode_normal", null), + POWER_MODE("Request current power mode", "get_power_mode", null), ZONE_SELECT("Zone Select", PRIMARY_CMD, (byte) 0x23), MAIN_ZONE_POWER_TOGGLE("Main Zone Power Toggle", MAIN_ZONE_CMD, (byte) 0x0A), MAIN_ZONE_POWER_OFF("Main Zone Power Off", MAIN_ZONE_CMD, (byte) 0x4A), @@ -245,7 +248,7 @@ public enum RotelCommand { ATMOS("Dolby Atmos", "dolby_atmos", "dolby_atmos"), NEURAL_X("dts Neural:X", "dts_neural", "dts_neural"), BYPASS("Analog Bypass", "bypass", "bypass"), - NEXT_MODE("Next Surround Mode", PRIMARY_CMD, (byte) 0x22), + NEXT_MODE("Next Surround Mode", PRIMARY_CMD, (byte) 0x22, "surround_next", null), DSP_MODE("Request current DSP mode", "get_dsp_mode", null), TONE_MAX("Request Max tone level", "get_tone_max", null), TONE_CONTROL_SELECT("Tone Control Select", PRIMARY_CMD, (byte) 0x67), @@ -453,7 +456,7 @@ public enum RotelCommand { PROGRAM("Program Key", "program", null), PCUSB_CLASS_1("Set PC-USB Audio Class to 1.0", "pcusb_class_1", "pcusb_class_1"), PCUSB_CLASS_2("Set PC-USB Audio Class to 2.0", "pcusb_class_2", "pcusb_class_2"), - PCUSB_CLASS_GET("Request current PC-USB class", "get_pcusb_class", "pcusb?"), + PCUSB_CLASS("Request current PC-USB class", "get_pcusb_class", "pcusb?"), RESET_FACTORY("Reset unit to factory defaults", PRIMARY_CMD, (byte) 0x93, "factory_default_on", "factory_default_on"), DYNAMIC_RANGE("Dynamic Range", PRIMARY_CMD, (byte) 0x16), @@ -462,6 +465,26 @@ public enum RotelCommand { CENTER_TRIM("Temporary Center Trim", PRIMARY_CMD, (byte) 0x4C), SUB_TRIM("Temporary Subwoofer Trim", PRIMARY_CMD, (byte) 0x4D), SURROUND_TRIM("Temporary Surround Trim", PRIMARY_CMD, (byte) 0x4E), + SUB_LEVEL_UP("Temporary increase sub level", "subwoofer_up", null), + SUB_LEVEL_DOWN("Temporary decrease sub level", "subwoofer_down", null), + C_LEVEL_UP("Temporary increase center level", "center_up", null), + C_LEVEL_DOWN("Temporary decrease center level", "center_down", null), + SR_LEVEL_UP("Temporary increase surround right level", "surround_right_up", null), + SR_LEVEL_DOWN("Temporary decrease surround right level", "surround_right_down", null), + SL_LEVEL_UP("Temporary increase surround left level", "surround_left_up", null), + SL_LEVEL_DOWN("Temporary decrease surround left level", "surround_left_down", null), + CBR_LEVEL_UP("Temporary increase center back right level", "center_back_right_up", null), + CBR_LEVEL_DOWN("Temporary decrease center back right level", "center_back_right_down", null), + CBL_LEVEL_UP("Temporary increase center back left level", "center_back_left_up", null), + CBL_LEVEL_DOWN("Temporary decrease center back left level", "center_back_left_down", null), + CFR_LEVEL_UP("Temporary increase ceiling front right level", "ceiling_front_right_up", null), + CFR_LEVEL_DOWN("Temporary decrease ceiling front right level", "ceiling_front_right_down", null), + CFL_LEVEL_UP("Temporary increase ceiling front left level", "ceiling_front_left_up", null), + CFL_LEVEL_DOWN("Temporary decrease ceiling front left level", "ceiling_front_left_down", null), + CRR_LEVEL_UP("Temporary increase ceiling rear right level", "ceiling_rear_right_up", null), + CRR_LEVEL_DOWN("Temporary decrease ceiling rear right level", "ceiling_rear_right_down", null), + CRL_LEVEL_UP("Temporary increase ceiling rear left level", "ceiling_rear_left_up", null), + CRL_LEVEL_DOWN("Temporary decrease ceiling rear left level", "ceiling_rear_left_down", null), CINEMA_EQ_TOGGLE("Cinema EQ Toggle", PRIMARY_CMD, (byte) 0x4F), DISPLAY_TOGGLE("Front Display On/Off", PRIMARY_CMD, (byte) 0x52), PARTY_MODE_TOGGLE("Party Mode Toggle", PRIMARY_CMD, (byte) 0x6E), @@ -479,14 +502,12 @@ public enum RotelCommand { public static final List DSP_CMDS_SET1 = List.of(DSP_TOGGLE, PROLOGIC_TOGGLE, DOLBY_TOGGLE, PLII_PANORAMA_TOGGLE, PLII_DIMENSION_UP, PLII_DIMENSION_DOWN, PLII_CENTER_WIDTH_UP, PLII_CENTER_WIDTH_DOWN, DDEX_TOGGLE, NEO6_TOGGLE, NEXT_MODE); - public static final List DSP_CMDS_SET2 = List.of(STEREO_BYPASS_TOGGLE, DSP_TOGGLE, PROLOGIC_TOGGLE, - DOLBY_TOGGLE, PLII_PANORAMA_TOGGLE, PLII_DIMENSION_UP, PLII_DIMENSION_DOWN, PLII_CENTER_WIDTH_UP, - PLII_CENTER_WIDTH_DOWN, DDEX_TOGGLE, NEO6_TOGGLE, NEXT_MODE); + public static final List DSP_CMDS_SET2 = List.of(STEREO_BYPASS_TOGGLE); public static final List SRC_CTRL_CMDS_SET1 = List.of(PLAY, STOP, PAUSE, TRACK_FWD, TRACK_BACK); - public static final List SRC_CTRL_CMDS_SET2 = List.of(FAST_FWD, FAST_BACK, RANDOM_TOGGLE, - REPEAT_TOGGLE); - public static final List SRC_CTRL_CMDS_SET3 = List.of(FAST_FWD, FAST_BACK, EJECT, TIME_TOGGLE); + public static final List SRC_CTRL_CMDS_SET2 = List.of(FAST_FWD, FAST_BACK); + public static final List SRC_CTRL_CMDS_SET3 = List.of(RANDOM_TOGGLE, REPEAT_TOGGLE); + public static final List SRC_CTRL_CMDS_SET4 = List.of(EJECT, TIME_TOGGLE); public static final List TUNER_CMDS_SET1 = List.of(TUNE_UP, TUNE_DOWN, MEMORY, BAND_TOGGLE, AM, FM, TUNE_PRESET_TOGGLE, TUNING_MODE_SELECT, PRESET_MODE_SELECT, FREQUENCY_DIRECT, PRESET_SCAN, TUNER_DISPLAY, @@ -525,7 +546,13 @@ public enum RotelCommand { ZONE3_KEY3, ZONE3_KEY4, ZONE3_KEY5, ZONE3_KEY6, ZONE3_KEY7, ZONE3_KEY8, ZONE3_KEY9, ZONE3_KEY0, ZONE4_KEY1, ZONE4_KEY2, ZONE4_KEY3, ZONE4_KEY4, ZONE4_KEY5, ZONE4_KEY6, ZONE4_KEY7, ZONE4_KEY8, ZONE4_KEY9, ZONE4_KEY0); - public static final List PCUSB_CLASS_CMDS = List.of(PCUSB_CLASS_1, PCUSB_CLASS_2); + public static final List PCUSB_CLASS_CMDS = List.of(PCUSB_CLASS, PCUSB_CLASS_1, PCUSB_CLASS_2); + + public static final List LEVEL_TRIM_CMDS_SET1 = List.of(SUB_LEVEL_UP, SUB_LEVEL_DOWN, C_LEVEL_UP, + C_LEVEL_DOWN, SR_LEVEL_UP, SR_LEVEL_DOWN, SL_LEVEL_UP, SL_LEVEL_DOWN, CBR_LEVEL_UP, CBR_LEVEL_DOWN, + CBL_LEVEL_UP, CBL_LEVEL_DOWN); + public static final List LEVEL_TRIM_CMDS_SET2 = List.of(CFR_LEVEL_UP, CFR_LEVEL_DOWN, CFL_LEVEL_UP, + CFL_LEVEL_DOWN, CRR_LEVEL_UP, CRR_LEVEL_DOWN, CRL_LEVEL_UP, CRL_LEVEL_DOWN); public static final List OTHER_CMDS_SET1 = List.of(RECORD_FONCTION_SELECT, TONE_CONTROL_SELECT, DYNAMIC_RANGE, DIGITAL_INPUT_SELECT, ZONE_TOGGLE, CENTER_TRIM, SUB_TRIM, SURROUND_TRIM, CINEMA_EQ_TOGGLE); @@ -537,6 +564,10 @@ public enum RotelCommand { public static final List OTHER_CMDS_SET4 = List.of(POWER_OFF_ALL_ZONES, PARTY_MODE_TOGGLE, ZONE2_PARTY_MODE_TOGGLE, ZONE3_PARTY_MODE_TOGGLE, ZONE4_PARTY_MODE_TOGGLE, OUTPUT_RESOLUTION, HDMI_AMP_MODE, HDMI_TV_MODE, ROOM_EQ_TOGGLE, SPEAKER_SETTING_TOGGLE, RESET_FACTORY); + public static final List OTHER_CMDS_SET5 = List.of(POWER_MODE, POWER_MODE_QUICK, POWER_MODE_NORMAL, + RESET_FACTORY); + public static final List OTHER_CMDS_SET6 = List.of(POWER_MODE, RESET_FACTORY); + public static final List OTHER_CMDS_SET7 = List.of(NEXT_MODE, RESET_FACTORY); public static final byte PRIMARY_COMMAND = (byte) 0x10; diff --git a/bundles/org.openhab.binding.rotel/src/main/java/org/openhab/binding/rotel/internal/communication/RotelSimuConnector.java b/bundles/org.openhab.binding.rotel/src/main/java/org/openhab/binding/rotel/internal/communication/RotelSimuConnector.java index 2fee5cf2d49..80172e4c87a 100644 --- a/bundles/org.openhab.binding.rotel/src/main/java/org/openhab/binding/rotel/internal/communication/RotelSimuConnector.java +++ b/bundles/org.openhab.binding.rotel/src/main/java/org/openhab/binding/rotel/internal/communication/RotelSimuConnector.java @@ -44,6 +44,7 @@ import org.slf4j.LoggerFactory; public class RotelSimuConnector extends RotelConnector { private static final int STEP_TONE_LEVEL = 1; + private static final double STEP_DECIBEL = 0.5; private final Logger logger = LoggerFactory.getLogger(RotelSimuConnector.class); @@ -57,6 +58,7 @@ public class RotelSimuConnector extends RotelConnector { private int idxInFeedbackMsg = feedbackMsg.length; private boolean[] powers = { false, false, false, false, false }; + private String powerMode = POWER_NORMAL; private RotelSource[] sources; private RotelSource recordSource; private boolean multiinput; @@ -78,6 +80,17 @@ public class RotelSimuConnector extends RotelConnector { private boolean selectingRecord; private int showZone; private int dimmer; + private int pcUsbClass = 1; + private double subLevel; + private double centerLevel; + private double surroundRightLevel; + private double surroundLefLevel; + private double centerBackRightLevel; + private double centerBackLefLevel; + private double ceilingFrontRightLevel; + private double ceilingFrontLefLevel; + private double ceilingRearRightLevel; + private double ceilingRearLefLevel; private int minVolume; private int maxVolume; @@ -551,6 +564,17 @@ public class RotelSimuConnector extends RotelConnector { textAscii = buildAsciiResponse( protocol == RotelProtocol.ASCII_V1 ? KEY_DISPLAY_UPDATE : KEY_UPDATE_MODE, MANUAL); break; + case POWER_MODE_QUICK: + powerMode = POWER_QUICK; + textAscii = buildAsciiResponse(KEY_POWER_MODE, powerMode); + break; + case POWER_MODE_NORMAL: + powerMode = POWER_NORMAL; + textAscii = buildAsciiResponse(KEY_POWER_MODE, powerMode); + break; + case POWER_MODE: + textAscii = buildAsciiResponse(KEY_POWER_MODE, powerMode); + break; case VOLUME_GET_MIN: textAscii = buildAsciiResponse(KEY_VOLUME_MIN, minVolume); break; @@ -929,6 +953,94 @@ public class RotelSimuConnector extends RotelConnector { textAscii = model.getNumberOfZones() > 1 ? buildAsciiResponse(KEY_FREQ, "44.1,48,none,176.4") : buildAsciiResponse(KEY_FREQ, "44.1"); break; + case SUB_LEVEL_UP: + subLevel += STEP_DECIBEL; + textAscii = buildAsciiResponse(KEY_SUB_LEVEL, buildDecibelValue(subLevel)); + break; + case SUB_LEVEL_DOWN: + subLevel -= STEP_DECIBEL; + textAscii = buildAsciiResponse(KEY_SUB_LEVEL, buildDecibelValue(subLevel)); + break; + case C_LEVEL_UP: + centerLevel += STEP_DECIBEL; + textAscii = buildAsciiResponse(KEY_CENTER_LEVEL, buildDecibelValue(centerLevel)); + break; + case C_LEVEL_DOWN: + centerLevel -= STEP_DECIBEL; + textAscii = buildAsciiResponse(KEY_CENTER_LEVEL, buildDecibelValue(centerLevel)); + break; + case SR_LEVEL_UP: + surroundRightLevel += STEP_DECIBEL; + textAscii = buildAsciiResponse(KEY_SURROUND_RIGHT_LEVEL, buildDecibelValue(surroundRightLevel)); + break; + case SR_LEVEL_DOWN: + surroundRightLevel -= STEP_DECIBEL; + textAscii = buildAsciiResponse(KEY_SURROUND_RIGHT_LEVEL, buildDecibelValue(surroundRightLevel)); + break; + case SL_LEVEL_UP: + surroundLefLevel += STEP_DECIBEL; + textAscii = buildAsciiResponse(KEY_SURROUND_LEFT_LEVEL, buildDecibelValue(surroundLefLevel)); + break; + case SL_LEVEL_DOWN: + surroundLefLevel -= STEP_DECIBEL; + textAscii = buildAsciiResponse(KEY_SURROUND_LEFT_LEVEL, buildDecibelValue(surroundLefLevel)); + break; + case CBR_LEVEL_UP: + centerBackRightLevel += STEP_DECIBEL; + textAscii = buildAsciiResponse(KEY_CENTER_BACK_RIGHT_LEVEL, + buildDecibelValue(centerBackRightLevel)); + break; + case CBR_LEVEL_DOWN: + centerBackRightLevel -= STEP_DECIBEL; + textAscii = buildAsciiResponse(KEY_CENTER_BACK_RIGHT_LEVEL, + buildDecibelValue(centerBackRightLevel)); + break; + case CBL_LEVEL_UP: + centerBackLefLevel += STEP_DECIBEL; + textAscii = buildAsciiResponse(KEY_CENTER_BACK_LEFT_LEVEL, buildDecibelValue(centerBackLefLevel)); + break; + case CBL_LEVEL_DOWN: + centerBackLefLevel -= STEP_DECIBEL; + textAscii = buildAsciiResponse(KEY_CENTER_BACK_LEFT_LEVEL, buildDecibelValue(centerBackLefLevel)); + break; + case CFR_LEVEL_UP: + ceilingFrontRightLevel += STEP_DECIBEL; + textAscii = buildAsciiResponse(KEY_CEILING_FRONT_RIGHT_LEVEL, + buildDecibelValue(ceilingFrontRightLevel)); + break; + case CFR_LEVEL_DOWN: + ceilingFrontRightLevel -= STEP_DECIBEL; + textAscii = buildAsciiResponse(KEY_CEILING_FRONT_RIGHT_LEVEL, + buildDecibelValue(ceilingFrontRightLevel)); + break; + case CFL_LEVEL_UP: + ceilingFrontLefLevel += STEP_DECIBEL; + textAscii = buildAsciiResponse(KEY_CEILING_FRONT_LEFT_LEVEL, + buildDecibelValue(ceilingFrontLefLevel)); + break; + case CFL_LEVEL_DOWN: + ceilingFrontLefLevel -= STEP_DECIBEL; + textAscii = buildAsciiResponse(KEY_CEILING_FRONT_LEFT_LEVEL, + buildDecibelValue(ceilingFrontLefLevel)); + break; + case CRR_LEVEL_UP: + ceilingRearRightLevel += STEP_DECIBEL; + textAscii = buildAsciiResponse(KEY_CEILING_REAR_RIGHT_LEVEL, + buildDecibelValue(ceilingRearRightLevel)); + break; + case CRR_LEVEL_DOWN: + ceilingRearRightLevel -= STEP_DECIBEL; + textAscii = buildAsciiResponse(KEY_CEILING_REAR_RIGHT_LEVEL, + buildDecibelValue(ceilingRearRightLevel)); + break; + case CRL_LEVEL_UP: + ceilingRearLefLevel += STEP_DECIBEL; + textAscii = buildAsciiResponse(KEY_CEILING_REAR_LEFT_LEVEL, buildDecibelValue(ceilingRearLefLevel)); + break; + case CRL_LEVEL_DOWN: + ceilingRearLefLevel -= STEP_DECIBEL; + textAscii = buildAsciiResponse(KEY_CEILING_REAR_LEFT_LEVEL, buildDecibelValue(ceilingRearLefLevel)); + break; case DIMMER_LEVEL_SET: if (value != null) { dimmer = value; @@ -938,6 +1050,17 @@ public class RotelSimuConnector extends RotelConnector { case DIMMER_LEVEL_GET: textAscii = buildAsciiResponse(KEY_DIMMER, dimmer); break; + case PCUSB_CLASS_1: + pcUsbClass = 1; + textAscii = buildAsciiResponse(KEY_PCUSB_CLASS, pcUsbClass); + break; + case PCUSB_CLASS_2: + pcUsbClass = 2; + textAscii = buildAsciiResponse(KEY_PCUSB_CLASS, pcUsbClass); + break; + case PCUSB_CLASS: + textAscii = buildAsciiResponse(KEY_PCUSB_CLASS, pcUsbClass); + break; case MODEL: textAscii = buildAsciiResponse(KEY_MODEL, model.getName()); break; @@ -1256,6 +1379,14 @@ public class RotelSimuConnector extends RotelConnector { return buildAsciiResponse(KEY_DSP_MODE, dsp.getFeedback()); } + private String buildDecibelValue(double value) { + if (value == 0.0) { + return "000.0db"; + } else { + return String.format("%+05.1fdb", value).replace(",", "."); + } + } + private String buildSourceLine1Response() { String text; if (!powers[0]) { diff --git a/bundles/org.openhab.binding.rotel/src/main/java/org/openhab/binding/rotel/internal/handler/RotelHandler.java b/bundles/org.openhab.binding.rotel/src/main/java/org/openhab/binding/rotel/internal/handler/RotelHandler.java index 8aa4785ff60..d71a6c08306 100644 --- a/bundles/org.openhab.binding.rotel/src/main/java/org/openhab/binding/rotel/internal/handler/RotelHandler.java +++ b/bundles/org.openhab.binding.rotel/src/main/java/org/openhab/binding/rotel/internal/handler/RotelHandler.java @@ -150,6 +150,28 @@ public class RotelHandler extends BaseThingHandler implements RotelMessageEventL public void initialize() { logger.debug("Start initializing handler for thing {}", getThing().getUID()); + RotelThingConfiguration config = getConfigAs(RotelThingConfiguration.class); + + protocol = RotelProtocol.HEX; + if (config.protocol != null && !config.protocol.isEmpty()) { + try { + protocol = RotelProtocol.getFromName(config.protocol); + } catch (RotelException e) { + // Invalid protocol name in configuration, HEX will be considered by default + } + } else { + Map properties = editProperties(); + String property = properties.get(RotelBindingConstants.PROPERTY_PROTOCOL); + if (property != null && !property.isEmpty()) { + try { + protocol = RotelProtocol.getFromName(property); + } catch (RotelException e) { + // Invalid protocol name in thing property, HEX will be considered by default + } + } + } + logger.debug("rotelProtocol {}", protocol.getName()); + switch (getThing().getThingTypeUID().getId()) { case THING_TYPE_ID_RSP1066: model = RotelModel.RSP1066; @@ -224,7 +246,11 @@ public class RotelHandler extends BaseThingHandler implements RotelMessageEventL model = RotelModel.RA1572; break; case THING_TYPE_ID_RA1592: - model = RotelModel.RA1592; + if (protocol == RotelProtocol.ASCII_V1) { + model = RotelModel.RA1592_V1; + } else { + model = RotelModel.RA1592_V2; + } break; case THING_TYPE_ID_RAP1580: model = RotelModel.RAP1580; @@ -236,7 +262,11 @@ public class RotelHandler extends BaseThingHandler implements RotelMessageEventL model = RotelModel.RC1572; break; case THING_TYPE_ID_RC1590: - model = RotelModel.RC1590; + if (protocol == RotelProtocol.ASCII_V1) { + model = RotelModel.RC1590_V1; + } else { + model = RotelModel.RC1590_V2; + } break; case THING_TYPE_ID_RCD1570: model = RotelModel.RCD1570; @@ -295,28 +325,6 @@ public class RotelHandler extends BaseThingHandler implements RotelMessageEventL break; } - RotelThingConfiguration config = getConfigAs(RotelThingConfiguration.class); - - protocol = RotelProtocol.HEX; - if (config.protocol != null && !config.protocol.isEmpty()) { - try { - protocol = RotelProtocol.getFromName(config.protocol); - } catch (RotelException e) { - // Invalid protocol name in configuration, HEX will be considered by default - } - } else { - Map properties = editProperties(); - String property = properties.get(RotelBindingConstants.PROPERTY_PROTOCOL); - if (property != null && !property.isEmpty()) { - try { - protocol = RotelProtocol.getFromName(property); - } catch (RotelException e) { - // Invalid protocol name in thing property, HEX will be considered by default - } - } - } - logger.debug("rotelProtocol {}", protocol.getName()); - Map sourcesCustomLabels = new HashMap<>(); Map sourcesLabels = new HashMap<>(); @@ -1368,6 +1376,9 @@ public class RotelHandler extends BaseThingHandler implements RotelMessageEventL throw new RotelException("Invalid value"); } break; + case KEY_POWER_MODE: + logger.debug("Power mode is set to {}", value); + break; case KEY_VOLUME_MIN: minVolume = Integer.parseInt(value); if (!model.hasDirectVolumeControl()) { @@ -1652,6 +1663,39 @@ public class RotelHandler extends BaseThingHandler implements RotelMessageEventL throw new RotelException("Invalid value"); } break; + case KEY_SUB_LEVEL: + logger.debug("Sub level is set to {}", value); + break; + case KEY_CENTER_LEVEL: + logger.debug("Center level is set to {}", value); + break; + case KEY_SURROUND_RIGHT_LEVEL: + logger.debug("Surround right level is set to {}", value); + break; + case KEY_SURROUND_LEFT_LEVEL: + logger.debug("Surround left level is set to {}", value); + break; + case KEY_CENTER_BACK_RIGHT_LEVEL: + logger.debug("Center back right level is set to {}", value); + break; + case KEY_CENTER_BACK_LEFT_LEVEL: + logger.debug("Center back left level is set to {}", value); + break; + case KEY_CEILING_FRONT_RIGHT_LEVEL: + logger.debug("Ceiling front right level is set to {}", value); + break; + case KEY_CEILING_FRONT_LEFT_LEVEL: + logger.debug("Ceiling front left level is set to {}", value); + break; + case KEY_CEILING_REAR_RIGHT_LEVEL: + logger.debug("Ceiling rear right level is set to {}", value); + break; + case KEY_CEILING_REAR_LEFT_LEVEL: + logger.debug("Ceiling rear left level is set to {}", value); + break; + case KEY_PCUSB_CLASS: + logger.debug("PC-USB Audio Class is set to {}", value); + break; case KEY_MODEL: getThing().setProperty(Thing.PROPERTY_MODEL_ID, value); break; diff --git a/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/i18n/rotel.properties b/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/i18n/rotel.properties index 9e1e557fe0f..2fa4976732f 100644 --- a/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/i18n/rotel.properties +++ b/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/i18n/rotel.properties @@ -116,6 +116,9 @@ channel-type.rotel.frontPanelLine.label = Front Panel Line channel-type.rotel.frontPanelLine.description = The line content displayed on the device front panel channel-type.rotel.otherCommand.label = Other Command channel-type.rotel.otherCommand.description = Choose the command to send to the device +channel-type.rotel.otherCommand.command.option.POWER_MODE = Request current power mode +channel-type.rotel.otherCommand.command.option.POWER_MODE_QUICK = Set power mode to quick +channel-type.rotel.otherCommand.command.option.POWER_MODE_NORMAL = Set power mode to normal channel-type.rotel.otherCommand.command.option.POWER_OFF_ALL_ZONES = Power Off All Zones channel-type.rotel.otherCommand.command.option.REMOTE_VOLUME_UP = Remote Volume Up channel-type.rotel.otherCommand.command.option.REMOTE_VOLUME_DOWN = Remote Volume Down @@ -260,6 +263,7 @@ channel-type.rotel.otherCommand.command.option.ZONE4_KEY8 = Zone 4 Number Key 8 channel-type.rotel.otherCommand.command.option.ZONE4_KEY9 = Zone 4 Number Key 9 channel-type.rotel.otherCommand.command.option.ZONE4_KEY0 = Zone 4 Number Key 0 channel-type.rotel.otherCommand.command.option.PROGRAM = Program Key +channel-type.rotel.otherCommand.command.option.PCUSB_CLASS = Request current PC-USB class channel-type.rotel.otherCommand.command.option.PCUSB_CLASS_1 = Set PC-USB Audio Class to 1.0 channel-type.rotel.otherCommand.command.option.PCUSB_CLASS_2 = Set PC-USB Audio Class to 2.0 channel-type.rotel.otherCommand.command.option.RESET_FACTORY = Reset unit to factory defaults @@ -271,6 +275,26 @@ channel-type.rotel.otherCommand.command.option.ZONE_TOGGLE = Zone Toggle channel-type.rotel.otherCommand.command.option.CENTER_TRIM = Temporary Center Trim channel-type.rotel.otherCommand.command.option.SUB_TRIM = Temporary Subwoofer Trim channel-type.rotel.otherCommand.command.option.SURROUND_TRIM = Temporary Surround Trim +channel-type.rotel.otherCommand.command.option.SUB_LEVEL_UP = Temporary increase sub level +channel-type.rotel.otherCommand.command.option.SUB_LEVEL_DOWN = Temporary decrease sub level +channel-type.rotel.otherCommand.command.option.C_LEVEL_UP = Temporary increase center level +channel-type.rotel.otherCommand.command.option.C_LEVEL_DOWN = Temporary decrease center level +channel-type.rotel.otherCommand.command.option.SR_LEVEL_UP = Temporary increase surround right level +channel-type.rotel.otherCommand.command.option.SR_LEVEL_DOWN = Temporary decrease surround right level +channel-type.rotel.otherCommand.command.option.SL_LEVEL_UP = Temporary increase surround left level +channel-type.rotel.otherCommand.command.option.SL_LEVEL_DOWN = Temporary decrease surround left level +channel-type.rotel.otherCommand.command.option.CBR_LEVEL_UP = Temporary increase center back right level +channel-type.rotel.otherCommand.command.option.CBR_LEVEL_DOWN = Temporary decrease center back right level +channel-type.rotel.otherCommand.command.option.CBL_LEVEL_UP = Temporary increase center back left level +channel-type.rotel.otherCommand.command.option.CBL_LEVEL_DOWN = Temporary decrease center back left level +channel-type.rotel.otherCommand.command.option.CFR_LEVEL_UP = Temporary increase ceiling front right level +channel-type.rotel.otherCommand.command.option.CFR_LEVEL_DOWN = Temporary decrease ceiling front right level +channel-type.rotel.otherCommand.command.option.CFL_LEVEL_UP = Temporary increase ceiling front left level +channel-type.rotel.otherCommand.command.option.CFL_LEVEL_DOWN = Temporary decrease ceiling front left level +channel-type.rotel.otherCommand.command.option.CRR_LEVEL_UP = Temporary increase ceiling rear right level +channel-type.rotel.otherCommand.command.option.CRR_LEVEL_DOWN = Temporary decrease ceiling rear right level +channel-type.rotel.otherCommand.command.option.CRL_LEVEL_UP = Temporary increase ceiling rear left level +channel-type.rotel.otherCommand.command.option.CRL_LEVEL_DOWN = Temporary decrease ceiling rear left level channel-type.rotel.otherCommand.command.option.CINEMA_EQ_TOGGLE = Cinema EQ Toggle channel-type.rotel.otherCommand.command.option.PARTY_MODE_TOGGLE = Party Mode Toggle channel-type.rotel.otherCommand.command.option.ZONE2_PARTY_MODE_TOGGLE = Zone 2 Party Mode Toggle diff --git a/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/ra1592.xml b/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/ra1592.xml index ce0f67139a1..acbdcab082b 100644 --- a/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/ra1592.xml +++ b/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/ra1592.xml @@ -22,6 +22,7 @@ + diff --git a/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/rap1580.xml b/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/rap1580.xml index bbcb59c3ece..9816c786f37 100644 --- a/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/rap1580.xml +++ b/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/rap1580.xml @@ -16,6 +16,7 @@ + diff --git a/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/rc1590.xml b/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/rc1590.xml index b14453c2ca8..cca4f36c909 100644 --- a/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/rc1590.xml +++ b/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/rc1590.xml @@ -20,6 +20,7 @@ + diff --git a/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/rdd1580.xml b/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/rdd1580.xml index 359a7fded3c..7932244d224 100644 --- a/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/rdd1580.xml +++ b/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/rdd1580.xml @@ -14,6 +14,7 @@ + diff --git a/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/rsp1576.xml b/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/rsp1576.xml index fcee522fd6e..386a2fbccbf 100644 --- a/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/rsp1576.xml +++ b/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/rsp1576.xml @@ -16,6 +16,7 @@ + diff --git a/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/rsp1582.xml b/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/rsp1582.xml index 3c78565a204..68ab9731b8f 100644 --- a/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/rsp1582.xml +++ b/bundles/org.openhab.binding.rotel/src/main/resources/OH-INF/thing/rsp1582.xml @@ -16,6 +16,7 @@ +