Skip to content

Commit

Permalink
Initial Contribution
Browse files Browse the repository at this point in the history
Signed-off-by: Karel Goderis <[email protected]>
  • Loading branch information
kgoderis committed May 30, 2023
1 parent a12d64d commit e3d4664
Show file tree
Hide file tree
Showing 12 changed files with 633 additions and 0 deletions.
6 changes: 6 additions & 0 deletions bom/openhab-core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,12 @@
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.openhab.core.bundles</groupId>
<artifactId>org.openhab.core.io.transport.serial.purejavacomm</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.openhab.core.bundles</groupId>
<artifactId>org.openhab.core.io.transport.serial.rxtx</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="optional" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="test" value="true"/>
<attribute name="optional" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" path="target/generated-sources/annotations">
<attributes>
<attribute name="optional" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
</classpath>
34 changes: 34 additions & 0 deletions bundles/org.openhab.core.io.transport.serial.purejavacomm/.project
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>org.openhab.core.io.transport.serial.javacomm</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
<filteredResources>
<filter>
<id>1684860371393</id>
<name></name>
<type>30</type>
<matcher>
<id>org.eclipse.core.resources.regexFilterMatcher</id>
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
</matcher>
</filter>
</filteredResources>
</projectDescription>
14 changes: 14 additions & 0 deletions bundles/org.openhab.core.io.transport.serial.purejavacomm/NOTICE
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
This content is produced and maintained by the openHAB project.

* Project home: https://www.openhab.org

== Declared Project Licenses

This program and the accompanying materials are made available under the terms
of the Eclipse Public License 2.0 which is available at
https://www.eclipse.org/legal/epl-2.0/.

== Source Code

https://github.com/openhab/openhab-core

28 changes: 28 additions & 0 deletions bundles/org.openhab.core.io.transport.serial.purejavacomm/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>org.openhab.core.bundles</groupId>
<artifactId>org.openhab.core.reactor.bundles</artifactId>
<version>4.0.0-SNAPSHOT</version>
</parent>

<artifactId>org.openhab.core.io.transport.serial.purejavacomm</artifactId>

<name>openHAB Core :: Bundles :: Serial Transport for Pure Java Communications API</name>

<dependencies>
<dependency>
<groupId>org.openhab.core.bundles</groupId>
<artifactId>org.openhab.core.io.transport.serial</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.opensmarthouse</groupId>
<artifactId>purejavacomm</artifactId>
<version>1.0.5</version>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
/**
* Copyright (c) 2010-2023 Contributors to the openHAB project
*
* See the NOTICE file(s) distributed with this work for additional
* information.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.openhab.core.io.transport.serial.internal;

import java.net.URI;
import java.util.Enumeration;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.function.Consumer;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;

import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.openhab.core.io.transport.serial.ProtocolType;
import org.openhab.core.io.transport.serial.ProtocolType.PathType;
import org.openhab.core.io.transport.serial.SerialPortIdentifier;
import org.openhab.core.io.transport.serial.SerialPortProvider;
import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import purejavacomm.CommPortIdentifier;
import purejavacomm.NoSuchPortException;

/**
*
* @author Łukasz Dywicki - Initial contribution
* @author Karel Goderis - added further methods
*/
@NonNullByDefault
@Component(service = SerialPortProvider.class)
public class PureJavaCommPortProvider implements SerialPortProvider {

private final Logger logger = LoggerFactory.getLogger(PureJavaCommPortProvider.class);

@Override
public @Nullable SerialPortIdentifier getPortIdentifier(URI port) {
CommPortIdentifier ident = null;
try {
ident = CommPortIdentifier.getPortIdentifier(port.getPath());
} catch (NoSuchPortException e) {
logger.debug("No SerialPortIdentifier found for: {}", port.getPath());
return null;
}
return new SerialPortIdentifierImpl(ident);
}

@Override
public Stream<ProtocolType> getAcceptedProtocols() {
return Stream.of(new ProtocolType(PathType.LOCAL, "purejavacomm"));
}

@Override
public Stream<SerialPortIdentifier> getSerialPortIdentifiers() {
@SuppressWarnings("unchecked")
final Enumeration<CommPortIdentifier> ids = CommPortIdentifier.getPortIdentifiers();
return StreamSupport.stream(new SplitIteratorForEnumeration<>(ids), false)
.filter(id -> id.getPortType() == CommPortIdentifier.PORT_SERIAL)
.map(sid -> new SerialPortIdentifierImpl(sid));
}

private static class SplitIteratorForEnumeration<T> extends Spliterators.AbstractSpliterator<T> {
private final Enumeration<T> e;

public SplitIteratorForEnumeration(final Enumeration<T> e) {
super(Long.MAX_VALUE, Spliterator.ORDERED);
this.e = e;
}

@Override
@NonNullByDefault({})
public boolean tryAdvance(Consumer<? super T> action) {
if (e.hasMoreElements()) {
action.accept(e.nextElement());
return true;
}
return false;
}

@Override
@NonNullByDefault({})
public void forEachRemaining(Consumer<? super T> action) {
while (e.hasMoreElements()) {
action.accept(e.nextElement());
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/**
* Copyright (c) 2010-2023 Contributors to the openHAB project
*
* See the NOTICE file(s) distributed with this work for additional
* information.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.openhab.core.io.transport.serial.internal;

import org.eclipse.jdt.annotation.NonNullByDefault;
import org.openhab.core.io.transport.serial.SerialPortEvent;

/**
* Specific serial port event implementation.
*
* @author Łukasz Dywicki - Initial contribution
* @author Karel Goderis - added further methods
*/
@NonNullByDefault
public class SerialPortEventImpl implements SerialPortEvent {

private final purejavacomm.SerialPortEvent event;

/**
* Constructor.
*
* @param event the underlying event implementation
*/
public SerialPortEventImpl(final purejavacomm.SerialPortEvent event) {
this.event = event;
}

@Override
public int getEventType() {
return event.getEventType();
}

@Override
public boolean getNewValue() {
return event.getNewValue();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
/**
* Copyright (c) 2010-2023 Contributors to the openHAB project
*
* See the NOTICE file(s) distributed with this work for additional
* information.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.openhab.core.io.transport.serial.internal;

import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.openhab.core.io.transport.serial.PortInUseException;
import org.openhab.core.io.transport.serial.SerialPort;
import org.openhab.core.io.transport.serial.SerialPortIdentifier;

import purejavacomm.CommPortIdentifier;

/**
* Specific serial port identifier implementation.
*
* @author Łukasz Dywicki - Initial contribution
* @author Karel Goderis - added further methods
*/
@NonNullByDefault
public class SerialPortIdentifierImpl implements SerialPortIdentifier {

final CommPortIdentifier id;

/**
* Constructor.
*
* @param id the underlying comm port identifier implementation
*/
public SerialPortIdentifierImpl(final CommPortIdentifier id) {
this.id = id;
}

@Override
public String getName() {
final String name = id.getName();
return name != null ? name : "";
}

@Override
public SerialPort open(String owner, int timeout) throws PortInUseException {

try {
return new SerialPortImpl((purejavacomm.SerialPort) id.open(owner, timeout));
} catch (purejavacomm.PortInUseException e) {
String message = e.getMessage();
if (message != null) {
throw new PortInUseException(message, e);
} else {
throw new PortInUseException(e);
}
}
}

@Override
public boolean isCurrentlyOwned() {
return id.isCurrentlyOwned();
}

@Override
public @Nullable String getCurrentOwner() {
return id.getCurrentOwner();
}

public String toString() {
return getName() + " (pure java comm)";
}
}
Loading

0 comments on commit e3d4664

Please sign in to comment.