@@ -54,4 +54,42 @@ class YearMonthDay {
5454
5555 assertArrayEquals (new byte []{(byte )0x3D ,(byte )0xF8 }, JBBPOut .BeginBin (JBBPBitOrder .MSB0 ).Bin (parsed ).End ().toByteArray ());
5656 }
57+
58+ /**
59+ * Case 08-feb-2016
60+ *
61+ * Incoming data: 0x024281
62+ * Timestamp format : <a href="http://www.etsi.org/deliver/etsi_en/300300_300399/30039202/02.03.02_60/en_30039202v020302p.pdf">Terrestrial Trunked Radio</a>
63+ *
64+ * @throws Exception for any error
65+ */
66+ @ Test
67+ public void testParseTimeStampFromTETRASavedInMSB0 () throws Exception {
68+ final byte [] TEST_DATA = new byte []{0x2 , 0x42 , (byte ) 0x81 };
69+
70+ class TetraTimestamp {
71+ @ Bin (type = BinType .BIT , outBitNumber = JBBPBitNumber .BITS_2 , outOrder = 1 , bitOrder = JBBPBitOrder .MSB0 )
72+ byte timezone ;
73+ @ Bin (type = BinType .BIT , outBitNumber = JBBPBitNumber .BITS_2 , outOrder = 2 , bitOrder = JBBPBitOrder .MSB0 )
74+ byte reserved ;
75+ @ Bin (type = BinType .BIT , outBitNumber = JBBPBitNumber .BITS_4 , outOrder = 3 , bitOrder = JBBPBitOrder .MSB0 )
76+ byte month ;
77+ @ Bin (type = BinType .BIT , outBitNumber = JBBPBitNumber .BITS_5 , outOrder = 4 , bitOrder = JBBPBitOrder .MSB0 )
78+ byte day ;
79+ @ Bin (type = BinType .BIT , outBitNumber = JBBPBitNumber .BITS_5 , outOrder = 5 , bitOrder = JBBPBitOrder .MSB0 )
80+ byte hour ;
81+ @ Bin (type = BinType .BIT , outBitNumber = JBBPBitNumber .BITS_6 , outOrder = 6 , bitOrder = JBBPBitOrder .MSB0 )
82+ byte minute ;
83+ }
84+
85+
86+ TetraTimestamp parsed = JBBPParser .prepare ("bit:2 timezone; bit:2 reserved; bit:4 month; bit:5 day; bit:5 hour; bit:6 minute;" , JBBPBitOrder .MSB0 ).parse (TEST_DATA ).mapTo (TetraTimestamp .class );
87+
88+ assertEquals (2 , parsed .month );
89+ assertEquals (8 , parsed .day );
90+ assertEquals (10 , parsed .hour );
91+ assertEquals (1 , parsed .minute );
92+
93+ assertArrayEquals (TEST_DATA , JBBPOut .BeginBin (JBBPBitOrder .MSB0 ).Bin (parsed ).End ().toByteArray ());
94+ }
5795}
0 commit comments