2014-03-04 13 views
0

我想使用從github編譯的preon(1.1版)來解析我從嵌入式C++應用程序獲得的消息。我在我的項目中包含了antlr 3.3完整版本。我定義的下列類作爲網絡消息的報頭:Preon中的枚舉是如何定義的?

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; 
    } 

消息類型枚舉如下:

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在輸入沒有可行的替代 '< EOF>'

由於

回答

0

我發現這個問題。對於列舉來說,您似乎必須明確提供BoundNumber註釋中的大小值,如下所示:

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