如何在Preon中定义枚举?

时间:2014-03-04 07:22:17

标签: preon

我正在尝试使用从github(v 1.1)编译的preon来解析我从嵌入式C ++应用程序获得的消息。我在我的项目中包含了antlr 3.3完整版。我将以下类定义为网络消息的标头:

public class Header {
    @BoundNumber(byteOrder = org.codehaus.preon.buffer.ByteOrder.BigEndian)
    public MessageType MsgType;
    @BoundNumber(byteOrder = org.codehaus.preon.buffer.ByteOrder.BigEndian)
    public int MsgNo;
    @BoundNumber(byteOrder = org.codehaus.preon.buffer.ByteOrder.BigEndian)
    public int RspNo;
    @BoundNumber(byteOrder = org.codehaus.preon.buffer.ByteOrder.BigEndian)
    public int Length;
    }

MessageType枚举如下:

public enum MessageType{
@BoundEnumOption(0x0000) Dummy1, 
@BoundEnumOption(0x0001) Dummy2
}

我尝试将收到的网络缓冲区强制转换为:

Codec<Header> headerCodec = Codecs.create(Header.class);
Header h = Codecs.decode(headerCodec, headerData);
System.out.println(h);

我收到以下antlr错误。我的定义或包含的包裹有问题吗?

第1行:0在输入'&lt;&lt; EOF&gt;'

由于

1 个答案:

答案 0 :(得分:0)

我发现了问题。对于枚举,您必须在BoundNumber注释中明确提供大小值,如下所示:

@BoundNumber(ByteOrder.BigEndian, size="32")
public MessageType MsgType;