12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276 |
- function adcs_dissector(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance, queue_id)
-
- if queue_id == 0 then
- require("adcs_dissector")
- adcs_dissector_0(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
-
- elseif queue_id == 1 then
- require("adcs_dissector")
- adcs_dissector_1(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
-
- elseif queue_id == 2 then
- require("adcs_dissector")
- adcs_dissector_2(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
-
- elseif queue_id == 3 then
- require("adcs_dissector")
- adcs_dissector_3(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
-
- elseif queue_id == 4 then
- require("adcs_dissector")
- adcs_dissector_4(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
-
- elseif queue_id == 5 then
- require("adcs_dissector")
- adcs_dissector_5(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
-
- elseif queue_id == 6 then
- require("adcs_dissector")
- adcs_dissector_6(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
-
- elseif queue_id == 7 then
- require("adcs_dissector")
- adcs_dissector_7(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- elseif queue_id == 8 then
- require("adcs_dissector")
- adcs_dissector_8(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
-
- elseif queue_id == 9 then
- require("adcs_dissector")
- adcs_dissector_9(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
-
- elseif queue_id == 10 then
- require("adcs_dissector")
- adcs_dissector_10(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
-
- elseif queue_id == 11 then
- require("adcs_dissector")
- adcs_dissector_11(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
-
- elseif queue_id == 12 then
- require("adcs_dissector")
- adcs_dissector_12(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
-
- elseif queue_id == 13 then
- require("adcs_dissector")
- adcs_dissector_13(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
-
- elseif queue_id == 14 then
- require("adcs_dissector")
- adcs_dissector_14(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- elseif queue_id == 15 then
- require("adcs_dissector")
- adcs_dissector_15(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- elseif queue_id == 16 then
- require("adcs_dissector")
- adcs_dissector_16(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- elseif queue_id == 17 then
- require("adcs_dissector")
- adcs_dissector_17(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- elseif queue_id == 18 then
- require("adcs_dissector")
- adcs_dissector_18(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- elseif queue_id == 19 then
- require("adcs_dissector")
- adcs_dissector_19(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- elseif queue_id == 20 then
- require("adcs_dissector")
- adcs_dissector_20(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- elseif queue_id == 21 then
- require("adcs_dissector")
- adcs_dissector_21(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- elseif queue_id == 22 then
- require("adcs_dissector")
- adcs_dissector_22(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- elseif queue_id == 23 then
- require("adcs_dissector")
- adcs_dissector_23(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- elseif queue_id == 24 then
- require("adcs_dissector")
- adcs_dissector_24(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- elseif queue_id == 25 then
- require("adcs_dissector")
- adcs_dissector_25(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- elseif queue_id == 26 then
- require("adcs_dissector")
- adcs_dissector_26(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- elseif queue_id == 27 then
- require("adcs_dissector")
- adcs_dissector_27(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- elseif queue_id == 28 then
- require("adcs_dissector")
- adcs_dissector_28(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- elseif queue_id == 29 then
- require("adcs_dissector")
- adcs_dissector_29(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- elseif queue_id == 30 then
- require("adcs_dissector")
- adcs_dissector_30(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- elseif queue_id == 31 then
- require("adcs_dissector")
- adcs_dissector_31(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- elseif queue_id == 32 then
- require("adcs_dissector")
- adcs_dissector_32(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- end
-
-
-
- end
-
-
- function adcs_dissector_0(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- local status_field = ProtoField.uint32("adcs_protocol.status", "Status", base.DEC)
- local time_field = ProtoField.uint32("adcs_protocol.time", "Time", base.DEC)
- local nadir_3v3_current_field = ProtoField.uint32("adcs_protocol.nadir_3v3_current", "Nadir Sensor 3V3 Current", base.DEC)
- local fss_3v3_current_field = ProtoField.uint32("adcs_protocol.fss_3v3_current", "FSS 3V3 Current", base.DEC)
- local nadir_sram_current_field = ProtoField.uint32("adcs_protocol.nadir_sram_current", "Nadir SRAM Current", base.DEC)
- local fss_sram_current_field = ProtoField.uint32("adcs_protocol.fss_sram_current", "FSS SRAM Current", base.DEC)
- -- Add the fields to the protocol's 'fields' table
- adcs_protocol.fields = {
- status_field,
- time_field,
- nadir_3v3_current_field,
- fss_3v3_current_field,
- nadir_sram_current_field,
- fss_sram_current_field
- }
-
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
-
- for i = 0, num_of_instance - 1 do
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- -- Dissect status
- local status = buffer(offset, 1):le_uint()
- subtree:add(status_field, status)
- offset = offset + 1
- -- Dissect time (4 bytes, little-endian)
- local time = buffer(offset, 4):le_uint()
- subtree:add(time_field, time)
- offset = offset + 4
- -- Dissect nadir 3V3 current (4 bytes, little-endian)
- local nadir_3v3_raw = buffer(offset, 2):le_uint()
- --local nadir_3v3_current = nadir_3v3_raw * 0.1 -- Apply multiplier
- subtree:add(nadir_3v3_current_field, nadir_3v3_raw)
- offset = offset + 2
- -- Dissect fss 3V3 current (4 bytes, little-endian)
- local fss_3v3_raw = buffer(offset, 2):le_uint()
- --local fss_3v3_current = fss_3v3_raw * 0.1 -- Apply multiplier
- subtree:add(fss_3v3_current_field, fss_3v3_raw)
- offset = offset + 2
- -- Dissect nadir SRAM current (4 bytes, little-endian)
- local nadir_sram_raw = buffer(offset, 2):le_uint()
- --local nadir_sram_current = nadir_sram_raw * 0.1 -- Apply multiplier
- subtree:add(nadir_sram_current_field, nadir_sram_raw)
- offset = offset + 2
- -- Dissect fss SRAM current (4 bytes, little-endian)
- local fss_sram_raw = buffer(offset, 2):le_uint()
- --local fss_sram_current = fss_sram_raw * 0.1 -- Apply multiplier
- subtree:add(fss_sram_current_field, fss_sram_raw)
- offset = offset + 2
-
- end
- end
- function adcs_dissector_1(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- local f_operation_status = ProtoField.uint32("adcs_dissector.operation_status", "Operation Status", base.DEC)
- local f_epoch_time = ProtoField.uint32("adcs_dissector.epoch_time", "Epoch Time", base.DEC)
- local f_3v_current = ProtoField.float("adcs_dissector.3v_current", "Current Value (3.3V)", base.DEC)
- local f_5v_current = ProtoField.float("adcs_dissector.5v_current", "Current Value (5V)", base.DEC)
- local f_vbat_current = ProtoField.float("adcs_dissector.vbat_current", "Vbat Current Value", base.DEC)
- -- Add fields to the protocol's 'fields' table
- adcs_protocol.fields = {
- f_operation_status,
- f_epoch_time,
- f_3v_current,
- f_5v_current,
- f_vbat_current
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
- for i = 0, num_of_instance - 1 do
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- local operation_status = buffer(offset, 1):le_uint()
- subtree:add(f_operation_status, operation_status)
- offset = offset + 1
- -- Dissect epoch time (4 bytes, little-endian)
- local epoch_time = buffer(offset, 4):le_uint()
- subtree:add(f_epoch_time, epoch_time)
- offset = offset + 4
- -- Dissect 3.3V current value (4 bytes, little-endian)
- local raw_3v_current = buffer(offset, 2):uint()
- --local formatted_3v_current = raw_3v_current * 0.1 -- Apply multiplier
- subtree:add(f_3v_current, raw_3v_current)
- offset = offset + 2
- -- Dissect 5V current value (4 bytes, little-endian)
- local raw_5v_current = buffer(offset, 2):uint()
- --local formatted_5v_current = raw_5v_current * 0.1 -- Apply multiplier
- subtree:add(f_5v_current, raw_5v_current)
- offset = offset + 2
- -- Dissect Vbat current value (4 bytes, little-endian)
- local raw_vbat_current = buffer(offset, 2):uint()
- --local formatted_vbat_current = raw_vbat_current * 0.1 -- Apply multiplier
- subtree:add(f_vbat_current, raw_vbat_current)
- offset = offset + 2
- end
- end
- function adcs_dissector_2(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- local f_operation_status = ProtoField.uint32("adcs_dissector.operation_status", "Operation Status", base.DEC)
- local f_epoch_time = ProtoField.uint32("adcs_dissector.epoch_time", "Epoch Time", base.DEC)
- local f_num_reaction_wheels = ProtoField.uint32("adcs_dissector.num_reaction_wheels", "Number of Reaction Wheel", base.DEC)
- local f_rw_current_1 = ProtoField.float("adcs_dissector.rw_current_1", "Reaction Wheel Current 1 (A)", base.DEC)
- local f_rw_current_2 = ProtoField.float("adcs_dissector.rw_current_2", "Reaction Wheel Current 2 (A)", base.DEC)
- local f_rw_current_3 = ProtoField.float("adcs_dissector.rw_current_3", "Reaction Wheel Current 3 (A)", base.DEC)
-
- adcs_protocol.fields = {
- f_operation_status,
- f_epoch_time,
- f_num_reaction_wheels,
- f_rw_current_1,
- f_rw_current_2,
- f_rw_current_3
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
-
- for i = 0, num_of_instance - 1 do
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- local operation_status = buffer(offset, 1):le_uint()
- subtree:add(f_operation_status, operation_status)
- offset = offset + 1
- -- Dissect epoch time (4 bytes, little-endian)
- local epoch_time = buffer(offset, 4):le_uint()
- subtree:add(f_epoch_time, epoch_time)
- offset = offset + 4
- -- Dissect number of reaction wheels (4 bytes, little-endian)
- local num_reaction_wheels = buffer(offset, 1):le_uint()
- subtree:add(f_num_reaction_wheels, num_reaction_wheels)
- offset = offset + 1
- -- Dissect Reaction Wheel Current 1 (4 bytes, little-endian)
- local rw_current_1_raw = buffer(offset, 2):le_uint()
- local rw_current_1 = rw_current_1_raw * 0.1 -- Apply multiplier
- subtree:add(f_rw_current_1, rw_current_1)
- offset = offset + 2
- -- Dissect Reaction Wheel Current 2 (4 bytes, little-endian)
- local rw_current_2_raw = buffer(offset, 2):le_uint()
- local rw_current_2 = rw_current_2_raw * 0.1 -- Apply multiplier
- subtree:add(f_rw_current_2, rw_current_2)
- offset = offset + 2
- -- Dissect Reaction Wheel Current 3 (4 bytes, little-endian)
- local rw_current_3_raw = buffer(offset, 2):le_uint()
- local rw_current_3 = rw_current_3_raw * 0.1 -- Apply multiplier
- subtree:add(f_rw_current_3, rw_current_3)
- offset = offset + 2
- end
- end
- function adcs_dissector_3(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- local f_operation_status = ProtoField.uint8("current_protocol.operation_status", "Operation Status", base.DEC)
- local f_epoch_time = ProtoField.uint32("current_protocol.epoch_time", "Epoch Time", base.DEC)
- local f_cube_star_current = ProtoField.uint16("current_protocol.cube_star_current", "Cube Star Current ", base.DEC)
- local f_magnetorquer_current = ProtoField.uint16("current_protocol.magnetorquer_current", "Magnetorquer Current ", base.DEC)
- local f_cube_star_mcu_temp = ProtoField.uint16("current_protocol.cube_star_mcu_temp", "Cube Star MCU Temperature ", base.DEC)
- adcs_protocol.fields = {
- f_operation_status,
- f_epoch_time,
- f_cube_star_current,
- f_magnetorquer_current,
- f_cube_star_mcu_temp }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
-
- for i = 0, num_of_instance - 1 do
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- subtree:add(f_operation_status, buffer(offset, 1):le_uint())
- offset = offset + 1 -- Update offset
- -- Epoch Time (4 bytes, UINT)
- subtree:add(f_epoch_time, buffer(offset, 4):le_uint())
- offset = offset + 4 -- Update offset
- -- Cube Star Current (2 bytes, UINT)
- local cube_star_current = buffer(offset, 2):le_uint() * 0.1 -- Apply the scaling factor (RAWVAL * 0.1)
- subtree:add(f_cube_star_current, cube_star_current)
- offset = offset + 2 -- Update offset
- -- Magnetorquer Current (2 bytes, UINT)
- local magnetorquer_current = buffer(offset, 2):le_uint() * 0.1 -- Apply the scaling factor (RAWVAL * 0.1)
- subtree:add(f_magnetorquer_current, magnetorquer_current)
- offset = offset + 2 -- Update offset
- -- Cube Star MCU Temperature (2 bytes, UINT)
- local cube_star_mcu_temp = buffer(offset, 2):le_uint() * 0.1 -- Apply the scaling factor (RAWVAL * 0.1)
- subtree:add(f_cube_star_mcu_temp, cube_star_mcu_temp)
- offset = offset + 2 -- Update offset
- end
- end
- function adcs_dissector_4(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- local f_operation_status = ProtoField.uint32("adcs_protocol.operation_status", "Operation Status", base.DEC)
- local f_epoch_time = ProtoField.uint32("adcs_protocol.epoch_time", "Epoch Time", base.DEC)
- local f_mcu_temperature = ProtoField.int16("adcs_protocol.mcu_temperature", "MCU Temperature ", base.DEC)
- local f_magnetometer_temperature = ProtoField.int16("adcs_protocol.magnetometer_temperature", "Magnetometer Temperature ", base.DEC)
- local f_redundant_magnetometer_temperature = ProtoField.int16("adcs_protocol.redundant_magnetometer_temperature", "Redundant Magnetometer Temperature ", base.DEC)
- -- Add the fields to the protocol
- adcs_protocol.fields = { f_operation_status, f_epoch_time, f_mcu_temperature, f_magnetometer_temperature, f_redundant_magnetometer_temperature }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
-
- for i = 0, num_of_instance - 1 do
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- subtree:add(f_operation_status, buffer(offset, 1):le_uint()) -- 1 bytes for Operation Status (UINT)
- offset = offset + 1
-
- subtree:add(f_epoch_time, buffer(offset, 4):le_uint()) -- 4 bytes for Epoch Time (UINT)
- offset = offset + 4
-
- -- Extract raw values for the temperatures (2 bytes each for INT)
- local mcu_temp = buffer(offset, 2):le_uint() * 0.01
- offset = offset + 2
-
- local magnetometer_temp = buffer(offset, 2):le_uint() * 0.01
- offset = offset + 2
-
- local redundant_magnetometer_temp = buffer(offset, 2):le_uint() * 0.01
- offset = offset + 2
-
- -- Add the temperature values to the tree with scaling applied
- subtree:add(f_mcu_temperature, mcu_temp)
- subtree:add(f_magnetometer_temperature, magnetometer_temp)
- subtree:add(f_redundant_magnetometer_temperature, redundant_magnetometer_temp)
- end
- end
- function adcs_dissector_5(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- local f_operation_status = ProtoField.uint8("adcs_protocol.operation_status", "Operation Status", base.DEC)
- local f_epoch_time = ProtoField.uint32("adcs_protocol.epoch_time", "Epoch Time", base.DEC)
- local f_raw_mag_x = ProtoField.uint16("adcs_protocol.raw_mag_x", "X Rate Sensor Temperature ", base.DEC)
- local f_raw_mag_y = ProtoField.uint16("adcs_protocol.raw_mag_y", "Y Rate Sensor Temperature ", base.DEC)
- local f_raw_mag_z = ProtoField.uint16("adcs_protocol.raw_mag_z", "Z Rate Sensor Temperature ", base.DEC)
- -- Add the fields to the protocol
- adcs_protocol.fields = { f_operation_status, f_epoch_time, f_raw_mag_x, f_raw_mag_y, f_raw_mag_z }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
- for i = 0, num_of_instance - 1 do
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- -- Operation Status (1 bytes, unsigned)
- subtree:add(f_operation_status, buffer(offset, 1):le_uint())
- offset = offset + 1
-
- -- Epoch Time (4 bytes, unsigned)
- subtree:add(f_epoch_time, buffer(offset, 4):le_uint())
- offset = offset + 4
- -- Raw Magnetometer X (2 bytes, signed)
- local raw_mag_x = buffer(offset, 2):le_int()
- subtree:add(f_raw_mag_x, raw_mag_x)
- offset = offset + 2
- -- Raw Magnetometer Y (4 bytes, signed)
- local raw_mag_y = buffer(offset, 2):le_int()
- subtree:add(f_raw_mag_y, raw_mag_y)
- offset = offset + 2
- -- Raw Magnetometer Z (4 bytes, signed)
- local raw_mag_z = buffer(offset, 2):le_int()
- subtree:add(f_raw_mag_z, raw_mag_z)
- offset = offset + 2
- end
- end
- function adcs_dissector_6(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- local f_operation_status = ProtoField.uint8("adcs_protocol.operation_status", "Operation Status", base.HEX)
- local f_epoch_time = ProtoField.uint32("adcs_protocol.epoch_time", "Epoch Time", base.DEC)
- local f_attitude_estimation_mode = ProtoField.uint8("adcs_protocol.attitude_estimation_mode", "Attitude Estimation Mode", base.DEC)
- local f_control_mode = ProtoField.uint8("adcs_protocol.control_mode", "Control Mode", base.DEC)
- local f_adcs_run_mode = ProtoField.uint8("adcs_protocol.adcs_run_mode", "ADCS Run Mode", base.DEC)
- local f_asgp4_mode = ProtoField.uint8("adcs_protocol.asgp4_mode", "ASGP4 Mode", base.DEC)
- -- Define boolean fields for enabled flags
- local f_cube_control_signal_enabled = ProtoField.bool("adcs_protocol.cube_control_signal_enabled", "Cube Control Signal Enabled")
- local f_cube_control_motor_enabled = ProtoField.bool("adcs_protocol.cube_control_motor_enabled", "Cube Control Motor Enabled")
- local f_cubesense1_enabled = ProtoField.bool("adcs_protocol.cubesense1_enabled", "Cubesense1 Enabled")
- local f_cubesense2_enabled = ProtoField.bool("adcs_protocol.cubesense2_enabled", "Cubesense2 Enabled")
- local f_cube_wheel1_enabled = ProtoField.bool("adcs_protocol.cube_wheel1_enabled", "Cube Wheel 1 Enabled")
- local f_cube_wheel2_enabled = ProtoField.bool("adcs_protocol.cube_wheel2_enabled", "Cube Wheel 2 Enabled")
- local f_cube_wheel3_enabled = ProtoField.bool("adcs_protocol.cube_wheel3_enabled", "Cube Wheel 3 Enabled")
- local f_cube_star_enabled = ProtoField.bool("adcs_protocol.cube_star_enabled", "Cube Star Enabled")
- local f_gps_receiver_enabled = ProtoField.bool("adcs_protocol.gps_receiver_enabled", "GPS Receiver Enabled")
- local f_gps_lna_power_enabled = ProtoField.bool("adcs_protocol.gps_lna_power_enabled", "GPS LNA Power Enabled")
- local f_motor_driver_enabled = ProtoField.bool("adcs_protocol.motor_driver_enabled", "Motor Driver Enabled")
- local f_sun_is_above_local_horizon = ProtoField.bool("adcs_protocol.sun_is_above_local_horizon", "Sun is Above Local Horizon")
- -- Communication error fields
- local f_cubesense1_comm_error = ProtoField.bool("adcs_protocol.cubesense1_comm_error", "Cubesense1 Communications Error")
- local f_cubesense2_comm_error = ProtoField.bool("adcs_protocol.cubesense2_comm_error", "Cubesense2 Communications Error")
- local f_cubcontrol_signal_comm_error = ProtoField.bool("adcs_protocol.cubcontrol_signal_comm_error", "CubeControl Signal Communications Error")
- local f_cubcontrol_motor_comm_error = ProtoField.bool("adcs_protocol.cubcontrol_motor_comm_error", "CubeControl Motor Communications Error")
- local f_cubewheel1_comm_error = ProtoField.bool("adcs_protocol.cubewheel1_comm_error", "Cube Wheel 1 Communications Error")
- local f_cubewheel2_comm_error = ProtoField.bool("adcs_protocol.cubewheel2_comm_error", "Cube Wheel 2 Communications Error")
- local f_cubewheel3_comm_error = ProtoField.bool("adcs_protocol.cubewheel2_comm_error", "Cube Wheel 3 Communications Error")
- local f_cubestar_comm_error = ProtoField.bool("adcs_protocol.cubewheel2_comm_error", "Cube star communications Error")
- local f_magnetometer_range_error = ProtoField.bool("adcs_protocol.magnetometer_range_error", "Magnetometer Range Error")
- local f_cam1_sram_overcurrent = ProtoField.bool("adcs_protocol.cam1_sram_overcurrent", "Cam1 SRAM Overcurrent Detected")
- local f_cam1_3v3_overcurrent = ProtoField.bool("adcs_protocol.cam1_3v3_overcurrent", "Cam1 3v3 Overcurrent Detected")
- local f_cam1_sensor_busy = ProtoField.bool("adcs_protocol.cam1_sensor_busy", "Cam1 Sensor Busy Error")
- local f_cam1_sensor_detection_error = ProtoField.bool("adcs_protocol.cam1_sensor_detection_error", "Cam1 Sensor Detection Error")
- local f_sun_sensor_range_error = ProtoField.bool("adcs_protocol.sun_sensor_range_error", "Sun Sensor Range Error")
- local f_cam2_sram_overcurrent = ProtoField.bool("adcs_protocol.cam2_sram_overcurrent", "Cam2 SRAM Overcurrent Detected")
- local f_cam2_3v3_overcurrent = ProtoField.bool("adcs_protocol.cam2_3v3_overcurrent", "Cam2 3v3 Overcurrent Detected")
- local f_cam2_sensor_busy = ProtoField.bool("adcs_protocol.cam2_sensor_busy", "Cam2 Sensor Busy Error")
- local f_cam2_sensor_detection_error = ProtoField.bool("adcs_protocol.cam2_sensor_detection_error", "Cam2 Sensor Detection Error")
- local f_nadir_sensor_range_error = ProtoField.bool("adcs_protocol.nadir_sensor_range_error", "Nadir Sensor Range Error")
- local f_rate_sensor_range_error = ProtoField.bool("adcs_protocol.rate_sensor_range_error", "Rate Sensor Range Error")
- local f_wheel_speed_range_error = ProtoField.bool("adcs_protocol.wheel_speed_range_error", "Wheel Speed Range Error")
- local f_coarse_sun_sensor_error = ProtoField.bool("adcs_protocol.coarse_sun_sensor_error", "Coarse Sun Sensor Error")
- local f_star_tracker_match_error = ProtoField.bool("adcs_protocol.star_tracker_match_error", "Star Tracker Match Error")
- local f_star_tracker_overcurrent = ProtoField.bool("adcs_protocol.star_tracker_overcurrent", "Star Tracker Overcurrent Detected")
- local f_orbit_parameters_invalid = ProtoField.bool("adcs_protocol.orbit_parameters_invalid", "Orbit Parameters are Invalid")
- local f_configuration_invalid = ProtoField.bool("adcs_protocol.configuration_invalid", "Configuration is Invalid")
- local f_control_mode_change_not_allowed = ProtoField.bool("adcs_protocol.control_mode_change_not_allowed", "Control Mode Change is not allowed")
- local f_estimator_change_not_allowed = ProtoField.bool("adcs_protocol.estimator_change_not_allowed", "Estimator Change is not allowed")
- -- Define Magnetometer Sampling Mode field (2 bytes)
- local f_magnetometer_sampling_mode = ProtoField.uint8("adcs_protocol.magnetometer_sampling_mode", "Magnetometer Sampling Mode", base.DEC)
- -- Define runtime error fields
- local f_cubesense1_runtime_error = ProtoField.bool("adcs_protocol.cubesense1_runtime_error", "CubeSense1 Runtime Error")
- local f_cubesense2_runtime_error = ProtoField.bool("adcs_protocol.cubesense2_runtime_error", "CubeSense2 Runtime Error")
- local f_cubecontrol_signal_runtime_error = ProtoField.bool("adcs_protocol.cubecontrol_signal_runtime_error", "CubeControl Signal Runtime Error")
- local f_cubecontrol_motor_runtime_error = ProtoField.bool("adcs_protocol.cubecontrol_motor_runtime_error", "CubeControl Motor Runtime Error")
- local f_cubewheel1_runtime_error = ProtoField.bool("adcs_protocol.cubewheel1_runtime_error", "CubeWheel1 Runtime Error")
- local f_a = ProtoField.bool("adcs_protocol.cubewheel1_runtime_error", "CubeWheel1 Runtime Error")
- local f_b = ProtoField.bool("adcs_protocol.cubewheel1_runtime_error", "CubeWheel1 Runtime Error")
- local f_cubewheel2_runtime_error = ProtoField.bool("adcs_protocol.cubewheel2_runtime_error", "CubeWheel2 Runtime Error")
- local f_cubewheel3_runtime_error = ProtoField.bool("adcs_protocol.cubewheel3_runtime_error", "CubeWheel3 Runtime Error")
- local f_cubestar_runtime_error = ProtoField.bool("adcs_protocol.cubestar_runtime_error", "CubeStar Runtime Error")
- local f_magnetometer_error = ProtoField.bool("adcs_protocol.magnetometer_error", "Magnetometer Error")
- local f_rate_sensor_failure = ProtoField.bool("adcs_protocol.rate_sensor_failure", "Rate Sensor Failure")
- -- Add all fields to the protocol
- adcs_protocol.fields = {
- f_operation_status,
- f_epoch_time,
- f_attitude_estimation_mode,
- f_control_mode,
- f_adcs_run_mode,
- f_asgp4_mode,
- f_cube_control_signal_enabled,
- f_cube_control_motor_enabled,
- f_cubesense1_enabled,
- f_cubesense2_enabled,
- f_cube_wheel1_enabled,
- f_cube_wheel2_enabled,
- f_cube_wheel3_enabled,
- f_cube_star_enabled,
- f_gps_receiver_enabled,
- f_gps_lna_power_enabled,
- f_motor_driver_enabled,
- f_sun_is_above_local_horizon,
- f_cubesense1_comm_error,
- f_cubesense2_comm_error,
- f_cubcontrol_signal_comm_error,
- f_cubcontrol_motor_comm_error,
- f_cubewheel1_comm_error,
- f_cubewheel2_comm_error,
- f_cubewheel3_comm_error,
- f_cubestar_comm_error,
- f_magnetometer_range_error,
- f_cam1_sram_overcurrent,
- f_cam1_3v3_overcurrent,
- f_cam1_sensor_busy,
- f_cam1_sensor_detection_error,
- f_sun_sensor_range_error,
- f_cam2_sram_overcurrent,
- f_cam2_3v3_overcurrent,
- f_cam2_sensor_busy,
- f_cam2_sensor_detection_error,
- f_nadir_sensor_range_error,
- f_rate_sensor_range_error,
- f_wheel_speed_range_error,
- f_coarse_sun_sensor_error,
- f_star_tracker_match_error,
- f_star_tracker_overcurrent,
- f_orbit_parameters_invalid,
- f_a,
- f_b,
- f_configuration_invalid,
- f_control_mode_change_not_allowed,
- f_estimator_change_not_allowed,
- f_magnetometer_sampling_mode,
- f_cubesense1_runtime_error,
- f_cubesense2_runtime_error,
- f_cubecontrol_signal_runtime_error,
- f_cubecontrol_motor_runtime_error,
- f_cubewheel1_runtime_error,
- f_cubewheel2_runtime_error,
- f_cubewheel3_runtime_error,
- f_cubestar_runtime_error,
- f_magnetometer_error,
- f_rate_sensor_failure
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
-
- for i = 0, num_of_instance - 1 do
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
-
- subtree:add(f_operation_status, buffer(offset, 1):le_uint())
- offset = offset + 1
- subtree:add(f_epoch_time, buffer(offset, 4):le_uint())
- offset = offset + 4
- -- Parse Attitude Estimation Mode (8 bits)
- subtree:add(f_attitude_estimation_mode, buffer(offset, 1):le_uint())
- offset = offset + 1
- -- Parse Control Mode (8 bits)
- subtree:add(f_control_mode, buffer(offset, 1):le_uint())
- offset = offset + 1
- -- Parse ADCS Run Mode (2 bits / 2 bytes)
- local a=buffer(offset, 1):le_uint()
- subtree:add(f_adcs_run_mode, a & 0x03)
- --offset = offset + 2
- -- Parse ASGP4 Mode (2 bits / 2 bytes)
- subtree:add(f_asgp4_mode, (a >> 2) & 0x03)
-
- subtree:add(f_cube_control_signal_enabled, (a >> 4) & 0x01)
-
- subtree:add(f_cube_control_motor_enabled,(a >> 5) & 0x01 )
-
- subtree:add(f_cubesense1_enabled,(a >> 6) & 0x01 )
-
- subtree:add(f_cubesense2_enabled,(a >> 7) & 0x01 )
-
- offset = offset + 1
- -- Parse CubeWheel Enabled Flags
- a=buffer(offset, 1):le_uint()
-
- subtree:add(f_cube_wheel1_enabled, (a >> 0) & 0x01)
- --offset = offset + 1
- a=buffer(offset, 1):le_uint()
- subtree:add(f_cube_wheel2_enabled, (a >> 1) & 0x01)
-
- a=buffer(offset, 1):le_uint()
- subtree:add(f_cube_wheel3_enabled, (a >> 2) & 0x01)
- --offset = offset + 1
- subtree:add(f_cube_star_enabled, (a >> 3) & 0x01)
- --offset = offset + 1
- -- Parse GPS and Motor Driver enabled flags
- subtree:add(f_gps_receiver_enabled, (a >> 4) & 0x01)
- --offset = offset + 1
- -- Continue adding each field to the subtree with the appropriate offsets and bitfields
- -- Define additional boolean fields for enabled flags and errors
- subtree:add(f_gps_lna_power_enabled, (a >> 5) & 0x01) -- GPS LNA Power Enabled
- subtree:add(f_motor_driver_enabled, (a >> 6) & 0x01) -- Motor Driver Enabled
- subtree:add(f_sun_is_above_local_horizon, (a >> 7) & 0x01) -- Sun is Above Local Horizon
- offset = offset + 1
- a = buffer(offset, 1):le_uint()
- -- Communication error flags
- subtree:add(f_cubesense1_comm_error, (a >> 0) & 0x01) -- Cubesense1 Communications Error
- subtree:add(f_cubesense2_comm_error, (a >> 1) & 0x01) -- Cubesense2 Communications Error
- a=buffer(offset, 1):le_uint()
- subtree:add(f_cubcontrol_signal_comm_error, (a >> 2) & 0x01) -- CubeControl Signal Communications Error
- subtree:add(f_cubcontrol_motor_comm_error, (a >> 3) & 0x01) -- CubeControl Motor Communications Error
- subtree:add(f_cubewheel1_comm_error, (a >> 4) & 0x01) -- Cube Wheel1 Communications Error
- subtree:add(f_cubewheel2_comm_error, (a >> 5) & 0x01) -- Cube Wheel2 Communications Error
- subtree:add(f_cubewheel3_comm_error, (a >> 6) & 0x01)
- subtree:add(f_cubestar_comm_error, (a >> 7) & 0x01)
- offset = offset + 1
- a=buffer(offset, 1):le_uint()
- subtree:add(f_magnetometer_range_error, (a >> 0) & 0x01) -- Magnetometer Range Error
- --offset = offset + 1
- -- Sensor errors
- subtree:add(f_cam1_sram_overcurrent, (a >> 1) & 0x01) -- Cam1 SRAM Overcurrent Detected
- --offset = offset + 1
- --offset = offset + 1
- --a=buffer(offset,1):le_uint()
- subtree:add(f_cam1_3v3_overcurrent, (a >> 2) & 0x01) -- Cam1 3v3 Overcurrent Detected
- subtree:add(f_cam1_sensor_busy, (a >> 3) & 0x01) -- Cam1 Sensor Busy Error
- subtree:add(f_cam1_sensor_detection_error, (a >> 4) & 0x01 ) -- Cam1 Sensor Detection Error
- subtree:add(f_sun_sensor_range_error, (a >> 5) & 0x01) -- Sun Sensor Range Error
- subtree:add(f_cam2_sram_overcurrent, (a >> 6) & 0x01) -- Cam2 SRAM Overcurrent Detected
- subtree:add(f_cam2_3v3_overcurrent, (a >> 7) & 0x01) -- Cam2 3v3 Overcurrent Detected
- offset=offset+1
- local data=buffer(offset, 1):le_uint()
- subtree:add(f_cam2_sensor_busy, (data >> 0) & 0x01) -- Cam2 Sensor Busy Error
- --offset = offset + 1
- subtree:add(f_cam2_sensor_detection_error, (data >> 1) & 0x01) -- Cam2 Sensor Detection Error
- --offset = offset + 1
- --local data = buffer(offset, 1):le_uint()
- subtree:add(f_nadir_sensor_range_error, (data >> 2) & 0x01) -- Nadir Sensor Range Error
- subtree:add(f_rate_sensor_range_error, (data >> 3) & 0x01) -- Rate Sensor Range Error
- subtree:add(f_wheel_speed_range_error,(data >> 4) & 0x01) -- Wheel Speed Range Error
- -- Error flags for sensors and system issues
- subtree:add(f_coarse_sun_sensor_error,(data >> 5) & 0x01) -- Coarse Sun Sensor Error
- subtree:add(f_star_tracker_match_error, (data >> 6) & 0x01) -- Star Tracker Match Error
- subtree:add(f_star_tracker_overcurrent, (data >> 7) & 0x01) -- Star Tracker Overcurrent Detected
- offset = offset + 1
- data = buffer(offset, 1):le_uint()
- subtree:add(f_orbit_parameters_invalid, (data >> 0) & 0x01) -- Orbit Parameters are Invalid
- subtree:add(f_configuration_invalid,(data >> 1) & 0x01) -- Configuration is Invalid
- --offset = offset + 1
- --data = buffer(offset, 1):le_uint()
- subtree:add(f_control_mode_change_not_allowed, (data >> 2) & 0x01) -- Control Mode Change is Not Allowed
- subtree:add(f_estimator_change_not_allowed, (data >> 3) & 0x01) -- Estimator Change is Not Allowed
- -- Magnetometer Sampling Mode (2 bits)
- subtree:add(f_magnetometer_sampling_mode, (data >> 4) & 0x03) -- Current Magnetometer Sampling Mode
- -- Runtime error flags for sensors and systems
- subtree:add(f_a, (data >> 6 ) & 0x01) -- CubeSense1 Runtime Error
- subtree:add(f_b, (data >> 7) & 0x01) -- CubeSense2 Runtime Error
- offset=offset+1
- data = buffer(offset, 1):le_uint()
- subtree:add(f_cubesense1_runtime_error, (data >> 0) & 0x01) -- CubeSense1 Runtime Error
- subtree:add(f_cubesense2_runtime_error, (data >> 1) & 0x01) -- CubeSense2 Runtime Error
- subtree:add(f_cubecontrol_signal_runtime_error, (data >> 2) & 0x01) -- CubeControl Signal Runtime Error
- subtree:add(f_cubecontrol_motor_runtime_error, (data >> 3) & 0x01) -- CubeControl Motor Runtime Error
- subtree:add(f_cubewheel1_runtime_error,(data >> 4) & 0x01) -- CubeWheel1 Runtime Error
- subtree:add(f_cubewheel2_runtime_error, (data >> 5) & 0x01) -- CubeWheel2 Runtime Error
- --offset = offset + 1
- --data = buffer(offset, 1):le_uint()
- subtree:add(f_cubewheel3_runtime_error, (data >> 6) & 0x01) -- CubeWheel3 Runtime Error
- subtree:add(f_cubestar_runtime_error, (data >> 7) & 0x01) -- CubeStar Runtime Error
- offset=offset+1
- data = buffer(offset, 1):le_uint()
- -- Magnetometer and sensor errors
- subtree:add(f_magnetometer_error, (data >> 0) & 0x01) -- Magnetometer Error
- subtree:add(f_rate_sensor_failure, (data >> 1) & 0x01) -- Rate Sensor Failure
- offset = offset + 1
- end
- end
- function adcs_dissector_7(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- local f_operation_status = ProtoField.uint8("adcs_protocol.operation_status", "Operation Status", base.DEC)
- local f_epoch_time = ProtoField.uint32("adcs_protocol.epoch_time", "Epoch Time", base.DEC)
- local f_x_sun_vector = ProtoField.float("adcs_protocol.x_sun_vector", "X Sun Vector", base.DEC)
- local f_y_sun_vector = ProtoField.float("adcs_protocol.y_sun_vector", "Y Sun Vector", base.DEC)
- local f_z_sun_vector = ProtoField.float("adcs_protocol.z_sun_vector", "Z Sun Vector", base.DEC)
- -- Register fields to the protocol
- adcs_protocol.fields = { f_operation_status, f_epoch_time, f_x_sun_vector, f_y_sun_vector, f_z_sun_vector }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
-
- for i = 0, num_of_instance - 1 do
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- subtree:add(f_operation_status, buffer(offset, 1):le_uint()) -- 1 byte for Operation Status
- offset = offset + 1 -- Update offset
- -- Epoch Time (4 bytes, UINT)
- subtree:add(f_epoch_time, buffer(offset, 4):le_uint()) -- 4 bytes for Epoch Time
- offset = offset + 4 -- Update offset
- -- X-axis Sun Vector (2 bytes, INT) with scaling factor (RAWVAL * 0.001)
- local x_sun_vector_raw = buffer(offset, 2):le_int() -- Read the 2-byte INT value
- local x_sun_vector = x_sun_vector_raw * 0.001 -- Apply scaling factor
- subtree:add(f_x_sun_vector, x_sun_vector) -- Add to subtree with scaling
- offset = offset + 2 -- Update offset
- -- Y-axis Sun Vector (2 bytes, INT) with scaling factor (RAWVAL * 0.001)
- local y_sun_vector_raw = buffer(offset, 2):le_int() -- Read the 2-byte INT value
- local y_sun_vector = y_sun_vector_raw * 0.001 -- Apply scaling factor
- subtree:add(f_y_sun_vector, y_sun_vector) -- Add to subtree with scaling
- offset = offset + 2 -- Update offset
- -- Z-axis Sun Vector (2 bytes, INT) with scaling factor (RAWVAL * 0.001)
- local z_sun_vector_raw = buffer(offset, 2):le_int() -- Read the 2-byte INT value
- local z_sun_vector = z_sun_vector_raw * 0.001 -- Apply scaling factor
- subtree:add(f_z_sun_vector, z_sun_vector) -- Add to subtree with scaling
- offset = offset + 2 -- Update offset
- end
- end
- function adcs_dissector_8(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- local f_operation_status = ProtoField.uint8("adcs_protocol.operation_status", "Operation Status", base.DEC)
- local f_epoch_time = ProtoField.uint32("adcs_protocol.epoch_time", "Epoch Time", base.DEC)
- local f_css_ad_value_1 = ProtoField.uint8("myprotocol.css_ad_value_1", "Raw css 1 ", base.DEC)
- local f_css_ad_value_2 = ProtoField.uint8("myprotocol.css_ad_value_2", "Raw css 2", base.DEC)
- local f_css_ad_value_3 = ProtoField.uint8("myprotocol.css_ad_value_3", "Raw css 3", base.DEC)
- local f_css_ad_value_4 = ProtoField.uint8("myprotocol.css_ad_value_4", "Raw css 4", base.DEC)
- local f_css_ad_value_5 = ProtoField.uint8("myprotocol.css_ad_value_5", "Raw css 5", base.DEC)
- local f_css_ad_value_6 = ProtoField.uint8("myprotocol.css_ad_value_6", "Raw css 6", base.DEC)
- local f_css_ad_value_7 = ProtoField.uint8("myprotocol.css_ad_value_7", "Raw css 7", base.DEC)
- local f_css_ad_value_8 = ProtoField.uint8("myprotocol.css_ad_value_8", "Raw css 8", base.DEC)
- local f_css_ad_value_9 = ProtoField.uint8("myprotocol.css_ad_value_9", "Raw css 9", base.DEC)
- local f_css_ad_value_10 = ProtoField.uint8("myprotocol.css_ad_value_10", "Raw css 10", base.DEC)
- adcs_protocol.fields = { f_operation_status,
- f_epoch_time, f_css_ad_value_1,
- f_css_ad_value_2,
- f_css_ad_value_3,
- f_css_ad_value_4,
- f_css_ad_value_5,
- f_css_ad_value_6,
- f_css_ad_value_7,
- f_css_ad_value_8,
- f_css_ad_value_9,
- f_css_ad_value_10
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
-
- for i = 0, num_of_instance - 1 do
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- subtree:add(f_operation_status, buffer(offset, 1):le_uint()) -- 1 byte for Operation Status
- offset = offset + 1 -- Update offset
- -- Epoch Time (4 bytes, UINT)
- subtree:add(f_epoch_time, buffer(offset, 4):le_uint()) -- 4 bytes for Epoch Time
- offset = offset + 4 -- Update offset
- -- CSS A/D Values (10 individual uint8 fields)
- subtree:add(f_css_ad_value_1, buffer(offset, 1))
- offset = offset + 1 -- Update offset
- subtree:add(f_css_ad_value_2, buffer(offset, 1))
- offset = offset + 1 -- Update offset
- subtree:add(f_css_ad_value_3, buffer(offset, 1))
- offset = offset + 1 -- Update offset
- subtree:add(f_css_ad_value_4, buffer(offset, 1))
- offset = offset + 1 -- Update offset
- subtree:add(f_css_ad_value_5, buffer(offset, 1))
- offset = offset + 1 -- Update offset
- subtree:add(f_css_ad_value_6, buffer(offset, 1))
- offset = offset + 1 -- Update offset
- subtree:add(f_css_ad_value_7, buffer(offset, 1))
- offset = offset + 1 -- Update offset
- subtree:add(f_css_ad_value_8, buffer(offset, 1))
- offset = offset + 1 -- Update offset
- subtree:add(f_css_ad_value_9, buffer(offset, 1))
- offset = offset + 1 -- Update offset
- subtree:add(f_css_ad_value_10, buffer(offset, 1))
- offset = offset + 1
- end
- end
- function adcs_dissector_9(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- -- Define the fields for the protocol
- local f_operation_status = ProtoField.uint8("adcs_protocol.operation_status", "Operation Status", base.DEC)
- local f_epoch_time = ProtoField.uint32("adcs_protocol.epoch_time", "Epoch Time", base.DEC)
- local f_sun_x = ProtoField.float("adcs_protocol.sun_x", "FSS X axis vector ", base.DEC)
- local f_sun_y = ProtoField.float("adcs_protocol.sun_y", "FSS y axis vector", base.DEC)
- local f_sun_z = ProtoField.float("adcs_protocol.sun_z", "FSS z axis vector", base.DEC)
- adcs_protocol.fields = {
- f_operation_status, f_epoch_time,
- f_sun_x, f_sun_y, f_sun_z }
-
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
-
- for i = 0, num_of_instance - 1 do
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
-
- subtree:add(f_operation_status, buffer(offset, 1):le_uint())
- offset = offset + 1 -- Update offset
- -- Epoch Time (4 bytes, UINT)
- subtree:add(f_epoch_time, buffer(offset, 4):le_uint())
- offset = offset + 4 -- Update offset
- -- Sun X (2 bytes, INT, formatted as RAWVAL * 0.001)
- local raw_sun_x = buffer(offset, 2):le_int()
- local sun_x = raw_sun_x * 0.001
- subtree:add(f_sun_x, sun_x)
- offset = offset + 2 -- Update offset
- -- Sun Y (2 bytes, INT, formatted as RAWVAL * 0.001)
- local raw_sun_y = buffer(offset, 2):le_int()
- local sun_y = raw_sun_y * 0.001
- subtree:add(f_sun_y, sun_y)
- offset = offset + 2 -- Update offset
- -- Sun Z (2 bytes, INT, formatted as RAWVAL * 0.001)
- local raw_sun_z = buffer(offset, 2):le_int()
- local sun_z = raw_sun_z * 0.001
- subtree:add(f_sun_z, sun_z)
- offset = offset + 2 -- Update offs
- end
- end
- function adcs_dissector_10(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- local f_operation_status = ProtoField.uint8("adcs_protocol.operation_status", "Operation Status", base.DEC)
- local f_epoch_time = ProtoField.uint32("adcs_protocol.epoch_time", "Epoch Time", base.DEC)
- local f_fss_raw_x_angle = ProtoField.int16("adcs_protocol.fss_raw_x_angle", "FSS Raw X Angle", base.DEC)
- local f_fss_raw_y_angle = ProtoField.int16("adcs_protocol.fss_raw_y_angle", "FSS Raw Y Angle", base.DEC)
- local f_fss_capture_status = ProtoField.uint8("adcs_protocol.fss_capture_status", "FSS Capture Status", base.DEC)
- local f_fss_detection_result = ProtoField.uint8("adcs_protocol.fss_detection_result", "FSS Detection Result", base.DEC)
- -- Add the protocol fields to the protocol
- adcs_protocol.fields = {
- f_operation_status,
- f_epoch_time,
- f_fss_raw_x_angle,
- f_fss_raw_y_angle,
- f_fss_capture_status,
- f_fss_detection_result
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
-
- for i = 0, num_of_instance - 1 do
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- subtree:add(f_operation_status, buffer(offset, 1):le_uint())
- offset = offset + 1 -- Update offset
- -- Epoch Time (4 bytes, UINT)
- subtree:add(f_epoch_time, buffer(offset, 4):le_uint())
- offset = offset + 4 -- Update offset
- -- FSS Raw X Angle (2 bytes, INT)
- subtree:add(f_fss_raw_x_angle, buffer(offset, 2):le_int())
- offset = offset + 2 -- Update offset
- -- FSS Raw Y Angle (2 bytes, INT)
- subtree:add(f_fss_raw_y_angle, buffer(offset, 2):le_int())
- offset = offset + 2 -- Update offset
- -- FSS Capture Status (1 byte, ENUM)
- local capture_status = buffer(offset, 1):le_uint()
- subtree:add(f_fss_capture_status, capture_status)
- --subtree:add_expert_info(PI_INFO, PI_WARN, "FSS Capture Status: " .. capture_status_enum[capture_status] or "Unknown")
- offset = offset + 1 -- Update offset
- -- FSS Detection Result (1 byte, ENUM)
- local detection_result = buffer(offset, 1):le_uint()
- subtree:add(f_fss_detection_result, detection_result)
- --subtree:add_expert_info(PI_INFO, PI_WARN, "FSS Detection Result: " .. detection_result_enum[detection_result] or "Unknown")
- offset = offset + 1 -- Update offset
- end
- end
- function adcs_dissector_11(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- local f_operation_status = ProtoField.uint8("adcs_protocol.operation_status", "Operation Status", base.DEC)
- local f_epoch_time = ProtoField.uint32("adcs_protocol.epoch_time", "Epoch Time", base.DEC)
- local f_x_axis_nadir_vector = ProtoField.int16("adcs_protocol.x_axis_nadir_vector", "X axis Nadir Vector ", base.DEC)
- local f_y_axis_nadir_vector = ProtoField.int16("adcs_protocol.y_axis_nadir_vector", "Y axis Nadir Vector ", base.DEC)
- local f_z_axis_nadir_vector = ProtoField.int16("adcs_protocol.z_axis_nadir_vector", "Z axis Nadir Vector ", base.DEC)
- -- Add the protocol fields to the protocol
- adcs_protocol.fields = {
- f_operation_status,
- f_epoch_time,
- f_x_axis_nadir_vector,
- f_y_axis_nadir_vector,
- f_z_axis_nadir_vector
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
-
- for i = 0, num_of_instance - 1 do
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- subtree:add(f_operation_status, buffer(offset, 1):le_uint())
- offset = offset + 1 -- Update offset
- -- Epoch Time (4 bytes, UINT)
- subtree:add(f_epoch_time, buffer(offset, 4):le_uint())
- offset = offset + 4 -- Update offset
- -- X axis Nadir Vector (2 bytes, INT) *0.001 (formatted value)
- local x_axis_raw = buffer(offset, 2):le_int()
- local x_axis_nadir = x_axis_raw * 0.001 -- Apply the formatting to the raw value
- subtree:add(f_x_axis_nadir_vector, x_axis_raw)
- --subtree:add(PI_INFO, PI_WARN, string.format("X axis Nadir vector: %.3f", x_axis_nadir))
- offset = offset + 2 -- Update offset
- -- Y axis Nadir Vector (2 bytes, INT) *0.001 (formatted value)
- local y_axis_raw = buffer(offset, 2):le_int()
- local y_axis_nadir = y_axis_raw * 0.001 -- Apply the formatting to the raw value
- subtree:add(f_y_axis_nadir_vector, y_axis_raw)
- --subtree:add(PI_INFO, PI_WARN, string.format("Y axis Nadir vector: %.3f", y_axis_nadir))
- offset = offset + 2 -- Update offset
- -- Z axis Nadir Vector (2 bytes, INT) *0.001 (formatted value)
- local z_axis_raw = buffer(offset, 2):le_int()
- local z_axis_nadir = z_axis_raw * 0.001 -- Apply the formatting to the raw value
- subtree:add(f_z_axis_nadir_vector, z_axis_raw)
- --subtree:add(PI_INFO, PI_WARN, string.format("Z axis Nadir vector: %.3f", z_axis_nadir))
- offset = offset + 2 -- Update offset
-
- end
- end
- function adcs_dissector_12(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- local f_operation_status = ProtoField.uint8("adcs_protocol.operation_status", "Operation Status", base.DEC)
- local f_epoch_time = ProtoField.uint32("adcs_protocol.epoch_time", "Epoch Time", base.DEC)
- local f_nadir_x_angle = ProtoField.int16("adcs_protocol.nadir_x_angle", "Nadir Sensor Raw X Angle", base.DEC)
- local f_nadir_y_angle = ProtoField.int16("adcs_protocol.nadir_y_angle", "Nadir Sensor Raw Y Angle", base.DEC)
- local f_nadir_capture_status = ProtoField.uint8("adcs_protocol.nadir_capture_status", "Nadir Sensor Capture Status", base.DEC)
- local f_nadir_detection_result = ProtoField.uint8("adcs_protocol.nadir_detection_result", "Nadir Sensor Detection Result", base.DEC)
- -- Add the protocol fields to the protocol
- adcs_protocol.fields = {
- f_operation_status,
- f_epoch_time,
- f_nadir_x_angle,
- f_nadir_y_angle,
- f_nadir_capture_status,
- f_nadir_detection_result
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
-
- for i = 0, num_of_instance - 1 do
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- subtree:add(f_operation_status, buffer(offset, 1):le_uint())
- offset = offset + 1 -- Update offset
- -- Epoch Time (4 bytes, UINT)
- subtree:add(f_epoch_time, buffer(offset, 4):le_uint())
- offset = offset + 4 -- Update offset
- -- Nadir Sensor Raw X Angle (2 bytes, INT)
- local x_raw = buffer(offset, 2):le_int()
- subtree:add(f_nadir_x_angle, x_raw)
- offset = offset + 2 -- Update offset
- -- Nadir Sensor Raw Y Angle (2 bytes, INT)
- local y_raw = buffer(offset, 2):le_int()
- subtree:add(f_nadir_y_angle, y_raw)
- offset = offset + 2 -- Update offset
- -- Nadir Sensor Capture Status (1 byte, ENUM)
- local capture_status = buffer(offset, 1):le_uint()
- subtree:add(f_nadir_capture_status, capture_status)
- offset = offset + 1 -- Update offset
- -- Nadir Sensor Detection Result (1 byte, ENUM)
- local detection_result = buffer(offset, 1):le_uint()
- subtree:add(f_nadir_detection_result, detection_result)
- offset = offset + 1
- end
- end
- function adcs_dissector_13(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- local f_operation_status = ProtoField.uint8("magnetic_field_protocol.operation_status", "Operation Status", base.DEC)
- local f_epoch_time = ProtoField.uint32("magnetic_field_protocol.epoch_time", "Epoch Time", base.DEC)
- local f_magnetic_field_x = ProtoField.float("adcs_protocol.magnetic_field_x", "X Axis Magnetic Field Vector", base.DEC)
- local f_magnetic_field_y = ProtoField.float("adcs_protocol.magnetic_field_y", "Y Axis Magnetic Field Vector", base.DEC)
- local f_magnetic_field_z = ProtoField.float("adcs_protocol.magnetic_field_z", "Z Axis Magnetic Field Vector", base.DEC)
- -- Add the protocol fields to the protocol
- adcs_protocol.fields = {
- f_operation_status,
- f_epoch_time,
- f_magnetic_field_x,
- f_magnetic_field_y,
- f_magnetic_field_z
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
-
- for i = 0, num_of_instance - 1 do
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- subtree:add(f_operation_status, buffer(offset, 1):le_uint())
- offset = offset + 1 -- Update offset
- -- Epoch Time (4 bytes, UINT)
- subtree:add(f_epoch_time, buffer(offset, 4):le_uint())
- offset = offset + 4 -- Update offset
- -- X Axis Magnetic Field Vector (2 bytes, INT)
- local x_field = buffer(offset, 2):le_int() -- Apply the scaling factor (RAWVAL * 0.01)
- local x_field1 = x_field * 0.01
- subtree:add(f_magnetic_field_x, x_field1)
- offset = offset + 2 -- Update offset
- -- Y Axis Magnetic Field Vector (2 bytes, INT)
- local y_field = buffer(offset, 2):le_int() -- Apply the scaling factor (RAWVAL * 0.01)
- local y_field1 = y_field * 0.01
- subtree:add(f_magnetic_field_y, y_field1)
- offset = offset + 2 -- Update offset
- -- Z Axis Magnetic Field Vector (2 bytes, INT)
- local z_field = buffer(offset, 2):le_int() -- Apply the scaling factor (RAWVAL * 0.01)
- local z_field1 = y_field * 0.01
- subtree:add(f_magnetic_field_z, z_field1)
- offset = offset + 2 -- Update offset
- end
-
- end
- function adcs_dissector_32(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- -- Define ProtoFields for each field in the structure
- local f_op_status = ProtoField.uint8("OperationData.op_status", "Operation Status", base.DEC)
- local f_epoch_time = ProtoField.uint32("OperationData.epoch_time", "Epoch Time", base.DEC)
- local f_eci_x_velocity = ProtoField.int16("OperationData.eci_x_velocity", "ECI Referenced X Velocity", base.DEC)
- local f_eci_y_velocity = ProtoField.int16("OperationData.eci_y_velocity", "ECI Referenced Y Velocity", base.DEC)
- local f_eci_z_velocity = ProtoField.int16("OperationData.eci_z_velocity", "ECI Referenced Z Velocity", base.DEC)
- -- Add the fields to the protocol
- adcs_protocol.fields = {
- f_op_status, f_epoch_time, f_eci_x_velocity, f_eci_y_velocity, f_eci_z_velocity
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
- for i = 0, num_of_instance - 1 do
- -- Add the operation data subtree
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- -- dissect operation status (1 byte, UINT)
- local op_status = buffer(offset, 1):le_uint()
- subtree:add(f_op_status, op_status)
- offset = offset + 1
- -- dissect epoch time (4 bytes, UINT)
- local epoch_time = buffer(offset, 4):le_uint()
- subtree:add(f_epoch_time, epoch_time)
- offset = offset + 4
- -- dissect ECI X velocity (2 bytes, INT)
- local eci_x_velocity = buffer(offset, 2):le_int()
- subtree:add(f_eci_x_velocity, eci_x_velocity)
- offset = offset + 2
- -- dissect ECI Y velocity (2 bytes, INT)
- local eci_y_velocity = buffer(offset, 2):le_int()
- subtree:add(f_eci_y_velocity, eci_y_velocity)
- offset = offset + 2
- -- dissect ECI Z velocity (2 bytes, INT)
- local eci_z_velocity = buffer(offset, 2):le_int()
- subtree:add(f_eci_z_velocity, eci_z_velocity)
- offset = offset + 2
- end
- end
- ----------------------------------------------------------------------------------------------------------------
- function adcs_dissector_31(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- -- Define ProtoFields for each field in the structure
- local f_op_status = ProtoField.uint8("OperationCoordinates.op_status", "Operation Status", base.DEC)
- local f_epoch_time = ProtoField.uint32("OperationCoordinates.epoch_time", "Epoch Time", base.DEC)
- local f_eci_x_coord = ProtoField.int16("OperationCoordinates.eci_x_coord", "ECI Referenced X Coordinate", base.DEC)
- local f_eci_y_coord = ProtoField.int16("OperationCoordinates.eci_y_coord", "ECI Referenced Y Coordinate", base.DEC)
- local f_eci_z_coord = ProtoField.int16("OperationCoordinates.eci_z_coord", "ECI Referenced Z Coordinate", base.DEC)
- -- Add the fields to the protocol
- adcs_protocol.fields = {
- f_op_status, f_epoch_time, f_eci_x_coord, f_eci_y_coord, f_eci_z_coord
- }
-
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
- for i = 0, num_of_instance - 1 do
- -- Add the operation data coordinates subtree
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- -- dissect operation status (1 byte, UINT)
- local op_status = buffer(offset, 1):le_uint()
- subtree:add(f_op_status, op_status)
- offset = offset + 1
- -- dissect epoch time (4 bytes, UINT)
- local epoch_time = buffer(offset, 4):le_uint()
- subtree:add(f_epoch_time, epoch_time)
- offset = offset + 4
- -- dissect ECI X coordinate (2 bytes, INT)
- local eci_x_coord = buffer(offset, 2):le_int()
- subtree:add(f_eci_x_coord, eci_x_coord)
- offset = offset + 2
- -- dissect ECI Y coordinate (2 bytes, INT)
- local eci_y_coord = buffer(offset, 2):le_int()
- subtree:add(f_eci_y_coord, eci_y_coord)
- offset = offset + 2
- -- dissect ECI Z coordinate (2 bytes, INT)
- local eci_z_coord = buffer(offset, 2):le_int()
- subtree:add(f_eci_z_coord, eci_z_coord)
- offset = offset + 2
- end
- end
- -------------------------------------------------------------------------------------------------------------
- -- Define the dissector function for the new structure
- function adcs_dissector_30(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- -- Define ProtoFields for the new structure fields
- local f_op_status = ProtoField.uint8("PowerSystemData.op_status", "Operation Status", base.DES)
- local f_epoch_time = ProtoField.uint32("PowerSystemData.epoch_time", "Epoch Time", base.DES)
- local f_x_coord = ProtoField.int16("PowerSystemData.x_coord", "ECEF X Coordinate", base.DEC)
- local f_y_coord = ProtoField.int16("PowerSystemData.y_coord", "ECEF Y Coordinate", base.DEC)
- local f_z_coord = ProtoField.int16("PowerSystemData.z_coord", "ECEF Z Coordinate", base.DEC)
- -- Add the fields to the protocol
- adcs_protocol.fields = {
- f_op_status, f_epoch_time, f_x_coord, f_y_coord, f_z_coord
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
- -- Loop through the data (data3 could represent the number of iterations or packets to dissect)
- for i = 0, num_of_instance - 1 do
- -- Add the new structure data as a subtree
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- -- dissect operation status (1 byte)
- local op_status = buffer(offset, 1):le_uint()
- subtree:add(f_op_status, op_status)
- offset = offset + 1
- -- dissect epoch time (4 bytes)
- local epoch_time = buffer(offset, 4):le_uint()
- subtree:add(f_epoch_time, epoch_time)
- offset = offset + 4
- -- dissect ECEF X coordinate (2 bytes)
- local x_coord = buffer(offset, 2):le_int()
- subtree:add(f_x_coord, x_coord)
- offset = offset + 2
- -- dissect ECEF Y coordinate (2 bytes)
- local y_coord = buffer(offset, 2):le_int()
- subtree:add(f_y_coord, y_coord)
- offset = offset + 2
- -- dissect ECEF Z coordinate (2 bytes)
- local z_coord = buffer(offset, 2):le_int()
- subtree:add(f_z_coord, z_coord)
- offset = offset + 2
- end
- end
- ----------------------------------------------------------------------------------------------------------------------------------
- -- Define the dissector function for the new structure
- function adcs_dissector_22(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- -- Define ProtoFields for the new structure fields
- local f_op_status = ProtoField.uint8("PowerSystemData.op_status", "Operation Status", base.DES)
- local f_epoch_time = ProtoField.uint32("PowerSystemData.epoch_time", "Epoch Time", base.DES)
- local f_roll_angle = ProtoField.int16("PowerSystemData.roll_angle", "Commanded Roll Angle (degrees)", base.DEC)
- local f_pitch_angle = ProtoField.int16("PowerSystemData.pitch_angle", "Commanded Pitch Angle (degrees)", base.DEC)
- local f_yaw_angle = ProtoField.int16("PowerSystemData.yaw_angle", "Commanded Yaw Angle (degrees)", base.DEC)
- -- Add the fields to the protocol
- adcs_protocol.fields = {
- f_op_status, f_epoch_time, f_roll_angle, f_pitch_angle, f_yaw_angle
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
- -- Loop through the data (data3 could represent the number of iterations or packets to dissect)
- for i = 0, num_of_instance - 1 do
- -- Add the new structure data as a subtree
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- -- dissect operation status (1 byte)
- local op_status = buffer(offset, 1):le_uint()
- subtree:add(f_op_status, op_status)
- offset = offset + 1
- -- dissect epoch time (4 bytes)
- local epoch_time = buffer(offset, 4):le_uint()
- subtree:add(f_epoch_time, epoch_time)
- offset = offset + 4
- -- dissect commanded roll angle (2 bytes)
- local roll_angle_raw = buffer(offset, 2):le_int()
- local roll_angle = roll_angle_raw -- Apply scaling factor
- subtree:add(f_roll_angle, roll_angle)
- offset = offset + 2
- -- dissect commanded pitch angle (2 bytes)
- local pitch_angle_raw = buffer(offset, 2):le_int()
- local pitch_angle = pitch_angle_raw -- Apply scaling factor
- subtree:add(f_pitch_angle, pitch_angle)
- offset = offset + 2
- -- dissect commanded yaw angle (2 bytes)
- local yaw_angle_raw = buffer(offset, 2):le_int()
- local yaw_angle = yaw_angle_raw -- Apply scaling factor
- subtree:add(f_yaw_angle, yaw_angle)
- offset = offset + 2
- end
- end
- ----------------------------------------------------------------------------------------------------------
- -- Define the dissector function for the new structure
- function adcs_dissector_29(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- -- Define ProtoFields for the new structure fields
- local f_op_status = ProtoField.uint8("PowerSystemData.op_status", "Operation Status", base.DES)
- local f_epoch_time = ProtoField.uint32("PowerSystemData.epoch_time", "Epoch Time", base.DES)
- local f_innovation_x = ProtoField.int16("PowerSystemData.innovation_x", "Innovation Vector X", base.DEC)
- local f_innovation_y = ProtoField.int16("PowerSystemData.innovation_y", "Innovation Vector Y", base.DEC)
- local f_innovation_z = ProtoField.int16("PowerSystemData.innovation_z", "Innovation Vector Z", base.DEC)
- -- Add the fields to the protocol
- adcs_protocol.fields = {
- f_op_status, f_epoch_time, f_innovation_x, f_innovation_y, f_innovation_z
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
- -- Loop through the data (data3 could represent the number of iterations or packets to dissect)
- for i = 0,num_of_instance - 1 do
- -- Add the new structure data as a subtree
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- -- dissect operation status (1 byte)
- local op_status = buffer(offset, 1):le_uint()
- subtree:add(f_op_status, op_status)
- offset = offset + 1
- -- dissect epoch time (4 bytes)
- local epoch_time = buffer(offset, 4):le_uint()
- subtree:add(f_epoch_time, epoch_time)
- offset = offset + 4
- -- dissect innovation vector X (2 bytes)
- local innovation_x_raw = buffer(offset, 2):le_int()
- local innovation_x = innovation_x_raw -- Apply scaling factor
- subtree:add(f_innovation_x, innovation_x)
- offset = offset + 2
- -- dissect innovation vector Y (2 bytes)
- local innovation_y_raw = buffer(offset, 2):le_int()
- local innovation_y = innovation_y_raw -- Apply scaling factor
- subtree:add(f_innovation_y, innovation_y)
- offset = offset + 2
- -- dissect innovation vector Z (2 bytes)
- local innovation_z_raw = buffer(offset, 2):le_int()
- local innovation_z = innovation_z_raw -- Apply scaling factor
- subtree:add(f_innovation_z, innovation_z)
- offset = offset + 2
- end
- end
- ---------------------------------------------------------------------------------------------------
- -- Define the dissector function for the new structure
- function adcs_dissector_28(buffer, pinfo, tree, adcs_protocol, offset,num_of_instance)
- -- Define ProtoFields for the new structure fields
- local f_op_status = ProtoField.uint8("PowerSystemData.op_status", "Operation Status", base.DES)
- local f_epoch_time = ProtoField.uint32("PowerSystemData.epoch_time", "Epoch Time", base.DES)
- local f_x_gyro_bias = ProtoField.int16("PowerSystemData.x_gyro_bias", "Estimated X-Gyro Bias", base.DEC)
- local f_y_gyro_bias = ProtoField.int16("PowerSystemData.y_gyro_bias", "Estimated Y-Gyro Bias", base.DEC)
- local f_z_gyro_bias = ProtoField.int16("PowerSystemData.z_gyro_bias", "Estimated Z-Gyro Bias", base.DEC)
- -- Add the fields to the protocol
- adcs_protocol.fields = {
- f_op_status, f_epoch_time, f_x_gyro_bias, f_y_gyro_bias, f_z_gyro_bias
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
- -- Loop through the data (data3 could represent the number of iterations or packets to dissect)
- for i = 0, num_of_instance - 1 do
- -- Add the new structure data as a subtree
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- -- dissect operation status (1 byte)
- local op_status = buffer(offset, 1):le_uint()
- subtree:add(f_op_status, op_status)
- offset = offset + 1
- -- dissect epoch time (4 bytes)
- local epoch_time = buffer(offset, 4):le_uint()
- subtree:add(f_epoch_time, epoch_time)
- offset = offset + 4
- -- dissect estimated x-gyro bias (2 bytes)
- local x_gyro_bias_raw = buffer(offset, 2):le_int()
- local x_gyro_bias = x_gyro_bias_raw -- Apply scaling factor
- subtree:add(f_x_gyro_bias, x_gyro_bias)
- offset = offset + 2
- -- dissect estimated y-gyro bias (2 bytes)
- local y_gyro_bias_raw = buffer(offset, 2):le_int()
- local y_gyro_bias = y_gyro_bias_raw -- Apply scaling factor
- subtree:add(f_y_gyro_bias, y_gyro_bias)
- offset = offset + 2
- -- dissect estimated z-gyro bias (2 bytes)
- local z_gyro_bias_raw = buffer(offset, 2):le_int()
- local z_gyro_bias = z_gyro_bias_raw -- Apply scaling factor
- subtree:add(f_z_gyro_bias, z_gyro_bias)
- offset = offset + 2
- end
- end
- ----------------------------------------------------------------------------------------------------------------------
- --2.2.1.2.27 ADCS_HM_QUAT_ERR_VEC 26-27
- -- Define the dissector function for the new structure
- function adcs_dissector_27(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- -- Define ProtoFields for the new structure fields
- local f_op_status = ProtoField.uint8("PowerSystemData.op_status", "Operation Status", base.DES)
- local f_epoch_time = ProtoField.uint32("PowerSystemData.epoch_time", "Epoch Time", base.DES)
- local f_q1_error = ProtoField.int16("PowerSystemData.q1_error", "Quaternion Error - Q1", base.DEC)
- local f_q2_error = ProtoField.int16("PowerSystemData.q2_error", "Quaternion Error - Q2", base.DEC)
- local f_q3_error = ProtoField.int16("PowerSystemData.q3_error", "Quaternion Error - Q3", base.DEC)
- -- Add the fields to the protocol
- adcs_protocol.fields = {
- f_op_status, f_epoch_time, f_q1_error, f_q2_error, f_q3_error
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
- -- Loop through the data (data3 could represent the number of iterations or packets to dissect)
- for i = 0, num_of_instance - 1 do
- -- Add the new structure data as a subtree
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- -- dissect operation status (1 byte)
- local op_status = buffer(offset, 1):le_uint()
- subtree:add(f_op_status, op_status)
- offset = offset + 1
- -- dissect epoch time (4 bytes)
- local epoch_time = buffer(offset, 4):le_uint()
- subtree:add(f_epoch_time, epoch_time)
- offset = offset + 4
- -- dissect quaternion error Q1 (2 bytes)
- local q1_error_raw = buffer(offset, 2):le_int()
- local q1_error = q1_error_raw -- Apply scaling factor
- subtree:add(f_q1_error, q1_error)
- offset = offset + 2
- -- dissect quaternion error Q2 (2 bytes)
- local q2_error_raw = buffer(offset, 2):le_int()
- local q2_error = q2_error_raw -- Apply scaling factor
- subtree:add(f_q2_error, q2_error)
- offset = offset + 2
- -- dissect quaternion error Q3 (2 bytes)
- local q3_error_raw = buffer(offset, 2):le_int()
- local q3_error = q3_error_raw -- Apply scaling factor
- subtree:add(f_q3_error, q3_error)
- offset = offset + 2
- end
- end
- -----------------------------------------------------------------------------------------------------------------------------
- --2.2.1.2.26 ADCS_HM_IGRF_MOD_VEC 25-14
- -- Define the dissector function for the new structure
- function adcs_dissector_14(buffer, pinfo, tree, adcs_protocol, offset,num_of_instance)
- -- Define ProtoFields for the new structure fields
- local f_op_status = ProtoField.uint8("PowerSystemData.op_status", "Operation Status", base.DES)
- local f_epoch_time = ProtoField.uint32("PowerSystemData.epoch_time", "Epoch Time", base.DES)
- local f_x_magnetic_field = ProtoField.int16("PowerSystemData.x_magnetic_field", "X axis Modelled Magnetic Field Vector", base.DEC)
- local f_y_magnetic_field = ProtoField.int16("PowerSystemData.y_magnetic_field", "Y axis Modelled Magnetic Field Vector", base.DEC)
- local f_z_magnetic_field = ProtoField.int16("PowerSystemData.z_magnetic_field", "Z axis Modelled Magnetic Field Vector", base.DEC)
- -- Add the fields to the protocol
- adcs_protocol.fields = {
- f_op_status, f_epoch_time, f_x_magnetic_field, f_y_magnetic_field, f_z_magnetic_field
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
- -- Loop through the data (data3 could represent the number of iterations or packets to dissect)
- for i = 0, num_of_instance - 1 do
- -- Add the new structure data as a subtree
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- -- dissect operation status (1 byte)
- local op_status = buffer(offset, 1):le_uint()
- subtree:add(f_op_status, op_status)
- offset = offset + 1
- -- dissect epoch time (4 bytes)
- local epoch_time = buffer(offset, 4):le_uint()
- subtree:add(f_epoch_time, epoch_time)
- offset = offset + 4
- -- dissect x-axis magnetic field vector (2 bytes)
- local x_magnetic_field_raw = buffer(offset, 2):le_int()
- local x_magnetic_field = x_magnetic_field_raw -- Apply scaling factor
- subtree:add(f_x_magnetic_field, x_magnetic_field)
- offset = offset + 2
- -- dissect y-axis magnetic field vector (2 bytes)
- local y_magnetic_field_raw = buffer(offset, 2):le_int()
- local y_magnetic_field = y_magnetic_field_raw -- Apply scaling factor
- subtree:add(f_y_magnetic_field, y_magnetic_field)
- offset = offset + 2
- -- dissect z-axis magnetic field vector (2 bytes)
- local z_magnetic_field_raw = buffer(offset, 2):le_int()
- local z_magnetic_field = z_magnetic_field_raw -- Apply scaling factor
- subtree:add(f_z_magnetic_field, z_magnetic_field)
- offset = offset + 2
- end
- end
- ---------------------------------------------------------------------------------------------------------------------
- --2.2.1.2.25 ADCS_HM_POS_LLH 24-26
- -- Define the dissector function for the new structure
- function adcs_dissector_26(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- -- Define ProtoFields for the new structure fields
- local f_op_status = ProtoField.uint8("PowerSystemData.op_status", "Operation Status", base.DES)
- local f_epoch_time = ProtoField.uint32("PowerSystemData.epoch_time", "Epoch Time", base.DES)
- local f_geo_longitude = ProtoField.int16("PowerSystemData.geo_longitude", "Geocentric Longitude", base.DEC)
- local f_geo_latitude = ProtoField.int16("PowerSystemData.geo_latitude", "Geocentric Latitude", base.DEC)
- local f_geo_altitude = ProtoField.int16("PowerSystemData.geo_altitude", "Geocentric Altitude", base.DEC)
- -- Add the fields to the protocol
- adcs_protocol.fields = {
- f_op_status, f_epoch_time, f_geo_longitude, f_geo_latitude, f_geo_altitude
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
- -- Loop through the data (data3 could represent the number of iterations or packets to dissect)
- for i = 0, num_of_instance - 1 do
- -- Add the new structure data as a subtree
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- -- dissect operation status (1 byte)
- local op_status = buffer(offset, 1):le_uint()
- subtree:add(f_op_status, op_status)
- offset = offset + 1
- -- dissect epoch time (4 bytes)
- local epoch_time = buffer(offset, 4):le_uint()
- subtree:add(f_epoch_time, epoch_time)
- offset = offset + 4
- -- dissect geocentric longitude (2 bytes)
- local geo_longitude_raw = buffer(offset, 2):le_int()
- local geo_longitude = geo_longitude_raw -- Apply scaling factor
- subtree:add(f_geo_longitude, geo_longitude)
- offset = offset + 2
- -- dissect geocentric latitude (2 bytes)
- local geo_latitude_raw = buffer(offset, 2):le_int()
- local geo_latitude = geo_latitude_raw -- Apply scaling factor
- subtree:add(f_geo_latitude, geo_latitude)
- offset = offset + 2
- -- dissect geocentric altitude (2 bytes)
- local geo_altitude_raw = buffer(offset, 2):le_int()
- local geo_altitude = geo_altitude_raw -- Apply scaling factor
- subtree:add(f_geo_altitude, geo_altitude)
- offset = offset + 2
- end
- end
- ----------------------------------------------------------------------------------------------------------
- --2.2.1.2.24 ADCS_HM_RAW_STAR_TRKR_MEAS 23-20
- function adcs_dissector_20(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- -- Define ProtoFields for the updated structure fields
- local f_op_status = ProtoField.uint8("StarTrackerData.op_status", "Operation Status", base.DES)
- local f_epoch_time = ProtoField.uint32("StarTrackerData.epoch_time", "Epoch Time", base.DES)
- local f_num_stars_detected = ProtoField.uint8("StarTrackerData.num_stars_detected", "Number of Stars Detected", base.DES)
- local f_star_image_noise = ProtoField.uint8("StarTrackerData.star_image_noise", "Star Image Noise", base.DES)
- local f_invalid_star = ProtoField.uint8("StarTrackerData.invalid_star", "Invalid Star", base.DES)
- local f_num_stars_identified = ProtoField.uint8("StarTrackerData.num_stars_identified", "Number of Stars Identified", base.DES)
- local f_ident_mode = ProtoField.uint8("StarTrackerData.ident_mode", "Identification Mode", base.ENUM)
- local f_image_dark_value = ProtoField.uint8("StarTrackerData.image_dark_value", "Image Dark Value", base.DES)
- -- Define ProtoFields for flags (1 byte with individual boolean flags)
- local f_flags = ProtoField.uint8("StarTrackerData.flags", "Flags", base.HEX)
- -- Define ProtoFields for star confidence and magnitudes
- local f_star_conf_1 = ProtoField.uint8("StarTrackerData.star_conf_1", "Star 1 Confidence", base.PERCENT)
- local f_star_conf_2 = ProtoField.uint8("StarTrackerData.star_conf_2", "Star 2 Confidence", base.PERCENT)
- local f_star_conf_3 = ProtoField.uint8("StarTrackerData.star_conf_3", "Star 3 Confidence", base.PERCENT)
- -- Define ProtoFields for instrument magnitudes
- local f_instrument_mag_1 = ProtoField.uint16("StarTrackerData.instrument_mag_1", "Instrument Magnitude Star 1", base.DEC)
- local f_instrument_mag_2 = ProtoField.uint16("StarTrackerData.instrument_mag_2", "Instrument Magnitude Star 2", base.DEC)
- local f_instrument_mag_3 = ProtoField.uint16("StarTrackerData.instrument_mag_3", "Instrument Magnitude Star 3", base.DEC)
- -- Define ProtoFields for capture, detection, and identification
- local f_capture = ProtoField.uint16("StarTrackerData.capture", "Capture", base.DEC)
- local f_detection = ProtoField.uint16("StarTrackerData.detection", "Detection", base.DEC)
- local f_identification = ProtoField.uint16("StarTrackerData.identification", "Identification", base.DEC)
- -- Define ProtoFields for the estimated rates and attitudes (X, Y, Z axes, Q1, Q2, Q3)
- local f_est_rate_x = ProtoField.int16("StarTrackerData.est_rate_x", "Estimated Rate X-axis", base.DEC)
- local f_est_rate_y = ProtoField.int16("StarTrackerData.est_rate_y", "Estimated Rate Y-axis", base.DEC)
- local f_est_rate_z = ProtoField.int16("StarTrackerData.est_rate_z", "Estimated Rate Z-axis", base.DEC)
- local f_est_attitude_q1 = ProtoField.int16("StarTrackerData.est_attitude_q1", "Estimated Attitude Q1", base.DEC)
- local f_est_attitude_q2 = ProtoField.int16("StarTrackerData.est_attitude_q2", "Estimated Attitude Q2", base.DEC)
- local f_est_attitude_q3 = ProtoField.int16("StarTrackerData.est_attitude_q3", "Estimated Attitude Q3", base.DEC)
- -- Define ProtoFields for star catalog and centroid information
- local f_catalogue_number = ProtoField.uint16("StarTrackerData.catalogue_number", "Catalogue Number of Star", base.DEC)
- local f_x_centroid = ProtoField.int16("StarTrackerData.x_centroid", "X Centroid of Star", base.DEC)
- local f_y_centroid = ProtoField.int16("StarTrackerData.y_centroid", "Y Centroid of Star", base.DEC)
- -- Define ProtoField for sample period
- local f_sample_period = ProtoField.uint16("StarTrackerData.sample_period", "Sample Period", base.DEC)
- -- Add the fields to the protocol
- adcs_protocol.fields = {
- f_op_status, f_epoch_time, f_num_stars_detected, f_star_image_noise, f_invalid_star,
- f_num_stars_identified, f_ident_mode, f_image_dark_value, f_flags,
- f_star_conf_1, f_star_conf_2, f_star_conf_3,
- f_instrument_mag_1, f_instrument_mag_2, f_instrument_mag_3,
- f_capture, f_detection, f_identification,
- f_est_rate_x, f_est_rate_y, f_est_rate_z,
- f_est_attitude_q1, f_est_attitude_q2, f_est_attitude_q3,
- f_catalogue_number, f_x_centroid, f_y_centroid, f_sample_period
- }
-
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
- -- Loop through the data (data3 could represent the number of iterations or packets to dissect)
- for i = 0, num_of_instance - 1 do
- -- Add the new structure data as a subtree
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- -- dissect operation status (1 byte)
- local op_status = buffer(offset, 1):le_uint()
- subtree:add(f_op_status, op_status)
- offset = offset + 1
- -- dissect epoch time (4 bytes)
- local epoch_time = buffer(offset, 4):le_uint()
- subtree:add(f_epoch_time, epoch_time)
- offset = offset + 4
- -- dissect number of stars detected (1 byte)
- local num_stars_detected = buffer(offset, 1):le_uint()
- subtree:add(f_num_stars_detected, num_stars_detected)
- offset = offset + 1
- -- dissect star image noise (1 byte)
- local star_image_noise = buffer(offset, 1):le_uint()
- subtree:add(f_star_image_noise, star_image_noise)
- offset = offset + 1
- -- dissect invalid star (1 byte)
- local invalid_star = buffer(offset, 1):le_uint()
- subtree:add(f_invalid_star, invalid_star)
- offset = offset + 1
- -- dissect number of stars identified (1 byte)
- local num_stars_identified = buffer(offset, 1):le_uint()
- subtree:add(f_num_stars_identified, num_stars_identified)
- offset = offset + 1
- -- dissect identification mode (1 byte, enum)
- local ident_mode = buffer(offset, 1):le_uint()
- subtree:add(f_ident_mode, ident_mode)
- offset = offset + 1
- -- dissect image dark value (1 byte)
- local image_dark_value = buffer(offset, 1):le_uint()
- subtree:add(f_image_dark_value, image_dark_value)
- offset = offset + 1
- -- dissect flags (8 flags, 1 byte)
- local flags = buffer(offset, 1):le_uint()
- subtree:add(f_flags, flags) -- in this each bit represents a value
- offset = offset + 1
- -- dissect star confidences (1 byte each)
- local star_conf_1 = buffer(offset, 1):le_uint()
- subtree:add(f_star_conf_1, star_conf_1)
- offset = offset + 1
- local star_conf_2 = buffer(offset, 1):le_uint()
- subtree:add(f_star_conf_2, star_conf_2)
- offset = offset + 1
- local star_conf_3 = buffer(offset, 1):le_uint()
- subtree:add(f_star_conf_3, star_conf_3)
- offset = offset + 1
- -- dissect instrument magnitudes (2 bytes each)
- local instrument_mag_1 = buffer(offset, 2):le_uint()
- subtree:add(f_instrument_mag_1, instrument_mag_1)
- offset = offset + 2
- local instrument_mag_2 = buffer(offset, 2):le_uint()
- subtree:add(f_instrument_mag_2, instrument_mag_2)
- offset = offset + 2
- local instrument_mag_3 = buffer(offset, 2):le_uint()
- subtree:add(f_instrument_mag_3, instrument_mag_3)
- offset = offset + 2
- -- dissect capture, detection, and identification (2 bytes each)
- local capture = buffer(offset, 2):le_uint()
- subtree:add(f_capture, capture)
- offset = offset + 2
- local detection = buffer(offset, 2):le_uint()
- subtree:add(f_detection, detection)
- offset = offset + 2
- local identification = buffer(offset, 2):le_uint()
- subtree:add(f_identification, identification)
- offset = offset + 2
- -- dissect estimated rate X-axis, Y-axis, Z-axis (2 bytes each)
- local est_rate_x_raw = buffer(offset, 2):le_int()
- local est_rate_x = est_rate_x_raw -- Apply scaling factor
- subtree:add(f_est_rate_x, est_rate_x)
- offset = offset + 2
- local est_rate_y_raw = buffer(offset, 2):le_int()
- local est_rate_y = est_rate_y_raw -- Apply scaling factor
- subtree:add(f_est_rate_y, est_rate_y)
- offset = offset + 2
- local est_rate_z_raw = buffer(offset, 2):le_int()
- local est_rate_z = est_rate_z_raw -- Apply scaling factor
- subtree:add(f_est_rate_z, est_rate_z)
- offset = offset + 2
- -- dissect estimated attitude (Q1, Q2, Q3)
- local est_attitude_q1_raw = buffer(offset, 2):le_int()
- local est_attitude_q1 = est_attitude_q1_raw -- Apply scaling factor
- subtree:add(f_est_attitude_q1, est_attitude_q1)
- offset = offset + 2
- local est_attitude_q2_raw = buffer(offset, 2):le_int()
- local est_attitude_q2 = est_attitude_q2_raw -- Apply scaling factor
- subtree:add(f_est_attitude_q2, est_attitude_q2)
- offset = offset + 2
- local est_attitude_q3_raw = buffer(offset, 2):le_int()
- local est_attitude_q3 = est_attitude_q3_raw -- Apply scaling factor
- subtree:add(f_est_attitude_q3, est_attitude_q3)
- offset = offset + 2
- -- dissect catalogue number (2 bytes)
- local catalogue_number = buffer(offset, 2):le_uint()
- subtree:add(f_catalogue_number, catalogue_number)
- offset = offset + 2
- -- dissect centroids (X, Y)
- local x_centroid = buffer(offset, 2):le_int()
- subtree:add(f_x_centroid, x_centroid)
- offset = offset + 2
- local y_centroid = buffer(offset, 2):le_int()
- subtree:add(f_y_centroid, y_centroid)
- offset = offset + 2
- -- dissect sample period (2 bytes)
- local sample_period = buffer(offset, 2):le_uint()
- subtree:add(f_sample_period, sample_period)
- offset = offset + 2
- end
- end
- -------------------------------------------------------------------------------------------------------------------------------
- ------------------------------------------------------------------------------------------------------------------------------------------
- --2.2.1.2.22 ADCS_HM_MGTRQR_CMD 21-25
- -- Define the dissector function for the Magnetorquer data
- function adcs_dissector_25(buffer, pinfo, tree,adcs_protocol, offset, num_of_instance)
- -- Define ProtoFields for the new structure fields
- local f_op_status = ProtoField.uint8("MagnetorquerData.op_status", "Operation Status", base.DES)
- local f_epoch_time = ProtoField.uint32("MagnetorquerData.epoch_time", "Epoch Time", base.DES)
- local f_x_magnetorquer_time = ProtoField.int16("MagnetorquerData.x_magnetorquer_time", "X Magnetorquer Commanded On-time (10ms)", base.DEC)
- local f_y_magnetorquer_time = ProtoField.int16("MagnetorquerData.y_magnetorquer_time", "Y Magnetorquer Commanded On-time (10ms)", base.DEC)
- local f_z_magnetorquer_time = ProtoField.int16("MagnetorquerData.z_magnetorquer_time", "Z Magnetorquer Commanded On-time (10ms)", base.DEC)
- -- Add the fields to the protocol
- adcs_protocol.fields = {
- f_op_status, f_epoch_time, f_x_magnetorquer_time, f_y_magnetorquer_time, f_z_magnetorquer_time
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
- for i = 0,num_of_instance - 1 do
- -- Add the new structure data as a subtree
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- -- dissect operation status (1 byte)
- local op_status = buffer(offset, 1):le_uint()
- subtree:add(f_op_status, op_status)
- offset = offset + 1
- -- dissect epoch time (4 bytes)
- local epoch_time = buffer(offset, 4):le_uint()
- subtree:add(f_epoch_time, epoch_time)
- offset = offset + 4
- -- dissect X Magnetorquer Commanded on-time (2 bytes)
- local x_magnetorquer_time = buffer(offset, 2):le_int()
- subtree:add(f_x_magnetorquer_time, x_magnetorquer_time)
- offset = offset + 2
- -- dissect Y Magnetorquer Commanded on-time (2 bytes)
- local y_magnetorquer_time = buffer(offset, 2):le_int()
- subtree:add(f_y_magnetorquer_time, y_magnetorquer_time)
- offset = offset + 2
- -- dissect Z Magnetorquer Commanded on-time (2 bytes)
- local z_magnetorquer_time = buffer(offset, 2):le_int()
- subtree:add(f_z_magnetorquer_time, z_magnetorquer_time)
- offset = offset + 2
- end
- end
- -----------------------------------------------------------------------------------------
- --2.2.1.2.21 ADCS_HM_RW_SPEED_CMD 20-24
- -- Define the dissector function for the Reaction Wheel data
- function adcs_dissector_24(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- -- Define ProtoFields for the new structure fields
- local f_op_status = ProtoField.uint8("ReactionWheelData.op_status", "Operation Status", base.DES)
- local f_epoch_time = ProtoField.uint32("ReactionWheelData.epoch_time", "Epoch Time", base.DES)
- local f_num_reaction_wheels = ProtoField.uint8("ReactionWheelData.num_reaction_wheels", "Number of Reaction Wheels", base.DES)
- local f_wheel_speed = ProtoField.uint16("ReactionWheelData.wheel_speed_", "Measured Wheel Speed ", base.DEC)
- -- Define the ProtoField for the array of Measured Wheel Speeds (N = 3, each 2 bytes)
- -- Add the fields to the protocol
- adcs_protocol.fields = {
- f_op_status, f_epoch_time, f_num_reaction_wheels, f_wheel_speed
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
- for i = 0,num_of_instance - 1 do
- -- Add the new structure data as a subtree
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- -- dissect operation status (1 byte)
- local op_status = buffer(offset, 1):le_uint()
- subtree:add(f_op_status, op_status)
- offset = offset + 1
- -- dissect epoch time (4 bytes)
- local epoch_time = buffer(offset, 4):le_uint()
- subtree:add(f_epoch_time, epoch_time)
- offset = offset + 4
- -- dissect number of reaction wheels (1 byte)
- local num_reaction_wheels = buffer(offset, 1):le_uint()
- subtree:add(f_num_reaction_wheels, num_reaction_wheels)
- offset = offset + 1
- -- dissect wheel speeds (array of N * 2 bytes, with N = 3)
- for i = 1, 3 do
- local wheel_speed = buffer(offset, 2):le_uint()
- subtree:add(f_wheel_speed, wheel_speed)
- offset = offset + 2
- end
- end
- end
- -----------------------------------------------------------------------------------------------------------
- --2.2.1.2.20 ADCS_HM_MEAS_RW_SPEED 19-23
- -- Define the dissector function for the Reaction Wheel Commanded Speed data
- function adcs_dissector_23(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- -- Define ProtoFields for the new structure fields
- local f_op_status = ProtoField.uint8("ReactionWheelData.op_status", "Operation Status", base.DES)
- local f_epoch_time = ProtoField.uint32("ReactionWheelData.epoch_time", "Epoch Time", base.DES)
- local f_num_reaction_wheels = ProtoField.uint8("ReactionWheelData.num_reaction_wheels", "Number of Reaction Wheels", base.DES)
- local f_wheel_speed_cmd = ProtoField.uint16("ReactionWheelData.wheel_speed_cmd_","Commanded Wheel Speed ", base.DEC)
- -- Define the ProtoField for the array of Commanded Wheel Speeds (N = 3, each 2 bytes)
- -- Add the fields to the protocol
- adcs_protocol.fields = {
- f_op_status, f_epoch_time, f_num_reaction_wheels,f_wheel_speed_cmd
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
- for i = 0, num_of_instance - 1 do
- -- Add the new structure data as a subtree
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- -- dissect operation status (1 byte)
- local op_status = buffer(offset, 1):le_uint()
- subtree:add(f_op_status, op_status)
- offset = offset + 1
- -- dissect epoch time (4 bytes)
- local epoch_time = buffer(offset, 4):le_uint()
- subtree:add(f_epoch_time, epoch_time)
- offset = offset + 4
- -- dissect number of reaction wheels (1 byte)
- local num_reaction_wheels = buffer(offset, 1):le_uint()
- subtree:add(f_num_reaction_wheels, num_reaction_wheels)
- offset = offset + 1
- -- dissect commanded wheel speeds (array of N * 2 bytes, with N = 3)
- for i = 1, 3 do -- value 3 is fixed in structure
- local wheel_speed_cmd = buffer(offset, 2):le_uint()
- subtree:add(f_wheel_speed_cmd, wheel_speed_cmd)
- offset = offset + 2
- end
- end
- end
- --------------------------------------------------------------------------------------------------------
- --2.2.1.2.15 ADCS_HM_FINE_EST_ANG_RATES 14-19
- -- Define the dissector function for the Fine Estimated Angular Rates Data
- function adcs_dissector_19(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- -- Define ProtoFields for the Fine Estimated Angular Rates structure
- local f_op_status = ProtoField.uint8("AngularRateData.op_status", "Operation Status", base.DES)
- local f_epoch_time = ProtoField.uint32("AngularRateData.epoch_time", "Epoch Time", base.DES)
- local f_x_angular_rate = ProtoField.int16("AngularRateData.x_angular_rate", "Fine Estimated X Angular Rate", base.DEC)
- local f_y_angular_rate = ProtoField.int16("AngularRateData.y_angular_rate", "Fine Estimated Y Angular Rate", base.DEC)
- local f_z_angular_rate = ProtoField.int16("AngularRateData.z_angular_rate", "Fine Estimated Z Angular Rate", base.DEC)
- -- Add the fields to the protocol
- adcs_protocol.fields = {
- f_op_status, f_epoch_time, f_x_angular_rate, f_y_angular_rate, f_z_angular_rate
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
- for i = 0, num_of_instance - 1 do
- -- Add the Fine Estimated Angular Rates data as a subtree
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- -- dissect operation status (1 byte)
- local op_status = buffer(offset, 1):le_uint()
- subtree:add(f_op_status, op_status)
- offset = offset + 1
- -- dissect epoch time (4 bytes)
- local epoch_time = buffer(offset, 4):le_uint()
- subtree:add(f_epoch_time, epoch_time)
- offset = offset + 4
- -- dissect Fine Estimated X Angular Rate (2 bytes, formatted value = RAWVAL*0.001)
- local x_angular_rate = buffer(offset, 2):le_int()
- subtree:add(f_x_angular_rate, x_angular_rate)
- offset = offset + 2
- -- dissect Fine Estimated Y Angular Rate (2 bytes, formatted value = RAWVAL*0.001)
- local y_angular_rate = buffer(offset, 2):le_int()
- subtree:add(f_y_angular_rate, y_angular_rate)
- offset = offset + 2
- -- dissect Fine Estimated Z Angular Rate (2 bytes, formatted value = RAWVAL*0.001)
- local z_angular_rate = buffer(offset, 2):le_int()
- subtree:add(f_z_angular_rate, z_angular_rate)
- offset = offset + 2
- end
- end
- -----------------------------------------------------------------------------------------------------------
- --2.2.1.2.13 ADCS_HM_RATE_SENSOR_TEMPERATURE
- -- Define the dissector function for the Rate Sensor Temperature Data
- function adcs_dissector_12(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- -- Define ProtoFields for the structure (adjust names as per your needs)
- local f_op_status = ProtoField.uint8("RateSensorData.op_status", "Operation Status", base.HEX)
- local f_epoch_time = ProtoField.uint32("RateSensorData.epoch_time", "Epoch Time", base.DEC)
- local f_x_rate_temp = ProtoField.int16("RateSensorData.x_rate_temp", "X Rate Sensor Temperature", base.DEC)
- local f_y_rate_temp = ProtoField.int16("RateSensorData.y_rate_temp", "Y Rate Sensor Temperature", base.DEC)
- local f_z_rate_temp = ProtoField.int16("RateSensorData.z_rate_temp", "Z Rate Sensor Temperature", base.DEC)
- -- Add the fields to the protocol
- adcs_protocol.fields = {
- f_op_status, f_epoch_time, f_x_rate_temp, f_y_rate_temp, f_z_rate_temp
- }
-
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
- -- Loop to process multiple data3 (if needed, as per your structure)
- for i = 0, num_of_instance - 1 do
- -- Add the data structure as a subtree
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- -- dissect operation status (1 byte)
- local op_status = buffer(offset, 1):le_uint()
- subtree:add(f_op_status, op_status)
- offset = offset + 1
- -- dissect epoch time (4 bytes)
- local epoch_time = buffer(offset, 4):le_uint()
- subtree:add(f_epoch_time, epoch_time)
- offset = offset + 4
- -- dissect X Rate Sensor Temperature (2 bytes, formatted value = RAWVAL)
- local x_rate_temp = buffer(offset, 2):le_int()
- subtree:add(f_x_rate_temp, x_rate_temp)
- offset = offset + 2
- -- dissect Y Rate Sensor Temperature (2 bytes, formatted value = RAWVAL)
- local y_rate_temp = buffer(offset, 2):le_int()
- subtree:add(f_y_rate_temp, y_rate_temp)
- offset = offset + 2
- -- dissect Z Rate Sensor Temperature (2 bytes, formatted value = RAWVAL)
- local z_rate_temp = buffer(offset, 2):le_int()
- subtree:add(f_z_rate_temp, z_rate_temp)
- offset = offset + 2
- end
- end
- --------------------------------------------------------------------------------------------------------------------
- --2.2.1.2.12 ADCS_HM_TEMPERATURE
- -- Define the dissector function for the Sensor Temperature Data
- function adcs_dissector_11(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- -- Define ProtoFields for the structure (adjust names as needed)
- local f_op_status = ProtoField.uint8("SensorTemperatureData.op_status", "Operation Status", base.HEX)
- local f_epoch_time = ProtoField.uint32("SensorTemperatureData.epoch_time", "Epoch Time", base.DEC)
- local f_mcu_temp = ProtoField.int16("SensorTemperatureData.mcu_temp", "MCU Temperature", base.DEC)
- local f_mag_temp = ProtoField.int16("SensorTemperatureData.mag_temp", "Magnetometer Temperature", base.DEC)
- local f_red_mag_temp = ProtoField.int16("SensorTemperatureData.red_mag_temp", "Redundant Magnetometer Temperature", base.DEC)
- -- Add the fields to the protocol
- adcs_protocol.fields = {
- f_op_status, f_epoch_time, f_mcu_temp, f_mag_temp, f_red_mag_temp
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
- -- Loop to process multiple data3 (if needed, as per your structure)
- for i = 0, num_of_instance - 1 do
- -- Add the data structure as a subtree
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- -- dissect operation status (1 byte)
- local op_status = buffer(offset, 1):le_uint()
- subtree:add(f_op_status, op_status)
- offset = offset + 1
- -- dissect epoch time (4 bytes)
- local epoch_time = buffer(offset, 4):le_uint()
- subtree:add(f_epoch_time, epoch_time)
- offset = offset + 4
- -- dissect MCU Temperature (2 bytes, formatted value = RAWVAL)
- local mcu_temp = buffer(offset, 2):le_int()
- subtree:add(f_mcu_temp, mcu_temp)
- offset = offset + 2
- -- dissect Magnetometer Temperature (2 bytes, formatted value = RAWVAL*0.1)
- local mag_temp = buffer(offset, 2):le_int()
- local formatted_mag_temp = mag_temp
- subtree:add(f_mag_temp, formatted_mag_temp)
- offset = offset + 2
- -- dissect Redundant Magnetometer Temperature (2 bytes, formatted value = RAWVAL*0.1)
- local red_mag_temp = buffer(offset, 2):le_int()
- local formatted_red_mag_temp = red_mag_temp
- subtree:add(f_red_mag_temp, formatted_red_mag_temp)
- offset = offset + 2
- end
- end
- ----------------------------------------------------------------------------------------------------------------------
- function adcs_dissector_21(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- local f_operation_status = ProtoField.uint32("adcs_protocol.operation_status", "Operation Status", base.DEC)
- local f_epoch_time = ProtoField.uint32("adcs_protocol.epoch_time", "Epoch Time", base.DEC)
- local f_mcu_temperature = ProtoField.int16("adcs_protocol.mcu_temperature", "MCU Temperature ", base.DEC)
- local f_magnetometer_temperature = ProtoField.int16("adcs_protocol.magnetometer_temperature", "Magnetometer Temperature ", base.DEC)
- local f_redundant_magnetometer_temperature = ProtoField.int16("adcs_protocol.redundant_magnetometer_temperature", "Redundant Magnetometer Temperature ", base.DEC)
- -- Add the fields to the protocol
- adcs_protocol.fields = { f_operation_status, f_epoch_time, f_mcu_temperature, f_magnetometer_temperature, f_redundant_magnetometer_temperature }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
-
- for i = 0, num_of_instance - 1 do
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
-
- subtree:add(f_operation_status, buffer(offset, 1):le_uint()) -- 1 bytes for Operation Status (UINT)
- offset = offset + 1
-
- subtree:add(f_epoch_time, buffer(offset, 4):le_uint()) -- 4 bytes for Epoch Time (UINT)
- offset = offset + 4
-
- -- Extract raw values for the temperatures (2 bytes each for INT)
- local mcu_temp = buffer(offset, 2):le_uint() * 0.01
- offset = offset + 2
-
- local magnetometer_temp = buffer(offset, 2):le_uint() * 0.01
- offset = offset + 2
-
- local redundant_magnetometer_temp = buffer(offset, 2):le_uint() * 0.01
- offset = offset + 2
-
- -- Add the temperature values to the tree with scaling applied
- subtree:add(f_mcu_temperature, mcu_temp)
- subtree:add(f_magnetometer_temperature, magnetometer_temp)
- subtree:add(f_redundant_magnetometer_temperature, redundant_magnetometer_temp)
- end
- end
- ---------------------------------------------------------------------------------------------------------------------------------------
- function adcs_dissector_18(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- -- Define ProtoFields for the updated structure fields
- local f_op_status = ProtoField.uint8("StarTrackerData.op_status", "Operation Status", base.DES)
- local f_epoch_time = ProtoField.uint32("StarTrackerData.epoch_time", "Epoch Time", base.DES)
- local f_est_rate_x = ProtoField.int16("StarTrackerData.est_rate_x", "Estimated X Angular Rate", base.DEC)
- local f_est_rate_y = ProtoField.int16("StarTrackerData.est_rate_y", "Estimated Y Angular Rate", base.DEC)
- local f_est_rate_z = ProtoField.int16("StarTrackerData.est_rate_z", "Estimated Z Angular Rate", base.DEC)
- -- Add the fields to the protocol
- adcs_protocol.fields = {
- f_op_status, f_epoch_time, f_est_rate_x, f_est_rate_y, f_est_rate_z
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
- -- Loop through the data (num_of_instance represents the number of instances to dissect)
- for i = 0, num_of_instance - 1 do
- -- Add the new structure data as a subtree
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- -- dissect operation status (1 byte)
- local op_status = buffer(offset, 1):le_uint()
- subtree:add(f_op_status, op_status)
- offset = offset + 1
- -- dissect epoch time (4 bytes)
- local epoch_time = buffer(offset, 4):le_uint()
- subtree:add(f_epoch_time, epoch_time)
- offset = offset + 4
- -- dissect estimated X angular rate (2 bytes)
- local est_rate_x_raw = buffer(offset, 2):le_int()
- local est_rate_x = est_rate_x_raw -- Apply scaling factor
- subtree:add(f_est_rate_x, est_rate_x)
- offset = offset + 2
- -- dissect estimated Y angular rate (2 bytes)
- local est_rate_y_raw = buffer(offset, 2):le_int()
- local est_rate_y = est_rate_y_raw -- Apply scaling factor
- subtree:add(f_est_rate_y, est_rate_y)
- offset = offset + 2
- -- dissect estimated Z angular rate (2 bytes)
- local est_rate_z_raw = buffer(offset, 2):le_int()
- local est_rate_z = est_rate_z_raw -- Apply scaling factor
- subtree:add(f_est_rate_z, est_rate_z)
- offset = offset + 2
- end
- end
- ------------------------------------------------------------------------------------------------
- function adcs_dissector_17(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- -- Define ProtoFields for the updated structure fields
- local f_op_status = ProtoField.uint8("StarTrackerData.op_status", "Operation Status", base.DES)
- local f_epoch_time = ProtoField.uint32("StarTrackerData.epoch_time", "Epoch Time", base.DES)
- local f_raw_rate_x = ProtoField.int16("StarTrackerData.raw_rate_x", "X Axis Raw Rate Sensor Measurement", base.DEC)
- local f_raw_rate_y = ProtoField.int16("StarTrackerData.raw_rate_y", "Y Axis Raw Rate Sensor Measurement", base.DEC)
- local f_raw_rate_z = ProtoField.int16("StarTrackerData.raw_rate_z", "Z Axis Raw Rate Sensor Measurement", base.DEC)
- -- Add the fields to the protocol
- adcs_protocol.fields = {
- f_op_status, f_epoch_time, f_raw_rate_x, f_raw_rate_y, f_raw_rate_z
- }
-
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
- -- Loop through the data (num_of_instance represents the number of instances to dissect)
- for i = 0, num_of_instance - 1 do
- -- Add the new structure data as a subtree
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- -- dissect operation status (1 byte)
- local op_status = buffer(offset, 1):le_uint()
- subtree:add(f_op_status, op_status)
- offset = offset + 1
- -- dissect epoch time (4 bytes)
- local epoch_time = buffer(offset, 4):le_uint()
- subtree:add(f_epoch_time, epoch_time)
- offset = offset + 4
- -- dissect X axis raw rate sensor measurement (2 bytes)
- local raw_rate_x = buffer(offset, 2):le_int()
- subtree:add(f_raw_rate_x, raw_rate_x)
- offset = offset + 2
- -- dissect Y axis raw rate sensor measurement (2 bytes)
- local raw_rate_y = buffer(offset, 2):le_int()
- subtree:add(f_raw_rate_y, raw_rate_y)
- offset = offset + 2
- -- dissect Z axis raw rate sensor measurement (2 bytes)
- local raw_rate_z = buffer(offset, 2):le_int()
- subtree:add(f_raw_rate_z, raw_rate_z)
- offset = offset + 2
- end
- end
- ---------------------------------------------------------------------------------------------------------------
- function adcs_dissector_16(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- -- Define ProtoFields for the updated structure fields
- local f_op_status = ProtoField.uint8("StarTrackerData.op_status", "Operation Status", base.DES)
- local f_epoch_time = ProtoField.uint32("StarTrackerData.epoch_time", "Epoch Time", base.DES)
- local f_measured_rate_x = ProtoField.int16("StarTrackerData.measured_rate_x", "Measured X Axis Rate", base.DEC)
- local f_measured_rate_y = ProtoField.int16("StarTrackerData.measured_rate_y", "Measured Y Axis Rate", base.DEC)
- local f_measured_rate_z = ProtoField.int16("StarTrackerData.measured_rate_z", "Measured Z Axis Rate", base.DEC)
- -- Add the fields to the protocol
- adcs_protocol.fields = {
- f_op_status, f_epoch_time, f_measured_rate_x, f_measured_rate_y, f_measured_rate_z
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
- -- Loop through the data (num_of_instance represents the number of instances to dissect)
- for i = 0, num_of_instance - 1 do
- -- Add the new structure data as a subtree
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- -- dissect operation status (1 byte)
- local op_status = buffer(offset, 1):le_uint()
- subtree:add(f_op_status, op_status)
- offset = offset + 1
- -- dissect epoch time (4 bytes)
- local epoch_time = buffer(offset, 4):le_uint()
- subtree:add(f_epoch_time, epoch_time)
- offset = offset + 4
- -- dissect measured X axis rate (2 bytes), scaled by 0.01
- local measured_rate_x_raw = buffer(offset, 2):le_int()
- local measured_rate_x = measured_rate_x_raw -- Apply scaling factor
- subtree:add(f_measured_rate_x, measured_rate_x)
- offset = offset + 2
- -- dissect measured Y axis rate (2 bytes), scaled by 0.01
- local measured_rate_y_raw = buffer(offset, 2):le_int()
- local measured_rate_y = measured_rate_y_raw -- Apply scaling factor
- subtree:add(f_measured_rate_y, measured_rate_y)
- offset = offset + 2
- -- dissect measured Z axis rate (2 bytes), scaled by 0.01
- local measured_rate_z_raw = buffer(offset, 2):le_int()
- local measured_rate_z = measured_rate_z_raw -- Apply scaling factor
- subtree:add(f_measured_rate_z, measured_rate_z)
- offset = offset + 2
- end
- end
- ------------------------------------------------------------------------------------------------------------------
- function adcs_dissector_15(buffer, pinfo, tree, adcs_protocol, offset, num_of_instance)
- -- Define ProtoFields for the updated structure fields
- local f_op_status = ProtoField.uint8("StarTrackerData.op_status", "Operation Status", base.DES)
- local f_epoch_time = ProtoField.uint32("StarTrackerData.epoch_time", "Epoch Time", base.DES)
- local f_raw_mag_x = ProtoField.int16("StarTrackerData.raw_mag_x", "Raw Magnetometer X Measurement", base.DEC)
- local f_raw_mag_y = ProtoField.int16("StarTrackerData.raw_mag_y", "Raw Magnetometer Y Measurement", base.DEC)
- local f_raw_mag_z = ProtoField.int16("StarTrackerData.raw_mag_z", "Raw Magnetometer Z Measurement", base.DEC)
- -- Add the fields to the protocol
- adcs_protocol.fields = {
- f_op_status, f_epoch_time, f_raw_mag_x, f_raw_mag_y, f_raw_mag_z
- }
- local subtree1 = tree:add(adcs_protocol, buffer(), "ADCS")
- -- Loop through the data (num_of_instance represents the number of instances to dissect)
- for i = 0, num_of_instance - 1 do
- -- Add the new structure data as a subtree
- local subtree = subtree1:add(adcs_protocol, buffer(), "INSTANCE " ..i)
- -- dissect operation status (1 byte)
- local op_status = buffer(offset, 1):le_uint()
- subtree:add(f_op_status, op_status)
- offset = offset + 1
- -- dissect epoch time (4 bytes)
- local epoch_time = buffer(offset, 4):le_uint()
- subtree:add(f_epoch_time, epoch_time)
- offset = offset + 4
- -- dissect raw magnetometer X measurement (2 bytes)
- local raw_mag_x = buffer(offset, 2):le_int()
- subtree:add(f_raw_mag_x, raw_mag_x)
- offset = offset + 2
- -- dissect raw magnetometer Y measurement (2 bytes)
- local raw_mag_y = buffer(offset, 2):le_int()
- subtree:add(f_raw_mag_y, raw_mag_y)
- offset = offset + 2
- -- dissect raw magnetometer Z measurement (2 bytes)
- local raw_mag_z = buffer(offset, 2):le_int()
- subtree:add(f_raw_mag_z, raw_mag_z)
- offset = offset + 2
- end
- end
- --------------------------------------------------------------------------------------------------------
|