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

[phc] Fix OH3 bug and add support for multiple commands #11554

Merged
merged 2 commits into from
Nov 12, 2021
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,9 @@ private void processReceivedBytes() {
byte sizeToggle = buffer.get();

// read length of command and check if makes sense
if ((sizeToggle < 1 || sizeToggle > 3) && ((sizeToggle & 0xFF) < 0x81 || (sizeToggle & 0xFF) > 0x83)) {
int size = (sizeToggle & 0x7F);

if (!isSizeToggleValid(sizeToggle, module)) {
if (logger.isDebugEnabled()) {
logger.debug("get invalid sizeToggle: {}", new String(HexUtils.byteToHex(sizeToggle)));
}
Expand All @@ -220,7 +222,6 @@ private void processReceivedBytes() {
}

// read toggle, size and command
int size = (sizeToggle & 0x7F);
boolean toggle = (sizeToggle & 0x80) == 0x80;

logger.debug("get toggle: {}", toggle);
Expand Down Expand Up @@ -270,6 +271,24 @@ private void processReceivedBytes() {
}
}

private boolean isSizeToggleValid(byte sizeToggle, byte module) {
int unsigned = sizeToggle & 0xFF;

if (unsigned > 0 && unsigned < 4) {
return true;
} else if (unsigned > 0x80 && unsigned < 0x84) {
return true;
} else if ((module & 0xE0) == 0x00) {
if (unsigned > 0 && unsigned < 16) {
return true;
} else if (unsigned > 0x80 && unsigned < 0x90) {
return true;
}
}

return false;
}

private int handleCrcFault(int faultCounter) throws InterruptedException {
if (faultCounter > 0) {
// Normally in this case we read the message repeatedly offset to the real -> skip one to 6 bytes
Expand Down Expand Up @@ -320,23 +339,31 @@ private void processReceivedMsg(byte module, boolean toggle, byte[] command) {

// EM command / update
} else {
if (((module & 0xE0) == 0x00)) {
if ((module & 0xE0) == 0x00) {
sendEmAcknowledge(module, toggle);
logger.debug("send acknowledge (modul, toggle) {} {}", module, toggle);

byte channel = (byte) ((command[0] >>> 4) & 0x0F);
for (byte cmdByte : command) {
byte channel = (byte) ((cmdByte >>> 4) & 0x0F);

OnOffType onOff = OnOffType.OFF;
OnOffType onOff = OnOffType.OFF;

if ((command[0] & 0x0F) == 2) {
onOff = OnOffType.ON;
}
byte cmd = (byte) (cmdByte & 0x0F);
if (cmd % 2 == 0) {
if (cmd == 2) {
onOff = OnOffType.ON;
} else {
logger.debug("Command {} isn't implemented for EM", cmd);
continue;
}
}

QueueObject qo = new QueueObject(PHCBindingConstants.CHANNELS_EM, module, channel, onOff);
QueueObject qo = new QueueObject(PHCBindingConstants.CHANNELS_EM, module, channel, onOff);

// put recognized message into queue
if (!receiveQueue.contains(qo)) {
receiveQueue.offer(qo);
// put recognized message into queue
if (!receiveQueue.contains(qo)) {
receiveQueue.offer(qo);
}
}

// ignore if message not from EM module
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
</channels>
</channel-group-type>

<channel-group-type id="jrmTimeChannels" advanced="true">
<channel-group-type id="jrmTimeChannels">
<label>JRM time Channels</label>
<description>Time for shutter channels in seconds with an accuracy of 1/10 seconds.</description>
<channels>
Expand Down