From 05aa5f12ccb8487842a1030b7a04f2a95dac3b2a Mon Sep 17 00:00:00 2001 From: xtophe Date: Mon, 30 Mar 2020 10:24:58 +0200 Subject: [PATCH 1/6] minor - cosmetic change --- ModuleEntrySatTelemetry/pom.xml | 10 +- .../java/org/josast/EntrySat/Telemetry.java | 240 ++- .../EntrySat/app/DecodeEntrySatFile.java | 155 +- .../org/josast/EntrySat/app/DecodeTLM.java | 3 +- .../EntrySat/app/testkaikaigenerated.java | 75 +- .../src/main/java/org/josast/TLM/AxBEqx.java | 36 +- .../src/main/java/org/josast/TLM/AxEqx.java | 9 +- .../main/java/org/josast/TLM/BooleanTLM.java | 65 +- .../main/java/org/josast/TLM/CubicEqx.java | 12 +- .../main/java/org/josast/TLM/ICalculData.java | 3 +- .../src/main/java/org/josast/TLM/TlmData.java | 40 +- .../src/main/java/org/josast/TLM/xEqx.java | 1 - .../kaikai/generated/FrameTlmEntrySat.java | 1290 ++++++++++------- .../src/site/apt/about.apt | 1 + .../src/site/apt/best-practices.apt | 1 + ModuleEntrySatTelemetry/src/site/site.xml | 1 + 16 files changed, 1074 insertions(+), 868 deletions(-) diff --git a/ModuleEntrySatTelemetry/pom.xml b/ModuleEntrySatTelemetry/pom.xml index 06aa53c..6391d35 100644 --- a/ModuleEntrySatTelemetry/pom.xml +++ b/ModuleEntrySatTelemetry/pom.xml @@ -14,7 +14,7 @@ http://www.amsat-francophone.org - + 1.8 1.8 ${env.JAVA_HOME} @@ -292,9 +292,9 @@ ${project.build.sourceEncoding} - /rulesets/basic.xml - /rulesets/unnecessary.xml - + /rulesets/basic.xml + /rulesets/unnecessary.xml + false @@ -613,7 +613,7 @@ ${maven.compiler.target} 128m 512m - Cp1252 + Cp1252 diff --git a/ModuleEntrySatTelemetry/src/main/java/org/josast/EntrySat/Telemetry.java b/ModuleEntrySatTelemetry/src/main/java/org/josast/EntrySat/Telemetry.java index 8414d29..1cedd0b 100644 --- a/ModuleEntrySatTelemetry/src/main/java/org/josast/EntrySat/Telemetry.java +++ b/ModuleEntrySatTelemetry/src/main/java/org/josast/EntrySat/Telemetry.java @@ -16,12 +16,11 @@ import org.josast.kaikai.generated.FrameTlmEntrySat.UiFrameTlmEntrySat; /** * This class give access to data form Entrysat TLM data + * * @author christophe - * + * */ -public class Telemetry { - - +public class Telemetry { public static final String BATT_TEMP = "BATT TEMP"; public static final String EPS_TEMP = "EPS TEMP"; @@ -33,23 +32,21 @@ public class Telemetry { public static final String SID = "SID"; public static final String EPS_BATT_VCURRENT = "EPS BATTVCURRENT"; // private static final String TIME = "Time"; - - private SimpleDateFormat ft = new SimpleDateFormat ("dd MM yyyy - HH:mm:ss zzz"); - + + private SimpleDateFormat ft = new SimpleDateFormat("dd MM yyyy - HH:mm:ss zzz"); + + /** + * dataDescription list with description of each telemetry data + */ + private Hashtable dataDescription = new Hashtable(); /** - * dataDescription list with description of each telemetry data + * dataValue list to store value of 1 frame */ - private Hashtable dataDescription = new Hashtable(); - /** - * dataValue list to store value of 1 frame - */ - private Hashtable dataValue = new Hashtable(); - - + private Hashtable dataValue = new Hashtable(); private String timeformat; private long timeFrame; - + /** * */ @@ -62,145 +59,145 @@ public class Telemetry { */ private void init() { - - dataDescription.put(SID,new TlmData(SID, new xEqx(), "","%.0f")); - dataDescription.put(ModeSafe,new TlmData(ModeSafe, new xEqx(), "","%2.0f")); - dataDescription.put(EPS_VBATT,new TlmData(EPS_VBATT, new AxBEqx(0.05, 3.0 ) , "","%.5f")); - dataDescription.put(EPS_BATT_VCURRENT,new TlmData(EPS_BATT_VCURRENT, new AxBEqx(0.0078740, -1.0 ) , "","%.3f")); - dataDescription.put(EPS_3_3V_C,new TlmData(EPS_3_3V_C, new AxBEqx(0.025,0 ) , "","%.5f")); - dataDescription.put(EPS_5_V_C,new TlmData(EPS_5_V_C, new AxBEqx(0.025,0 ) , "","%.5f")); - dataDescription.put(TRX_TEMP,new TlmData(TRX_TEMP, new AxBEqx(0.25, -15.0 ) , "","%.3f")); - dataDescription.put(EPS_TEMP,new TlmData(EPS_TEMP, new AxBEqx(0.25, -15.0) , "","%.3f")); - dataDescription.put(BATT_TEMP,new TlmData(BATT_TEMP, new AxBEqx(0.25, -15.0 ) , "","%.3f")); - + + dataDescription.put(SID, new TlmData(SID, new xEqx(), "", "%.0f")); + dataDescription.put(ModeSafe, new TlmData(ModeSafe, new xEqx(), "", "%2.0f")); + dataDescription.put(EPS_VBATT, new TlmData(EPS_VBATT, new AxBEqx(0.05, 3.0), "", "%.5f")); + dataDescription.put(EPS_BATT_VCURRENT, new TlmData(EPS_BATT_VCURRENT, new AxBEqx(0.0078740, -1.0), "", "%.3f")); + dataDescription.put(EPS_3_3V_C, new TlmData(EPS_3_3V_C, new AxBEqx(0.025, 0), "", "%.5f")); + dataDescription.put(EPS_5_V_C, new TlmData(EPS_5_V_C, new AxBEqx(0.025, 0), "", "%.5f")); + dataDescription.put(TRX_TEMP, new TlmData(TRX_TEMP, new AxBEqx(0.25, -15.0), "", "%.3f")); + dataDescription.put(EPS_TEMP, new TlmData(EPS_TEMP, new AxBEqx(0.25, -15.0), "", "%.3f")); + dataDescription.put(BATT_TEMP, new TlmData(BATT_TEMP, new AxBEqx(0.25, -15.0), "", "%.3f")); + } - + public static int unsignedByteToInt(byte b) { - return (int) b & 0xFF; - } - - + return (int) b & 0xFF; + } + /** - * From an Ax25Frame (generated by Kaitai), the function extract data and fill hastable with value + * From an Ax25Frame (generated by Kaitai), the function extract data and fill + * hastable with value + * * @param ax Ax25Frame */ - public void setValue(Ax25Frame ax ) - { - + public void setValue(Ax25Frame ax) { + UiFrameTlmEntrySat Ui = (UiFrameTlmEntrySat) ax.payload(); TelemetryDataFiledHearder TDF = Ui.telemetryDataFiledHearder(); - - // Compute time - + + // Compute time + byte[] b = TDF.time2(); - long times = unsignedByteToInt(b[0])*256*256*256+unsignedByteToInt(b[1])*256*256+unsignedByteToInt(b[2])*256+unsignedByteToInt(b[3]); - long timems = (long) ((float) (unsignedByteToInt(b[4])/256.0)*1000); - GregorianCalendar gcalendar = new GregorianCalendar(2000,0,1,0,0,0); - Date time = gcalendar.getTime(); - long value = time.getTime(); - value = value + times*1000; - value = value + timems; - time.setTime(value); - setTimeFrame(value); - timeformat = ft.format(time); - - dataValue.put(SID,Ui.telemetryData().sid()); - dataValue.put(ModeSafe,Ui.telemetryData().modeSafe()); - dataValue.put(EPS_VBATT,Ui.telemetryData().epsVbatt() ); - dataValue.put(EPS_BATT_VCURRENT,Ui.telemetryData().epsBattVcurrent() ); - dataValue.put(EPS_3_3V_C,Ui.telemetryData().eps33VCurrent() ); - dataValue.put(EPS_5_V_C,Ui.telemetryData().eps5VCurrent() ); + long times = unsignedByteToInt(b[0]) * 256 * 256 * 256 + unsignedByteToInt(b[1]) * 256 * 256 + + unsignedByteToInt(b[2]) * 256 + unsignedByteToInt(b[3]); + long timems = (long) ((float) (unsignedByteToInt(b[4]) / 256.0) * 1000); + GregorianCalendar gcalendar = new GregorianCalendar(2000, 0, 1, 0, 0, 0); + Date time = gcalendar.getTime(); + long value = time.getTime(); + value = value + times * 1000; + value = value + timems; + time.setTime(value); + setTimeFrame(value); + timeformat = ft.format(time); + + dataValue.put(SID, Ui.telemetryData().sid()); + dataValue.put(ModeSafe, Ui.telemetryData().modeSafe()); + dataValue.put(EPS_VBATT, Ui.telemetryData().epsVbatt()); + dataValue.put(EPS_BATT_VCURRENT, Ui.telemetryData().epsBattVcurrent()); + dataValue.put(EPS_3_3V_C, Ui.telemetryData().eps33VCurrent()); + dataValue.put(EPS_5_V_C, Ui.telemetryData().eps5VCurrent()); dataValue.put(TRX_TEMP, Ui.telemetryData().trxTemp()); - dataValue.put(EPS_TEMP, Ui.telemetryData().epsTemp()); - dataValue.put(BATT_TEMP,Ui.telemetryData().battTemp() ); + dataValue.put(EPS_TEMP, Ui.telemetryData().epsTemp()); + dataValue.put(BATT_TEMP, Ui.telemetryData().battTemp()); } - + /** - * @return TIME - time interpreted + * @return TIME - time interpreted */ - public String getTimetoSting() - { + public String getTimetoSting() { return timeformat; } - + /** * return string with all decoded value of the frame + * * @return String with all decoded data, ";' is used as separator */ - public String afficheTLM( ) { - - StringBuilder stringBuilder = new StringBuilder(); - Set keys = dataDescription.keySet(); - - //Obtaining iterator over set entries - Iterator itr = keys.iterator(); - String strvalue; - //Displaying Key and value pairs - while (itr.hasNext()) { - // Getting Key - strvalue = itr.next(); - - TlmData tlm = dataDescription.get(strvalue); - int value = dataValue.get(strvalue); - String valueS= String.format(tlm.getFormat(), tlm.getFormulae().calcul(value)); - stringBuilder.append(valueS); - stringBuilder.append(";\t"); - } - - stringBuilder.append("\r\n"); - return stringBuilder.toString(); + public String afficheTLM() { + + StringBuilder stringBuilder = new StringBuilder(); + Set keys = dataDescription.keySet(); + + // Obtaining iterator over set entries + Iterator itr = keys.iterator(); + String strvalue; + // Displaying Key and value pairs + while (itr.hasNext()) { + // Getting Key + strvalue = itr.next(); + + TlmData tlm = dataDescription.get(strvalue); + int value = dataValue.get(strvalue); + String valueS = String.format(tlm.getFormat(), tlm.getFormulae().calcul(value)); + stringBuilder.append(valueS); + stringBuilder.append(";\t"); + } + + stringBuilder.append("\r\n"); + return stringBuilder.toString(); } - - /** * Compute the raw value with formulea and format the string - * @param dataName - * @return value interpreted + * + * @param dataName + * @return value interpreted */ - public String getValueDecoded(String dataName ) - { - - TlmData tlm = dataDescription.get(dataName); - int value = dataValue.get(dataName); - return String.format(tlm.getFormat(), tlm.getFormulae().calcul(value)); + public String getValueDecoded(String dataName) { + + TlmData tlm = dataDescription.get(dataName); + int value = dataValue.get(dataName); + return String.format(tlm.getFormat(), tlm.getFormulae().calcul(value)); } /** - * Compute the raw value with formulea - * @param dataName - * @return value interpreted + * Compute the raw value with formulea + * + * @param dataName + * @return value interpreted */ - public double getValueDec(String dataName ) - { - - TlmData tlm = dataDescription.get(dataName); - int value = dataValue.get(dataName); - return tlm.getFormulae().calcul(value); + public double getValueDec(String dataName) { + + TlmData tlm = dataDescription.get(dataName); + int value = dataValue.get(dataName); + return tlm.getFormulae().calcul(value); } - + /** * display list of data decoded + * * @return name of data decoded separated by "," */ public String toStringHeader() { StringBuilder stringBuilder = new StringBuilder(); - Set keys = dataDescription.keySet(); - - //Obtaining iterator over set entries - Iterator itr = keys.iterator(); - String strvalue; - //Displaying Key and value pairs - while (itr.hasNext()) { - // Getting Key - strvalue = itr.next(); - - stringBuilder.append(strvalue); - stringBuilder.append(";\t"); - } - - stringBuilder.append("\r\n"); + Set keys = dataDescription.keySet(); + + // Obtaining iterator over set entries + Iterator itr = keys.iterator(); + String strvalue; + // Displaying Key and value pairs + while (itr.hasNext()) { + // Getting Key + strvalue = itr.next(); + + stringBuilder.append(strvalue); + stringBuilder.append(";\t"); + } + + stringBuilder.append("\r\n"); return stringBuilder.toString(); } @@ -212,8 +209,5 @@ public class Telemetry { public void setTimeFrame(long timeFrame) { this.timeFrame = timeFrame; } - - - } diff --git a/ModuleEntrySatTelemetry/src/main/java/org/josast/EntrySat/app/DecodeEntrySatFile.java b/ModuleEntrySatTelemetry/src/main/java/org/josast/EntrySat/app/DecodeEntrySatFile.java index 4fe957d..b25e24f 100644 --- a/ModuleEntrySatTelemetry/src/main/java/org/josast/EntrySat/app/DecodeEntrySatFile.java +++ b/ModuleEntrySatTelemetry/src/main/java/org/josast/EntrySat/app/DecodeEntrySatFile.java @@ -29,7 +29,6 @@ public class DecodeEntrySatFile { private BufferedReader lecteurAvecBuffer; private String ligne; - public DecodeEntrySatFile() { // automatically generate the help statement @@ -44,8 +43,7 @@ public class DecodeEntrySatFile { formatter.printHelp("DecodeTLM", options); } - - + public void execute(String[] args) { CommandLineParser cmdLineParser = new DefaultParser(); CommandLine commandLineGlobal; @@ -53,10 +51,10 @@ public class DecodeEntrySatFile { commandLineGlobal = cmdLineParser.parse(options, args); if (commandLineGlobal.hasOption("f")) { System.out.println("file to extract : " + commandLineGlobal.getOptionValue("f")); - + OpenFile(commandLineGlobal.getOptionValue("f")); - readFile () ; - + readFile(); + // FrameTlmEntrySat frame; // try { // frame = FrameTlmEntrySat.fromFile(commandLineGlobal.getOptionValue("f")); @@ -81,115 +79,102 @@ public class DecodeEntrySatFile { } } - - - public void OpenFile(String file) - { - try - { - lecteurAvecBuffer = new BufferedReader(new FileReader(file)); - } - catch(FileNotFoundException exc) - { - System.out.println("Erreur d'ouverture"); - } + + public void OpenFile(String file) { + try { + lecteurAvecBuffer = new BufferedReader(new FileReader(file)); + } catch (FileNotFoundException exc) { + System.out.println("Erreur d'ouverture"); + } } - public void readFile () - { + + public void readFile() { boolean first = false; - Date dateref=null; + Date dateref = null; try { - while ((ligne = lecteurAvecBuffer.readLine()) != null) - { - // System.out.println(ligne); - String[] result1=ligne.split("="); - String[] date = result1[1].split("]"); - String[] trame = result1[2].split("]"); - - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("E MMM dd hh:mm:ss z yyyy",Locale.ENGLISH); - - System.out.println("date : "+date[0]+" - Trame "+trame[0]); - Date date2 = null; - try { - date2 = simpleDateFormat.parse(date[0]); - } catch (java.text.ParseException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - if (!first) - { - dateref=date2; - first = true; - } - else - { - System.out.println((date2.getTime() - dateref.getTime())/1000); - } - byte[] tlm = hexStringToByteArray(trame[0]); - FrameTlmEntrySat frame = new FrameTlmEntrySat(new ByteBufferKaitaiStream (tlm) ); - Ax25Frame ax = frame.frameTlmEntrySat(); + while ((ligne = lecteurAvecBuffer.readLine()) != null) { + // System.out.println(ligne); + String[] result1 = ligne.split("="); + String[] date = result1[1].split("]"); + String[] trame = result1[2].split("]"); + + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("E MMM dd hh:mm:ss z yyyy", Locale.ENGLISH); + + System.out.println("date : " + date[0] + " - Trame " + trame[0]); + Date date2 = null; + try { + date2 = simpleDateFormat.parse(date[0]); + } catch (java.text.ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (!first) { + dateref = date2; + first = true; + } else { + System.out.println((date2.getTime() - dateref.getTime()) / 1000); + } + byte[] tlm = hexStringToByteArray(trame[0]); + FrameTlmEntrySat frame = new FrameTlmEntrySat(new ByteBufferKaitaiStream(tlm)); + Ax25Frame ax = frame.frameTlmEntrySat(); // System.out.println(ax.ax25Header().destSsidRaw()); // System.out.println(ax.ax25Header().srcSsidRaw()); - System.out.println(ax.ax25Header().destCallsignRaw().destCallsignRor().destCallsign()); - System.out.println(ax.ax25Header().srcCallsignRaw().srcCallsignRor().srcCallsign()); - - if (ax.ax25Header().destCallsignRaw().destCallsignRor().destCallsign().compareTo("F6KTA ")==0) - { + System.out.println(ax.ax25Header().destCallsignRaw().destCallsignRor().destCallsign()); + System.out.println(ax.ax25Header().srcCallsignRaw().srcCallsignRor().srcCallsign()); + + if (ax.ax25Header().destCallsignRaw().destCallsignRor().destCallsign().compareTo("F6KTA ") == 0) { // System.out.println(ax.ax25Header().ctl()); - UiFrameTlmEntrySat Ui = (UiFrameTlmEntrySat) ax.payload(); + UiFrameTlmEntrySat Ui = (UiFrameTlmEntrySat) ax.payload(); // System.out.println(Ui.packetheader().version()); // System.out.println(Ui.packetheader().packetType()); // System.out.println(Ui.packetheader().packetFlag()); // System.out.println(Ui.packetheader().packetApid()); // System.out.println(Ui.packetheader().sequenceControl()); // System.out.println(Ui.packetheader().packetLenght()); - System.out.println("SID : " + Ui.telemetryData().sid()); - if ( Ui.telemetryData().sid()==1) - { - System.err.println("SID valeur 4 "); - System.exit(0); - } + System.out.println("SID : " + Ui.telemetryData().sid()); + if (Ui.telemetryData().sid() == 1) { + System.err.println("SID valeur 4 "); + System.exit(0); + } // System.out.println("battTemp : " + Ui.telemetryData().battTemp()); // System.out.println("eps33VCurrent : " + Ui.telemetryData().eps33VCurrent()); // System.out.println("eps5VCurrent : " + Ui.telemetryData().eps5VCurrent()); // System.out.println("epsBattVcurrent : " + Ui.telemetryData().epsBattVcurrent()); // System.out.println("epsTemp : " + Ui.telemetryData().epsTemp()); // System.out.println("trxTemp : " + Ui.telemetryData().trxTemp()); - - } - else - { - System.out.println("SID :"); - } + + } else { + System.out.println("SID :"); + } } } - - catch (IOException e) { + + catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } - - } - public void closeFile() - { - try { + + } + + public void closeFile() { + try { lecteurAvecBuffer.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } - - + public static byte[] hexStringToByteArray(String s) { - byte[] b = new byte[s.length() / 2]; - for (int i = 0; i < b.length; i++) { - int index = i * 2; - int v = Integer.parseInt(s.substring(index, index + 2), 16); - b[i] = (byte) v; - } - return b; - } + byte[] b = new byte[s.length() / 2]; + for (int i = 0; i < b.length; i++) { + int index = i * 2; + int v = Integer.parseInt(s.substring(index, index + 2), 16); + b[i] = (byte) v; + } + return b; + } + public static void main(String[] args) { DecodeEntrySatFile decode = new DecodeEntrySatFile(); decode.execute(args); diff --git a/ModuleEntrySatTelemetry/src/main/java/org/josast/EntrySat/app/DecodeTLM.java b/ModuleEntrySatTelemetry/src/main/java/org/josast/EntrySat/app/DecodeTLM.java index ccc0e14..718f3c9 100644 --- a/ModuleEntrySatTelemetry/src/main/java/org/josast/EntrySat/app/DecodeTLM.java +++ b/ModuleEntrySatTelemetry/src/main/java/org/josast/EntrySat/app/DecodeTLM.java @@ -60,7 +60,8 @@ public class DecodeTLM { } } catch (ParseException e) { - // TODO Auto-generated catch block + + e.printStackTrace(); } diff --git a/ModuleEntrySatTelemetry/src/main/java/org/josast/EntrySat/app/testkaikaigenerated.java b/ModuleEntrySatTelemetry/src/main/java/org/josast/EntrySat/app/testkaikaigenerated.java index 153da3a..05d96d0 100644 --- a/ModuleEntrySatTelemetry/src/main/java/org/josast/EntrySat/app/testkaikaigenerated.java +++ b/ModuleEntrySatTelemetry/src/main/java/org/josast/EntrySat/app/testkaikaigenerated.java @@ -7,50 +7,49 @@ import org.josast.kaikai.generated.FrameTlmEntrySat.UiFrameTlmEntrySat; import io.kaitai.struct.ByteBufferKaitaiStream; public class testkaikaigenerated { - - private testkaikaigenerated() - { - + + private testkaikaigenerated() { + } public static void main(String[] args) { - // FrameTlmEntrySat frame = FrameTlmEntrySat.fromFile("myfile2.dat"); - // byte[] tlm = hexStringToByteArray("8c6c96a88240e09e9c60648ca46103f0000000000801c1200017100102249a78f25d1801dc010002a5a52175fe0800001603b0f2789a24c0"); - byte[] tlm = hexStringToByteArray("8c6c96a88240e09e9c60648ca46103f0000000000801c729001210031923febdcd170600f16b00009ea0981fc6b009befe23c0"); - FrameTlmEntrySat frame = new FrameTlmEntrySat(new ByteBufferKaitaiStream (tlm) ); - Ax25Frame ax = frame.frameTlmEntrySat(); - System.out.println(ax.ax25Header().destSsidRaw()); - System.out.println(ax.ax25Header().srcSsidRaw()); - System.out.println(ax.ax25Header().destCallsignRaw().destCallsignRor().destCallsign()); - System.out.println(ax.ax25Header().srcCallsignRaw().srcCallsignRor().srcCallsign()); - System.out.println(ax.ax25Header().ctl()); - UiFrameTlmEntrySat Ui = (UiFrameTlmEntrySat) ax.payload(); - System.out.println(Ui.packetheader().version()); - System.out.println(Ui.packetheader().packetType()); - System.out.println(Ui.packetheader().packetFlag()); - System.out.println(Ui.packetheader().packetApid()); - System.out.println(Ui.packetheader().sequenceControl()); - System.out.println(Ui.packetheader().packetLenght()); - System.out.println("SID : " + Ui.telemetryData().sid()); - System.out.println("battTemp : " + Ui.telemetryData().battTemp()); - System.out.println("eps33VCurrent : " + Ui.telemetryData().eps33VCurrent()); - System.out.println("eps5VCurrent : " + Ui.telemetryData().eps5VCurrent()); - System.out.println("epsBattVcurrent : " + Ui.telemetryData().epsBattVcurrent()); - System.out.println("epsTemp : " + Ui.telemetryData().epsTemp()); - System.out.println("trxTemp : " + Ui.telemetryData().trxTemp()); + // FrameTlmEntrySat frame = FrameTlmEntrySat.fromFile("myfile2.dat"); + // byte[] tlm = + // hexStringToByteArray("8c6c96a88240e09e9c60648ca46103f0000000000801c1200017100102249a78f25d1801dc010002a5a52175fe0800001603b0f2789a24c0"); + byte[] tlm = hexStringToByteArray( + "8c6c96a88240e09e9c60648ca46103f0000000000801c729001210031923febdcd170600f16b00009ea0981fc6b009befe23c0"); + FrameTlmEntrySat frame = new FrameTlmEntrySat(new ByteBufferKaitaiStream(tlm)); + Ax25Frame ax = frame.frameTlmEntrySat(); + System.out.println(ax.ax25Header().destSsidRaw()); + System.out.println(ax.ax25Header().srcSsidRaw()); + System.out.println(ax.ax25Header().destCallsignRaw().destCallsignRor().destCallsign()); + System.out.println(ax.ax25Header().srcCallsignRaw().srcCallsignRor().srcCallsign()); + System.out.println(ax.ax25Header().ctl()); + UiFrameTlmEntrySat Ui = (UiFrameTlmEntrySat) ax.payload(); + System.out.println(Ui.packetheader().version()); + System.out.println(Ui.packetheader().packetType()); + System.out.println(Ui.packetheader().packetFlag()); + System.out.println(Ui.packetheader().packetApid()); + System.out.println(Ui.packetheader().sequenceControl()); + System.out.println(Ui.packetheader().packetLenght()); + System.out.println("SID : " + Ui.telemetryData().sid()); + System.out.println("battTemp : " + Ui.telemetryData().battTemp()); + System.out.println("eps33VCurrent : " + Ui.telemetryData().eps33VCurrent()); + System.out.println("eps5VCurrent : " + Ui.telemetryData().eps5VCurrent()); + System.out.println("epsBattVcurrent : " + Ui.telemetryData().epsBattVcurrent()); + System.out.println("epsTemp : " + Ui.telemetryData().epsTemp()); + System.out.println("trxTemp : " + Ui.telemetryData().trxTemp()); } - - public static byte[] hexStringToByteArray(String s) { - byte[] b = new byte[s.length() / 2]; - for (int i = 0; i < b.length; i++) { - int index = i * 2; - int v = Integer.parseInt(s.substring(index, index + 2), 16); - b[i] = (byte) v; - } - return b; - } + byte[] b = new byte[s.length() / 2]; + for (int i = 0; i < b.length; i++) { + int index = i * 2; + int v = Integer.parseInt(s.substring(index, index + 2), 16); + b[i] = (byte) v; + } + return b; + } } diff --git a/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/AxBEqx.java b/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/AxBEqx.java index 00ad639..e6d634a 100644 --- a/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/AxBEqx.java +++ b/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/AxBEqx.java @@ -1,34 +1,36 @@ package org.josast.TLM; - public class AxBEqx implements ICalculData { private double A; private double B; + /** * Constructor with two parameters of the equation A & B + * * @param a * @param b */ - public AxBEqx(double a, double b ) { - A=a; - B=b; + public AxBEqx(double a, double b) { + A = a; + B = b; } -/** - * Equation is : y= A x + B - * @param x x value - * @return computed value - * @see org.josast.TLM.ICalculData#calcul(int) - */ - + + /** + * Equation is : y= A x + B + * + * @param x x value + * @return computed value + * @see org.josast.TLM.ICalculData#calcul(int) + */ + @Override public double calcul(int x) { // TODO Auto-generated method stub - return (double)x*A+B; + return (double) x * A + B; } - - public String toString () - { - return "" + A + " x + "+ B ; - + + public String toString() { + return "" + A + " x + " + B; + } } diff --git a/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/AxEqx.java b/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/AxEqx.java index 10a3f13..d378828 100644 --- a/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/AxEqx.java +++ b/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/AxEqx.java @@ -2,14 +2,15 @@ package org.josast.TLM; public class AxEqx implements ICalculData { double a; - public AxEqx(double a) - { - this.a=a; + + public AxEqx(double a) { + this.a = a; } + @Override public double calcul(int x) { // TODO Auto-generated method stub - return a*x; + return a * x; } } diff --git a/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/BooleanTLM.java b/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/BooleanTLM.java index bb22532..e989c44 100644 --- a/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/BooleanTLM.java +++ b/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/BooleanTLM.java @@ -1,52 +1,43 @@ package org.josast.TLM; - public class BooleanTLM { - - protected boolean [] bool = new boolean[8]; + protected boolean[] bool = new boolean[8]; public BooleanTLM() { - + } - public boolean getValue(int data) - { + public boolean getValue(int data) { return this.bool[data]; } - public boolean [] convertToBoolean (int in, int lengh) - { - - + + public boolean[] convertToBoolean(int in, int lengh) { + String maxAmpStr = Integer.toBinaryString(in); - char[] arr = maxAmpStr.toCharArray(); - boolean[] bool = new boolean[lengh]; - int j = 0; - for (int i = arr.length - 1; i >= 0; i--) { - if (arr[i] == '1') { - bool[j++] = true; - } else if (arr[i] == '0') { - bool[j++] = false; - } - } - - + char[] arr = maxAmpStr.toCharArray(); + boolean[] bool = new boolean[lengh]; + int j = 0; + for (int i = arr.length - 1; i >= 0; i--) { + if (arr[i] == '1') { + bool[j++] = true; + } else if (arr[i] == '0') { + bool[j++] = false; + } + } + return bool; } - public String toString() - { - - StringBuilder stringBuilder = new StringBuilder(); - for ( int j = 0; j < 8; j++ ) - { - - stringBuilder.append( bool[j]+","); - } - - return stringBuilder.toString(); - } - - - + public String toString() { + + StringBuilder stringBuilder = new StringBuilder(); + for (int j = 0; j < 8; j++) { + + stringBuilder.append(bool[j] + ","); + } + + return stringBuilder.toString(); + } + } diff --git a/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/CubicEqx.java b/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/CubicEqx.java index 4b618ca..a068f04 100644 --- a/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/CubicEqx.java +++ b/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/CubicEqx.java @@ -1,10 +1,8 @@ package org.josast.TLM; - /** - * Calculate Cubix equation - *
Ax3+bx2+Cx+d - *
+ * Calculate Cubix equation
+ * Ax3+bx2+Cx+d
* * @author Christophe * @@ -15,7 +13,7 @@ public class CubicEqx implements ICalculData { double B; double C; double D; - + /** * The Constructor. * @@ -42,8 +40,8 @@ public class CubicEqx implements ICalculData { * */ public double calcul(int x) { - - return A*Math.pow(x,3)+B*Math.pow(x,2)+C*x+D; + + return A * Math.pow(x, 3) + B * Math.pow(x, 2) + C * x + D; } } diff --git a/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/ICalculData.java b/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/ICalculData.java index 0bfc99f..8890d68 100644 --- a/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/ICalculData.java +++ b/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/ICalculData.java @@ -1,6 +1,5 @@ package org.josast.TLM; - /** * * @@ -14,5 +13,5 @@ public interface ICalculData { * @param x x used by the equation * @return y */ - double calcul(int x); + double calcul(int x); } diff --git a/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/TlmData.java b/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/TlmData.java index 638cebe..65ba050 100644 --- a/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/TlmData.java +++ b/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/TlmData.java @@ -5,34 +5,33 @@ package org.josast.TLM; * */ public class TlmData { - + /** The name. */ private String name; - + /** The formulae. */ private ICalculData formulae; - + /** The unit. */ private String unit; - + private String format; - + /** * The Constructor. * - * @param unit the unit + * @param unit the unit * @param formulae the formulae - * @param name the name + * @param name the name */ - public TlmData(String name, ICalculData formulae, String unit,String formatDislay) { + public TlmData(String name, ICalculData formulae, String unit, String formatDislay) { super(); this.name = name; this.formulae = formulae; this.unit = unit; this.format = formatDislay; } - - + public String getFormat() { return format; } @@ -41,8 +40,6 @@ public class TlmData { this.format = format; } - - /** * Gets the formulae. * @@ -51,7 +48,7 @@ public class TlmData { public ICalculData getFormulae() { return formulae; } - + /** * Sets the formulae. * @@ -60,7 +57,7 @@ public class TlmData { public void setFormulae(ICalculData formulae) { this.formulae = formulae; } - + /** * Gets the name. * @@ -69,7 +66,7 @@ public class TlmData { public String getName() { return name; } - + /** * Sets the name. * @@ -78,7 +75,7 @@ public class TlmData { public void setName(String name) { this.name = name; } - + /** * Gets the unit. * @@ -87,7 +84,7 @@ public class TlmData { public String getUnit() { return unit; } - + /** * Sets the unit. * @@ -96,10 +93,9 @@ public class TlmData { public void setUnit(String unit) { this.unit = unit; } - - public String toString () - { - return ""+ name +":"+formulae.toString()+" "+unit; - + + public String toString() { + return "" + name + ":" + formulae.toString() + " " + unit; + } } diff --git a/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/xEqx.java b/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/xEqx.java index cb4511b..ac8f639 100644 --- a/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/xEqx.java +++ b/ModuleEntrySatTelemetry/src/main/java/org/josast/TLM/xEqx.java @@ -2,7 +2,6 @@ package org.josast.TLM; public class xEqx implements ICalculData { - @Override public double calcul(int x) { diff --git a/ModuleEntrySatTelemetry/src/main/java/org/josast/kaikai/generated/FrameTlmEntrySat.java b/ModuleEntrySatTelemetry/src/main/java/org/josast/kaikai/generated/FrameTlmEntrySat.java index 957aafe..6da447d 100644 --- a/ModuleEntrySatTelemetry/src/main/java/org/josast/kaikai/generated/FrameTlmEntrySat.java +++ b/ModuleEntrySatTelemetry/src/main/java/org/josast/kaikai/generated/FrameTlmEntrySat.java @@ -9,530 +9,768 @@ import java.io.IOException; import java.nio.charset.Charset; public class FrameTlmEntrySat extends KaitaiStruct { - public static FrameTlmEntrySat fromFile(String fileName) throws IOException { - return new FrameTlmEntrySat(new ByteBufferKaitaiStream(fileName)); - } - - public FrameTlmEntrySat(KaitaiStream _io) { - this(_io, null, null); - } - - public FrameTlmEntrySat(KaitaiStream _io, KaitaiStruct _parent) { - this(_io, _parent, null); - } - - public FrameTlmEntrySat(KaitaiStream _io, KaitaiStruct _parent, FrameTlmEntrySat _root) { - super(_io); - this._parent = _parent; - this._root = _root == null ? this : _root; - _read(); - } - private void _read() { - this.frameTlmEntrySat = new Ax25Frame(this._io, this, _root); - } - public static class Ax25Frame extends KaitaiStruct { - public static Ax25Frame fromFile(String fileName) throws IOException { - return new Ax25Frame(new ByteBufferKaitaiStream(fileName)); - } - - public Ax25Frame(KaitaiStream _io) { - this(_io, null, null); - } - - public Ax25Frame(KaitaiStream _io, FrameTlmEntrySat _parent) { - this(_io, _parent, null); - } - - public Ax25Frame(KaitaiStream _io, FrameTlmEntrySat _parent, FrameTlmEntrySat _root) { - super(_io); - this._parent = _parent; - this._root = _root; - _read(); - } - private void _read() { - this.ax25Header = new Ax25Header(this._io, this, _root); - switch ((ax25Header().ctl() & 19)) { - case 0: { - this.payload = new IFrame(this._io, this, _root); - break; - } - case 3: { - this.payload = new UiFrameTlmEntrySat(this._io, this, _root); - break; - } - case 19: { - this.payload = new IFrame(this._io, this, _root); - break; - } - case 16: { - this.payload = new IFrame(this._io, this, _root); - break; - } - case 18: { - this.payload = new IFrame(this._io, this, _root); - break; - } - case 2: { - this.payload = new IFrame(this._io, this, _root); - break; - } - } - } - private Ax25Header ax25Header; - private KaitaiStruct payload; - private FrameTlmEntrySat _root; - private FrameTlmEntrySat _parent; - public Ax25Header ax25Header() { return ax25Header; } - public KaitaiStruct payload() { return payload; } - public FrameTlmEntrySat _root() { return _root; } - public FrameTlmEntrySat _parent() { return _parent; } - } - public static class UiFrameTlmEntrySat extends KaitaiStruct { - public static UiFrameTlmEntrySat fromFile(String fileName) throws IOException { - return new UiFrameTlmEntrySat(new ByteBufferKaitaiStream(fileName)); - } - - public UiFrameTlmEntrySat(KaitaiStream _io) { - this(_io, null, null); - } - - public UiFrameTlmEntrySat(KaitaiStream _io, FrameTlmEntrySat.Ax25Frame _parent) { - this(_io, _parent, null); - } - - public UiFrameTlmEntrySat(KaitaiStream _io, FrameTlmEntrySat.Ax25Frame _parent, FrameTlmEntrySat _root) { - super(_io); - this._parent = _parent; - this._root = _root; - _read(); - } - private void _read() { - this.pid = this._io.readU1(); - this.time = this._io.readU4be(); - this.packetheader = new Packetheader(this._io, this, _root); - this.telemetryDataFiledHearder = new TelemetryDataFiledHearder(this._io, this, _root); - this.telemetryData = new TelemetryData(this._io, this, _root); - this.ax25Info = this._io.readBytesFull(); - } - private int pid; - private long time; - private Packetheader packetheader; - private TelemetryDataFiledHearder telemetryDataFiledHearder; - private TelemetryData telemetryData; - private byte[] ax25Info; - private FrameTlmEntrySat _root; - private FrameTlmEntrySat.Ax25Frame _parent; - public int pid() { return pid; } - public long time() { return time; } - public Packetheader packetheader() { return packetheader; } - public TelemetryDataFiledHearder telemetryDataFiledHearder() { return telemetryDataFiledHearder; } - public TelemetryData telemetryData() { return telemetryData; } - public byte[] ax25Info() { return ax25Info; } - public FrameTlmEntrySat _root() { return _root; } - public FrameTlmEntrySat.Ax25Frame _parent() { return _parent; } - } - public static class DestCallsign extends KaitaiStruct { - public static DestCallsign fromFile(String fileName) throws IOException { - return new DestCallsign(new ByteBufferKaitaiStream(fileName)); - } - - public DestCallsign(KaitaiStream _io) { - this(_io, null, null); - } - - public DestCallsign(KaitaiStream _io, FrameTlmEntrySat.DestCallsignRaw _parent) { - this(_io, _parent, null); - } - - public DestCallsign(KaitaiStream _io, FrameTlmEntrySat.DestCallsignRaw _parent, FrameTlmEntrySat _root) { - super(_io); - this._parent = _parent; - this._root = _root; - _read(); - } - private void _read() { - this.destCallsign = new String(this._io.readBytes(6), Charset.forName("ASCII")); - } - private String destCallsign; - private FrameTlmEntrySat _root; - private FrameTlmEntrySat.DestCallsignRaw _parent; - public String destCallsign() { return destCallsign; } - public FrameTlmEntrySat _root() { return _root; } - public FrameTlmEntrySat.DestCallsignRaw _parent() { return _parent; } - } - public static class Ax25Header extends KaitaiStruct { - public static Ax25Header fromFile(String fileName) throws IOException { - return new Ax25Header(new ByteBufferKaitaiStream(fileName)); - } - - public Ax25Header(KaitaiStream _io) { - this(_io, null, null); - } - - public Ax25Header(KaitaiStream _io, FrameTlmEntrySat.Ax25Frame _parent) { - this(_io, _parent, null); - } - - public Ax25Header(KaitaiStream _io, FrameTlmEntrySat.Ax25Frame _parent, FrameTlmEntrySat _root) { - super(_io); - this._parent = _parent; - this._root = _root; - _read(); - } - private void _read() { - this.destCallsignRaw = new DestCallsignRaw(this._io, this, _root); - this.destSsidRaw = this._io.readU1(); - this.srcCallsignRaw = new SrcCallsignRaw(this._io, this, _root); - this.srcSsidRaw = this._io.readU1(); - this.ctl = this._io.readU1(); - } - private Integer srcSsid; - public Integer srcSsid() { - if (this.srcSsid != null) - return this.srcSsid; - int _tmp = (int) (((srcSsidRaw() & 15) >> 1)); - this.srcSsid = _tmp; - return this.srcSsid; - } - private Integer destSsid; - public Integer destSsid() { - if (this.destSsid != null) - return this.destSsid; - int _tmp = (int) (((destSsidRaw() & 15) >> 1)); - this.destSsid = _tmp; - return this.destSsid; - } - private DestCallsignRaw destCallsignRaw; - private int destSsidRaw; - private SrcCallsignRaw srcCallsignRaw; - private int srcSsidRaw; - private int ctl; - private FrameTlmEntrySat _root; - private FrameTlmEntrySat.Ax25Frame _parent; - public DestCallsignRaw destCallsignRaw() { return destCallsignRaw; } - public int destSsidRaw() { return destSsidRaw; } - public SrcCallsignRaw srcCallsignRaw() { return srcCallsignRaw; } - public int srcSsidRaw() { return srcSsidRaw; } - public int ctl() { return ctl; } - public FrameTlmEntrySat _root() { return _root; } - public FrameTlmEntrySat.Ax25Frame _parent() { return _parent; } - } - public static class SrcCallsignRaw extends KaitaiStruct { - public static SrcCallsignRaw fromFile(String fileName) throws IOException { - return new SrcCallsignRaw(new ByteBufferKaitaiStream(fileName)); - } - - public SrcCallsignRaw(KaitaiStream _io) { - this(_io, null, null); - } - - public SrcCallsignRaw(KaitaiStream _io, FrameTlmEntrySat.Ax25Header _parent) { - this(_io, _parent, null); - } - - public SrcCallsignRaw(KaitaiStream _io, FrameTlmEntrySat.Ax25Header _parent, FrameTlmEntrySat _root) { - super(_io); - this._parent = _parent; - this._root = _root; - _read(); - } - private void _read() { - this._raw__raw_srcCallsignRor = this._io.readBytes(6); - this._raw_srcCallsignRor = KaitaiStream.processRotateLeft(this._raw__raw_srcCallsignRor, 8 - (1), 1); - KaitaiStream _io__raw_srcCallsignRor = new ByteBufferKaitaiStream(_raw_srcCallsignRor); - this.srcCallsignRor = new SrcCallsign(_io__raw_srcCallsignRor, this, _root); - } - private SrcCallsign srcCallsignRor; - private FrameTlmEntrySat _root; - private FrameTlmEntrySat.Ax25Header _parent; - private byte[] _raw__raw_srcCallsignRor; - private byte[] _raw_srcCallsignRor; - public SrcCallsign srcCallsignRor() { return srcCallsignRor; } - public FrameTlmEntrySat _root() { return _root; } - public FrameTlmEntrySat.Ax25Header _parent() { return _parent; } - public byte[] _raw__raw_srcCallsignRor() { return _raw__raw_srcCallsignRor; } - public byte[] _raw_srcCallsignRor() { return _raw_srcCallsignRor; } - } - public static class IFrame extends KaitaiStruct { - public static IFrame fromFile(String fileName) throws IOException { - return new IFrame(new ByteBufferKaitaiStream(fileName)); - } - - public IFrame(KaitaiStream _io) { - this(_io, null, null); - } - - public IFrame(KaitaiStream _io, FrameTlmEntrySat.Ax25Frame _parent) { - this(_io, _parent, null); - } - - public IFrame(KaitaiStream _io, FrameTlmEntrySat.Ax25Frame _parent, FrameTlmEntrySat _root) { - super(_io); - this._parent = _parent; - this._root = _root; - _read(); - } - private void _read() { - this.pid = this._io.readU1(); - this.ax25Info = this._io.readBytesFull(); - } - private int pid; - private byte[] ax25Info; - private FrameTlmEntrySat _root; - private FrameTlmEntrySat.Ax25Frame _parent; - public int pid() { return pid; } - public byte[] ax25Info() { return ax25Info; } - public FrameTlmEntrySat _root() { return _root; } - public FrameTlmEntrySat.Ax25Frame _parent() { return _parent; } - } - public static class TelemetryDataFiledHearder extends KaitaiStruct { - public static TelemetryDataFiledHearder fromFile(String fileName) throws IOException { - return new TelemetryDataFiledHearder(new ByteBufferKaitaiStream(fileName)); - } - - public TelemetryDataFiledHearder(KaitaiStream _io) { - this(_io, null, null); - } - - public TelemetryDataFiledHearder(KaitaiStream _io, FrameTlmEntrySat.UiFrameTlmEntrySat _parent) { - this(_io, _parent, null); - } - - public TelemetryDataFiledHearder(KaitaiStream _io, FrameTlmEntrySat.UiFrameTlmEntrySat _parent, FrameTlmEntrySat _root) { - super(_io); - this._parent = _parent; - this._root = _root; - _read(); - } - private void _read() { - this.spare1 = this._io.readBitsInt(1) != 0; - this.pusVersion = this._io.readBitsInt(3); - this.spare2 = this._io.readBitsInt(4); - this._io.alignToByte(); - this.service = this._io.readU1(); - this.serviceSubtype = this._io.readU1(); - this.time2 = this._io.readBytes(5); - } - private boolean spare1; - private long pusVersion; - private long spare2; - private int service; - private int serviceSubtype; - private byte[] time2; - private FrameTlmEntrySat _root; - private FrameTlmEntrySat.UiFrameTlmEntrySat _parent; - public boolean spare1() { return spare1; } - public long pusVersion() { return pusVersion; } - public long spare2() { return spare2; } - public int service() { return service; } - public int serviceSubtype() { return serviceSubtype; } - public byte[] time2() { return time2; } - public FrameTlmEntrySat _root() { return _root; } - public FrameTlmEntrySat.UiFrameTlmEntrySat _parent() { return _parent; } - } - public static class TelemetryData extends KaitaiStruct { - public static TelemetryData fromFile(String fileName) throws IOException { - return new TelemetryData(new ByteBufferKaitaiStream(fileName)); - } - - public TelemetryData(KaitaiStream _io) { - this(_io, null, null); - } - - public TelemetryData(KaitaiStream _io, FrameTlmEntrySat.UiFrameTlmEntrySat _parent) { - this(_io, _parent, null); - } - - public TelemetryData(KaitaiStream _io, FrameTlmEntrySat.UiFrameTlmEntrySat _parent, FrameTlmEntrySat _root) { - super(_io); - this._parent = _parent; - this._root = _root; - _read(); - } - private void _read() { - this.sid = this._io.readU1(); - this.modeSafe = this._io.readU1(); - this.epsVbatt = this._io.readU1(); - this.epsBattVcurrent = this._io.readU1(); - this.eps33VCurrent = this._io.readU1(); - this.eps5VCurrent = this._io.readU1(); - this.trxTemp = this._io.readU1(); - this.epsTemp = this._io.readU1(); - this.battTemp = this._io.readU1(); - } - private int sid; - private int modeSafe; - private int epsVbatt; - private int epsBattVcurrent; - private int eps33VCurrent; - private int eps5VCurrent; - private int trxTemp; - private int epsTemp; - private int battTemp; - private FrameTlmEntrySat _root; - private FrameTlmEntrySat.UiFrameTlmEntrySat _parent; - public int sid() { return sid; } - - /** - * Operational status. 0 = Safe mode 1 = Orbital or Entry mode - */ - public int modeSafe() { return modeSafe; } - - /** - * Battery voltage in V formulae ð?‘¦ = 3 + 0.05×ð??Š - */ - public int epsVbatt() { return epsVbatt; } - - /** - * Battery bus current in A formulae ð?‘¦ = −1 + 0.0078740×ð?‘¥ - */ - public int epsBattVcurrent() { return epsBattVcurrent; } - - /** - * 3.3V bus current in A formulae ð?‘¦ = 0.025*x - */ - public int eps33VCurrent() { return eps33VCurrent; } - - /** - * 5V bus current in A formulae ð?‘¦ = 0.025*x - */ - public int eps5VCurrent() { return eps5VCurrent; } - - /** - * Transceiver’s temperature in °C formulae ð?‘¦ = −15 + 0.25×ð?‘¥ - */ - public int trxTemp() { return trxTemp; } - - /** - * Power system’s temperature °C formulae ð?‘¦ = −15 + 0.25×ð?‘¥ - */ - public int epsTemp() { return epsTemp; } - - /** - * Batteries temperature in °C formulae ð?‘¦ = −15 + 0.25×ð?‘¥ - */ - public int battTemp() { return battTemp; } - public FrameTlmEntrySat _root() { return _root; } - public FrameTlmEntrySat.UiFrameTlmEntrySat _parent() { return _parent; } - } - public static class Packetheader extends KaitaiStruct { - public static Packetheader fromFile(String fileName) throws IOException { - return new Packetheader(new ByteBufferKaitaiStream(fileName)); - } - - public Packetheader(KaitaiStream _io) { - this(_io, null, null); - } - - public Packetheader(KaitaiStream _io, FrameTlmEntrySat.UiFrameTlmEntrySat _parent) { - this(_io, _parent, null); - } - - public Packetheader(KaitaiStream _io, FrameTlmEntrySat.UiFrameTlmEntrySat _parent, FrameTlmEntrySat _root) { - super(_io); - this._parent = _parent; - this._root = _root; - _read(); - } - private void _read() { - this.version = this._io.readBitsInt(3); - this.packetType = this._io.readBitsInt(1) != 0; - this.packetFlag = this._io.readBitsInt(1) != 0; - this.packetApid = this._io.readBitsInt(11); - this._io.alignToByte(); - this.sequenceControl = this._io.readU2be(); - this.packetLenght = this._io.readU2be(); - } - private long version; - private boolean packetType; - private boolean packetFlag; - private long packetApid; - private int sequenceControl; - private int packetLenght; - private FrameTlmEntrySat _root; - private FrameTlmEntrySat.UiFrameTlmEntrySat _parent; - public long version() { return version; } - public boolean packetType() { return packetType; } - public boolean packetFlag() { return packetFlag; } - public long packetApid() { return packetApid; } - public int sequenceControl() { return sequenceControl; } - public int packetLenght() { return packetLenght; } - public FrameTlmEntrySat _root() { return _root; } - public FrameTlmEntrySat.UiFrameTlmEntrySat _parent() { return _parent; } - } - public static class DestCallsignRaw extends KaitaiStruct { - public static DestCallsignRaw fromFile(String fileName) throws IOException { - return new DestCallsignRaw(new ByteBufferKaitaiStream(fileName)); - } - - public DestCallsignRaw(KaitaiStream _io) { - this(_io, null, null); - } - - public DestCallsignRaw(KaitaiStream _io, FrameTlmEntrySat.Ax25Header _parent) { - this(_io, _parent, null); - } - - public DestCallsignRaw(KaitaiStream _io, FrameTlmEntrySat.Ax25Header _parent, FrameTlmEntrySat _root) { - super(_io); - this._parent = _parent; - this._root = _root; - _read(); - } - private void _read() { - this._raw__raw_destCallsignRor = this._io.readBytes(6); - this._raw_destCallsignRor = KaitaiStream.processRotateLeft(this._raw__raw_destCallsignRor, 8 - (1), 1); - KaitaiStream _io__raw_destCallsignRor = new ByteBufferKaitaiStream(_raw_destCallsignRor); - this.destCallsignRor = new DestCallsign(_io__raw_destCallsignRor, this, _root); - } - private DestCallsign destCallsignRor; - private FrameTlmEntrySat _root; - private FrameTlmEntrySat.Ax25Header _parent; - private byte[] _raw__raw_destCallsignRor; - private byte[] _raw_destCallsignRor; - public DestCallsign destCallsignRor() { return destCallsignRor; } - public FrameTlmEntrySat _root() { return _root; } - public FrameTlmEntrySat.Ax25Header _parent() { return _parent; } - public byte[] _raw__raw_destCallsignRor() { return _raw__raw_destCallsignRor; } - public byte[] _raw_destCallsignRor() { return _raw_destCallsignRor; } - } - public static class SrcCallsign extends KaitaiStruct { - public static SrcCallsign fromFile(String fileName) throws IOException { - return new SrcCallsign(new ByteBufferKaitaiStream(fileName)); - } - - public SrcCallsign(KaitaiStream _io) { - this(_io, null, null); - } - - public SrcCallsign(KaitaiStream _io, FrameTlmEntrySat.SrcCallsignRaw _parent) { - this(_io, _parent, null); - } - - public SrcCallsign(KaitaiStream _io, FrameTlmEntrySat.SrcCallsignRaw _parent, FrameTlmEntrySat _root) { - super(_io); - this._parent = _parent; - this._root = _root; - _read(); - } - private void _read() { - this.srcCallsign = new String(this._io.readBytes(6), Charset.forName("ASCII")); - } - private String srcCallsign; - private FrameTlmEntrySat _root; - private FrameTlmEntrySat.SrcCallsignRaw _parent; - public String srcCallsign() { return srcCallsign; } - public FrameTlmEntrySat _root() { return _root; } - public FrameTlmEntrySat.SrcCallsignRaw _parent() { return _parent; } - } - private Ax25Frame frameTlmEntrySat; - private FrameTlmEntrySat _root; - private KaitaiStruct _parent; - - /** - * @see Source - */ - public Ax25Frame frameTlmEntrySat() { return frameTlmEntrySat; } - public FrameTlmEntrySat _root() { return _root; } - public KaitaiStruct _parent() { return _parent; } + public static FrameTlmEntrySat fromFile(String fileName) throws IOException { + return new FrameTlmEntrySat(new ByteBufferKaitaiStream(fileName)); + } + + public FrameTlmEntrySat(KaitaiStream _io) { + this(_io, null, null); + } + + public FrameTlmEntrySat(KaitaiStream _io, KaitaiStruct _parent) { + this(_io, _parent, null); + } + + public FrameTlmEntrySat(KaitaiStream _io, KaitaiStruct _parent, FrameTlmEntrySat _root) { + super(_io); + this._parent = _parent; + this._root = _root == null ? this : _root; + _read(); + } + + private void _read() { + this.frameTlmEntrySat = new Ax25Frame(this._io, this, _root); + } + + public static class Ax25Frame extends KaitaiStruct { + public static Ax25Frame fromFile(String fileName) throws IOException { + return new Ax25Frame(new ByteBufferKaitaiStream(fileName)); + } + + public Ax25Frame(KaitaiStream _io) { + this(_io, null, null); + } + + public Ax25Frame(KaitaiStream _io, FrameTlmEntrySat _parent) { + this(_io, _parent, null); + } + + public Ax25Frame(KaitaiStream _io, FrameTlmEntrySat _parent, FrameTlmEntrySat _root) { + super(_io); + this._parent = _parent; + this._root = _root; + _read(); + } + + private void _read() { + this.ax25Header = new Ax25Header(this._io, this, _root); + switch ((ax25Header().ctl() & 19)) { + case 0: { + this.payload = new IFrame(this._io, this, _root); + break; + } + case 3: { + this.payload = new UiFrameTlmEntrySat(this._io, this, _root); + break; + } + case 19: { + this.payload = new IFrame(this._io, this, _root); + break; + } + case 16: { + this.payload = new IFrame(this._io, this, _root); + break; + } + case 18: { + this.payload = new IFrame(this._io, this, _root); + break; + } + case 2: { + this.payload = new IFrame(this._io, this, _root); + break; + } + } + } + + private Ax25Header ax25Header; + private KaitaiStruct payload; + private FrameTlmEntrySat _root; + private FrameTlmEntrySat _parent; + + public Ax25Header ax25Header() { + return ax25Header; + } + + public KaitaiStruct payload() { + return payload; + } + + public FrameTlmEntrySat _root() { + return _root; + } + + public FrameTlmEntrySat _parent() { + return _parent; + } + } + + public static class UiFrameTlmEntrySat extends KaitaiStruct { + public static UiFrameTlmEntrySat fromFile(String fileName) throws IOException { + return new UiFrameTlmEntrySat(new ByteBufferKaitaiStream(fileName)); + } + + public UiFrameTlmEntrySat(KaitaiStream _io) { + this(_io, null, null); + } + + public UiFrameTlmEntrySat(KaitaiStream _io, FrameTlmEntrySat.Ax25Frame _parent) { + this(_io, _parent, null); + } + + public UiFrameTlmEntrySat(KaitaiStream _io, FrameTlmEntrySat.Ax25Frame _parent, FrameTlmEntrySat _root) { + super(_io); + this._parent = _parent; + this._root = _root; + _read(); + } + + private void _read() { + this.pid = this._io.readU1(); + this.time = this._io.readU4be(); + this.packetheader = new Packetheader(this._io, this, _root); + this.telemetryDataFiledHearder = new TelemetryDataFiledHearder(this._io, this, _root); + this.telemetryData = new TelemetryData(this._io, this, _root); + this.ax25Info = this._io.readBytesFull(); + } + + private int pid; + private long time; + private Packetheader packetheader; + private TelemetryDataFiledHearder telemetryDataFiledHearder; + private TelemetryData telemetryData; + private byte[] ax25Info; + private FrameTlmEntrySat _root; + private FrameTlmEntrySat.Ax25Frame _parent; + + public int pid() { + return pid; + } + + public long time() { + return time; + } + + public Packetheader packetheader() { + return packetheader; + } + + public TelemetryDataFiledHearder telemetryDataFiledHearder() { + return telemetryDataFiledHearder; + } + + public TelemetryData telemetryData() { + return telemetryData; + } + + public byte[] ax25Info() { + return ax25Info; + } + + public FrameTlmEntrySat _root() { + return _root; + } + + public FrameTlmEntrySat.Ax25Frame _parent() { + return _parent; + } + } + + public static class DestCallsign extends KaitaiStruct { + public static DestCallsign fromFile(String fileName) throws IOException { + return new DestCallsign(new ByteBufferKaitaiStream(fileName)); + } + + public DestCallsign(KaitaiStream _io) { + this(_io, null, null); + } + + public DestCallsign(KaitaiStream _io, FrameTlmEntrySat.DestCallsignRaw _parent) { + this(_io, _parent, null); + } + + public DestCallsign(KaitaiStream _io, FrameTlmEntrySat.DestCallsignRaw _parent, FrameTlmEntrySat _root) { + super(_io); + this._parent = _parent; + this._root = _root; + _read(); + } + + private void _read() { + this.destCallsign = new String(this._io.readBytes(6), Charset.forName("ASCII")); + } + + private String destCallsign; + private FrameTlmEntrySat _root; + private FrameTlmEntrySat.DestCallsignRaw _parent; + + public String destCallsign() { + return destCallsign; + } + + public FrameTlmEntrySat _root() { + return _root; + } + + public FrameTlmEntrySat.DestCallsignRaw _parent() { + return _parent; + } + } + + public static class Ax25Header extends KaitaiStruct { + public static Ax25Header fromFile(String fileName) throws IOException { + return new Ax25Header(new ByteBufferKaitaiStream(fileName)); + } + + public Ax25Header(KaitaiStream _io) { + this(_io, null, null); + } + + public Ax25Header(KaitaiStream _io, FrameTlmEntrySat.Ax25Frame _parent) { + this(_io, _parent, null); + } + + public Ax25Header(KaitaiStream _io, FrameTlmEntrySat.Ax25Frame _parent, FrameTlmEntrySat _root) { + super(_io); + this._parent = _parent; + this._root = _root; + _read(); + } + + private void _read() { + this.destCallsignRaw = new DestCallsignRaw(this._io, this, _root); + this.destSsidRaw = this._io.readU1(); + this.srcCallsignRaw = new SrcCallsignRaw(this._io, this, _root); + this.srcSsidRaw = this._io.readU1(); + this.ctl = this._io.readU1(); + } + + private Integer srcSsid; + + public Integer srcSsid() { + if (this.srcSsid != null) + return this.srcSsid; + int _tmp = (int) (((srcSsidRaw() & 15) >> 1)); + this.srcSsid = _tmp; + return this.srcSsid; + } + + private Integer destSsid; + + public Integer destSsid() { + if (this.destSsid != null) + return this.destSsid; + int _tmp = (int) (((destSsidRaw() & 15) >> 1)); + this.destSsid = _tmp; + return this.destSsid; + } + + private DestCallsignRaw destCallsignRaw; + private int destSsidRaw; + private SrcCallsignRaw srcCallsignRaw; + private int srcSsidRaw; + private int ctl; + private FrameTlmEntrySat _root; + private FrameTlmEntrySat.Ax25Frame _parent; + + public DestCallsignRaw destCallsignRaw() { + return destCallsignRaw; + } + + public int destSsidRaw() { + return destSsidRaw; + } + + public SrcCallsignRaw srcCallsignRaw() { + return srcCallsignRaw; + } + + public int srcSsidRaw() { + return srcSsidRaw; + } + + public int ctl() { + return ctl; + } + + public FrameTlmEntrySat _root() { + return _root; + } + + public FrameTlmEntrySat.Ax25Frame _parent() { + return _parent; + } + } + + public static class SrcCallsignRaw extends KaitaiStruct { + public static SrcCallsignRaw fromFile(String fileName) throws IOException { + return new SrcCallsignRaw(new ByteBufferKaitaiStream(fileName)); + } + + public SrcCallsignRaw(KaitaiStream _io) { + this(_io, null, null); + } + + public SrcCallsignRaw(KaitaiStream _io, FrameTlmEntrySat.Ax25Header _parent) { + this(_io, _parent, null); + } + + public SrcCallsignRaw(KaitaiStream _io, FrameTlmEntrySat.Ax25Header _parent, FrameTlmEntrySat _root) { + super(_io); + this._parent = _parent; + this._root = _root; + _read(); + } + + private void _read() { + this._raw__raw_srcCallsignRor = this._io.readBytes(6); + this._raw_srcCallsignRor = KaitaiStream.processRotateLeft(this._raw__raw_srcCallsignRor, 8 - (1), 1); + KaitaiStream _io__raw_srcCallsignRor = new ByteBufferKaitaiStream(_raw_srcCallsignRor); + this.srcCallsignRor = new SrcCallsign(_io__raw_srcCallsignRor, this, _root); + } + + private SrcCallsign srcCallsignRor; + private FrameTlmEntrySat _root; + private FrameTlmEntrySat.Ax25Header _parent; + private byte[] _raw__raw_srcCallsignRor; + private byte[] _raw_srcCallsignRor; + + public SrcCallsign srcCallsignRor() { + return srcCallsignRor; + } + + public FrameTlmEntrySat _root() { + return _root; + } + + public FrameTlmEntrySat.Ax25Header _parent() { + return _parent; + } + + public byte[] _raw__raw_srcCallsignRor() { + return _raw__raw_srcCallsignRor; + } + + public byte[] _raw_srcCallsignRor() { + return _raw_srcCallsignRor; + } + } + + public static class IFrame extends KaitaiStruct { + public static IFrame fromFile(String fileName) throws IOException { + return new IFrame(new ByteBufferKaitaiStream(fileName)); + } + + public IFrame(KaitaiStream _io) { + this(_io, null, null); + } + + public IFrame(KaitaiStream _io, FrameTlmEntrySat.Ax25Frame _parent) { + this(_io, _parent, null); + } + + public IFrame(KaitaiStream _io, FrameTlmEntrySat.Ax25Frame _parent, FrameTlmEntrySat _root) { + super(_io); + this._parent = _parent; + this._root = _root; + _read(); + } + + private void _read() { + this.pid = this._io.readU1(); + this.ax25Info = this._io.readBytesFull(); + } + + private int pid; + private byte[] ax25Info; + private FrameTlmEntrySat _root; + private FrameTlmEntrySat.Ax25Frame _parent; + + public int pid() { + return pid; + } + + public byte[] ax25Info() { + return ax25Info; + } + + public FrameTlmEntrySat _root() { + return _root; + } + + public FrameTlmEntrySat.Ax25Frame _parent() { + return _parent; + } + } + + public static class TelemetryDataFiledHearder extends KaitaiStruct { + public static TelemetryDataFiledHearder fromFile(String fileName) throws IOException { + return new TelemetryDataFiledHearder(new ByteBufferKaitaiStream(fileName)); + } + + public TelemetryDataFiledHearder(KaitaiStream _io) { + this(_io, null, null); + } + + public TelemetryDataFiledHearder(KaitaiStream _io, FrameTlmEntrySat.UiFrameTlmEntrySat _parent) { + this(_io, _parent, null); + } + + public TelemetryDataFiledHearder(KaitaiStream _io, FrameTlmEntrySat.UiFrameTlmEntrySat _parent, + FrameTlmEntrySat _root) { + super(_io); + this._parent = _parent; + this._root = _root; + _read(); + } + + private void _read() { + this.spare1 = this._io.readBitsInt(1) != 0; + this.pusVersion = this._io.readBitsInt(3); + this.spare2 = this._io.readBitsInt(4); + this._io.alignToByte(); + this.service = this._io.readU1(); + this.serviceSubtype = this._io.readU1(); + this.time2 = this._io.readBytes(5); + } + + private boolean spare1; + private long pusVersion; + private long spare2; + private int service; + private int serviceSubtype; + private byte[] time2; + private FrameTlmEntrySat _root; + private FrameTlmEntrySat.UiFrameTlmEntrySat _parent; + + public boolean spare1() { + return spare1; + } + + public long pusVersion() { + return pusVersion; + } + + public long spare2() { + return spare2; + } + + public int service() { + return service; + } + + public int serviceSubtype() { + return serviceSubtype; + } + + public byte[] time2() { + return time2; + } + + public FrameTlmEntrySat _root() { + return _root; + } + + public FrameTlmEntrySat.UiFrameTlmEntrySat _parent() { + return _parent; + } + } + + public static class TelemetryData extends KaitaiStruct { + public static TelemetryData fromFile(String fileName) throws IOException { + return new TelemetryData(new ByteBufferKaitaiStream(fileName)); + } + + public TelemetryData(KaitaiStream _io) { + this(_io, null, null); + } + + public TelemetryData(KaitaiStream _io, FrameTlmEntrySat.UiFrameTlmEntrySat _parent) { + this(_io, _parent, null); + } + + public TelemetryData(KaitaiStream _io, FrameTlmEntrySat.UiFrameTlmEntrySat _parent, FrameTlmEntrySat _root) { + super(_io); + this._parent = _parent; + this._root = _root; + _read(); + } + + private void _read() { + this.sid = this._io.readU1(); + this.modeSafe = this._io.readU1(); + this.epsVbatt = this._io.readU1(); + this.epsBattVcurrent = this._io.readU1(); + this.eps33VCurrent = this._io.readU1(); + this.eps5VCurrent = this._io.readU1(); + this.trxTemp = this._io.readU1(); + this.epsTemp = this._io.readU1(); + this.battTemp = this._io.readU1(); + } + + private int sid; + private int modeSafe; + private int epsVbatt; + private int epsBattVcurrent; + private int eps33VCurrent; + private int eps5VCurrent; + private int trxTemp; + private int epsTemp; + private int battTemp; + private FrameTlmEntrySat _root; + private FrameTlmEntrySat.UiFrameTlmEntrySat _parent; + + public int sid() { + return sid; + } + + /** + * Operational status. 0 = Safe mode 1 = Orbital or Entry mode + */ + public int modeSafe() { + return modeSafe; + } + + /** + * Battery voltage in V formulae ð?‘¦ = 3 + 0.05×ð??Š + */ + public int epsVbatt() { + return epsVbatt; + } + + /** + * Battery bus current in A formulae ð?‘¦ = −1 + 0.0078740×ð?‘¥ + */ + public int epsBattVcurrent() { + return epsBattVcurrent; + } + + /** + * 3.3V bus current in A formulae ð?‘¦ = 0.025*x + */ + public int eps33VCurrent() { + return eps33VCurrent; + } + + /** + * 5V bus current in A formulae ð?‘¦ = 0.025*x + */ + public int eps5VCurrent() { + return eps5VCurrent; + } + + /** + * Transceiver’s temperature in °C formulae ð?‘¦ = −15 + 0.25×ð?‘¥ + */ + public int trxTemp() { + return trxTemp; + } + + /** + * Power system’s temperature °C formulae ð?‘¦ = −15 + 0.25×ð?‘¥ + */ + public int epsTemp() { + return epsTemp; + } + + /** + * Batteries temperature in °C formulae ð?‘¦ = −15 + 0.25×ð?‘¥ + */ + public int battTemp() { + return battTemp; + } + + public FrameTlmEntrySat _root() { + return _root; + } + + public FrameTlmEntrySat.UiFrameTlmEntrySat _parent() { + return _parent; + } + } + + public static class Packetheader extends KaitaiStruct { + public static Packetheader fromFile(String fileName) throws IOException { + return new Packetheader(new ByteBufferKaitaiStream(fileName)); + } + + public Packetheader(KaitaiStream _io) { + this(_io, null, null); + } + + public Packetheader(KaitaiStream _io, FrameTlmEntrySat.UiFrameTlmEntrySat _parent) { + this(_io, _parent, null); + } + + public Packetheader(KaitaiStream _io, FrameTlmEntrySat.UiFrameTlmEntrySat _parent, FrameTlmEntrySat _root) { + super(_io); + this._parent = _parent; + this._root = _root; + _read(); + } + + private void _read() { + this.version = this._io.readBitsInt(3); + this.packetType = this._io.readBitsInt(1) != 0; + this.packetFlag = this._io.readBitsInt(1) != 0; + this.packetApid = this._io.readBitsInt(11); + this._io.alignToByte(); + this.sequenceControl = this._io.readU2be(); + this.packetLenght = this._io.readU2be(); + } + + private long version; + private boolean packetType; + private boolean packetFlag; + private long packetApid; + private int sequenceControl; + private int packetLenght; + private FrameTlmEntrySat _root; + private FrameTlmEntrySat.UiFrameTlmEntrySat _parent; + + public long version() { + return version; + } + + public boolean packetType() { + return packetType; + } + + public boolean packetFlag() { + return packetFlag; + } + + public long packetApid() { + return packetApid; + } + + public int sequenceControl() { + return sequenceControl; + } + + public int packetLenght() { + return packetLenght; + } + + public FrameTlmEntrySat _root() { + return _root; + } + + public FrameTlmEntrySat.UiFrameTlmEntrySat _parent() { + return _parent; + } + } + + public static class DestCallsignRaw extends KaitaiStruct { + public static DestCallsignRaw fromFile(String fileName) throws IOException { + return new DestCallsignRaw(new ByteBufferKaitaiStream(fileName)); + } + + public DestCallsignRaw(KaitaiStream _io) { + this(_io, null, null); + } + + public DestCallsignRaw(KaitaiStream _io, FrameTlmEntrySat.Ax25Header _parent) { + this(_io, _parent, null); + } + + public DestCallsignRaw(KaitaiStream _io, FrameTlmEntrySat.Ax25Header _parent, FrameTlmEntrySat _root) { + super(_io); + this._parent = _parent; + this._root = _root; + _read(); + } + + private void _read() { + this._raw__raw_destCallsignRor = this._io.readBytes(6); + this._raw_destCallsignRor = KaitaiStream.processRotateLeft(this._raw__raw_destCallsignRor, 8 - (1), 1); + KaitaiStream _io__raw_destCallsignRor = new ByteBufferKaitaiStream(_raw_destCallsignRor); + this.destCallsignRor = new DestCallsign(_io__raw_destCallsignRor, this, _root); + } + + private DestCallsign destCallsignRor; + private FrameTlmEntrySat _root; + private FrameTlmEntrySat.Ax25Header _parent; + private byte[] _raw__raw_destCallsignRor; + private byte[] _raw_destCallsignRor; + + public DestCallsign destCallsignRor() { + return destCallsignRor; + } + + public FrameTlmEntrySat _root() { + return _root; + } + + public FrameTlmEntrySat.Ax25Header _parent() { + return _parent; + } + + public byte[] _raw__raw_destCallsignRor() { + return _raw__raw_destCallsignRor; + } + + public byte[] _raw_destCallsignRor() { + return _raw_destCallsignRor; + } + } + + public static class SrcCallsign extends KaitaiStruct { + public static SrcCallsign fromFile(String fileName) throws IOException { + return new SrcCallsign(new ByteBufferKaitaiStream(fileName)); + } + + public SrcCallsign(KaitaiStream _io) { + this(_io, null, null); + } + + public SrcCallsign(KaitaiStream _io, FrameTlmEntrySat.SrcCallsignRaw _parent) { + this(_io, _parent, null); + } + + public SrcCallsign(KaitaiStream _io, FrameTlmEntrySat.SrcCallsignRaw _parent, FrameTlmEntrySat _root) { + super(_io); + this._parent = _parent; + this._root = _root; + _read(); + } + + private void _read() { + this.srcCallsign = new String(this._io.readBytes(6), Charset.forName("ASCII")); + } + + private String srcCallsign; + private FrameTlmEntrySat _root; + private FrameTlmEntrySat.SrcCallsignRaw _parent; + + public String srcCallsign() { + return srcCallsign; + } + + public FrameTlmEntrySat _root() { + return _root; + } + + public FrameTlmEntrySat.SrcCallsignRaw _parent() { + return _parent; + } + } + + private Ax25Frame frameTlmEntrySat; + private FrameTlmEntrySat _root; + private KaitaiStruct _parent; + + /** + * @see Source + */ + public Ax25Frame frameTlmEntrySat() { + return frameTlmEntrySat; + } + + public FrameTlmEntrySat _root() { + return _root; + } + + public KaitaiStruct _parent() { + return _parent; + } } diff --git a/ModuleEntrySatTelemetry/src/site/apt/about.apt b/ModuleEntrySatTelemetry/src/site/apt/about.apt index 477e048..90a8df8 100644 --- a/ModuleEntrySatTelemetry/src/site/apt/about.apt +++ b/ModuleEntrySatTelemetry/src/site/apt/about.apt @@ -1,3 +1,4 @@ + --- ModuleEntrySatTelemetry --- diff --git a/ModuleEntrySatTelemetry/src/site/apt/best-practices.apt b/ModuleEntrySatTelemetry/src/site/apt/best-practices.apt index 5cf7d9c..2a783c2 100644 --- a/ModuleEntrySatTelemetry/src/site/apt/best-practices.apt +++ b/ModuleEntrySatTelemetry/src/site/apt/best-practices.apt @@ -1,3 +1,4 @@ + This application demonstrates Maven 2 site generation functionalities. One of the nicer features of Maven is the ability to create an internal technical web site at very little cost. Maven 2 extends this functionality, and gives you powerful new ways to generate site content... \ No newline at end of file diff --git a/ModuleEntrySatTelemetry/src/site/site.xml b/ModuleEntrySatTelemetry/src/site/site.xml index b9cbe24..d13b62d 100644 --- a/ModuleEntrySatTelemetry/src/site/site.xml +++ b/ModuleEntrySatTelemetry/src/site/site.xml @@ -1,4 +1,5 @@ + -- GitLab From f727526281200d710021de5c31403fd8528706f5 Mon Sep 17 00:00:00 2001 From: xtophe Date: Tue, 31 Mar 2020 09:01:24 +0200 Subject: [PATCH 2/6] Ajout fichier Entrysat --- ApplicationEntrySatDecoder/pom.xml | 68 ++- .../src/main/java/BasicApplication.css | 25 + .../src/main/java/EntrysatVersion.txt | 3 + .../src/main/java/LogoCSut.png | Bin 0 -> 8174 bytes .../src/main/java/logoAmsat.png | Bin 0 -> 6356 bytes .../src/main/java/logo_pour_decodeur.jpg | Bin 0 -> 11498 bytes .../josast/EntrysatDecoder/AlertHelper.java | 38 ++ .../josast/EntrysatDecoder/Configuration.java | 235 ++++++++ .../org/josast/EntrysatDecoder/Controler.java | 564 ++++++++++++++++++ .../EntrysatDecoder/EntrsatDecoder.fxml | 228 +++++++ .../josast/EntrysatDecoder/EntryFrame.java | 59 ++ .../java/org/josast/EntrysatDecoder/Main.java | 82 +++ .../josast/EntrysatDecoder/ModelFrame.java | 78 +++ .../org/josast/EntrysatDecoder/SendSIDS.java | 38 ++ .../EntrysatDecoder/TaskSoundmodemTCP.java | 79 +++ .../src/test/ressources/FlatSat.wav | Bin 0 -> 1370244 bytes .../java/org/josast/SIDS/app/SendFile.java | 105 ++++ 17 files changed, 1593 insertions(+), 9 deletions(-) create mode 100644 ApplicationEntrySatDecoder/src/main/java/BasicApplication.css create mode 100644 ApplicationEntrySatDecoder/src/main/java/EntrysatVersion.txt create mode 100644 ApplicationEntrySatDecoder/src/main/java/LogoCSut.png create mode 100644 ApplicationEntrySatDecoder/src/main/java/logoAmsat.png create mode 100644 ApplicationEntrySatDecoder/src/main/java/logo_pour_decodeur.jpg create mode 100644 ApplicationEntrySatDecoder/src/main/java/org/josast/EntrysatDecoder/AlertHelper.java create mode 100644 ApplicationEntrySatDecoder/src/main/java/org/josast/EntrysatDecoder/Configuration.java create mode 100644 ApplicationEntrySatDecoder/src/main/java/org/josast/EntrysatDecoder/Controler.java create mode 100644 ApplicationEntrySatDecoder/src/main/java/org/josast/EntrysatDecoder/EntrsatDecoder.fxml create mode 100644 ApplicationEntrySatDecoder/src/main/java/org/josast/EntrysatDecoder/EntryFrame.java create mode 100644 ApplicationEntrySatDecoder/src/main/java/org/josast/EntrysatDecoder/Main.java create mode 100644 ApplicationEntrySatDecoder/src/main/java/org/josast/EntrysatDecoder/ModelFrame.java create mode 100644 ApplicationEntrySatDecoder/src/main/java/org/josast/EntrysatDecoder/SendSIDS.java create mode 100644 ApplicationEntrySatDecoder/src/main/java/org/josast/EntrysatDecoder/TaskSoundmodemTCP.java create mode 100644 ApplicationEntrySatDecoder/src/test/ressources/FlatSat.wav create mode 100644 ModuleSIDS/src/main/java/org/josast/SIDS/app/SendFile.java diff --git a/ApplicationEntrySatDecoder/pom.xml b/ApplicationEntrySatDecoder/pom.xml index 2b0b453..35abed2 100644 --- a/ApplicationEntrySatDecoder/pom.xml +++ b/ApplicationEntrySatDecoder/pom.xml @@ -6,9 +6,9 @@ 4.0.0 - org.josast + org.josast JOSAST-parent - 0.0.2-SNAPSHOT + 0.0.2-SNAPSHOT @@ -17,7 +17,6 @@ http://www.amsat-f.org - @@ -36,19 +35,19 @@ org.josast ModuleConfig - 0.0.1-SNAPSHOT + 0.2 org.josast ModuleSoundModem - 0.0.1-SNAPSHOT + 0.0.2-SNAPSHOT - org.josast - ModuleEntrySatTelemetry - 0.0.1-SNAPSHOT - + org.josast + ModuleEntrySatTelemetry + 0.0.1-SNAPSHOT + @@ -64,9 +63,26 @@ javafx-controls 12 + + org.openjfx + javafx-fxml + 12 + + + + + org.openjfx + javafx-swing + 11-ea+24 + + + + maven-compiler-plugin + 3.8.1 + org.openjfx javafx-maven-plugin @@ -75,7 +91,41 @@ HelloFX + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + + make-assembly + package + + single + + + + + + + + + org.josast.EntrysatDecoder.Main + + + + + jar-with-dependencies + + + + + + diff --git a/ApplicationEntrySatDecoder/src/main/java/BasicApplication.css b/ApplicationEntrySatDecoder/src/main/java/BasicApplication.css new file mode 100644 index 0000000..8b2e428 --- /dev/null +++ b/ApplicationEntrySatDecoder/src/main/java/BasicApplication.css @@ -0,0 +1,25 @@ +.menu-bar { + -fx-background-color: #aeb5ba, linear-gradient(to bottom, #ecf4fa 0%, #ced4d9 100%); + -fx-background-insets: 0, 0 0 1 0; +} + +.menu-bar .menu .label { + -fx-text-fill: #2d3e4c; +} + + +.thick-chart .chart-series-line { +-fx-stroke-width: 1px; +} + +.chart-line-symbol { + + -fx-background-insets: 0, 2; + -fx-background-radius: 2px; + -fx-padding: 2px; +} + +#font-button { + -fx-font: bold italic 20pt "Arial"; + -fx-effect: dropshadow( one-pass-box , black , 8 , 0.0 , 2 , 0 ); +} \ No newline at end of file diff --git a/ApplicationEntrySatDecoder/src/main/java/EntrysatVersion.txt b/ApplicationEntrySatDecoder/src/main/java/EntrysatVersion.txt new file mode 100644 index 0000000..350f852 --- /dev/null +++ b/ApplicationEntrySatDecoder/src/main/java/EntrysatVersion.txt @@ -0,0 +1,3 @@ +EntrySatVersion=0.8 +Message=Version for validation purpose +NoradID=9990 \ No newline at end of file diff --git a/ApplicationEntrySatDecoder/src/main/java/LogoCSut.png b/ApplicationEntrySatDecoder/src/main/java/LogoCSut.png new file mode 100644 index 0000000000000000000000000000000000000000..7643bc92999e12b34c48631e9530de80f433dbad GIT binary patch literal 8174 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 W!xA$0cY2fn0000vdh%eO-q(LYo12Obm?;0R{#D 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 bxM%{-vV{AVUcUW@o{7I`@_#() { + + @Override + public void handle(WorkerStateEvent event) { + // La tache s'est correctement terminee. + + labelStatus.setText("KISS TCP DISCONNECTED"); + displayLog("KISS TCP DISCONNECTED"); + ButtonStop.setDisable(true); + ButtonStart.setDisable(false); + ButtonSave.setDisable(false); + } + + }); + + task.setOnFailed(new EventHandler() { + + @Override + public void handle(WorkerStateEvent event) { + // La tache s'est correctement terminee. + displayLog("Deconnection"); + displayLog(event.toString()); + displayLog(event.getSource().toString()); + + labelStatus.setText("KISS TCP CONNECTION FAILED"); + displayLog("KISS TCP DISCONNECTED - Connection failed"); + ButtonStop.setDisable(true); + ButtonStart.setDisable(false); + ButtonSave.setDisable(false); + } + + }); + + Thread backgroundThread = new Thread(task); + backgroundThread.setDaemon(true); + backgroundThread.start(); + + } + + @FXML + private void handleStop(ActionEvent event) { + + ButtonStop.setDisable(true); + ButtonStart.setDisable(false); + ButtonSave.setDisable(false); + task.arreter(); + + labelStatus.setText("Stop received data"); + displayLog("Stop task to receive telemetrie"); + } + + @FXML + private void handleSave(ActionEvent event) { + + ButtonStop.setDisable(true); + ButtonStart.setDisable(false); + ButtonSave.setDisable(true); + saveDataFile(); + labelStatus.setText("Data Saved"); + displayLog("Telemetry Data saved in file"); + } + + @FXML + private void HandleIP(ActionEvent event) { + } + + @FXML + private void HandlePort(ActionEvent event) { + } + + /** + * Save telemetry data received in text file. The file is stored in data folder. + */ + public void saveDataFile() { + SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd-HHmmss"); + Date aujourdhui = new Date(); + + // + + String path = System.getProperty("user.dir") + "/data"; + File apath = new File(path); + + if (!apath.exists()) { + if (apath.mkdir() == false) { + log.severe("fail to create " + path); + } + } + + PrintWriter pw = null; + + long NbFrame = receivedFrame.getNumberFrame(); + + try { + pw = new PrintWriter(new FileWriter(path + "/" + formater.format(aujourdhui) + "-tlm-Hexa.txt")); + for (int i = 0; i < NbFrame; i++) { + pw.write(receivedFrame.getFrame(i)); + pw.write(LINE_SEPARATOR); + } + + pw.flush(); + pw.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + } + + private void updateFrame(long nbframe) { + LabelFrame.setText("frame : " + nbframe); + + } + + + public void initMMI() { + + // initialise le log + initdisplayLogFile(); + displayLog("ENTRY SAT - LOG "); + log.warning("Initialise "); + primaryStage.setTitle("EntrySat Decoder - " + version); + + station.setCallsign(conf.getCallsign()); + station.setLatitude(conf.getLatitude()); + station.setLongitude(conf.getLongitude()); + + TextFieldCallsign.setText(station.getCallsign()); + TextFieldLatitude.setText(station.getLatitude()); + TextFieldLongitude.setText(station.getLongitude()); + + TextFieldSIDSEntrysat.setText(conf.getSIDSEntrySatSource()); + TextFieldSIDSSatnogs.setText(conf.getSIDSSatnogsSource()); + + + if (conf.isSIDS_EntrySat()) { + CheckbBoxEntrysat.setSelected(true); + } + if (conf.isSISD_SatNogs()) { + CheckBoxSatNogs.setSelected(true); + } + + displayLog(conf.getSIDSSatnogsURL()); + displayLog(conf.getSIDSEntryUrl()); + displayLog("Initialisation with Properties File Done "); + + BufferedImage bufferedImage1 = null; + BufferedImage bufferedImage2 = null; + try { + bufferedImage1 = ImageIO.read(getClass().getResource((imgAmsat))); + bufferedImage2 = ImageIO.read(getClass().getResource((imgEntrysat))); + } catch (IOException e) { + + log.severe("Error loading Image resources"); + log.severe(e.toString()); + } + Image imageamsat = SwingFXUtils.toFXImage(bufferedImage1, null); + ; + ImageViewAMSAT.setImage(imageamsat); + Image imgQB = SwingFXUtils.toFXImage(bufferedImage2, null); + ; + imageViewEntrysat.setImage(imgQB); + +// ConfigHttp c = new ConfigHttp("http://amsat-f.org/sitewordpress/Documents/EntrysatVersion.txt"); + ConfigHttp c = new ConfigHttp("http://site.amsat-f.org/download/116451"); + String ver; + String message; + int NoradIdConf=conf.getNorad(); + if(c.isConnected()) + { + ver = c.GetProperty("EntrySatVersion"); + message = c.GetProperty("Message"); + NoradIdConf= Integer.parseUnsignedInt(c.GetProperty("NoradID").trim()); + } + else + { + ver = version; + message = "not connected to internet"; + } + if (NoradIdConf!=conf.getNorad()) + { + conf.setNorad(NoradIdConf); + conf.save(); + displayLog("Norad ID updated "); + } + ButtonStop.setDisable(true); + ButtonStart.setDisable(false); + ButtonSave.setDisable(true); + this.LabelInformation.setText(""); + + // initialise SIDS + + Station StationSatnogs = new Station(conf.getSIDSSatnogsSource(), station.getLongitude(), + station.getLatitude()); + Station StationEntry = new Station(conf.getSIDSEntrySatSource(), station.getLongitude(), station.getLatitude()); + + if (conf.isSISD_SatNogs() == true) { + SendSIDSSatnogs = new SendSIDS(StationSatnogs, conf.getNorad(), conf.getSIDSSatnogsURL()); + } + + if (conf.isSIDS_EntrySat() == true) { + SendSIDSEntrysat = new SendSIDS(StationEntry, conf.getNorad(), conf.getSIDSEntryUrl()); + } + + String erreurmsg = message; + + if (ver.equals(version) == false) { + erreurmsg += " New version " + ver + " available ! "; + + } + this.LabelInformation.setText(erreurmsg); + + } + + public void setPrimaryStage(Stage primaryStage) { + this.primaryStage = primaryStage; + + } + + private void displayLog(String log) { + pw.println(log); + pw.flush(); + logger.info(log); + TexAreaLog.appendText(log); + TexAreaLog.appendText("\r\n"); + } + + private void initdisplayLogFile() + { + SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd-HHmmss"); + Date aujourdhui = new Date(); + + // + + String path = System.getProperty("user.dir") + "/log"; + File apath = new File(path); + + if (!apath.exists()) { + if (apath.mkdir() == false) { + log.severe("fail to create " + path); + } + } + try { + pw = new PrintWriter (new FileWriter(path+"/"+formater.format(aujourdhui)+"-"+".log")); + displayLog("log error during decoding data"); + + } catch (IOException e) { + logger.severe("erreur creating log file"); + logger.severe (e.toString()); + } + } +} diff --git a/ApplicationEntrySatDecoder/src/main/java/org/josast/EntrysatDecoder/EntrsatDecoder.fxml b/ApplicationEntrySatDecoder/src/main/java/org/josast/EntrysatDecoder/EntrsatDecoder.fxml new file mode 100644 index 0000000..48643dc --- /dev/null +++ b/ApplicationEntrySatDecoder/src/main/java/org/josast/EntrysatDecoder/EntrsatDecoder.fxml @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +