adcs_dissector.lua 101 KB

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