|
@@ -0,0 +1,164 @@
|
|
|
+function UHF_DISSECTOR(buffer, pinfo, tree, HM_TM_dissector, offset, tm_len,data3)
|
|
|
+ -- UHF_DISSECTOR(buffer, pinfo, tree, TC_TM_PROTOCOL, offset, tm_len,data3)
|
|
|
+
|
|
|
+-- Define ProtoFields for each element of the structure (like in your original example)
|
|
|
+local f_cnt_hk_str = ProtoField.uint8("TC_TM_PROTOCOL.cnt_hk_str", "cnt_hk_str", base.DEC)
|
|
|
+local f_timestamp = ProtoField.uint32("TC_TM_PROTOCOL.timestamp", "timestamp", base.DEC)
|
|
|
+local f_uptime = ProtoField.uint32("TC_TM_PROTOCOL.uptime", "Uptime", base.DEC)
|
|
|
+local f_uarto_rx_count = ProtoField.uint32("TC_TM_PROTOCOL.uarto_rx_count", "UART0 RX Count", base.DEC)
|
|
|
+local f_uart1_rx_count = ProtoField.uint32("TC_TM_PROTOCOL.uart1_rx_count", "UART1 RX Count", base.DEC)
|
|
|
+local f_rx_mode = ProtoField.uint8("TC_TM_PROTOCOL.rx_mode", "RX Mode", base.DEC)
|
|
|
+local f_tx_mode = ProtoField.uint8("TC_TM_PROTOCOL.tx_mode", "TX Mode", base.DEC)
|
|
|
+local f_adc = ProtoField.uint16("TC_TM_PROTOCOL.adc", "ADC", base.DEC) -- array of int16_t[10]
|
|
|
+local f_last_rssi = ProtoField.uint8("TC_TM_PROTOCOL.last_rssi", "Last RSSI", base.DEC)
|
|
|
+local f_last_lqi = ProtoField.uint8("TC_TM_PROTOCOL.last_lqi", "Last LQI", base.DEC)
|
|
|
+local f_last_freqest = ProtoField.uint8("TC_TM_PROTOCOL.last_freqest", "Last Frequency Estimate", base.DEC)
|
|
|
+local f_pkt_sent = ProtoField.uint32("TC_TM_PROTOCOL.Pkt_sent", "Packets Sent", base.DEC)
|
|
|
+local f_cs_count = ProtoField.uint32("TC_TM_PROTOCOL.cs_count", "CS Count", base.DEC)
|
|
|
+local f_pkt_good = ProtoField.uint32("TC_TM_PROTOCOL.Pkt_good", "Packets Good", base.DEC)
|
|
|
+local f_pkt_rejected_checksum = ProtoField.uint32("TC_TM_PROTOCOL.Pkt_rejected_checksum", "Packets Rejected (Checksum)", base.DEC)
|
|
|
+local f_pkt_rejected_reserved = ProtoField.uint32("TC_TM_PROTOCOL.Pkt_rejected_reserved", "Packets Rejected (Reserved)", base.DEC)
|
|
|
+local f_pkt_rejected_other = ProtoField.uint32("TC_TM_PROTOCOL.Pkt_rejected_other", "Packets Rejected (Other)", base.DEC)
|
|
|
+local f_reserved0 = ProtoField.uint32("TC_TM_PROTOCOL.reserved0", "Reserved0", base.DEC)
|
|
|
+-- local f_reserved1 = ProtoField.uint32("TC_TM_PROTOCOL.reserved1", "Reserved1", base.DEC) -- Uncomment if needed
|
|
|
+local f_customo = ProtoField.uint32("TC_TM_PROTOCOL.customo", "Custom 0", base.DEC)
|
|
|
+local f_custom1 = ProtoField.uint32("TC_TM_PROTOCOL.custom1", "Custom 1", base.DEC)
|
|
|
+
|
|
|
+-- Add the fields to the protocol
|
|
|
+HM_TM_dissector.fields = {
|
|
|
+ f_timestamp,
|
|
|
+ f_cnt_hk_str,
|
|
|
+ f_uptime,
|
|
|
+ f_uarto_rx_count,
|
|
|
+ f_uart1_rx_count,
|
|
|
+ f_rx_mode,
|
|
|
+ f_tx_mode,
|
|
|
+ f_adc,
|
|
|
+ f_last_rssi,
|
|
|
+ f_last_lqi,
|
|
|
+ f_last_freqest,
|
|
|
+ f_pkt_sent,
|
|
|
+ f_cs_count,
|
|
|
+ f_pkt_good,
|
|
|
+ f_pkt_rejected_checksum,
|
|
|
+ f_pkt_rejected_reserved,
|
|
|
+ f_pkt_rejected_other,
|
|
|
+ f_reserved0,
|
|
|
+ -- f_reserved1, -- Uncomment if you want to include reserved1
|
|
|
+ f_customo,
|
|
|
+ f_custom1
|
|
|
+}
|
|
|
+
|
|
|
+-- For your dissection function (within a loop structure)
|
|
|
+for i=1, data3 do
|
|
|
+ --offset = offset + 8
|
|
|
+ local subtree = tree:add(TC_TM_PROTOCOL, buffer(), "UHF")
|
|
|
+
|
|
|
+ local a = buffer(offset, 1):le_uint()
|
|
|
+ subtree:add(f_cnt_hk_str, a)
|
|
|
+ offset = offset + 1
|
|
|
+
|
|
|
+ local b = buffer(offset, 4):le_uint()
|
|
|
+ subtree:add(f_timestamp, b)
|
|
|
+ offset = offset + 4
|
|
|
+ b = buffer(offset, 4):le_uint()
|
|
|
+ subtree:add(f_timestamp, b)
|
|
|
+ offset = offset + 4
|
|
|
+
|
|
|
+ -- dissect uptime
|
|
|
+ local uptime = buffer(offset, 4):le_uint()
|
|
|
+ subtree:add(f_uptime, uptime)
|
|
|
+ offset = offset + 4
|
|
|
+
|
|
|
+ -- dissect uarto_rx_count
|
|
|
+ local uarto_rx_count = buffer(offset, 4):le_uint()
|
|
|
+ subtree:add(f_uarto_rx_count, uarto_rx_count)
|
|
|
+ offset = offset + 4
|
|
|
+
|
|
|
+ -- dissect uart1_rx_count
|
|
|
+ local uart1_rx_count = buffer(offset, 4):le_uint()
|
|
|
+ subtree:add(f_uart1_rx_count, uart1_rx_count)
|
|
|
+ offset = offset + 4
|
|
|
+
|
|
|
+ -- dissect rx_mode
|
|
|
+ local rx_mode = buffer(offset, 1):le_uint()
|
|
|
+ subtree:add(f_rx_mode, rx_mode)
|
|
|
+ offset = offset + 1
|
|
|
+
|
|
|
+ -- dissect tx_mode
|
|
|
+ local tx_mode = buffer(offset, 1):le_uint()
|
|
|
+ subtree:add(f_tx_mode, tx_mode)
|
|
|
+ offset = offset + 1
|
|
|
+
|
|
|
+ -- dissect adc (array of int16, loop through based on 10 elements)
|
|
|
+ for j = 1, 10 do
|
|
|
+ local adc_value = buffer(offset, 2):le_int()
|
|
|
+ subtree:add(f_adc, adc_value)
|
|
|
+ offset = offset + 2
|
|
|
+ end
|
|
|
+
|
|
|
+ -- dissect last_rssi
|
|
|
+ local last_rssi = buffer(offset, 1):le_int()
|
|
|
+ subtree:add(f_last_rssi, last_rssi)
|
|
|
+ offset = offset + 1
|
|
|
+
|
|
|
+ -- dissect last_lqi
|
|
|
+ local last_lqi = buffer(offset, 1):le_uint()
|
|
|
+ subtree:add(f_last_lqi, last_lqi)
|
|
|
+ offset = offset + 1
|
|
|
+
|
|
|
+ -- dissect last_freqest
|
|
|
+ local last_freqest = buffer(offset, 1):le_int()
|
|
|
+ subtree:add(f_last_freqest, last_freqest)
|
|
|
+ offset = offset + 1
|
|
|
+
|
|
|
+ -- dissect Pkt_sent
|
|
|
+ local pkt_sent = buffer(offset, 4):le_uint()
|
|
|
+ subtree:add(f_pkt_sent, pkt_sent)
|
|
|
+ offset = offset + 4
|
|
|
+
|
|
|
+ -- dissect cs_count
|
|
|
+ local cs_count = buffer(offset, 4):le_uint()
|
|
|
+ subtree:add(f_cs_count, cs_count)
|
|
|
+ offset = offset + 4
|
|
|
+
|
|
|
+ -- dissect Pkt_good
|
|
|
+ local pkt_good = buffer(offset, 4):le_uint()
|
|
|
+ subtree:add(f_pkt_good, pkt_good)
|
|
|
+ offset = offset + 4
|
|
|
+
|
|
|
+ -- dissect Pkt_rejected_checksum
|
|
|
+ local pkt_rejected_checksum = buffer(offset, 4):le_uint()
|
|
|
+ subtree:add(f_pkt_rejected_checksum, pkt_rejected_checksum)
|
|
|
+ offset = offset + 4
|
|
|
+
|
|
|
+ -- dissect Pkt_rejected_reserved
|
|
|
+ local pkt_rejected_reserved = buffer(offset, 4):le_uint()
|
|
|
+ subtree:add(f_pkt_rejected_reserved, pkt_rejected_reserved)
|
|
|
+ offset = offset + 4
|
|
|
+
|
|
|
+ -- dissect Pkt_rejected_other
|
|
|
+ local pkt_rejected_other = buffer(offset, 4):le_uint()
|
|
|
+ subtree:add(f_pkt_rejected_other, pkt_rejected_other)
|
|
|
+ offset = offset + 4
|
|
|
+
|
|
|
+ -- dissect reserved0
|
|
|
+ local reserved0 = buffer(offset, 4):le_uint()
|
|
|
+ subtree:add(f_reserved0, reserved0)
|
|
|
+ offset = offset + 4
|
|
|
+
|
|
|
+ -- dissect customo
|
|
|
+ --local customo = buffer(offset, 4):le_uint()
|
|
|
+ --subtree:add(f_customo, customo)
|
|
|
+ --offset = offset + 4
|
|
|
+
|
|
|
+ -- dissect custom1
|
|
|
+ --local custom1 = buffer(offset, 4):le_uint()
|
|
|
+ --subtree:add(f_custom1, custom1)
|
|
|
+ --offset = offset + 4
|
|
|
+
|
|
|
+ -- (continue for any other fields you want to dissect, e.g., reserved1 if needed)
|
|
|
+end
|
|
|
+
|
|
|
+
|
|
|
+end
|