Skip to content

Commit

Permalink
Added extended_header method to slice & used it in print example.
Browse files Browse the repository at this point in the history
  • Loading branch information
JulianSchmid committed Jul 13, 2019
1 parent 8d44442 commit 7369ce2
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 2 deletions.
10 changes: 8 additions & 2 deletions examples/print_messages_ids.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,14 @@ fn read(arguments: CommandLineArguments) -> Result<(),Error> {
Ok(dlt_slice) => {
//check if the message is verbose or non verbose (non verbose messages have message ids)
if let Some(message_id) = dlt_slice.message_id() {
if let Some(message_type) = dlt_slice.message_type() {
println!("non verbose message {:x} (type: {:?})", message_id, message_type);
if let Some(extended_header) = dlt_slice.extended_header() {
if let Some(message_type) = extended_header.message_type() {
println!("non verbose message {:x} (type: {:?}, application_id: {:x}, context_id: {})",
message_id, message_type, extended_header.application_id, extended_header.context_id);
} else {
println!("non verbose message {:x} (application_id: {:x}, context_id: {})",
message_id, extended_header.application_id, extended_header.context_id);
}
} else {
println!("non verbose message {:x}", message_id);
}
Expand Down
16 changes: 16 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -631,6 +631,21 @@ impl<'a> DltPacketSlice<'a> {
}
}

///Returns the dlt extended header if present
pub fn extended_header(&self) -> Option<DltExtendedHeader> {
if self.has_extended_header() {
let slice = &self.slice[self.header_len - 10..];
Some(DltExtendedHeader {
message_info: slice[0],
number_of_arguments: slice[1],
application_id: BigEndian::read_u32(&slice[2..6]),
context_id: BigEndian::read_u32(&slice[6..10])
})
} else {
None
}
}

///Returns the message type if a parsable message type is present
pub fn message_type(&self) -> Option<DltMessageType> {
if self.has_extended_header() {
Expand Down Expand Up @@ -957,6 +972,7 @@ mod tests {
assert_eq!(slice.is_big_endian(), packet.0.is_big_endian);
assert_eq!(slice.is_verbose(), packet.0.is_verbose());
assert_eq!(slice.payload(), &packet.1[..]);
assert_eq!(slice.extended_header(), packet.0.extended_header);

if let Some(packet_ext_header) = packet.0.extended_header.as_ref() {
assert_eq!(slice.message_type(), packet_ext_header.message_type());
Expand Down

0 comments on commit 7369ce2

Please sign in to comment.