/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package mxgstest.sections; import asim.envsim.dhpu.Tm; import asim.envsim.dhpu.tmutils.ParameterValueEvent; import asim.envsim.dhpu.tmutils.ParameterValueFilter; import java.io.BufferedReader; import java.io.FileReader; import java.util.Arrays; import java.util.List; import java.util.Random; import java.util.logging.Logger; import mxgsegse.MXGSEGSE; import mxgstest.*; import mxgstest.egse.Basic; import mxgstest.egse.Dausim; import mxgstest.egse.Power; import mxgstest.egse.Science; import mxgstest.mxgs.*; /** * * @author stet */ public class Section5_01 { MXGSEGSE egse; Output output; public Section5_01(MXGSEGSE egse, Output output) throws Throwable { this.egse = egse; this.output = output; } Dpu dpu = new Dpu(); Psu psu = new Psu(); Dau dau = new Dau(); Power pow = new Power(); Basic bas = new Basic(); Hk hke = new Hk(); Dausim dausim = new Dausim(); Science sci = new Science(); Random rand = new Random(); ParameterValueEvent hk17Event; ParameterValueFilter hk17Tm; ParameterValueEvent hk32Event; ParameterValueFilter hk32Tm; ParameterValueEvent hk34Event; ParameterValueFilter hk34Tm; ParameterValueEvent hk35Event; ParameterValueFilter hk35Tm; ParameterValueEvent hk37Event; ParameterValueFilter hk37Tm; ParameterValueEvent hk42Event; ParameterValueFilter hk42Tm; ParameterValueEvent hk47Event; ParameterValueFilter hk47Tm; ParameterValueEvent hk00Event; ParameterValueFilter hk00Tm; ParameterValueEvent hk30160Event; ParameterValueFilter hk30160Tm; ParameterValueEvent hk40050Event; ParameterValueFilter hk40050Tm; ParameterValueEvent hk40260Event; ParameterValueFilter hk40260Tm; ParameterValueEvent hk40270Event; ParameterValueFilter hk40270Tm; long[] mmiatime; int psuTemp; public void step5_1_1() throws Throwable { try{ hk17Event = new ParameterValueEvent(egse.dhpu.getMonitoredHkTm(), egse.packetTool, "Private Header.Packet Identification.TM Type", "17", Logger.global); hk17Tm = new ParameterValueFilter(hk17Event, Logger.global); hk32Event = new ParameterValueEvent(egse.dhpu.getNonscienceTm(), egse.packetTool, "Private Header.Packet Identification.TM Type", "32", Logger.global); hk32Tm = new ParameterValueFilter(hk32Event, Logger.global); hk34Event = new ParameterValueEvent(egse.dhpu.getNonscienceTm(), egse.packetTool, "Private Header.Packet Identification.TM Type", "34", Logger.global); hk34Tm = new ParameterValueFilter(hk34Event, Logger.global); hk35Event = new ParameterValueEvent(egse.dhpu.getNonscienceTm(), egse.packetTool, "Private Header.Packet Identification.TM Type", "35", Logger.global); hk35Tm = new ParameterValueFilter(hk35Event, Logger.global); hk37Event = new ParameterValueEvent(egse.dhpu.getNonscienceTm(), egse.packetTool, "Private Header.Packet Identification.TM Type", "37", Logger.global); hk37Tm = new ParameterValueFilter(hk37Event, Logger.global); hk42Event = new ParameterValueEvent(egse.dhpu.getNonscienceTm(), egse.packetTool, "Private Header.Packet Identification.TM Type", "42", Logger.global); hk42Tm = new ParameterValueFilter(hk42Event, Logger.global); hk47Event = new ParameterValueEvent(egse.dhpu.getNonscienceTm(), egse.packetTool, "Private Header.Packet Identification.TM Type", "47", Logger.global); hk47Tm = new ParameterValueFilter(hk47Event, Logger.global); hk00Event = new ParameterValueEvent(egse.dhpu.getNonscienceTm(), egse.packetTool, "Private Header.Packet Identification.TM Type", "0", Logger.global); hk00Tm = new ParameterValueFilter(hk00Event, Logger.global); hk30160Event=new ParameterValueEvent(hk00Tm, egse.packetTool, "Packet Data.Event ID", "30160", Logger.global); hk30160Tm=new ParameterValueFilter(hk30160Event, Logger.global); hk40050Event=new ParameterValueEvent(hk00Tm, egse.packetTool, "Packet Data.Event ID", "40050", Logger.global); hk40050Tm=new ParameterValueFilter(hk40050Event, Logger.global); hk40260Event=new ParameterValueEvent(hk00Tm, egse.packetTool, "Packet Data.Event ID", "40260", Logger.global); hk40260Tm=new ParameterValueFilter(hk40260Event, Logger.global); hk40270Event=new ParameterValueEvent(hk00Tm, egse.packetTool, "Packet Data.Event ID", "40270", Logger.global); hk40270Tm=new ParameterValueFilter(hk40270Event, Logger.global); dausim.telnet_dausim(); egse.dausim.tcp.stop(); dausim.dausimfullCmd("Test21"); egse.dausim.reset(); Thread.sleep(100); output.printStepStart("7.5.1-2", "Set Simulator Configuration"); String[] cmdStr = new String[] { "poke 0x40120008 0x00000001", //RB_Mode = continuous "poke 0x4012001C 0x00000000", //internal TCP generation "poke 0x40120024 0x00000001", //TCP log enable "poke 0x80010014 0x00000000", //DAU internal clock selected "poke 0x4013000C 0x00000001" //Xtrig log enable }; List cmdList = Arrays.asList(cmdStr); dausim.enableDaus(egse, "ff"); dausim.dausimCmd(cmdList); egse.dausim.tcp.start(); output.printSubSectionStart("5.1.1", "DPU Power On"); output.printStepStart("5.1.1-1", "DPU Power On"); pow.powerOnDPU(egse); bas.waitForBoot(egse); pow.verifySupplyDPU(egse, 0.31, 0.06); output.printStepStart("", "Monitored HK"); hke.verifyMonHKReceiving(egse, 5); Thread.sleep(3000); hk17Tm.clear(); hke.dataQueueWaitForSize(egse, 10, 1, hk17Tm); long mytime[]=bas.time(); Basic.sec_start=mytime[1]-Long.valueOf(egse.packetTool.getTmParameter(hk17Tm.getFirst(), "Packet Data.Time.Seconds")); Basic.year_start=mytime[0]-Long.valueOf(egse.packetTool.getTmParameter(hk17Tm.getFirst(), "Packet Data.Time.Year")); hke.verifyMonHKUtcTime(egse); String[][] MonHK = { {"UTC", "0", "0"}, {"Alive Counter", "0", "0"}, {"Boot Status", "67", "0"}, {"SW Mode", "0", "0"}, {"SW Submode", "0", "0"}, {"Errors and Warnings", "0", "0"} }; hke.verifyMonHKarr(egse, 30, MonHK, 7); System.out.println("Verify on console: Boot SW ID = 2.0"); output.printStepStart("", "Boot SW ID"); output.printStepOut("BSW ID", "2.0", "", "", "Verify on console",true); } catch(MxgsTestException e) { output.printStepStatus("5.1.1", false, e.getMessage()); throw e; } output.printStepStatus("5.1.1", true); output.printSubSectionEnd("5.1.1"); } public void step5_1_2() throws Throwable { try{ output.printSubSectionStart("5.1.2", "Read DHPU Temperatures"); output.printStepStart("5.1.2-1", "Read initial DHPU TMONs"); int[] DHPU; int[] DHPUstart; DHPUstart=bas.readDHPU(); hke.verifyValue(DHPUstart[0], "DHPU 1 initial", 2235, 78); hke.verifyValue(DHPUstart[1], "DHPU 2 initial", 2235, 78); hke.verifyValue(DHPUstart[2], "DHPU 3 initial", 2196, 39); hke.verifyValue(DHPUstart[3], "DHPU 4 initial", 2196, 39); hke.verifyValue(DHPUstart[4], "DHPU 5 initial", 2196, 39); psuTemp=DHPUstart[1]; int iMinutes=1; output.printStepStart("5.1.2-2", "Wait "+iMinutes+" minutes"); for(int i=0;i600 | czt2>600 | czt3>600 | czt4>600) & i<30) { czt1=Integer.valueOf(egse.packetTool.getTmParameter(hk37Tm.getLast(), "Packet Data.CZT1.DAU.Ratemeter")); czt2=Integer.valueOf(egse.packetTool.getTmParameter(hk37Tm.getLast(), "Packet Data.CZT2.DAU.Ratemeter")); czt3=Integer.valueOf(egse.packetTool.getTmParameter(hk37Tm.getLast(), "Packet Data.CZT3.DAU.Ratemeter")); czt4=Integer.valueOf(egse.packetTool.getTmParameter(hk37Tm.getLast(), "Packet Data.CZT4.DAU.Ratemeter")); i++; System.out.println(egse.packetTool.getTmParameter(hk37Tm.getLast(), "Packet Data.Time.Seconds")+" "+ egse.packetTool.getTmParameter(hk37Tm.getLast(), "Packet Data.CZT1.DAU.Ratemeter")+" "+ egse.packetTool.getTmParameter(hk37Tm.getLast(), "Packet Data.CZT2.DAU.Ratemeter")+" "+ egse.packetTool.getTmParameter(hk37Tm.getLast(), "Packet Data.CZT3.DAU.Ratemeter")+" "+ egse.packetTool.getTmParameter(hk37Tm.getLast(), "Packet Data.CZT4.DAU.Ratemeter")+" "+ egse.packetTool.getTmParameter(hk42Tm.getLast(), "Packet Data.BGO1.Ratemeter")+" "+ egse.packetTool.getTmParameter(hk42Tm.getLast(), "Packet Data.BGO2.Ratemeter")+" "+ egse.packetTool.getTmParameter(hk42Tm.getLast(), "Packet Data.BGO3.Ratemeter")+" "+ egse.packetTool.getTmParameter(hk42Tm.getLast(), "Packet Data.BGO4.Ratemeter") ); hk37Tm.clear(); hke.dataQueueWaitForSize(egse, 60, 5, hk37Tm); } hk37Tm.clear(); output.printStepStart("5.1.17-1", "Verify CZT Summary HK"); hke.dataQueueWaitForSize(egse, 10, 1, hk37Tm); String [][] CZTHK={ {"CZT1.DAU.Ratemeter", "400", "200"}, {"CZT1.DAU.HV Voltage Monitor", "49", "2"}, {"CZT2.DAU.Ratemeter", "400", "200"}, {"CZT2.DAU.HV Voltage Monitor", "49", "2"}, {"CZT3.DAU.Ratemeter", "400", "200"}, {"CZT3.DAU.HV Voltage Monitor", "49", "2"}, {"CZT4.DAU.Ratemeter", "400", "200"}, {"CZT4.DAU.HV Voltage Monitor", "49", "2"} }; hke.verifyTMarr(egse, hk37Tm.getLast(), CZTHK); output.printStepStart("5.1.17-2", "Verify BGO Summary HK"); hk42Tm.clear(); hke.dataQueueWaitForSize(egse, 10, 1, hk42Tm); String [][] BGOHK={ {"BGO1.Ratemeter", "425", "225"}, {"BGO1.HV Voltage Monitor", "113", "2"}, {"BGO2.Ratemeter", "425", "225"}, {"BGO2.HV Voltage Monitor", "108", "2"}, {"BGO3.Ratemeter", "425", "225"}, {"BGO3.HV Voltage Monitor", "103", "2"}, {"BGO4.Ratemeter", "425", "225"}, {"BGO4.HV Voltage Monitor", "103", "2"} }; hke.verifyTMarr(egse, hk42Tm.getLast(), BGOHK); } catch(MxgsTestException e) { output.printStepStatus("5.1.17", false, e.getMessage()); throw e; } output.printStepStatus("5.1.17", true); output.printSubSectionEnd("5.1.17"); } public void step5_1_18() throws Throwable { try{ output.printSubSectionStart("5.1.18","Enter Operational Mode"); output.printStepStart("5.1.18-1", "Send Enter Operational Mode"); dpu.sendEnterOperationalModeTc(egse); output.printStepStart("", "Monitored HK"); Thread.sleep(5000); hk17Tm.clear(); hke.dataQueueWaitForSize(egse, 10, 1, hk17Tm); String[][] MonHK = { {"SW Mode", "2", "0"}, {"SW Submode", "2", "0"}, }; hke.verifyTMarr(egse, hk17Tm.getLast(), MonHK); output.printStepStart("5.1.18-2", "Wait 10 TCPs"); Thread.sleep(10000); output.printStepStart("", "Monitored HK"); String[][] MonHK1 = { {"SW Mode", "2", "0"}, {"SW Submode", "1", "0"}, }; hke.verifyTMarr(egse, hk17Tm.getLast(), MonHK1); } catch(MxgsTestException e) { output.printStepStatus("5.1.18", false, e.getMessage()); throw e; } output.printStepStatus("5.1.18", true); output.printSubSectionEnd("5.1.18"); } public void step5_1_19() throws Throwable { try{ output.printSubSectionStart("5.1.19","MMIA to MXGS Cross-Trigger"); output.printStepStart("5.1.19-1", "Command Dausim to send trigger"); String tcpStr=dausim.dausimPeek("0x40120040"); long[] mytime=bas.time(); mmiatime=mytime; String trigTCP=String.format("0x%08X", Long.valueOf(tcpStr.substring(2, 10),16)+5); String[] cmdStr = new String[] { "poke 0x40131004 "+trigTCP, //Set trigger to TCP+5 "poke 0x40131008 0x0007a120", //+500,000 microsec }; List cmdList = Arrays.asList(cmdStr); dausim.dausimCmd(cmdList); output.printStepStart("5.1.19-2", "Verify Event Report"); hke.dataQueueWaitForSize(egse, 30, 1, hk40050Tm); while(!Boolean.valueOf(egse.packetTool.getTmParameter(hk40050Tm.getFirst(), "Packet Data.Event Data.Trigger Window Flags.Trigger From MMIA Received"))){ System.out.println("Received internal trigger first"); hk40050Tm.removeFirst(); hke.dataQueueWaitForSize(egse, 30, 1, hk40050Tm); } Tm tm=hk40050Tm.getFirst(); hk40050Tm=hke.verifyEventReport(egse, hk40050Tm, 0, 40050, (int)(mytime[0]-Basic.year_start), (int)mytime[2], (int)(mytime[1]+5-Basic.sec_start), (int)(mytime[1]+5-Basic.tcp_start), 192); int dpuTimer =Integer.valueOf(egse.packetTool.getTmParameter(tm, "Packet Data.Event Data.MMIA Trigger Time.Current DPU Timer Value")); hke.verifyValue(dpuTimer, "Current DPU Timer Value", 500000, 10); Thread.sleep(1000); dpu.sendEnterConfigurationModeTc(egse); output.printStepStart("", "Verify Reception of TGF Event"); int siz=egse.dhpu.getScienceTm().size(); int t=0; while(siz==0 & t<60) { t++; siz=egse.dhpu.getScienceTm().size(); Thread.sleep(1000); } if(siz==0) { output.printStepOut("TGF from MMIA Trigger", "Failed", "", false); } else { Tm science; String scistr; science=egse.dhpu.getScienceTm().getFirst(); scistr=science.hex().replaceAll("\\s+","").substring(2); if(scistr.substring(6,8).equals("a0")) { output.printStepOut("TGF from MMIA Trigger", "OK", "", true); } else { output.printStepOut("TGF from MMIA Trigger", "Failed", "", false); } } } catch(MxgsTestException e) { output.printStepStatus("5.1.19", false, e.getMessage()); throw e; } output.printStepStatus("5.1.19", true); output.printSubSectionEnd("5.1.19"); } public void step5_1_20() throws Throwable { try{ output.printSubSectionStart("5.1.20","Return to Configuration Mode"); output.printStepStart("", "Send Enter Configuration Mode"); dpu.sendEnterConfigurationModeTc(egse); output.printStepStart("", "Monitored HK"); Thread.sleep(5000); hk17Tm.clear(); hke.dataQueueWaitForSize(egse, 10, 1, hk17Tm); String[][] MonHK = { {"SW Mode", "1", "0"}, {"SW Submode", "0", "0"}, }; hke.verifyTMarr(egse, hk17Tm.getLast(), MonHK); boolean more_obs=true,a0=false,a1=false; Tm science; String scistr; int dhpuTCP=0,dpuTCP=0,dpuCounter=0,flags=0,mmiaTCP=0,mmiaCounter=0, time0=0, time1=0, nCounts=0, iCount=0, nBytes=0, timeStamp=-1,timeN=-1; String count0="",count=""; int siz=egse.dhpu.getScienceTm().size(); while(siz!=0 & more_obs){ Thread.sleep(10); science=egse.dhpu.getScienceTm().removeFirst(); siz--; scistr=science.hex().replaceAll("\\s+","").substring(2); if(scistr.substring(6,8).equals("a0")) { System.out.println("MMIA Time: "+Integer.valueOf(scistr.substring(248,256),16)+" "+ Integer.valueOf(scistr.substring(256,264),16)); if(Integer.valueOf(scistr.substring(248,256),16)!=0) { more_obs=false; a0=true; dhpuTCP=Integer.valueOf(scistr.substring(40,48),16); dpuTCP=Integer.valueOf(scistr.substring(48,56),16); dpuCounter=Integer.valueOf(scistr.substring(56,64),16); flags=Integer.valueOf(scistr.substring(176,180),16); mmiaTCP=Integer.valueOf(scistr.substring(248,256),16); mmiaCounter=Integer.valueOf(scistr.substring(256,264),16); nCounts=Integer.valueOf(scistr.substring(264,272),16); iCount=nCounts; int pos=272; nBytes=2*Integer.valueOf(scistr.substring(20, 24), 16)-(pos-24); int n=nBytes/16; int part_counts=nBytes-16*n; count0=scistr.substring(pos, pos+16); time0=Integer.valueOf(count0.substring(11),16)+timeN*1000000; timeStamp=Integer.valueOf(count0.substring(11),16); for(int i=0;i0) { count=scistr.substring(pos+n*16, pos+n*16+part_counts); } while(iCount>0) { science=egse.dhpu.getScienceTm().removeFirst(); siz--; scistr=science.hex().replaceAll("\\s+","").substring(2); if(scistr.substring(6,8).equals("a1")) a1=true; int part_counts_old=part_counts; nBytes=2*Integer.valueOf(scistr.substring(28, 32), 16); if(part_counts_old>0){ count=count+scistr.substring(32, 32+part_counts_old); if(Integer.valueOf(count.substring(11),16)0) { count=scistr.substring(32+part_counts_old+n*16, 32+part_counts_old+n*16+part_counts); } part_counts_old=part_counts; Thread.sleep(1000); siz=egse.dhpu.getScienceTm().size(); } time1=timeStamp+timeN*1000000; output.printStepOut("TGF from MMIA Trigger", "OK", "", true); output.printStepStart("","Observation Time"); hke.verifyValue(dhpuTCP, "TCP from DHPU", (int)(mmiatime[1]+5-Basic.sec_start), 1); hke.verifyValue(dpuTCP, "TCP from DPU", (int)(mmiatime[1]+5-Basic.tcp_start), 0); hke.verifyValue(dpuCounter, "DPU Counter", 500000-0x6d*1000, 10); output.printStepStart("","Trigger Window Flags"); hke.verifyValue(flags, "Flags", 0x00c0, 0); output.printStepStart("","MMIA Triggering Time"); hke.verifyValue(mmiaTCP, "TCP from DPU", (int)(mmiatime[1]+5-Basic.tcp_start), 0); hke.verifyValue(mmiaCounter, "DPU Counter", 500000-0x6d*1000, 10); output.printStepStart("","Detector Count Capture"); hke.verifyValue(time0, "First timestamp", 500000-0x6d*1000-1000000, 100000); hke.verifyValue(time1, "Last timestamp", 500000-0x6d*1000+1000000, 100000); } } } siz=egse.dhpu.getScienceTm().size(); System.out.println("Cleaning up science queue"); while(siz>0) { egse.dhpu.getScienceTm().clear(); Thread.sleep(5000); siz=egse.dhpu.getScienceTm().size(); } } catch(MxgsTestException e) { output.printStepStatus("5.1.20", false, e.getMessage()); throw e; } output.printStepStatus("5.1.20", true); output.printSubSectionEnd("5.1.20"); } public void step5_1_21() throws Throwable { try{ output.printSubSectionStart("5.1.21", "Verify DHPU Temperatures"); output.printStepStart("5.1.21-1", "Read initial DHPU TMONs"); int[] DHPU={0,0,0,0,0}; int[] DHPUstart={0,0,0,0,0}; DHPUstart=bas.readDHPU(); hke.verifyValue(DHPUstart[0], "DHPU 1 initial", 2235, 78); hke.verifyValue(DHPUstart[1], "DHPU 2 initial", 2235, 78); hke.verifyValue(DHPUstart[2], "DHPU 3 initial", 2196, 39); hke.verifyValue(DHPUstart[3], "DHPU 4 initial", 2196, 39); hke.verifyValue(DHPUstart[4], "DHPU 5 initial", 2196, 39); output.printStepStart("5.1.21-4", "Verify changes in DHPU TMONs"); hke.verifyValue(DHPU[1], "DHPU 2 increasing", psuTemp+6, -2); } catch(MxgsTestException e) { output.printStepStatus("5.1.21", false, e.getMessage()); throw e; } output.printStepStatus("5.1.21", true); output.printSubSectionEnd("5.1.21"); } }