Author: jvermillard
Date: Wed Jan 10 03:18:35 2007
New Revision: 494787
URL: http://svn.apache.org/viewvc?view=rev&rev=494787
Log:
basic serial tests,
fixed the first batch of bugs
Added:
mina/sandbox/jvermillard/serial/src/main/java/TestSerial.java
Modified:
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialConnector.java
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialFilterChain.java
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialSession.java
Added: mina/sandbox/jvermillard/serial/src/main/java/TestSerial.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/jvermillard/serial/src/main/java/TestSerial.java?view=auto&rev=494787
==============================================================================
--- mina/sandbox/jvermillard/serial/src/main/java/TestSerial.java (added)
+++ mina/sandbox/jvermillard/serial/src/main/java/TestSerial.java Wed Jan 10
03:18:35 2007
@@ -0,0 +1,98 @@
+import java.nio.charset.Charset;
+
+import org.apache.log4j.BasicConfigurator;
+import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.common.ConnectFuture;
+import org.apache.mina.common.IdleStatus;
+import org.apache.mina.common.IoHandler;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.filter.codec.ProtocolCodecFactory;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.codec.ProtocolDecoder;
+import org.apache.mina.filter.codec.ProtocolEncoder;
+import org.apache.mina.filter.codec.textline.LineDelimiter;
+import org.apache.mina.filter.codec.textline.TextLineDecoder;
+import org.apache.mina.filter.codec.textline.TextLineEncoder;
+import org.apache.mina.transport.serial.SerialConnector;
+import org.apache.mina.transport.serial.SerialPortAddress;
+import org.apache.mina.transport.serial.SerialPortAddress.DataBits;
+import org.apache.mina.transport.serial.SerialPortAddress.FlowControl;
+import org.apache.mina.transport.serial.SerialPortAddress.Parity;
+import org.apache.mina.transport.serial.SerialPortAddress.StopBits;
+
+
+public class TestSerial {
+ public static void main(String[] args) {
+ BasicConfigurator.configure();
+ SerialConnector connector= new SerialConnector();
+ connector.setHandler(new IoHandler(){
+
+ public void exceptionCaught(IoSession session,
Throwable cause) throws Exception {
+ System.err.println("Exception : ");
+ cause.printStackTrace();
+
+ }
+
+ public void messageReceived(IoSession session, Object
message) throws Exception {
+ System.err.println("RCVD : "+message);
+ }
+
+ public void messageSent(IoSession session, Object
message) throws Exception {
+ System.err.println("SENT : "+message);
+
+ }
+
+ public void sessionClosed(IoSession session) throws
Exception {
+ System.err.println("Session closed");
+
+ }
+
+ public void sessionCreated(IoSession session) throws
Exception {
+ System.err.println("Session created");
+ }
+
+ public void sessionIdle(IoSession session, IdleStatus
status) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void sessionOpened(IoSession session) throws
Exception {
+ System.err.println("Session open");
+/* session.getFilterChain().addLast("codec", new
ProtocolCodecFilter(new ProtocolCodecFactory() {
+ final ProtocolDecoder DECODER=new
TextLineDecoder(Charset.defaultCharset(),LineDelimiter.AUTO);
+ final ProtocolEncoder ENCODER=new
TextLineEncoder(Charset.defaultCharset(),LineDelimiter.UNIX);
+
+ public ProtocolDecoder getDecoder()
throws Exception {
+ return DECODER;
+ }
+
+ public ProtocolEncoder getEncoder()
throws Exception {
+ return ENCODER;
+ }
+ } ));
+*/
+
+ }
+
+ });
+ ConnectFuture future=connector.connect(new
SerialPortAddress("/dev/ttyUSB0",38400,DataBits.DATABITS_8,StopBits.STOP_BITS_1,Parity.PARITY_NONE,FlowControl.FLOWCONTROL_NONE));
+ IoSession session=future.getSession();
+
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ session.write(ByteBuffer.wrap("Hello it's the serial
communication !".getBytes()));
+
+ try {
+ Thread.sleep(5000);
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ session.close();
+ }
+}
Modified:
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialConnector.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialConnector.java?view=diff&rev=494787&r1=494786&r2=494787
==============================================================================
---
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialConnector.java
(original)
+++
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialConnector.java
Wed Jan 10 03:18:35 2007
@@ -12,6 +12,7 @@
import org.apache.mina.common.ConnectFuture;
import org.apache.mina.common.IoSessionConfig;
+import org.apache.mina.common.TransportType;
import org.apache.mina.common.support.BaseIoConnector;
import org.apache.mina.common.support.DefaultConnectFuture;
import org.apache.mina.common.support.IoServiceListenerSupport;
Modified:
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialFilterChain.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialFilterChain.java?view=diff&rev=494787&r1=494786&r2=494787
==============================================================================
---
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialFilterChain.java
(original)
+++
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialFilterChain.java
Wed Jan 10 03:18:35 2007
@@ -23,8 +23,7 @@
SerialSession s=(SerialSession)session;
Queue<WriteRequest> queue = s.getWriteRequestQueue();
- ( ( ByteBuffer ) writeRequest.getMessage() ).mark();
- // SocketIoProcessor.doFlush() will reset it after write is finished
+ // SocketIoProcessor.doFlush() will reset it after write is
finished
// because the buffer will be passed with messageSent event.
( ( ByteBuffer ) writeRequest.getMessage() ).mark();
synchronized( queue )
Modified:
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialSession.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialSession.java?view=diff&rev=494787&r1=494786&r2=494787
==============================================================================
---
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialSession.java
(original)
+++
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialSession.java
Wed Jan 10 03:18:35 2007
@@ -102,7 +102,6 @@
}
}
}
-
return size;
}
@@ -119,6 +118,11 @@
filterChain.fireFilterClose( this );
}
+ protected void write0( WriteRequest writeRequest )
+ {
+ filterChain.fireFilterWrite( this, writeRequest );
+ }
+
/**
* start handling streams
*
@@ -144,10 +148,12 @@
flushWrites();
// wait for more data
- try {
- writeMonitor.wait();
- } catch (InterruptedException e) {
- log.error("InterruptedException", e);
+ synchronized (writeMonitor) {
+ try {
+ writeMonitor.wait();
+ } catch (InterruptedException e) {
+
log.error("InterruptedException", e);
+ }
}
}
}
@@ -180,6 +186,7 @@
int writtenBytes = buf.remaining();
try {
outputStream.write(buf.array());
+ buf.position(buf.position()+writtenBytes);
this.increaseWrittenBytes(writtenBytes);
} catch (IOException e) {
this.getFilterChain().fireExceptionCaught(this,
e);
@@ -210,6 +217,8 @@
} catch (InterruptedException e) {
log.error("InterruptedException", e);
}
+ if(isClosing() || !isConnected())
+ break;
int dataSize;
try {
dataSize =
inputStream.available();
@@ -222,6 +231,7 @@
// TODO : check if it's the good
allocation way
ByteBuffer buf = ByteBuffer.allocate(
readBytes );
buf.put(data,0,readBytes);
+ buf.flip();
getFilterChain().fireMessageReceived(
SerialSession.this, buf );
}
} catch (IOException e) {
@@ -254,6 +264,11 @@
}
port.close();
+ notifyWriteWorker();
+ synchronized (readReadyMonitor) {
+ readReadyMonitor.notifyAll();
+ }
+
((SerialConnector)getService()).getListeners().fireSessionDestroyed(this);
}
}