This is an automated email from the git hooks/post-receive script. New commit to branch feature/7459 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 0241863f218e54054e29ad62a9bf6b5acbbf1da9 Author: Kevin Morin <morin@codelutin.com> Date: Thu Apr 21 10:27:04 2016 +0200 lecture des données reçues sur le pied à coulisse (refs #7459) --- tutti-caliper/pom.xml | 69 +---------- .../fr/ifremer/tutti/caliper/feed/Caliper.java | 135 --------------------- .../caliper/feed/CaliperConnectionException.java | 24 ++++ .../tutti/caliper/feed/CaliperFeedReader.java | 19 +-- .../record/CaliperFeedReaderMeasureRecord.java | 15 ++- .../record/CaliperFeedReaderRecordFactory.java | 8 +- 6 files changed, 53 insertions(+), 217 deletions(-) diff --git a/tutti-caliper/pom.xml b/tutti-caliper/pom.xml index 8c4fced..36a564f 100644 --- a/tutti-caliper/pom.xml +++ b/tutti-caliper/pom.xml @@ -75,6 +75,7 @@ <scope>test</scope> </dependency> + <!-- Serial port reading --> <dependency> <groupId>com.neuronrobotics</groupId> <artifactId>nrjavaserial</artifactId> @@ -84,72 +85,4 @@ </dependencies> - <profiles> - <profile> - <id>tools</id> - <activation> - <property> - <name>performRelease</name> - <value>true</value> - </property> - </activation> - - <properties> - <redmine.releaseFiles> - target/${project.build.finalName}-tools.zip - </redmine.releaseFiles> - </properties> - - <build> - <defaultGoal>package</defaultGoal> - - <plugins> - <plugin> - <artifactId>maven-assembly-plugin</artifactId> - <executions> - <execution> - <id>jar</id> - <goals> - <goal>assembly</goal> - </goals> - <phase>package</phase> - <configuration> - <descriptorRefs> - <descriptorRef>jar-with-dependencies</descriptorRef> - </descriptorRefs> - - </configuration> - </execution> - <execution> - <id>zip</id> - <goals> - <goal>assembly</goal> - </goals> - <phase>package</phase> - <configuration> - <descriptor>src/main/assembly/tools.xml</descriptor> - </configuration> - </execution> - </executions> - <configuration> - <finalName>${project.build.finalName}-tools</finalName> - <appendAssemblyId>false</appendAssemblyId> - </configuration> - </plugin> - </plugins> - </build> - - - <dependencies> - - <dependency> - <groupId>log4j</groupId> - <artifactId>log4j</artifactId> - <scope>runtime</scope> - </dependency> - - </dependencies> - </profile> - </profiles> - </project> diff --git a/tutti-caliper/src/main/java/fr/ifremer/tutti/caliper/feed/Caliper.java b/tutti-caliper/src/main/java/fr/ifremer/tutti/caliper/feed/Caliper.java deleted file mode 100644 index b63acb5..0000000 --- a/tutti-caliper/src/main/java/fr/ifremer/tutti/caliper/feed/Caliper.java +++ /dev/null @@ -1,135 +0,0 @@ -package fr.ifremer.tutti.caliper.feed; - -import gnu.io.CommPort; -import gnu.io.CommPortIdentifier; -import gnu.io.SerialPort; -import gnu.io.SerialPortEvent; -import gnu.io.SerialPortEventListener; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -/** - * @author Kevin Morin (Code Lutin) - * @since x.x - */ -public class Caliper { - public Caliper() - { - super(); - } - - void connect ( String portName ) throws Exception - { - CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName); - if ( portIdentifier.isCurrentlyOwned() ) - { - System.out.println("Error: Port is currently in use"); - } - else - { - CommPort commPort = portIdentifier.open(this.getClass().getName(), 2000); - - if ( commPort instanceof SerialPort ) - { - SerialPort serialPort = (SerialPort) commPort; - serialPort.setSerialPortParams(4800,SerialPort.DATABITS_7,SerialPort.STOPBITS_1,SerialPort.PARITY_EVEN); - - InputStream in = serialPort.getInputStream(); - OutputStream out = serialPort.getOutputStream(); - - (new Thread(new SerialWriter(out))).start(); - - serialPort.addEventListener(new SerialReader(in)); - serialPort.notifyOnDataAvailable(true); - - } - else - { - System.out.println("Error: Only serial ports are handled by this example."); - } - } - } - - /** - * Handles the input coming from the serial port. A new line character - * is treated as the end of a block in this example. - */ - public static class SerialReader implements SerialPortEventListener - { - private InputStream in; - private byte[] buffer = new byte[1024]; - - public SerialReader ( InputStream in ) - { - this.in = in; - } - - public void serialEvent(SerialPortEvent arg0) { - int data; - - try - { - int len = 0; - while ( ( data = in.read()) > -1 ) - { - if ( data == '\n' ) { - break; - } - buffer[len++] = (byte) data; - } - System.out.print(new String(buffer,0,len)); - } - catch ( IOException e ) - { - e.printStackTrace(); - System.exit(-1); - } - } - - } - - /** */ - public static class SerialWriter implements Runnable - { - OutputStream out; - - public SerialWriter ( OutputStream out ) - { - this.out = out; - } - - public void run () - { - try - { - int c = 0; - while ( ( c = System.in.read()) > -1 ) - { - this.out.write(c); - } - } - catch ( IOException e ) - { - e.printStackTrace(); - System.exit(-1); - } - } - } - - - - public static void main ( String[] args ) - { - try - { - (new Caliper()).connect("COM1"); - } - catch ( Exception e ) - { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } -} diff --git a/tutti-caliper/src/main/java/fr/ifremer/tutti/caliper/feed/CaliperConnectionException.java b/tutti-caliper/src/main/java/fr/ifremer/tutti/caliper/feed/CaliperConnectionException.java index fb9a0f6..c188300 100644 --- a/tutti-caliper/src/main/java/fr/ifremer/tutti/caliper/feed/CaliperConnectionException.java +++ b/tutti-caliper/src/main/java/fr/ifremer/tutti/caliper/feed/CaliperConnectionException.java @@ -1,5 +1,29 @@ package fr.ifremer.tutti.caliper.feed; +/* + * #%L + * Tutti :: Caliper API + * $Id:$ + * $HeadURL:$ + * %% + * Copyright (C) 2012 - 2016 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + /** * @author Kevin Morin (Code Lutin) * @since 4.5 diff --git a/tutti-caliper/src/main/java/fr/ifremer/tutti/caliper/feed/CaliperFeedReader.java b/tutti-caliper/src/main/java/fr/ifremer/tutti/caliper/feed/CaliperFeedReader.java index 6dbec27..27b837b 100644 --- a/tutti-caliper/src/main/java/fr/ifremer/tutti/caliper/feed/CaliperFeedReader.java +++ b/tutti-caliper/src/main/java/fr/ifremer/tutti/caliper/feed/CaliperFeedReader.java @@ -22,7 +22,6 @@ package fr.ifremer.tutti.caliper.feed; * #L% */ -import com.google.common.base.Preconditions; import fr.ifremer.tutti.caliper.feed.event.CaliperFeedReaderEvent; import fr.ifremer.tutti.caliper.feed.event.CaliperFeedReaderListener; import fr.ifremer.tutti.caliper.feed.record.CaliperFeedReaderMeasureRecord; @@ -35,7 +34,6 @@ import gnu.io.SerialPort; import gnu.io.SerialPortEvent; import gnu.io.SerialPortEventListener; import gnu.io.UnsupportedCommOperationException; -import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -56,6 +54,13 @@ public class CaliperFeedReader implements Closeable { /** Logger. */ private static final Log log = LogFactory.getLog(CaliperFeedReader.class); + private static final String SERIAL_PORT_PREFIX = "COM"; + + /** + * Name of the serial port + */ + protected String serialPortName; + /** * Serial port open in the {@code start} method. */ @@ -78,12 +83,12 @@ public class CaliperFeedReader implements Closeable { recordFactory = new CaliperFeedReaderRecordFactory(); } - public void start(String portName) throws CaliperConnectionException { + public void start(int portNumber) throws CaliperConnectionException { - Preconditions.checkArgument(StringUtils.isNotEmpty(portName), "serial port can not be null or empty"); + this.serialPortName = SERIAL_PORT_PREFIX + portNumber; try { - CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName); + CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(serialPortName); serialPort = portIdentifier.open(this.getClass().getName(), 2000); serialPort.setSerialPortParams(4800, SerialPort.DATABITS_7, SerialPort.STOPBITS_1, SerialPort.PARITY_EVEN); @@ -99,7 +104,7 @@ public class CaliperFeedReader implements Closeable { } catch (IOException | TooManyListenersException | PortInUseException | NoSuchPortException | UnsupportedCommOperationException e) { if (log.isErrorEnabled()) { - log.error("Error while connecting to the serial port " + portName, e); + log.error("Error while connecting to the serial port " + serialPortName, e); } throw new CaliperConnectionException(e); } @@ -131,7 +136,7 @@ public class CaliperFeedReader implements Closeable { } public String getSerialPortName() { - return serialPort != null ? serialPort.getName() : null; + return serialPortName; } /** diff --git a/tutti-caliper/src/main/java/fr/ifremer/tutti/caliper/feed/record/CaliperFeedReaderMeasureRecord.java b/tutti-caliper/src/main/java/fr/ifremer/tutti/caliper/feed/record/CaliperFeedReaderMeasureRecord.java index 5fbb8dd..49a1f6e 100644 --- a/tutti-caliper/src/main/java/fr/ifremer/tutti/caliper/feed/record/CaliperFeedReaderMeasureRecord.java +++ b/tutti-caliper/src/main/java/fr/ifremer/tutti/caliper/feed/record/CaliperFeedReaderMeasureRecord.java @@ -25,7 +25,9 @@ package fr.ifremer.tutti.caliper.feed.record; */ import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.math.NumberUtils; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * A measure record. @@ -39,9 +41,13 @@ public class CaliperFeedReaderMeasureRecord extends CaliperFeedReaderRecordSuppo private static final long serialVersionUID = 1L; + /** Received values are like +12,345\n */ + private static final Pattern RECORD_PATTERN = Pattern.compile("\\+(\\w+),\\w+\\s*"); + public static boolean acceptRecord(String record) { - return NumberUtils.isNumber(record); + Matcher matcher = RECORD_PATTERN.matcher(record); + return matcher.matches(); } @@ -49,7 +55,10 @@ public class CaliperFeedReaderMeasureRecord extends CaliperFeedReaderRecordSuppo CaliperFeedReaderMeasureRecord(String record) { super(record); - measure = Integer.valueOf(record); + Matcher matcher = RECORD_PATTERN.matcher(record); + matcher.find(); + String intPart = matcher.group(1); + measure = Integer.valueOf(intPart); } public int getMeasure() { diff --git a/tutti-caliper/src/main/java/fr/ifremer/tutti/caliper/feed/record/CaliperFeedReaderRecordFactory.java b/tutti-caliper/src/main/java/fr/ifremer/tutti/caliper/feed/record/CaliperFeedReaderRecordFactory.java index a6fea28..a9c4c01 100644 --- a/tutti-caliper/src/main/java/fr/ifremer/tutti/caliper/feed/record/CaliperFeedReaderRecordFactory.java +++ b/tutti-caliper/src/main/java/fr/ifremer/tutti/caliper/feed/record/CaliperFeedReaderRecordFactory.java @@ -33,11 +33,11 @@ import java.util.Set; */ public class CaliperFeedReaderRecordFactory { - protected final Set<CaliperFeedReaderRecordAceptor> acceptors; + protected final Set<CaliperFeedReaderRecordAcceptor> acceptors; public CaliperFeedReaderRecordFactory() { acceptors = new LinkedHashSet<>(); - acceptors.add(new CaliperFeedReaderRecordAceptor<CaliperFeedReaderMeasureRecord>() { + acceptors.add(new CaliperFeedReaderRecordAcceptor<CaliperFeedReaderMeasureRecord>() { @Override public boolean accept(String record) { return CaliperFeedReaderMeasureRecord.acceptRecord(record); @@ -55,7 +55,7 @@ public class CaliperFeedReaderRecordFactory { CaliperFeedReaderRecordSupport feedRecord = null; - for (CaliperFeedReaderRecordAceptor acceptor : acceptors) { + for (CaliperFeedReaderRecordAcceptor acceptor : acceptors) { boolean accept = acceptor.accept(record); if (accept) { @@ -71,7 +71,7 @@ public class CaliperFeedReaderRecordFactory { } - protected static interface CaliperFeedReaderRecordAceptor<F extends CaliperFeedReaderRecordSupport> { + protected interface CaliperFeedReaderRecordAcceptor<F extends CaliperFeedReaderRecordSupport> { boolean accept(String record); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.