From 23a97714671b62d1fcfd93804454f6e376b99b1d Mon Sep 17 00:00:00 2001 From: Eric Wild Date: Wed, 28 Jul 2021 15:22:18 +0200 Subject: [PATCH] contrib: more cardem dissection Change-Id: Ia74d3674f854b390c9745a1cb8d5756bd5d39540 --- contrib/simtrace.lua | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/contrib/simtrace.lua b/contrib/simtrace.lua index 82982652..5a273d2d 100644 --- a/contrib/simtrace.lua +++ b/contrib/simtrace.lua @@ -36,9 +36,29 @@ local reserved = ProtoField.uint16("usb_simtrace.reserved", "reserved", base.HE local payloadlen = ProtoField.uint16("usb_simtrace.length", "length", base.HEX_DEC) local payload = ProtoField.bytes("usb_simtrace.payload", "Data") +local pb_and_rx = ProtoField.uint32("usb_simtrace.pb_and_rx", "pb_and_rx", base.HEX_DEC, NULL, 0x8) +local pb_and_tx = ProtoField.uint32("usb_simtrace.pb_and_tx", "pb_and_tx", base.HEX_DEC, NULL, 0x4) +local final = ProtoField.uint32("usb_simtrace.final", "final", base.HEX_DEC, NULL, 0x2) +local tpdu_hdr = ProtoField.uint32("usb_simtrace.tpdu_hdr", "tpdu_hdr", base.HEX_DEC, NULL, 0x1) +local rxtxdatalen = ProtoField.uint16("usb_simtrace.rxtxdatalen", "rx/tx data length", base.HEX_DEC) +local rxtxdata = ProtoField.bytes("usb_simtrace.rxtxdata", "rx/tx (data)") usb_simtrace_protocol.fields = { - msgtype, seqnr, slotnr, reserved, payloadlen, payload + msgtype, seqnr, slotnr, reserved, payloadlen, payload, pb_and_rx, pb_and_tx, final, tpdu_hdr, rxtxdatalen, rxtxdata } +function dissect_rxtx(payload_data,pinfo,tree) + + local headerSubtree = tree:add(usb_simtrace_protocol, payload_data, "rx/tx data") + local len = payload_data(8+4,2):le_uint(); + local cmd32 = payload_data(8+0,4):le_uint(); + + headerSubtree:add(pb_and_rx, cmd32) + headerSubtree:add(pb_and_tx, cmd32) + headerSubtree:add(final, cmd32) + headerSubtree:add(tpdu_hdr, cmd32) + + headerSubtree:add(rxtxdatalen, len) + headerSubtree:add_le(rxtxdata, payload_data(8+6,len)) +end function usb_simtrace_protocol.dissector(buffer, pinfo, tree) length = buffer:len() @@ -54,7 +74,12 @@ function usb_simtrace_protocol.dissector(buffer, pinfo, tree) subtree:add(slotnr, buffer(3,1)) subtree:add_le(payloadlen, buffer(6,2)) pinfo.cols.info = string.format("Cmd 0x%04X : %s", command, control_commands[command]) - subtree:add(payload, buffer(8,length-8)) + local payload_data = buffer(8,length-8) + if(command == 0x0101 or command == 0x0106) then + return dissect_rxtx(buffer(),pinfo,subtree) + else + subtree:add(payload, payload_data) + end end