diff --git a/message_generation/src/main/java/org/ros/internal/message/MessageImpl.java b/message_generation/src/main/java/org/ros/internal/message/MessageImpl.java index d7824dcecdf525671edc3d09b47eabba5232cdb0..d41e0419bd9abd4a78d879398e8de4c2bcd4ac27 100644 --- a/message_generation/src/main/java/org/ros/internal/message/MessageImpl.java +++ b/message_generation/src/main/java/org/ros/internal/message/MessageImpl.java @@ -161,8 +161,8 @@ class MessageImpl implements RawMessage, GetInstance { } @Override - public byte[] getInt8Array(String name) { - return (byte[]) messageFields.getFieldValue(name); + public ChannelBuffer getInt8Array(String name) { + return (ChannelBuffer) messageFields.getFieldValue(name); } @Override diff --git a/message_generation/src/main/java/org/ros/internal/message/RawMessage.java b/message_generation/src/main/java/org/ros/internal/message/RawMessage.java index 999db7a076d3cfe33e4cef3c1798b329d084b61a..a7f413af35909624578e725038fb7c640e7ab2c3 100644 --- a/message_generation/src/main/java/org/ros/internal/message/RawMessage.java +++ b/message_generation/src/main/java/org/ros/internal/message/RawMessage.java @@ -85,7 +85,7 @@ public interface RawMessage extends Message { byte getInt8(String name); - byte[] getInt8Array(String name); + ChannelBuffer getInt8Array(String name); <T extends Message> T getMessage(String name); diff --git a/message_generation/src/main/java/org/ros/internal/message/field/ChannelBufferField.java b/message_generation/src/main/java/org/ros/internal/message/field/ChannelBufferField.java index a13f542590d4558355b6948ba9d367ad157959b2..3977205932d1208b4c7cf7c1644ed77f47d0549e 100644 --- a/message_generation/src/main/java/org/ros/internal/message/field/ChannelBufferField.java +++ b/message_generation/src/main/java/org/ros/internal/message/field/ChannelBufferField.java @@ -19,6 +19,7 @@ package org.ros.internal.message.field; import com.google.common.base.Preconditions; import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.buffer.ChannelBuffers; import org.ros.internal.message.MessageBuffers; import java.nio.ByteOrder; @@ -52,9 +53,15 @@ public class ChannelBufferField extends Field { @Override public void setValue(Object value) { - Preconditions.checkArgument(((ChannelBuffer) value).order() == ByteOrder.LITTLE_ENDIAN); - Preconditions.checkArgument(size < 0 || ((ChannelBuffer) value).readableBytes() == size); - this.value = (ChannelBuffer) value; + ChannelBuffer channelBufferValue = null; + if (value instanceof byte[]) { + channelBufferValue = ChannelBuffers.wrappedBuffer(ByteOrder.LITTLE_ENDIAN, byte[].class.cast(value)); + } else if (value instanceof ChannelBuffer) { + channelBufferValue = ChannelBuffer.class.cast(value); + } + Preconditions.checkArgument(channelBufferValue.order() == ByteOrder.LITTLE_ENDIAN); + Preconditions.checkArgument(size < 0 || channelBufferValue.readableBytes() == size); + this.value = channelBufferValue; } @Override diff --git a/message_generation/src/test/java/org/ros/internal/message/MessageTest.java b/message_generation/src/test/java/org/ros/internal/message/MessageTest.java index fe80bb483e139b811229ddf2453e02abcc866e22..241009dfc590ee66ccb2356df3435de392449ae0 100644 --- a/message_generation/src/test/java/org/ros/internal/message/MessageTest.java +++ b/message_generation/src/test/java/org/ros/internal/message/MessageTest.java @@ -20,11 +20,15 @@ import static org.junit.Assert.assertEquals; import com.google.common.collect.Lists; +import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.buffer.ChannelBuffers; import org.junit.Before; import org.junit.Test; import org.ros.internal.message.topic.TopicDefinitionResourceProvider; import org.ros.message.MessageFactory; +import java.nio.ByteOrder; + /** * @author damonkohler@google.com (Damon Kohler) */ @@ -114,11 +118,13 @@ public class MessageTest { assertEquals("Hello, ROS! # comment", rawMessage.getString("data")); } + @Test public void testInt8List() { topicDefinitionResourceProvider.add("foo/foo", "int8[] data"); RawMessage rawMessage = messageFactory.newFromType("foo/foo"); - byte[] data = new byte[] { (byte) 1, (byte) 2, (byte) 3 }; - rawMessage.setInt8Array("data", data); + byte[] rawData = new byte[] { (byte) 1, (byte) 2, (byte) 3 }; + ChannelBuffer data = ChannelBuffers.wrappedBuffer(ByteOrder.LITTLE_ENDIAN, rawData); + rawMessage.setInt8Array("data", rawData); assertEquals(data, rawMessage.getInt8Array("data")); } } \ No newline at end of file