Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PJLinkDevice] audio/video mute #16504

Merged
merged 2 commits into from
May 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ public class PJLinkDeviceBindingConstants {
public static final String CHANNEL_TYPE_INPUT = "input";
public static final String CHANNEL_TYPE_AUDIO_MUTE = "audioMute";
public static final String CHANNEL_TYPE_VIDEO_MUTE = "videoMute";
public static final String CHANNEL_TYPE_AUDIO_AND_VIDEO_MUTE = "audioAndVideoMute";
public static final String CHANNEL_TYPE_LAMP_HOURS = "lampHours";
public static final String CHANNEL_TYPE_LAMP_ACTIVE = "lampActive";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,16 +181,21 @@ public void handleCommand(ChannelUID channelUID, Command command) {
break;
case CHANNEL_TYPE_AUDIO_MUTE:
case CHANNEL_TYPE_VIDEO_MUTE:
case CHANNEL_TYPE_AUDIO_AND_VIDEO_MUTE:
boolean isAudioMute = channelTypeId.equals(PJLinkDeviceBindingConstants.CHANNEL_TYPE_AUDIO_MUTE);
boolean isVideoMute = channelTypeId.equals(PJLinkDeviceBindingConstants.CHANNEL_TYPE_VIDEO_MUTE);
if (isVideoMute || isAudioMute) {
boolean isAudioAndVideoMute = channelTypeId
.equals(PJLinkDeviceBindingConstants.CHANNEL_TYPE_AUDIO_AND_VIDEO_MUTE);
if (isVideoMute || isAudioMute || isAudioAndVideoMute) {
if (command == RefreshType.REFRESH) {
// refresh both video and audio mute, as it's one request
MuteQueryResponseValue muteStatus = device.getMuteStatus();
updateState(PJLinkDeviceBindingConstants.CHANNEL_AUDIO_MUTE,
OnOffType.from(muteStatus.isAudioMuted()));
updateState(PJLinkDeviceBindingConstants.CHANNEL_VIDEO_MUTE,
OnOffType.from(muteStatus.isVideoMuted()));
updateState(PJLinkDeviceBindingConstants.CHANNEL_TYPE_AUDIO_AND_VIDEO_MUTE,
OnOffType.from(muteStatus.isAudioAndVideoMuted()));
} else {
if (isAudioMute) {
logger.trace("Received audio mute command {}", command);
Expand All @@ -202,6 +207,11 @@ public void handleCommand(ChannelUID channelUID, Command command) {
boolean muteOn = command == OnOffType.ON;
device.setMute(MuteInstructionChannel.VIDEO, muteOn);
}
if (isAudioAndVideoMute) {
logger.trace("Received video mute command {}", command);
boolean muteOn = command == OnOffType.ON;
device.setMute(MuteInstructionChannel.AUDIO_AND_VIDEO, muteOn);
}
}
} else {
logger.debug("Received unknown audio/video mute command {}", command);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,21 +29,24 @@
public class MuteQueryResponse extends PrefixedResponse<MuteQueryResponse.MuteQueryResponseValue> {

public enum MuteQueryResponseValue {
OFF("Mute off", "30", false, false),
VIDEO_MUTE_ON("Video muted", "11", false, true),
AUDIO_MUTE_ON("Audio muted", "21", true, false),
AUDIO_AND_VIDEO_MUTE_ON("Audio and video muted", "31", true, true);
OFF("Mute off", "30", false, false, false),
VIDEO_MUTE_ON("Video muted", "11", false, true, false),
AUDIO_MUTE_ON("Audio muted", "21", true, false, false),
AUDIO_AND_VIDEO_MUTE_ON("Audio and video muted", "31", true, true, true);

private String text;
private String code;
private boolean audioMuted;
private boolean videoMuted;
private boolean audioAndVideoMuted;

private MuteQueryResponseValue(String text, String code, boolean audioMuted, boolean videoMuted) {
private MuteQueryResponseValue(String text, String code, boolean audioMuted, boolean videoMuted,
boolean audioAndVideoMuted) {
this.text = text;
this.code = code;
this.audioMuted = audioMuted;
this.videoMuted = videoMuted;
this.audioAndVideoMuted = audioAndVideoMuted;
}

public String getText() {
Expand All @@ -67,6 +70,10 @@ public boolean isAudioMuted() {
public boolean isVideoMuted() {
return this.videoMuted;
}

public boolean isAudioAndVideoMuted() {
return this.audioAndVideoMuted;
}
}

private static final HashSet<ErrorCode> SPECIFIED_ERRORCODES = new HashSet<>(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ thing-type.config.pjLinkDevice.pjLinkDevice.tcpPort.description = The TCP port o

# channel types

channel-type.pjLinkDevice.audioAndVideoMute.label = Audio and Video Mute
channel-type.pjLinkDevice.audioAndVideoMute.description = Select the audio and video mute status
channel-type.pjLinkDevice.audioMute.label = Audio Mute
channel-type.pjLinkDevice.audioMute.description = Select the audio mute status
channel-type.pjLinkDevice.input.label = Input
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,15 @@
<channel id="input" typeId="input"/>
<channel id="audioMute" typeId="audioMute"/>
<channel id="videoMute" typeId="videoMute"/>
<channel id="audioAndVideoMute" typeId="audioAndVideoMute"/>
<channel id="lamp1Hours" typeId="lampHours"/>
<channel id="lamp1Active" typeId="lampActive"/>
</channels>

<properties>
<property name="thingTypeVersion">1</property>
</properties>

<config-description>
<parameter-group name="basic">
<context>basic</context>
Expand Down Expand Up @@ -103,6 +108,12 @@
<description>Select the video mute status</description>
</channel-type>

<channel-type id="audioAndVideoMute">
lolodomo marked this conversation as resolved.
Show resolved Hide resolved
<item-type>Switch</item-type>
<label>Audio and Video Mute</label>
<description>Select the audio and video mute status</description>
</channel-type>

<channel-type id="lampHours">
<item-type>Number</item-type>
<label>Lamp Hours</label>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<update:update-descriptions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:update="https://openhab.org/schemas/update-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/update-description/v1.0.0 https://openhab.org/schemas/update-description-1.0.0.xsd">
<thing-type uid="pjLinkDevice:pjLinkDevice">
<instruction-set targetVersion="1">
<add-channel id="audioAndVideoMute">
<type>pjLinkDevice:audioAndVideoMute</type>
</add-channel>
</instruction-set>
</thing-type>

</update:update-descriptions>