123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- function eps_get_live_param_dissector(buffer, pinfo, tree, TC_TM_PROTOCOL, offset)
- local f_pv_cnt = ProtoField.uint8("TC_TM_PROTOCOL.pv_cnt", "PV Count", base.DEC)
- local f_mppt_cnt = ProtoField.uint8("TC_TM_PROTOCOL.mppt_cnt", "MPPT Count", base.DEC)
- local f_op_conv_cnt = ProtoField.uint8("TC_TM_PROTOCOL.op_conv_cnt", "OP Converter Count", base.DEC)
- local f_btry_cnt = ProtoField.uint8("TC_TM_PROTOCOL.btry_cnt", "Battery Count", base.DEC)
- local f_btry_temp_sns_cnt = ProtoField.uint8("TC_TM_PROTOCOL.btry_temp_sns_cnt", "Battery Temp Sensor Count", base.DEC)
- local f_chnl_cnt = ProtoField.uint8("TC_TM_PROTOCOL.chnl_cnt", "Channel Count", base.DEC)
- local f_volt_rail_cnt = ProtoField.uint8("TC_TM_PROTOCOL.volt_rail_cnt", "Voltage Rail Count", base.DEC)
- local f_pv_volt_rd = ProtoField.float("TC_TM_PROTOCOL.pv_volt_rd", "PV Voltage Readings", base.DEC)
- local f_pv_cur_rd = ProtoField.float("TC_TM_PROTOCOL.pv_cur_rd", "PV Current Readings", base.DEC)
- local f_mppt_volt_rd = ProtoField.float("TC_TM_PROTOCOL.mppt_volt_rd", "MPPT Voltage Readings", base.DEC)
- local f_mppt_cur_rd = ProtoField.float("TC_TM_PROTOCOL.mppt_cur_rd", "MPPT Current Readings", base.DEC)
- local f_op_conv_volt_rd = ProtoField.bytes("TC_TM_PROTOCOL.op_conv_volt_rd", "OP Converter Voltage Readings")
- local f_tot_btry_volt_rd = ProtoField.float("TC_TM_PROTOCOL.tot_btry_volt_rd", "Total Battery Voltage Read", base.DEC)
- local f_tot_btry_cur_rd = ProtoField.float("TC_TM_PROTOCOL.tot_btry_cur_rd", "Total Battery Current Read", base.DEC)
- local f_btry_temp_sns_rd = ProtoField.uint8("TC_TM_PROTOCOL.btry_temp_sns_rd", "Battery Temp Sensor Readings", base.DEC)
- local f_chnl_state = ProtoField.uint16("TC_TM_PROTOCOL.chnl_state", "Channel States", base.DEC)
- local f_volt_rail_cur_value = ProtoField.bytes("TC_TM_PROTOCOL.volt_rail_cur_value", "Voltage Rail Current Values")
- local f_chnl_ovr_cur_flg = ProtoField.bytes("TC_TM_PROTOCOL.chnl_ovr_cur_flg", "Channel Overcurrent Flags")
- local f_hrm_btry_mode_info = ProtoField.uint8("TC_TM_PROTOCOL.hrm_btry_mode_info", "HRM Battery Mode Info", base.DEC)
- local f_reserved_byte_size = ProtoField.uint8("TC_TM_PROTOCOL.f_reserved_byte_size", "Reserved Byte Size", base.DEC)
- local f_reserved_byte_array = ProtoField.uint8("TC_TM_PROTOCOL.f_reserved_byte_size", "Reserved Byte Array", base.DEC)
- TC_TM_PROTOCOL.fields = {
- f_pv_cnt, f_mppt_cnt, f_op_conv_cnt, f_btry_cnt, f_btry_temp_sns_cnt,
- f_chnl_cnt, f_volt_rail_cnt, f_pv_volt_rd, f_pv_cur_rd, f_mppt_volt_rd,
- f_mppt_cur_rd, f_op_conv_volt_rd, f_tot_btry_volt_rd, f_tot_btry_cur_rd,
- f_btry_temp_sns_rd, f_chnl_state, f_volt_rail_cur_value,
- f_chnl_ovr_cur_flg, f_hrm_btry_mode_info
- }
- local subtree = tree:add(TC_TM_PROTOCOL, buffer(), "EPS GET LIVE PARAM")
- local pv_cnt = buffer(offset, 1):le_uint()
- subtree:add(f_pv_cnt, buffer(offset, 1):le_uint())
- offset = offset + 1
-
- local mppt_cnt = buffer(offset, 1):le_uint()
- subtree:add(f_mppt_cnt, buffer(offset, 1):le_uint())
- offset = offset + 1
-
- local op_conv_cnt = buffer(offset, 1):le_uint()
- subtree:add(f_op_conv_cnt, buffer(offset, 1):le_uint())
- offset = offset + 1
-
- local btry_cnt = buffer(offset, 1):le_uint()
- subtree:add(f_btry_cnt, buffer(offset, 1):le_uint())
- offset = offset + 1
-
- local btry_temp_sns_cnt = buffer(offset, 1):le_uint()
- subtree:add(f_btry_temp_sns_cnt, buffer(offset, 1):le_uint())
- offset = offset + 1
-
- local chnl_cnt = buffer(offset, 1):le_uint()
- subtree:add(f_chnl_cnt, buffer(offset, 1):le_uint())
- offset = offset + 1
-
- local volt_rail_cnt = buffer(offset, 1):le_uint()
- subtree:add(f_volt_rail_cnt, buffer(offset, 1):le_uint())
- offset = offset + 1
-
- local count = 0 -- Initialize the sum to 0
- local value
-
- for i = 0, pv_cnt - 1 do
- value = buffer(offset, 2):le_uint() -- Parse as little-endian uint16
- value = value/10;
- subtree:add(f_pv_volt_rd, value):set_text(string.format("PV Volt %d ----> %0.1f V", i, value))
- offset = offset + 2 -- Move the offset forward by 2 bytes
- end
-
- for i = 0, pv_cnt - 1 do
- value = buffer(offset, 2):le_uint()
- value = value / 100
- subtree:add(f_pv_cur_rd, value):set_text(string.format("PV Current %d ----> %0.2f A", i, value))
- offset = offset + 2
- end
-
- for i = 0, mppt_cnt - 1 do
- value = buffer(offset, 2):le_uint()
- value = value / 10
- subtree:add(f_mppt_volt_rd, value):set_text(string.format("MPPT Volt %d ----> %0.1f V", i, value))
- offset = offset + 2
- end
-
- for i = 0, mppt_cnt - 1 do
- value = buffer(offset, 2):le_uint()
- value = value / 100
- subtree:add(f_mppt_cur_rd, value):set_text(string.format("MPPT Current %d ----> %0.2f A", i, value))
- offset = offset + 2
- end
-
- for i = 0, op_conv_cnt - 1 do
- value = buffer(offset, 2):le_uint()
- value = value / 10
- subtree:add(f_op_conv_volt_rd, value):set_text(string.format("OP Convertor Volt %d ----> %0.1f V", i, value))
- offset = offset + 2
- end
-
- local tot_btry_volt = buffer(offset, 2):le_uint()
- tot_btry_volt = tot_btry_volt / 10
- subtree:add(f_tot_btry_volt_rd, tot_btry_volt):set_text(string.format("Total Battery Voltage Read ---- %0.1f V", tot_btry_volt))
- offset = offset + 2
-
- local tot_btry_curr = buffer(offset, 2):le_uint()
- tot_btry_curr = tot_btry_curr / 100
- subtree:add(f_tot_btry_cur_rd, tot_btry_curr):set_text(string.format("Total Battery Curr Read ---- %0.2f V", tot_btry_curr))
- offset = offset + 2
-
- for i = 0, btry_temp_sns_cnt - 1 do
- value = buffer(offset, 1):le_uint()
- subtree:add(f_btry_temp_sns_rd, value):set_text(string.format("Battery Temp Sensor %d ----> %d degC", i, value))
- offset = offset + 1
- end
-
- count = math.ceil(chnl_cnt / 8)
- local chnl_state = buffer(offset, count):le_uint()
- for i = 0, chnl_cnt - 1 do
- data = (chnl_state >> i) & 1
- if data == 1 then
- subtree:add(f_chnl_state, data):set_text(string.format("Channel %d ----> ON", i)) -- Adjust size as needed
- else
- subtree:add(f_chnl_state, data):set_text(string.format("Channel %d ----> OFF", i))
- end
- end
- offset = offset + count
-
-
- for i = 0, volt_rail_cnt - 1 do
- value = buffer(offset, 2):le_uint()
- value = value / 100
- subtree:add(f_volt_rail_cur_value, value):set_text(string.format("Volt Rail current Values %d ----> %0.2f V", i, value))
- offset = offset + 2
- end
-
- count = math.ceil(volt_rail_cnt / 8)
- local over_flow = buffer(offset, count):le_uint()
- for i = 0, volt_rail_cnt - 1 do
- data = (over_flow >> i) & 1
- if data == 1 then
- subtree:add(f_chnl_ovr_cur_flg, data):set_text(string.format("Over Current Flag %d ----> SET", i)) -- Adjust size as needed
- else
- subtree:add(f_chnl_ovr_cur_flg, data):set_text(string.format("Over Current Flag %d ----> CLR", i))
- end
- end
- offset = offset + count
-
- local btry_mode = buffer(offset, 1):le_uint()
- local data = btry_mode & 0x0f
-
- if data == 0 then
- subtree:add(f_hrm_btry_mode_info,data):set_text(string.format("EPS MODE ----> OFF"))
- elseif data == 1 then
- subtree:add(f_hrm_btry_mode_info, data):set_text(string.format("EPS MODE ----> CRITICAL"))
- elseif data == 2 then
- subtree:add(f_hrm_btry_mode_info, data):set_text(string.format("EPS MODE ----> SAFE"))
- elseif data == 3 then
- subtree:add(f_hrm_btry_mode_info, data):set_text(string.format("EPS MODE ----> NORMAL"))
- elseif data == 4 then
- subtree:add(f_hrm_btry_mode_info, data):set_text(string.format("EPS MODE ----> FULL"))
- end
-
- data = (btry_mode >> 4) & 1
-
- if data == 1 then
- subtree:add(f_hrm_btry_mode_info, data):set_text(string.format("Bttery Charge Status ----> Charging"))
- else
- subtree:add(f_hrm_btry_mode_info, data):set_text(string.format("Bttery Charge Status ----> Not Charging"))
- end
-
- data = (btry_mode >> 5) & 3
-
- if data == 3 then
- subtree:add(f_hrm_btry_mode_info, data):set_text(string.format("HRM Release Status ----> Both Left and Right opened"))
- elseif data == 2 then
- subtree:add(f_hrm_btry_mode_info, data):set_text(string.format("HRM Release Status ----> Left opened and Right Not opened"))
- elseif data == 1 then
- subtree:add(f_hrm_btry_mode_info, data):set_text(string.format("HRM Release Status ----> Right opened and Left Not opened"))
- elseif data == 0 then
- subtree:add(f_hrm_btry_mode_info, data):set_text(string.format("HRM Release Status ----> Both Left and Right Not opened"))
- end
-
- offset = offset + 1
-
- --subtree:add(f_reserved_byte_size, buffer(offset, 1):le_uint())
- --offset = offset + 1
-
- --subtree:add(reserved_byte_array, buffer(offset, 1):le_uint())
- --offset = offset + 1
- end
|