diff --git a/ApplicationAmicalsat/src/main/java/org/josast/ApplicationAmicalsat/SendSIDS.java b/ApplicationAmicalsat/src/main/java/org/josast/ApplicationAmicalsat/SendSIDS.java index 582d76bc7f67f438132d3818db9ab80dca571b3a..086a8b94aef62368584b8f0dffffecbcc763e6eb 100644 --- a/ApplicationAmicalsat/src/main/java/org/josast/ApplicationAmicalsat/SendSIDS.java +++ b/ApplicationAmicalsat/src/main/java/org/josast/ApplicationAmicalsat/SendSIDS.java @@ -6,7 +6,9 @@ import org.josast.SIDS.HttpPostSIDS; import org.josast.SIDS.SIDSData; import org.josast.SIDS.Station; -/** @author christophe */ +/** + * @author christophe + */ public class SendSIDS { private static Logger appLogger = Logger.getLogger("AmsatLogger"); diff --git a/ApplicationAmicalsat/src/main/java/org/josast/ApplicationAmicalsat/util/LogFile.java b/ApplicationAmicalsat/src/main/java/org/josast/ApplicationAmicalsat/util/LogFile.java index 3fa1a3aa2f45d2b4eacf8e0fc3fdf0c62b448212..d76bed0ec19e3d032ee16141aa2a3d5f63d380c3 100644 --- a/ApplicationAmicalsat/src/main/java/org/josast/ApplicationAmicalsat/util/LogFile.java +++ b/ApplicationAmicalsat/src/main/java/org/josast/ApplicationAmicalsat/util/LogFile.java @@ -9,7 +9,9 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.Logger; -/** @author christophe */ +/** + * @author christophe + */ public class LogFile { private static Logger appLogger = Logger.getLogger("AmsatLogger"); diff --git a/ApplicationAmicalsatCli/src/main/java/org/josast/app/amicalsat/cli/AmicalsatCli.java b/ApplicationAmicalsatCli/src/main/java/org/josast/app/amicalsat/cli/AmicalsatCli.java index 2bfa3f3880616eebdf29f941eec981e08c02f17e..3247e7868ad46313598e392764fb7249659b9aae 100644 --- a/ApplicationAmicalsatCli/src/main/java/org/josast/app/amicalsat/cli/AmicalsatCli.java +++ b/ApplicationAmicalsatCli/src/main/java/org/josast/app/amicalsat/cli/AmicalsatCli.java @@ -6,7 +6,9 @@ import org.josast.app.amicalsat.cli.option.OptionsAnalysis; public class AmicalsatCli { - /** @param args */ + /** + * @param args + */ public AmicalsatCli(String[] args) { OptionsAnalysis opt = new OptionsAnalysis(args); Vector vec = opt.getCommandes(); @@ -15,7 +17,9 @@ public class AmicalsatCli { } } - /** @param args */ + /** + * @param args + */ public static void main(String[] args) { @SuppressWarnings("unused") diff --git a/ApplicationCubesatSim/src/main/java/org/josast/application/cubesatsim/SoundmodemToInfluxDbCli.java b/ApplicationCubesatSim/src/main/java/org/josast/application/cubesatsim/SoundmodemToInfluxDbCli.java index e34c10ea24d864c4654aef01e339f2aca475eaa9..e772290c6317b5e25d77d63ca976a6836e60d516 100644 --- a/ApplicationCubesatSim/src/main/java/org/josast/application/cubesatsim/SoundmodemToInfluxDbCli.java +++ b/ApplicationCubesatSim/src/main/java/org/josast/application/cubesatsim/SoundmodemToInfluxDbCli.java @@ -15,7 +15,9 @@ import org.josast.CubesatSim.influxDB.InfluxDatabaseConfig; import org.josast.CubesatSim.kaitai.generated.Cubesatsim.CubesatsimAo7; import org.josast.ModuleSoundModem.SoundModemClient; -/** @author christophe */ +/** + * @author christophe + */ public class SoundmodemToInfluxDbCli { /** Application version. */ @@ -68,7 +70,9 @@ public class SoundmodemToInfluxDbCli { return options; } - /** @param conffile */ + /** + * @param conffile + */ public void execute(final String conffile) { // connection to Sound Modem diff --git a/ApplicationKissTool/pom.xml b/ApplicationKissTool/pom.xml index 4a4f4257126872fb2e711ed6d8810ef67f713345..62c1bc2b8aa2ed5fb16b0ac5d448a9da4fcdd83e 100644 --- a/ApplicationKissTool/pom.xml +++ b/ApplicationKissTool/pom.xml @@ -22,7 +22,7 @@ ${josast.version} ${josast.version} ${josast.version} - 18-ea+10 + 11.0.2 diff --git a/ApplicationKissTool/src/main/java/module-info.java b/ApplicationKissTool/src/main/java/module-info.java index 2f151731b76c585d59676bf8b5a8f7fb88bd3bda..228d443c978d3e500dadef587c58c36d88703e8e 100644 --- a/ApplicationKissTool/src/main/java/module-info.java +++ b/ApplicationKissTool/src/main/java/module-info.java @@ -11,6 +11,7 @@ module org.josast.ApplicationKissTool { requires javafx.swing; requires kaitai.struct.runtime; requires org.json; + requires javafx.base; opens org.josast.ApplicationKissTool to javafx.fxml; diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/App.java b/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/App.java index ffcf3b5cfb55a1402c8e36c0a8c38c948afbb822..e0ff4ae4832218527ff8c3677865b80c5522f5e9 100644 --- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/App.java +++ b/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/App.java @@ -18,6 +18,8 @@ public class App extends Application { private static FXMLLoader fxmlLoader; private static Logger logger = Logger.getLogger("AmsatLogger"); + // TaskManageReceivedData taskMngtData = null; + @Override public void start(Stage stage) throws IOException { @@ -29,12 +31,13 @@ public class App extends Application { ctrl.setPrimaryStage(stage); scene.getStylesheets().add(this.getClass().getResource("boot.css").toExternalForm()); stage.setTitle("KISS tool -UVSQSAT Dedicated " + ctrl.getVersion()); + + stage.setOnCloseRequest(e -> System.exit(0)); ctrl.initMMI(); - stage.show(); - } - static void setRoot(String fxml) throws IOException { - scene.setRoot(loadFXML(fxml)); + // Thread + + stage.show(); } private static Parent loadFXML(String fxml) throws IOException { diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/Configuration.java b/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/Configuration.java index d28f0df6913fbd8893a616ee1939b3b35cd4257c..71c5501d2b3a3966656151833eefe3c4885d4af2 100644 --- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/Configuration.java +++ b/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/Configuration.java @@ -26,15 +26,20 @@ public class Configuration { private String SIDSSatnogsSource = "Anonymous"; private String SIDSSatnogsURL = "https://db.satnogs.org/api/telemetry/"; private String SIDSSatnogs = "0"; + private String SIDSPicsatsURL = "https://picsat.obspm.fr/sids/reportframe?"; + private String SIDSPicsat = "0"; private String SIDSAMSAT = "1"; private boolean SISD_SatNogs = false; private boolean SIDS_AMSAT = true; private boolean Silent_Mode = false; private String SilentMode = "0"; - private String OutputFileDirectory = ""; + private String OutputFileDirectory = "."; private int Norad = 99999; + private String Norads; private final CONFIG conf = CONFIG.getInstance(); + private boolean SIDS_Picsat = false; + private String SIDSPicsatSource = "Anonymous"; public static Configuration getInstance() { return SingletonHolder.instance; @@ -50,17 +55,22 @@ public class Configuration { callsign = conf.getProperty("Callsign"); latitude = conf.getProperty("Latitude"); longitude = conf.getProperty("Longitude"); - + Norads = conf.getProperty("Norad"); SIDSAMSATSource = conf.getProperty("SIDSAMSATSource"); SIDSAMSATUrl = conf.getProperty("SIDSAMSATUrl"); SIDSSatnogsSource = conf.getProperty("SIDSSatnogsSource"); + SIDSPicsatSource = conf.getProperty("SIDSPicsatSource"); + SIDSSatnogsURL = conf.getProperty("SIDSSatnogsURL"); + SIDSPicsatsURL = conf.getProperty("SIDSPicsatsURL"); SIDSSatnogs = conf.getProperty("SIDSSatnogs"); SIDSAMSAT = conf.getProperty("SIDSAMSAT"); + SIDSPicsat = conf.getProperty("SIDSPicsat"); soundModemIP = conf.getProperty("soundModemIP"); soundModemPort = conf.getProperty("soundModemPort"); OutputFileDirectory = conf.getProperty("OutputFileDirectory"); SilentMode = conf.getProperty("SilentMode"); + Norad = Integer.getInteger(Norads); if (SIDSSatnogs.contentEquals("1")) { SISD_SatNogs = true; } else { @@ -71,13 +81,16 @@ public class Configuration { } else { SIDS_AMSAT = false; } - + if (SIDSPicsat.contentEquals("1")) { + SIDS_Picsat = true; + } else { + SIDS_Picsat = false; + } if (SilentMode.contentEquals("1")) { Silent_Mode = true; - } else { - Silent_Mode = false; - } + } else {Silent_Mode = false; +} } else // si le fichier n'existe pas, il est créé par défaut { @@ -99,6 +112,15 @@ public class Configuration { } } + public void setSIDSPicsat(String sSIDSPicsat) { + SIDSPicsat = sSIDSPicsat; + if (SIDSPicsat.contentEquals("1")) { + SIDS_Picsat = true; + } else { + SIDS_Picsat = false; + } + } + public void setSIDSAMSAT(String sIDSEntrySat) { SIDSAMSAT = sIDSEntrySat; if (SIDSAMSAT.contentEquals("1")) { @@ -110,14 +132,18 @@ public class Configuration { public void save() { + conf.setProperty("Norad", ""+Norad); conf.setProperty("Callsign", callsign); conf.setProperty("Latitude", latitude); conf.setProperty("Longitude", longitude); conf.setProperty("SIDSAMSATSource", this.SIDSAMSATSource); + conf.setProperty("SIDSPicsatSource", this.SIDSPicsatSource); conf.setProperty("SIDSAMSATUrl", this.SIDSAMSATUrl); conf.setProperty("SIDSSatnogsSource", this.SIDSSatnogsSource); conf.setProperty("SIDSSatnogsURL", this.SIDSSatnogsURL); + conf.setProperty("SIDSPicsatsURL", this.SIDSPicsatsURL); conf.setProperty("SIDSSatnogs", this.SIDSSatnogs); + conf.setProperty("SIDSPicsat", this.SIDSPicsat); conf.setProperty("SIDSAMSAT", this.SIDSAMSAT); conf.setProperty("soundModemPort", this.soundModemPort); conf.setProperty("soundModemIP", this.soundModemIP); @@ -197,10 +223,22 @@ public class Configuration { SIDSSatnogsURL = sIDSSatnogsURL; } + public String getSIDSPicsatsURL() { + return SIDSPicsatsURL; + } + + public void setSIDSPicsatsURL(String sIDSPicsatsURL) { + SIDSPicsatsURL = sIDSPicsatsURL; + } + public boolean isSIDS_AMSAT() { return SIDS_AMSAT; } + public boolean isSIDS_Picsat() { + return SIDS_Picsat; + } + // public CONFIG getConf() { // return conf; // } @@ -245,4 +283,13 @@ public class Configuration { public void setOutputFileDirectory(String outputFileDirectory) { OutputFileDirectory = outputFileDirectory; } + + public String getSIDSPicsatSource() { + + return SIDSPicsatSource; + } + + public void setSIDSPicsatSource(String sSIDSPicsatSource) { + SIDSPicsatSource = sSIDSPicsatSource; + } } diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/Controler.java b/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/Controler.java index dc3af9d116956ef059c8bb134c76634aea987ca9..eab64474488bc3d2f5a49dc3a76133cb850d4040 100644 --- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/Controler.java +++ b/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/Controler.java @@ -1,17 +1,27 @@ +/** + * @todo Update du message d'information + * @todo Modification de la tâche de fond / pour le moment uniquement GC + * @todo Gestion de la configuration + * @todo Gestion des envoie de trame SIDS : message de retour + */ package org.josast.ApplicationKissTool; import java.awt.image.BufferedImage; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; import java.io.File; import java.io.IOException; -import java.math.BigInteger; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.Executors; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; -import javafx.application.Platform; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; import javafx.concurrent.WorkerStateEvent; import javafx.embed.swing.SwingFXUtils; import javafx.event.ActionEvent; @@ -20,11 +30,14 @@ import javafx.fxml.FXML; import javafx.scene.control.Alert; import javafx.scene.control.Button; import javafx.scene.control.CheckBox; +import javafx.scene.control.ComboBox; import javafx.scene.control.Label; import javafx.scene.control.TextArea; import javafx.scene.control.TextField; import javafx.scene.image.Image; import javafx.scene.image.ImageView; +import javafx.scene.paint.Color; +import javafx.scene.shape.Circle; import javafx.stage.DirectoryChooser; import javafx.stage.Stage; import javafx.stage.Window; @@ -39,6 +52,8 @@ public class Controler { private static final int STATE_START = 1; protected static final int STATE_STOP = 2; private static final int STATE_SAVE = 3; + private int delayRefresh = 15; // toute les 10 mn + private Date lastFrameTime; private static Logger appLogger = Logger.getLogger("AmsatLogger"); ConfigHttp c = new ConfigHttp("http://site.amsat-f.org/download/117487/"); @@ -47,11 +62,11 @@ public class Controler { private ManageDataFile mdf = new ManageDataFile(); - private String version = "1.5"; + private String version = "1.8"; @FXML private Button ButtonStart; @FXML private Button ButtonStop; - @FXML private Button ButtonSave; + @FXML private Button buttonFileChoiser; @FXML private TextField TextFielRepository; @@ -88,27 +103,64 @@ public class Controler { @FXML private CheckBox CheckbBoxAmicalSat; @FXML private CheckBox CheckBoxSatNogs; + @FXML private CheckBox CheckBoxSatPicsat; @FXML private Button ButtonSaveConfiguration; @FXML private TextField TextFieldSIDSEntrysat; @FXML private TextField TextFieldSIDSSatnogs; + @FXML private TextField TextFieldSIDSPicsat; + + @FXML private Circle CircleModem; + @FXML private Circle CircleDatabaseSatnogs; + @FXML private Circle CircleDatabasePicsat; + @FXML private Circle CircleDatabaseAmsatF; + + @FXML private ComboBox ComboBoxSatellite; + ScheduledExecutorService ses = Executors.newScheduledThreadPool(1); + private ScheduledFuture scheduledFuture = null; + BlockingQueue receivedFrame = new LinkedBlockingDeque(); Stage primaryStage = null; private String imgAmsat = "logoAmsat.png"; private String imgAmicalsat = "OIP.jpg"; + private int selectedNoradId; + Station station = new Station(); - ModelReceivedData receivedFrame = new ModelReceivedData(); private final Configuration conf = Configuration.getInstance(); private TaskSoundmodemTCP task; private SendSIDS SendSIDSSatnogs; private SendSIDS SendSIDSMVPAmsat; - private Ax25Display ax25display = new Ax25Display(); - private DisplayUVSQsat displayUVSQsat = new DisplayUVSQsat(); + private SendSIDS SendSIDSPicsat; + private TaskManageReceivedData taskMngtData; + private long nbframeTraited = 0; + private long nbframe = 0; + private long nbAmsatDatabase = 0; + private long nbSatnogsDatabase = 0; + private long picsatDatabase = 0; + + public void setReceivedFrame(BlockingQueue receivedFrame) { + this.receivedFrame = receivedFrame; + } + + @FXML + private void HandleSilentMode(ActionEvent event) { + + if (checkboxSilenceMode.isSelected()) { + conf.setSilentMode(true); + conf.save(); + displayLog("Silent Mode activated"); + + } else { + conf.setSilentMode(false); + conf.save(); + displayLog("Silent Mode deactivated"); + } + } @FXML private void HandleSaveConfiguration(ActionEvent event) { @@ -148,6 +200,7 @@ public class Controler { conf.setSIDSAMSATSource(TextFieldSIDSEntrysat.getText()); conf.setSIDSSatnogsSource(TextFieldSIDSSatnogs.getText()); + conf.setSIDSPicsatSource(TextFieldSIDSPicsat.getText()); conf.setSoundModemIP(FieldIP.getText()); conf.setSoundModemPort(FieldPort.getText()); conf.setOutputFileDirectory(this.TextFielRepository.getText()); @@ -158,6 +211,8 @@ public class Controler { new Station(conf.getSIDSSatnogsSource(), station.getLongitude(), station.getLatitude()); Station StationEntry = new Station(conf.getSIDSAMSATSource(), station.getLongitude(), station.getLatitude()); + Station StationPicsat = + new Station(conf.getSIDSPicsatSource(), station.getLongitude(), station.getLatitude()); if (CheckbBoxAmicalSat.isSelected() == true) { conf.setSIDSAMSAT("1"); @@ -167,6 +222,14 @@ public class Controler { conf.setSIDSAMSAT("0"); } + if (CheckBoxSatPicsat.isSelected() == true) { + conf.setSIDSPicsat("1"); + + SendSIDSPicsat = new SendSIDS(StationPicsat, conf.getNorad(), conf.getSIDSPicsatsURL()); + } else { + conf.setSIDSPicsat("0"); + } + if (CheckBoxSatNogs.isSelected() == true) { conf.setSIDSSatnogs("1"); @@ -192,80 +255,19 @@ public class Controler { @FXML private void handleStart(ActionEvent event) { - manageStatusinformation("Connected to modem", "Connection to modem"); + manageStatusinformation("Start Connected to modem", "Start Connection to modem"); manageStateMMI(STATE_START); // TODO : to improve SoundModemConfiguration smc = new SoundModemConfiguration("configuration.ini"); smc.setSmIPadress(FieldIP.getText()); smc.setSmPort(Integer.parseInt(FieldPort.getText())); + ISO8601DATEFORMAT.setTimeZone(TimeZone.getTimeZone("UTC")); - if (task == null) { - receivedFrame.addPropertyChangeListener( - new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - final ReceivedData decodedData = receivedFrame.getLastReceivedData(); - Platform.runLater( - new Runnable() { - - @Override - public void run() { - try { - - if (decodedData != null) { - updateFrame(receivedFrame.getNumberFrame()); - ax25display.setdata(decodedData); - ISO8601DATEFORMAT.setTimeZone(TimeZone.getTimeZone("UTC")); - Date aujourdhui = new Date(); - String creationdate = ISO8601DATEFORMAT.format(aujourdhui); - - String hexaString = new BigInteger(1, decodedData.getData()).toString(16); - - // UVSQsat mdf.saveRawFile(decodedData.getData()); - TlmData tlmData = - new TlmData( - hexaString, - ax25display.GetCallsignFrom(), - conf.getLongitude(), - conf.getLatitude(), - creationdate); - if (mdf.saveTlmData(tlmData) != 0) { - displayLog("Error creation JSON file"); - } - // mdf.saveDataHex(hexaString); - - if (!checkboxSilenceMode.isSelected()) { - displayLog(decodedData.toString()); - ax25display.setdata(decodedData); - DecodedData.appendText(ax25display.getDisplay()); - - if (ax25display.GetCallsignFrom().contains("LATMOS")) { - - displayUVSQsat.setData(decodedData); - DecodedData.appendText(displayUVSQsat.getData()); - } - } - - // envoie vers serveur - SendSids(receivedFrame.getLastReceivedData()); - - } else { - displayLog("received frame : null"); - } - - } catch (Exception e) { - displayLog("Run - error"); - displayLog(e.toString()); - e.printStackTrace(); - } - } - }); - } - }); - } - task = new TaskSoundmodemTCP(smc, receivedFrame); - + // if (task == null) { + task = new TaskSoundmodemTCP(smc, receivedFrame, this); + displayLog("task SoundModem Created"); + // } task.setOnSucceeded( new EventHandler() { @@ -274,6 +276,7 @@ public class Controler { // La tache s'est correctement terminee. manageStatusinformation("KISS TCP CONNECTION FAILED", "KISS TCP DISCONNECTED"); manageStateMMI(STATE_STOP); + CircleModem.setFill(Color.RED); } }); @@ -288,12 +291,16 @@ public class Controler { displayLog(event.toString()); displayLog(event.getSource().toString()); manageStateMMI(STATE_STOP); + CircleModem.setFill(Color.RED); } }); + CircleModem.setFill(Color.GREEN); Thread backgroundThread = new Thread(task); backgroundThread.setDaemon(true); + backgroundThread.setPriority(Thread.MAX_PRIORITY); backgroundThread.start(); + manageStatusinformation(" Connected to modem", " Connection to modem"); } @FXML @@ -309,19 +316,54 @@ public class Controler { manageStateMMI(STATE_SAVE); manageStatusinformation("save data", "save Telemetry in file"); - mdf.saveDataFile(receivedFrame); + // mdf.saveDataFile(receivedFrame); manageStatusinformation("Data Saved", "Telemetry Data saved in file"); } @FXML private void HandleIP(ActionEvent event) {} + @FXML + private void HandleSelectSatellite(ActionEvent event) { + SatelliteNorad sat = ComboBoxSatellite.getSelectionModel().getSelectedItem(); + displayLog(sat.getName() + " " + sat.getNoradId()); + selectedNoradId = sat.getNoradId(); + } + @FXML private void HandlePort(ActionEvent event) {} public void initMMI() { manageStatusinformation("Initialised", "KISS TOOL - LOG \r\n Initialise application"); + SatelliteNorad uvsqsat = new SatelliteNorad("UVSQsat", 47438); + SatelliteNorad Defaut = new SatelliteNorad("Defaut", conf.getNorad()); + SatelliteNorad picsat = new SatelliteNorad("Picsat", 43132); + selectedNoradId = conf.getNorad(); + ObservableList list = + FXCollections.observableArrayList(Defaut, uvsqsat, picsat); + ComboBoxSatellite.setItems(list); + ComboBoxSatellite.getSelectionModel().select(0); + + Runnable task1 = + () -> { + Date date = new Date(); + if (date.getTime() - lastFrameTime.getTime() > 900000) { + System.gc(); + appLogger.info("System.gc();"); + } + + // appLogger.info("Distant Information update"); + // updateDistantconfiguration(); + }; + taskMngtData = new TaskManageReceivedData(receivedFrame, this); + + Thread backgroundThread = new Thread(taskMngtData); + backgroundThread.setDaemon(true); + backgroundThread.start(); + // init Delay = , repeat the task every X Minute + scheduledFuture = ses.scheduleAtFixedRate(task1, delayRefresh, delayRefresh, TimeUnit.MINUTES); + appLogger.warning("Initialise "); primaryStage.setTitle("KISS TOOL - " + version); int NoradIdConf = conf.getNorad(); @@ -338,6 +380,7 @@ public class Controler { FieldPort.setText(conf.getSoundModemPort()); TextFieldSIDSEntrysat.setText(conf.getSIDSAMSATSource()); TextFieldSIDSSatnogs.setText(conf.getSIDSSatnogsSource()); + TextFieldSIDSPicsat.setText(conf.getSIDSPicsatSource()); TextFielRepository.setText(conf.getOutputFileDirectory()); if (conf.isSIDS_AMSAT()) { @@ -347,6 +390,10 @@ public class Controler { CheckBoxSatNogs.setSelected(true); } + if (conf.isSIDS_Picsat()) { + CheckBoxSatPicsat.setSelected(true); + } + checkboxSilenceMode.setSelected(conf.isSilentMode()); if (checkboxSilenceMode.isSelected()) appLogger.setLevel(Level.SEVERE); else appLogger.setLevel(Level.INFO); @@ -422,20 +469,33 @@ public class Controler { } this.LabelInformation.setText(erreurmsg); mdf.setRepositoryPath(conf.getOutputFileDirectory()); - - // UVSQsat - ButtonSave.setVisible(false); } public void setPrimaryStage(Stage primaryStageIn) { this.primaryStage = primaryStageIn; } - private void updateFrame(long nbframe) { - LabelFrame.setText("frame : " + nbframe); + private void updateFrame() { + LabelFrame.setText( + " Received : " + + nbframe + + " Processed : " + + nbframeTraited + + " Sent : Amsat - " + + this.nbAmsatDatabase); + } + + public void IncrementNbFrame() { + nbframe++; + updateFrame(); + } + + public void IncrementNbFrameTraited() { + nbframeTraited++; + updateFrame(); } - private void displayLog(String log) { + public void displayLog(String log) { appLogger.info(log); TexAreaLog.appendText(log); TexAreaLog.appendText("\r\n"); @@ -446,27 +506,27 @@ public class Controler { case STATE_INIT: ButtonStop.setDisable(true); ButtonStart.setDisable(false); - ButtonSave.setDisable(true); + break; case STATE_START: ButtonStop.setDisable(false); ButtonStart.setDisable(true); - ButtonSave.setDisable(false); + break; case STATE_STOP: ButtonStop.setDisable(true); ButtonStart.setDisable(false); - ButtonSave.setDisable(false); + break; case STATE_SAVE: ButtonStop.setDisable(true); ButtonStart.setDisable(false); - ButtonSave.setDisable(true); + break; default: ButtonStop.setDisable(true); ButtonStart.setDisable(false); - ButtonSave.setDisable(false); + break; } } @@ -476,20 +536,46 @@ public class Controler { displayLog(logMessage); } - private void SendSids(ReceivedData receivedData) { + public void SendSids(ReceivedData receivedData) { if (conf.isSIDS_AMSAT() == true) { - int results = SendSIDSMVPAmsat.Send(receivedData); - displayLog("Send SIDS AMSAT-F Database ; " + results); + int results = SendSIDSMVPAmsat.Send(receivedData, selectedNoradId); + if (SendSIDSMVPAmsat.isCorrectSend(results)) { + CircleDatabaseAmsatF.setFill(Color.GREEN); + nbAmsatDatabase++; + } else { + CircleDatabaseAmsatF.setFill(Color.RED); + displayLog("Send SIDS AMSAT-F Database ; " + results); + } } if (conf.isSISD_SatNogs() == true) { - int results = SendSIDSSatnogs.Send(receivedData); - displayLog("Send SIDS SatNogs Database : " + results); + int results = SendSIDSSatnogs.Send(receivedData, selectedNoradId); + if (SendSIDSSatnogs.isCorrectSend(results)) { + CircleDatabaseSatnogs.setFill(Color.GREEN); + nbSatnogsDatabase++; + } else { + CircleDatabaseSatnogs.setFill(Color.RED); + displayLog("Send SIDS SatNogs Database : " + results); + } + } + if (conf.isSIDS_Picsat() == true) { + int results = SendSIDSPicsat.Send(receivedData, selectedNoradId); + if (SendSIDSPicsat.isCorrectSend(results)) { + CircleDatabasePicsat.setFill(Color.GREEN); + picsatDatabase++; + } else { + displayLog("Send SIDS Picsat Database : " + results); + CircleDatabasePicsat.setFill(Color.RED); + } } } public String getVersion() { return version; } + + public void SetDecodedData(String data) { + DecodedData.appendText(data); + } } diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/LogFile.java b/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/LogFile.java index 9e95027b57634fc308be77dcc1b8a468ab4275fb..7075d1882d8179d6485c195e124dcc36a645f0c4 100644 --- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/LogFile.java +++ b/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/LogFile.java @@ -17,7 +17,7 @@ public class LogFile { /** */ public LogFile() { - // TODO Auto-generated constructor stub + initdisplayLogFile(); } diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/ManageDataFile.java b/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/ManageDataFile.java index dd33d7717738ed79c45b1dd599dfb77d2e0d9957..9d216e7c167c7bdb71b4b6d2c41309179a70c356 100644 --- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/ManageDataFile.java +++ b/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/ManageDataFile.java @@ -71,37 +71,6 @@ public class ManageDataFile { } } - /** - * Save telemetry data received in text file. The file is stored in data folder. - * - * @param receivedFrame - */ - public void saveDataFile(ModelReceivedData receivedFrame) { - SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd-HHmmss"); - Date aujourdhui = new Date(); - - // - - PrintWriter pw = null; - - long NbFrame = receivedFrame.getNumberFrame(); - - try { - pw = - new PrintWriter( - new FileWriter(RepositoryPath + "/" + formater.format(aujourdhui) + "-tlm-Hexa.txt")); - for (int i = 0; i < NbFrame; i++) { - pw.write(receivedFrame.getRawFrame(i)); - pw.write(LINE_SEPARATOR); - } - - pw.flush(); - pw.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - public void saveDataHex(String stringData) { SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd-HH"); diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/ModelReceivedData.java b/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/ModelReceivedData.java index db36aba6104cfc368d2a33ed23b5bcb6ba9fae5f..49d306a00b00aaf87988b650c7ff059f3ec1f521 100644 --- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/ModelReceivedData.java +++ b/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/ModelReceivedData.java @@ -1,14 +1,15 @@ +/** @todo Utiliser ce model de data pour eviter les dependances - Pour le refactoring */ package org.josast.ApplicationKissTool; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; -import java.util.Date; -import java.util.Vector; public class ModelReceivedData { - long numberFrame = 0; - Vector vecRawData = new Vector(); + long receivedFrame = 0; + long traitedFrame = 0; + long sendSidsFrameAmsat = 0; + long sendSidsFrameSatnogs = 0; private PropertyChangeSupport listenerList = new PropertyChangeSupport(this); @@ -28,23 +29,61 @@ public class ModelReceivedData { listenerList.removePropertyChangeListener(propertyName, listener); } - public long getNumberFrame() { - return numberFrame; + public long getReceivedFrame() { + return receivedFrame; } - public ReceivedData getLastReceivedData() { - return vecRawData.lastElement(); + public void setReceivedFrame(long receivedFrame) { + this.receivedFrame = receivedFrame; + listenerList.firePropertyChange("ReceivedFrame", receivedFrame, receivedFrame); } - public void addFrame(byte[] received) { - long oldNumberFrame = numberFrame; - numberFrame++; - vecRawData.add(new ReceivedData(new Date(), received)); - listenerList.firePropertyChange("numberFrame", oldNumberFrame, numberFrame); + public void IncrementReceivedFrame() { + this.receivedFrame++; + listenerList.firePropertyChange("ReceivedFrame", receivedFrame, receivedFrame); } - public String getRawFrame(int i) { + public long getTraitedFrame() { + return traitedFrame; + } + + public void setTraitedFrame(long traitedFrame) { + this.traitedFrame = traitedFrame; + listenerList.firePropertyChange("TraitedFrame", traitedFrame, traitedFrame); + } + + public void IncTraitedFrame() { + this.traitedFrame++; + listenerList.firePropertyChange("TraitedFrame", traitedFrame, traitedFrame); + } + + public long getSendSidsFrameAmsat() { + return sendSidsFrameAmsat; + } + + public void setSendSidsFrameAmsat(long sendSidsFrameAmsat) { + this.sendSidsFrameAmsat = sendSidsFrameAmsat; + listenerList.firePropertyChange("SendSidsFrameAmsat", sendSidsFrameAmsat, sendSidsFrameAmsat); + } + + public void IncSendSidsFrameAmsat() { + this.sendSidsFrameAmsat++; + listenerList.firePropertyChange("SendSidsFrameAmsat", sendSidsFrameAmsat, sendSidsFrameAmsat); + } + + public long getSendSidsFrameSatnogs() { + return sendSidsFrameSatnogs; + } + + public void setSendSidsFrameSatnogs(long sendSidsFrameSatnogs) { + this.sendSidsFrameSatnogs = sendSidsFrameSatnogs; + listenerList.firePropertyChange( + "SendSidsFrameSatnogs", sendSidsFrameSatnogs, sendSidsFrameSatnogs); + } - return vecRawData.get(i).toString(); + public void IncSendSidsFrameSatnogs(long sendSidsFrameSatnogs) { + this.sendSidsFrameSatnogs = sendSidsFrameSatnogs; + listenerList.firePropertyChange( + "SendSidsFrameSatnogs", sendSidsFrameSatnogs, sendSidsFrameSatnogs); } } diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/SendSIDS.java b/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/SendSIDS.java index 420bf9c463d75735b35b223b2d2833ad16dfe46a..61360fb4caa3206ebcc2c781fbd564ed3c4cff7d 100644 --- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/SendSIDS.java +++ b/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/SendSIDS.java @@ -1,7 +1,6 @@ package org.josast.ApplicationKissTool; import java.math.BigInteger; -import java.util.logging.Logger; import org.josast.SIDS.HttpPostSIDS; import org.josast.SIDS.SIDSData; import org.josast.SIDS.Station; @@ -9,7 +8,7 @@ import org.josast.SIDS.Station; /** @author christophe */ public class SendSIDS { - private static Logger appLogger = Logger.getLogger("AmsatLogger"); + // private static Logger appLogger = Logger.getLogger("AmsatLogger"); SIDSData sids = new SIDSData(); HttpPostSIDS client; @@ -26,8 +25,22 @@ public class SendSIDS { // transforme en hexa String String hexaString = new BigInteger(1, data.getData()).toString(16); sids.setTelemetryData(data.getTime(), hexaString); - appLogger.info(sids.toStringBasic()); + int result = client.SendSIDSBasic(sids); return result; } + + public int Send(ReceivedData data, int norad) { + sids.setNoradID(norad); + return Send(data); + } + + public boolean isCorrectSend(int value) { + boolean result = false; + if (value == 200 || value == 201) { + result = true; + } + + return result; + } } diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/TaskManageReceivedData.java b/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/TaskManageReceivedData.java new file mode 100644 index 0000000000000000000000000000000000000000..6c72d92ee2d0e2c01513dc2f49cca7d3f09cc060 --- /dev/null +++ b/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/TaskManageReceivedData.java @@ -0,0 +1,131 @@ +package org.josast.ApplicationKissTool; + +import java.math.BigInteger; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.concurrent.BlockingQueue; +import javafx.application.Platform; +import javafx.concurrent.Task; + +public class TaskManageReceivedData extends Task { + + private final SimpleDateFormat ISO8601DATEFORMAT = + new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); + private final Configuration conf = Configuration.getInstance(); + private Ax25Display ax25display = new Ax25Display(); + private ManageDataFile mdf = new ManageDataFile(); + private DisplayUVSQsat displayUVSQsat = new DisplayUVSQsat(); + + private BlockingQueue blockingQueue = null; + private ModelReceivedData datamodel = null; + + Controler ctrl = null; + + public TaskManageReceivedData(BlockingQueue blockingQueueIn, Controler ctrlIn) { + blockingQueue = blockingQueueIn; + ctrl = ctrlIn; + } + + public TaskManageReceivedData( + BlockingQueue blockingQueueIn, ModelReceivedData datamodel) { + blockingQueue = blockingQueueIn; + this.datamodel = datamodel; + } + + private void displayLog(String string) { + Platform.runLater( + new Runnable() { + + @Override + public void run() { + + try { + ctrl.displayLog(string); + + } catch (Exception e) { + displayLog("Run - error"); + displayLog(e.toString()); + e.printStackTrace(); + } + } + }); + } + + private void displayData(ReceivedData decodedData) { + Platform.runLater( + new Runnable() { + + @Override + public void run() { + + try { + // ctrl.displayLog("Display Data"); + + if (!conf.isSilentMode()) { + + ctrl.displayLog(decodedData.toString()); + ctrl.SetDecodedData(ax25display.getDisplay()); + + if (ax25display.GetCallsignFrom().contains("LATMOS")) { + + displayUVSQsat.setData(decodedData); + ctrl.SetDecodedData(displayUVSQsat.getData()); + } + } + + ctrl.SendSids(decodedData); + ctrl.IncrementNbFrameTraited(); + + } catch (Exception e) { + displayLog("Run - error"); + displayLog(e.toString()); + e.printStackTrace(); + } + } + }); + } + + @Override + protected String call() throws Exception { + + System.out.println("tache message lancéee"); + + Date lastFrameTime; + displayLog("Waiting Data !!!"); + while (true) { + + ReceivedData decodedData = blockingQueue.take(); + displayLog(" Data !!!"); + + ax25display.setdata(decodedData); + String calsignr = ax25display.GetCallsignFrom(); + if (calsignr != null) { + displayLog(" calsign" + calsignr); + } else displayLog(" calsign not decoded"); + + lastFrameTime = new Date(); + + // @todo : extrait le calsign + + // en fonction du calssign envois SIDS (ajuster le Noarad) + + String creationdate = ISO8601DATEFORMAT.format(lastFrameTime); + + String hexaString = new BigInteger(1, decodedData.getData()).toString(16); + + TlmData tlmData = + new TlmData( + hexaString, + ax25display.GetCallsignFrom(), + conf.getLongitude(), + conf.getLatitude(), + creationdate); + if (mdf.saveTlmData(tlmData) != 0) { + displayLog("Error creation JSON file"); + } + + displayData(decodedData); + // datamodel.IncrementReceivedFrame(); + } + } +} diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/TaskSoundmodemTCP.java b/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/TaskSoundmodemTCP.java index 21f9b0f22bec629c1f57d7d8d2c058ecb8c9a88c..2d51b15060b0753f5ad4826001f848e17fb1d389 100644 --- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/TaskSoundmodemTCP.java +++ b/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/TaskSoundmodemTCP.java @@ -1,6 +1,9 @@ package org.josast.ApplicationKissTool; +import java.util.Date; +import java.util.concurrent.BlockingQueue; import java.util.logging.Logger; +import javafx.application.Platform; import javafx.concurrent.Task; import org.josast.ModuleSoundModem.SoundModemClient; import org.josast.ModuleSoundModem.SoundModemConfiguration; @@ -13,30 +16,81 @@ public class TaskSoundmodemTCP extends Task { SoundModemConfiguration smConfiguration = null; SoundModemClient smc = null; - ModelReceivedData receivedFrame = null; + Controler ctrl = null; + // ModelReceivedData receivedFrame = null; + BlockingQueue blockingQueue = null; + private ModelReceivedData datamodel = null; /** * @param smConfiguration fichier de configuration * @param receivedFrame Frame Data model */ public TaskSoundmodemTCP( - SoundModemConfiguration smConfiguration, ModelReceivedData receivedFrame) { - this.smConfiguration = smConfiguration; - smc = new SoundModemClient(smConfiguration); + SoundModemConfiguration smConfiguration2, + BlockingQueue blockingQueueIn, + Controler ctrlIn) { + + this.smConfiguration = smConfiguration2; + this.blockingQueue = blockingQueueIn; + smc = new SoundModemClient(smConfiguration2); + ctrl = ctrlIn; + if (smc.isOpen() == false) { this.failed(); - } - this.receivedFrame = receivedFrame; + } else this.succeeded(); } - public TaskSoundmodemTCP(ModelReceivedData receivedFrame) { + /** + * @param smConfiguration fichier de configuration + * @param receivedFrame Frame Data model + */ + public TaskSoundmodemTCP( + SoundModemConfiguration smConfiguration2, + BlockingQueue blockingQueueIn, + ModelReceivedData datamodel) { + + this.smConfiguration = smConfiguration2; + this.blockingQueue = blockingQueueIn; + this.datamodel = datamodel; + + smc = new SoundModemClient(smConfiguration2); + // ctrl = ctrlIn; + + if (smc.isOpen() == false) { + this.failed(); + } else this.succeeded(); + } + + public TaskSoundmodemTCP(BlockingQueue blockingQueueIn) { smConfiguration = new SoundModemConfiguration("default"); + blockingQueue = blockingQueueIn; + smc = new SoundModemClient(smConfiguration); if (smc.isOpen() == false) { this.failed(); - } - this.receivedFrame = receivedFrame; + } else this.succeeded(); + // this.receivedFrame = receivedFrame; + + } + + private void updatenbFrame() { + Platform.runLater( + new Runnable() { + + @Override + public void run() { + + try { + ctrl.IncrementNbFrame(); + + } catch (Exception e) { + ctrl.displayLog("Update frame Run - error"); + + e.printStackTrace(); + } + } + }); } /** @@ -46,32 +100,48 @@ public class TaskSoundmodemTCP extends Task { @Override protected String call() { try { - while (running == true) { if (smc.isOpen()) { + byte[] temp = smc.receivedRawData(); - receivedFrame.addFrame(temp); - this.updateValue(receivedFrame.toString()); + + blockingQueue.add(new ReceivedData(new Date(), temp)); + updatenbFrame(); } else { this.running = false; + ctrl.displayLog("Erreur SoundModem closed"); + log.severe("Erreur SoundModem closed"); } } } catch (Exception e) { log.severe("Erreur SoundModem not available"); log.severe(e.toString()); + ctrl.displayLog("Erreur SoundModem not available"); this.failed(); } - return receivedFrame.toString(); + log.severe("End call available"); + ctrl.displayLog("End call available"); + // return receivedFrame.toString(); + return "C"; } public void arreter() { this.running = false; + smc.close(); } public void redemarrer() { - this.running = true; + log.severe("REDEMARAGE"); + if (smc.isOpen() == false) { + this.failed(); + } else { + this.succeeded(); + this.running = true; + } + + call(); } } diff --git a/ApplicationKissTool/src/main/resources/org/josast/ApplicationKissTool/KissTool.fxml b/ApplicationKissTool/src/main/resources/org/josast/ApplicationKissTool/KissTool.fxml index 32b6d16ba4fe4f96535e3966b4f134f7020cc83c..a0bc52a9282335e5ed7067551b21fbd586887670 100644 --- a/ApplicationKissTool/src/main/resources/org/josast/ApplicationKissTool/KissTool.fxml +++ b/ApplicationKissTool/src/main/resources/org/josast/ApplicationKissTool/KissTool.fxml @@ -3,6 +3,7 @@ + @@ -16,9 +17,10 @@ + - + @@ -26,27 +28,75 @@ - + - - - - - - - -