[Pkg-running-devel] [openambit] 11/23: Added some dissection of a few Ambit3 specific messages
Christian Perrier
bubulle at moszumanska.debian.org
Sat Jul 1 19:36:28 UTC 2017
This is an automated email from the git hooks/post-receive script.
bubulle pushed a commit to branch master
in repository openambit.
commit 71ae0813172129b883cb7453921bd66541041dc4
Author: Emil Ljungdahl <emil at kratern.se>
Date: Sun Sep 14 20:42:15 2014 +0200
Added some dissection of a few Ambit3 specific messages
---
wireshark_dissector/ambit-dissector.c | 287 +++++++++++++++++++++++++++++++---
1 file changed, 267 insertions(+), 20 deletions(-)
diff --git a/wireshark_dissector/ambit-dissector.c b/wireshark_dissector/ambit-dissector.c
index 31b7175..f664607 100644
--- a/wireshark_dissector/ambit-dissector.c
+++ b/wireshark_dissector/ambit-dissector.c
@@ -14,9 +14,16 @@ typedef struct ambit_reassembly_entry {
guint32 frame_total;
guint32 size;
unsigned char *data;
- guint32 log_entry_size;
- unsigned char *log_entry;
- guint32 log_start_frame;
+ struct {
+ guint32 entry_size;
+ unsigned char *entry;
+ guint32 start_frame;
+ } log;
+ struct {
+ guint32 entry_size;
+ unsigned char *entry;
+ guint32 start_frame;
+ } log_header;
} ambit_reassembly_entry_t;
typedef struct ambit_protocol_type {
@@ -50,6 +57,16 @@ static gint dissect_ambit_log_data_get(tvbuff_t *tvb, packet_info *pinfo, proto_
static gint dissect_ambit_log_data_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_);
static gint dissect_ambit_log_data_content(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_, guint32 offset, guint32 length);
static gint dissect_ambit_log_data_sample(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_, guint32 offset, guint32 length, guint32 *sampleno, guint32 *periodic_sample_specifier);
+static gint dissect_ambit_lock_status_get(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_);
+static gint dissect_ambit_lock_status_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_);
+static gint dissect_ambit_lock_set(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_);
+static gint dissect_ambit_lock_set_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_);
+
+static gint dissect_ambit3_settings_get(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_);
+static gint dissect_ambit3_settings_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_);
+static gint dissect_ambit3_log_headers_get(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_);
+static gint dissect_ambit3_log_headers_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_);
+static gint dissect_ambit3_log_headers_content(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_, guint32 offset, guint32 length);
/* protocols and header fields */
#define D_AMBIT_USBID 0x3f
@@ -62,6 +79,7 @@ static int hf_ambit_msgsegs = -1;
static int hf_ambit_msgseg = -1;
static int hf_ambit_msgheaderchksum = -1;
static int hf_ambit_requestcmd = -1;
+static int hf_ambit_pktformat = -1;
static int hf_ambit_pktseqno = -1;
static int hf_ambit_pktlen = -1;
static int hf_ambit_payloadchksum = -1;
@@ -145,10 +163,12 @@ static int hf_ambit_log_header_time_first_fix = -1;
static int hf_ambit_log_header_battery_start = -1;
static int hf_ambit_log_header_battery_stop = -1;
static int hf_ambit_log_header_distance_before_calib = -1;
+static int hf_ambit_log_header_synced = -1;
static int hf_ambit_log_header_more = -1;
static int hf_ambit_log_count = -1;
+static int hf_ambit_unsynced_log_count = -1;
static int hf_ambit_log_data_addr_frame_ref = -1;
static int hf_ambit_log_data_address = -1;
@@ -225,6 +245,8 @@ static gint ett_ambit_data = -1;
static gint ett_ambit_log_data = -1;
static gint ett_ambit_log_samples = -1;
static gint ett_ambit_log_sample = -1;
+static gint ett_ambit3_log_headers = -1;
+static gint ett_ambit3_log_header = -1;
static ambit_reassembly_entry_t *reassembly_entries = NULL;
static guint32 reassembly_entries_alloc = 0;
@@ -309,6 +331,16 @@ static const ambit_protocol_type_t subdissectors[] = {
{ 0x0b0b0a00, "Log header reply", dissect_ambit_log_header_reply },
{ 0x0b170500, "Get log data", dissect_ambit_log_data_get },
{ 0x0b170a00, "Log data reply", dissect_ambit_log_data_reply },
+ { 0x0b190500, "Get lock status", dissect_ambit_lock_status_get },
+ { 0x0b190a00, "Lock status reply", dissect_ambit_lock_status_reply },
+ { 0x0b1a0500, "Lock set", dissect_ambit_lock_set },
+ { 0x0b1a0a00, "Lock set reply", dissect_ambit_lock_set_reply },
+ { 0x11000500, "Ambit3 - Get settings", dissect_ambit3_settings_get },
+ { 0x11000a00, "Ambit3 - Settings reply", dissect_ambit3_settings_reply },
+ { 0x11010500, "Ambit3 - Write settings", dissect_ambit3_settings_reply },
+ { 0x11010a00, "Ambit3 - Settings write reply", dissect_ambit3_settings_get },
+ { 0x12000500, "Ambit3 - Get log headers", dissect_ambit3_log_headers_get },
+ { 0x12000a00, "Ambit3 - Log headers reply", dissect_ambit3_log_headers_reply },
{ 0, NULL, NULL }
};
@@ -353,10 +385,13 @@ static gint dissect_ambit_date_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tr
static gint dissect_ambit_time_write(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
gint offset = 0;
+ guint16 year = tvb_get_letohs(tvb, 0);
+ guint8 month = tvb_get_guint8(tvb, 2);
+ guint8 day = tvb_get_guint8(tvb, 3);
guint8 hour = tvb_get_guint8(tvb, 4);
guint8 minute = tvb_get_guint8(tvb, 5);
guint16 seconds = tvb_get_letohs(tvb, 6) / 1000;
- dissect_ambit_add_unknown(tvb, pinfo, tree, offset, 4);
+ proto_tree_add_string_format_value(tree, hf_ambit_date, tvb, offset, 4, "Date", "%04d-%02d-%02d", year, month, day);
offset += 4;
proto_tree_add_string_format_value(tree, hf_ambit_time, tvb, offset, 4, "Time", "%02d:%02d:%02d", hour, minute, seconds);
offset += 4;
@@ -1477,6 +1512,149 @@ static gint dissect_ambit_log_data_sample(tvbuff_t *tvb, packet_info *pinfo, pro
return 0;
}
+static gint dissect_ambit_lock_status_get(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+{
+}
+
+static gint dissect_ambit_lock_status_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+{
+}
+
+static gint dissect_ambit_lock_set(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+{
+}
+
+static gint dissect_ambit_lock_set_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+{
+}
+
+static gint dissect_ambit3_settings_get(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+{
+}
+
+static gint dissect_ambit3_settings_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+{
+}
+
+static gint dissect_ambit3_log_headers_get(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+{
+ dissect_ambit_add_unknown(tvb, pinfo, tree, 0, 18);
+}
+
+static gint dissect_ambit3_log_headers_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+{
+ dissect_ambit_add_unknown(tvb, pinfo, tree, 0, 6);
+}
+
+static gint dissect_ambit3_log_headers_content(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_, guint32 offset, guint32 length)
+{
+ gint namelen = 0;
+ guint16 log_count = 0;
+ guint16 log_cntr = 0;
+ gint header_len = 0;
+ proto_item *logs_ti = NULL;
+ proto_tree *logs_tree = NULL;
+ proto_item *log_ti = NULL;
+ proto_tree *log_tree = NULL;
+ dissect_ambit_add_unknown(tvb, pinfo, tree, offset, 10);
+ offset += 10;
+ log_count = tvb_get_letohs(tvb, offset);
+ proto_tree_add_item(tree, hf_ambit_log_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ offset += 2;
+ dissect_ambit_add_unknown(tvb, pinfo, tree, offset, 2);
+ offset += 2;
+ proto_tree_add_item(tree, hf_ambit_unsynced_log_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ offset += 2;
+ logs_ti = proto_tree_add_text(tree, tvb, 0, 0, "Logs");
+ logs_tree = proto_item_add_subtree(logs_ti, ett_ambit3_log_headers);
+ while (offset + 2 < length) {
+ header_len = tvb_get_guint8(tvb, offset+1);
+ log_cntr++;
+ log_ti = proto_tree_add_text(logs_tree, tvb, offset, header_len + 2, "Header #%u", log_cntr);
+ log_tree = proto_item_add_subtree(log_ti, ett_ambit3_log_header);
+ dissect_ambit_add_unknown(tvb, pinfo, log_tree, offset, 1);
+ offset += 1;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ offset += 1;
+ if (offset + header_len <= length) {
+ proto_tree_add_item(log_tree, hf_ambit_time, tvb, offset, 20, ENC_LITTLE_ENDIAN);
+ offset += 20;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_synced, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ offset += 1;
+ proto_tree_add_item(log_tree, hf_ambit_log_data_address, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+ offset += 4;
+ proto_tree_add_item(log_tree, hf_ambit_log_data_next_addr, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+ offset += 4;
+ dissect_ambit_add_unknown(tvb, pinfo, log_tree, offset, 8);
+ offset += 8;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_hr_min, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ offset += 1;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_hr_avg, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ offset += 1;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_hr_max, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ offset += 1;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_hr_min_time, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+ offset += 4;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_hr_max_time, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+ offset += 4;
+ dissect_ambit_add_unknown(tvb, pinfo, log_tree, offset, 2);
+ offset += 2;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_temp_min_time, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+ offset += 4;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_temp_max_time, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+ offset += 4;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_altitude_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ offset += 2;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_altitude_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ offset += 2;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_alt_min_time, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+ offset += 4;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_alt_max_time, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+ offset += 4;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_cadence_avg, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ offset += 1;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_cadence_max, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ offset += 1;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_cadence_max_time, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+ offset += 4;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_avg_speed, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ offset += 2;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_max_speed, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ offset += 2;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_speed_max_time, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+ offset += 4;
+ dissect_ambit_add_unknown(tvb, pinfo, log_tree, offset, 4);
+ offset += 4;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_duration, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+ offset += 4;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_ascent, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ offset += 2;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_descent, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ offset += 2;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_ascent_time, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+ offset += 4;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_descent_time, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+ offset += 4;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_recovery, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ offset += 2;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_peak_effect, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ offset += 1;
+ namelen = 0;
+ while (tvb_get_guint8(tvb, offset+namelen) != 0) {
+ namelen++;
+ }
+ proto_tree_add_item(log_tree, hf_ambit_log_header_activity_name, tvb, offset, namelen+1, ENC_LITTLE_ENDIAN);
+ offset += namelen + 1;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_distance, tvb, offset, 4, ENC_LITTLE_ENDIAN);
+ offset += 4;
+ proto_tree_add_item(log_tree, hf_ambit_log_header_energy, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ offset += 2;
+ dissect_ambit_add_unknown(tvb, pinfo, log_tree, offset, 26);
+ offset += 26;
+ }
+ }
+}
+
static gint
dissect_ambit(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
@@ -1488,7 +1666,7 @@ dissect_ambit(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U
guint16 msg_count = tvb_get_letohs(tvb, 4);
guint32 command = tvb_get_ntohl(tvb, 8);
guint32 pkt_len = tvb_get_letohl(tvb, 16);
- tvbuff_t *new_tvb = NULL, *next_tvb = NULL, *log_tvb = NULL;
+ tvbuff_t *new_tvb = NULL, *next_tvb = NULL, *log_tvb = NULL, *log_header_tvb = NULL;
static guint32 fragments_start_frame;
static guint16 fragments_offset;
static guint16 fragments_data_len;
@@ -1500,6 +1678,9 @@ dissect_ambit(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U
static guint32 log_after_end_of_use = 0xffffffff;
static guint32 log_last_known_address;
+ static guint32 current_log_header_start_frame = 0xffffffff;
+ static guint32 current_log_header_end_found = 0;
+
if (usbid == D_AMBIT_USBID) {
if (msg_part == 0x5d) {
data_len = data_header_len - 12;
@@ -1581,13 +1762,13 @@ dissect_ambit(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U
if (b == 'M' && c == 'E' && d == 'M') {
if (current_log_start_frame != 0xffffffff) {
- reassembly_entries[current_log_start_frame].log_entry = g_realloc(reassembly_entries[current_log_start_frame].log_entry, reassembly_entries[current_log_start_frame].log_entry_size + i);
- tvb_memcpy(tvb, &reassembly_entries[current_log_start_frame].log_entry[reassembly_entries[current_log_start_frame].log_entry_size], data_offset, i);
- reassembly_entries[current_log_start_frame].log_entry_size += i;
+ reassembly_entries[current_log_start_frame].log.entry = g_realloc(reassembly_entries[current_log_start_frame].log.entry, reassembly_entries[current_log_start_frame].log.entry_size + i);
+ tvb_memcpy(tvb, &reassembly_entries[current_log_start_frame].log.entry[reassembly_entries[current_log_start_frame].log.entry_size], data_offset, i);
+ reassembly_entries[current_log_start_frame].log.entry_size += i;
}
- reassembly_entries[pinfo->fd->num].log_entry = (unsigned char*)g_malloc(data_len-i);
- tvb_memcpy(tvb, reassembly_entries[pinfo->fd->num].log_entry, data_offset+i, data_len-i);
- reassembly_entries[pinfo->fd->num].log_entry_size = data_len-i;
+ reassembly_entries[pinfo->fd->num].log.entry = (unsigned char*)g_malloc(data_len-i);
+ tvb_memcpy(tvb, reassembly_entries[pinfo->fd->num].log.entry, data_offset+i, data_len-i);
+ reassembly_entries[pinfo->fd->num].log.entry_size = data_len-i;
current_log_start_frame = pinfo->fd->num;
break;
}
@@ -1596,22 +1777,68 @@ dissect_ambit(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U
if (i == data_len && current_log_start_frame != 0xffffffff) {
// No new PMEM found
- reassembly_entries[current_log_start_frame].log_entry = g_realloc(reassembly_entries[current_log_start_frame].log_entry, reassembly_entries[current_log_start_frame].log_entry_size + data_len);
- tvb_memcpy(tvb, &reassembly_entries[current_log_start_frame].log_entry[reassembly_entries[current_log_start_frame].log_entry_size], data_offset, data_len);
+ reassembly_entries[current_log_start_frame].log.entry = g_realloc(reassembly_entries[current_log_start_frame].log.entry, reassembly_entries[current_log_start_frame].log.entry_size + data_len);
+ tvb_memcpy(tvb, &reassembly_entries[current_log_start_frame].log.entry[reassembly_entries[current_log_start_frame].log.entry_size], data_offset, data_len);
- reassembly_entries[current_log_start_frame].log_entry_size += data_len;
+ reassembly_entries[current_log_start_frame].log.entry_size += data_len;
}
// Increment address
log_last_known_address += data_len;
- reassembly_entries[pinfo->fd->num].log_start_frame = current_log_start_frame;
+ reassembly_entries[pinfo->fd->num].log.start_frame = current_log_start_frame;
if (log_last_known_address >= log_after_end_of_use) {
// If we are after end of file, reset log entry!
current_log_start_frame = 0xffffffff;
}
}
+
+ // Handle dissection of Ambit3 log headers
+ if (command == 0x12000a00) {
+ if (msg_part == 0x5d) {
+ // Check if this is the first packet of the last header chunk
+ if (tvb_get_guint8(tvb, data_offset) == 0x00 &&
+ tvb_get_guint8(tvb, data_offset+1) == 0x00 &&
+ tvb_get_guint8(tvb, data_offset+2) == 0x00 &&
+ tvb_get_guint8(tvb, data_offset+3) == 0x00 &&
+ tvb_get_guint8(tvb, data_offset+4) == 0x01 &&
+ tvb_get_guint8(tvb, data_offset+5) == 0x00) {
+ current_log_header_end_found = 1;
+ }
+
+ // Adjust data pointers for extra address and length fields
+ data_offset += 6;
+ data_len -= 6;
+ }
+
+ // Look for start of entry (at SBEM0102)
+ if (tvb_get_guint8(tvb, data_offset) == 'S' &&
+ tvb_get_guint8(tvb, data_offset+1) == 'B' &&
+ tvb_get_guint8(tvb, data_offset+2) == 'E' &&
+ tvb_get_guint8(tvb, data_offset+3) == 'M') {
+ reassembly_entries[pinfo->fd->num].log_header.entry = (unsigned char*)g_malloc(data_len);
+ tvb_memcpy(tvb, reassembly_entries[pinfo->fd->num].log_header.entry, data_offset, data_len);
+ reassembly_entries[pinfo->fd->num].log_header.entry_size = data_len;
+ current_log_header_start_frame = pinfo->fd->num;
+ }
+ else if (current_log_header_start_frame != 0xffffffff) {
+ // Append to current entry
+ reassembly_entries[current_log_header_start_frame].log_header.entry = g_realloc(reassembly_entries[current_log_header_start_frame].log_header.entry, reassembly_entries[current_log_header_start_frame].log_header.entry_size + data_len);
+ tvb_memcpy(tvb, &reassembly_entries[current_log_header_start_frame].log_header.entry[reassembly_entries[current_log_header_start_frame].log_header.entry_size], data_offset, data_len);
+
+ reassembly_entries[current_log_header_start_frame].log_header.entry_size += data_len;
+ }
+
+ reassembly_entries[pinfo->fd->num].log_header.start_frame = current_log_header_start_frame;
+
+ // If we have reached last packet in last chunk, reset "pointers"
+ if (reassembly_entries[pinfo->fd->num].frame_index + 1 == reassembly_entries[pinfo->fd->num].frame_total &&
+ current_log_header_end_found == 1) {
+ current_log_header_start_frame = 0xffffffff;
+ current_log_header_end_found = 0;
+ }
+ }
}
if (tree) { /* we are being asked for details */
@@ -1645,7 +1872,7 @@ dissect_ambit(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U
if (msg_part == 0x5d) {
proto_tree_add_item(ambit_tree, hf_ambit_requestcmd, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
- dissect_ambit_add_unknown (tvb, pinfo, ambit_tree, offset, 2);
+ proto_tree_add_item(ambit_tree, hf_ambit_pktformat, tvb, offset, 2, ENC_LITTLE_ENDIAN);
offset += 2;
proto_tree_add_item(ambit_tree, hf_ambit_pktseqno, tvb, offset, 2, ENC_LITTLE_ENDIAN);
offset += 2;
@@ -1666,11 +1893,17 @@ dissect_ambit(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U
col_add_fstr(pinfo->cinfo, COL_INFO, " (#%u of #%u) Reassembled", reassembly_entries[pinfo->fd->num].frame_index + 1, reassembly_entries[pinfo->fd->num].frame_total);
- if (reassembly_entries[pinfo->fd->num].log_start_frame != 0xffffffff &&
- reassembly_entries[reassembly_entries[pinfo->fd->num].log_start_frame].log_entry != NULL) {
- log_tvb = tvb_new_real_data(reassembly_entries[reassembly_entries[pinfo->fd->num].log_start_frame].log_entry, reassembly_entries[reassembly_entries[pinfo->fd->num].log_start_frame].log_entry_size, reassembly_entries[reassembly_entries[pinfo->fd->num].log_start_frame].log_entry_size);
+ if (reassembly_entries[pinfo->fd->num].log.start_frame != 0xffffffff &&
+ reassembly_entries[reassembly_entries[pinfo->fd->num].log.start_frame].log.entry != NULL) {
+ log_tvb = tvb_new_real_data(reassembly_entries[reassembly_entries[pinfo->fd->num].log.start_frame].log.entry, reassembly_entries[reassembly_entries[pinfo->fd->num].log.start_frame].log.entry_size, reassembly_entries[reassembly_entries[pinfo->fd->num].log.start_frame].log.entry_size);
add_new_data_source(pinfo, log_tvb, "Log");
}
+
+ if (reassembly_entries[pinfo->fd->num].log_header.start_frame != 0xffffffff &&
+ reassembly_entries[reassembly_entries[pinfo->fd->num].log_header.start_frame].log_header.entry != NULL) {
+ log_header_tvb = tvb_new_real_data(reassembly_entries[reassembly_entries[pinfo->fd->num].log_header.start_frame].log_header.entry, reassembly_entries[reassembly_entries[pinfo->fd->num].log_header.start_frame].log_header.entry_size, reassembly_entries[reassembly_entries[pinfo->fd->num].log_header.start_frame].log_header.entry_size);
+ add_new_data_source(pinfo, log_header_tvb, "Log header");
+ }
}
else {
col_add_fstr(pinfo->cinfo, COL_INFO, " (#%u of #%u)", reassembly_entries[pinfo->fd->num].frame_index + 1, reassembly_entries[pinfo->fd->num].frame_total);
@@ -1698,7 +1931,13 @@ dissect_ambit(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U
if (log_tvb != NULL) {
data_ti = proto_tree_add_text(ambit_tree, new_tvb, 0, pkt_len, "Full log entry");
data_tree = proto_item_add_subtree(data_ti, ett_ambit_log_data);
- dissect_ambit_log_data_content(log_tvb, pinfo, data_tree, data, 0, reassembly_entries[reassembly_entries[pinfo->fd->num].log_start_frame].log_entry_size);
+ dissect_ambit_log_data_content(log_tvb, pinfo, data_tree, data, 0, reassembly_entries[reassembly_entries[pinfo->fd->num].log.start_frame].log.entry_size);
+ }
+
+ if (log_header_tvb != NULL) {
+ data_ti = proto_tree_add_text(ambit_tree, new_tvb, 0, pkt_len, "Full log headers");
+ data_tree = proto_item_add_subtree(data_ti, ett_ambit_log_data);
+ dissect_ambit3_log_headers_content(log_header_tvb, pinfo, data_tree, data, 0, reassembly_entries[reassembly_entries[pinfo->fd->num].log_header.start_frame].log_header.entry_size);
}
offset += data_len;
@@ -1738,6 +1977,8 @@ proto_register_ambit(void)
{ "msg header checksum", "ambit.msgheaderchksum", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } },
{ &hf_ambit_requestcmd,
{ "Command", "ambit.command", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } },
+ { &hf_ambit_pktformat,
+ { "Packet format", "ambit.pktformat", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ambit_pktseqno,
{ "Packet sequence no", "ambit.pktseqno", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_ambit_pktlen,
@@ -1897,12 +2138,16 @@ proto_register_ambit(void)
{ "Battery at end", "ambit.log_header.battery_stop", FT_UINT8, BASE_DEC, NULL, 0x0,NULL, HFILL } },
{ &hf_ambit_log_header_distance_before_calib,
{ "Distance before calibration", "ambit.log_header.distance_before_calib", FT_UINT32, BASE_DEC, NULL, 0x0,NULL, HFILL } },
+ { &hf_ambit_log_header_synced,
+ { "Syncronized", "ambit.log_header.synced", FT_UINT8, BASE_DEC, NULL, 0x0,NULL, HFILL } },
{ &hf_ambit_log_header_more,
{ "More values", "ambit.log_header.more", FT_UINT32, BASE_HEX, VALS(log_header_more_vals), 0, NULL, HFILL } },
{ &hf_ambit_log_count,
{ "Log count", "ambit.log.count", FT_UINT16, BASE_DEC, NULL, 0x0,NULL, HFILL } },
+ { &hf_ambit_unsynced_log_count,
+ { "Not synced log count", "ambit.log.unsynced.count", FT_UINT16, BASE_DEC, NULL, 0x0,NULL, HFILL } },
{ &hf_ambit_log_data_addr_frame_ref,
{ "In frame", "ambit.log_data.inframe", FT_FRAMENUM, BASE_NONE, NULL, 0, NULL, HFILL } },
@@ -2043,6 +2288,8 @@ proto_register_ambit(void)
&ett_ambit_log_data,
&ett_ambit_log_samples,
&ett_ambit_log_sample,
+ &ett_ambit3_log_headers,
+ &ett_ambit3_log_header
};
proto_ambit = proto_register_protocol (
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-running/openambit.git
More information about the Pkg-running-devel
mailing list