private final String value;
- public static final Set<OppoCommand> INITIAL_COMMANDS = new HashSet<>(
- Arrays.asList(QUERY_POWER_STATUS, QUERY_FIRMWARE_VERSION, QUERY_VOLUME, QUERY_HDMI_RESOLUTION,
- QUERY_HDR_SETTING, QUERY_PLAYBACK_STATUS, QUERY_DISC_TYPE, QUERY_AUDIO_TYPE, QUERY_SUBTITLE_SHIFT,
- QUERY_OSD_POSITION, QUERY_REPEAT_MODE, QUERY_ZOOM_MODE, QUERY_INPUT_SOURCE));
-
public static final Set<OppoCommand> QUERY_COMMANDS = new HashSet<>(
- Arrays.asList(QUERY_VOLUME, QUERY_HDMI_RESOLUTION, QUERY_PLAYBACK_STATUS, QUERY_DISC_TYPE, QUERY_AUDIO_TYPE,
- QUERY_SUBTITLE_SHIFT, QUERY_OSD_POSITION, QUERY_REPEAT_MODE, QUERY_ZOOM_MODE, QUERY_INPUT_SOURCE));
+ Arrays.asList(QUERY_VOLUME, QUERY_HDMI_RESOLUTION, QUERY_HDR_SETTING, QUERY_PLAYBACK_STATUS,
+ QUERY_DISC_TYPE, QUERY_AUDIO_TYPE, QUERY_SUBTITLE_SHIFT, QUERY_OSD_POSITION, QUERY_REPEAT_MODE,
+ QUERY_ZOOM_MODE, QUERY_INPUT_SOURCE, QUERY_FIRMWARE_VERSION));
OppoCommand(String value) {
this.value = value;
package org.openhab.binding.oppo.internal.handler;
import static org.openhab.binding.oppo.internal.OppoBindingConstants.*;
+import static org.openhab.core.thing.Thing.*;
import java.math.BigDecimal;
import java.util.ArrayList;
private List<StateOption> hdmiModeOptions = new ArrayList<>();
private long lastEventReceived = System.currentTimeMillis();
- private String versionString = BLANK;
private String verboseMode = VERBOSE_2;
private String currentChapter = BLANK;
private String currentTimeMode = T;
private boolean isPowerOn = false;
private boolean isUDP20X = false;
private boolean isBdpIP = false;
+ private boolean isVbModeSet = false;
+ private boolean isInitialQuery = false;
private Object sequenceLock = new Object();
/**
if (command instanceof OnOffType) {
connector.sendCommand(
command == OnOffType.ON ? OppoCommand.POWER_ON : OppoCommand.POWER_OFF);
- isPowerOn = (command == OnOffType.ON ? true : false);
+
+ // set the power flag to false only, will be set true by QPW or UPW messages
+ if (command == OnOffType.OFF) {
+ isPowerOn = false;
+ isInitialQuery = false;
+ }
}
break;
case CHANNEL_VOLUME:
String key = evt.getKey();
String updateData = evt.getValue().trim();
if (this.getThing().getStatus() == ThingStatus.OFFLINE) {
- updateStatus(ThingStatus.ONLINE, ThingStatusDetail.NONE, this.versionString);
+ updateStatus(ThingStatus.ONLINE, ThingStatusDetail.NONE);
}
synchronized (sequenceLock) {
updateChannelState(CHANNEL_TIME_DISPLAY, updateData);
break;
case QVR:
- this.versionString = updateData;
+ thing.setProperty(PROPERTY_FIRMWARE_VERSION, updateData);
break;
case QPW:
updateChannelState(CHANNEL_POWER, updateData);
if (ZERO.equals(updateData)) {
currentPlayMode = BLANK;
isPowerOn = false;
+ isInitialQuery = false;
} else {
isPowerOn = true;
}
try {
long prevUpdateTime = lastEventReceived;
- connector.sendCommand(OppoCommand.SET_VERBOSE_MODE, this.verboseMode);
+ connector.sendCommand(OppoCommand.QUERY_POWER_STATUS);
Thread.sleep(SLEEP_BETWEEN_CMD_MS);
// if the player is off most of these won't really do much...
- OppoCommand.INITIAL_COMMANDS.forEach(cmd -> {
+ OppoCommand.QUERY_COMMANDS.forEach(cmd -> {
try {
connector.sendCommand(cmd);
Thread.sleep(SLEEP_BETWEEN_CMD_MS);
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, error);
closeConnection();
} else {
- updateStatus(ThingStatus.ONLINE, ThingStatusDetail.NONE, this.versionString);
+ updateStatus(ThingStatus.ONLINE, ThingStatusDetail.NONE);
}
}
}
synchronized (sequenceLock) {
try {
- // if using direct IP connection on the 83/9x/10x, no unsolicited updates are sent
+ // the verbose mode must be set while the player is on
+ if (isPowerOn && !isVbModeSet && !isBdpIP) {
+ connector.sendCommand(OppoCommand.SET_VERBOSE_MODE, this.verboseMode);
+ isVbModeSet = true;
+ Thread.sleep(SLEEP_BETWEEN_CMD_MS);
+ }
+
+ // If using direct serial connection, the query is done once after the player is turned on
+ // - OR - if using direct IP connection on the 83/9x/10x, no unsolicited updates are sent
// so we must query everything to know what changed.
- if (isBdpIP) {
+ if ((isPowerOn && !isInitialQuery) || isBdpIP) {
connector.sendCommand(OppoCommand.QUERY_POWER_STATUS);
if (isPowerOn) {
+ isInitialQuery = true;
OppoCommand.QUERY_COMMANDS.forEach(cmd -> {
try {
connector.sendCommand(cmd);