adcs_dissector.lua 102 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257
  1. function adcs_dissector(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance, queue_id)
  2. if queue_id == 0 then
  3. require("adcs_dissector")
  4. adcs_dissector_0(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  5. elseif queue_id == 1 then
  6. require("adcs_dissector")
  7. adcs_dissector_1(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  8. elseif queue_id == 2 then
  9. require("adcs_dissector")
  10. adcs_dissector_2(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  11. elseif queue_id == 3 then
  12. require("adcs_dissector")
  13. adcs_dissector_3(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  14. elseif queue_id == 4 then
  15. require("adcs_dissector")
  16. adcs_dissector_4(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  17. elseif queue_id == 5 then
  18. require("adcs_dissector")
  19. adcs_dissector_5(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  20. elseif queue_id == 6 then
  21. require("adcs_dissector")
  22. adcs_dissector_6(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  23. elseif queue_id == 7 then
  24. require("adcs_dissector")
  25. adcs_dissector_7(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  26. elseif queue_id == 8 then
  27. require("adcs_dissector")
  28. adcs_dissector_8(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  29. elseif queue_id == 9 then
  30. require("adcs_dissector")
  31. adcs_dissector_9(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  32. elseif queue_id == 10 then
  33. require("adcs_dissector")
  34. adcs_dissector_10(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  35. elseif queue_id == 11 then
  36. require("adcs_dissector")
  37. adcs_dissector_11(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  38. elseif queue_id == 12 then
  39. require("adcs_dissector")
  40. adcs_dissector_12(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  41. elseif queue_id == 13 then
  42. require("adcs_dissector")
  43. adcs_dissector_13(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  44. elseif queue_id == 14 then
  45. require("adcs_dissector")
  46. adcs_dissector_14(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  47. elseif queue_id == 15 then
  48. require("adcs_dissector")
  49. adcs_dissector_15(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  50. elseif queue_id == 16 then
  51. require("adcs_dissector")
  52. adcs_dissector_16(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  53. elseif queue_id == 17 then
  54. require("adcs_dissector")
  55. adcs_dissector_17(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  56. elseif queue_id == 18 then
  57. require("adcs_dissector")
  58. adcs_dissector_18(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  59. elseif queue_id == 19 then
  60. require("adcs_dissector")
  61. adcs_dissector_19(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  62. elseif queue_id == 20 then
  63. require("adcs_dissector")
  64. adcs_dissector_20(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  65. elseif queue_id == 21 then
  66. require("adcs_dissector")
  67. adcs_dissector_21(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  68. elseif queue_id == 22 then
  69. require("adcs_dissector")
  70. adcs_dissector_22(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  71. elseif queue_id == 23 then
  72. require("adcs_dissector")
  73. adcs_dissector_23(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  74. elseif queue_id == 24 then
  75. require("adcs_dissector")
  76. adcs_dissector_24(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  77. elseif queue_id == 25 then
  78. require("adcs_dissector")
  79. adcs_dissector_25(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  80. elseif queue_id == 26 then
  81. require("adcs_dissector")
  82. adcs_dissector_26(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  83. elseif queue_id == 27 then
  84. require("adcs_dissector")
  85. adcs_dissector_27(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  86. elseif queue_id == 28 then
  87. require("adcs_dissector")
  88. adcs_dissector_28(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  89. elseif queue_id == 29 then
  90. require("adcs_dissector")
  91. adcs_dissector_29(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  92. elseif queue_id == 30 then
  93. require("adcs_dissector")
  94. adcs_dissector_30(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  95. elseif queue_id == 31 then
  96. require("adcs_dissector")
  97. adcs_dissector_31(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  98. elseif queue_id == 32 then
  99. require("adcs_dissector")
  100. adcs_dissector_32(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  101. end
  102. end
  103. function adcs_dissector_0(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  104. local status_field = ProtoField.uint32("adcs_protocol.status", "Status", base.DEC)
  105. local time_field = ProtoField.uint32("adcs_protocol.time", "Time", base.DEC)
  106. local nadir_3v3_current_field = ProtoField.uint32("adcs_protocol.nadir_3v3_current", "Nadir Sensor 3V3 Current", base.DEC)
  107. local fss_3v3_current_field = ProtoField.uint32("adcs_protocol.fss_3v3_current", "FSS 3V3 Current", base.DEC)
  108. local nadir_sram_current_field = ProtoField.uint32("adcs_protocol.nadir_sram_current", "Nadir SRAM Current", base.DEC)
  109. local fss_sram_current_field = ProtoField.uint32("adcs_protocol.fss_sram_current", "FSS SRAM Current", base.DEC)
  110. -- Add the fields to the protocol's 'fields' table
  111. adcs_protocol.fields = {
  112. status_field,
  113. time_field,
  114. nadir_3v3_current_field,
  115. fss_3v3_current_field,
  116. nadir_sram_current_field,
  117. fss_sram_current_field
  118. }
  119. for i = 0, num_of_instance - 1 do
  120. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  121. -- Dissect status
  122. local status = buffer(offset, 1):le_uint()
  123. subtree:add(status_field, status)
  124. offset = offset + 1
  125. -- Dissect time (4 bytes, little-endian)
  126. local time = buffer(offset, 4):le_uint()
  127. subtree:add(time_field, time)
  128. offset = offset + 4
  129. -- Dissect nadir 3V3 current (4 bytes, little-endian)
  130. local nadir_3v3_raw = buffer(offset, 2):le_uint()
  131. --local nadir_3v3_current = nadir_3v3_raw * 0.1 -- Apply multiplier
  132. subtree:add(nadir_3v3_current_field, nadir_3v3_raw)
  133. offset = offset + 2
  134. -- Dissect fss 3V3 current (4 bytes, little-endian)
  135. local fss_3v3_raw = buffer(offset, 2):le_uint()
  136. --local fss_3v3_current = fss_3v3_raw * 0.1 -- Apply multiplier
  137. subtree:add(fss_3v3_current_field, fss_3v3_raw)
  138. offset = offset + 2
  139. -- Dissect nadir SRAM current (4 bytes, little-endian)
  140. local nadir_sram_raw = buffer(offset, 2):le_uint()
  141. --local nadir_sram_current = nadir_sram_raw * 0.1 -- Apply multiplier
  142. subtree:add(nadir_sram_current_field, nadir_sram_raw)
  143. offset = offset + 2
  144. -- Dissect fss SRAM current (4 bytes, little-endian)
  145. local fss_sram_raw = buffer(offset, 2):le_uint()
  146. --local fss_sram_current = fss_sram_raw * 0.1 -- Apply multiplier
  147. subtree:add(fss_sram_current_field, fss_sram_raw)
  148. offset = offset + 2
  149. end
  150. end
  151. function adcs_dissector_1(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  152. local f_operation_status = ProtoField.uint32("adcs_dissector.operation_status", "Operation Status", base.DEC)
  153. local f_epoch_time = ProtoField.uint32("adcs_dissector.epoch_time", "Epoch Time", base.DEC)
  154. local f_3v_current = ProtoField.float("adcs_dissector.3v_current", "Current Value (3.3V)", base.DEC)
  155. local f_5v_current = ProtoField.float("adcs_dissector.5v_current", "Current Value (5V)", base.DEC)
  156. local f_vbat_current = ProtoField.float("adcs_dissector.vbat_current", "Vbat Current Value", base.DEC)
  157. -- Add fields to the protocol's 'fields' table
  158. adcs_protocol.fields = {
  159. f_operation_status,
  160. f_epoch_time,
  161. f_3v_current,
  162. f_5v_current,
  163. f_vbat_current
  164. }
  165. --local subtree = tree:add(adcs_protocol, buffer(),"ADCS queue id 1")
  166. for i = 0, num_of_instance - 1 do
  167. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  168. local operation_status = buffer(offset, 1):le_uint()
  169. subtree:add(f_operation_status, operation_status)
  170. offset = offset + 1
  171. -- Dissect epoch time (4 bytes, little-endian)
  172. local epoch_time = buffer(offset, 4):le_uint()
  173. subtree:add(f_epoch_time, epoch_time)
  174. offset = offset + 4
  175. -- Dissect 3.3V current value (4 bytes, little-endian)
  176. local raw_3v_current = buffer(offset, 2):uint()
  177. --local formatted_3v_current = raw_3v_current * 0.1 -- Apply multiplier
  178. subtree:add(f_3v_current, raw_3v_current)
  179. offset = offset + 2
  180. -- Dissect 5V current value (4 bytes, little-endian)
  181. local raw_5v_current = buffer(offset, 2):uint()
  182. --local formatted_5v_current = raw_5v_current * 0.1 -- Apply multiplier
  183. subtree:add(f_5v_current, raw_5v_current)
  184. offset = offset + 2
  185. -- Dissect Vbat current value (4 bytes, little-endian)
  186. local raw_vbat_current = buffer(offset, 2):uint()
  187. --local formatted_vbat_current = raw_vbat_current * 0.1 -- Apply multiplier
  188. subtree:add(f_vbat_current, raw_vbat_current)
  189. offset = offset + 2
  190. end
  191. end
  192. function adcs_dissector_2(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  193. local f_operation_status = ProtoField.uint32("adcs_dissector.operation_status", "Operation Status", base.DEC)
  194. local f_epoch_time = ProtoField.uint32("adcs_dissector.epoch_time", "Epoch Time", base.DEC)
  195. local f_num_reaction_wheels = ProtoField.uint32("adcs_dissector.num_reaction_wheels", "Number of Reaction Wheel", base.DEC)
  196. local f_rw_current_1 = ProtoField.float("adcs_dissector.rw_current_1", "Reaction Wheel Current 1 (A)", base.DEC)
  197. local f_rw_current_2 = ProtoField.float("adcs_dissector.rw_current_2", "Reaction Wheel Current 2 (A)", base.DEC)
  198. local f_rw_current_3 = ProtoField.float("adcs_dissector.rw_current_3", "Reaction Wheel Current 3 (A)", base.DEC)
  199. adcs_protocol.fields = {
  200. f_operation_status,
  201. f_epoch_time,
  202. f_num_reaction_wheels,
  203. f_rw_current_1,
  204. f_rw_current_2,
  205. f_rw_current_3
  206. }
  207. -- local subtree = tree:add(adcs_protocol, buffer(),"ADCS queue id 2")
  208. for i = 0, num_of_instance - 1 do
  209. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  210. local operation_status = buffer(offset, 1):le_uint()
  211. subtree:add(f_operation_status, operation_status)
  212. offset = offset + 1
  213. -- Dissect epoch time (4 bytes, little-endian)
  214. local epoch_time = buffer(offset, 4):le_uint()
  215. subtree:add(f_epoch_time, epoch_time)
  216. offset = offset + 4
  217. -- Dissect number of reaction wheels (4 bytes, little-endian)
  218. local num_reaction_wheels = buffer(offset, 1):le_uint()
  219. subtree:add(f_num_reaction_wheels, num_reaction_wheels)
  220. offset = offset + 1
  221. -- Dissect Reaction Wheel Current 1 (4 bytes, little-endian)
  222. local rw_current_1_raw = buffer(offset, 2):le_uint()
  223. local rw_current_1 = rw_current_1_raw * 0.1 -- Apply multiplier
  224. subtree:add(f_rw_current_1, rw_current_1)
  225. offset = offset + 2
  226. -- Dissect Reaction Wheel Current 2 (4 bytes, little-endian)
  227. local rw_current_2_raw = buffer(offset, 2):le_uint()
  228. local rw_current_2 = rw_current_2_raw * 0.1 -- Apply multiplier
  229. subtree:add(f_rw_current_2, rw_current_2)
  230. offset = offset + 2
  231. -- Dissect Reaction Wheel Current 3 (4 bytes, little-endian)
  232. local rw_current_3_raw = buffer(offset, 2):le_uint()
  233. local rw_current_3 = rw_current_3_raw * 0.1 -- Apply multiplier
  234. subtree:add(f_rw_current_3, rw_current_3)
  235. offset = offset + 2
  236. end
  237. end
  238. function adcs_dissector_3(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  239. local f_operation_status = ProtoField.uint8("current_protocol.operation_status", "Operation Status", base.DEC)
  240. local f_epoch_time = ProtoField.uint32("current_protocol.epoch_time", "Epoch Time", base.DEC)
  241. local f_cube_star_current = ProtoField.uint16("current_protocol.cube_star_current", "Cube Star Current ", base.DEC)
  242. local f_magnetorquer_current = ProtoField.uint16("current_protocol.magnetorquer_current", "Magnetorquer Current ", base.DEC)
  243. local f_cube_star_mcu_temp = ProtoField.uint16("current_protocol.cube_star_mcu_temp", "Cube Star MCU Temperature ", base.DEC)
  244. adcs_protocol.fields = {
  245. f_operation_status,
  246. f_epoch_time,
  247. f_cube_star_current,
  248. f_magnetorquer_current,
  249. f_cube_star_mcu_temp }
  250. -- local subtree = tree:add(adcs_protocol, buffer(),"ADCS queue id 3")
  251. for i = 0, num_of_instance - 1 do
  252. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  253. subtree:add(f_operation_status, buffer(offset, 1):le_uint())
  254. offset = offset + 1 -- Update offset
  255. -- Epoch Time (4 bytes, UINT)
  256. subtree:add(f_epoch_time, buffer(offset, 4):le_uint())
  257. offset = offset + 4 -- Update offset
  258. -- Cube Star Current (2 bytes, UINT)
  259. local cube_star_current = buffer(offset, 2):le_uint() * 0.1 -- Apply the scaling factor (RAWVAL * 0.1)
  260. subtree:add(f_cube_star_current, cube_star_current)
  261. offset = offset + 2 -- Update offset
  262. -- Magnetorquer Current (2 bytes, UINT)
  263. local magnetorquer_current = buffer(offset, 2):le_uint() * 0.1 -- Apply the scaling factor (RAWVAL * 0.1)
  264. subtree:add(f_magnetorquer_current, magnetorquer_current)
  265. offset = offset + 2 -- Update offset
  266. -- Cube Star MCU Temperature (2 bytes, UINT)
  267. local cube_star_mcu_temp = buffer(offset, 2):le_uint() * 0.1 -- Apply the scaling factor (RAWVAL * 0.1)
  268. subtree:add(f_cube_star_mcu_temp, cube_star_mcu_temp)
  269. offset = offset + 2 -- Update offset
  270. end
  271. end
  272. function adcs_dissector_4(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  273. local f_operation_status = ProtoField.uint32("adcs_protocol.operation_status", "Operation Status", base.DEC)
  274. local f_epoch_time = ProtoField.uint32("adcs_protocol.epoch_time", "Epoch Time", base.DEC)
  275. local f_mcu_temperature = ProtoField.int16("adcs_protocol.mcu_temperature", "MCU Temperature ", base.DEC)
  276. local f_magnetometer_temperature = ProtoField.int16("adcs_protocol.magnetometer_temperature", "Magnetometer Temperature ", base.DEC)
  277. local f_redundant_magnetometer_temperature = ProtoField.int16("adcs_protocol.redundant_magnetometer_temperature", "Redundant Magnetometer Temperature ", base.DEC)
  278. -- Add the fields to the protocol
  279. adcs_protocol.fields = { f_operation_status, f_epoch_time, f_mcu_temperature, f_magnetometer_temperature, f_redundant_magnetometer_temperature }
  280. -- local subtree = tree:add(adcs_protocol, buffer(),"ADCS queue id 4")
  281. for i = 0, num_of_instance - 1 do
  282. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  283. subtree:add(f_operation_status, buffer(offset, 1):le_uint()) -- 1 bytes for Operation Status (UINT)
  284. offset = offset + 1
  285. subtree:add(f_epoch_time, buffer(offset, 4):le_uint()) -- 4 bytes for Epoch Time (UINT)
  286. offset = offset + 4
  287. -- Extract raw values for the temperatures (2 bytes each for INT)
  288. local mcu_temp = buffer(offset, 2):le_uint() * 0.01
  289. offset = offset + 2
  290. local magnetometer_temp = buffer(offset, 2):le_uint() * 0.01
  291. offset = offset + 2
  292. local redundant_magnetometer_temp = buffer(offset, 2):le_uint() * 0.01
  293. offset = offset + 2
  294. -- Add the temperature values to the tree with scaling applied
  295. subtree:add(f_mcu_temperature, mcu_temp)
  296. subtree:add(f_magnetometer_temperature, magnetometer_temp)
  297. subtree:add(f_redundant_magnetometer_temperature, redundant_magnetometer_temp)
  298. end
  299. end
  300. function adcs_dissector_5(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  301. local f_operation_status = ProtoField.uint8("adcs_protocol.operation_status", "Operation Status", base.DEC)
  302. local f_epoch_time = ProtoField.uint32("adcs_protocol.epoch_time", "Epoch Time", base.DEC)
  303. local f_raw_mag_x = ProtoField.uint16("adcs_protocol.raw_mag_x", "X Rate Sensor Temperature ", base.DEC)
  304. local f_raw_mag_y = ProtoField.uint16("adcs_protocol.raw_mag_y", "Y Rate Sensor Temperature ", base.DEC)
  305. local f_raw_mag_z = ProtoField.uint16("adcs_protocol.raw_mag_z", "Z Rate Sensor Temperature ", base.DEC)
  306. -- Add the fields to the protocol
  307. adcs_protocol.fields = { f_operation_status, f_epoch_time, f_raw_mag_x, f_raw_mag_y, f_raw_mag_z }
  308. --local subtree = tree:add(adcs_protocol, buffer(),"ADCS queue id 5")
  309. for i = 0, num_of_instance - 1 do
  310. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  311. -- Operation Status (1 bytes, unsigned)
  312. subtree:add(f_operation_status, buffer(offset, 1):le_uint())
  313. offset = offset + 1
  314. -- Epoch Time (4 bytes, unsigned)
  315. subtree:add(f_epoch_time, buffer(offset, 4):le_uint())
  316. offset = offset + 4
  317. -- Raw Magnetometer X (2 bytes, signed)
  318. local raw_mag_x = buffer(offset, 2):le_int()
  319. subtree:add(f_raw_mag_x, raw_mag_x)
  320. offset = offset + 2
  321. -- Raw Magnetometer Y (4 bytes, signed)
  322. local raw_mag_y = buffer(offset, 2):le_int()
  323. subtree:add(f_raw_mag_y, raw_mag_y)
  324. offset = offset + 2
  325. -- Raw Magnetometer Z (4 bytes, signed)
  326. local raw_mag_z = buffer(offset, 2):le_int()
  327. subtree:add(f_raw_mag_z, raw_mag_z)
  328. offset = offset + 2
  329. end
  330. end
  331. function adcs_dissector_6(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  332. local f_operation_status = ProtoField.uint8("adcs_protocol.operation_status", "Operation Status", base.HEX)
  333. local f_epoch_time = ProtoField.uint32("adcs_protocol.epoch_time", "Epoch Time", base.DEC)
  334. local f_attitude_estimation_mode = ProtoField.uint8("adcs_protocol.attitude_estimation_mode", "Attitude Estimation Mode", base.DEC)
  335. local f_control_mode = ProtoField.uint8("adcs_protocol.control_mode", "Control Mode", base.DEC)
  336. local f_adcs_run_mode = ProtoField.uint8("adcs_protocol.adcs_run_mode", "ADCS Run Mode", base.DEC)
  337. local f_asgp4_mode = ProtoField.uint8("adcs_protocol.asgp4_mode", "ASGP4 Mode", base.DEC)
  338. -- Define boolean fields for enabled flags
  339. local f_cube_control_signal_enabled = ProtoField.bool("adcs_protocol.cube_control_signal_enabled", "Cube Control Signal Enabled")
  340. local f_cube_control_motor_enabled = ProtoField.bool("adcs_protocol.cube_control_motor_enabled", "Cube Control Motor Enabled")
  341. local f_cubesense1_enabled = ProtoField.bool("adcs_protocol.cubesense1_enabled", "Cubesense1 Enabled")
  342. local f_cubesense2_enabled = ProtoField.bool("adcs_protocol.cubesense2_enabled", "Cubesense2 Enabled")
  343. local f_cube_wheel1_enabled = ProtoField.bool("adcs_protocol.cube_wheel1_enabled", "Cube Wheel 1 Enabled")
  344. local f_cube_wheel2_enabled = ProtoField.bool("adcs_protocol.cube_wheel2_enabled", "Cube Wheel 2 Enabled")
  345. local f_cube_wheel3_enabled = ProtoField.bool("adcs_protocol.cube_wheel3_enabled", "Cube Wheel 3 Enabled")
  346. local f_cube_star_enabled = ProtoField.bool("adcs_protocol.cube_star_enabled", "Cube Star Enabled")
  347. local f_gps_receiver_enabled = ProtoField.bool("adcs_protocol.gps_receiver_enabled", "GPS Receiver Enabled")
  348. local f_gps_lna_power_enabled = ProtoField.bool("adcs_protocol.gps_lna_power_enabled", "GPS LNA Power Enabled")
  349. local f_motor_driver_enabled = ProtoField.bool("adcs_protocol.motor_driver_enabled", "Motor Driver Enabled")
  350. local f_sun_is_above_local_horizon = ProtoField.bool("adcs_protocol.sun_is_above_local_horizon", "Sun is Above Local Horizon")
  351. -- Communication error fields
  352. local f_cubesense1_comm_error = ProtoField.bool("adcs_protocol.cubesense1_comm_error", "Cubesense1 Communications Error")
  353. local f_cubesense2_comm_error = ProtoField.bool("adcs_protocol.cubesense2_comm_error", "Cubesense2 Communications Error")
  354. local f_cubcontrol_signal_comm_error = ProtoField.bool("adcs_protocol.cubcontrol_signal_comm_error", "CubeControl Signal Communications Error")
  355. local f_cubcontrol_motor_comm_error = ProtoField.bool("adcs_protocol.cubcontrol_motor_comm_error", "CubeControl Motor Communications Error")
  356. local f_cubewheel1_comm_error = ProtoField.bool("adcs_protocol.cubewheel1_comm_error", "Cube Wheel 1 Communications Error")
  357. local f_cubewheel2_comm_error = ProtoField.bool("adcs_protocol.cubewheel2_comm_error", "Cube Wheel 2 Communications Error")
  358. local f_cubewheel3_comm_error = ProtoField.bool("adcs_protocol.cubewheel2_comm_error", "Cube Wheel 3 Communications Error")
  359. local f_cubestar_comm_error = ProtoField.bool("adcs_protocol.cubewheel2_comm_error", "Cube star communications Error")
  360. local f_magnetometer_range_error = ProtoField.bool("adcs_protocol.magnetometer_range_error", "Magnetometer Range Error")
  361. local f_cam1_sram_overcurrent = ProtoField.bool("adcs_protocol.cam1_sram_overcurrent", "Cam1 SRAM Overcurrent Detected")
  362. local f_cam1_3v3_overcurrent = ProtoField.bool("adcs_protocol.cam1_3v3_overcurrent", "Cam1 3v3 Overcurrent Detected")
  363. local f_cam1_sensor_busy = ProtoField.bool("adcs_protocol.cam1_sensor_busy", "Cam1 Sensor Busy Error")
  364. local f_cam1_sensor_detection_error = ProtoField.bool("adcs_protocol.cam1_sensor_detection_error", "Cam1 Sensor Detection Error")
  365. local f_sun_sensor_range_error = ProtoField.bool("adcs_protocol.sun_sensor_range_error", "Sun Sensor Range Error")
  366. local f_cam2_sram_overcurrent = ProtoField.bool("adcs_protocol.cam2_sram_overcurrent", "Cam2 SRAM Overcurrent Detected")
  367. local f_cam2_3v3_overcurrent = ProtoField.bool("adcs_protocol.cam2_3v3_overcurrent", "Cam2 3v3 Overcurrent Detected")
  368. local f_cam2_sensor_busy = ProtoField.bool("adcs_protocol.cam2_sensor_busy", "Cam2 Sensor Busy Error")
  369. local f_cam2_sensor_detection_error = ProtoField.bool("adcs_protocol.cam2_sensor_detection_error", "Cam2 Sensor Detection Error")
  370. local f_nadir_sensor_range_error = ProtoField.bool("adcs_protocol.nadir_sensor_range_error", "Nadir Sensor Range Error")
  371. local f_rate_sensor_range_error = ProtoField.bool("adcs_protocol.rate_sensor_range_error", "Rate Sensor Range Error")
  372. local f_wheel_speed_range_error = ProtoField.bool("adcs_protocol.wheel_speed_range_error", "Wheel Speed Range Error")
  373. local f_coarse_sun_sensor_error = ProtoField.bool("adcs_protocol.coarse_sun_sensor_error", "Coarse Sun Sensor Error")
  374. local f_star_tracker_match_error = ProtoField.bool("adcs_protocol.star_tracker_match_error", "Star Tracker Match Error")
  375. local f_star_tracker_overcurrent = ProtoField.bool("adcs_protocol.star_tracker_overcurrent", "Star Tracker Overcurrent Detected")
  376. local f_orbit_parameters_invalid = ProtoField.bool("adcs_protocol.orbit_parameters_invalid", "Orbit Parameters are Invalid")
  377. local f_configuration_invalid = ProtoField.bool("adcs_protocol.configuration_invalid", "Configuration is Invalid")
  378. local f_control_mode_change_not_allowed = ProtoField.bool("adcs_protocol.control_mode_change_not_allowed", "Control Mode Change is not allowed")
  379. local f_estimator_change_not_allowed = ProtoField.bool("adcs_protocol.estimator_change_not_allowed", "Estimator Change is not allowed")
  380. -- Define Magnetometer Sampling Mode field (2 bytes)
  381. local f_magnetometer_sampling_mode = ProtoField.uint8("adcs_protocol.magnetometer_sampling_mode", "Magnetometer Sampling Mode", base.DEC)
  382. -- Define runtime error fields
  383. local f_cubesense1_runtime_error = ProtoField.bool("adcs_protocol.cubesense1_runtime_error", "CubeSense1 Runtime Error")
  384. local f_cubesense2_runtime_error = ProtoField.bool("adcs_protocol.cubesense2_runtime_error", "CubeSense2 Runtime Error")
  385. local f_cubecontrol_signal_runtime_error = ProtoField.bool("adcs_protocol.cubecontrol_signal_runtime_error", "CubeControl Signal Runtime Error")
  386. local f_cubecontrol_motor_runtime_error = ProtoField.bool("adcs_protocol.cubecontrol_motor_runtime_error", "CubeControl Motor Runtime Error")
  387. local f_cubewheel1_runtime_error = ProtoField.bool("adcs_protocol.cubewheel1_runtime_error", "CubeWheel1 Runtime Error")
  388. local f_a = ProtoField.bool("adcs_protocol.cubewheel1_runtime_error", "CubeWheel1 Runtime Error")
  389. local f_b = ProtoField.bool("adcs_protocol.cubewheel1_runtime_error", "CubeWheel1 Runtime Error")
  390. local f_cubewheel2_runtime_error = ProtoField.bool("adcs_protocol.cubewheel2_runtime_error", "CubeWheel2 Runtime Error")
  391. local f_cubewheel3_runtime_error = ProtoField.bool("adcs_protocol.cubewheel3_runtime_error", "CubeWheel3 Runtime Error")
  392. local f_cubestar_runtime_error = ProtoField.bool("adcs_protocol.cubestar_runtime_error", "CubeStar Runtime Error")
  393. local f_magnetometer_error = ProtoField.bool("adcs_protocol.magnetometer_error", "Magnetometer Error")
  394. local f_rate_sensor_failure = ProtoField.bool("adcs_protocol.rate_sensor_failure", "Rate Sensor Failure")
  395. -- Add all fields to the protocol
  396. adcs_protocol.fields = {
  397. f_operation_status,
  398. f_epoch_time,
  399. f_attitude_estimation_mode,
  400. f_control_mode,
  401. f_adcs_run_mode,
  402. f_asgp4_mode,
  403. f_cube_control_signal_enabled,
  404. f_cube_control_motor_enabled,
  405. f_cubesense1_enabled,
  406. f_cubesense2_enabled,
  407. f_cube_wheel1_enabled,
  408. f_cube_wheel2_enabled,
  409. f_cube_wheel3_enabled,
  410. f_cube_star_enabled,
  411. f_gps_receiver_enabled,
  412. f_gps_lna_power_enabled,
  413. f_motor_driver_enabled,
  414. f_sun_is_above_local_horizon,
  415. f_cubesense1_comm_error,
  416. f_cubesense2_comm_error,
  417. f_cubcontrol_signal_comm_error,
  418. f_cubcontrol_motor_comm_error,
  419. f_cubewheel1_comm_error,
  420. f_cubewheel2_comm_error,
  421. f_cubewheel3_comm_error,
  422. f_cubestar_comm_error,
  423. f_magnetometer_range_error,
  424. f_cam1_sram_overcurrent,
  425. f_cam1_3v3_overcurrent,
  426. f_cam1_sensor_busy,
  427. f_cam1_sensor_detection_error,
  428. f_sun_sensor_range_error,
  429. f_cam2_sram_overcurrent,
  430. f_cam2_3v3_overcurrent,
  431. f_cam2_sensor_busy,
  432. f_cam2_sensor_detection_error,
  433. f_nadir_sensor_range_error,
  434. f_rate_sensor_range_error,
  435. f_wheel_speed_range_error,
  436. f_coarse_sun_sensor_error,
  437. f_star_tracker_match_error,
  438. f_star_tracker_overcurrent,
  439. f_orbit_parameters_invalid,
  440. f_a,
  441. f_b,
  442. f_configuration_invalid,
  443. f_control_mode_change_not_allowed,
  444. f_estimator_change_not_allowed,
  445. f_magnetometer_sampling_mode,
  446. f_cubesense1_runtime_error,
  447. f_cubesense2_runtime_error,
  448. f_cubecontrol_signal_runtime_error,
  449. f_cubecontrol_motor_runtime_error,
  450. f_cubewheel1_runtime_error,
  451. f_cubewheel2_runtime_error,
  452. f_cubewheel3_runtime_error,
  453. f_cubestar_runtime_error,
  454. f_magnetometer_error,
  455. f_rate_sensor_failure
  456. }
  457. --local subtree = tree:add(adcs_protocol, buffer(),"ADCS queue id 6")
  458. for i = 0, num_of_instance - 1 do
  459. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  460. subtree:add(f_operation_status, buffer(offset, 1):le_uint())
  461. offset = offset + 1
  462. subtree:add(f_epoch_time, buffer(offset, 4):le_uint())
  463. offset = offset + 4
  464. -- Parse Attitude Estimation Mode (8 bits)
  465. subtree:add(f_attitude_estimation_mode, buffer(offset, 1):le_uint())
  466. offset = offset + 1
  467. -- Parse Control Mode (8 bits)
  468. subtree:add(f_control_mode, buffer(offset, 1):le_uint())
  469. offset = offset + 1
  470. -- Parse ADCS Run Mode (2 bits / 2 bytes)
  471. local a=buffer(offset, 1):le_uint()
  472. subtree:add(f_adcs_run_mode, a & 0x03)
  473. --offset = offset + 2
  474. -- Parse ASGP4 Mode (2 bits / 2 bytes)
  475. subtree:add(f_asgp4_mode, (a >> 2) & 0x03)
  476. subtree:add(f_cube_control_signal_enabled, (a >> 4) & 0x01)
  477. subtree:add(f_cube_control_motor_enabled,(a >> 5) & 0x01 )
  478. subtree:add(f_cubesense1_enabled,(a >> 6) & 0x01 )
  479. subtree:add(f_cubesense2_enabled,(a >> 7) & 0x01 )
  480. offset = offset + 1
  481. -- Parse CubeWheel Enabled Flags
  482. a=buffer(offset, 1):le_uint()
  483. subtree:add(f_cube_wheel1_enabled, (a >> 0) & 0x01)
  484. --offset = offset + 1
  485. a=buffer(offset, 1):le_uint()
  486. subtree:add(f_cube_wheel2_enabled, (a >> 1) & 0x01)
  487. a=buffer(offset, 1):le_uint()
  488. subtree:add(f_cube_wheel3_enabled, (a >> 2) & 0x01)
  489. --offset = offset + 1
  490. subtree:add(f_cube_star_enabled, (a >> 3) & 0x01)
  491. --offset = offset + 1
  492. -- Parse GPS and Motor Driver enabled flags
  493. subtree:add(f_gps_receiver_enabled, (a >> 4) & 0x01)
  494. --offset = offset + 1
  495. -- Continue adding each field to the subtree with the appropriate offsets and bitfields
  496. -- Define additional boolean fields for enabled flags and errors
  497. subtree:add(f_gps_lna_power_enabled, (a >> 5) & 0x01) -- GPS LNA Power Enabled
  498. subtree:add(f_motor_driver_enabled, (a >> 6) & 0x01) -- Motor Driver Enabled
  499. subtree:add(f_sun_is_above_local_horizon, (a >> 7) & 0x01) -- Sun is Above Local Horizon
  500. offset = offset + 1
  501. a = buffer(offset, 1):le_uint()
  502. -- Communication error flags
  503. subtree:add(f_cubesense1_comm_error, (a >> 0) & 0x01) -- Cubesense1 Communications Error
  504. subtree:add(f_cubesense2_comm_error, (a >> 1) & 0x01) -- Cubesense2 Communications Error
  505. a=buffer(offset, 1):le_uint()
  506. subtree:add(f_cubcontrol_signal_comm_error, (a >> 2) & 0x01) -- CubeControl Signal Communications Error
  507. subtree:add(f_cubcontrol_motor_comm_error, (a >> 3) & 0x01) -- CubeControl Motor Communications Error
  508. subtree:add(f_cubewheel1_comm_error, (a >> 4) & 0x01) -- Cube Wheel1 Communications Error
  509. subtree:add(f_cubewheel2_comm_error, (a >> 5) & 0x01) -- Cube Wheel2 Communications Error
  510. subtree:add(f_cubewheel3_comm_error, (a >> 6) & 0x01)
  511. subtree:add(f_cubestar_comm_error, (a >> 7) & 0x01)
  512. offset = offset + 1
  513. a=buffer(offset, 1):le_uint()
  514. subtree:add(f_magnetometer_range_error, (a >> 0) & 0x01) -- Magnetometer Range Error
  515. --offset = offset + 1
  516. -- Sensor errors
  517. subtree:add(f_cam1_sram_overcurrent, (a >> 1) & 0x01) -- Cam1 SRAM Overcurrent Detected
  518. --offset = offset + 1
  519. --offset = offset + 1
  520. --a=buffer(offset,1):le_uint()
  521. subtree:add(f_cam1_3v3_overcurrent, (a >> 2) & 0x01) -- Cam1 3v3 Overcurrent Detected
  522. subtree:add(f_cam1_sensor_busy, (a >> 3) & 0x01) -- Cam1 Sensor Busy Error
  523. subtree:add(f_cam1_sensor_detection_error, (a >> 4) & 0x01 ) -- Cam1 Sensor Detection Error
  524. subtree:add(f_sun_sensor_range_error, (a >> 5) & 0x01) -- Sun Sensor Range Error
  525. subtree:add(f_cam2_sram_overcurrent, (a >> 6) & 0x01) -- Cam2 SRAM Overcurrent Detected
  526. subtree:add(f_cam2_3v3_overcurrent, (a >> 7) & 0x01) -- Cam2 3v3 Overcurrent Detected
  527. offset=offset+1
  528. local data=buffer(offset, 1):le_uint()
  529. subtree:add(f_cam2_sensor_busy, (data >> 0) & 0x01) -- Cam2 Sensor Busy Error
  530. --offset = offset + 1
  531. subtree:add(f_cam2_sensor_detection_error, (data >> 1) & 0x01) -- Cam2 Sensor Detection Error
  532. --offset = offset + 1
  533. --local data = buffer(offset, 1):le_uint()
  534. subtree:add(f_nadir_sensor_range_error, (data >> 2) & 0x01) -- Nadir Sensor Range Error
  535. subtree:add(f_rate_sensor_range_error, (data >> 3) & 0x01) -- Rate Sensor Range Error
  536. subtree:add(f_wheel_speed_range_error,(data >> 4) & 0x01) -- Wheel Speed Range Error
  537. -- Error flags for sensors and system issues
  538. subtree:add(f_coarse_sun_sensor_error,(data >> 5) & 0x01) -- Coarse Sun Sensor Error
  539. subtree:add(f_star_tracker_match_error, (data >> 6) & 0x01) -- Star Tracker Match Error
  540. subtree:add(f_star_tracker_overcurrent, (data >> 7) & 0x01) -- Star Tracker Overcurrent Detected
  541. offset = offset + 1
  542. data = buffer(offset, 1):le_uint()
  543. subtree:add(f_orbit_parameters_invalid, (data >> 0) & 0x01) -- Orbit Parameters are Invalid
  544. subtree:add(f_configuration_invalid,(data >> 1) & 0x01) -- Configuration is Invalid
  545. --offset = offset + 1
  546. --data = buffer(offset, 1):le_uint()
  547. subtree:add(f_control_mode_change_not_allowed, (data >> 2) & 0x01) -- Control Mode Change is Not Allowed
  548. subtree:add(f_estimator_change_not_allowed, (data >> 3) & 0x01) -- Estimator Change is Not Allowed
  549. -- Magnetometer Sampling Mode (2 bits)
  550. subtree:add(f_magnetometer_sampling_mode, (data >> 4) & 0x03) -- Current Magnetometer Sampling Mode
  551. -- Runtime error flags for sensors and systems
  552. subtree:add(f_a, (data >> 6 ) & 0x01) -- CubeSense1 Runtime Error
  553. subtree:add(f_b, (data >> 7) & 0x01) -- CubeSense2 Runtime Error
  554. offset=offset+1
  555. data = buffer(offset, 1):le_uint()
  556. subtree:add(f_cubesense1_runtime_error, (data >> 0) & 0x01) -- CubeSense1 Runtime Error
  557. subtree:add(f_cubesense2_runtime_error, (data >> 1) & 0x01) -- CubeSense2 Runtime Error
  558. subtree:add(f_cubecontrol_signal_runtime_error, (data >> 2) & 0x01) -- CubeControl Signal Runtime Error
  559. subtree:add(f_cubecontrol_motor_runtime_error, (data >> 3) & 0x01) -- CubeControl Motor Runtime Error
  560. subtree:add(f_cubewheel1_runtime_error,(data >> 4) & 0x01) -- CubeWheel1 Runtime Error
  561. subtree:add(f_cubewheel2_runtime_error, (data >> 5) & 0x01) -- CubeWheel2 Runtime Error
  562. --offset = offset + 1
  563. --data = buffer(offset, 1):le_uint()
  564. subtree:add(f_cubewheel3_runtime_error, (data >> 6) & 0x01) -- CubeWheel3 Runtime Error
  565. subtree:add(f_cubestar_runtime_error, (data >> 7) & 0x01) -- CubeStar Runtime Error
  566. offset=offset+1
  567. data = buffer(offset, 1):le_uint()
  568. -- Magnetometer and sensor errors
  569. subtree:add(f_magnetometer_error, (data >> 0) & 0x01) -- Magnetometer Error
  570. subtree:add(f_rate_sensor_failure, (data >> 1) & 0x01) -- Rate Sensor Failure
  571. offset = offset + 1
  572. end
  573. end
  574. function adcs_dissector_7(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  575. local f_operation_status = ProtoField.uint8("adcs_protocol.operation_status", "Operation Status", base.DEC)
  576. local f_epoch_time = ProtoField.uint32("adcs_protocol.epoch_time", "Epoch Time", base.DEC)
  577. local f_x_sun_vector = ProtoField.float("adcs_protocol.x_sun_vector", "X Sun Vector", base.DEC)
  578. local f_y_sun_vector = ProtoField.float("adcs_protocol.y_sun_vector", "Y Sun Vector", base.DEC)
  579. local f_z_sun_vector = ProtoField.float("adcs_protocol.z_sun_vector", "Z Sun Vector", base.DEC)
  580. -- Register fields to the protocol
  581. adcs_protocol.fields = { f_operation_status, f_epoch_time, f_x_sun_vector, f_y_sun_vector, f_z_sun_vector }
  582. --local subtree = tree:add(adcs_protocol, buffer(),"ADCS queue id 7")
  583. for i = 0, num_of_instance - 1 do
  584. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  585. subtree:add(f_operation_status, buffer(offset, 1):le_uint()) -- 1 byte for Operation Status
  586. offset = offset + 1 -- Update offset
  587. -- Epoch Time (4 bytes, UINT)
  588. subtree:add(f_epoch_time, buffer(offset, 4):le_uint()) -- 4 bytes for Epoch Time
  589. offset = offset + 4 -- Update offset
  590. -- X-axis Sun Vector (2 bytes, INT) with scaling factor (RAWVAL * 0.001)
  591. local x_sun_vector_raw = buffer(offset, 2):le_int() -- Read the 2-byte INT value
  592. local x_sun_vector = x_sun_vector_raw * 0.001 -- Apply scaling factor
  593. subtree:add(f_x_sun_vector, x_sun_vector) -- Add to subtree with scaling
  594. offset = offset + 2 -- Update offset
  595. -- Y-axis Sun Vector (2 bytes, INT) with scaling factor (RAWVAL * 0.001)
  596. local y_sun_vector_raw = buffer(offset, 2):le_int() -- Read the 2-byte INT value
  597. local y_sun_vector = y_sun_vector_raw * 0.001 -- Apply scaling factor
  598. subtree:add(f_y_sun_vector, y_sun_vector) -- Add to subtree with scaling
  599. offset = offset + 2 -- Update offset
  600. -- Z-axis Sun Vector (2 bytes, INT) with scaling factor (RAWVAL * 0.001)
  601. local z_sun_vector_raw = buffer(offset, 2):le_int() -- Read the 2-byte INT value
  602. local z_sun_vector = z_sun_vector_raw * 0.001 -- Apply scaling factor
  603. subtree:add(f_z_sun_vector, z_sun_vector) -- Add to subtree with scaling
  604. offset = offset + 2 -- Update offset
  605. end
  606. end
  607. function adcs_dissector_8(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  608. local f_operation_status = ProtoField.uint8("adcs_protocol.operation_status", "Operation Status", base.DEC)
  609. local f_epoch_time = ProtoField.uint32("adcs_protocol.epoch_time", "Epoch Time", base.DEC)
  610. local f_css_ad_value_1 = ProtoField.uint8("myprotocol.css_ad_value_1", "Raw css 1 ", base.DEC)
  611. local f_css_ad_value_2 = ProtoField.uint8("myprotocol.css_ad_value_2", "Raw css 2", base.DEC)
  612. local f_css_ad_value_3 = ProtoField.uint8("myprotocol.css_ad_value_3", "Raw css 3", base.DEC)
  613. local f_css_ad_value_4 = ProtoField.uint8("myprotocol.css_ad_value_4", "Raw css 4", base.DEC)
  614. local f_css_ad_value_5 = ProtoField.uint8("myprotocol.css_ad_value_5", "Raw css 5", base.DEC)
  615. local f_css_ad_value_6 = ProtoField.uint8("myprotocol.css_ad_value_6", "Raw css 6", base.DEC)
  616. local f_css_ad_value_7 = ProtoField.uint8("myprotocol.css_ad_value_7", "Raw css 7", base.DEC)
  617. local f_css_ad_value_8 = ProtoField.uint8("myprotocol.css_ad_value_8", "Raw css 8", base.DEC)
  618. local f_css_ad_value_9 = ProtoField.uint8("myprotocol.css_ad_value_9", "Raw css 9", base.DEC)
  619. local f_css_ad_value_10 = ProtoField.uint8("myprotocol.css_ad_value_10", "Raw css 10", base.DEC)
  620. adcs_protocol.fields = { f_operation_status,
  621. f_epoch_time, f_css_ad_value_1,
  622. f_css_ad_value_2,
  623. f_css_ad_value_3,
  624. f_css_ad_value_4,
  625. f_css_ad_value_5,
  626. f_css_ad_value_6,
  627. f_css_ad_value_7,
  628. f_css_ad_value_8,
  629. f_css_ad_value_9,
  630. f_css_ad_value_10
  631. }
  632. --local subtree = tree:add(adcs_protocol, buffer(),"ADCS queue id 8")
  633. for i = 0, num_of_instance - 1 do
  634. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  635. subtree:add(f_operation_status, buffer(offset, 1):le_uint()) -- 1 byte for Operation Status
  636. offset = offset + 1 -- Update offset
  637. -- Epoch Time (4 bytes, UINT)
  638. subtree:add(f_epoch_time, buffer(offset, 4):le_uint()) -- 4 bytes for Epoch Time
  639. offset = offset + 4 -- Update offset
  640. -- CSS A/D Values (10 individual uint8 fields)
  641. subtree:add(f_css_ad_value_1, buffer(offset, 1))
  642. offset = offset + 1 -- Update offset
  643. subtree:add(f_css_ad_value_2, buffer(offset, 1))
  644. offset = offset + 1 -- Update offset
  645. subtree:add(f_css_ad_value_3, buffer(offset, 1))
  646. offset = offset + 1 -- Update offset
  647. subtree:add(f_css_ad_value_4, buffer(offset, 1))
  648. offset = offset + 1 -- Update offset
  649. subtree:add(f_css_ad_value_5, buffer(offset, 1))
  650. offset = offset + 1 -- Update offset
  651. subtree:add(f_css_ad_value_6, buffer(offset, 1))
  652. offset = offset + 1 -- Update offset
  653. subtree:add(f_css_ad_value_7, buffer(offset, 1))
  654. offset = offset + 1 -- Update offset
  655. subtree:add(f_css_ad_value_8, buffer(offset, 1))
  656. offset = offset + 1 -- Update offset
  657. subtree:add(f_css_ad_value_9, buffer(offset, 1))
  658. offset = offset + 1 -- Update offset
  659. subtree:add(f_css_ad_value_10, buffer(offset, 1))
  660. offset = offset + 1
  661. end
  662. end
  663. function adcs_dissector_9(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  664. -- Define the fields for the protocol
  665. local f_operation_status = ProtoField.uint8("adcs_protocol.operation_status", "Operation Status", base.DEC)
  666. local f_epoch_time = ProtoField.uint32("adcs_protocol.epoch_time", "Epoch Time", base.DEC)
  667. local f_sun_x = ProtoField.float("adcs_protocol.sun_x", "FSS X axis vector ", base.DEC)
  668. local f_sun_y = ProtoField.float("adcs_protocol.sun_y", "FSS y axis vector", base.DEC)
  669. local f_sun_z = ProtoField.float("adcs_protocol.sun_z", "FSS z axis vector", base.DEC)
  670. adcs_protocol.fields = {
  671. f_operation_status, f_epoch_time,
  672. f_sun_x, f_sun_y, f_sun_z }
  673. --local subtree = tree:add(adcs_protocol, buffer(),"ADCS queue id 9")
  674. for i = 0, num_of_instance - 1 do
  675. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  676. subtree:add(f_operation_status, buffer(offset, 1):le_uint())
  677. offset = offset + 1 -- Update offset
  678. -- Epoch Time (4 bytes, UINT)
  679. subtree:add(f_epoch_time, buffer(offset, 4):le_uint())
  680. offset = offset + 4 -- Update offset
  681. -- Sun X (2 bytes, INT, formatted as RAWVAL * 0.001)
  682. local raw_sun_x = buffer(offset, 2):le_int()
  683. local sun_x = raw_sun_x * 0.001
  684. subtree:add(f_sun_x, sun_x)
  685. offset = offset + 2 -- Update offset
  686. -- Sun Y (2 bytes, INT, formatted as RAWVAL * 0.001)
  687. local raw_sun_y = buffer(offset, 2):le_int()
  688. local sun_y = raw_sun_y * 0.001
  689. subtree:add(f_sun_y, sun_y)
  690. offset = offset + 2 -- Update offset
  691. -- Sun Z (2 bytes, INT, formatted as RAWVAL * 0.001)
  692. local raw_sun_z = buffer(offset, 2):le_int()
  693. local sun_z = raw_sun_z * 0.001
  694. subtree:add(f_sun_z, sun_z)
  695. offset = offset + 2 -- Update offs
  696. end
  697. end
  698. function adcs_dissector_10(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  699. local f_operation_status = ProtoField.uint8("adcs_protocol.operation_status", "Operation Status", base.DEC)
  700. local f_epoch_time = ProtoField.uint32("adcs_protocol.epoch_time", "Epoch Time", base.DEC)
  701. local f_fss_raw_x_angle = ProtoField.int16("adcs_protocol.fss_raw_x_angle", "FSS Raw X Angle", base.DEC)
  702. local f_fss_raw_y_angle = ProtoField.int16("adcs_protocol.fss_raw_y_angle", "FSS Raw Y Angle", base.DEC)
  703. local f_fss_capture_status = ProtoField.uint8("adcs_protocol.fss_capture_status", "FSS Capture Status", base.DEC)
  704. local f_fss_detection_result = ProtoField.uint8("adcs_protocol.fss_detection_result", "FSS Detection Result", base.DEC)
  705. -- Add the protocol fields to the protocol
  706. adcs_protocol.fields = {
  707. f_operation_status,
  708. f_epoch_time,
  709. f_fss_raw_x_angle,
  710. f_fss_raw_y_angle,
  711. f_fss_capture_status,
  712. f_fss_detection_result
  713. }
  714. --local subtree = tree:add(adcs_protocol, buffer(),"ADCS queue id 10")
  715. for i = 0, num_of_instance - 1 do
  716. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  717. subtree:add(f_operation_status, buffer(offset, 1):le_uint())
  718. offset = offset + 1 -- Update offset
  719. -- Epoch Time (4 bytes, UINT)
  720. subtree:add(f_epoch_time, buffer(offset, 4):le_uint())
  721. offset = offset + 4 -- Update offset
  722. -- FSS Raw X Angle (2 bytes, INT)
  723. subtree:add(f_fss_raw_x_angle, buffer(offset, 2):le_int())
  724. offset = offset + 2 -- Update offset
  725. -- FSS Raw Y Angle (2 bytes, INT)
  726. subtree:add(f_fss_raw_y_angle, buffer(offset, 2):le_int())
  727. offset = offset + 2 -- Update offset
  728. -- FSS Capture Status (1 byte, ENUM)
  729. local capture_status = buffer(offset, 1):le_uint()
  730. subtree:add(f_fss_capture_status, capture_status)
  731. --subtree:add_expert_info(PI_INFO, PI_WARN, "FSS Capture Status: " .. capture_status_enum[capture_status] or "Unknown")
  732. offset = offset + 1 -- Update offset
  733. -- FSS Detection Result (1 byte, ENUM)
  734. local detection_result = buffer(offset, 1):le_uint()
  735. subtree:add(f_fss_detection_result, detection_result)
  736. --subtree:add_expert_info(PI_INFO, PI_WARN, "FSS Detection Result: " .. detection_result_enum[detection_result] or "Unknown")
  737. offset = offset + 1 -- Update offset
  738. end
  739. end
  740. function adcs_dissector_11(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  741. local f_operation_status = ProtoField.uint8("adcs_protocol.operation_status", "Operation Status", base.DEC)
  742. local f_epoch_time = ProtoField.uint32("adcs_protocol.epoch_time", "Epoch Time", base.DEC)
  743. local f_x_axis_nadir_vector = ProtoField.int16("adcs_protocol.x_axis_nadir_vector", "X axis Nadir Vector ", base.DEC)
  744. local f_y_axis_nadir_vector = ProtoField.int16("adcs_protocol.y_axis_nadir_vector", "Y axis Nadir Vector ", base.DEC)
  745. local f_z_axis_nadir_vector = ProtoField.int16("adcs_protocol.z_axis_nadir_vector", "Z axis Nadir Vector ", base.DEC)
  746. -- Add the protocol fields to the protocol
  747. adcs_protocol.fields = {
  748. f_operation_status,
  749. f_epoch_time,
  750. f_x_axis_nadir_vector,
  751. f_y_axis_nadir_vector,
  752. f_z_axis_nadir_vector
  753. }
  754. --local subtree = tree:add(adcs_protocol, buffer(),"ADCS queue id 11")
  755. for i = 0, num_of_instance - 1 do
  756. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  757. subtree:add(f_operation_status, buffer(offset, 1):le_uint())
  758. offset = offset + 1 -- Update offset
  759. -- Epoch Time (4 bytes, UINT)
  760. subtree:add(f_epoch_time, buffer(offset, 4):le_uint())
  761. offset = offset + 4 -- Update offset
  762. -- X axis Nadir Vector (2 bytes, INT) *0.001 (formatted value)
  763. local x_axis_raw = buffer(offset, 2):le_int()
  764. local x_axis_nadir = x_axis_raw * 0.001 -- Apply the formatting to the raw value
  765. subtree:add(f_x_axis_nadir_vector, x_axis_raw)
  766. --subtree:add(PI_INFO, PI_WARN, string.format("X axis Nadir vector: %.3f", x_axis_nadir))
  767. offset = offset + 2 -- Update offset
  768. -- Y axis Nadir Vector (2 bytes, INT) *0.001 (formatted value)
  769. local y_axis_raw = buffer(offset, 2):le_int()
  770. local y_axis_nadir = y_axis_raw * 0.001 -- Apply the formatting to the raw value
  771. subtree:add(f_y_axis_nadir_vector, y_axis_raw)
  772. --subtree:add(PI_INFO, PI_WARN, string.format("Y axis Nadir vector: %.3f", y_axis_nadir))
  773. offset = offset + 2 -- Update offset
  774. -- Z axis Nadir Vector (2 bytes, INT) *0.001 (formatted value)
  775. local z_axis_raw = buffer(offset, 2):le_int()
  776. local z_axis_nadir = z_axis_raw * 0.001 -- Apply the formatting to the raw value
  777. subtree:add(f_z_axis_nadir_vector, z_axis_raw)
  778. --subtree:add(PI_INFO, PI_WARN, string.format("Z axis Nadir vector: %.3f", z_axis_nadir))
  779. offset = offset + 2 -- Update offset
  780. end
  781. end
  782. function adcs_dissector_12(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  783. local f_operation_status = ProtoField.uint8("adcs_protocol.operation_status", "Operation Status", base.DEC)
  784. local f_epoch_time = ProtoField.uint32("adcs_protocol.epoch_time", "Epoch Time", base.DEC)
  785. local f_nadir_x_angle = ProtoField.int16("adcs_protocol.nadir_x_angle", "Nadir Sensor Raw X Angle", base.DEC)
  786. local f_nadir_y_angle = ProtoField.int16("adcs_protocol.nadir_y_angle", "Nadir Sensor Raw Y Angle", base.DEC)
  787. local f_nadir_capture_status = ProtoField.uint8("adcs_protocol.nadir_capture_status", "Nadir Sensor Capture Status", base.DEC)
  788. local f_nadir_detection_result = ProtoField.uint8("adcs_protocol.nadir_detection_result", "Nadir Sensor Detection Result", base.DEC)
  789. -- Add the protocol fields to the protocol
  790. adcs_protocol.fields = {
  791. f_operation_status,
  792. f_epoch_time,
  793. f_nadir_x_angle,
  794. f_nadir_y_angle,
  795. f_nadir_capture_status,
  796. f_nadir_detection_result
  797. }
  798. --local subtree = tree:add(adcs_protocol, buffer(),"ADCS queue id 12")
  799. for i = 0, num_of_instance - 1 do
  800. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  801. subtree:add(f_operation_status, buffer(offset, 1):le_uint())
  802. offset = offset + 1 -- Update offset
  803. -- Epoch Time (4 bytes, UINT)
  804. subtree:add(f_epoch_time, buffer(offset, 4):le_uint())
  805. offset = offset + 4 -- Update offset
  806. -- Nadir Sensor Raw X Angle (2 bytes, INT)
  807. local x_raw = buffer(offset, 2):le_int()
  808. subtree:add(f_nadir_x_angle, x_raw)
  809. offset = offset + 2 -- Update offset
  810. -- Nadir Sensor Raw Y Angle (2 bytes, INT)
  811. local y_raw = buffer(offset, 2):le_int()
  812. subtree:add(f_nadir_y_angle, y_raw)
  813. offset = offset + 2 -- Update offset
  814. -- Nadir Sensor Capture Status (1 byte, ENUM)
  815. local capture_status = buffer(offset, 1):le_uint()
  816. subtree:add(f_nadir_capture_status, capture_status)
  817. offset = offset + 1 -- Update offset
  818. -- Nadir Sensor Detection Result (1 byte, ENUM)
  819. local detection_result = buffer(offset, 1):le_uint()
  820. subtree:add(f_nadir_detection_result, detection_result)
  821. offset = offset + 1
  822. end
  823. end
  824. function adcs_dissector_13(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  825. local f_operation_status = ProtoField.uint8("magnetic_field_protocol.operation_status", "Operation Status", base.DEC)
  826. local f_epoch_time = ProtoField.uint32("magnetic_field_protocol.epoch_time", "Epoch Time", base.DEC)
  827. local f_magnetic_field_x = ProtoField.float("adcs_protocol.magnetic_field_x", "X Axis Magnetic Field Vector", base.DEC)
  828. local f_magnetic_field_y = ProtoField.float("adcs_protocol.magnetic_field_y", "Y Axis Magnetic Field Vector", base.DEC)
  829. local f_magnetic_field_z = ProtoField.float("adcs_protocol.magnetic_field_z", "Z Axis Magnetic Field Vector", base.DEC)
  830. -- Add the protocol fields to the protocol
  831. adcs_protocol.fields = {
  832. f_operation_status,
  833. f_epoch_time,
  834. f_magnetic_field_x,
  835. f_magnetic_field_y,
  836. f_magnetic_field_z
  837. }
  838. --local subtree = tree:add(adcs_protocol, buffer(),"ADCS queue id 13")
  839. for i = 0, num_of_instance - 1 do
  840. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  841. subtree:add(f_operation_status, buffer(offset, 1):le_uint())
  842. offset = offset + 1 -- Update offset
  843. -- Epoch Time (4 bytes, UINT)
  844. subtree:add(f_epoch_time, buffer(offset, 4):le_uint())
  845. offset = offset + 4 -- Update offset
  846. -- X Axis Magnetic Field Vector (2 bytes, INT)
  847. local x_field = buffer(offset, 2):le_int() -- Apply the scaling factor (RAWVAL * 0.01)
  848. local x_field1 = x_field * 0.01
  849. subtree:add(f_magnetic_field_x, x_field1)
  850. offset = offset + 2 -- Update offset
  851. -- Y Axis Magnetic Field Vector (2 bytes, INT)
  852. local y_field = buffer(offset, 2):le_int() -- Apply the scaling factor (RAWVAL * 0.01)
  853. local y_field1 = y_field * 0.01
  854. subtree:add(f_magnetic_field_y, y_field1)
  855. offset = offset + 2 -- Update offset
  856. -- Z Axis Magnetic Field Vector (2 bytes, INT)
  857. local z_field = buffer(offset, 2):le_int() -- Apply the scaling factor (RAWVAL * 0.01)
  858. local z_field1 = y_field * 0.01
  859. subtree:add(f_magnetic_field_z, z_field1)
  860. offset = offset + 2 -- Update offset
  861. end
  862. end
  863. function adcs_dissector_32(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  864. -- Define ProtoFields for each field in the structure
  865. local f_op_status = ProtoField.uint8("OperationData.op_status", "Operation Status", base.DEC)
  866. local f_epoch_time = ProtoField.uint32("OperationData.epoch_time", "Epoch Time", base.DEC)
  867. local f_eci_x_velocity = ProtoField.int16("OperationData.eci_x_velocity", "ECI Referenced X Velocity", base.DEC)
  868. local f_eci_y_velocity = ProtoField.int16("OperationData.eci_y_velocity", "ECI Referenced Y Velocity", base.DEC)
  869. local f_eci_z_velocity = ProtoField.int16("OperationData.eci_z_velocity", "ECI Referenced Z Velocity", base.DEC)
  870. -- Add the fields to the protocol
  871. adcs_protocol.fields = {
  872. f_op_status, f_epoch_time, f_eci_x_velocity, f_eci_y_velocity, f_eci_z_velocity
  873. }
  874. for i = 1, num_of_instance do
  875. -- Add the operation data subtree
  876. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  877. -- dissect operation status (1 byte, UINT)
  878. local op_status = buffer(offset, 1):le_uint()
  879. subtree:add(f_op_status, op_status)
  880. offset = offset + 1
  881. -- dissect epoch time (4 bytes, UINT)
  882. local epoch_time = buffer(offset, 4):le_uint()
  883. subtree:add(f_epoch_time, epoch_time)
  884. offset = offset + 4
  885. -- dissect ECI X velocity (2 bytes, INT)
  886. local eci_x_velocity = buffer(offset, 2):le_int()
  887. subtree:add(f_eci_x_velocity, eci_x_velocity)
  888. offset = offset + 2
  889. -- dissect ECI Y velocity (2 bytes, INT)
  890. local eci_y_velocity = buffer(offset, 2):le_int()
  891. subtree:add(f_eci_y_velocity, eci_y_velocity)
  892. offset = offset + 2
  893. -- dissect ECI Z velocity (2 bytes, INT)
  894. local eci_z_velocity = buffer(offset, 2):le_int()
  895. subtree:add(f_eci_z_velocity, eci_z_velocity)
  896. offset = offset + 2
  897. end
  898. end
  899. --------------------------------------------------------------------------------------------------------------------------------------
  900. -- Define the dissector function for the Nadir Sensor Data
  901. -------------------------------------------------------------------------------------------------------------------------
  902. ---------------------------------------------------------------------------------------------
  903. --
  904. ----------------------------------------------------------------------------------------------------------------
  905. function adcs_dissector_31(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  906. -- Define ProtoFields for each field in the structure
  907. local f_op_status = ProtoField.uint8("OperationCoordinates.op_status", "Operation Status", base.DEC)
  908. local f_epoch_time = ProtoField.uint32("OperationCoordinates.epoch_time", "Epoch Time", base.DEC)
  909. local f_eci_x_coord = ProtoField.int16("OperationCoordinates.eci_x_coord", "ECI Referenced X Coordinate", base.DEC)
  910. local f_eci_y_coord = ProtoField.int16("OperationCoordinates.eci_y_coord", "ECI Referenced Y Coordinate", base.DEC)
  911. local f_eci_z_coord = ProtoField.int16("OperationCoordinates.eci_z_coord", "ECI Referenced Z Coordinate", base.DEC)
  912. -- Add the fields to the protocol
  913. adcs_protocol.fields = {
  914. f_op_status, f_epoch_time, f_eci_x_coord, f_eci_y_coord, f_eci_z_coord
  915. }
  916. for i = 1, num_of_instance do
  917. -- Add the operation data coordinates subtree
  918. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  919. -- dissect operation status (1 byte, UINT)
  920. local op_status = buffer(offset, 1):le_uint()
  921. subtree:add(f_op_status, op_status)
  922. offset = offset + 1
  923. -- dissect epoch time (4 bytes, UINT)
  924. local epoch_time = buffer(offset, 4):le_uint()
  925. subtree:add(f_epoch_time, epoch_time)
  926. offset = offset + 4
  927. -- dissect ECI X coordinate (2 bytes, INT)
  928. local eci_x_coord = buffer(offset, 2):le_int()
  929. subtree:add(f_eci_x_coord, eci_x_coord)
  930. offset = offset + 2
  931. -- dissect ECI Y coordinate (2 bytes, INT)
  932. local eci_y_coord = buffer(offset, 2):le_int()
  933. subtree:add(f_eci_y_coord, eci_y_coord)
  934. offset = offset + 2
  935. -- dissect ECI Z coordinate (2 bytes, INT)
  936. local eci_z_coord = buffer(offset, 2):le_int()
  937. subtree:add(f_eci_z_coord, eci_z_coord)
  938. offset = offset + 2
  939. end
  940. end
  941. -------------------------------------------------------------------------------------------------------------
  942. -- Define the dissector function for the new structure
  943. function adcs_dissector_30(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  944. -- Define ProtoFields for the new structure fields
  945. local f_op_status = ProtoField.uint8("PowerSystemData.op_status", "Operation Status", base.DES)
  946. local f_epoch_time = ProtoField.uint32("PowerSystemData.epoch_time", "Epoch Time", base.DES)
  947. local f_x_coord = ProtoField.int16("PowerSystemData.x_coord", "ECEF X Coordinate", base.DEC)
  948. local f_y_coord = ProtoField.int16("PowerSystemData.y_coord", "ECEF Y Coordinate", base.DEC)
  949. local f_z_coord = ProtoField.int16("PowerSystemData.z_coord", "ECEF Z Coordinate", base.DEC)
  950. -- Add the fields to the protocol
  951. adcs_protocol.fields = {
  952. f_op_status, f_epoch_time, f_x_coord, f_y_coord, f_z_coord
  953. }
  954. -- Loop through the data (data3 could represent the number of iterations or packets to dissect)
  955. for i = 1, num_of_instance do
  956. -- Add the new structure data as a subtree
  957. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  958. -- dissect operation status (1 byte)
  959. local op_status = buffer(offset, 1):le_uint()
  960. subtree:add(f_op_status, op_status)
  961. offset = offset + 1
  962. -- dissect epoch time (4 bytes)
  963. local epoch_time = buffer(offset, 4):le_uint()
  964. subtree:add(f_epoch_time, epoch_time)
  965. offset = offset + 4
  966. -- dissect ECEF X coordinate (2 bytes)
  967. local x_coord = buffer(offset, 2):le_int()
  968. subtree:add(f_x_coord, x_coord)
  969. offset = offset + 2
  970. -- dissect ECEF Y coordinate (2 bytes)
  971. local y_coord = buffer(offset, 2):le_int()
  972. subtree:add(f_y_coord, y_coord)
  973. offset = offset + 2
  974. -- dissect ECEF Z coordinate (2 bytes)
  975. local z_coord = buffer(offset, 2):le_int()
  976. subtree:add(f_z_coord, z_coord)
  977. offset = offset + 2
  978. end
  979. end
  980. ----------------------------------------------------------------------------------------------------------------------------------
  981. -- wrong number 29
  982. -- Define the dissector function for the new structure
  983. function adcs_dissector_22(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  984. -- Define ProtoFields for the new structure fields
  985. local f_op_status = ProtoField.uint8("PowerSystemData.op_status", "Operation Status", base.DES)
  986. local f_epoch_time = ProtoField.uint32("PowerSystemData.epoch_time", "Epoch Time", base.DES)
  987. local f_roll_angle = ProtoField.int16("PowerSystemData.roll_angle", "Commanded Roll Angle (degrees)", base.DEC)
  988. local f_pitch_angle = ProtoField.int16("PowerSystemData.pitch_angle", "Commanded Pitch Angle (degrees)", base.DEC)
  989. local f_yaw_angle = ProtoField.int16("PowerSystemData.yaw_angle", "Commanded Yaw Angle (degrees)", base.DEC)
  990. -- Add the fields to the protocol
  991. adcs_protocol.fields = {
  992. f_op_status, f_epoch_time, f_roll_angle, f_pitch_angle, f_yaw_angle
  993. }
  994. -- Loop through the data (data3 could represent the number of iterations or packets to dissect)
  995. for i = 1, num_of_instance do
  996. -- Add the new structure data as a subtree
  997. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  998. -- dissect operation status (1 byte)
  999. local op_status = buffer(offset, 1):le_uint()
  1000. subtree:add(f_op_status, op_status)
  1001. offset = offset + 1
  1002. -- dissect epoch time (4 bytes)
  1003. local epoch_time = buffer(offset, 4):le_uint()
  1004. subtree:add(f_epoch_time, epoch_time)
  1005. offset = offset + 4
  1006. -- dissect commanded roll angle (2 bytes)
  1007. local roll_angle_raw = buffer(offset, 2):le_int()
  1008. local roll_angle = roll_angle_raw -- Apply scaling factor
  1009. subtree:add(f_roll_angle, roll_angle)
  1010. offset = offset + 2
  1011. -- dissect commanded pitch angle (2 bytes)
  1012. local pitch_angle_raw = buffer(offset, 2):le_int()
  1013. local pitch_angle = pitch_angle_raw -- Apply scaling factor
  1014. subtree:add(f_pitch_angle, pitch_angle)
  1015. offset = offset + 2
  1016. -- dissect commanded yaw angle (2 bytes)
  1017. local yaw_angle_raw = buffer(offset, 2):le_int()
  1018. local yaw_angle = yaw_angle_raw -- Apply scaling factor
  1019. subtree:add(f_yaw_angle, yaw_angle)
  1020. offset = offset + 2
  1021. end
  1022. end
  1023. ----------------------------------------------------------------------------------------------------------
  1024. -- Define the dissector function for the new structure
  1025. function adcs_dissector_29(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  1026. -- Define ProtoFields for the new structure fields
  1027. local f_op_status = ProtoField.uint8("PowerSystemData.op_status", "Operation Status", base.DES)
  1028. local f_epoch_time = ProtoField.uint32("PowerSystemData.epoch_time", "Epoch Time", base.DES)
  1029. local f_innovation_x = ProtoField.int16("PowerSystemData.innovation_x", "Innovation Vector X", base.DEC)
  1030. local f_innovation_y = ProtoField.int16("PowerSystemData.innovation_y", "Innovation Vector Y", base.DEC)
  1031. local f_innovation_z = ProtoField.int16("PowerSystemData.innovation_z", "Innovation Vector Z", base.DEC)
  1032. -- Add the fields to the protocol
  1033. adcs_protocol.fields = {
  1034. f_op_status, f_epoch_time, f_innovation_x, f_innovation_y, f_innovation_z
  1035. }
  1036. -- Loop through the data (data3 could represent the number of iterations or packets to dissect)
  1037. for i = 1,num_of_instance do
  1038. -- Add the new structure data as a subtree
  1039. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  1040. -- dissect operation status (1 byte)
  1041. local op_status = buffer(offset, 1):le_uint()
  1042. subtree:add(f_op_status, op_status)
  1043. offset = offset + 1
  1044. -- dissect epoch time (4 bytes)
  1045. local epoch_time = buffer(offset, 4):le_uint()
  1046. subtree:add(f_epoch_time, epoch_time)
  1047. offset = offset + 4
  1048. -- dissect innovation vector X (2 bytes)
  1049. local innovation_x_raw = buffer(offset, 2):le_int()
  1050. local innovation_x = innovation_x_raw -- Apply scaling factor
  1051. subtree:add(f_innovation_x, innovation_x)
  1052. offset = offset + 2
  1053. -- dissect innovation vector Y (2 bytes)
  1054. local innovation_y_raw = buffer(offset, 2):le_int()
  1055. local innovation_y = innovation_y_raw -- Apply scaling factor
  1056. subtree:add(f_innovation_y, innovation_y)
  1057. offset = offset + 2
  1058. -- dissect innovation vector Z (2 bytes)
  1059. local innovation_z_raw = buffer(offset, 2):le_int()
  1060. local innovation_z = innovation_z_raw -- Apply scaling factor
  1061. subtree:add(f_innovation_z, innovation_z)
  1062. offset = offset + 2
  1063. end
  1064. end
  1065. ---------------------------------------------------------------------------------------------------
  1066. -- Define the dissector function for the new structure
  1067. function adcs_dissector_28(buffer, pinfo, tree, adcs_protocol, offset,num_of_instance)
  1068. -- Define ProtoFields for the new structure fields
  1069. local f_op_status = ProtoField.uint8("PowerSystemData.op_status", "Operation Status", base.DES)
  1070. local f_epoch_time = ProtoField.uint32("PowerSystemData.epoch_time", "Epoch Time", base.DES)
  1071. local f_x_gyro_bias = ProtoField.int16("PowerSystemData.x_gyro_bias", "Estimated X-Gyro Bias", base.DEC)
  1072. local f_y_gyro_bias = ProtoField.int16("PowerSystemData.y_gyro_bias", "Estimated Y-Gyro Bias", base.DEC)
  1073. local f_z_gyro_bias = ProtoField.int16("PowerSystemData.z_gyro_bias", "Estimated Z-Gyro Bias", base.DEC)
  1074. -- Add the fields to the protocol
  1075. adcs_protocol.fields = {
  1076. f_op_status, f_epoch_time, f_x_gyro_bias, f_y_gyro_bias, f_z_gyro_bias
  1077. }
  1078. -- Loop through the data (data3 could represent the number of iterations or packets to dissect)
  1079. for i = 1, num_of_instance do
  1080. -- Add the new structure data as a subtree
  1081. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  1082. -- dissect operation status (1 byte)
  1083. local op_status = buffer(offset, 1):le_uint()
  1084. subtree:add(f_op_status, op_status)
  1085. offset = offset + 1
  1086. -- dissect epoch time (4 bytes)
  1087. local epoch_time = buffer(offset, 4):le_uint()
  1088. subtree:add(f_epoch_time, epoch_time)
  1089. offset = offset + 4
  1090. -- dissect estimated x-gyro bias (2 bytes)
  1091. local x_gyro_bias_raw = buffer(offset, 2):le_int()
  1092. local x_gyro_bias = x_gyro_bias_raw -- Apply scaling factor
  1093. subtree:add(f_x_gyro_bias, x_gyro_bias)
  1094. offset = offset + 2
  1095. -- dissect estimated y-gyro bias (2 bytes)
  1096. local y_gyro_bias_raw = buffer(offset, 2):le_int()
  1097. local y_gyro_bias = y_gyro_bias_raw -- Apply scaling factor
  1098. subtree:add(f_y_gyro_bias, y_gyro_bias)
  1099. offset = offset + 2
  1100. -- dissect estimated z-gyro bias (2 bytes)
  1101. local z_gyro_bias_raw = buffer(offset, 2):le_int()
  1102. local z_gyro_bias = z_gyro_bias_raw -- Apply scaling factor
  1103. subtree:add(f_z_gyro_bias, z_gyro_bias)
  1104. offset = offset + 2
  1105. end
  1106. end
  1107. ----------------------------------------------------------------------------------------------------------------------
  1108. --2.2.1.2.27 ADCS_HM_QUAT_ERR_VEC 26-27
  1109. -- Define the dissector function for the new structure
  1110. function adcs_dissector_27(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  1111. -- Define ProtoFields for the new structure fields
  1112. local f_op_status = ProtoField.uint8("PowerSystemData.op_status", "Operation Status", base.DES)
  1113. local f_epoch_time = ProtoField.uint32("PowerSystemData.epoch_time", "Epoch Time", base.DES)
  1114. local f_q1_error = ProtoField.int16("PowerSystemData.q1_error", "Quaternion Error - Q1", base.DEC)
  1115. local f_q2_error = ProtoField.int16("PowerSystemData.q2_error", "Quaternion Error - Q2", base.DEC)
  1116. local f_q3_error = ProtoField.int16("PowerSystemData.q3_error", "Quaternion Error - Q3", base.DEC)
  1117. -- Add the fields to the protocol
  1118. adcs_protocol.fields = {
  1119. f_op_status, f_epoch_time, f_q1_error, f_q2_error, f_q3_error
  1120. }
  1121. -- Loop through the data (data3 could represent the number of iterations or packets to dissect)
  1122. for i = 1, num_of_instance do
  1123. -- Add the new structure data as a subtree
  1124. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  1125. -- dissect operation status (1 byte)
  1126. local op_status = buffer(offset, 1):le_uint()
  1127. subtree:add(f_op_status, op_status)
  1128. offset = offset + 1
  1129. -- dissect epoch time (4 bytes)
  1130. local epoch_time = buffer(offset, 4):le_uint()
  1131. subtree:add(f_epoch_time, epoch_time)
  1132. offset = offset + 4
  1133. -- dissect quaternion error Q1 (2 bytes)
  1134. local q1_error_raw = buffer(offset, 2):le_int()
  1135. local q1_error = q1_error_raw -- Apply scaling factor
  1136. subtree:add(f_q1_error, q1_error)
  1137. offset = offset + 2
  1138. -- dissect quaternion error Q2 (2 bytes)
  1139. local q2_error_raw = buffer(offset, 2):le_int()
  1140. local q2_error = q2_error_raw -- Apply scaling factor
  1141. subtree:add(f_q2_error, q2_error)
  1142. offset = offset + 2
  1143. -- dissect quaternion error Q3 (2 bytes)
  1144. local q3_error_raw = buffer(offset, 2):le_int()
  1145. local q3_error = q3_error_raw -- Apply scaling factor
  1146. subtree:add(f_q3_error, q3_error)
  1147. offset = offset + 2
  1148. end
  1149. end
  1150. -----------------------------------------------------------------------------------------------------------------------------
  1151. --2.2.1.2.26 ADCS_HM_IGRF_MOD_VEC 25-14
  1152. -- Define the dissector function for the new structure
  1153. function adcs_dissector_14(buffer, pinfo, tree, adcs_protocol, offset,num_of_instance)
  1154. -- Define ProtoFields for the new structure fields
  1155. local f_op_status = ProtoField.uint8("PowerSystemData.op_status", "Operation Status", base.DES)
  1156. local f_epoch_time = ProtoField.uint32("PowerSystemData.epoch_time", "Epoch Time", base.DES)
  1157. local f_x_magnetic_field = ProtoField.int16("PowerSystemData.x_magnetic_field", "X axis Modelled Magnetic Field Vector", base.DEC)
  1158. local f_y_magnetic_field = ProtoField.int16("PowerSystemData.y_magnetic_field", "Y axis Modelled Magnetic Field Vector", base.DEC)
  1159. local f_z_magnetic_field = ProtoField.int16("PowerSystemData.z_magnetic_field", "Z axis Modelled Magnetic Field Vector", base.DEC)
  1160. -- Add the fields to the protocol
  1161. adcs_protocol.fields = {
  1162. f_op_status, f_epoch_time, f_x_magnetic_field, f_y_magnetic_field, f_z_magnetic_field
  1163. }
  1164. -- Loop through the data (data3 could represent the number of iterations or packets to dissect)
  1165. for i = 1, num_of_instance do
  1166. -- Add the new structure data as a subtree
  1167. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  1168. -- dissect operation status (1 byte)
  1169. local op_status = buffer(offset, 1):le_uint()
  1170. subtree:add(f_op_status, op_status)
  1171. offset = offset + 1
  1172. -- dissect epoch time (4 bytes)
  1173. local epoch_time = buffer(offset, 4):le_uint()
  1174. subtree:add(f_epoch_time, epoch_time)
  1175. offset = offset + 4
  1176. -- dissect x-axis magnetic field vector (2 bytes)
  1177. local x_magnetic_field_raw = buffer(offset, 2):le_int()
  1178. local x_magnetic_field = x_magnetic_field_raw -- Apply scaling factor
  1179. subtree:add(f_x_magnetic_field, x_magnetic_field)
  1180. offset = offset + 2
  1181. -- dissect y-axis magnetic field vector (2 bytes)
  1182. local y_magnetic_field_raw = buffer(offset, 2):le_int()
  1183. local y_magnetic_field = y_magnetic_field_raw -- Apply scaling factor
  1184. subtree:add(f_y_magnetic_field, y_magnetic_field)
  1185. offset = offset + 2
  1186. -- dissect z-axis magnetic field vector (2 bytes)
  1187. local z_magnetic_field_raw = buffer(offset, 2):le_int()
  1188. local z_magnetic_field = z_magnetic_field_raw -- Apply scaling factor
  1189. subtree:add(f_z_magnetic_field, z_magnetic_field)
  1190. offset = offset + 2
  1191. end
  1192. end
  1193. ---------------------------------------------------------------------------------------------------------------------
  1194. --2.2.1.2.25 ADCS_HM_POS_LLH 24-26
  1195. -- Define the dissector function for the new structure
  1196. function adcs_dissector_26(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  1197. -- Define ProtoFields for the new structure fields
  1198. local f_op_status = ProtoField.uint8("PowerSystemData.op_status", "Operation Status", base.DES)
  1199. local f_epoch_time = ProtoField.uint32("PowerSystemData.epoch_time", "Epoch Time", base.DES)
  1200. local f_geo_longitude = ProtoField.int16("PowerSystemData.geo_longitude", "Geocentric Longitude", base.DEC)
  1201. local f_geo_latitude = ProtoField.int16("PowerSystemData.geo_latitude", "Geocentric Latitude", base.DEC)
  1202. local f_geo_altitude = ProtoField.int16("PowerSystemData.geo_altitude", "Geocentric Altitude", base.DEC)
  1203. -- Add the fields to the protocol
  1204. adcs_protocol.fields = {
  1205. f_op_status, f_epoch_time, f_geo_longitude, f_geo_latitude, f_geo_altitude
  1206. }
  1207. -- Loop through the data (data3 could represent the number of iterations or packets to dissect)
  1208. for i = 1, num_of_instance do
  1209. -- Add the new structure data as a subtree
  1210. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  1211. -- dissect operation status (1 byte)
  1212. local op_status = buffer(offset, 1):le_uint()
  1213. subtree:add(f_op_status, op_status)
  1214. offset = offset + 1
  1215. -- dissect epoch time (4 bytes)
  1216. local epoch_time = buffer(offset, 4):le_uint()
  1217. subtree:add(f_epoch_time, epoch_time)
  1218. offset = offset + 4
  1219. -- dissect geocentric longitude (2 bytes)
  1220. local geo_longitude_raw = buffer(offset, 2):le_int()
  1221. local geo_longitude = geo_longitude_raw -- Apply scaling factor
  1222. subtree:add(f_geo_longitude, geo_longitude)
  1223. offset = offset + 2
  1224. -- dissect geocentric latitude (2 bytes)
  1225. local geo_latitude_raw = buffer(offset, 2):le_int()
  1226. local geo_latitude = geo_latitude_raw -- Apply scaling factor
  1227. subtree:add(f_geo_latitude, geo_latitude)
  1228. offset = offset + 2
  1229. -- dissect geocentric altitude (2 bytes)
  1230. local geo_altitude_raw = buffer(offset, 2):le_int()
  1231. local geo_altitude = geo_altitude_raw -- Apply scaling factor
  1232. subtree:add(f_geo_altitude, geo_altitude)
  1233. offset = offset + 2
  1234. end
  1235. end
  1236. ----------------------------------------------------------------------------------------------------------
  1237. --2.2.1.2.24 ADCS_HM_RAW_STAR_TRKR_MEAS 23-20
  1238. function adcs_dissector_20(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  1239. -- Define ProtoFields for the updated structure fields
  1240. local f_op_status = ProtoField.uint8("StarTrackerData.op_status", "Operation Status", base.DES)
  1241. local f_epoch_time = ProtoField.uint32("StarTrackerData.epoch_time", "Epoch Time", base.DES)
  1242. local f_num_stars_detected = ProtoField.uint8("StarTrackerData.num_stars_detected", "Number of Stars Detected", base.DES)
  1243. local f_star_image_noise = ProtoField.uint8("StarTrackerData.star_image_noise", "Star Image Noise", base.DES)
  1244. local f_invalid_star = ProtoField.uint8("StarTrackerData.invalid_star", "Invalid Star", base.DES)
  1245. local f_num_stars_identified = ProtoField.uint8("StarTrackerData.num_stars_identified", "Number of Stars Identified", base.DES)
  1246. local f_ident_mode = ProtoField.uint8("StarTrackerData.ident_mode", "Identification Mode", base.ENUM)
  1247. local f_image_dark_value = ProtoField.uint8("StarTrackerData.image_dark_value", "Image Dark Value", base.DES)
  1248. -- Define ProtoFields for flags (1 byte with individual boolean flags)
  1249. local f_flags = ProtoField.uint8("StarTrackerData.flags", "Flags", base.HEX)
  1250. -- Define ProtoFields for star confidence and magnitudes
  1251. local f_star_conf_1 = ProtoField.uint8("StarTrackerData.star_conf_1", "Star 1 Confidence", base.PERCENT)
  1252. local f_star_conf_2 = ProtoField.uint8("StarTrackerData.star_conf_2", "Star 2 Confidence", base.PERCENT)
  1253. local f_star_conf_3 = ProtoField.uint8("StarTrackerData.star_conf_3", "Star 3 Confidence", base.PERCENT)
  1254. -- Define ProtoFields for instrument magnitudes
  1255. local f_instrument_mag_1 = ProtoField.uint16("StarTrackerData.instrument_mag_1", "Instrument Magnitude Star 1", base.DEC)
  1256. local f_instrument_mag_2 = ProtoField.uint16("StarTrackerData.instrument_mag_2", "Instrument Magnitude Star 2", base.DEC)
  1257. local f_instrument_mag_3 = ProtoField.uint16("StarTrackerData.instrument_mag_3", "Instrument Magnitude Star 3", base.DEC)
  1258. -- Define ProtoFields for capture, detection, and identification
  1259. local f_capture = ProtoField.uint16("StarTrackerData.capture", "Capture", base.DEC)
  1260. local f_detection = ProtoField.uint16("StarTrackerData.detection", "Detection", base.DEC)
  1261. local f_identification = ProtoField.uint16("StarTrackerData.identification", "Identification", base.DEC)
  1262. -- Define ProtoFields for the estimated rates and attitudes (X, Y, Z axes, Q1, Q2, Q3)
  1263. local f_est_rate_x = ProtoField.int16("StarTrackerData.est_rate_x", "Estimated Rate X-axis", base.DEC)
  1264. local f_est_rate_y = ProtoField.int16("StarTrackerData.est_rate_y", "Estimated Rate Y-axis", base.DEC)
  1265. local f_est_rate_z = ProtoField.int16("StarTrackerData.est_rate_z", "Estimated Rate Z-axis", base.DEC)
  1266. local f_est_attitude_q1 = ProtoField.int16("StarTrackerData.est_attitude_q1", "Estimated Attitude Q1", base.DEC)
  1267. local f_est_attitude_q2 = ProtoField.int16("StarTrackerData.est_attitude_q2", "Estimated Attitude Q2", base.DEC)
  1268. local f_est_attitude_q3 = ProtoField.int16("StarTrackerData.est_attitude_q3", "Estimated Attitude Q3", base.DEC)
  1269. -- Define ProtoFields for star catalog and centroid information
  1270. local f_catalogue_number = ProtoField.uint16("StarTrackerData.catalogue_number", "Catalogue Number of Star", base.DEC)
  1271. local f_x_centroid = ProtoField.int16("StarTrackerData.x_centroid", "X Centroid of Star", base.DEC)
  1272. local f_y_centroid = ProtoField.int16("StarTrackerData.y_centroid", "Y Centroid of Star", base.DEC)
  1273. -- Define ProtoField for sample period
  1274. local f_sample_period = ProtoField.uint16("StarTrackerData.sample_period", "Sample Period", base.DEC)
  1275. -- Add the fields to the protocol
  1276. adcs_protocol.fields = {
  1277. f_op_status, f_epoch_time, f_num_stars_detected, f_star_image_noise, f_invalid_star,
  1278. f_num_stars_identified, f_ident_mode, f_image_dark_value, f_flags,
  1279. f_star_conf_1, f_star_conf_2, f_star_conf_3,
  1280. f_instrument_mag_1, f_instrument_mag_2, f_instrument_mag_3,
  1281. f_capture, f_detection, f_identification,
  1282. f_est_rate_x, f_est_rate_y, f_est_rate_z,
  1283. f_est_attitude_q1, f_est_attitude_q2, f_est_attitude_q3,
  1284. f_catalogue_number, f_x_centroid, f_y_centroid, f_sample_period
  1285. }
  1286. -- Loop through the data (data3 could represent the number of iterations or packets to dissect)
  1287. for i = 1, num_of_instance do
  1288. -- Add the new structure data as a subtree
  1289. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  1290. -- dissect operation status (1 byte)
  1291. local op_status = buffer(offset, 1):le_uint()
  1292. subtree:add(f_op_status, op_status)
  1293. offset = offset + 1
  1294. -- dissect epoch time (4 bytes)
  1295. local epoch_time = buffer(offset, 4):le_uint()
  1296. subtree:add(f_epoch_time, epoch_time)
  1297. offset = offset + 4
  1298. -- dissect number of stars detected (1 byte)
  1299. local num_stars_detected = buffer(offset, 1):le_uint()
  1300. subtree:add(f_num_stars_detected, num_stars_detected)
  1301. offset = offset + 1
  1302. -- dissect star image noise (1 byte)
  1303. local star_image_noise = buffer(offset, 1):le_uint()
  1304. subtree:add(f_star_image_noise, star_image_noise)
  1305. offset = offset + 1
  1306. -- dissect invalid star (1 byte)
  1307. local invalid_star = buffer(offset, 1):le_uint()
  1308. subtree:add(f_invalid_star, invalid_star)
  1309. offset = offset + 1
  1310. -- dissect number of stars identified (1 byte)
  1311. local num_stars_identified = buffer(offset, 1):le_uint()
  1312. subtree:add(f_num_stars_identified, num_stars_identified)
  1313. offset = offset + 1
  1314. -- dissect identification mode (1 byte, enum)
  1315. local ident_mode = buffer(offset, 1):le_uint()
  1316. subtree:add(f_ident_mode, ident_mode)
  1317. offset = offset + 1
  1318. -- dissect image dark value (1 byte)
  1319. local image_dark_value = buffer(offset, 1):le_uint()
  1320. subtree:add(f_image_dark_value, image_dark_value)
  1321. offset = offset + 1
  1322. -- dissect flags (8 flags, 1 byte)
  1323. local flags = buffer(offset, 1):le_uint()
  1324. subtree:add(f_flags, flags) -- in this each bit represents a value
  1325. offset = offset + 1
  1326. -- dissect star confidences (1 byte each)
  1327. local star_conf_1 = buffer(offset, 1):le_uint()
  1328. subtree:add(f_star_conf_1, star_conf_1)
  1329. offset = offset + 1
  1330. local star_conf_2 = buffer(offset, 1):le_uint()
  1331. subtree:add(f_star_conf_2, star_conf_2)
  1332. offset = offset + 1
  1333. local star_conf_3 = buffer(offset, 1):le_uint()
  1334. subtree:add(f_star_conf_3, star_conf_3)
  1335. offset = offset + 1
  1336. -- dissect instrument magnitudes (2 bytes each)
  1337. local instrument_mag_1 = buffer(offset, 2):le_uint()
  1338. subtree:add(f_instrument_mag_1, instrument_mag_1)
  1339. offset = offset + 2
  1340. local instrument_mag_2 = buffer(offset, 2):le_uint()
  1341. subtree:add(f_instrument_mag_2, instrument_mag_2)
  1342. offset = offset + 2
  1343. local instrument_mag_3 = buffer(offset, 2):le_uint()
  1344. subtree:add(f_instrument_mag_3, instrument_mag_3)
  1345. offset = offset + 2
  1346. -- dissect capture, detection, and identification (2 bytes each)
  1347. local capture = buffer(offset, 2):le_uint()
  1348. subtree:add(f_capture, capture)
  1349. offset = offset + 2
  1350. local detection = buffer(offset, 2):le_uint()
  1351. subtree:add(f_detection, detection)
  1352. offset = offset + 2
  1353. local identification = buffer(offset, 2):le_uint()
  1354. subtree:add(f_identification, identification)
  1355. offset = offset + 2
  1356. -- dissect estimated rate X-axis, Y-axis, Z-axis (2 bytes each)
  1357. local est_rate_x_raw = buffer(offset, 2):le_int()
  1358. local est_rate_x = est_rate_x_raw -- Apply scaling factor
  1359. subtree:add(f_est_rate_x, est_rate_x)
  1360. offset = offset + 2
  1361. local est_rate_y_raw = buffer(offset, 2):le_int()
  1362. local est_rate_y = est_rate_y_raw -- Apply scaling factor
  1363. subtree:add(f_est_rate_y, est_rate_y)
  1364. offset = offset + 2
  1365. local est_rate_z_raw = buffer(offset, 2):le_int()
  1366. local est_rate_z = est_rate_z_raw -- Apply scaling factor
  1367. subtree:add(f_est_rate_z, est_rate_z)
  1368. offset = offset + 2
  1369. -- dissect estimated attitude (Q1, Q2, Q3)
  1370. local est_attitude_q1_raw = buffer(offset, 2):le_int()
  1371. local est_attitude_q1 = est_attitude_q1_raw -- Apply scaling factor
  1372. subtree:add(f_est_attitude_q1, est_attitude_q1)
  1373. offset = offset + 2
  1374. local est_attitude_q2_raw = buffer(offset, 2):le_int()
  1375. local est_attitude_q2 = est_attitude_q2_raw -- Apply scaling factor
  1376. subtree:add(f_est_attitude_q2, est_attitude_q2)
  1377. offset = offset + 2
  1378. local est_attitude_q3_raw = buffer(offset, 2):le_int()
  1379. local est_attitude_q3 = est_attitude_q3_raw -- Apply scaling factor
  1380. subtree:add(f_est_attitude_q3, est_attitude_q3)
  1381. offset = offset + 2
  1382. -- dissect catalogue number (2 bytes)
  1383. local catalogue_number = buffer(offset, 2):le_uint()
  1384. subtree:add(f_catalogue_number, catalogue_number)
  1385. offset = offset + 2
  1386. -- dissect centroids (X, Y)
  1387. local x_centroid = buffer(offset, 2):le_int()
  1388. subtree:add(f_x_centroid, x_centroid)
  1389. offset = offset + 2
  1390. local y_centroid = buffer(offset, 2):le_int()
  1391. subtree:add(f_y_centroid, y_centroid)
  1392. offset = offset + 2
  1393. -- dissect sample period (2 bytes)
  1394. local sample_period = buffer(offset, 2):le_uint()
  1395. subtree:add(f_sample_period, sample_period)
  1396. offset = offset + 2
  1397. end
  1398. end
  1399. -------------------------------------------------------------------------------------------------------------------------------
  1400. ------------------------------------------------------------------------------------------------------------------------------------------
  1401. --2.2.1.2.22 ADCS_HM_MGTRQR_CMD 21-25
  1402. -- Define the dissector function for the Magnetorquer data
  1403. function adcs_dissector_25(buffer, pinfo, tree,adcs_protocol, offset, num_of_instance)
  1404. -- Define ProtoFields for the new structure fields
  1405. local f_op_status = ProtoField.uint8("MagnetorquerData.op_status", "Operation Status", base.DES)
  1406. local f_epoch_time = ProtoField.uint32("MagnetorquerData.epoch_time", "Epoch Time", base.DES)
  1407. local f_x_magnetorquer_time = ProtoField.int16("MagnetorquerData.x_magnetorquer_time", "X Magnetorquer Commanded On-time (10ms)", base.DEC)
  1408. local f_y_magnetorquer_time = ProtoField.int16("MagnetorquerData.y_magnetorquer_time", "Y Magnetorquer Commanded On-time (10ms)", base.DEC)
  1409. local f_z_magnetorquer_time = ProtoField.int16("MagnetorquerData.z_magnetorquer_time", "Z Magnetorquer Commanded On-time (10ms)", base.DEC)
  1410. -- Add the fields to the protocol
  1411. adcs_protocol.fields = {
  1412. f_op_status, f_epoch_time, f_x_magnetorquer_time, f_y_magnetorquer_time, f_z_magnetorquer_time
  1413. }
  1414. for i = 1,num_of_instance do
  1415. -- Add the new structure data as a subtree
  1416. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  1417. -- dissect operation status (1 byte)
  1418. local op_status = buffer(offset, 1):le_uint()
  1419. subtree:add(f_op_status, op_status)
  1420. offset = offset + 1
  1421. -- dissect epoch time (4 bytes)
  1422. local epoch_time = buffer(offset, 4):le_uint()
  1423. subtree:add(f_epoch_time, epoch_time)
  1424. offset = offset + 4
  1425. -- dissect X Magnetorquer Commanded on-time (2 bytes)
  1426. local x_magnetorquer_time = buffer(offset, 2):le_int()
  1427. subtree:add(f_x_magnetorquer_time, x_magnetorquer_time)
  1428. offset = offset + 2
  1429. -- dissect Y Magnetorquer Commanded on-time (2 bytes)
  1430. local y_magnetorquer_time = buffer(offset, 2):le_int()
  1431. subtree:add(f_y_magnetorquer_time, y_magnetorquer_time)
  1432. offset = offset + 2
  1433. -- dissect Z Magnetorquer Commanded on-time (2 bytes)
  1434. local z_magnetorquer_time = buffer(offset, 2):le_int()
  1435. subtree:add(f_z_magnetorquer_time, z_magnetorquer_time)
  1436. offset = offset + 2
  1437. end
  1438. end
  1439. -----------------------------------------------------------------------------------------
  1440. --2.2.1.2.21 ADCS_HM_RW_SPEED_CMD 20-24
  1441. -- Define the dissector function for the Reaction Wheel data
  1442. function adcs_dissector_24(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  1443. -- Define ProtoFields for the new structure fields
  1444. local f_op_status = ProtoField.uint8("ReactionWheelData.op_status", "Operation Status", base.DES)
  1445. local f_epoch_time = ProtoField.uint32("ReactionWheelData.epoch_time", "Epoch Time", base.DES)
  1446. local f_num_reaction_wheels = ProtoField.uint8("ReactionWheelData.num_reaction_wheels", "Number of Reaction Wheels", base.DES)
  1447. local f_wheel_speed = ProtoField.uint16("ReactionWheelData.wheel_speed_", "Measured Wheel Speed ", base.DEC)
  1448. -- Define the ProtoField for the array of Measured Wheel Speeds (N = 3, each 2 bytes)
  1449. -- Add the fields to the protocol
  1450. adcs_protocol.fields = {
  1451. f_op_status, f_epoch_time, f_num_reaction_wheels, f_wheel_speed
  1452. }
  1453. for i = 1,num_of_instance do
  1454. -- Add the new structure data as a subtree
  1455. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  1456. -- dissect operation status (1 byte)
  1457. local op_status = buffer(offset, 1):le_uint()
  1458. subtree:add(f_op_status, op_status)
  1459. offset = offset + 1
  1460. -- dissect epoch time (4 bytes)
  1461. local epoch_time = buffer(offset, 4):le_uint()
  1462. subtree:add(f_epoch_time, epoch_time)
  1463. offset = offset + 4
  1464. -- dissect number of reaction wheels (1 byte)
  1465. local num_reaction_wheels = buffer(offset, 1):le_uint()
  1466. subtree:add(f_num_reaction_wheels, num_reaction_wheels)
  1467. offset = offset + 1
  1468. -- dissect wheel speeds (array of N * 2 bytes, with N = 3)
  1469. for i = 1, 3 do
  1470. local wheel_speed = buffer(offset, 2):le_uint()
  1471. subtree:add(f_wheel_speed, wheel_speed)
  1472. offset = offset + 2
  1473. end
  1474. end
  1475. end
  1476. -----------------------------------------------------------------------------------------------------------
  1477. --2.2.1.2.20 ADCS_HM_MEAS_RW_SPEED 19-23
  1478. -- Define the dissector function for the Reaction Wheel Commanded Speed data
  1479. function adcs_dissector_23(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  1480. -- Define ProtoFields for the new structure fields
  1481. local f_op_status = ProtoField.uint8("ReactionWheelData.op_status", "Operation Status", base.DES)
  1482. local f_epoch_time = ProtoField.uint32("ReactionWheelData.epoch_time", "Epoch Time", base.DES)
  1483. local f_num_reaction_wheels = ProtoField.uint8("ReactionWheelData.num_reaction_wheels", "Number of Reaction Wheels", base.DES)
  1484. local f_wheel_speed_cmd = ProtoField.uint16("ReactionWheelData.wheel_speed_cmd_","Commanded Wheel Speed ", base.DEC)
  1485. -- Define the ProtoField for the array of Commanded Wheel Speeds (N = 3, each 2 bytes)
  1486. -- Add the fields to the protocol
  1487. adcs_protocol.fields = {
  1488. f_op_status, f_epoch_time, f_num_reaction_wheels,f_wheel_speed_cmd
  1489. }
  1490. for i = 1, num_of_instance do
  1491. -- Add the new structure data as a subtree
  1492. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  1493. -- dissect operation status (1 byte)
  1494. local op_status = buffer(offset, 1):le_uint()
  1495. subtree:add(f_op_status, op_status)
  1496. offset = offset + 1
  1497. -- dissect epoch time (4 bytes)
  1498. local epoch_time = buffer(offset, 4):le_uint()
  1499. subtree:add(f_epoch_time, epoch_time)
  1500. offset = offset + 4
  1501. -- dissect number of reaction wheels (1 byte)
  1502. local num_reaction_wheels = buffer(offset, 1):le_uint()
  1503. subtree:add(f_num_reaction_wheels, num_reaction_wheels)
  1504. offset = offset + 1
  1505. -- dissect commanded wheel speeds (array of N * 2 bytes, with N = 3)
  1506. for i = 1, 3 do -- value 3 is fixed in structure
  1507. local wheel_speed_cmd = buffer(offset, 2):le_uint()
  1508. subtree:add(f_wheel_speed_cmd, wheel_speed_cmd)
  1509. offset = offset + 2
  1510. end
  1511. end
  1512. end
  1513. -----------------------------------------------------------------------------------------------------------------
  1514. --------------------------------------------------------------------------------------------------------
  1515. --2.2.1.2.15 ADCS_HM_FINE_EST_ANG_RATES 14-19
  1516. -- Define the dissector function for the Fine Estimated Angular Rates Data
  1517. function adcs_dissector_19(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  1518. -- Define ProtoFields for the Fine Estimated Angular Rates structure
  1519. local f_op_status = ProtoField.uint8("AngularRateData.op_status", "Operation Status", base.DES)
  1520. local f_epoch_time = ProtoField.uint32("AngularRateData.epoch_time", "Epoch Time", base.DES)
  1521. local f_x_angular_rate = ProtoField.int16("AngularRateData.x_angular_rate", "Fine Estimated X Angular Rate", base.DEC)
  1522. local f_y_angular_rate = ProtoField.int16("AngularRateData.y_angular_rate", "Fine Estimated Y Angular Rate", base.DEC)
  1523. local f_z_angular_rate = ProtoField.int16("AngularRateData.z_angular_rate", "Fine Estimated Z Angular Rate", base.DEC)
  1524. -- Add the fields to the protocol
  1525. adcs_protocol.fields = {
  1526. f_op_status, f_epoch_time, f_x_angular_rate, f_y_angular_rate, f_z_angular_rate
  1527. }
  1528. for i = 1, num_of_instance do
  1529. -- Add the Fine Estimated Angular Rates data as a subtree
  1530. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  1531. -- dissect operation status (1 byte)
  1532. local op_status = buffer(offset, 1):le_uint()
  1533. subtree:add(f_op_status, op_status)
  1534. offset = offset + 1
  1535. -- dissect epoch time (4 bytes)
  1536. local epoch_time = buffer(offset, 4):le_uint()
  1537. subtree:add(f_epoch_time, epoch_time)
  1538. offset = offset + 4
  1539. -- dissect Fine Estimated X Angular Rate (2 bytes, formatted value = RAWVAL*0.001)
  1540. local x_angular_rate = buffer(offset, 2):le_int()
  1541. subtree:add(f_x_angular_rate, x_angular_rate)
  1542. offset = offset + 2
  1543. -- dissect Fine Estimated Y Angular Rate (2 bytes, formatted value = RAWVAL*0.001)
  1544. local y_angular_rate = buffer(offset, 2):le_int()
  1545. subtree:add(f_y_angular_rate, y_angular_rate)
  1546. offset = offset + 2
  1547. -- dissect Fine Estimated Z Angular Rate (2 bytes, formatted value = RAWVAL*0.001)
  1548. local z_angular_rate = buffer(offset, 2):le_int()
  1549. subtree:add(f_z_angular_rate, z_angular_rate)
  1550. offset = offset + 2
  1551. end
  1552. end
  1553. -----------------------------------------------------------------------------------------------------------
  1554. --2.2.1.2.13 ADCS_HM_RATE_SENSOR_TEMPERATURE
  1555. -- Define the dissector function for the Rate Sensor Temperature Data
  1556. function adcs_dissector_12(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  1557. -- Define ProtoFields for the structure (adjust names as per your needs)
  1558. local f_op_status = ProtoField.uint8("RateSensorData.op_status", "Operation Status", base.HEX)
  1559. local f_epoch_time = ProtoField.uint32("RateSensorData.epoch_time", "Epoch Time", base.DEC)
  1560. local f_x_rate_temp = ProtoField.int16("RateSensorData.x_rate_temp", "X Rate Sensor Temperature", base.DEC)
  1561. local f_y_rate_temp = ProtoField.int16("RateSensorData.y_rate_temp", "Y Rate Sensor Temperature", base.DEC)
  1562. local f_z_rate_temp = ProtoField.int16("RateSensorData.z_rate_temp", "Z Rate Sensor Temperature", base.DEC)
  1563. -- Add the fields to the protocol
  1564. adcs_protocol.fields = {
  1565. f_op_status, f_epoch_time, f_x_rate_temp, f_y_rate_temp, f_z_rate_temp
  1566. }
  1567. -- Loop to process multiple data3 (if needed, as per your structure)
  1568. for i = 1, num_of_instance do
  1569. -- Add the data structure as a subtree
  1570. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  1571. -- dissect operation status (1 byte)
  1572. local op_status = buffer(offset, 1):le_uint()
  1573. subtree:add(f_op_status, op_status)
  1574. offset = offset + 1
  1575. -- dissect epoch time (4 bytes)
  1576. local epoch_time = buffer(offset, 4):le_uint()
  1577. subtree:add(f_epoch_time, epoch_time)
  1578. offset = offset + 4
  1579. -- dissect X Rate Sensor Temperature (2 bytes, formatted value = RAWVAL)
  1580. local x_rate_temp = buffer(offset, 2):le_int()
  1581. subtree:add(f_x_rate_temp, x_rate_temp)
  1582. offset = offset + 2
  1583. -- dissect Y Rate Sensor Temperature (2 bytes, formatted value = RAWVAL)
  1584. local y_rate_temp = buffer(offset, 2):le_int()
  1585. subtree:add(f_y_rate_temp, y_rate_temp)
  1586. offset = offset + 2
  1587. -- dissect Z Rate Sensor Temperature (2 bytes, formatted value = RAWVAL)
  1588. local z_rate_temp = buffer(offset, 2):le_int()
  1589. subtree:add(f_z_rate_temp, z_rate_temp)
  1590. offset = offset + 2
  1591. end
  1592. end
  1593. --------------------------------------------------------------------------------------------------------------------
  1594. --2.2.1.2.12 ADCS_HM_TEMPERATURE
  1595. -- Define the dissector function for the Sensor Temperature Data
  1596. function adcs_dissector_11(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  1597. -- Define ProtoFields for the structure (adjust names as needed)
  1598. local f_op_status = ProtoField.uint8("SensorTemperatureData.op_status", "Operation Status", base.HEX)
  1599. local f_epoch_time = ProtoField.uint32("SensorTemperatureData.epoch_time", "Epoch Time", base.DEC)
  1600. local f_mcu_temp = ProtoField.int16("SensorTemperatureData.mcu_temp", "MCU Temperature", base.DEC)
  1601. local f_mag_temp = ProtoField.int16("SensorTemperatureData.mag_temp", "Magnetometer Temperature", base.DEC)
  1602. local f_red_mag_temp = ProtoField.int16("SensorTemperatureData.red_mag_temp", "Redundant Magnetometer Temperature", base.DEC)
  1603. -- Add the fields to the protocol
  1604. adcs_protocol.fields = {
  1605. f_op_status, f_epoch_time, f_mcu_temp, f_mag_temp, f_red_mag_temp
  1606. }
  1607. -- Loop to process multiple data3 (if needed, as per your structure)
  1608. for i = 1, num_of_instance do
  1609. -- Add the data structure as a subtree
  1610. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  1611. -- dissect operation status (1 byte)
  1612. local op_status = buffer(offset, 1):le_uint()
  1613. subtree:add(f_op_status, op_status)
  1614. offset = offset + 1
  1615. -- dissect epoch time (4 bytes)
  1616. local epoch_time = buffer(offset, 4):le_uint()
  1617. subtree:add(f_epoch_time, epoch_time)
  1618. offset = offset + 4
  1619. -- dissect MCU Temperature (2 bytes, formatted value = RAWVAL)
  1620. local mcu_temp = buffer(offset, 2):le_int()
  1621. subtree:add(f_mcu_temp, mcu_temp)
  1622. offset = offset + 2
  1623. -- dissect Magnetometer Temperature (2 bytes, formatted value = RAWVAL*0.1)
  1624. local mag_temp = buffer(offset, 2):le_int()
  1625. local formatted_mag_temp = mag_temp
  1626. subtree:add(f_mag_temp, formatted_mag_temp)
  1627. offset = offset + 2
  1628. -- dissect Redundant Magnetometer Temperature (2 bytes, formatted value = RAWVAL*0.1)
  1629. local red_mag_temp = buffer(offset, 2):le_int()
  1630. local formatted_red_mag_temp = red_mag_temp
  1631. subtree:add(f_red_mag_temp, formatted_red_mag_temp)
  1632. offset = offset + 2
  1633. end
  1634. end
  1635. ----------------------------------------------------------------------------------------------------------------------
  1636. function adcs_dissector_21(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  1637. local f_operation_status = ProtoField.uint32("adcs_protocol.operation_status", "Operation Status", base.DEC)
  1638. local f_epoch_time = ProtoField.uint32("adcs_protocol.epoch_time", "Epoch Time", base.DEC)
  1639. local f_mcu_temperature = ProtoField.int16("adcs_protocol.mcu_temperature", "MCU Temperature ", base.DEC)
  1640. local f_magnetometer_temperature = ProtoField.int16("adcs_protocol.magnetometer_temperature", "Magnetometer Temperature ", base.DEC)
  1641. local f_redundant_magnetometer_temperature = ProtoField.int16("adcs_protocol.redundant_magnetometer_temperature", "Redundant Magnetometer Temperature ", base.DEC)
  1642. -- Add the fields to the protocol
  1643. adcs_protocol.fields = { f_operation_status, f_epoch_time, f_mcu_temperature, f_magnetometer_temperature, f_redundant_magnetometer_temperature }
  1644. --local subtree = tree:add(adcs_protocol, buffer(),"ADCS queue id 21")
  1645. for i = 0, num_of_instance - 1 do
  1646. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  1647. subtree:add(f_operation_status, buffer(offset, 1):le_uint()) -- 1 bytes for Operation Status (UINT)
  1648. offset = offset + 1
  1649. subtree:add(f_epoch_time, buffer(offset, 4):le_uint()) -- 4 bytes for Epoch Time (UINT)
  1650. offset = offset + 4
  1651. -- Extract raw values for the temperatures (2 bytes each for INT)
  1652. local mcu_temp = buffer(offset, 2):le_uint() * 0.01
  1653. offset = offset + 2
  1654. local magnetometer_temp = buffer(offset, 2):le_uint() * 0.01
  1655. offset = offset + 2
  1656. local redundant_magnetometer_temp = buffer(offset, 2):le_uint() * 0.01
  1657. offset = offset + 2
  1658. -- Add the temperature values to the tree with scaling applied
  1659. subtree:add(f_mcu_temperature, mcu_temp)
  1660. subtree:add(f_magnetometer_temperature, magnetometer_temp)
  1661. subtree:add(f_redundant_magnetometer_temperature, redundant_magnetometer_temp)
  1662. end
  1663. end
  1664. ---------------------------------------------------------------------------------------------------------------------------------------
  1665. function adcs_dissector_18(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  1666. -- Define ProtoFields for the updated structure fields
  1667. local f_op_status = ProtoField.uint8("StarTrackerData.op_status", "Operation Status", base.DES)
  1668. local f_epoch_time = ProtoField.uint32("StarTrackerData.epoch_time", "Epoch Time", base.DES)
  1669. local f_est_rate_x = ProtoField.int16("StarTrackerData.est_rate_x", "Estimated X Angular Rate", base.DEC)
  1670. local f_est_rate_y = ProtoField.int16("StarTrackerData.est_rate_y", "Estimated Y Angular Rate", base.DEC)
  1671. local f_est_rate_z = ProtoField.int16("StarTrackerData.est_rate_z", "Estimated Z Angular Rate", base.DEC)
  1672. -- Add the fields to the protocol
  1673. adcs_protocol.fields = {
  1674. f_op_status, f_epoch_time, f_est_rate_x, f_est_rate_y, f_est_rate_z
  1675. }
  1676. -- Loop through the data (num_of_instance represents the number of instances to dissect)
  1677. for i = 1, num_of_instance do
  1678. -- Add the new structure data as a subtree
  1679. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  1680. -- dissect operation status (1 byte)
  1681. local op_status = buffer(offset, 1):le_uint()
  1682. subtree:add(f_op_status, op_status)
  1683. offset = offset + 1
  1684. -- dissect epoch time (4 bytes)
  1685. local epoch_time = buffer(offset, 4):le_uint()
  1686. subtree:add(f_epoch_time, epoch_time)
  1687. offset = offset + 4
  1688. -- dissect estimated X angular rate (2 bytes)
  1689. local est_rate_x_raw = buffer(offset, 2):le_int()
  1690. local est_rate_x = est_rate_x_raw -- Apply scaling factor
  1691. subtree:add(f_est_rate_x, est_rate_x)
  1692. offset = offset + 2
  1693. -- dissect estimated Y angular rate (2 bytes)
  1694. local est_rate_y_raw = buffer(offset, 2):le_int()
  1695. local est_rate_y = est_rate_y_raw -- Apply scaling factor
  1696. subtree:add(f_est_rate_y, est_rate_y)
  1697. offset = offset + 2
  1698. -- dissect estimated Z angular rate (2 bytes)
  1699. local est_rate_z_raw = buffer(offset, 2):le_int()
  1700. local est_rate_z = est_rate_z_raw -- Apply scaling factor
  1701. subtree:add(f_est_rate_z, est_rate_z)
  1702. offset = offset + 2
  1703. end
  1704. end
  1705. ------------------------------------------------------------------------------------------------
  1706. function adcs_dissector_17(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  1707. -- Define ProtoFields for the updated structure fields
  1708. local f_op_status = ProtoField.uint8("StarTrackerData.op_status", "Operation Status", base.DES)
  1709. local f_epoch_time = ProtoField.uint32("StarTrackerData.epoch_time", "Epoch Time", base.DES)
  1710. local f_raw_rate_x = ProtoField.int16("StarTrackerData.raw_rate_x", "X Axis Raw Rate Sensor Measurement", base.DEC)
  1711. local f_raw_rate_y = ProtoField.int16("StarTrackerData.raw_rate_y", "Y Axis Raw Rate Sensor Measurement", base.DEC)
  1712. local f_raw_rate_z = ProtoField.int16("StarTrackerData.raw_rate_z", "Z Axis Raw Rate Sensor Measurement", base.DEC)
  1713. -- Add the fields to the protocol
  1714. adcs_protocol.fields = {
  1715. f_op_status, f_epoch_time, f_raw_rate_x, f_raw_rate_y, f_raw_rate_z
  1716. }
  1717. -- Loop through the data (num_of_instance represents the number of instances to dissect)
  1718. for i = 1, num_of_instance do
  1719. -- Add the new structure data as a subtree
  1720. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  1721. -- dissect operation status (1 byte)
  1722. local op_status = buffer(offset, 1):le_uint()
  1723. subtree:add(f_op_status, op_status)
  1724. offset = offset + 1
  1725. -- dissect epoch time (4 bytes)
  1726. local epoch_time = buffer(offset, 4):le_uint()
  1727. subtree:add(f_epoch_time, epoch_time)
  1728. offset = offset + 4
  1729. -- dissect X axis raw rate sensor measurement (2 bytes)
  1730. local raw_rate_x = buffer(offset, 2):le_int()
  1731. subtree:add(f_raw_rate_x, raw_rate_x)
  1732. offset = offset + 2
  1733. -- dissect Y axis raw rate sensor measurement (2 bytes)
  1734. local raw_rate_y = buffer(offset, 2):le_int()
  1735. subtree:add(f_raw_rate_y, raw_rate_y)
  1736. offset = offset + 2
  1737. -- dissect Z axis raw rate sensor measurement (2 bytes)
  1738. local raw_rate_z = buffer(offset, 2):le_int()
  1739. subtree:add(f_raw_rate_z, raw_rate_z)
  1740. offset = offset + 2
  1741. end
  1742. end
  1743. ---------------------------------------------------------------------------------------------------------------
  1744. function adcs_dissector_16(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  1745. -- Define ProtoFields for the updated structure fields
  1746. local f_op_status = ProtoField.uint8("StarTrackerData.op_status", "Operation Status", base.DES)
  1747. local f_epoch_time = ProtoField.uint32("StarTrackerData.epoch_time", "Epoch Time", base.DES)
  1748. local f_measured_rate_x = ProtoField.int16("StarTrackerData.measured_rate_x", "Measured X Axis Rate", base.DEC)
  1749. local f_measured_rate_y = ProtoField.int16("StarTrackerData.measured_rate_y", "Measured Y Axis Rate", base.DEC)
  1750. local f_measured_rate_z = ProtoField.int16("StarTrackerData.measured_rate_z", "Measured Z Axis Rate", base.DEC)
  1751. -- Add the fields to the protocol
  1752. adcs_protocol.fields = {
  1753. f_op_status, f_epoch_time, f_measured_rate_x, f_measured_rate_y, f_measured_rate_z
  1754. }
  1755. -- Loop through the data (num_of_instance represents the number of instances to dissect)
  1756. for i = 1, num_of_instance do
  1757. -- Add the new structure data as a subtree
  1758. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  1759. -- dissect operation status (1 byte)
  1760. local op_status = buffer(offset, 1):le_uint()
  1761. subtree:add(f_op_status, op_status)
  1762. offset = offset + 1
  1763. -- dissect epoch time (4 bytes)
  1764. local epoch_time = buffer(offset, 4):le_uint()
  1765. subtree:add(f_epoch_time, epoch_time)
  1766. offset = offset + 4
  1767. -- dissect measured X axis rate (2 bytes), scaled by 0.01
  1768. local measured_rate_x_raw = buffer(offset, 2):le_int()
  1769. local measured_rate_x = measured_rate_x_raw -- Apply scaling factor
  1770. subtree:add(f_measured_rate_x, measured_rate_x)
  1771. offset = offset + 2
  1772. -- dissect measured Y axis rate (2 bytes), scaled by 0.01
  1773. local measured_rate_y_raw = buffer(offset, 2):le_int()
  1774. local measured_rate_y = measured_rate_y_raw -- Apply scaling factor
  1775. subtree:add(f_measured_rate_y, measured_rate_y)
  1776. offset = offset + 2
  1777. -- dissect measured Z axis rate (2 bytes), scaled by 0.01
  1778. local measured_rate_z_raw = buffer(offset, 2):le_int()
  1779. local measured_rate_z = measured_rate_z_raw -- Apply scaling factor
  1780. subtree:add(f_measured_rate_z, measured_rate_z)
  1781. offset = offset + 2
  1782. end
  1783. end
  1784. ------------------------------------------------------------------------------------------------------------------
  1785. function adcs_dissector_15(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
  1786. -- Define ProtoFields for the updated structure fields
  1787. local f_op_status = ProtoField.uint8("StarTrackerData.op_status", "Operation Status", base.DES)
  1788. local f_epoch_time = ProtoField.uint32("StarTrackerData.epoch_time", "Epoch Time", base.DES)
  1789. local f_raw_mag_x = ProtoField.int16("StarTrackerData.raw_mag_x", "Raw Magnetometer X Measurement", base.DEC)
  1790. local f_raw_mag_y = ProtoField.int16("StarTrackerData.raw_mag_y", "Raw Magnetometer Y Measurement", base.DEC)
  1791. local f_raw_mag_z = ProtoField.int16("StarTrackerData.raw_mag_z", "Raw Magnetometer Z Measurement", base.DEC)
  1792. -- Add the fields to the protocol
  1793. adcs_protocol.fields = {
  1794. f_op_status, f_epoch_time, f_raw_mag_x, f_raw_mag_y, f_raw_mag_z
  1795. }
  1796. -- Loop through the data (num_of_instance represents the number of instances to dissect)
  1797. for i = 1, num_of_instance do
  1798. -- Add the new structure data as a subtree
  1799. local subtree = tree:add(adcs_protocol, buffer(), "INSTANCE" ..i)
  1800. -- dissect operation status (1 byte)
  1801. local op_status = buffer(offset, 1):le_uint()
  1802. subtree:add(f_op_status, op_status)
  1803. offset = offset + 1
  1804. -- dissect epoch time (4 bytes)
  1805. local epoch_time = buffer(offset, 4):le_uint()
  1806. subtree:add(f_epoch_time, epoch_time)
  1807. offset = offset + 4
  1808. -- dissect raw magnetometer X measurement (2 bytes)
  1809. local raw_mag_x = buffer(offset, 2):le_int()
  1810. subtree:add(f_raw_mag_x, raw_mag_x)
  1811. offset = offset + 2
  1812. -- dissect raw magnetometer Y measurement (2 bytes)
  1813. local raw_mag_y = buffer(offset, 2):le_int()
  1814. subtree:add(f_raw_mag_y, raw_mag_y)
  1815. offset = offset + 2
  1816. -- dissect raw magnetometer Z measurement (2 bytes)
  1817. local raw_mag_z = buffer(offset, 2):le_int()
  1818. subtree:add(f_raw_mag_z, raw_mag_z)
  1819. offset = offset + 2
  1820. end
  1821. end
  1822. --------------------------------------------------------------------------------------------------------