diff --git a/ApplicationAmicalsat/src/main/java/org/josast/ApplicationAmicalsat/App.java b/ApplicationAmicalsat/src/main/java/org/josast/ApplicationAmicalsat/App.java
index 4c17a16f51fdbfe9d99fe28390232780459bc907..5ea4d08c951a6cacc0e5b54fe1b4f15ee9748bd6 100644
--- a/ApplicationAmicalsat/src/main/java/org/josast/ApplicationAmicalsat/App.java
+++ b/ApplicationAmicalsat/src/main/java/org/josast/ApplicationAmicalsat/App.java
@@ -17,7 +17,7 @@ public class App extends Application {
private static Scene scene;
private static FXMLLoader fxmlLoader;
private static Logger logger = Logger.getLogger("AmsatLogger");
- private static final String fxmlFile = "Amicalsat";
+ private static final String fxmlFile = "Amicalsat";
@Override
public void start(Stage stage) throws IOException {
diff --git a/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/AmsatToUvsqsatSyncConfig.java b/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/AmsatToUvsqsatSyncConfig.java
index 3d057d5e35b02487d09835131d5b6984413cb0d7..9cfd701cbb0202a82845983fd4dd3f2e9b25b98a 100644
--- a/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/AmsatToUvsqsatSyncConfig.java
+++ b/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/AmsatToUvsqsatSyncConfig.java
@@ -1,111 +1,87 @@
-
package org.josast.databaseSync;
public class AmsatToUvsqsatSyncConfig {
-
- public String login;
- public String password;
- public String sftpUrl;
- public String amsatDatabaseUrl;
- public String sshUrl;
- public String deltaTime;
- public String satelliteNasaId;
- /**
- * @return the login
- */
- public String getLogin() {
- return login;
- }
- /**
- * @param login the login to set
- */
- public void setLogin(String login) {
- this.login = login;
- }
- /**
- * @return the password
- */
- public String getPassword() {
- return password;
- }
- /**
- * @param password the password to set
- */
- public void setPassword(String password) {
- this.password = password;
- }
- /**
- * @return the sftpUrl
- */
- public String getSftpUrl() {
- return sftpUrl;
- }
- /**
- * @param sftpUrl the sftpUrl to set
- */
- public void setSftpUrl(String sftpUrl) {
- this.sftpUrl = sftpUrl;
- }
- /**
- * @return the amsatDatabaseUrl
- */
- public String getAmsatDatabaseUrl() {
- return amsatDatabaseUrl;
- }
- /**
- * @param amsatDatabaseUrl the amsatDatabaseUrl to set
- */
- public void setAmsatDatabaseUrl(String amsatDatabaseUrl) {
- this.amsatDatabaseUrl = amsatDatabaseUrl;
- }
- /**
- * @return the sshUrl
- */
- public String getSshUrl() {
- return sshUrl;
- }
- /**
- * @param sshUrl the sshUrl to set
- */
- public void setSshUrl(String sshUrl) {
- this.sshUrl = sshUrl;
- }
- /**
- * @return the deltaTime
- */
- public String getDeltaTime() {
- return deltaTime;
- }
- /**
- * @param deltaTime the deltaTime to set
- */
- public void setDeltaTime(String deltaTime) {
- this.deltaTime = deltaTime;
- }
- /**
- * @return the satelliteNasaId
- */
- public String getSatelliteNasaId() {
- return satelliteNasaId;
- }
- /**
- * @param satelliteNasaId the satelliteNasaId to set
- */
- public void setSatelliteNasaId(String satelliteNasaId) {
- this.satelliteNasaId = satelliteNasaId;
- }
-
-
- @Override
- public String toString() {
- return "AmsatToUvsqsatSyncConfig [login=" + login + ", password=" + password + ", sftpUrl=" + sftpUrl
- + ", amsatDatabaseUrl=" + amsatDatabaseUrl + ", sshUrl=" + sshUrl + ", deltaTime=" + deltaTime
- + ", satelliteNasaId=" + satelliteNasaId + "]";
- }
-
-
-
-
+ public String login;
+ public String password;
+ public String sftpUrl;
+ public String amsatDatabaseUrl;
+ public String sshUrl;
+ public String deltaTime;
+ public String satelliteNasaId;
+ /** @return the login */
+ public String getLogin() {
+ return login;
+ }
+ /** @param login the login to set */
+ public void setLogin(String login) {
+ this.login = login;
+ }
+ /** @return the password */
+ public String getPassword() {
+ return password;
+ }
+ /** @param password the password to set */
+ public void setPassword(String password) {
+ this.password = password;
+ }
+ /** @return the sftpUrl */
+ public String getSftpUrl() {
+ return sftpUrl;
+ }
+ /** @param sftpUrl the sftpUrl to set */
+ public void setSftpUrl(String sftpUrl) {
+ this.sftpUrl = sftpUrl;
+ }
+ /** @return the amsatDatabaseUrl */
+ public String getAmsatDatabaseUrl() {
+ return amsatDatabaseUrl;
+ }
+ /** @param amsatDatabaseUrl the amsatDatabaseUrl to set */
+ public void setAmsatDatabaseUrl(String amsatDatabaseUrl) {
+ this.amsatDatabaseUrl = amsatDatabaseUrl;
+ }
+ /** @return the sshUrl */
+ public String getSshUrl() {
+ return sshUrl;
+ }
+ /** @param sshUrl the sshUrl to set */
+ public void setSshUrl(String sshUrl) {
+ this.sshUrl = sshUrl;
+ }
+ /** @return the deltaTime */
+ public String getDeltaTime() {
+ return deltaTime;
+ }
+ /** @param deltaTime the deltaTime to set */
+ public void setDeltaTime(String deltaTime) {
+ this.deltaTime = deltaTime;
+ }
+ /** @return the satelliteNasaId */
+ public String getSatelliteNasaId() {
+ return satelliteNasaId;
+ }
+ /** @param satelliteNasaId the satelliteNasaId to set */
+ public void setSatelliteNasaId(String satelliteNasaId) {
+ this.satelliteNasaId = satelliteNasaId;
+ }
+ @Override
+ public String toString() {
+ return "AmsatToUvsqsatSyncConfig [login="
+ + login
+ + ", password="
+ + password
+ + ", sftpUrl="
+ + sftpUrl
+ + ", amsatDatabaseUrl="
+ + amsatDatabaseUrl
+ + ", sshUrl="
+ + sshUrl
+ + ", deltaTime="
+ + deltaTime
+ + ", satelliteNasaId="
+ + satelliteNasaId
+ + "]";
+ }
}
diff --git a/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/AppSynchroAmsatToUvsqsat.java b/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/AppSynchroAmsatToUvsqsat.java
index 6780bc04491a5f60279b27dace630dbf847b2f6b..cc2081bd1f9c7fa4b34a27625e48a03b73451358 100644
--- a/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/AppSynchroAmsatToUvsqsat.java
+++ b/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/AppSynchroAmsatToUvsqsat.java
@@ -15,132 +15,155 @@ import org.json.JSONObject;
public class AppSynchroAmsatToUvsqsat {
- private static Logger appLogger = Logger.getLogger("AmsatLogger");
-
- private static long MN = 1000 * 60;
-
- private Path filepath;
- private String RepositoryPath = "config";
- private AmsatToUvsqsatSyncConfig config = new AmsatToUvsqsatSyncConfig();
- private String fileIn = null;
- SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss.SSS");
-
- public void execute() {
-
- formater.setTimeZone(TimeZone.getTimeZone("UTC"));
- // lecture de la configuration
-
- ManageJSonConfigFile mjcf = new ManageJSonConfigFile();
- config = (AmsatToUvsqsatSyncConfig) mjcf
- .readJson(new AmsatToUvsqsatSyncConfig());
-
- // Récupération des données
-
- GetDataFromAmsatDatabase dataAmsatDb = new GetDataFromAmsatDatabase(
- config.getAmsatDatabaseUrl());
-
- Date endDate = new Date();
-
- long temp = endDate.getTime()
- - MN * Integer.parseInt(config.getDeltaTime());
- Date startDate = new Date(temp);
- DataToExchange[] results = dataAmsatDb.getTelemetrydata(startDate,
- endDate, Integer.parseInt(config.getSatelliteNasaId()));
- DataToExchange[] results2 = dataAmsatDb.getTelemetrydata(startDate,
- endDate, 47438);
- // et écriture dans un fichier
- DataToUVSQsatControlCenter dtc = null;
- String creationdate = formater.format(startDate);
- fileIn = creationdate + "-Data.json";
-
- if (results != null) {
- // file format 2020-12-21-17-42-19.409-Data.json
-
-
- dtc = new DataToUVSQsatControlCenter(results, fileIn);
- dtc.save();
-
- }
-
- if (results2 != null) {
- if (dtc == null) {
- dtc = new DataToUVSQsatControlCenter(results2, fileIn);
- dtc.save();
- } else {
- dtc.append(results2, fileIn);
- }
- }
- if (dtc != null) {
-
- // Envoie du fichier vers Latmos
- SendSftp sfp = new SendSftp(config.getSftpUrl(), config.getLogin(),
- config.getPassword());
-
- String remotefile = "/toLATMOS/json/" + fileIn;
- String localfile = fileIn;
- sfp.upload(localfile, remotefile);
- System.out.println("Upload");
- // efface fichier local.
-
- try {
- Files.delete(Paths.get(fileIn));
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- System.exit(0);
- }
- }
+ private static Logger appLogger = Logger.getLogger("AmsatLogger");
+
+ private static long MN = 1000 * 60;
+
+ private Path filepath;
+ private String RepositoryPath = "config";
+ private AmsatToUvsqsatSyncConfig config = new AmsatToUvsqsatSyncConfig();
+ private String fileIn = null;
+ SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss.SSS");
+
+ public void execute() {
+
+ formater.setTimeZone(TimeZone.getTimeZone("UTC"));
+ // lecture de la configuration
+
+ ManageJSonConfigFile mjcf = new ManageJSonConfigFile();
+ config = (AmsatToUvsqsatSyncConfig) mjcf.readJson(new AmsatToUvsqsatSyncConfig());
+
+ // Récupération des données
+
+ GetDataFromAmsatDatabase dataAmsatDb =
+ new GetDataFromAmsatDatabase(config.getAmsatDatabaseUrl());
+
+ Date endDate = new Date();
+
+ long temp = endDate.getTime() - MN * Integer.parseInt(config.getDeltaTime());
+
+ Date startDate = new Date(temp);
+ DataToExchange[] results =
+ dataAmsatDb.getTelemetrydata(
+ startDate, endDate, Integer.parseInt(config.getSatelliteNasaId()));
+
+ DataToExchange[] results2 = dataAmsatDb.getTelemetrydata(startDate, endDate, 47438);
- public int SaveConfigFile(AmsatToUvsqsatSyncConfig tlmData) {
+ DataToExchange[] results3 = dataAmsatDb.getTelemetrydata(startDate, endDate, 99245);
+ // et écriture dans un fichier
+ DataToExchange[] results4 = dataAmsatDb.getTelemetrydata(startDate, endDate, 56211);
- int erreur = 0;
+ DataToUVSQsatControlCenter dtc = null;
+ String creationdate = formater.format(startDate);
+ fileIn = creationdate + "-Data.json";
- JSONObject jasonObject = new JSONObject(tlmData);
+ if (results != null) {
+ // file format 2020-12-21-17-42-19.409-Data.json
+ System.out.println("R1 : " + results.length);
+ dtc = new DataToUVSQsatControlCenter(results, fileIn);
+ dtc.save();
+ }
+
+ if (results2 != null) {
+ System.out.println("R2 : " + results2.length);
+ if (dtc == null) {
+ dtc = new DataToUVSQsatControlCenter(results2, fileIn);
+ dtc.save();
+ } else {
+ dtc.append(results2, fileIn);
+ }
+ }
-// AmsatToUvsqsatSyncConfig jasonObject2 = (AmsatToUvsqsatSyncConfig) toBean(jasonObject, new AmsatToUvsqsatSyncConfig());
+ if (results3 != null) {
+ System.out.println("R3 : " + results3.length);
+ if (dtc == null) {
+ dtc = new DataToUVSQsatControlCenter(results3, fileIn);
+ dtc.save();
+ } else {
+ dtc.append(results3, fileIn);
+ }
+ }
+
+ if (results4 != null) {
+ System.out.println("R4 : " + results4.length);
+ if (dtc == null) {
+ dtc = new DataToUVSQsatControlCenter(results4, fileIn);
+ dtc.save();
+ } else {
+ dtc.append(results4, fileIn);
+ }
+ }
- filepath = Paths.get(this.RepositoryPath + "\\Data.json");
+ if (dtc != null) {
- try {
- if (!Files.exists(filepath)) {
- Files.createFile(filepath);
- Files.writeString(filepath, " " + "\r\n",
- StandardOpenOption.CREATE);
- }
+ // Envoie du fichier vers Latmos
+ SendSftp sfp = new SendSftp(config.getSftpUrl(), config.getLogin(), config.getPassword());
- Files.writeString(filepath, jasonObject.toString() + "\r\n",
- StandardOpenOption.CREATE);
- if (Files.size(filepath) < 10) {
- appLogger.severe("file not created ");
- erreur = -1;
- }
+ String remotefile = "/toLATMOS/json/" + fileIn;
+ String localfile = fileIn;
+ sfp.upload(localfile, remotefile);
+ System.out.println("Upload");
+ // efface fichier local.
- } catch (IOException e) {
- appLogger.severe(e.toString());
- erreur = -1;
- }
+ try {
+ Files.delete(Paths.get(fileIn));
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
- return erreur;
+ System.exit(0);
}
+ System.out.println("fin traitement");
+ }
+
+ public int SaveConfigFile(AmsatToUvsqsatSyncConfig tlmData) {
+
+ int erreur = 0;
+
+ JSONObject jasonObject = new JSONObject(tlmData);
+
+ // AmsatToUvsqsatSyncConfig jasonObject2 = (AmsatToUvsqsatSyncConfig) toBean(jasonObject, new
+ // AmsatToUvsqsatSyncConfig());
+
+ filepath = Paths.get(this.RepositoryPath + "\\Data.json");
+
+ try {
+ if (!Files.exists(filepath)) {
+ Files.createFile(filepath);
+ Files.writeString(filepath, " " + "\r\n", StandardOpenOption.CREATE);
+ }
- public static void main(String[] args) {
-
- AppSynchroAmsatToUvsqsat app = new AppSynchroAmsatToUvsqsat();
- app.execute();
-// app.initDirectory();
-// AmsatToUvsqsatSyncConfig config = new AmsatToUvsqsatSyncConfig();
-// config.setAmsatDatabaseUrl("AMSATDataBase");
-// config.setDeltaTimeLong(10);
-// config.setDeltaTime("10");
-// config.setLogin("login");
-// config.setPassword("password");
-// config.setSftpUrl("URL SFTP");
-// config.setSshUrl("SSH file");
-////
-// app.readJson( );
-// app.saveTlmData(config);
+ Files.writeString(filepath, jasonObject.toString() + "\r\n", StandardOpenOption.CREATE);
+ if (Files.size(filepath) < 10) {
+ appLogger.severe("file not created ");
+ erreur = -1;
+ }
+ } catch (IOException e) {
+ appLogger.severe(e.toString());
+ erreur = -1;
}
+ return erreur;
+ }
+
+ public static void main(String[] args) {
+
+ AppSynchroAmsatToUvsqsat app = new AppSynchroAmsatToUvsqsat();
+ app.execute();
+ // app.initDirectory();
+ // AmsatToUvsqsatSyncConfig config = new AmsatToUvsqsatSyncConfig();
+ // config.setAmsatDatabaseUrl("AMSATDataBase");
+ // config.setDeltaTimeLong(10);
+ // config.setDeltaTime("10");
+ // config.setLogin("login");
+ // config.setPassword("password");
+ // config.setSftpUrl("URL SFTP");
+ // config.setSshUrl("SSH file");
+ ////
+ // app.readJson( );
+ // app.saveTlmData(config);
+
+ }
}
diff --git a/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/Commande.java b/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/Commande.java
index 323fd2c8878f51b913801100592ebdb17e8f01eb..e08e257dfb2a93415988f19f27a215fa1cf52dd6 100644
--- a/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/Commande.java
+++ b/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/Commande.java
@@ -1,7 +1,6 @@
package org.josast.databaseSync;
public interface Commande {
-
- public void excecute();
+ public void excecute();
}
diff --git a/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/DataToExchange.java b/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/DataToExchange.java
index c5debaf6c021f1ae5eeb38cdeea8e58b0492881b..3bf5e5a95c547aa61e730d49d9b9aee09b1a0262 100644
--- a/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/DataToExchange.java
+++ b/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/DataToExchange.java
@@ -2,98 +2,75 @@ package org.josast.databaseSync;
public class DataToExchange {
-
- private String source=""; // Callsign or user name of the receiver
-
- private String timestamp; // UTC timestamp (see ISO 8601) 2018-01-24T23:42:46Z
-
- private String frame; // The received data, in hexadecimal string (AX.25 packet with or without KISS 'C0 00 .. C0'. Whitespaces optional. C0 00 A9 05 DE ...
-
- private String longitude=null; // Longitude of the receiver (WGS84) 8.95564E
-
- private String latitude=null; //Latitude of the receiver (WGS84) 49.73145N
-
-
-
-
- public DataToExchange(String source, String timestamp, String frame, String longitude, String latitude) {
- super();
- this.source = source;
- this.timestamp = timestamp;
- this.frame = frame;
- this.longitude = longitude;
- this.latitude = latitude;
- }
-
- /**
- * @return the source
- */
- public String getSource() {
- return source;
- }
-
- /**
- * @param source the source to set
- */
- public void setSource(String source) {
- this.source = source;
- }
-
- /**
- * @return the timestamp
- */
- public String getTimestamp() {
- return timestamp;
- }
-
- /**
- * @param timestamp the timestamp to set
- */
- public void setTimestamp(String timestamp) {
- this.timestamp = timestamp;
- }
-
- /**
- * @return the frame
- */
- public String getFrame() {
- return frame;
- }
-
- /**
- * @param frame the frame to set
- */
- public void setFrame(String frame) {
- this.frame = frame;
- }
-
- /**
- * @return the longitude
- */
- public String getLongitude() {
- return longitude;
- }
-
- /**
- * @param longitude the longitude to set
- */
- public void setLongitude(String longitude) {
- this.longitude = longitude;
- }
-
- /**
- * @return the latitude
- */
- public String getLatitude() {
- return latitude;
- }
-
- /**
- * @param latitude the latitude to set
- */
- public void setLatitude(String latitude) {
- this.latitude = latitude;
- }
-
-
+ private String source = ""; // Callsign or user name of the receiver
+
+ private String timestamp; // UTC timestamp (see ISO 8601) 2018-01-24T23:42:46Z
+
+ private String
+ frame; // The received data, in hexadecimal string (AX.25 packet with or without KISS 'C0 00
+ // .. C0'. Whitespaces optional. C0 00 A9 05 DE ...
+
+ private String longitude = null; // Longitude of the receiver (WGS84) 8.95564E
+
+ private String latitude = null; // Latitude of the receiver (WGS84) 49.73145N
+
+ public DataToExchange(
+ String source, String timestamp, String frame, String longitude, String latitude) {
+ super();
+ this.source = source;
+ this.timestamp = timestamp;
+ this.frame = frame;
+ this.longitude = longitude;
+ this.latitude = latitude;
+ }
+
+ /** @return the source */
+ public String getSource() {
+ return source;
+ }
+
+ /** @param source the source to set */
+ public void setSource(String source) {
+ this.source = source;
+ }
+
+ /** @return the timestamp */
+ public String getTimestamp() {
+ return timestamp;
+ }
+
+ /** @param timestamp the timestamp to set */
+ public void setTimestamp(String timestamp) {
+ this.timestamp = timestamp;
+ }
+
+ /** @return the frame */
+ public String getFrame() {
+ return frame;
+ }
+
+ /** @param frame the frame to set */
+ public void setFrame(String frame) {
+ this.frame = frame;
+ }
+
+ /** @return the longitude */
+ public String getLongitude() {
+ return longitude;
+ }
+
+ /** @param longitude the longitude to set */
+ public void setLongitude(String longitude) {
+ this.longitude = longitude;
+ }
+
+ /** @return the latitude */
+ public String getLatitude() {
+ return latitude;
+ }
+
+ /** @param latitude the latitude to set */
+ public void setLatitude(String latitude) {
+ this.latitude = latitude;
+ }
}
diff --git a/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/DataToUVSQsatControlCenter.java b/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/DataToUVSQsatControlCenter.java
index 6c9b1688cffb0c955eb7cf1fc2216b2b89afca61..b341cb6e643b5544ee6c509658e73c1091c7c753 100644
--- a/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/DataToUVSQsatControlCenter.java
+++ b/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/DataToUVSQsatControlCenter.java
@@ -11,48 +11,49 @@ import java.util.logging.Logger;
import org.json.JSONArray;
public class DataToUVSQsatControlCenter implements Commande {
-
- private static Logger appLogger = Logger.getLogger("AmsatLogger");
- private DataToExchange[] data;
- private String file = null;
-
- public DataToUVSQsatControlCenter(DataToExchange[] sidsdataIn, String fileIn) {
-
- data = sidsdataIn.clone();
- file = fileIn;
-
- }
-
- @Override
- public void excecute() {
-
- save();
- }
-
- public void save() {
-
- JSONArray ja = new JSONArray(data);
- Path path = Paths.get(file);
-
- try {
- Files.writeString(path, ja.toString(), StandardCharsets.UTF_8);
- } catch (IOException ex) {
- appLogger.severe("can not write "+file+ " "+ex.getMessage());
- }
-
- }
-
- public void append(DataToExchange[] sidsdataIn2, String fileIn2) {
- DataToExchange[] data2 = sidsdataIn2.clone();
- JSONArray ja = new JSONArray(data2);
- Path path = Paths.get(fileIn2);
-
- try {
- Files.writeString(path, ja.toString(), StandardCharsets.UTF_8,StandardOpenOption.CREATE,StandardOpenOption.APPEND);
- } catch (IOException ex) {
- appLogger.severe("can not write "+file+ " "+ex.getMessage());
- }
-
- }
+ private static Logger appLogger = Logger.getLogger("AmsatLogger");
+ private DataToExchange[] data;
+ private String file = null;
+
+ public DataToUVSQsatControlCenter(DataToExchange[] sidsdataIn, String fileIn) {
+
+ data = sidsdataIn.clone();
+ file = fileIn;
+ }
+
+ @Override
+ public void excecute() {
+
+ save();
+ }
+
+ public void save() {
+
+ JSONArray ja = new JSONArray(data);
+ Path path = Paths.get(file);
+
+ try {
+ Files.writeString(path, ja.toString(), StandardCharsets.UTF_8);
+ } catch (IOException ex) {
+ appLogger.severe("can not write " + file + " " + ex.getMessage());
+ }
+ }
+
+ public void append(DataToExchange[] sidsdataIn2, String fileIn2) {
+ DataToExchange[] data2 = sidsdataIn2.clone();
+ JSONArray ja = new JSONArray(data2);
+ Path path = Paths.get(fileIn2);
+
+ try {
+ Files.writeString(
+ path,
+ ja.toString(),
+ StandardCharsets.UTF_8,
+ StandardOpenOption.CREATE,
+ StandardOpenOption.APPEND);
+ } catch (IOException ex) {
+ appLogger.severe("can not write " + file + " " + ex.getMessage());
+ }
+ }
}
diff --git a/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/GetDataFromAmsatDatabase.java b/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/GetDataFromAmsatDatabase.java
index 8aed299b57232be8971727e3a6b16b06c91ce12e..d250e531bc1ca6eb412d9eb91f4faab0fc871c98 100644
--- a/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/GetDataFromAmsatDatabase.java
+++ b/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/GetDataFromAmsatDatabase.java
@@ -9,48 +9,53 @@ import org.json.JSONObject;
public class GetDataFromAmsatDatabase implements Commande {
-
- private String urlDatabase = null;
-
- final private SimpleDateFormat ISO8601DATEFORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
-
- public GetDataFromAmsatDatabase(String urlIn) {
- urlDatabase = urlIn;
- ISO8601DATEFORMAT.setTimeZone(TimeZone.getTimeZone("UTC"));
- }
-
- public DataToExchange[] getTelemetrydata(Date startdate, Date endate, int noradid) {
-
- String startDate = ISO8601DATEFORMAT.format(startdate);
- String endDate = ISO8601DATEFORMAT.format(endate);
- DataToExchange dte[] = null;
-
- // ?endTimeStamp=2021-10-08T15:00:00Z&noradID=1000&startTimeStamp=2021-09-08T13:00:00Z
- String url = urlDatabase + "?startTimeStamp=" + startDate + "&endTimeStamp=" +endDate + "&noradID=" + noradid;
-
- HttpGetDatabasse httpget = new HttpGetDatabasse();
- String results = httpget.sendGET(url);
- JSONArray json = new JSONArray(results);
-
- if (json.length() != 0) {
- JSONObject jsonObject = (JSONObject) json.get(0);
- dte = new DataToExchange[json.length()];
- for (int i = 0; i < json.length(); i++) {
- jsonObject = (JSONObject) json.get(i);
- dte[i] = new DataToExchange(jsonObject.getString("source"), jsonObject.getString("timestamp"),
- jsonObject.getString("frame"), jsonObject.getString("latitude"),jsonObject.getString("longitude"));
-
- }
- }
- return dte;
-
- }
-
- @Override
- public void excecute() {
-
- }
-
-
-
+ private String urlDatabase = null;
+
+ private final SimpleDateFormat ISO8601DATEFORMAT =
+ new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
+
+ public GetDataFromAmsatDatabase(String urlIn) {
+ urlDatabase = urlIn;
+ ISO8601DATEFORMAT.setTimeZone(TimeZone.getTimeZone("UTC"));
+ }
+
+ public DataToExchange[] getTelemetrydata(Date startdate, Date endate, int noradid) {
+
+ String startDate = ISO8601DATEFORMAT.format(startdate);
+ String endDate = ISO8601DATEFORMAT.format(endate);
+ DataToExchange dte[] = null;
+
+ // ?endTimeStamp=2021-10-08T15:00:00Z&noradID=1000&startTimeStamp=2021-09-08T13:00:00Z
+ String url =
+ urlDatabase
+ + "?startTimeStamp="
+ + startDate
+ + "&endTimeStamp="
+ + endDate
+ + "&noradID="
+ + noradid;
+
+ HttpGetDatabasse httpget = new HttpGetDatabasse();
+ String results = httpget.sendGET(url);
+ JSONArray json = new JSONArray(results);
+
+ if (json.length() != 0) {
+ JSONObject jsonObject = (JSONObject) json.get(0);
+ dte = new DataToExchange[json.length()];
+ for (int i = 0; i < json.length(); i++) {
+ jsonObject = (JSONObject) json.get(i);
+ dte[i] =
+ new DataToExchange(
+ jsonObject.getString("source"),
+ jsonObject.getString("timestamp"),
+ jsonObject.getString("frame"),
+ jsonObject.getString("latitude"),
+ jsonObject.getString("longitude"));
+ }
+ }
+ return dte;
+ }
+
+ @Override
+ public void excecute() {}
}
diff --git a/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/SendFilesToSids.java b/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/SendFilesToSids.java
index 90bf75cdff04ab7a0cf64898b5c45f6ab5cae717..d9e6fff26e296f646c08fe039eaf2d516e58f2bb 100644
--- a/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/SendFilesToSids.java
+++ b/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/SendFilesToSids.java
@@ -1,19 +1,16 @@
package org.josast.databaseSync;
public class SendFilesToSids implements Commande {
-
- String path = null;
-
-
- public SendFilesToSids( String pathIN)
- {
- path=pathIN;
- }
- @Override
- public void excecute() {
- // TODO Auto-generated method stub
+ String path = null;
- }
+ public SendFilesToSids(String pathIN) {
+ path = pathIN;
+ }
+ @Override
+ public void excecute() {
+ // TODO Auto-generated method stub
+
+ }
}
diff --git a/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/SendSftp.java b/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/SendSftp.java
index f99689db826e8608ad07d141bd1671d5eff33635..8370851c949fef45a89be0afc62f2a4190a95d7c 100644
--- a/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/SendSftp.java
+++ b/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/SendSftp.java
@@ -10,70 +10,65 @@ import com.jcraft.jsch.SftpException;
public class SendSftp {
- private static Logger appLogger = Logger.getLogger("AmsatLogger");
-
- private String remoteHost = null;
- private String username = null;
- private String password = null;
- private String KnownHosts = "LATMOS_SSH";
-
- private ChannelSftp channelSftp = null;
-
- public SendSftp(String remoteHost, String username, String password) {
- super();
- this.remoteHost = remoteHost;
- this.username = username;
- this.password = password;
-
- channelSftp = setupJsch();
- }
-
-
-
- public ChannelSftp setupJsch() {
- Session jschSession = null;
- ChannelSftp channel = null;
- try {
-
- JSch jsch = new JSch();
- jsch.setKnownHosts(KnownHosts);
- jschSession = jsch.getSession(username, remoteHost);
- jschSession.setPassword(password);
- jschSession.connect();
- } catch (Exception e) {
- appLogger.severe("error connection to " + remoteHost + " " + e.getMessage());
- }
-
- try {
- channel = (ChannelSftp) jschSession.openChannel("sftp");
-
- } catch (JSchException e) {
- appLogger.severe("error to open channel sftp " + e.getMessage());
-
- }
-
- return channel;
-
- }
-
- public void upload(String filein, String fileout) {
-
- try {
- channelSftp.connect();
- } catch (JSchException e) {
- appLogger.severe("error to connect channel " + e.getMessage());
-e.printStackTrace();
- }
-
- try {
- channelSftp.put(filein, fileout);
- } catch (SftpException e) {
-
- appLogger.severe("error to send file " + e.getMessage());
- e.printStackTrace();
- }
- System.out.println("sentn");
- channelSftp.exit();
- }
-
+ private static Logger appLogger = Logger.getLogger("AmsatLogger");
+
+ private String remoteHost = null;
+ private String username = null;
+ private String password = null;
+ private String KnownHosts = "LATMOS_SSH";
+
+ private ChannelSftp channelSftp = null;
+
+ public SendSftp(String remoteHost, String username, String password) {
+ super();
+ this.remoteHost = remoteHost;
+ this.username = username;
+ this.password = password;
+
+ channelSftp = setupJsch();
+ }
+
+ public ChannelSftp setupJsch() {
+ Session jschSession = null;
+ ChannelSftp channel = null;
+ try {
+
+ JSch jsch = new JSch();
+ jsch.setKnownHosts(KnownHosts);
+ jschSession = jsch.getSession(username, remoteHost);
+ jschSession.setPassword(password);
+ jschSession.connect();
+ } catch (Exception e) {
+ appLogger.severe("error connection to " + remoteHost + " " + e.getMessage());
+ }
+
+ try {
+ channel = (ChannelSftp) jschSession.openChannel("sftp");
+
+ } catch (JSchException e) {
+ appLogger.severe("error to open channel sftp " + e.getMessage());
+ }
+
+ return channel;
+ }
+
+ public void upload(String filein, String fileout) {
+
+ try {
+ channelSftp.connect();
+ } catch (JSchException e) {
+ appLogger.severe("error to connect channel " + e.getMessage());
+ e.printStackTrace();
+ }
+
+ try {
+ channelSftp.put(filein, fileout);
+ } catch (SftpException e) {
+
+ appLogger.severe("error to send file " + e.getMessage());
+ e.printStackTrace();
+ }
+
+ channelSftp.exit();
+ }
}
diff --git a/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/config/ManageFolder.java b/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/config/ManageFolder.java
index fde3739aa6526fe9a6b0f87565b772a9c9b2f7c9..c7f27ba667040edc326902640f96f7b2b7f6260f 100644
--- a/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/config/ManageFolder.java
+++ b/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/config/ManageFolder.java
@@ -9,58 +9,50 @@ import java.util.logging.Logger;
public class ManageFolder {
- private static Logger appLogger = Logger.getLogger("AmsatLogger");
- private String RepositoryPath = null;
-
-
- private String defaultrepository = "data";
-
- public ManageFolder() {
- RepositoryPath = System.getProperty("user.dir") + "\\" + defaultrepository;
- }
-
- public ManageFolder(String path) {
-
- if (path == null) {
- RepositoryPath = System.getProperty("user.dir") + "\\" + defaultrepository;
-
- } else if (path.length() == 0) {
- RepositoryPath = System.getProperty("user.dir") + "\\+defaultrepository";
- } else {
- RepositoryPath = System.getProperty("user.dir") + "\\" + path;
- }
- }
-
- /**
- * @return the repositoryPath
- */
- public String getRepositoryPath() {
- return RepositoryPath;
- }
-
- /**
- * @param repositoryPath the repositoryPath to set
- */
- public void setRepositoryPath(String repositoryPath) {
- RepositoryPath = repositoryPath;
- }
-
- public void createdDirectories() {
-
- Path path = Paths.get(RepositoryPath);
- // if directory exists?
- if (!Files.exists(path)) {
- try {
- Files.createDirectories(path);
- appLogger.info("directory created : " + RepositoryPath);
- } catch (IOException e) {
- appLogger.log(Level.SEVERE, "cannot create outpout directorie " + e.toString());
- }
- } else
- {
- appLogger.info("directory already exist : " + RepositoryPath);
- }
-
- }
-
+ private static Logger appLogger = Logger.getLogger("AmsatLogger");
+ private String RepositoryPath = null;
+
+ private String defaultrepository = "data";
+
+ public ManageFolder() {
+ RepositoryPath = System.getProperty("user.dir") + "\\" + defaultrepository;
+ }
+
+ public ManageFolder(String path) {
+
+ if (path == null) {
+ RepositoryPath = System.getProperty("user.dir") + "\\" + defaultrepository;
+
+ } else if (path.length() == 0) {
+ RepositoryPath = System.getProperty("user.dir") + "\\+defaultrepository";
+ } else {
+ RepositoryPath = System.getProperty("user.dir") + "\\" + path;
+ }
+ }
+
+ /** @return the repositoryPath */
+ public String getRepositoryPath() {
+ return RepositoryPath;
+ }
+
+ /** @param repositoryPath the repositoryPath to set */
+ public void setRepositoryPath(String repositoryPath) {
+ RepositoryPath = repositoryPath;
+ }
+
+ public void createdDirectories() {
+
+ Path path = Paths.get(RepositoryPath);
+ // if directory exists?
+ if (!Files.exists(path)) {
+ try {
+ Files.createDirectories(path);
+ appLogger.info("directory created : " + RepositoryPath);
+ } catch (IOException e) {
+ appLogger.log(Level.SEVERE, "cannot create outpout directorie " + e.toString());
+ }
+ } else {
+ appLogger.info("directory already exist : " + RepositoryPath);
+ }
+ }
}
diff --git a/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/config/ManageJSonConfigFile.java b/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/config/ManageJSonConfigFile.java
index 924d5b8e9173c557179e0f810b04e951bd38261a..7d7af0736f28ad728b91ac35dbde81fa22274234 100644
--- a/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/config/ManageJSonConfigFile.java
+++ b/ApplicationDatabaseSynchronisation/src/main/java/org/josast/databaseSync/config/ManageJSonConfigFile.java
@@ -16,74 +16,69 @@ import org.json.JSONException;
import org.json.JSONObject;
public class ManageJSonConfigFile {
- private static Logger appLogger = Logger.getLogger("AmsatLogger");
-
- private String configRepository = "config";
- private String configName = "Data.json";
-
- public int SaveConfigFile(Object bean) {
- ManageFolder mn = new ManageFolder(configRepository);
- mn.createdDirectories();
- Path filepath = Paths.get(mn.getRepositoryPath() + "/"+configName);
-
- int erreur = 0;
-
- JSONObject jasonObject = new JSONObject(bean);
-
- try {
- if (!Files.exists(filepath)) {
- Files.createFile(filepath);
- Files.writeString(filepath, " " + "\r\n", StandardOpenOption.CREATE);
- }
-
- Files.writeString(filepath, jasonObject.toString() + "\r\n", StandardOpenOption.CREATE);
- if (Files.size(filepath) < 10) {
- appLogger.severe("file not created ");
- erreur = -1;
- }
-
- } catch (IOException e) {
- appLogger.severe(e.toString());
- erreur = -1;
- }
-
- return erreur;
- }
-
- public Object readJson(Object object )
- {
- Object tempobject = null;
- String RepositoryPath = System.getProperty("user.dir") + "/"+configRepository;
- System.out.println(RepositoryPath);
- Path filepath = Paths.get(RepositoryPath + "/"+configName);
- try {
-
- InputStream is = Files.newInputStream(filepath);
- String text = IOUtils.toString(is, "UTF-8");
- JSONObject myJsonObject = new JSONObject(text);
- tempobject = toBean(myJsonObject, object);
-
- } catch (IOException | JSONException e) {
- e.printStackTrace();
- appLogger.severe("Erreor reading json file"+filepath.getFileName());
- }
- return tempobject;
-
-
- }
-
-
- public static Object toBean(JSONObject jobject, Object object) {
-
- for (Field field : object.getClass().getDeclaredFields()) {
- try {
- field.set(object, jobject.getString(field.getName()));
- } catch (IllegalArgumentException | IllegalAccessException | JSONException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- return object;
- }
+ private static Logger appLogger = Logger.getLogger("AmsatLogger");
+ private String configRepository = "config";
+ private String configName = "Data.json";
+
+ public int SaveConfigFile(Object bean) {
+ ManageFolder mn = new ManageFolder(configRepository);
+ mn.createdDirectories();
+ Path filepath = Paths.get(mn.getRepositoryPath() + "/" + configName);
+
+ int erreur = 0;
+
+ JSONObject jasonObject = new JSONObject(bean);
+
+ try {
+ if (!Files.exists(filepath)) {
+ Files.createFile(filepath);
+ Files.writeString(filepath, " " + "\r\n", StandardOpenOption.CREATE);
+ }
+
+ Files.writeString(filepath, jasonObject.toString() + "\r\n", StandardOpenOption.CREATE);
+ if (Files.size(filepath) < 10) {
+ appLogger.severe("file not created ");
+ erreur = -1;
+ }
+
+ } catch (IOException e) {
+ appLogger.severe(e.toString());
+ erreur = -1;
+ }
+
+ return erreur;
+ }
+
+ public Object readJson(Object object) {
+ Object tempobject = null;
+ String RepositoryPath = System.getProperty("user.dir") + "/" + configRepository;
+ System.out.println(RepositoryPath);
+ Path filepath = Paths.get(RepositoryPath + "/" + configName);
+ try {
+
+ InputStream is = Files.newInputStream(filepath);
+ String text = IOUtils.toString(is, "UTF-8");
+ JSONObject myJsonObject = new JSONObject(text);
+ tempobject = toBean(myJsonObject, object);
+
+ } catch (IOException | JSONException e) {
+ e.printStackTrace();
+ appLogger.severe("Erreor reading json file" + filepath.getFileName());
+ }
+ return tempobject;
+ }
+
+ public static Object toBean(JSONObject jobject, Object object) {
+
+ for (Field field : object.getClass().getDeclaredFields()) {
+ try {
+ field.set(object, jobject.getString(field.getName()));
+ } catch (IllegalArgumentException | IllegalAccessException | JSONException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ return object;
+ }
}
diff --git a/ApplicationJMultisat/pom.xml b/ApplicationJMultisat/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2ec2270b2a910d7679270057ebba4ea13c7edc37
--- /dev/null
+++ b/ApplicationJMultisat/pom.xml
@@ -0,0 +1,406 @@
+
+
+ 4.0.0
+
+ org.josast
+ JOSAST-parent
+ 0.0.2
+
+
+
+ ApplicationJMultiSat
+
+ jar
+
+ ApplicationJMultiSat
+
+ https://www.amsat-f.org
+
+ UTF-8
+ 17
+ 5.9.2
+ 2.1.0-alpha1
+
+
+ 22.0.2
+
+
+ org.josast.application
+ org.josast.application.App
+ 2.8.1
+ 3.1.2
+ 3.15.0
+ 3.1.2
+
+
+
+
+
+
+
+ com.google.code.gson
+ gson
+ 2.11.0
+
+
+
+
+ org.josast
+ ModuleAutomation
+ 0.0.2
+
+
+ org.openjfx
+ javafx-controls
+ ${openjfx.version}
+
+
+ org.openjfx
+ javafx-fxml
+ ${openjfx.version}
+
+
+ org.junit.jupiter
+ junit-jupiter
+ ${junit.jupiter.version}
+ test
+
+
+ org.slf4j
+ slf4j-api
+ ${slf4j.version}
+
+
+ org.slf4j
+ slf4j-simple
+ ${slf4j.version}
+
+
+ uk.me.g4dpz
+ predict4java
+ 1.1.3
+
+
+ org.eclipse
+ yasson
+ 1.0.8
+
+
+
+
+
+ org.apache.logging.log4j
+ log4j-core
+ 2.23.1
+
+
+ org.apache.logging.log4j
+ log4j-api
+ 2.23.1
+
+
+
+ joda-time
+ joda-time
+ 2.12.7
+
+
+
+
+
+ jakarta.xml.bind
+ jakarta.xml.bind-api
+ 4.0.2
+
+
+ com.sun.xml.bind
+ jaxb-impl
+ 4.0.5
+ runtime
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ com.github.spotbugs
+
+
+ spotbugs-maven-plugin
+
+
+ 4.5.3.0
+
+
+
+
+
+
+
+
+ org.owasp
+
+
+ dependency-check-maven
+
+
+ 5.3.2
+
+
+
+
+
+
+
+
+
+
+
+ aggregate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+
+
+ maven-project-info-reports-plugin
+
+
+ ${plugin.project-info-reports.version}
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+
+
+ maven-pmd-plugin
+
+
+ ${plugin.pmd-plugin.version}
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+
+
+ maven-checkstyle-plugin
+
+
+ ${plugin.checkstyle.version}
+
+
+
+ google_checks.xml
+
+
+
+
+
+
+
+
+
+ checkstyle
+
+
+
+
+
+
+ checkstyle-aggregate
+ false
+
+ true
+
+
+ checkstyle-aggregate
+
+
+
+
+
+
+ org.codehaus.mojo
+ versions-maven-plugin
+ ${plugin.versions-maven.version}
+
+
+
+
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+ ${main.class}
+
+
+
+ org.openjfx
+ javafx-maven-plugin
+ 0.0.8
+
+ ${main.class}
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.5.0
+
+
+ package
+
+ shade
+
+
+
+
+
+ ${main.class}
+
+
+
+
+
+
+ ${project.build.directory}/${project.artifactId}-${project.version}-fat.jar
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-enforcer-plugin
+ 3.2.1
+
+
+ enforce-maven
+
+ enforce
+
+
+
+
+ 3.4.0
+
+
+
+
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+ 0.8.8
+
+
+ default-prepare-agent
+
+ prepare-agent
+
+
+
+ default-report
+ test
+
+ report
+
+
+
+
+
+
+
+
+
+ maven-clean-plugin
+ 3.1.0
+
+
+ maven-site-plugin
+ 3.11.0
+
+
+ maven-project-info-reports-plugin
+ 3.2.2
+
+
+ maven-resources-plugin
+ 3.2.0
+
+
+ maven-compiler-plugin
+ 3.10.1
+
+
+ maven-surefire-plugin
+ 3.0.0-M5
+
+ false
+
+
+
+
+ maven-jar-plugin
+ 3.2.2
+
+
+ maven-install-plugin
+ 3.0.0-M1
+
+
+ maven-deploy-plugin
+ 3.0.0-M2
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 3.1.0
+
+
+
+
+
diff --git a/ApplicationJMultisat/src/main/java/org/.gitkeep b/ApplicationJMultisat/src/main/java/org/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/ApplicationJMultisat/src/main/java/org/josast/.gitkeep b/ApplicationJMultisat/src/main/java/org/josast/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/ApplicationJMultisat/src/main/java/org/josast/application/App.java b/ApplicationJMultisat/src/main/java/org/josast/application/App.java
new file mode 100644
index 0000000000000000000000000000000000000000..442528c4e600c5c8b351361139d1386cf5de276b
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/application/App.java
@@ -0,0 +1,42 @@
+package org.josast.application;
+
+import javafx.application.Application;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.stage.Stage;
+
+import java.io.IOException;
+
+/** JavaFX App */
+public class App extends Application {
+
+ private static Scene scene;
+ private static FXMLLoader fxmlLoader;
+
+ @Override
+ public void start(Stage stage) throws IOException {
+
+ scene = new Scene(loadFXML("multisat"), 640, 480);
+
+ stage.setScene(scene);
+
+ PrimaryController ctrl = fxmlLoader.getController();
+ ctrl.setStage(stage);
+ ctrl.init();
+ stage.show();
+ }
+
+ static void setRoot(String fxml) throws IOException {
+ scene.setRoot(loadFXML(fxml));
+ }
+
+ private static Parent loadFXML(String fxml) throws IOException {
+ fxmlLoader = new FXMLLoader(App.class.getResource(fxml + ".fxml"));
+ return fxmlLoader.load();
+ }
+
+ public static void main(String[] args) {
+ launch();
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/application/BooleanEditingCell.java b/ApplicationJMultisat/src/main/java/org/josast/application/BooleanEditingCell.java
new file mode 100644
index 0000000000000000000000000000000000000000..24083edf11c7754999e8ea1eb4926fb01b2cc1e6
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/application/BooleanEditingCell.java
@@ -0,0 +1,66 @@
+package org.josast.application;
+
+import org.josast.satellite.SatelliteInformationInterface;
+
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.scene.control.CheckBox;
+import javafx.scene.control.TableCell;
+
+public class BooleanEditingCell extends TableCell {
+
+ private CheckBox checkBox;
+
+ public BooleanEditingCell() {
+ checkBox = new CheckBox();
+ checkBox
+ .selectedProperty()
+ .addListener(
+ new ChangeListener() {
+ @Override
+ public void changed(
+ ObservableValue extends Boolean> observable,
+ Boolean oldValue,
+ Boolean newValue) {
+ if (isEditing()) {
+ commitEdit(newValue);
+ }
+ }
+ });
+ }
+
+ @Override
+ protected void updateItem(Boolean item, boolean empty) {
+ super.updateItem(item, empty);
+
+ if (empty) {
+ setText(null);
+ setGraphic(null);
+ } else {
+ checkBox.setSelected(item);
+ setGraphic(checkBox);
+ }
+ }
+
+ @Override
+ public void startEdit() {
+ super.startEdit();
+ checkBox.setSelected(getItem());
+ setGraphic(checkBox);
+ checkBox.requestFocus();
+ System.out.println("Start");
+ }
+
+ @Override
+ public void cancelEdit() {
+ super.cancelEdit();
+ setGraphic(null);
+ }
+
+ @Override
+ public void commitEdit(Boolean newValue) {
+ super.commitEdit(newValue);
+ setGraphic(null);
+ System.out.println(newValue);
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/application/DurationTableCell.java b/ApplicationJMultisat/src/main/java/org/josast/application/DurationTableCell.java
new file mode 100644
index 0000000000000000000000000000000000000000..424cad989aca7fb3fc2e45e5a23f27c673bc9bfe
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/application/DurationTableCell.java
@@ -0,0 +1,24 @@
+package org.josast.application;
+
+import javafx.scene.control.TableCell;
+import javafx.scene.control.TableColumn;
+import javafx.util.Callback;
+import java.time.Duration;
+
+public class DurationTableCell extends TableCell {
+ @Override
+ protected void updateItem(Long item, boolean empty) {
+ super.updateItem(item, empty);
+ if (empty || item == null) {
+ setText(null);
+ } else {
+ Duration duration = Duration.ofMillis(item);
+ long minutes = duration.toMinutes();
+ setText(String.format("%d min %d sec", minutes, duration.toSecondsPart()));
+ }
+ }
+
+ public static Callback, TableCell> forTableColumn() {
+ return column -> new DurationTableCell<>();
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/application/IntegerEditingCell.java b/ApplicationJMultisat/src/main/java/org/josast/application/IntegerEditingCell.java
new file mode 100644
index 0000000000000000000000000000000000000000..a6e338b74d2d5a2fc957990a88a3d1586796a43c
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/application/IntegerEditingCell.java
@@ -0,0 +1,79 @@
+package org.josast.application;
+
+import org.josast.satellite.SatelliteInformationInterface;
+
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.scene.control.TableCell;
+import javafx.scene.control.TextField;
+
+public class IntegerEditingCell extends TableCell {
+ private TextField textField;
+
+ public IntegerEditingCell() {
+ textField = new TextField();
+ textField.setOnAction(event -> commitEdit(Integer.parseInt(textField.getText())));
+ textField
+ .focusedProperty()
+ .addListener(
+ (observable, oldValue, newValue) -> {
+ if (!newValue) {
+ commitEdit(Integer.parseInt(textField.getText()));
+ }
+ });
+ textField
+ .textProperty()
+ .addListener(
+ new ChangeListener() {
+ @Override
+ public void changed(
+ ObservableValue extends String> observable, String oldValue, String newValue) {
+ if (!newValue.matches("\\d*")) {
+ textField.setText(newValue.replaceAll("[^\\d]", ""));
+ }
+ }
+ });
+ }
+
+ @Override
+ protected void updateItem(Integer item, boolean empty) {
+ super.updateItem(item, empty);
+
+ if (empty) {
+ setText(null);
+ setGraphic(null);
+ } else {
+ if (isEditing()) {
+ textField.setText(item.toString());
+ setGraphic(textField);
+ } else {
+ setText(item.toString());
+ setGraphic(null);
+ }
+ }
+ }
+
+ @Override
+ public void startEdit() {
+ super.startEdit();
+ textField.setText(getItem().toString());
+ setGraphic(textField);
+ textField.requestFocus();
+ textField.selectAll();
+ System.out.println("Start");
+ }
+
+ @Override
+ public void cancelEdit() {
+ super.cancelEdit();
+ setText(getItem().toString());
+ setGraphic(null);
+ System.out.println("Cancel");
+ }
+
+ @Override
+ public void commitEdit(Integer newValue) {
+ System.out.println(newValue);
+ super.commitEdit(Integer.parseInt(textField.getText()));
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/application/PrimaryController.java b/ApplicationJMultisat/src/main/java/org/josast/application/PrimaryController.java
new file mode 100644
index 0000000000000000000000000000000000000000..bca53d7903074a44241c882cae8a0f85cd0afe94
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/application/PrimaryController.java
@@ -0,0 +1,619 @@
+package org.josast.application;
+
+import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+import java.util.logging.Logger;
+
+import org.joda.time.DateTime;
+import org.josast.automation.ProcessBuilderCollection;
+import org.josast.automation.ProcessBuilderWrapper;
+import org.josast.automation.application.Application;
+import org.josast.automation.application.ApplicationRadioHamlib;
+import org.josast.automation.application.ApplicationType;
+import org.josast.keplerelement.IKelplerianElementManager;
+import org.josast.keplerelement.IkeplerienElement;
+import org.josast.keplerelement.file.KeplerianFileManagerFromUrl;
+import org.josast.satellite.ManageSatellites;
+import org.josast.satellite.SatelliteInformationInterface;
+import org.josast.satellite.mode.CollectionModulationMode;
+import org.josast.satellite.mode.ModulationMode;
+import org.josast.satellitePrediction.InterfaceSatellitePropagation;
+import org.josast.satellitePrediction.KeplerianElementTwoLine;
+import org.josast.satellitePrediction.KeplerianElementTwoLineInterface;
+import org.josast.satellitePrediction.ManageSatellitePass;
+import org.josast.satellitePrediction.SatellitePassfromGroundStation;
+import org.josast.satellitePrediction.SortbyAOS;
+import org.josast.satellitePredictionG4DPZ.SatellitePropagation;
+import org.josast.station.GroundStation;
+import org.josast.station.GroundStationInterface;
+
+import javafx.beans.property.BooleanPropertyBase;
+import javafx.beans.property.SimpleBooleanProperty;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.event.ActionEvent;
+import javafx.fxml.FXML;
+import javafx.scene.control.Button;
+import javafx.scene.control.ButtonBar.ButtonData;
+import javafx.scene.control.ButtonType;
+import javafx.scene.control.ComboBox;
+import javafx.scene.control.Dialog;
+import javafx.scene.control.Label;
+import javafx.scene.control.TableColumn;
+import javafx.scene.control.TableView;
+import javafx.scene.control.TextField;
+import javafx.scene.control.cell.CheckBoxTableCell;
+import javafx.scene.control.cell.PropertyValueFactory;
+import javafx.scene.layout.GridPane;
+import javafx.stage.FileChooser;
+import javafx.stage.Stage;
+import javafx.util.Callback;
+
+public class PrimaryController {
+
+ private static Logger appLogger = Logger.getLogger("AmsatLogger");
+ ScheduledExecutorService ses = Executors.newScheduledThreadPool(1);
+ private ScheduledFuture> scheduledFuture = null;
+ private int delayRefresh = 1; // toute les 10 mn
+ @FXML private TableView tvSatellites;
+
+ @FXML private TableColumn tcname;
+
+ @FXML private TableColumn tcnoaradid;
+
+ @FXML private TableColumn tcpriority;
+
+ @FXML private TableColumn tcselect;
+
+ @FXML private TableView TableComputePass;
+
+ @FXML private TableColumn TcCPAos;
+
+ @FXML private TableColumn TcCPDuration;
+
+ @FXML private TableColumn TcCPLos;
+
+ @FXML private TableColumn TcCPMaxElevation;
+
+ @FXML private TableColumn TcCPSatelliteName;
+
+ @FXML private TableView tvApplication;
+
+ @FXML private TableColumn tcApplicationName;
+
+ @FXML private TableColumn tcApplicationStatus;
+
+ @FXML private TableColumn tcApplicationType;
+
+ @FXML private TableColumn tcApplicationArgument;
+
+ @FXML private TableColumn tcApplicationCommande;
+
+ @FXML private TableColumn tcApplicationPath;
+
+ @FXML private TableColumn tcApplicationScope;
+
+ @FXML private TableView tvModulationMode;
+
+ @FXML private TableColumn tcModulationBandwith;
+
+ @FXML private TableColumn tcModulationName;
+
+ @FXML private TableColumn tcModulationOffset;
+
+ @FXML private TableColumn tcModulationRadioMode;
+
+ @FXML private TextField tfElevation;
+
+ @FXML private TextField tfduration;
+
+ ProcessBuilderCollection appliList = null;
+
+ private Stage primaryStage;
+
+ private KeplerianFileManagerFromUrl kepsMngt = null;;
+
+ private ManageSatellites mngSat = new ManageSatellites();;
+
+ @FXML private Button BtSatelliteLoadFile;
+ @FXML private Button BtSave;
+
+ ManageSatellitePass mngtSatPass = null;
+
+ ObservableList observableSatellite =
+ FXCollections.observableArrayList();
+
+ private ObservableList observablePass =
+ FXCollections.observableArrayList();
+ private ObservableList observableApplication = FXCollections.observableArrayList();
+ private CollectionModulationMode collectionMode;
+ private ObservableList observableModulationMode =
+ FXCollections.observableArrayList();
+
+ //
+ // @FXML
+ // void handleEdit(ActionEvent event) {
+ // System.out.println(" value " + event);
+ // }
+
+ public void init() {
+ tvSatellites.setEditable(true);
+
+ tvSatellites
+ .getSelectionModel()
+ .selectedItemProperty()
+ .addListener(
+ (observable, oldValue, newValue) -> {
+ if (newValue != null) {
+ int selectedIndex = tvSatellites.getSelectionModel().getSelectedIndex();
+ appLogger.info("Ligne sélectionnée : " + selectedIndex);
+ }
+ });
+
+ tcname.setEditable(false);
+ tcname.setCellValueFactory(
+ new PropertyValueFactory("name"));
+ tcnoaradid.setEditable(false);
+ tcnoaradid.setCellValueFactory(new PropertyValueFactory<>("noradIdentifier"));
+ tcpriority.setCellValueFactory(new PropertyValueFactory<>("priority"));
+ tcpriority.setEditable(true);
+
+ tcpriority.setCellFactory(tc -> new IntegerEditingCell());
+
+ tcpriority.setOnEditCommit(
+ event -> {
+ appLogger.warning(event.toString());
+ SatelliteInformationInterface dataModel = event.getRowValue();
+ dataModel.setPriority(event.getNewValue());
+ });
+
+ tcselect.setEditable(true);
+ // tcselect.setCellValueFactory(new PropertyValueFactory<>("selected"));
+ tcselect.setCellFactory(column -> new CheckBoxTableCell<>());
+ tcselect.setCellValueFactory(
+ cellData -> {
+ SatelliteInformationInterface cellValue = cellData.getValue();
+ // BooleanProperty property = new BooleanProperty() ;// cellValue.isSelected();
+ BooleanPropertyBase property = new SimpleBooleanProperty(cellValue.isSelected());
+
+ // Add listener to handler change
+ property.addListener((observable, oldValue, newValue) -> cellValue.setSelected(newValue));
+
+ return property;
+ });
+
+ tvSatellites.setItems(observableSatellite);
+
+ TcCPSatelliteName.setCellValueFactory(new PropertyValueFactory<>("name"));
+ TcCPAos.setCellValueFactory(new PropertyValueFactory<>("AOSDate"));
+ TcCPLos.setCellValueFactory(new PropertyValueFactory<>("LOSDate"));
+ TcCPDuration.setCellValueFactory(new PropertyValueFactory<>("duration"));
+ TcCPDuration.setCellFactory(DurationTableCell.forTableColumn());
+
+ initApplication();
+ }
+
+ @FXML
+ void loadSatellite(ActionEvent event) {
+ kepsMngt = new KeplerianFileManagerFromUrl();
+ SatelliteInformationInterface[] listSat = kepsMngt.getSatelliteInformation();
+
+ mngSat.setSatellites(listSat);
+ observableSatellite.addAll(mngSat.getSatellites());
+ }
+
+ @FXML
+ void HandlerCompute(ActionEvent event) {
+
+ appLogger.info(" Step 1 : configuration station sol ");
+ double latitude = 48.858365; // 48.8330;
+ double longitude = 2.294532; // -2.3330;
+ double altitude = 75;
+ String name = "test Xtophe";
+ GroundStationInterface groundStation = new GroundStation(name, altitude, longitude, latitude);
+
+ IKelplerianElementManager kepsMngt = new KeplerianFileManagerFromUrl();
+ // SatelliteInformationInterface[] listSat = kepsMngt.getSatelliteInformation() ;
+
+ SatelliteInformationInterface[] listSat = mngSat.getSelectedSatellites();
+
+ appLogger.info("nombre satellite " + listSat.length);
+
+ mngtSatPass = new ManageSatellitePass();
+
+ KeplerianElementTwoLineInterface keps = new KeplerianElementTwoLine();
+ InterfaceSatellitePropagation satProg = new SatellitePropagation();
+ satProg.setGroundStation(groundStation);
+
+ List passages;
+ for (int i = 0; i < listSat.length; i++) {
+
+ appLogger.info("" + i + " " + listSat[i].getName());
+
+ IkeplerienElement keplerElt = kepsMngt.getSatelliteKeplerianElement(listSat[i].getName());
+ // @TODO : A simplifier
+ String twoLines =
+ keplerElt.getTwoline()[0]
+ + "\r\n"
+ + keplerElt.getTwoline()[1]
+ + "\r\n"
+ + keplerElt.getTwoline()[2]
+ + "\r\n";
+
+ keps.setTwoLine(twoLines);
+
+ satProg.setSatelliteKeplerianElement(keps);
+ passages = satProg.getNextPass(24);
+ mngtSatPass.addSatellitePass(passages);
+ }
+ appLogger.info("Nombre de passage calculés " + mngtSatPass.getSize());
+ mngtSatPass.sort(new SortbyAOS());
+ observablePass.addAll(mngtSatPass.getSatellitePassList());
+ TableComputePass.setItems(observablePass);
+ }
+
+ @FXML
+ void HandleFilterElevation(ActionEvent event) {
+ List filtered =
+ mngtSatPass.filter(mngtSatPass.minElevationPredicate);
+ mngtSatPass.setSatellitePassList(filtered);
+ observablePass.clear();
+ observablePass.addAll(mngtSatPass.getSatellitePassList());
+ appLogger.info("Nombre de passage calculés " + mngtSatPass.getSize());
+ TableComputePass.setItems(observablePass);
+ }
+
+ @FXML
+ void handleFilterDuration(ActionEvent event) {
+
+ List filtered =
+ mngtSatPass.filter(mngtSatPass.minDurationnPredicate);
+ mngtSatPass.setSatellitePassList(filtered);
+ observablePass.clear();
+ observablePass.addAll(mngtSatPass.getSatellitePassList());
+ appLogger.info("Nombre de passage calculés " + mngtSatPass.getSize());
+ TableComputePass.setItems(observablePass);
+ }
+
+ @FXML
+ void handlerFilterPass(ActionEvent event) {
+ List filtered = mngtSatPass.selectPassByPriority(mngSat);
+ mngtSatPass.setSatellitePassList(filtered);
+ observablePass.clear();
+ observablePass.addAll(mngtSatPass.getSatellitePassList());
+ appLogger.info("Nombre de passage calculés " + mngtSatPass.getSize());
+ TableComputePass.setItems(observablePass);
+ }
+
+ private void initApplication() {
+ Application radioSDR =
+ new ApplicationRadioHamlib(
+ "SDR CONSOLE",
+ "C:\\Program Files\\SDR-Radio.com (V3)\\",
+ "SDR Console.exe",
+ "",
+ "GLOBAL");
+ Application rotorHamlib =
+ new ApplicationRadioHamlib(
+ "Test Rigctl",
+ "C:\\00-PRG\\hamlib-w64-4.4\\bin\\",
+ "rigctld.exe",
+ " -vvv -r localhost ",
+ "GLOBAL");
+ // Application radioHamlib =
+ // new Application(
+ // "RIGCLD", "C:\\00-PRG\\hamlib-w64-4.4\\bin\\", "rigctld.exe", "-v", "GLOBAL");
+
+ appliList = new ProcessBuilderCollection();
+ collectionMode = new CollectionModulationMode();
+
+ ModulationMode gr3uhMode = new ModulationMode("GR3UH 9600", "USB", 8000.0, 22.000);
+
+ collectionMode.put(gr3uhMode.getName(), gr3uhMode);
+
+ // appliList.put(radioHamlib, new ProcessBuilderWrapper(radioHamlib.toList()));
+ appliList.put(rotorHamlib, new ProcessBuilderWrapper(rotorHamlib.toList()));
+ appliList.put(radioSDR, new ProcessBuilderWrapper(radioSDR.toList()));
+
+ tcApplicationName.setCellValueFactory(new PropertyValueFactory<>("Name"));
+ tcApplicationStatus.setCellValueFactory(new PropertyValueFactory<>("Status"));
+ tcApplicationType.setCellValueFactory(new PropertyValueFactory<>("Type"));
+ tcApplicationArgument.setCellValueFactory(new PropertyValueFactory<>("Argument"));
+ tcApplicationCommande.setCellValueFactory(new PropertyValueFactory<>("Commande"));
+ tcApplicationPath.setCellValueFactory(new PropertyValueFactory<>("Path"));
+ tcApplicationScope.setCellValueFactory(new PropertyValueFactory<>("Scope"));
+
+ tcModulationBandwith.setCellValueFactory(new PropertyValueFactory<>("RadioBandwith"));
+
+ tcModulationName.setCellValueFactory(new PropertyValueFactory<>("Name"));
+
+ tcModulationOffset.setCellValueFactory(new PropertyValueFactory<>("RadioOffset"));
+ ;
+
+ tcModulationRadioMode.setCellValueFactory(new PropertyValueFactory<>("RadioMode"));
+ ;
+ observableModulationMode.clear();
+ observableModulationMode.addAll(collectionMode.values());
+ tvModulationMode.setItems(observableModulationMode);
+ observableApplication.clear();
+ observableApplication.addAll(appliList.keySet());
+ tvApplication.setItems(observableApplication);
+ }
+
+ public void setStage(Stage stage) {
+ primaryStage = stage;
+ }
+
+ /**
+ * ********************************************************************************************
+ * Management des applications génériques
+ * ********************************************************************************************
+ */
+ @FXML
+ void HandlerLoadGeneric(ActionEvent event) {
+ FileChooser fileChooser = new FileChooser();
+ Path currRelativePath = Paths.get("");
+ String currAbsolutePathString = currRelativePath.toAbsolutePath().toString();
+ appLogger.info("Current absolute path is - " + currAbsolutePathString);
+ fileChooser
+ .getExtensionFilters()
+ .addAll(
+ new FileChooser.ExtensionFilter("Json Files", "*.json"),
+ new FileChooser.ExtensionFilter("Text Files", "*.txt"));
+ fileChooser.setInitialDirectory(new File(currAbsolutePathString));
+ File selectedDirectory = fileChooser.showOpenDialog(primaryStage);
+
+ if (selectedDirectory != null) {
+ appLogger.info(selectedDirectory.getAbsolutePath());
+ appliList.clear();
+ appliList.loadApplication(selectedDirectory.getAbsolutePath());
+ List applist = appliList.getListApplication();
+ observableApplication.clear();
+ observableApplication.addAll(applist);
+
+ } else {
+ appLogger.warning("no file selected");
+ }
+
+ appLogger.info("Load");
+ }
+
+ @FXML
+ void handlerSaveGeneric(ActionEvent event) {
+ // List setApp = appliList.getListApplication();
+ appLogger.info("save");
+ FileChooser fileChooser = new FileChooser();
+ Path currRelativePath = Paths.get("");
+ String currAbsolutePathString = currRelativePath.toAbsolutePath().toString();
+ appLogger.info("Current absolute path is - " + currAbsolutePathString);
+ fileChooser
+ .getExtensionFilters()
+ .addAll(
+ new FileChooser.ExtensionFilter("Json Files", "*.json"),
+ new FileChooser.ExtensionFilter("Text Files", "*.txt"));
+ fileChooser.setInitialDirectory(new File(currAbsolutePathString));
+ File selectedFile = fileChooser.showSaveDialog(primaryStage);
+ if (selectedFile != null) {
+ appliList.saveApplication(selectedFile.getAbsolutePath());
+ } else {
+ appLogger.info("no file selected");
+ }
+ }
+
+ @FXML
+ void HandlerAddApplication(ActionEvent event) {
+
+ ObservableList scopeList = FXCollections.observableArrayList("Global", "Satellite");
+ ApplicationType typeAp = new ApplicationType();
+ ObservableList TypeList =
+ FXCollections.observableArrayList(typeAp.getlistApplicationType());
+ Dialog dialog = new Dialog<>();
+ dialog.setTitle("Add new application");
+ dialog.setHeaderText(
+ " Add a new application \n" + "press Okay (or click title bar 'X' for cancel).");
+ dialog.setResizable(true);
+
+ Label labelName = new Label("Name : ");
+ Label labelScope = new Label("Scope: ");
+ Label labelCommande = new Label("Commande: ");
+ Label labelPath = new Label("path: ");
+ Label labelArgument = new Label("Argument: ");
+ Label labelType = new Label("Type : ");
+
+ TextField textName = new TextField();
+ ComboBox scope = new ComboBox(scopeList);
+ TextField textCommande = new TextField();
+ TextField textPath = new TextField();
+ TextField textArgument = new TextField();
+ ComboBox type = new ComboBox(TypeList);
+ GridPane grid = new GridPane();
+ grid.add(labelName, 1, 1);
+ grid.add(textName, 2, 1);
+ grid.add(labelScope, 1, 2);
+ grid.add(scope, 2, 2);
+ grid.add(labelCommande, 1, 3);
+ grid.add(textCommande, 2, 3);
+ grid.add(labelPath, 1, 4);
+ grid.add(textPath, 2, 4);
+ grid.add(labelArgument, 1, 5);
+ grid.add(textArgument, 2, 5);
+ grid.add(labelType, 1, 6);
+ grid.add(type, 2, 6);
+ dialog.getDialogPane().setContent(grid);
+
+ ButtonType buttonTypeOk = new ButtonType("Okay", ButtonData.OK_DONE);
+ dialog.getDialogPane().getButtonTypes().add(buttonTypeOk);
+
+ dialog.setResultConverter(
+ (Callback)
+ new Callback() {
+ @Override
+ public Application call(ButtonType b) {
+
+ if (b == buttonTypeOk) {
+
+ return new Application(
+ textName.getText(),
+ textCommande.getText(),
+ scope.getValue(),
+ textPath.getText(),
+ textArgument.getText(),
+ type.getValue());
+ }
+
+ return null;
+ }
+ });
+
+ Optional result = dialog.showAndWait();
+
+ if (result.isPresent()) {
+
+ // Labeled actionStatus = null;
+ Application app = result.get();
+ appLogger.info("resultat" + app);
+ appliList.put(app, new ProcessBuilderWrapper(app.toList()));
+ List applist = appliList.updateApplicationStatus();
+ observableApplication.clear();
+ observableApplication.addAll(applist);
+ }
+ }
+
+ @FXML
+ void handlerStartGeneric(ActionEvent event) {
+
+ Runnable task1 =
+ () -> {
+ List applist = appliList.updateApplicationStatus();
+ observableApplication.clear();
+ observableApplication.addAll(applist);
+ };
+ scheduledFuture = ses.scheduleAtFixedRate(task1, delayRefresh, delayRefresh, TimeUnit.MINUTES);
+ appliList.startApplication();
+ appLogger.info(appliList.toString());
+ }
+
+ @FXML
+ void handlerAddMode(ActionEvent event) {}
+
+ @FXML
+ void handlerLoadMode(ActionEvent event) {
+ FileChooser fileChooser = new FileChooser();
+ Path currRelativePath = Paths.get("");
+ String currAbsolutePathString = currRelativePath.toAbsolutePath().toString();
+ appLogger.info("Current absolute path is - " + currAbsolutePathString);
+ fileChooser
+ .getExtensionFilters()
+ .addAll(
+ new FileChooser.ExtensionFilter("Json Files", "*.json"),
+ new FileChooser.ExtensionFilter("Text Files", "*.txt"));
+ fileChooser.setInitialDirectory(new File(currAbsolutePathString));
+ File selectedDirectory = fileChooser.showOpenDialog(primaryStage);
+
+ if (selectedDirectory != null) {
+ appLogger.info(selectedDirectory.getAbsolutePath());
+ collectionMode.clear();
+ collectionMode.load(selectedDirectory.getAbsolutePath());
+ observableModulationMode.clear();
+ observableModulationMode.addAll(collectionMode.values());
+ tvModulationMode.setItems(observableModulationMode);
+
+ } else {
+ appLogger.info("no file selected");
+ }
+
+ appLogger.info("Load");
+ }
+
+ @FXML
+ void handlerSaveMode(ActionEvent event) {
+
+ // List setApp = appliList.getListApplication();
+ appLogger.info("save mode");
+ FileChooser fileChooser = new FileChooser();
+ Path currRelativePath = Paths.get("");
+ String currAbsolutePathString = currRelativePath.toAbsolutePath().toString();
+ appLogger.info("Current absolute path is - " + currAbsolutePathString);
+ fileChooser
+ .getExtensionFilters()
+ .addAll(
+ new FileChooser.ExtensionFilter("Json Files", "*.json"),
+ new FileChooser.ExtensionFilter("Text Files", "*.txt"));
+ fileChooser.setInitialDirectory(new File(currAbsolutePathString));
+ File selectedFile = fileChooser.showSaveDialog(primaryStage);
+ if (selectedFile != null) {
+ collectionMode.save(selectedFile.getAbsolutePath());
+ } else {
+ appLogger.info("no file selected");
+ }
+ }
+
+ /**
+ * *******************************************************************************************
+ * Gestion des satellites
+ */
+ @FXML
+ void handlerSatelliteLoadFile(ActionEvent event) {
+ FileChooser fileChooser = new FileChooser();
+ Path currRelativePath = Paths.get("");
+ String currAbsolutePathString = currRelativePath.toAbsolutePath().toString();
+ System.out.println("Current absolute path is - " + currAbsolutePathString);
+ fileChooser
+ .getExtensionFilters()
+ .addAll(
+ new FileChooser.ExtensionFilter("Json Files", "*.json"),
+ new FileChooser.ExtensionFilter("Text Files", "*.txt"));
+ fileChooser.setInitialDirectory(new File(currAbsolutePathString));
+ File selectedDirectory = fileChooser.showOpenDialog(primaryStage);
+
+ if (selectedDirectory != null) {
+ System.out.println(selectedDirectory.getAbsolutePath());
+ mngSat.load(selectedDirectory.getAbsolutePath());
+ observableSatellite.clear();
+ observableSatellite.addAll(mngSat.getSatellites());
+
+ } else {
+ System.out.println("no file selected");
+ }
+
+ System.out.println("Load");
+ }
+
+ @FXML
+ void HandlerDeselecyAll(ActionEvent event) {
+ for (SatelliteInformationInterface satellite : observableSatellite) {
+ satellite.setSelected(false);
+ }
+ tvSatellites.refresh();
+ }
+
+ @FXML
+ void handlerSatelliteSaveFile(ActionEvent event) {
+ System.out.println("save ");
+ FileChooser fileChooser = new FileChooser();
+ Path currRelativePath = Paths.get("");
+ String currAbsolutePathString = currRelativePath.toAbsolutePath().toString();
+ System.out.println("Current absolute path is - " + currAbsolutePathString);
+ fileChooser
+ .getExtensionFilters()
+ .addAll(
+ new FileChooser.ExtensionFilter("Json Files", "*.json"),
+ new FileChooser.ExtensionFilter("Text Files", "*.txt"));
+ fileChooser.setInitialDirectory(new File(currAbsolutePathString));
+ File selectedFile = fileChooser.showSaveDialog(primaryStage);
+ if (selectedFile != null) {
+
+ mngSat.save(selectedFile.getAbsolutePath());
+ } else {
+ appLogger.info("no file selected");
+ }
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/application/SecondaryController.java b/ApplicationJMultisat/src/main/java/org/josast/application/SecondaryController.java
new file mode 100644
index 0000000000000000000000000000000000000000..ebc92e04bdb148fd79dc35b72a08a4afdf5ff024
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/application/SecondaryController.java
@@ -0,0 +1,12 @@
+package org.josast.application;
+
+import java.io.IOException;
+import javafx.fxml.FXML;
+
+public class SecondaryController {
+
+ @FXML
+ private void switchToPrimary() throws IOException {
+ App.setRoot("primary");
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/hamlib/ManagePass.java b/ApplicationJMultisat/src/main/java/org/josast/hamlib/ManagePass.java
new file mode 100644
index 0000000000000000000000000000000000000000..7d86463e751042f7dac9d24cd6c63f472b9324a8
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/hamlib/ManagePass.java
@@ -0,0 +1,75 @@
+package org.josast.hamlib;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.Timer;
+import java.util.TimerTask;
+
+public class ManagePass {
+ private RotorController rotorController;
+ private TransceiverController transceiverController;
+ private Date aos;
+ private Date los;
+ private SatellitePositionCalculator positionCalculator;
+
+ public ManagePass(
+ String rotorIpAddress,
+ int rotorPort,
+ String transceiverIpAddress,
+ int transceiverPort,
+ Date aos,
+ Date los,
+ SatellitePositionCalculator positionCalculator)
+ throws IOException {
+ // Initialiser les contrôleurs de rotor et de transceiver
+ rotorController = new RotorController(rotorIpAddress, rotorPort);
+ transceiverController = new TransceiverController(transceiverIpAddress, transceiverPort);
+
+ // Enregistrer les dates de début AOS et de fin LOS du passage et le calculateur de position du
+ // satellite
+ this.aos = aos;
+ this.los = los;
+ this.positionCalculator = positionCalculator;
+ }
+
+ public void start() {
+ // Créer une tâche pour envoyer la fréquence corrigée du doppler chaque seconde pendant le
+ // passage
+ TimerTask transceiverTask =
+ new TimerTask() {
+ @Override
+ public void run() {
+ try {
+ // Calculer la fréquence corrigée du doppler en temps réel
+ double frequency = positionCalculator.getCorrectedFrequency();
+
+ // Envoyer la fréquence corrigée du doppler vers le transceiver
+ transceiverController.setFrequency(frequency);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ };
+
+ // Planifier la tâche pour s'exécuter chaque seconde pendant le passage
+ Timer timer = new Timer();
+ timer.schedule(transceiverTask, aos, 1000);
+
+ // Créer une tâche pour fermer les connexions à la fin du passage
+ TimerTask closeTask =
+ new TimerTask() {
+ @Override
+ public void run() {
+ try {
+ rotorController.close();
+ transceiverController.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ };
+
+ // Planifier la tâche pour s'exécuter à la date de fin LOS du passage
+ timer.schedule(closeTask, los);
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/hamlib/RotorController.java b/ApplicationJMultisat/src/main/java/org/josast/hamlib/RotorController.java
new file mode 100644
index 0000000000000000000000000000000000000000..2f71859dcbe15f37fcc6cd445c2f79d8d8d9d63e
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/hamlib/RotorController.java
@@ -0,0 +1,137 @@
+package org.josast.hamlib;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.Socket;
+
+public class RotorController {
+ private Socket socket;
+ private OutputStream outputStream;
+ private InputStream inputStream;
+
+ public RotorController(String ipAddress, int port) throws IOException {
+ // Ouvrir une connexion socket vers le serveur ROTCTLD
+ socket = new Socket(ipAddress, port);
+
+ // Créer un flux de sortie pour envoyer des commandes
+ outputStream = socket.getOutputStream();
+
+ // Créer un flux d'entrée pour recevoir les réponses
+ inputStream = socket.getInputStream();
+ }
+
+ public void setPosition(double azimuth, double elevation) throws IOException {
+ // Envoyer une commande au serveur ROTCTLD pour définir la position du rotor
+ String command = "P " + azimuth + " " + elevation + "\n";
+ outputStream.write(command.getBytes());
+
+ // Lire la réponse du serveur ROTCTLD
+ byte[] buffer = new byte[1024];
+ int bytesRead = inputStream.read(buffer);
+ String response = new String(buffer, 0, bytesRead);
+
+ // Vérifier si la commande a été exécutée avec succès
+ if (!response.startsWith("RPRT 0")) {
+ throw new IOException("Failed to set rotor position: " + response);
+ }
+ }
+
+ public void setSpeed(int speed) throws IOException {
+ // Envoyer une commande au serveur ROTCTLD pour définir la vitesse de rotation du rotor
+ String command = "S " + speed + "\n";
+ outputStream.write(command.getBytes());
+
+ // Lire la réponse du serveur ROTCTLD
+ byte[] buffer = new byte[1024];
+ int bytesRead = inputStream.read(buffer);
+ String response = new String(buffer, 0, bytesRead);
+
+ // Vérifier si la commande a été exécutée avec succès
+ if (!response.startsWith("RPRT 0")) {
+ throw new IOException("Failed to set rotor speed: " + response);
+ }
+ }
+
+ public void stop() throws IOException {
+ // Envoyer une commande au serveur ROTCTLD pour arrêter le rotor
+ String command = "H\n";
+ outputStream.write(command.getBytes());
+
+ // Lire la réponse du serveur ROTCTLD
+ byte[] buffer = new byte[1024];
+ int bytesRead = inputStream.read(buffer);
+ String response = new String(buffer, 0, bytesRead);
+
+ // Vérifier si la commande a été exécutée avec succès
+ if (!response.startsWith("RPRT 0")) {
+ throw new IOException("Failed to stop rotor: " + response);
+ }
+ }
+
+ public void close() throws IOException {
+ // Fermer la connexion socket
+ socket.close();
+ }
+
+ public void emergencyStop() {
+ try {
+ // Envoyer une commande au serveur ROTCTLD pour mettre en sécurité le rotor
+ String command = "M\n";
+ outputStream.write(command.getBytes());
+
+ // Lire la réponse du serveur ROTCTLD
+ byte[] buffer = new byte[1024];
+ int bytesRead = inputStream.read(buffer);
+ String response = new String(buffer, 0, bytesRead);
+
+ // Vérifier si la commande a été exécutée avec succès
+ if (!response.startsWith("RPRT 0")) {
+ System.err.println("Failed to put rotor in emergency stop: " + response);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ // Fermer la connexion socket
+ socket.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ public double[] getPosition() throws IOException {
+ // Envoyer une commande au serveur ROTCTLD pour obtenir la position actuelle du rotor
+ String command = "p\n";
+ outputStream.write(command.getBytes());
+
+ // Lire la réponse du serveur ROTCTLD
+ byte[] buffer = new byte[1024];
+ int bytesRead = inputStream.read(buffer);
+ String response = new String(buffer, 0, bytesRead);
+ System.out.println(response);
+ // Vérifier si la commande a été exécutée avec succès
+ // if (!response.startsWith("RPRT 0")) {
+ // throw new IOException("Failed to get rotor position: " + response);
+ // }
+
+ // Extraire la position du rotor de la réponse
+ String[] parts = response.split("\n");
+ double azimuth = Double.parseDouble(parts[0]);
+ double elevation = Double.parseDouble(parts[1]);
+
+ return new double[] {azimuth, elevation};
+ }
+
+ public static void main(String args[]) throws IOException {
+
+ RotorController rot = new RotorController("127.0.0.1", 4533);
+ // rot.emergencyStop();
+ double[] value = rot.getPosition();
+ System.out.println(value);
+ rot.setPosition(10.0, 20.0);
+ value = rot.getPosition();
+ System.out.println(value);
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/hamlib/SatellitePositionCalculator.java b/ApplicationJMultisat/src/main/java/org/josast/hamlib/SatellitePositionCalculator.java
new file mode 100644
index 0000000000000000000000000000000000000000..ad84ec986f9b35aa4ac9e68f3327ecc13cbea963
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/hamlib/SatellitePositionCalculator.java
@@ -0,0 +1,9 @@
+package org.josast.hamlib;
+
+public class SatellitePositionCalculator {
+
+ public double getCorrectedFrequency() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/hamlib/TransceiverController.java b/ApplicationJMultisat/src/main/java/org/josast/hamlib/TransceiverController.java
new file mode 100644
index 0000000000000000000000000000000000000000..cb3cd6869476b043a0dbd0568a1adc14ccf3f439
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/hamlib/TransceiverController.java
@@ -0,0 +1,127 @@
+package org.josast.hamlib;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.Socket;
+
+public class TransceiverController {
+ private Socket socket;
+ private OutputStream outputStream;
+ private InputStream inputStream;
+
+ public TransceiverController(String ipAddress, int port) throws IOException {
+ // Ouvrir une connexion socket vers le transceiver
+ socket = new Socket(ipAddress, port);
+
+ // Créer un flux de sortie pour envoyer des commandes
+ outputStream = socket.getOutputStream();
+
+ // Créer un flux d'entrée pour recevoir les réponses
+ inputStream = socket.getInputStream();
+ }
+
+ public void setFrequency(double frequency) throws IOException {
+ // Envoyer une commande au transceiver pour définir la fréquence
+ String command = "F " + frequency + "\n";
+ outputStream.write(command.getBytes());
+
+ // Lire la réponse du transceiver
+ byte[] buffer = new byte[1024];
+ int bytesRead = inputStream.read(buffer);
+ String response = new String(buffer, 0, bytesRead);
+
+ // Vérifier si la commande a été exécutée avec succès
+ if (!response.startsWith("RPRT 0")) {
+ throw new IOException("Failed to set frequency: " + response);
+ }
+ }
+
+ public void setMode(String mode) throws IOException {
+ // Envoyer une commande au transceiver pour définir le mode
+ String command = "M " + mode + "\n";
+ outputStream.write(command.getBytes());
+
+ // Lire la réponse du transceiver
+ byte[] buffer = new byte[1024];
+ int bytesRead = inputStream.read(buffer);
+ String response = new String(buffer, 0, bytesRead);
+
+ // Vérifier si la commande a été exécutée avec succès
+ if (!response.startsWith("RPRT 0")) {
+ throw new IOException("Failed to set mode: " + response);
+ }
+ }
+
+ public String getMode() throws IOException {
+ // Envoyer une commande au transceiver pour obtenir le mode
+ String command = "m\n";
+ outputStream.write(command.getBytes());
+
+ // Lire la réponse du transceiver
+ byte[] buffer = new byte[1024];
+ int bytesRead = inputStream.read(buffer);
+ String response = new String(buffer, 0, bytesRead);
+
+ // Vérifier si la commande a été exécutée avec succès
+ if (!response.startsWith("RPRT 0")) {
+ throw new IOException("Failed to get mode: " + response);
+ }
+
+ // Extraire le mode de la réponse
+ String[] parts = response.split(" ");
+ return parts[2];
+ }
+
+ public double getFrequency() throws IOException {
+ // Envoyer une commande au transceiver pour obtenir la fréquence
+ String command = "f\n";
+ outputStream.write(command.getBytes());
+
+ // Lire la réponse du transceiver
+ byte[] buffer = new byte[1024];
+ int bytesRead = inputStream.read(buffer);
+ String response = new String(buffer, 0, bytesRead);
+
+ // Vérifier si la commande a été exécutée avec succès
+ if (!response.startsWith("RPRT 0")) {
+ throw new IOException("Failed to get frequency: " + response);
+ }
+
+ // Extraire la fréquence de la réponse
+ String[] parts = response.split(" ");
+ return Double.parseDouble(parts[2]);
+ }
+
+ public void close() throws IOException {
+ // Fermer la connexion socket
+ socket.close();
+ }
+
+ public void emergencyStop() {
+ try {
+ // Envoyer une commande au transceiver pour mettre en sécurité le transceiver
+ String command = "M 0\n";
+ outputStream.write(command.getBytes());
+
+ // Lire la réponse du transceiver
+ byte[] buffer = new byte[1024];
+ int bytesRead = inputStream.read(buffer);
+ String response = new String(buffer, 0, bytesRead);
+
+ // Vérifier si la commande a été exécutée avec succès
+ if (!response.startsWith("RPRT 0")) {
+ System.err.println("Failed to put transceiver in emergency stop: " + response);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ // Fermer la connexion socket
+ socket.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/keplerelement/AbstractKeplerienElement.java b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/AbstractKeplerienElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..fc2383da168169b59a3611558e3909c93df83e12
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/AbstractKeplerienElement.java
@@ -0,0 +1,304 @@
+package org.josast.keplerelement;
+
+import org.josast.satellitePrediction.KeplerianElementTwoLineInterface;
+
+/** @author XTOPHE */
+public abstract class AbstractKeplerienElement
+ implements IkeplerienElement, KeplerianElementTwoLineInterface {
+
+ protected String[] twoLine = null;
+ /** */
+ protected String name = null;
+
+ /** */
+ protected double _EpochOrbit = 0;
+
+ /** */
+ protected double _JulianDate = 0;
+
+ /** */
+ protected double _MeanMotion = 0;
+
+ /** */
+ protected double _BSTAR = 0;
+
+ /** */
+ protected double _InclinationRadian = 0;
+
+ /** */
+ protected double _Eccentricity = 0;
+
+ /** */
+ protected double _MeanAnomalyRadian = 0;
+
+ /** */
+ protected double _ArgumentOfPerigeeRadian = 0;
+
+ /** */
+ protected double _RightAccensionRadian = 0;
+
+ /** */
+ protected double _FirstTimeDerivative = 0;
+
+ /** */
+ protected double _SecondTimeDerivative = 0;
+
+ /** */
+ protected int _SatNum = 0;
+
+ protected int orbitnum;
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#getArgumentOfPerigeeRadian()
+ */
+ @Override
+ public double getArgumentOfPerigeeRadian() {
+ return _ArgumentOfPerigeeRadian;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#getBSTAR()
+ */
+ @Override
+ public double getBSTAR() {
+ return _BSTAR;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#getEccentricity()
+ */
+ @Override
+ public double getEccentricity() {
+ return _Eccentricity;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#getEpochOrbit()
+ */
+ @Override
+ public double getEpochOrbit() {
+ return _EpochOrbit;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#getFirstTimeDerivative()
+ */
+ @Override
+ public double getFirstTimeDerivative() {
+ return _FirstTimeDerivative;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#getInclinationRadian()
+ */
+ @Override
+ public double getInclinationRadian() {
+ return _InclinationRadian;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#getJulianDate()
+ */
+ @Override
+ public double getJulianDate() {
+ return _JulianDate;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#getMeanAnomalyRadian()
+ */
+ @Override
+ public double getMeanAnomalyRadian() {
+ return _MeanAnomalyRadian;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#getMeanMotion()
+ */
+ @Override
+ public double getMeanMotion() {
+ return _MeanMotion;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#getMeanPeriod()
+ */
+ @Override
+ public double getMeanPeriod() {
+ return (24 / _MeanMotion);
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#getName()
+ */
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#getOrbitnum()
+ */
+ @Override
+ public int getOrbitnum() {
+ return orbitnum;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#getRightAccensionRadian()
+ */
+ @Override
+ public double getRightAccensionRadian() {
+ return _RightAccensionRadian;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#getSatelliteNumber()
+ */
+ @Override
+ public int getSatelliteNumber() {
+ return _SatNum;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#getSecondTimeDerivative()
+ */
+ @Override
+ public double getSecondTimeDerivative() {
+ return _SecondTimeDerivative;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#isGeostationary()
+ */
+ @Override
+ public boolean isGeostationary() {
+ if (Math.abs(_MeanAnomalyRadian - Math.toRadians(1.0027)) < 0.0002) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#setArgumentOfPerigeeRadian(double)
+ */
+ @Override
+ public void setArgumentOfPerigeeRadian(double argumentOfPerigeeRadian) {
+ _ArgumentOfPerigeeRadian = argumentOfPerigeeRadian;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#setBSTAR(double)
+ */
+ @Override
+ public void setBSTAR(double bstar) {
+ _BSTAR = bstar;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#setEccentricity(double)
+ */
+ @Override
+ public void setEccentricity(double eccentricity) {
+ _Eccentricity = eccentricity;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#setEpochOrbit(double)
+ */
+ @Override
+ public void setEpochOrbit(double epochOrbit) {
+ _EpochOrbit = epochOrbit;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#setFirstTimeDerivative(double)
+ */
+ @Override
+ public void setFirstTimeDerivative(double FirstTimeDerivative) {
+ this._FirstTimeDerivative = FirstTimeDerivative;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#setInclinationRadian(double)
+ */
+ @Override
+ public void setInclinationRadian(double inclinationRadian) {
+ _InclinationRadian = inclinationRadian;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#setJulianDate(double)
+ */
+ @Override
+ public void setJulianDate(double julianDate) {
+ _JulianDate = julianDate;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#setMeanAnomalyRadian(double)
+ */
+ @Override
+ public void setMeanAnomalyRadian(double meanAnomalyRadian) {
+ _MeanAnomalyRadian = meanAnomalyRadian;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#setMeanMotion(double)
+ */
+ @Override
+ public void setMeanMotion(double meanMotion) {
+ _MeanMotion = meanMotion;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#setOrbitnum(int)
+ */
+ @Override
+ public void setOrbitnum(int orbitnum) {
+ this.orbitnum = orbitnum;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#setRightAccensionRadian(double)
+ */
+ @Override
+ public void setRightAccensionRadian(double rightAccensionRadian) {
+ _RightAccensionRadian = rightAccensionRadian;
+ }
+
+ /* (non-Javadoc)
+ * @see org.avmdti.josast.keplerelement.IkeplerienElement#setSecondTimeDerivative(double)
+ */
+ @Override
+ public void setSecondTimeDerivative(double secondTimeDerivative) {
+ _SecondTimeDerivative = secondTimeDerivative;
+ }
+
+ @Override
+ public double getArgumentOfPerigeeDegree() {
+ return Math.toDegrees(this._ArgumentOfPerigeeRadian);
+ }
+
+ @Override
+ public double getInclinationDegree() {
+ return Math.toDegrees(this._InclinationRadian);
+ }
+
+ @Override
+ public double getMeanAnomalyDegree() {
+ return Math.toDegrees(this._MeanAnomalyRadian);
+ }
+
+ @Override
+ public double getRightAccensionDegree() {
+ return Math.toDegrees(this._RightAccensionRadian);
+ }
+
+ @Override
+ public String[] getTwoline() {
+
+ return this.twoLine;
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/keplerelement/IKelplerianElementManager.java b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/IKelplerianElementManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..99fc8058fea3c71189ccb9f320b26715e762b687
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/IKelplerianElementManager.java
@@ -0,0 +1,12 @@
+package org.josast.keplerelement;
+
+import org.josast.satellite.SatelliteInformationInterface;
+
+public interface IKelplerianElementManager {
+
+ public String[] getListeSatelliteName();
+
+ public IkeplerienElement getSatelliteKeplerianElement(String satname);
+
+ public SatelliteInformationInterface[] getSatelliteInformation();
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/keplerelement/IkeplerienElement.java b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/IkeplerienElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..71c2d4b64a169cc3f21bd75894857389387d9d9e
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/IkeplerienElement.java
@@ -0,0 +1,355 @@
+package org.josast.keplerelement;
+
+/**
+ * Description : this interface gives acces to the TLE field.
+ * Some data should be available in Degree or Radian
+ * *
+ *
+ * NORAD Two-Line Element Set Format
+ *
+ * Data for each satellite consists of three lines in the following format:
+ *
+ *
+ * AAAAAAAAAAAAAAAAAAAAAAAA
+ * 1 NNNNNU NNNNNAAA NNNNN.NNNNNNNN +.NNNNNNNN +NNNNN-N +NNNNN-N N NNNNN
+ * 2 NNNNN NNN.NNNN NNN.NNNN NNNNNNN NNN.NNNN NNN.NNNN NN.NNNNNNNNNNNNNN
+ *
+ *
+ * Line 0 is a twenty-four character name (to be consistent with the name length in the NORAD
+ * SATCAT).
+ *
+ *
Lines 1 and 2 are the standard Two-Line Orbital Element Set Format identical to that used by
+ * NORAD and NASA. The format description is:
+ *
+ *
+ *
+ * Line 1
+ *
+ *
+ * Column
+ * Description
+ *
+ *
+ *
+ * 01
+ * Line Number of Element Data
+ *
+ *
+ * 03-07
+ * Satellite Number
+ *
+ *
+ *
+ * 08
+ * Classification (U=Unclassified)
+ *
+ *
+ * 10-11
+ *
+ * International Designator (Last two digits of launch year)
+ *
+ *
+ * 12-14
+ * International Designator (Launch number of the year)
+ *
+ *
+ *
+ * 15-17
+ * International Designator (Piece of the launch)
+ *
+ *
+ * 19-20
+ * Epoch Year (Last two digits of year)
+ *
+ *
+ *
+ * 21-32
+ * Epoch (Day of the year and fractional portion of the day)
+ *
+ *
+ * 34-43
+ * First Time Derivative of the Mean Motion
+ *
+ *
+ *
+ * 45-52
+ * Second Time Derivative of Mean Motion (decimal point assumed)
+ *
+ *
+ * 54-61
+ *
+ * BSTAR drag term (decimal point assumed)
+ *
+ *
+ * 63
+ * Ephemeris type
+ *
+ *
+ *
+ * 65-68
+ * Element number
+ *
+ *
+ * 69
+ * Checksum (Modulo 10)
+ * (Letters, blanks, periods, plus signs = 0; minus signs = 1)
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ * Line 2
+ *
+ *
+ * Column
+ *
+ * Description
+ *
+ *
+ * 01
+ * Line Number of Element Data
+ *
+ *
+ *
+ * 03-07
+ * Satellite Number
+ *
+ *
+ * 09-16
+ * Inclination [Degrees]
+ *
+ *
+ *
+ * 18-25
+ * Right Ascension of the Ascending Node [Degrees]
+ *
+ *
+ * 27-33
+ * Eccentricity (decimal point assumed)
+ *
+ *
+ *
+ * 35-42
+ * Argument of Perigee [Degrees]
+ *
+ *
+ * 44-51
+ *
+ * Mean Anomaly [Degrees]
+ *
+ *
+ * 53-63
+ * Mean Motion [Revs per day]
+ *
+ *
+ *
+ * 64-68
+ * Revolution number at epoch [Revs]
+ *
+ *
+ * 69
+ * Checksum (Modulo 10)
+ *
+ *
+ *
+ *
+ *
+ *
+ * All other columns are blank or fixed.
+ *
+ *
Example:
+ *
+ *
+ * NOAA 14
+ * 1 23455U 94089A 97320.90946019 .00000140 00000-0 10191-3 0 2621
+ * 2 23455 99.0090 272.6745 0008546 223.1686 136.8816 14.11711747148495
+ *
+ *
+ * For further information, see "Frequently Asked Questions: Two-Line
+ * Element Set Format" in the Computers &
+ *
+ *
Satellites column of Satellite Times , Volume 4 Number 3.
+ *
+ * @author XTOPHE
+ * @version 1.0
+ * Source Update
+ * Version : date : name : comments
+ * V1 : 27 juil. 2005 : C. Mercier : create file
+ *
+ */
+public interface IkeplerienElement {
+
+ /** @return the satellite name. */
+ public String getName();
+ /** @return the satellite number (NORAD) */
+ public int getSatelliteNumber();
+ /**
+ * Returns the julianDate of the epoch.
+ *
+ * @return double
+ */
+ public double getJulianDate();
+ /**
+ * First Time Derivative of the Mean Motion
+ *
+ * @return Return FirstTimeDerivative.
+ */
+ public double getFirstTimeDerivative();
+ /**
+ * Returns the secondTimeDerivative.
+ *
+ * @return double
+ */
+ public double getSecondTimeDerivative();
+ /**
+ * Returns the bSTAR.
+ *
+ * @return double
+ */
+ public double getBSTAR();
+ /**
+ * Returns the inclinationRadian.
+ *
+ * @return double
+ */
+ public double getInclinationRadian();
+ /**
+ * Returns the rightAccensionRadian.
+ *
+ * @return double
+ */
+ public double getInclinationDegree();
+ /**
+ * Returns the rightAccensionDegree.
+ *
+ * @return double
+ */
+ public double getRightAccensionRadian();
+ /**
+ * Returns the RightAccension.
+ *
+ * @return double
+ */
+ public double getRightAccensionDegree();
+ /**
+ * Returns the eccentricity.
+ *
+ * @return double
+ */
+ public double getEccentricity();
+ /**
+ * Returns the argumentOfPerigeeRadian.
+ *
+ * @return double
+ */
+ public double getArgumentOfPerigeeRadian();
+ /**
+ * Returns the argumentOfPerigeeDegree.
+ *
+ * @return double
+ */
+ public double getArgumentOfPerigeeDegree();
+ /**
+ * Returns the meanAnomaly in Radian.
+ *
+ * @return double
+ */
+ public double getMeanAnomalyRadian();
+ /**
+ * Returns the meanAnomaly in Degree.
+ *
+ * @return double
+ */
+ public double getMeanAnomalyDegree();
+ /**
+ * Returns the meanMotion.
+ *
+ * @return double
+ */
+ public double getMeanMotion();
+
+ public double getEpochOrbit();
+
+ public int getOrbitnum();
+ /** @return */
+ public double getMeanPeriod();
+
+ /** @param FirstTimeDerivative */
+ public void setFirstTimeDerivative(double FirstTimeDerivative);
+ /** @param _EpochOrbit */
+ public void setEpochOrbit(double _EpochOrbit);
+ /**
+ * return true if the satellite is geostationary.
+ *
+ * @return true = satellite is geostationary
+ */
+ public boolean isGeostationary();
+ /**
+ * Surcharge de la methode toString
+ *
+ * @return String
+ */
+ public String toString();
+
+ public void setArgumentOfPerigeeRadian(double argumentOfPerigeeRadian);
+ /**
+ * Sets the bSTAR.
+ *
+ * @param bSTAR The bSTAR to set
+ */
+ public void setBSTAR(double bSTAR);
+ /**
+ * Sets the eccentricity.
+ *
+ * @param eccentricity The eccentricity to set
+ */
+ public void setEccentricity(double eccentricity);
+ /**
+ * Sets the inclinationRadian.
+ *
+ * @param inclinationRadian The inclinationRadian to set
+ */
+ public void setInclinationRadian(double inclinationRadian);
+ /**
+ * Sets the meanAnomalyRadian.
+ *
+ * @param meanAnomalyRadian The meanAnomalyRadian to set
+ */
+ public void setMeanAnomalyRadian(double meanAnomalyRadian);
+ /**
+ * Sets the meanMotion.
+ *
+ * @param meanMotion The meanMotion to set
+ */
+ public void setMeanMotion(double meanMotion);
+ /**
+ * Sets the rightAccensionRadian.
+ *
+ * @param rightAccensionRadian The rightAccensionRadian to set
+ */
+ public void setRightAccensionRadian(double rightAccensionRadian);
+ /**
+ * Sets the secondTimeDerivative.
+ *
+ * @param secondTimeDerivative The secondTimeDerivative to set
+ */
+ public void setSecondTimeDerivative(double secondTimeDerivative);
+
+ /**
+ * Sets the julianDate.
+ *
+ * @param julianDate The julianDate to set
+ */
+ public void setJulianDate(double julianDate);
+ /** @param orbitnum The orbitnum to set. */
+ public void setOrbitnum(int orbitnum);
+
+ public int getEpochYear();
+
+ public double getEpochDay();
+
+ public String[] getTwoline();
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/keplerelement/KeplerianElementCollection.java b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/KeplerianElementCollection.java
new file mode 100644
index 0000000000000000000000000000000000000000..796dcfd0075702d85bab45240aff620f7f7243e4
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/KeplerianElementCollection.java
@@ -0,0 +1,23 @@
+package org.josast.keplerelement;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class KeplerianElementCollection extends HashMap {
+
+ private static final long serialVersionUID = 1L;
+
+ public KeplerianElementCollection() {}
+
+ public KeplerianElementCollection(int initialCapacity) {
+ super(initialCapacity);
+ }
+
+ public KeplerianElementCollection(Map, ?> m) {
+ super();
+ }
+
+ public KeplerianElementCollection(int initialCapacity, float loadFactor) {
+ super(initialCapacity, loadFactor);
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/keplerelement/KeplerienElement.java b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/KeplerienElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..a04b0e04cb5110a6c9437850c55db4d3082d2386
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/KeplerienElement.java
@@ -0,0 +1,208 @@
+package org.josast.keplerelement;
+
+import org.josast.keplerelement.file.Read2line;
+import org.josast.keplerelement.util.JulianDay;
+import org.josast.keplerelement.util.ParseCharArray;
+
+/**
+ * @author xtophe
+ * @version 1.0
+ */
+public class KeplerienElement extends AbstractKeplerienElement {
+
+ /** */
+ private static final double _ae = 1.0;
+
+ // ~ Instance fields ---------------------------------------------------
+
+ // ~ Constructors ------------------------------------------------------
+
+ /** */
+ public KeplerienElement() {}
+
+ /**
+ * Set keplerian element.
+ *
+ * @param EpochTime
+ * @param Inclination
+ * @param Eccentricity
+ * @param MeanMotion
+ * @param ArgumentOfPerigee in radian
+ * @param MeanAnomaly in radian
+ * @param RightAccension in radian
+ * @param EpochOrbit
+ * @param FirstTimeDerivative
+ * @param SecondTimeDerivative
+ * @param BSTAR
+ */
+ public KeplerienElement(
+ double Inclination,
+ double Eccentricity,
+ double MeanMotion,
+ double ArgumentOfPerigee,
+ double MeanAnomaly,
+ double RightAccension,
+ double EpochOrbit,
+ double FirstTimeDerivative,
+ double SecondTimeDerivative,
+ double BSTAR) {
+ _InclinationRadian = Math.toRadians(Inclination);
+ _Eccentricity = Eccentricity;
+ _MeanMotion = MeanMotion;
+ _RightAccensionRadian = Math.toRadians(RightAccension);
+ _ArgumentOfPerigeeRadian = Math.toRadians(ArgumentOfPerigee);
+ _FirstTimeDerivative = FirstTimeDerivative;
+ _SecondTimeDerivative = SecondTimeDerivative;
+ _BSTAR = BSTAR;
+ _MeanAnomalyRadian = Math.toRadians(MeanAnomaly);
+ _EpochOrbit = EpochOrbit;
+ }
+
+ /**
+ * ------------------------------------------------------------------- -----------------------
+ * Convert_Satellite_Data --------------------
+ * -------------------------------------------------------------------
+ *
+ * @param tle
+ */
+ public KeplerienElement(Read2line tle) {
+ int iexp;
+ int ibexp;
+ name = new String(tle.l[0]).trim();
+
+ twoLine = tle.getStrings();
+
+ /* first line */
+ _SatNum = ParseCharArray.integer_value(tle.l[1], 1, 6);
+ _EpochOrbit = ParseCharArray.double_value(tle.l[1], 18, 14);
+ _JulianDate = JulianDay.convertToJulianDay(_EpochOrbit);
+ _FirstTimeDerivative = ParseCharArray.double_value(tle.l[1], 33, 10);
+ _SecondTimeDerivative = ParseCharArray.double_value(tle.l[1], 44, 6) * 1.0E-5;
+ iexp = ParseCharArray.integer_value(tle.l[1], 50, 2);
+ _BSTAR = ParseCharArray.double_value(tle.l[1], 53, 6) * 1.0E-5;
+ ibexp = ParseCharArray.integer_value(tle.l[1], 59, 2);
+
+ /* second line */
+ _InclinationRadian = ParseCharArray.double_value(tle.l[2], 8, 8);
+ _RightAccensionRadian = ParseCharArray.double_value(tle.l[2], 17, 8);
+ _Eccentricity = ParseCharArray.double_value(tle.l[2], 26, 7) * 1E-7;
+ _ArgumentOfPerigeeRadian = ParseCharArray.double_value(tle.l[2], 34, 8);
+ _MeanAnomalyRadian = ParseCharArray.double_value(tle.l[2], 43, 8);
+ _MeanMotion = ParseCharArray.double_value(tle.l[2], 52, 11);
+ orbitnum = ParseCharArray.integer_value(tle.l[2], 63, 5);
+ /* Convert to proper units */
+ // _SecondTimeDerivative = (_SecondTimeDerivative) * Math.pow(10.0,
+ // -iexp);
+ _SecondTimeDerivative = (_SecondTimeDerivative) * Math.pow(10.0, iexp);
+
+ // _BSTAR = ((_BSTAR) * Math.pow(10.0, -ibexp)) / _ae;
+ _BSTAR = ((_BSTAR) * Math.pow(10.0, -ibexp)) / _ae;
+ _RightAccensionRadian = Math.toRadians(_RightAccensionRadian);
+ _ArgumentOfPerigeeRadian = Math.toRadians(_ArgumentOfPerigeeRadian);
+ _MeanAnomalyRadian = Math.toRadians(_MeanAnomalyRadian);
+ _InclinationRadian = Math.toRadians(_InclinationRadian);
+ // _MeanMotion = ((_MeanMotion) * 2.0 * Math.PI) / _xmnpda;
+ // _FirstTimeDerivative = ((_FirstTimeDerivative) * 2.0 * Math.PI) / MathTools.sqr(_xmnpda);
+ // _SecondTimeDerivative = ((_SecondTimeDerivative) * 2.0 * Math.PI) /
+ // MathTools.cube(_xmnpda);
+
+ }
+
+ public String toString() {
+ return toStringAll();
+ }
+
+ public String toStringAll() {
+ String s = "Satellite name :" + name + "\n";
+ s = s + "Satellite Number :" + _SatNum + "\n";
+ s =
+ s
+ + "Right Accension :"
+ + Math.toDegrees(_RightAccensionRadian)
+ + " Degrees\n";
+ s =
+ s
+ + "Inclination :"
+ + Math.toDegrees(_InclinationRadian)
+ + " Degrees\n";
+ s = s + "Eccentricity :" + _Eccentricity + " Degrees \n";
+ s = s + "Mean Motion :" + _MeanMotion + " Revs per day\n";
+ s = s + "Epoch Time :" + this._JulianDate + "\n";
+ s = s + "Epoch Orbit :" + _EpochOrbit + "\n";
+ s =
+ s
+ + "Argument Of Perigee :"
+ + Math.toDegrees(_ArgumentOfPerigeeRadian)
+ + " Degrees\n";
+ s =
+ s
+ + "Mean Anomaly :"
+ + Math.toDegrees(_MeanAnomalyRadian)
+ + " Degrees\n";
+ s = s + "First Time Derivative of Mean Motion :" + _FirstTimeDerivative + "\n";
+ s = s + "Second Time Derivative of Mean Motion :" + _SecondTimeDerivative + "\n";
+ s = s + "BSTAR drag term :" + _BSTAR + "\n";
+
+ return (s);
+ }
+
+ /** @return */
+ public String toStringXML() {
+ String s = " \n ";
+
+ // s =s+"\t"+ _name+" \n";
+ s = s + "\t" + _SatNum + " \n";
+ s = s + "\t" + Math.toDegrees(_RightAccensionRadian) + " \n";
+ s = s + "\t" + Math.toDegrees(_InclinationRadian) + " \n";
+ s = s + "\t" + _Eccentricity + " \n";
+ s = s + "\t" + _MeanMotion + " \n";
+ s = s + "\t" + this._JulianDate + " \n";
+ s =
+ s
+ + "\t"
+ + Math.toDegrees(_ArgumentOfPerigeeRadian)
+ + " \n";
+ s = s + "\t" + Math.toDegrees(_MeanAnomalyRadian) + " \n";
+ s =
+ s
+ + "\t"
+ + _FirstTimeDerivative
+ + " \n";
+ s =
+ s
+ + "\t"
+ + _SecondTimeDerivative
+ + " \n";
+ s = s + "\t" + _BSTAR + " \n";
+ s = s + " \n";
+
+ return (s);
+ }
+
+ @Override
+ public double getEpochDay() {
+ return (_EpochOrbit - (Math.floor(_EpochOrbit * 1.0E-3)) * 1.0E3);
+ }
+
+ @Override
+ public int getEpochYear() {
+
+ int year = (int) Math.floor(_EpochOrbit * 1.0E-3);
+ if (year < 57) year += 2000;
+ else year += 1900;
+
+ return year;
+ }
+
+ @Override
+ public String[] getTwoLine() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void setTwoLine(String twoLine) {
+ // TODO Auto-generated method stub
+
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/keplerelement/celestrak/KeplerianElementManager.java b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/celestrak/KeplerianElementManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..82f7b77cb2c7e1c2f4a4753561015e3a518b149a
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/celestrak/KeplerianElementManager.java
@@ -0,0 +1,64 @@
+package org.josast.keplerelement.celestrak;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.josast.keplerelement.IKelplerianElementManager;
+import org.josast.keplerelement.IkeplerienElement;
+import org.josast.satellite.SatelliteInformationInterface;
+
+/** manage a collection of keplerian element */
+public class KeplerianElementManager implements IKelplerianElementManager {
+
+ private Map elementsMap;
+
+ public KeplerianElementManager() {
+ elementsMap = new HashMap<>();
+ }
+
+ public void addSatellite(long satelliteId) {
+ TleDataRetriever retriever = new TleDataRetriever();
+ String elements = retriever.getTle(satelliteId);
+ elementsMap.put(satelliteId, elements);
+ }
+
+ public void updateSatellite(long satelliteId) {
+ TleDataRetriever retriever = new TleDataRetriever();
+ String elements = retriever.getTle(satelliteId);
+ elementsMap.put(satelliteId, elements);
+ }
+
+ public void updateAllSatellites() {
+ for (long satelliteId : elementsMap.keySet()) {
+ updateSatellite(satelliteId);
+ }
+ }
+
+ public List getSatelliteIds() {
+ return new ArrayList<>(elementsMap.keySet());
+ }
+
+ public String getElements(long satelliteId) {
+ return elementsMap.get(satelliteId);
+ }
+
+ @Override
+ public String[] getListeSatelliteName() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public IkeplerienElement getSatelliteKeplerianElement(String satname) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public SatelliteInformationInterface[] getSatelliteInformation() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/keplerelement/celestrak/TleDataRetriever.java b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/celestrak/TleDataRetriever.java
new file mode 100644
index 0000000000000000000000000000000000000000..3e21d2c11dab8189d0aa10d1d0465349b6b12838
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/celestrak/TleDataRetriever.java
@@ -0,0 +1,70 @@
+package org.josast.keplerelement.celestrak;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+public class TleDataRetriever {
+
+ private long satelliteID;
+
+ private String apiUrlBaseCelestrack = "https://celestrak.org/";
+ private String apiUrlQueyCelestrack = "NORAD/elements/gp.php?CATNR=";
+ private String apiUrlOptionCelestrack = "&FORMAT=TLE";
+
+ public TleDataRetriever() {}
+
+ public String getTle(long satelliteId) {
+ String apiUrl =
+ apiUrlBaseCelestrack + apiUrlQueyCelestrack + satelliteId + apiUrlOptionCelestrack;
+ URL url = null;
+ HttpURLConnection connection = null;
+ BufferedReader reader = null;
+ StringBuilder response = null;
+ try {
+ url = new URL(apiUrl);
+ } catch (java.net.MalformedURLException e) {
+ System.out.println(e);
+ }
+ // Open a connection to the API URL
+ try {
+ connection = (HttpURLConnection) url.openConnection();
+
+ } catch (java.io.IOException e) {
+ System.out.println(e);
+ }
+
+ try {
+ connection.setRequestMethod("GET");
+
+ } catch (java.io.IOException e) {
+ System.out.println(e);
+ }
+
+ // Read the response from the API
+ try {
+ reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+ String line;
+ response = new StringBuilder();
+ while ((line = reader.readLine()) != null) {
+ response.append(line);
+ response.append("\n");
+ }
+ reader.close();
+
+ } catch (java.io.IOException e) {
+ System.out.println(e);
+ }
+
+ return response.toString();
+ }
+
+ public static void main(String[] args) {
+
+ TleDataRetriever tdr = new TleDataRetriever();
+
+ System.out.println(tdr.getTle(25544));
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/keplerelement/demo/Demo.java b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/demo/Demo.java
new file mode 100644
index 0000000000000000000000000000000000000000..f778a91df227c6da2e112e80b2930521d139001b
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/demo/Demo.java
@@ -0,0 +1,30 @@
+/*
+ * Created on Jul 22, 2004
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.josast.keplerelement.demo;
+
+import org.josast.keplerelement.file.KeplerianFileManager;
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author mercier TODO To change the template for this generated type comment go to Window -
+ * Preferences - Java - Code Style - Code Templates
+ */
+public class Demo {
+ // ~ Methods -----------------------------------------------------------
+
+ /** @param args DOCUMENT ME! */
+ public static void main(String args[]) {
+
+ KeplerianFileManager KFM = new KeplerianFileManager("amateur.txt");
+ System.out.println("number of satellite : " + KFM.getNumberOfSatellite());
+ for (int i = 0; i < KFM.getNumberOfSatellite(); i++) {
+ System.out.println(KFM.getListeSatelliteName()[i]);
+ System.out.println(KFM.getSatelliteKeplerianElement(KFM.getListeSatelliteName()[i]));
+ }
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/keplerelement/demo/DisplayAltitude.java b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/demo/DisplayAltitude.java
new file mode 100644
index 0000000000000000000000000000000000000000..7df53ec57f8546ff65c8c9c117f4e62f1ab407a0
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/demo/DisplayAltitude.java
@@ -0,0 +1,17 @@
+package org.josast.keplerelement.demo;
+
+import org.josast.keplerelement.KeplerienElement;
+import org.josast.keplerelement.file.Read2line;
+
+public class DisplayAltitude {
+ private static String Filename = "arissat.txt";
+
+ public static void main(String args[]) {
+ KeplerienElement KE;
+ Read2line tab[] = Read2line.readTleFile(Filename);
+ for (int i = 0; i < tab.length; i++) {
+ KE = new KeplerienElement(tab[i]);
+ System.out.println("" + KE.getOrbitnum() + ";" + KE.getMeanPeriod() + ";");
+ }
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/keplerelement/file/KeplerianFileManager.java b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/file/KeplerianFileManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..6848d4f15f0c2bfecd5ff870e3099f3c0c9b1ea4
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/file/KeplerianFileManager.java
@@ -0,0 +1,112 @@
+package org.josast.keplerelement.file;
+
+/**
+ * Description :
+ * this class help to manage the kepleriens element from a text file
+ *
+ * @author XTOPHE
+ * @version 1.0
+ * date 9 mai 2004
+ *
Source Update
+ * date : name : comments
+ * V1 : XTOPHE : create file
+ *
+ */
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.logging.Logger;
+
+import org.josast.keplerelement.IkeplerienElement;
+import org.josast.keplerelement.IKelplerianElementManager;
+import org.josast.keplerelement.KeplerienElement;
+import org.josast.satellite.SatelliteInformation;
+import org.josast.satellite.SatelliteInformationInterface;
+
+public class KeplerianFileManager implements IKelplerianElementManager {
+
+ private static Logger appLogger = Logger.getLogger("AmsatLogger");
+
+ private String listeSatellite[];
+ private SatelliteInformationInterface satelliteInfo[];
+ String _inputFileName = null;
+ Hashtable listeSatTLE = new Hashtable();
+ TleCollection tlec;
+
+ public KeplerianFileManager() {}
+
+ /** @param inputFile 2 line text file. */
+ public KeplerianFileManager(String inputFile) {
+ _inputFileName = inputFile;
+ load();
+ }
+
+ protected void load() {
+ tlec = new TleCollection(_inputFileName);
+ // read TLE
+
+ Enumeration en = tlec.elements();
+ int i = 0;
+ listeSatellite = new String[tlec.size()];
+ satelliteInfo = new SatelliteInformationInterface[tlec.size()];
+ while (en.hasMoreElements()) {
+ IkeplerienElement elt = en.nextElement();
+ listeSatellite[i] = elt.getName();
+ satelliteInfo[i] = new SatelliteInformation(elt.getName(), elt.getSatelliteNumber());
+ listeSatTLE.put(elt.getName(), elt);
+ i = i + 1;
+ }
+ }
+
+ /**
+ * get the list of satellite available.
+ *
+ * @return the list of satellite
+ */
+ public String[] getListeSatelliteName() {
+ return listeSatellite.clone();
+ }
+
+ /** reload the current file. */
+ public int reload() {
+
+ int nb = tlec.update(_inputFileName);
+ listeSatTLE.clear();
+ Enumeration en = tlec.elements();
+ int i = 0;
+
+ listeSatellite = new String[tlec.size()];
+ while (en.hasMoreElements()) {
+ IkeplerienElement elt = en.nextElement();
+
+ listeSatellite[i++] = elt.getName();
+ listeSatTLE.put(elt.getName(), elt);
+ }
+ return nb;
+ }
+
+ /**
+ * return the TLE of the selected satellite.
+ *
+ * @return the TLE of the satellite. A default TLE is returned if the satellite do not exist.
+ */
+ public IkeplerienElement getSatelliteKeplerianElement(String satname) {
+
+ IkeplerienElement E = listeSatTLE.get(satname);
+ if (E == null) {
+ E = (IkeplerienElement) new KeplerienElement();
+ appLogger.warning("satellite not found");
+ }
+ return (E);
+ }
+
+ /** @return the number of satellite available. */
+ public int getNumberOfSatellite() {
+ return tlec.size();
+ }
+
+ @Override
+ public SatelliteInformationInterface[] getSatelliteInformation() {
+
+ return satelliteInfo;
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/keplerelement/file/KeplerianFileManagerFromUrl.java b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/file/KeplerianFileManagerFromUrl.java
new file mode 100644
index 0000000000000000000000000000000000000000..489bf8c2b8d6de05a18eb78cbf6c76d7b0bcc19a
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/file/KeplerianFileManagerFromUrl.java
@@ -0,0 +1,31 @@
+package org.josast.keplerelement.file;
+
+import java.io.*;
+import java.net.*;
+import java.nio.channels.Channels;
+import java.nio.channels.ReadableByteChannel;
+import java.util.logging.Logger;
+
+public class KeplerianFileManagerFromUrl extends KeplerianFileManager {
+
+ String url = "https://www.amsat.org/tle/current/dailytle.txt";
+ String fileName = "dailytle.txt";
+ private static Logger appLogger = Logger.getLogger("AmsatLogger");
+
+ public KeplerianFileManagerFromUrl() {
+
+ try {
+ URL website = new URL(url);
+ ReadableByteChannel rbc = Channels.newChannel(website.openStream());
+ FileOutputStream fos = new FileOutputStream(fileName);
+ fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
+ fos.close();
+ appLogger.fine("File downloaded successfully.");
+ _inputFileName = fileName;
+ load();
+
+ } catch (IOException e) {
+ appLogger.severe("Error downloading file: " + e.getMessage());
+ }
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/keplerelement/file/Read2line.java b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/file/Read2line.java
new file mode 100644
index 0000000000000000000000000000000000000000..e25acfdb5bf9e7e5a62b39292366a0efbba912ec
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/file/Read2line.java
@@ -0,0 +1,102 @@
+package org.josast.keplerelement.file;
+
+import java.io.BufferedReader;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+
+import java.util.Vector;
+import java.util.logging.Logger;
+
+/**
+ * @author xtophe
+ * @version 1.0
+ */
+public class Read2line {
+
+ private static Logger appLogger = Logger.getLogger("AmsatLogger");
+ // ~ Instance fields ---------------------------------------------------
+
+ public char l[][] = new char[3][71];
+
+ // ~ Methods -----------------------------------------------------------
+
+ /**
+ * @param filename
+ * @return array of TleAsciiLine
+ */
+ public static Read2line[] readTleFile(String filename) {
+
+ Vector v = new Vector();
+ FileReader inputFile = null;
+
+ try {
+ inputFile = new FileReader(filename);
+ } catch (FileNotFoundException e) {
+ appLogger.severe("File " + filename + " not Open " + e.getMessage());
+ }
+
+ BufferedReader in = new BufferedReader(inputFile);
+
+ String s;
+
+ try {
+ boolean encore = true;
+
+ while (encore) {
+ Read2line sat_data1 = new Read2line();
+
+ s = in.readLine();
+
+ if (s == null) {
+ encore = false;
+ } else {
+ // v�rifie si nom du sat pr�sent
+ if (s.length() < 60) {
+ s = s.trim();
+ s = s.replace(' ', '_');
+ sat_data1.l[0] = s.toCharArray();
+ s = in.readLine();
+ }
+ sat_data1.l[1] = s.toCharArray();
+ s = in.readLine();
+ sat_data1.l[2] = s.toCharArray();
+ v.add(sat_data1);
+ }
+ }
+ } catch (IOException e1) {
+ appLogger.severe("File " + filename + " error during the read " + e1.getMessage());
+ }
+ try {
+ in.close();
+ } catch (IOException e2) {
+ appLogger.severe("File " + filename + " error close " + e2.getMessage());
+ }
+
+ try {
+ inputFile.close();
+ } catch (IOException e3) {
+ appLogger.severe("File " + filename + " error close " + e3.getMessage());
+ }
+
+ Read2line tab[] = new Read2line[v.size()];
+ v.copyInto(tab);
+
+ return (tab);
+ }
+
+ /** @see java.lang.Object#toString() */
+ public String toString() {
+ return new String(l[0]) + "\n" + new String(l[1]) + "\n" + new String(l[2]);
+ }
+
+ public String[] getStrings() {
+ String[] twoLine = new String[3];
+
+ twoLine[0] = new String(l[0]);
+ twoLine[1] = new String(l[1]);
+ twoLine[2] = new String(l[2]);
+
+ return twoLine;
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/keplerelement/file/TleCollection.java b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/file/TleCollection.java
new file mode 100644
index 0000000000000000000000000000000000000000..3526d34c90f7b85282414c5a286b95555505c510
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/file/TleCollection.java
@@ -0,0 +1,63 @@
+package org.josast.keplerelement.file;
+
+import java.util.Hashtable;
+import java.util.logging.Logger;
+
+import org.josast.keplerelement.IkeplerienElement;
+import org.josast.keplerelement.KeplerienElement;
+
+/** @author XTOPHE */
+public class TleCollection extends Hashtable {
+ // ~ Constructors ------------------------------------------------------
+ private static Logger appLogger = Logger.getLogger("AmsatLogger");
+ /** */
+ private static final long serialVersionUID = -6080939017722529827L;
+
+ /**
+ * Creates a new TleCollection object.
+ *
+ * @param Filename TLE filename.
+ */
+ public TleCollection(String Filename) {
+ super();
+
+ KeplerienElement KE;
+ Read2line tab[] = Read2line.readTleFile(Filename);
+
+ for (int i = 0; i < tab.length; i++) {
+ KE = new KeplerienElement(tab[i]);
+ put(Integer.valueOf(KE.getSatelliteNumber()), KE);
+ }
+ }
+
+ // ~ Methods -----------------------------------------------------------
+
+ /**
+ * @param TLE filename
+ * @return the number of TLE modified.
+ */
+ public int update(String Filename) {
+ int modified = 0;
+ KeplerienElement KE;
+ KeplerienElement KEold;
+ Read2line tab[] = Read2line.readTleFile(Filename);
+
+ for (int i = 0; i < tab.length; i++) {
+ KE = new KeplerienElement(tab[i]);
+ KEold = (KeplerienElement) this.get(Integer.valueOf(KE.getSatelliteNumber()));
+
+ if (KEold == null) {
+ put(KE.getSatelliteNumber(), KE);
+ appLogger.info("Add " + KE.toStringAll());
+ modified++;
+ } else if (KE.getJulianDate() > KEold.getJulianDate()) {
+ this.remove(KEold);
+ put(KE.getSatelliteNumber(), KE);
+ appLogger.info("UPdate " + KE.toStringAll());
+ modified++;
+ }
+ }
+
+ return modified;
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/keplerelement/util/GenericDate.java b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/util/GenericDate.java
new file mode 100644
index 0000000000000000000000000000000000000000..8fb9b653aa60d052a2cd542b8d3c4da358954c61
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/util/GenericDate.java
@@ -0,0 +1,153 @@
+package org.josast.keplerelement.util;
+
+/**
+ * Description : generic container for a date.
+ *
+ * Projet : JOSAST
+ *
+ *
+ * @author mercier
+ * @version 1.0
+ *
Source Update
+ * Version : date : name : comments
+ * V1 : 1 avr. 2005 : C. Mercier : create file
+ *
+ */
+public class GenericDate {
+ // ~ Instance fields ---------------------------------------------------
+
+ /** DOCUMENT ME! */
+ private int _year;
+
+ /** DOCUMENT ME! */
+ private int _month;
+
+ /** DOCUMENT ME! */
+ private int _day;
+
+ /** DOCUMENT ME! */
+ private int _hour;
+
+ /** DOCUMENT ME! */
+ private int _minute;
+
+ /** DOCUMENT ME! */
+ private int _seconde;
+
+ // ~ Constructors ------------------------------------------------------
+
+ /**
+ * Creates a new GenericDate object.
+ * no verification on the input value
+ *
+ * @param year 4 digit
+ * @param month 1 to 12
+ * @param day 1 to 31
+ * @param hour 1 to 24
+ * @param minute 1 to 59 !
+ * @param seconde 1 to 59
+ */
+ public GenericDate(int year, int month, int day, int hour, int minute, int seconde) {
+ _year = year;
+ _month = month;
+ _day = day;
+ _hour = hour;
+ _minute = minute;
+ _seconde = seconde;
+ }
+
+ /**
+ * Creates a new GenericDate object.
+ *
+ * @param JulianDate julian day
+ */
+ public GenericDate(double JulianDate) {
+ GenericDate Gd = JulianDay.convertToGenericDate(JulianDate);
+ _year = Gd._year;
+ _month = Gd._month;
+ _day = Gd._day;
+ _hour = Gd._hour;
+ _minute = Gd._minute;
+ _seconde = Gd._seconde;
+ }
+
+ // ~ Methods -----------------------------------------------------------
+
+ /**
+ * return the julian day
+ *
+ * @return return julian day
+ */
+ public double getJulianDay() {
+ return JulianDay.convertToJulianDay(_year, _month, _day, _hour, _minute, _seconde);
+ }
+
+ /** @return day */
+ public int get_day() {
+ return _day;
+ }
+
+ /** @return hours */
+ public int get_hour() {
+ return _hour;
+ }
+
+ /** @return minute */
+ public int get_minute() {
+ return _minute;
+ }
+
+ /** @return month */
+ public int get_month() {
+ return _month;
+ }
+
+ /** @return seconde */
+ public int get_seconde() {
+ return _seconde;
+ }
+
+ /** @return year */
+ public int get_year() {
+ return _year;
+ }
+
+ /** @param _day day */
+ public void set_day(int _day) {
+ this._day = _day;
+ }
+
+ /** @param _hour hour */
+ public void set_hour(int _hour) {
+ this._hour = _hour;
+ }
+
+ /** @param _minute minute */
+ public void set_minute(int _minute) {
+ this._minute = _minute;
+ }
+
+ /** @param _month month */
+ public void set_month(int _month) {
+ this._month = _month;
+ }
+
+ /** @param _seconde seconde */
+ public void set_seconde(int _seconde) {
+ this._seconde = _seconde;
+ }
+
+ /** @param _year year */
+ public void set_year(int _year) {
+ this._year = _year;
+ }
+
+ /**
+ * print generic date with the following format dd mm yy hh mn ss
+ *
+ * @return string
+ */
+ public String toString() {
+ return " " + _day + " " + _month + " " + _year + " " + _hour + " " + _minute + " " + _seconde;
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/keplerelement/util/JulianDay.java b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/util/JulianDay.java
new file mode 100644
index 0000000000000000000000000000000000000000..75ff10fa7e4e3cd02bdf86268f4561f2ad085039
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/util/JulianDay.java
@@ -0,0 +1,379 @@
+package org.josast.keplerelement.util;
+
+import java.util.GregorianCalendar;
+
+/**
+ * Description : Julian day computing
+ *
+ *
date 7 ao�t 2003
+ *
+ *
Source Update
+ * date : name : comments
+ * V1 : mercier : create file
+ * V1.1 : Mercier : correction bug moi de f�vrier
+ *
+ *
This class is a set of static method to use Julian day.
+ *
+ *
Algorithm are based on french version of the Jean Meeus book "Calculs Astronomiques � l'usage
+ * des Amateurs" editor : soci�t� Astronomique de France.
+ *
+ *
+ *
+ * @author XTOPHE josast at avmdti.org
+ * @version 1.1
+ */
+public class JulianDay {
+ // ~ Static fields/initializers ----------------------------------------
+
+ private static final double EPOCH_JAN1_00H_1900 = 2415019.5; // Jan 1.0 1900
+ // = Jan 1 1900
+ // 00h UTC
+
+ // = Jan 1 1900
+ // 12h UTC
+
+ // = Jan 1 2000
+
+ /** DOCUMENT ME! */
+ private static final double EPOCH_JAN1_12H_1900 = 2415020.0; // Jan 1.5 1900 = Jan 1 1900 12h UTC
+ // 12h UTC
+
+ // ~ Constructors ------------------------------------------------------
+
+ // ~ Methods -----------------------------------------------------------
+
+ // static method in the class, the constructor is not needed
+
+ private JulianDay() {}
+
+ /**
+ * Convert epoch from TLE data to julian day this method is valid from 1957 through 2056 epoch is
+ * : yyddd.ddddddd where yy is year ddd.ddddddd is day of the curent year
+ *
+ * @param epoch
+ * @return
+ */
+ public static double convertToJulianDay(double epoch) {
+ double year, day, JDoE;
+ /* Valid 1957 through 2056 */
+ year = Math.floor(epoch * 1.0E-3);
+ if (year < 57) year += 2000;
+ else year += 1900;
+ day = epoch - (Math.floor(epoch * 1.0E-3)) * 1.0E3;
+ JDoE = Julian_Date_of_Year(year) + day;
+
+ return JDoE;
+ }
+
+ /**
+ * Astronomical Formulae for Calculators, Jean Meeus, pages 23-25 Calculate Julian Date of 0.0 Jan
+ * year
+ *
+ * @param year
+ * @return Julian day
+ */
+ public static double Julian_Date_of_Year(double year) {
+ /* Astronomical Formulae for Calculators, Jean Meeus, pages 23-25
+ Calculate Julian Date of 0.0 Jan year */
+ double A, B, JDoY;
+ year = year - 1.0;
+ A = Math.floor(year / 100.0);
+ B = 2.0 - A + Math.floor(A / 4.0);
+ JDoY = Math.floor(365.25 * year) + Math.floor(30.6001 * 14.0) + 1720994.5 + B;
+
+ return JDoY;
+ }
+
+ /**
+ * Method diffdate
+ *
+ *
This method realise the difference between 2 date. The folowing treatement is made : -
+ * convert the 2 date in Julian Day - return the difference between the 2 Julian Day .
+ *
+ * @param d1
+ * @param d2
+ * @return double
+ */
+ public static double diffdate(GregorianCalendar d1, GregorianCalendar d2) {
+ return convertToJulianDay(d1) - convertToJulianDay(d2);
+ }
+
+ /**
+ * Method addJours.
+ *
+ *
This method allows to add a number of day to a date. The folowing treatement is made : -
+ * convert the date to Julian Day - add the number of day - convert the date to GregorianCalendar
+ *
+ * @param d1 date
+ * @param jour number of day to add
+ * @return GregorianCalendar
+ */
+ public static GregorianCalendar addDays(GregorianCalendar d1, long jour) {
+ double JDd1 = convertToJulianDay(d1);
+ JDd1 += jour;
+ return convertToGregorianCalendar(JDd1);
+ }
+
+ /**
+ * Method convertToJourJulien.
+ *
+ *
This method convert a date in Julian Day.
+ *
+ *
This method call the convertToJourJulien(int annee,int mois,int jour,int heure,int
+ * minute,int seconde)
+ *
+ * @param date
+ * @return double
+ */
+ public static double convertToJulianDay(GregorianCalendar date) {
+
+ return convertToJulianDay(
+ date.get(GregorianCalendar.YEAR),
+ date.get(GregorianCalendar.MONTH) + 1,
+ date.get(GregorianCalendar.DAY_OF_MONTH),
+ date.get(GregorianCalendar.HOUR_OF_DAY),
+ date.get(GregorianCalendar.MINUTE),
+ date.get(GregorianCalendar.SECOND));
+ }
+ /**
+ * Method convertToJourJulien.
+ *
+ *
This method convert a date in Julian Day.
+ *
+ *
This method call the convertToJourJulien(int annee,int mois,int jour,int heure,int
+ * minute,int seconde)
+ *
+ * @param date
+ * @return double
+ */
+ public static double convertToJulianDay(GenericDate date) {
+ return convertToJulianDay(
+ date.get_year(),
+ date.get_month(),
+ date.get_day(),
+ date.get_hour(),
+ date.get_minute(),
+ date.get_seconde());
+ }
+
+ /**
+ * Method convertToJourJulien.
+ *
+ *
This method concert a date in Julian Date. The algorithm from the Jean Meeus book is used.
+ *
+ *
This method as been tested with the exemple of the book. cf Unit test.
+ *
+ *
Be carrefull the input are not checked.
+ *
+ * @param annee positive and negative year coold be used
+ * @param mois 1->junary 12->december
+ * @param jour 1 to 31
+ * @param heure 0-24
+ * @param minute 0-59
+ * @param seconde 0-59
+ * @return double julian date.
+ */
+ public static double convertToJulianDay(
+ int annee, int mois, int jour, int heure, int minute, int seconde) {
+ // d�tection si la date est > 1582.1015
+ double A = 0;
+ double B = 0;
+ double date = annee + mois / 100.0 + jour / 10000.0;
+ double JulianDate = 0;
+
+ double y = annee;
+ double m = mois;
+ double j = heure / 24.0 + (minute / (24 * 60.0)) + (seconde / (3600.0 * 24.0));
+ // MCR 15-2-2004 correction suite a un d�faut d�tect� sur le mois de f�vier
+ // remplacement du < par <= puisque les mois de janvier et f�vier sont consid�r� comme
+ // les 13eme et 14eme mois.
+
+ if (mois <= 2) {
+ y = y - 1;
+ m = m + 12;
+ }
+
+ if (date > 1582.1015) {
+ A = ENT(y / 100.0);
+ B = 2 - A + ENT(A / 4.0);
+ } else {
+ A = 0;
+ B = 0;
+ }
+
+ if (y > 0) {
+ JulianDate = ENT(365.25 * y) + ENT(30.6001 * (m + 1)) + jour + j + 1720994.5 + B;
+ } else {
+ JulianDate = ENT(365.25 * y - 0.75) + ENT(30.6001 * (m + 1)) + jour + j + 1720994.5 + B;
+ }
+
+ return JulianDate;
+ }
+
+ /**
+ * This method concert a date in Julian Date Modified with origin 1/1/2000 0H.
+ *
+ *
The time scale used here is a "day number" from 2000 Jan 0.0 TDT, which is the same as 1999
+ * Dec 31.0 TDT, i.e. precisely at midnight TDT at the start of the last day of this century. With
+ * the modest accuracy we strive for here, one can usually disregard the difference between TDT
+ * (formerly canned ET) and UT.
+ *
+ * @param annee
+ * @param mois
+ * @param jour
+ * @param heure
+ * @param minute
+ * @param seconde
+ * @return
+ */
+ public static double convertToJulianDay2000(
+ int annee, int mois, int jour, int heure, int minute, int seconde) {
+ return convertToJulianDay(annee, mois, jour, heure, minute, seconde) - 2451543.5d;
+ }
+
+ /**
+ * Method convertToGregorianCalendar.
+ *
+ *
This method convert an Julian date to a Gregorian Calendar date.
+ *
+ * @param JulianDate
+ * @return GregorianCalendar
+ */
+ public static GregorianCalendar convertToGregorianCalendar(double JulianDate) {
+ double Z = ENT(JulianDate + 0.5);
+ double A = 0;
+ if (Z < 2299161) {
+ A = Z;
+ } else {
+ double alpha = ENT((Z - 1867216.25) / 36524.35);
+ A = Z + 1 + alpha - ENT(alpha / 4);
+ }
+
+ double F = JulianDate + 0.5 - Z;
+
+ double B = A + 1524;
+ double C = ENT((B - 122.1) / 365.25);
+ double D = ENT(365.25 * C);
+ double E = ENT((B - D) / 30.6001);
+ double tempjour = B - D - ENT(30.6001 * E) + F;
+
+ int jour = (int) ENT(tempjour);
+ double temp = tempjour - jour;
+
+ double ensecondes = 24 * 60 * 60 * temp;
+
+ int heure = (int) ENT(ensecondes / 3600);
+ int minute = (int) ENT((ensecondes - (3600 * heure)) / 60.0);
+ int secondes = (int) ensecondes - ((3600 * heure) + (60 * minute));
+ int mois = (int) E - 1;
+
+ if (E > 13.5) {
+ mois = (int) E - 13;
+ }
+
+ int annee = (int) C - 4716;
+ if (mois < 2.5) {
+ annee = (int) C - 4715;
+ }
+ System.err.println("" + annee + "" + mois + "" + jour);
+ return new GregorianCalendar(annee, mois - 1, jour, heure, minute, secondes);
+ }
+
+ /**
+ * Method ENT.
+ *
+ * @param valeur
+ * @return double
+ */
+ private static double ENT(double valeur) {
+ long l = (long) valeur;
+ return l * 1.0;
+ }
+
+ /**
+ * Method convertToGenericDate.
+ *
+ * @param JulianDate
+ * @return GenericDate
+ */
+ public static GenericDate convertToGenericDate(double JulianDate) {
+ double Z = ENT(JulianDate + 0.5);
+ double A = 0;
+ if (Z < 2299161) {
+ A = Z;
+ } else {
+ double alpha = ENT((Z - 1867216.25) / 36524.35);
+ A = Z + 1 + alpha - ENT(alpha / 4);
+ }
+
+ double F = JulianDate + 0.5 - Z;
+
+ double B = A + 1524;
+ double C = ENT((B - 122.1) / 365.25);
+ double D = ENT(365.25 * C);
+ double E = ENT((B - D) / 30.6001);
+ double tempjour = B - D - ENT(30.6001 * E) + F;
+
+ int jour = (int) ENT(tempjour);
+ double temp = tempjour - jour;
+
+ double ensecondes = 24 * 60 * 60 * temp;
+
+ int heure = (int) ENT(ensecondes / 3600);
+ int minute = (int) ENT((ensecondes - (3600 * heure)) / 60.0);
+ int secondes = (int) ensecondes - ((3600 * heure) + (60 * minute));
+ int mois = (int) E - 1;
+
+ if (E > 13.5) {
+ mois = (int) E - 13;
+ }
+
+ int annee = (int) C - 4716;
+ if (mois < 2.5) {
+ annee = (int) C - 4715;
+ }
+
+ return new GenericDate(annee, mois, jour, heure, minute, secondes);
+ }
+ /**
+ * DOCUMENT ME!
+ *
+ * @param m_Date julian day
+ * @return number of day from 1/1/1900 OH
+ */
+ public static double FromJan1_00h_1900(double m_Date) {
+ return m_Date - EPOCH_JAN1_00H_1900;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @param m_Date julian day
+ * @return number of day from 1/1/1900 12H
+ */
+ public static double FromJan1_12h_1900(double m_Date) {
+ return m_Date - EPOCH_JAN1_12H_1900;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @param m_Date julian day
+ * @return number of day from 1/1/2000 12H
+ */
+ public static double FromJan1_12h_2000(double m_Date) {
+ return m_Date - EPOCH_JAN1_12H_2000;
+ }
+
+ /** DOCUMENT ME! */
+ private static final double EPOCH_JAN1_12H_2000 = 2451545.0; // Jan 1.5 2000 = Jan 1 2000 12h UTC
+
+ public static double getFromJan1_12h_2000(double date) {
+ return date - EPOCH_JAN1_12H_2000;
+ }
+
+ // ~ Constructors ------------------------------------------------------
+
+ // static method in the class, the constructor is not needed
+
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/keplerelement/util/ParseCharArray.java b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/util/ParseCharArray.java
new file mode 100644
index 0000000000000000000000000000000000000000..6fd6911e7bcc1c94907396775a3ca5c813b36d2b
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/keplerelement/util/ParseCharArray.java
@@ -0,0 +1,196 @@
+package org.josast.keplerelement.util;
+
+/*
+ * Created on Jul 22, 2004
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+
+/**
+ * convert an array of char in double or integer
+ *
+ * @author Xtophe
+ * @version 1.0
+ */
+public class ParseCharArray {
+ // ~ Methods -----------------------------------------------------------
+
+ /*
+ * ------------------------------------------------------------------- *
+ * ---------------------------- double_value ------------------------- *
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * @param c1 Array of char
+ * @param pos First caractere to convert
+ * @param len Lenght of the convertion
+ * @return
+ */
+ public static double double_value(char c1[], int pos, int len) {
+ double d = 0;
+ int i;
+ int j = 0;
+
+ for (i = 0; (i < len); i++) {
+ switch (c1[i + pos]) {
+ case ' ':
+ break;
+
+ case '0':
+ d *= 10;
+
+ break;
+
+ case '1':
+ d *= 10;
+ d++;
+
+ break;
+
+ case '2':
+ d *= 10;
+ d += 2;
+
+ break;
+
+ case '3':
+ d *= 10;
+ d += 3;
+
+ break;
+
+ case '4':
+ d *= 10;
+ d += 4;
+
+ break;
+
+ case '5':
+ d *= 10;
+ d += 5;
+
+ break;
+
+ case '6':
+ d *= 10;
+ d += 6;
+
+ break;
+
+ case '7':
+ d *= 10;
+ d += 7;
+
+ break;
+
+ case '8':
+ d *= 10;
+ d += 8;
+
+ break;
+
+ case '9':
+ d *= 10;
+ d += 9;
+
+ break;
+
+ case '.':
+ j = len - i - 1;
+
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ d /= Math.pow(10.0, j);
+
+ return d;
+ }
+
+ /**
+ * @param c1 Array of char
+ * @param pos First caractere to convert
+ * @param len Lenght of the convertion
+ * @return
+ */
+ public static int integer_value(char c1[], int pos, int len) {
+ int d = 0;
+ int i;
+
+ for (i = 0; (i < len); i++) {
+ switch (c1[i + pos]) {
+ case ' ':
+ break;
+
+ case '0':
+ d *= 10;
+
+ break;
+
+ case '1':
+ d *= 10;
+ d++;
+
+ break;
+
+ case '2':
+ d *= 10;
+ d += 2;
+
+ break;
+
+ case '3':
+ d *= 10;
+ d += 3;
+
+ break;
+
+ case '4':
+ d *= 10;
+ d += 4;
+
+ break;
+
+ case '5':
+ d *= 10;
+ d += 5;
+
+ break;
+
+ case '6':
+ d *= 10;
+ d += 6;
+
+ break;
+
+ case '7':
+ d *= 10;
+ d += 7;
+
+ break;
+
+ case '8':
+ d *= 10;
+ d += 8;
+
+ break;
+
+ case '9':
+ d *= 10;
+ d += 9;
+
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ return d;
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/satellite/ManageSatellites.java b/ApplicationJMultisat/src/main/java/org/josast/satellite/ManageSatellites.java
new file mode 100644
index 0000000000000000000000000000000000000000..7630f75b76cb7b8522b4e7db65ef3882552c0f65
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/satellite/ManageSatellites.java
@@ -0,0 +1,129 @@
+package org.josast.satellite;
+
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonObject;
+import javax.json.JsonReader;
+import javax.json.JsonValue;
+import javax.json.bind.Jsonb;
+import javax.json.bind.JsonbBuilder;
+
+public class ManageSatellites {
+
+ SatelliteInformationInterface[] satellites = null;
+
+ Map productsByName = new HashMap<>();
+
+ public ManageSatellites() {}
+
+ /** @return the satellites */
+ public final synchronized SatelliteInformationInterface[] getSatellites() {
+ return satellites;
+ }
+
+ /** @param satellites the satellites to set */
+ public final synchronized void setSatellites(SatelliteInformationInterface[] satellites) {
+ this.satellites = satellites;
+ for (int i = 0; i < satellites.length; i++) {
+ productsByName.put(satellites[i].getName(), satellites[i]);
+ }
+ }
+
+ public SatelliteInformationInterface getSatelliteFromName(String activesat) {
+ return productsByName.get(activesat);
+ }
+
+ public boolean setSatellitePriority(String string, int i) {
+ boolean b = false;
+ SatelliteInformationInterface sat = productsByName.get(string);
+ if (sat != null) {
+ sat.setPriority(i);
+ b = true;
+ }
+
+ return b;
+ }
+
+ public void load(String file) {
+
+ Jsonb jsonb = JsonbBuilder.create();
+ // List applicationDataList = new ArrayList<>();
+ ArrayList newList =
+ new ArrayList();
+ try (JsonReader reader = Json.createReader(new FileReader(file))) {
+ JsonArray jsonArray = reader.readArray();
+ for (JsonValue jsonValue : jsonArray) {
+ JsonObject jsonObject = (JsonObject) jsonValue;
+ SatelliteInformationInterface genericObjectData =
+ jsonb.fromJson(jsonObject.toString(), SatelliteInformation.class);
+ newList.add(genericObjectData);
+ }
+ reader.close();
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ System.out.println(newList.size());
+ satellites = new SatelliteInformationInterface[newList.size()];
+ for (int i = 0; i < newList.size(); i++) {
+ satellites[i] = newList.get(i);
+ }
+ }
+
+ public void save(String filename) {
+
+ Jsonb jsonb = JsonbBuilder.create();
+
+ String jsonData = null;
+
+ try {
+ FileWriter fileWriter = new FileWriter(filename);
+ jsonData = jsonb.toJson(satellites);
+ fileWriter.write(jsonData);
+ fileWriter.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ // try {
+ // PrintWriter writer = new PrintWriter(filename, "UTF-8");
+ // for (SatelliteInformationInterface satellite : satellites) {
+ // writer.println(satellite.toString());
+ // }
+ // writer.close();
+ // } catch (FileNotFoundException | UnsupportedEncodingException e) {
+ //
+ // e.printStackTrace();
+ // }
+ }
+
+ public void DeselectAllSatellites() {
+ for (SatelliteInformationInterface satellite : satellites) {
+ satellite.setSelected(false);
+ }
+ }
+
+ public SatelliteInformationInterface[] getSelectedSatellites() {
+
+ ArrayList newList =
+ new ArrayList();
+ Map selected = new HashMap<>();
+ for (SatelliteInformationInterface satellite : satellites) {
+ if (satellite.isSelected()) {
+ newList.add(satellite);
+ selected.put(satellite.getName(), satellite);
+ }
+ }
+ SatelliteInformationInterface[] selectedArray =
+ newList.toArray(new SatelliteInformationInterface[0]);
+ return selectedArray;
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/satellite/SatelliteInformation.java b/ApplicationJMultisat/src/main/java/org/josast/satellite/SatelliteInformation.java
new file mode 100644
index 0000000000000000000000000000000000000000..fef94bd1f42c4b8a1279c33e352446a207eeab33
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/satellite/SatelliteInformation.java
@@ -0,0 +1,125 @@
+/** */
+package org.josast.satellite;
+
+import org.josast.automation.ProcessBuilderCollection;
+import org.josast.satellite.mode.ModulationMode;
+
+/** */
+public class SatelliteInformation implements SatelliteInformationInterface {
+
+ private boolean selected = true;
+ private String name = null;
+ private long noradIdentifier = 0;
+ private int priority = 0;
+ private long frequency = 0;
+ private ModulationMode modulation = null;
+ private ProcessBuilderCollection preocessBuilder = new ProcessBuilderCollection();
+
+ /** @return the frequency */
+ @Override
+ public final synchronized long getFrequency() {
+ return frequency;
+ }
+
+ /** @param frequency the frequency to set */
+ @Override
+ public final synchronized void setFrequency(long frequency) {
+ this.frequency = frequency;
+ }
+
+ /** */
+ public SatelliteInformation() {
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * @param name
+ * @param noradIdentifier
+ */
+ public SatelliteInformation(String name, long noradIdentifier) {
+ super();
+ this.name = name;
+ this.noradIdentifier = noradIdentifier;
+ }
+
+ @Override
+ public String getName() {
+
+ return name;
+ }
+
+ @Override
+ public long getNoradIdentifier() {
+
+ return noradIdentifier;
+ }
+
+ @Override
+ public boolean isSelected() {
+ return selected;
+ }
+
+ @Override
+ public void setSelected(boolean b) {
+ selected = b;
+ }
+
+ @Override
+ public int getPriority() {
+ return priority;
+ }
+
+ @Override
+ public void setPriority(int priority) {
+ this.priority = priority;
+ }
+
+ /** @param name the name to set */
+ @Override
+ public final synchronized void setName(String name) {
+ this.name = name;
+ }
+
+ /** @param noradIdentifier the noradIdentifier to set */
+ @Override
+ public final synchronized void setNoradIdentifier(long noradIdentifier) {
+ this.noradIdentifier = noradIdentifier;
+ }
+
+ /** @return the modulation */
+ @Override
+ public final synchronized ModulationMode getModulation() {
+ return modulation;
+ }
+
+ /** @param modulation the modulation to set */
+ @Override
+ public final synchronized void setModulation(ModulationMode modulation) {
+ this.modulation = modulation;
+ }
+
+ /** @return the preocessBuilder */
+ @Override
+ public final synchronized ProcessBuilderCollection getPreocessBuilder() {
+ return preocessBuilder;
+ }
+
+ /** @param preocessBuilder the preocessBuilder to set */
+ @Override
+ public final synchronized void setPreocessBuilder(ProcessBuilderCollection preocessBuilder) {
+ this.preocessBuilder = preocessBuilder;
+ }
+
+ @Override
+ public String toString() {
+ return "SatelliteInformation [selected="
+ + selected
+ + ", name="
+ + name
+ + ", noradIdentifier="
+ + noradIdentifier
+ + ", priority="
+ + priority
+ + "]";
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/satellite/SatelliteInformationInterface.java b/ApplicationJMultisat/src/main/java/org/josast/satellite/SatelliteInformationInterface.java
new file mode 100644
index 0000000000000000000000000000000000000000..84248cbf685374c0be8aecd50e3153ebfc353a8a
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/satellite/SatelliteInformationInterface.java
@@ -0,0 +1,43 @@
+package org.josast.satellite;
+
+import org.josast.automation.ProcessBuilderCollection;
+import org.josast.satellite.mode.ModulationMode;
+
+public interface SatelliteInformationInterface {
+
+ /** @return the frequency */
+ long getFrequency();
+
+ /** @param frequency the frequency to set */
+ void setFrequency(long frequency);
+
+ String getName();
+
+ long getNoradIdentifier();
+
+ boolean isSelected();
+
+ void setSelected(boolean b);
+
+ int getPriority();
+
+ void setPriority(int priority);
+
+ /** @param name the name to set */
+ void setName(String name);
+
+ /** @param noradIdentifier the noradIdentifier to set */
+ void setNoradIdentifier(long noradIdentifier);
+
+ /** @return the modulation */
+ ModulationMode getModulation();
+
+ /** @param modulation the modulation to set */
+ void setModulation(ModulationMode modulation);
+
+ /** @return the preocessBuilder */
+ ProcessBuilderCollection getPreocessBuilder();
+
+ /** @param preocessBuilder the preocessBuilder to set */
+ void setPreocessBuilder(ProcessBuilderCollection preocessBuilder);
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/satellite/mode/CollectionModulationMode.java b/ApplicationJMultisat/src/main/java/org/josast/satellite/mode/CollectionModulationMode.java
new file mode 100644
index 0000000000000000000000000000000000000000..8e583448a841735c256736604ad92f9e1a1eaf89
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/satellite/mode/CollectionModulationMode.java
@@ -0,0 +1,59 @@
+package org.josast.satellite.mode;
+
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Hashtable;
+
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonObject;
+import javax.json.JsonReader;
+import javax.json.JsonValue;
+import javax.json.bind.Jsonb;
+import javax.json.bind.JsonbBuilder;
+
+public class CollectionModulationMode extends Hashtable {
+
+ /** */
+ private static final long serialVersionUID = -2561419842059637727L;
+
+ public void save(String filename) {
+ Jsonb jsonb = JsonbBuilder.create();
+
+ String jsonData = jsonb.toJson(this.values());
+
+ try {
+ FileWriter fileWriter = new FileWriter(filename);
+ fileWriter.write(jsonData);
+ fileWriter.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void load(String absolutePath) {
+ Jsonb jsonb = JsonbBuilder.create();
+ // List applicationDataList = new ArrayList<>();
+ ModulationMode genericObjectData = null;
+ try (JsonReader reader = Json.createReader(new FileReader(absolutePath))) {
+ JsonArray jsonArray = reader.readArray();
+ for (JsonValue jsonValue : jsonArray) {
+ JsonObject jsonObject = (JsonObject) jsonValue;
+ genericObjectData = jsonb.fromJson(jsonObject.toString(), ModulationMode.class);
+
+ // Application applicationData = jsonb.fromJson(jsonObject.toString(),
+ // Application.class);
+ // applicationDataList.add(applicationData);
+
+ this.put(genericObjectData.getName(), genericObjectData);
+ }
+ reader.close();
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ System.out.println(this.size());
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/satellite/mode/ModulationMode.java b/ApplicationJMultisat/src/main/java/org/josast/satellite/mode/ModulationMode.java
new file mode 100644
index 0000000000000000000000000000000000000000..d8a9ec32b84e3b43836bd7d6bc618854b2c9512c
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/satellite/mode/ModulationMode.java
@@ -0,0 +1,74 @@
+package org.josast.satellite.mode;
+
+public class ModulationMode {
+
+ private String name;
+ /*
+ USB’, ‘LSB’, ‘CW’, ‘CWR’, ‘RTTY’, ‘RTTYR’, ‘AM’, ‘FM’, ‘WFM’, ‘AMS’, ‘PKTLSB’, ‘PKTUSB’, ‘PKTFM’, ‘ECSSUSB’, ‘ECSSLSB’, ‘FA’, ‘SAM’, ‘SAL’, ‘SAH’, ‘DSB’
+ */
+ private String radioMode;
+
+ private double radioOffset;
+
+ private double radioBandwith;
+
+ /** */
+ public ModulationMode() {
+ super();
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * @param name
+ * @param radioMode
+ * @param radioOffset
+ * @param radioBandwith
+ */
+ public ModulationMode(String name, String radioMode, double radioOffset, double radioBandwith) {
+ super();
+ this.name = name;
+ this.radioMode = radioMode;
+ this.radioOffset = radioOffset;
+ this.radioBandwith = radioBandwith;
+ }
+
+ /** @return the name */
+ public final synchronized String getName() {
+ return name;
+ }
+
+ /** @param name the name to set */
+ public final synchronized void setName(String name) {
+ this.name = name;
+ }
+
+ /** @return the radioMode */
+ public final synchronized String getRadioMode() {
+ return radioMode;
+ }
+
+ /** @param radioMode the radioMode to set */
+ public final synchronized void setRadioMode(String radioMode) {
+ this.radioMode = radioMode;
+ }
+
+ /** @return the radioOffset */
+ public final synchronized double getRadioOffset() {
+ return radioOffset;
+ }
+
+ /** @param radioOffset the radioOffset to set */
+ public final synchronized void setRadioOffset(double radioOffset) {
+ this.radioOffset = radioOffset;
+ }
+
+ /** @return the radioBandwith */
+ public final synchronized double getRadioBandwith() {
+ return radioBandwith;
+ }
+
+ /** @param radioBandwith the radioBandwith to set */
+ public final synchronized void setRadioBandwith(double radioBandwith) {
+ this.radioBandwith = radioBandwith;
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/InterfaceSatellitePropagation.java b/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/InterfaceSatellitePropagation.java
new file mode 100644
index 0000000000000000000000000000000000000000..67a6724c5026da229da60a18590635721354d4ac
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/InterfaceSatellitePropagation.java
@@ -0,0 +1,23 @@
+package org.josast.satellitePrediction;
+
+import java.util.List;
+
+import org.joda.time.DateTime;
+import org.josast.station.GroundStationInterface;
+
+public interface InterfaceSatellitePropagation {
+
+ public void setSatelliteKeplerianElement(KeplerianElementTwoLineInterface satellite);
+
+ public void setGroundStation(GroundStationInterface groundStation);
+
+ public GroundStationInterface getGroundStation();
+
+ public SatellitePositionfromGroundStation getCurrentPosition();
+
+ public SatellitePositionfromGroundStation getPosition(DateTime date);
+
+ public SatellitePassfromGroundStation getNextPass();
+
+ public List getNextPass(int hour);
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/KeplerianElementTwoLine.java b/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/KeplerianElementTwoLine.java
new file mode 100644
index 0000000000000000000000000000000000000000..8a4f89ccbd8d4f2177759740e896d29ea06a34d4
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/KeplerianElementTwoLine.java
@@ -0,0 +1,18 @@
+package org.josast.satellitePrediction;
+
+public class KeplerianElementTwoLine implements KeplerianElementTwoLineInterface {
+
+ private String twoLine[];
+
+ /** @return the twoLine */
+ @Override
+ public final synchronized String[] getTwoLine() {
+ return twoLine;
+ }
+
+ /** @param twoLine the twoLine to set */
+ @Override
+ public final synchronized void setTwoLine(String twoLine) {
+ this.twoLine = twoLine.split("\n");
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/KeplerianElementTwoLineInterface.java b/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/KeplerianElementTwoLineInterface.java
new file mode 100644
index 0000000000000000000000000000000000000000..153ad0bf9937acf6c03906df4c63b4f540efaa02
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/KeplerianElementTwoLineInterface.java
@@ -0,0 +1,10 @@
+package org.josast.satellitePrediction;
+
+public interface KeplerianElementTwoLineInterface {
+
+ /** @return the twoLine */
+ String[] getTwoLine();
+
+ /** @param twoLine the twoLine to set */
+ void setTwoLine(String twoLine);
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/ManageSatellitePass.java b/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/ManageSatellitePass.java
new file mode 100644
index 0000000000000000000000000000000000000000..680ba0fb2db0c3935715491c64a71282e156a010
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/ManageSatellitePass.java
@@ -0,0 +1,117 @@
+package org.josast.satellitePrediction;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Iterator;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+import java.util.Collections;
+import org.joda.time.DateTime;
+import org.josast.satellite.ManageSatellites;
+import org.josast.satellite.SatelliteInformationInterface;
+
+public class ManageSatellitePass {
+
+ private List satellitePassList = new ArrayList<>();
+
+ private int minDuration = 60000;
+ private double minElevation = 5.0;
+
+ public Predicate minDurationnPredicate =
+ p -> p.getDuration() >= minDuration;
+ public Predicate minElevationPredicate =
+ p -> p.getTca().getElevation() >= minElevation;
+
+ public ManageSatellitePass() {}
+
+ /** @return the satellitePassList */
+ public final synchronized List getSatellitePassList() {
+ return satellitePassList;
+ }
+
+ /** @param satellitePassList the satellitePassList to set */
+ public final synchronized void setSatellitePassList(
+ List satellitePassList) {
+ this.satellitePassList = satellitePassList;
+ }
+
+ public void addSatellitePass(List list) {
+ satellitePassList.addAll(list);
+ }
+
+ public int getSize() {
+ return satellitePassList.size();
+ }
+
+ public List filter(
+ Predicate predicate) {
+
+ List filteredPassages =
+ satellitePassList.stream().filter(predicate).collect(Collectors.toList());
+
+ return (filteredPassages);
+ }
+
+ public void sort(Comparator comparator) {
+ Collections.sort(satellitePassList, comparator);
+ }
+
+ public List selectPassListSimple() {
+ // parcour de la liste
+ List selectedSatPassList = new ArrayList<>();
+ DateTime losDate = null;
+ SatellitePassfromGroundStation pass;
+ Iterator it = satellitePassList.iterator();
+ boolean passSelected = false;
+ while (it.hasNext()) {
+ pass = it.next();
+ // selection du passage
+ if (!passSelected) {
+ selectedSatPassList.add(pass);
+ losDate = pass.getLOSDate();
+ passSelected = true;
+ } else {
+ if (losDate.isBefore(pass.getAOSDate())) {
+ selectedSatPassList.add(pass);
+ losDate = pass.getLOSDate();
+ passSelected = true;
+ }
+ }
+ // recherche passage suivant qui démarre aprés la fin passage sélectionné
+
+ }
+
+ return selectedSatPassList;
+ }
+
+ public List selectPassByPriority(ManageSatellites mngSat) {
+ List possiblePasses = new ArrayList<>();
+
+ SatellitePassfromGroundStation activePass = null;
+ SatelliteInformationInterface activesat = null;
+ SatelliteInformationInterface currentsat = null;
+
+ for (SatellitePassfromGroundStation pass : satellitePassList) {
+
+ if (activePass == null || pass.getAos().getDate().isAfter(activePass.getLos().getDate())) {
+ // No active pass or new pass starts after active pass ends
+ activePass = pass;
+ possiblePasses.add(pass);
+ } else {
+
+ activesat = mngSat.getSatelliteFromName(activePass.getName());
+ currentsat = mngSat.getSatelliteFromName(pass.getName());
+
+ if (currentsat.getPriority() > activesat.getPriority()) {
+ // New pass starts while active pass is still ongoing, and has higher priority
+ possiblePasses.remove(activePass);
+ activePass = pass;
+ possiblePasses.add(pass);
+ }
+ }
+ }
+
+ return possiblePasses;
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/SatellitePassfromGroundStation.java b/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/SatellitePassfromGroundStation.java
new file mode 100644
index 0000000000000000000000000000000000000000..0d473c99280baef0e5803fdd8ade85ddd0a239b9
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/SatellitePassfromGroundStation.java
@@ -0,0 +1,108 @@
+package org.josast.satellitePrediction;
+
+import org.joda.time.DateTime;
+
+public class SatellitePassfromGroundStation {
+
+ // AOS stands for Acquisition of Signal (or Satellite). AOS is the time that a satellite rises
+ // above the horizon of an observer.
+ // TCA stands for Time of Closest Approach. This is the time when the satellite is closest to the
+ // observer and when Doppler shift is zero. This usually corresponds to the time that the
+ // satellite reaches maximum elevation above the horizon.
+ // LOS stands for Loss of Signal (or Satellite). LOS is the time that a satellite passes below the
+ // observer’s horizon.
+
+ private SatellitePositionfromGroundStation aos;
+ private SatellitePositionfromGroundStation los;
+ private SatellitePositionfromGroundStation tca;
+ private long duration;
+ private String name;
+
+ public DateTime getAOSDate() {
+ return aos.getDate();
+ }
+
+ public DateTime getLOSDate() {
+ if (los != null) return los.getDate();
+ else return aos.getDate();
+ }
+
+ public long getDuration() {
+ if (aos != null && los != null) {
+ duration = los.getDate().getMillis() - aos.getDate().getMillis();
+ }
+ return duration;
+ }
+
+ // Compare method
+ public int compareTo(Object obj) {
+
+ return this.getAOSDate().compareTo(((SatellitePassfromGroundStation) obj).getAOSDate());
+ }
+
+ public SatellitePositionfromGroundStation getAos() {
+ return aos;
+ }
+
+ public void setAos(SatellitePositionfromGroundStation aos) {
+ this.aos = aos;
+ name = aos.getSatelliteName();
+ }
+
+ public SatellitePositionfromGroundStation getLos() {
+ return los;
+ }
+
+ public void setLos(SatellitePositionfromGroundStation los) {
+ this.los = los;
+ duration = this.getDuration();
+ }
+
+ public SatellitePositionfromGroundStation getTca() {
+ return tca;
+ }
+
+ public void setTca(SatellitePositionfromGroundStation tca) {
+ this.tca = tca;
+ }
+
+ @Override
+ public String toString() {
+
+ return "Passage [ \r\n aos="
+ + aos
+ + ", \r\n los="
+ + los
+ + ", \r\n tca="
+ + tca
+ + ", duration="
+ + duration
+ + "]";
+ }
+
+ public void satName(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ public boolean overlaps(SatellitePassfromGroundStation other) {
+
+ boolean finishbefore = other.getLOSDate().isBefore(other.getLOSDate());
+ boolean startafter = other.getAOSDate().isBefore(other.getLOSDate());
+
+ return finishbefore || startafter;
+ }
+
+ /** @param duration the duration to set */
+ public final synchronized void setDuration(long duration) {
+ this.duration = duration;
+ }
+
+ /** @param name the name to set */
+ public final synchronized void setName(String name) {
+ this.name = name;
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/SatellitePositionfromGroundStation.java b/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/SatellitePositionfromGroundStation.java
new file mode 100644
index 0000000000000000000000000000000000000000..8d8bd8c613eb25801257653fac09703cd0854951
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/SatellitePositionfromGroundStation.java
@@ -0,0 +1,116 @@
+package org.josast.satellitePrediction;
+
+import org.joda.time.DateTime;
+
+public class SatellitePositionfromGroundStation {
+
+ /**
+ * @param satelliteName
+ * @param noradId
+ * @param azimuth
+ * @param elevation
+ * @param range
+ * @param date
+ */
+ public SatellitePositionfromGroundStation(
+ String satelliteName,
+ int noradId,
+ double azimuth,
+ double elevation,
+ double range,
+ DateTime date) {
+ super();
+ this.satelliteName = satelliteName;
+ this.noradId = noradId;
+ this.azimuth = azimuth;
+ this.elevation = elevation;
+ this.range = range;
+ this.date = date;
+ }
+
+ private String satelliteName;
+ private int noradId;
+ private double azimuth;
+ private double elevation;
+ private double range;
+ private DateTime date;
+
+ public SatellitePositionfromGroundStation() {}
+
+ /** @return the satelliteName */
+ public final synchronized String getSatelliteName() {
+ return satelliteName;
+ }
+
+ /** @param satelliteName the satelliteName to set */
+ public final synchronized void setSatelliteName(String satelliteName) {
+ this.satelliteName = satelliteName;
+ }
+
+ /** @return the noradId */
+ public final synchronized int getNoradId() {
+ return noradId;
+ }
+
+ /** @param noradId the noradId to set */
+ public final synchronized void setNoradId(int noradId) {
+ this.noradId = noradId;
+ }
+
+ /** @return the azimuth */
+ public final synchronized double getAzimuth() {
+ return azimuth;
+ }
+
+ /** @param azimuth the azimuth to set */
+ public final synchronized void setAzimuth(double azimuth) {
+ this.azimuth = azimuth;
+ }
+
+ /** @return the elevation */
+ public final synchronized double getElevation() {
+ return elevation;
+ }
+
+ /** @param elevation the elevation to set */
+ public final synchronized void setElevation(double elevation) {
+ this.elevation = elevation;
+ }
+
+ /** @return the range */
+ public final synchronized double getRange() {
+ return range;
+ }
+
+ /** @param range the range to set */
+ public final synchronized void setRange(double range) {
+ this.range = range;
+ }
+
+ /** @return the date */
+ public final synchronized DateTime getDate() {
+ return date;
+ }
+
+ /** @param date the date to set */
+ public final synchronized void setDate(DateTime date) {
+ this.date = date;
+ }
+
+ @Override
+ public String toString() {
+ return "SatellitePositionfromGroundStation [satelliteName="
+ + satelliteName
+ + ", noradId="
+ + noradId
+ + ", azimuth="
+ + azimuth
+ + ", elevation="
+ + elevation
+ + ", range="
+ + range
+ + ", date="
+ + date
+ + "]";
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/SortbyAOS.java b/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/SortbyAOS.java
new file mode 100644
index 0000000000000000000000000000000000000000..46b4139b392985e49ac7b2445fb553504d64d82a
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/SortbyAOS.java
@@ -0,0 +1,14 @@
+/** */
+package org.josast.satellitePrediction;
+
+import java.util.Comparator;
+
+/** */
+public class SortbyAOS implements Comparator {
+
+ /** */
+ @Override
+ public int compare(SatellitePassfromGroundStation o1, SatellitePassfromGroundStation o2) {
+ return o1.getAOSDate().compareTo(o2.getAOSDate());
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/SortbyLOS.java b/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/SortbyLOS.java
new file mode 100644
index 0000000000000000000000000000000000000000..a27e400b90c583a589c8598b052ed1a901484e68
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/SortbyLOS.java
@@ -0,0 +1,13 @@
+package org.josast.satellitePrediction;
+
+import java.util.Comparator;
+
+/** */
+public class SortbyLOS implements Comparator {
+
+ /** */
+ @Override
+ public int compare(SatellitePassfromGroundStation o1, SatellitePassfromGroundStation o2) {
+ return o1.getLOSDate().compareTo(o2.getLOSDate());
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/demo/SimpleDemo.java b/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/demo/SimpleDemo.java
new file mode 100644
index 0000000000000000000000000000000000000000..0eb21e5506236836c0d2ea91a311c581e9278fff
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/demo/SimpleDemo.java
@@ -0,0 +1,190 @@
+/** */
+package org.josast.satellitePrediction.demo;
+
+import java.util.List;
+import java.util.Iterator;
+
+import org.josast.keplerelement.celestrak.TleDataRetriever;
+import org.josast.satellitePrediction.InterfaceSatellitePropagation;
+import org.josast.satellitePrediction.KeplerianElementTwoLine;
+import org.josast.satellitePrediction.KeplerianElementTwoLineInterface;
+import org.josast.satellitePrediction.ManageSatellitePass;
+import org.josast.satellitePrediction.SatellitePassfromGroundStation;
+import org.josast.satellitePrediction.SatellitePositionfromGroundStation;
+import org.josast.satellitePredictionG4DPZ.SatellitePropagation;
+import org.josast.keplerelement.IKelplerianElementManager;
+import org.josast.keplerelement.IkeplerienElement;
+import org.josast.station.GroundStation;
+import org.josast.station.GroundStationInterface;
+import org.josast.satellitePrediction.SortbyAOS;
+
+import org.josast.keplerelement.file.*;
+import org.josast.satellite.ManageSatellites;
+import org.josast.satellite.SatelliteInformationInterface;
+/** */
+public class SimpleDemo {
+
+ /** */
+ public SimpleDemo() {
+ // TODO Auto-generated constructor stub
+ }
+
+ /** @param args */
+ public static void main(String[] args) {
+
+ SimpleDemo demo = new SimpleDemo();
+ demo.start();
+ }
+
+ public void start() {
+ System.out.println(" Simulation application prediction");
+
+ System.out.println(" Step 1 : configuration station sol ");
+ double latitude = 48.858365; // 48.8330;
+ double longitude = 2.294532; // -2.3330;
+ double altitude = 75;
+ String name = "test Xtophe";
+ GroundStationInterface groundStation = new GroundStation(name, altitude, longitude, latitude);
+
+ System.out.println(" Step 2 : récupération 2 line");
+ TleDataRetriever tdr = new TleDataRetriever();
+ String twoLine = tdr.getTle(47438);
+ KeplerianElementTwoLineInterface keps = new KeplerianElementTwoLine();
+ // 1 47438U 21006AB 23257.15692707 .00023015 00000-0 86002-3 0 9991
+ // 2 47438 97.3754 313.1180 0010700 125.0717 235.1527 15.27308596146216
+ String tl2test =
+ "UVSQ-SAT \n1 47438U 21006AB 23257.15692707 .00023015 00000-0 86002-3 0 9991\n2 47438 97.3754 313.1180 0010700 125.0717 235.1527 15.27308596146216";
+
+ keps.setTwoLine(tl2test);
+
+ System.out.println(tl2test);
+ InterfaceSatellitePropagation satProg = new SatellitePropagation();
+
+ System.out.println(" Step 3 : setup propagation");
+
+ satProg.setGroundStation(groundStation);
+ satProg.setSatelliteKeplerianElement(keps);
+
+ System.out.println(" Step 4 : Display curent position");
+
+ SatellitePositionfromGroundStation pos = satProg.getCurrentPosition();
+ System.out.println(pos);
+
+ System.out.println(" Step 5 : Calcul passage ");
+
+ SatellitePassfromGroundStation pass = satProg.getNextPass();
+ System.out.println(pass);
+
+ System.out.println(" Step 6 : Calcul ALL passage for 1 satellite");
+
+ List passages = satProg.getNextPass(24);
+ System.out.println(passages);
+
+ System.out.println(" Step 6 : Calcul ALL passage for N satellites");
+
+ IKelplerianElementManager kepsMngt = new KeplerianFileManagerFromUrl();
+ SatelliteInformationInterface[] listSat = kepsMngt.getSatelliteInformation();
+ System.out.println("nombre satellite " + listSat.length);
+
+ // List allPassages = new
+ // ArrayList();
+
+ ManageSatellitePass mngtSatPass = new ManageSatellitePass();
+
+ for (int i = 0; i < listSat.length; i++) {
+
+ System.out.println("" + i + " " + listSat[i].getName());
+
+ IkeplerienElement keplerElt = kepsMngt.getSatelliteKeplerianElement(listSat[i].getName());
+ // @TODO : A simplifier
+ String twoLines =
+ keplerElt.getTwoline()[0]
+ + "\r\n"
+ + keplerElt.getTwoline()[1]
+ + "\r\n"
+ + keplerElt.getTwoline()[2]
+ + "\r\n";
+ keps.setTwoLine(twoLines);
+
+ satProg.setSatelliteKeplerianElement(keps);
+ passages = satProg.getNextPass(24);
+ mngtSatPass.addSatellitePass(passages);
+ }
+
+ ManageSatellites mngSat = new ManageSatellites();
+ mngSat.setSatellites(listSat);
+ if (!mngSat.setSatellitePriority("UVSQ-SAT", 5)) {
+ System.err.println("SatNot found UVSQSAT");
+ }
+
+ if (!mngSat.setSatellitePriority("AmicalSat", 4)) {
+ System.err.println("SatNot found AmicalSat");
+ }
+
+ System.out.println("Nombre de passage calculés " + mngtSatPass.getSize());
+
+ mngtSatPass.sort(new SortbyAOS());
+ // List filtered =
+ // mngtSatPass.filter(mngtSatPass.minDurationnPredicate);
+ // System.out.println(filtered.size());
+ // mngtSatPass.setSatellitePassList(filtered);
+ // filtered = mngtSatPass.filter(mngtSatPass.minElevationPredicate);
+ // System.out.println(filtered.size());
+ System.out.println("Satellite \t AOS \t LOS \t Duration \t Max El");
+ Iterator it = mngtSatPass.getSatellitePassList().iterator();
+ while (it.hasNext()) {
+ pass = it.next();
+ System.out.println(
+ pass.getName()
+ + "\t"
+ + pass.getAOSDate()
+ + "\t"
+ + pass.getLOSDate()
+ + "\t"
+ + pass.getDuration()
+ + "\t"
+ + pass.getTca().getElevation());
+ }
+ List filtered = mngtSatPass.selectPassByPriority(mngSat);
+
+ System.out.println("Nombre de passage retenu " + filtered.size());
+ pass = null;
+ System.out.println("Satellite \t AOS \t LOS \t Duration \t Max El");
+ it = filtered.iterator();
+ while (it.hasNext()) {
+ pass = it.next();
+ System.out.println(
+ pass.getName()
+ + "\t"
+ + pass.getAOSDate()
+ + "\t"
+ + pass.getLOSDate()
+ + "\t"
+ + pass.getDuration()
+ + "\t"
+ + pass.getTca().getElevation());
+ }
+
+ // System.out.println(allPassages);
+
+ // filtrage
+
+ // int nbpassage = allPassages.size();
+ // System.out.println("nb Passage "+nbpassage );
+ // List filteredPassages = new ArrayList<>();
+ // for (int i = 0; i < nbpassage-1; i++) {
+ // boolean overlap = false;
+ // for (int j = i + 1; j < nbpassage; j++) {
+ // if (allPassages.get(i).overlaps(allPassages.get(j))) {
+ // overlap = true;
+ // break;
+ // }
+ // }
+ // if (!overlap) {
+ // filteredPassages.add(passages.get(i));
+ // }
+ // }
+ // // twoLine = tdr.getTle(keplerElt.getSatelliteNumber());
+ // System.out.println(filteredPassages.size());
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/performSatellitePass.java b/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/performSatellitePass.java
new file mode 100644
index 0000000000000000000000000000000000000000..cfd443094df87673b538549ceaf63c70df764f5f
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/satellitePrediction/performSatellitePass.java
@@ -0,0 +1,135 @@
+package org.josast.satellitePrediction;
+
+import java.util.List;
+import java.util.Timer;
+import java.util.TimerTask;
+
+import org.josast.satellite.SatelliteInformation;
+import org.josast.satellite.SatelliteInformationInterface;
+import org.josast.satellitePredictionG4DPZ.SatellitePropagation;
+import org.josast.station.GroundStation;
+import org.josast.station.GroundStationInterface;
+
+public class performSatellitePass {
+
+ private long intervalle = 1000L;
+ private Treatment treatment;
+ private EndTreatment endtreatment;
+
+ public void waitEnd() {
+ synchronized (treatment) {
+ try {
+ treatment.wait();
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ }
+
+ public performSatellitePass(
+ GroundStationInterface groundStation,
+ SatelliteInformationInterface satellite,
+ SatellitePositionfromGroundStation aos,
+ SatellitePositionfromGroundStation los) {
+ treatment = new Treatment(groundStation, satellite);
+ endtreatment = new EndTreatment(treatment);
+ Timer timer = new Timer();
+
+ System.out.println(aos.getDate());
+ System.out.println(los.getDate());
+ timer.schedule(treatment, aos.getDate().toDate(), intervalle);
+ timer.schedule(endtreatment, los.getDate().toDate());
+ }
+
+ private class Treatment extends TimerTask {
+
+ GroundStationInterface groundStation;
+ SatelliteInformationInterface satellite;
+
+ public Treatment(
+ GroundStationInterface groundStation, SatelliteInformationInterface satellite) {
+ this.groundStation = groundStation;
+ this.satellite = satellite;
+ }
+
+ @Override
+ public void run() {
+ System.out.println("compute Position");
+ KeplerianElementTwoLineInterface keps = new KeplerianElementTwoLine();
+ String tl2test =
+ "UVSQ-SAT \n1 47438U 21006AB 23257.15692707 .00023015 00000-0 86002-3 0 9991\n2 47438 97.3754 313.1180 0010700 125.0717 235.1527 15.27308596146216";
+
+ keps.setTwoLine(tl2test);
+
+ InterfaceSatellitePropagation satProg = new SatellitePropagation();
+
+ System.out.println(" Step 3 : setup propagation");
+
+ satProg.setGroundStation(groundStation);
+ satProg.setSatelliteKeplerianElement(keps);
+
+ System.out.println(" Step 4 : Display curent position");
+
+ SatellitePositionfromGroundStation pos = satProg.getCurrentPosition();
+ System.out.println(pos);
+ }
+ }
+
+ private class EndTreatment extends TimerTask {
+
+ public EndTreatment(Treatment treatment) {}
+
+ @Override
+ public void run() {
+ treatment.cancel();
+ }
+ }
+
+ public static void main(String[] args) {
+ System.out.println(" Step 1 : configuration station sol ");
+ double latitude = 48.858365; // 48.8330;
+ double longitude = 2.294532; // -2.3330;
+ double altitude = 75;
+ String name = "test Xtophe";
+ GroundStationInterface groundStation = new GroundStation(name, altitude, longitude, latitude);
+ SatelliteInformationInterface sat = new SatelliteInformation("UVSQ-SAT", 47438);
+
+ KeplerianElementTwoLineInterface keps = new KeplerianElementTwoLine();
+ String tl2test =
+ "UVSQ-SAT \n1 47438U 21006AB 23257.15692707 .00023015 00000-0 86002-3 0 9991\n2 47438 97.3754 313.1180 0010700 125.0717 235.1527 15.27308596146216";
+
+ keps.setTwoLine(tl2test);
+
+ InterfaceSatellitePropagation satProg = new SatellitePropagation();
+
+ System.out.println(" Step 3 : setup propagation");
+
+ satProg.setGroundStation(groundStation);
+ satProg.setSatelliteKeplerianElement(keps);
+
+ System.out.println(" Step 4 : Display curent position");
+
+ SatellitePositionfromGroundStation pos = satProg.getCurrentPosition();
+ System.out.println(pos);
+
+ System.out.println(" Step 5 : Calcul passage ");
+
+ SatellitePassfromGroundStation pass = satProg.getNextPass();
+ System.out.println(pass);
+
+ System.out.println(" Step 6 : Calcul ALL passage for 1 satellite");
+
+ List passages = satProg.getNextPass(24);
+ System.out.println(passages);
+
+ if (passages.size() > 0) {
+ SatellitePassfromGroundStation passa = passages.get(0);
+ performSatellitePass perf =
+ new performSatellitePass(groundStation, sat, passa.getAos(), passa.getLos());
+ perf.waitEnd();
+ } else {
+ System.out.println("not found");
+ }
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/satellitePredictionG4DPZ/SatellitePropagation.java b/ApplicationJMultisat/src/main/java/org/josast/satellitePredictionG4DPZ/SatellitePropagation.java
new file mode 100644
index 0000000000000000000000000000000000000000..765137be10a410cd29df4ae576c48c783d311e9c
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/satellitePredictionG4DPZ/SatellitePropagation.java
@@ -0,0 +1,182 @@
+package org.josast.satellitePredictionG4DPZ;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.josast.satellitePrediction.InterfaceSatellitePropagation;
+import org.josast.satellitePrediction.KeplerianElementTwoLineInterface;
+import org.josast.satellitePrediction.SatellitePassfromGroundStation;
+import org.josast.satellitePrediction.SatellitePositionfromGroundStation;
+import org.josast.station.GroundStationInterface;
+
+import uk.me.g4dpz.satellite.GroundStationPosition;
+import uk.me.g4dpz.satellite.SatPos;
+import uk.me.g4dpz.satellite.Satellite;
+import uk.me.g4dpz.satellite.SatelliteFactory;
+import uk.me.g4dpz.satellite.TLE;
+
+public class SatellitePropagation implements InterfaceSatellitePropagation {
+
+ private GroundStationInterface groundStation;
+ private GroundStationPosition groundStationPos;
+ Satellite satellite;
+
+ public void setGroundStation(GroundStationInterface groundStation) {
+ this.groundStation = groundStation;
+ groundStationPos =
+ new GroundStationPosition(
+ groundStation.getLatitude(),
+ groundStation.getLongitude(),
+ groundStation.getAltitude(),
+ groundStation.getName());
+ }
+
+ public GroundStationInterface getGroundStation() {
+ return groundStation;
+ }
+
+ public SatellitePositionfromGroundStation getCurrentPosition() {
+ DateTime timeNow = new DateTime(DateTimeZone.UTC);
+ SatPos satellitePosition = satellite.getPosition(groundStationPos, timeNow.toDate());
+ SatellitePositionfromGroundStation satPos =
+ new SatellitePositionfromGroundStation(
+ satellite.getTLE().getName(),
+ satellite.getTLE().getCatnum(),
+ satellitePosition.getAzimuth(),
+ satellitePosition.getElevation(),
+ satellitePosition.getRange(),
+ timeNow);
+
+ return satPos;
+ }
+
+ public SatellitePositionfromGroundStation getPosition(DateTime date) {
+ return null;
+ }
+
+ public SatellitePassfromGroundStation getNextPass() {
+ SatellitePassfromGroundStation pass = null;
+ DateTime timeNow = new DateTime(DateTimeZone.UTC);
+ DateTime timeNowRef = timeNow.plusDays(1);
+ SatPos satellitePosition = null;
+ SatPos satellitePositionPrev = null;
+ boolean visible = false;
+ DateTime timeTca = null;
+
+ boolean found = false;
+ boolean timeOut = false;
+
+ while (!found && !timeOut) {
+
+ // for (int j = 0; j < 10000; j++) {
+
+ satellitePosition = satellite.getPosition(groundStationPos, timeNow.toDate());
+
+ // satPos[i] = calcualteCurrentPosition(timeNow, list.get(i), groundStation);
+ if (satellitePosition.getElevation() > 0 && visible == false) {
+ pass = new SatellitePassfromGroundStation();
+ pass.setAos(convertFrom(satellitePosition, timeNow));
+ // System.out.println("AOS :"+ pass.getAos());
+ visible = true;
+ satellitePositionPrev = satellitePosition;
+
+ } else if (satellitePosition.getElevation() < 0 && visible == true) {
+ pass.setLos(convertFrom(satellitePosition, timeNow));
+ // System.out.println("LOS :"+ pass.getLos());
+ visible = false;
+ found = true;
+ }
+
+ if (visible) {
+ if (satellitePositionPrev.getElevation() < satellitePosition.getElevation()) {
+ satellitePositionPrev = satellitePosition;
+ timeTca = timeNow;
+ }
+ }
+ timeNow = timeNow.plus(250);
+ if (timeNow.compareTo(timeNowRef) > 0) {
+ timeOut = true;
+ }
+ }
+ if (satellitePositionPrev != null) {
+ pass.setTca(convertFrom(satellitePositionPrev, timeTca));
+ }
+
+ return pass;
+ }
+
+ @Override
+ public void setSatelliteKeplerianElement(KeplerianElementTwoLineInterface keplerien) {
+
+ TLE tle = new TLE(keplerien.getTwoLine());
+ satellite = SatelliteFactory.createSatellite(tle);
+ }
+
+ private SatellitePositionfromGroundStation convertFrom(SatPos satellitePosition, DateTime time) {
+
+ return new SatellitePositionfromGroundStation(
+ satellite.getTLE().getName(),
+ satellite.getTLE().getCatnum(),
+ satellitePosition.getAzimuth() / (Math.PI * 2.0) * 360.0,
+ satellitePosition.getElevation() / (Math.PI * 2.0) * 360.0,
+ satellitePosition.getRange(),
+ time);
+ }
+
+ @Override
+ public List getNextPass(int hour) {
+
+ List listPassage =
+ new ArrayList();
+ SatellitePassfromGroundStation pass = null;
+ DateTime timeNow = new DateTime(DateTimeZone.UTC);
+ DateTime timeNowRef = timeNow.plusHours(hour);
+ SatPos satellitePosition = null;
+ SatPos satellitePositionPrev = null;
+ boolean visible = false;
+ DateTime timeTca = null;
+
+ boolean timeOut = false;
+
+ while (!timeOut) {
+
+ // for (int j = 0; j < 10000; j++) {
+
+ satellitePosition = satellite.getPosition(groundStationPos, timeNow.toDate());
+
+ // satPos[i] = calcualteCurrentPosition(timeNow, list.get(i), groundStation);
+ if (satellitePosition.getElevation() > 0 && visible == false) {
+ pass = new SatellitePassfromGroundStation();
+ pass.setAos(convertFrom(satellitePosition, timeNow));
+ // System.out.println("AOS :"+ pass.getAos());
+ visible = true;
+ satellitePositionPrev = satellitePosition;
+
+ } else if (satellitePosition.getElevation() < 0 && visible == true) {
+ pass.setLos(convertFrom(satellitePosition, timeNow));
+ // System.out.println("LOS :"+ pass.getLos());
+ visible = false;
+
+ if (satellitePositionPrev != null) {
+ pass.setTca(convertFrom(satellitePositionPrev, timeTca));
+ }
+ listPassage.add(pass);
+ }
+
+ if (visible) {
+ if (satellitePositionPrev.getElevation() < satellitePosition.getElevation()) {
+ satellitePositionPrev = satellitePosition;
+ timeTca = timeNow;
+ }
+ }
+ timeNow = timeNow.plus(250);
+ if (timeNow.compareTo(timeNowRef) > 0) {
+ timeOut = true;
+ }
+ }
+
+ return listPassage;
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/station/GroundStation.java b/ApplicationJMultisat/src/main/java/org/josast/station/GroundStation.java
new file mode 100644
index 0000000000000000000000000000000000000000..134fe6fb83b94e65895200f7786948646c057a49
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/station/GroundStation.java
@@ -0,0 +1,128 @@
+/** */
+package org.josast.station;
+
+/**
+ * Cette classe représente une station au sol pour un radioamateur. Elle contient les informations
+ * suivantes : nom, altitude, longitude et latitude.
+ */
+public class GroundStation implements GroundStationInterface {
+ private String nom;
+ private double altitude;
+ private double longitude;
+ private double latitude;
+
+ /**
+ * Constructeur de la classe GroundStation.
+ *
+ * @param nom Le nom de la station.
+ * @param altitude L'altitude de la station.
+ * @param longitude La longitude de la station.
+ * @param latitude La latitude de la station.
+ */
+ public GroundStation(String nom, double altitude, double longitude, double latitude) {
+ this.nom = nom;
+ this.altitude = altitude;
+ this.longitude = longitude;
+ this.latitude = latitude;
+ }
+
+ /**
+ * Retourne le nom de la station.
+ *
+ * @return Le nom de la station.
+ */
+ @Override
+ public String getName() {
+ return nom;
+ }
+
+ /**
+ * Modifie le nom de la station.
+ *
+ * @param nom Le nouveau nom de la station.
+ */
+ @Override
+ public void setName(String nom) {
+ this.nom = nom;
+ }
+
+ /**
+ * Retourne l'altitude de la station.
+ *
+ * @return L'altitude de la station.
+ */
+ @Override
+ public double getAltitude() {
+ return altitude;
+ }
+
+ /**
+ * Modifie l'altitude de la station.
+ *
+ * @param altitude La nouvelle altitude de la station.
+ */
+ @Override
+ public void setAltitude(double altitude) {
+ this.altitude = altitude;
+ }
+
+ /**
+ * Retourne la longitude de la station.
+ *
+ * @return La longitude de la station.
+ */
+ @Override
+ public double getLongitude() {
+ return longitude;
+ }
+
+ /**
+ * Modifie la longitude de la station.
+ *
+ * @param longitude La nouvelle longitude de la station.
+ */
+ @Override
+ public void setLongitude(double longitude) {
+ this.longitude = longitude;
+ }
+
+ /**
+ * Retourne la latitude de la station.
+ *
+ * @return La latitude de la station.
+ */
+ @Override
+ public double getLatitude() {
+ return latitude;
+ }
+
+ /**
+ * Modifie la latitude de la station.
+ *
+ * @param latitude La nouvelle latitude de la station.
+ */
+ @Override
+ public void setLatitude(double latitude) {
+ this.latitude = latitude;
+ }
+
+ /**
+ * Retourne une chaîne de caractères représentant la station.
+ *
+ * @return Une chaîne de caractères représentant la station.
+ */
+ @Override
+ public String toString() {
+ return "GroundStation{"
+ + "nom='"
+ + nom
+ + '\''
+ + ", altitude="
+ + altitude
+ + ", longitude="
+ + longitude
+ + ", latitude="
+ + latitude
+ + '}';
+ }
+}
diff --git a/ApplicationJMultisat/src/main/java/org/josast/station/GroundStationInterface.java b/ApplicationJMultisat/src/main/java/org/josast/station/GroundStationInterface.java
new file mode 100644
index 0000000000000000000000000000000000000000..babb57178abd59d49185550fa7fe3276de4c22a5
--- /dev/null
+++ b/ApplicationJMultisat/src/main/java/org/josast/station/GroundStationInterface.java
@@ -0,0 +1,67 @@
+package org.josast.station;
+
+public interface GroundStationInterface {
+
+ /**
+ * Retourne le nom de la station.
+ *
+ * @return Le nom de la station.
+ */
+ String getName();
+
+ /**
+ * Modifie le nom de la station.
+ *
+ * @param nom Le nouveau nom de la station.
+ */
+ void setName(String nom);
+
+ /**
+ * Retourne l'altitude de la station.
+ *
+ * @return L'altitude de la station.
+ */
+ double getAltitude();
+
+ /**
+ * Modifie l'altitude de la station.
+ *
+ * @param altitude La nouvelle altitude de la station.
+ */
+ void setAltitude(double altitude);
+
+ /**
+ * Retourne la longitude de la station.
+ *
+ * @return La longitude de la station.
+ */
+ double getLongitude();
+
+ /**
+ * Modifie la longitude de la station.
+ *
+ * @param longitude La nouvelle longitude de la station.
+ */
+ void setLongitude(double longitude);
+
+ /**
+ * Retourne la latitude de la station.
+ *
+ * @return La latitude de la station.
+ */
+ double getLatitude();
+
+ /**
+ * Modifie la latitude de la station.
+ *
+ * @param latitude La nouvelle latitude de la station.
+ */
+ void setLatitude(double latitude);
+
+ /**
+ * Retourne une chaîne de caractères représentant la station.
+ *
+ * @return Une chaîne de caractères représentant la station.
+ */
+ String toString();
+}
diff --git a/ApplicationJMultisat/src/main/resources/log4j2.xml b/ApplicationJMultisat/src/main/resources/log4j2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ee32a7df9847f1b4b6937c2f44fd2e50b550d92b
--- /dev/null
+++ b/ApplicationJMultisat/src/main/resources/log4j2.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ApplicationJMultisat/src/main/resources/org/josast/application/dialogApplication.fxml b/ApplicationJMultisat/src/main/resources/org/josast/application/dialogApplication.fxml
new file mode 100644
index 0000000000000000000000000000000000000000..9ea91518e3610cb468afc6fb9cea655f2fecfd12
--- /dev/null
+++ b/ApplicationJMultisat/src/main/resources/org/josast/application/dialogApplication.fxml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ApplicationJMultisat/src/main/resources/org/josast/application/multisat.fxml b/ApplicationJMultisat/src/main/resources/org/josast/application/multisat.fxml
new file mode 100644
index 0000000000000000000000000000000000000000..377cf9fc2d3abdb263c2bcd6293b91bad270df23
--- /dev/null
+++ b/ApplicationJMultisat/src/main/resources/org/josast/application/multisat.fxml
@@ -0,0 +1,309 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ApplicationJMultisat/src/main/resources/org/josast/application/multisat2.fxml b/ApplicationJMultisat/src/main/resources/org/josast/application/multisat2.fxml
new file mode 100644
index 0000000000000000000000000000000000000000..78423f4d33ed48689babe8c759fb8505c3cca28c
--- /dev/null
+++ b/ApplicationJMultisat/src/main/resources/org/josast/application/multisat2.fxml
@@ -0,0 +1,239 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ApplicationJMultisat/src/main/resources/org/josast/application/primary.fxml b/ApplicationJMultisat/src/main/resources/org/josast/application/primary.fxml
new file mode 100644
index 0000000000000000000000000000000000000000..dd7298f2010a0878f3643dda5ca06e9d67496b84
--- /dev/null
+++ b/ApplicationJMultisat/src/main/resources/org/josast/application/primary.fxml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ApplicationJMultisat/src/main/resources/org/josast/application/secondary.fxml b/ApplicationJMultisat/src/main/resources/org/josast/application/secondary.fxml
new file mode 100644
index 0000000000000000000000000000000000000000..6f6bdfbc259ba2c8dd39b8a9f4d092d1a9f94ad6
--- /dev/null
+++ b/ApplicationJMultisat/src/main/resources/org/josast/application/secondary.fxml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ApplicationJMultisat/src/test/java/org/josast/essai/.gitkeep b/ApplicationJMultisat/src/test/java/org/josast/essai/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/ApplicationJMultisat/src/test/java/org/josast/essai/TleDataRetrieverTest.java b/ApplicationJMultisat/src/test/java/org/josast/essai/TleDataRetrieverTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..87ad8cec83934642b48c6917fe7a890c7ffcac1c
--- /dev/null
+++ b/ApplicationJMultisat/src/test/java/org/josast/essai/TleDataRetrieverTest.java
@@ -0,0 +1,30 @@
+package org.josast.essai;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.josast.keplerelement.celestrak.TleDataRetriever;
+import org.junit.jupiter.api.*;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
+
+public class TleDataRetrieverTest {
+
+ /** Static method run before everything else */
+ @BeforeAll
+ static void setUpBeforeAll() {}
+
+ /** Setup method called before each of the test methods */
+ @BeforeEach
+ void setUpBeforeEach() {}
+
+ /** Simple test case */
+ @Test
+ void dummy1() {
+ // Expected result is the first argument, value to be tested is the second.
+ // The message is optional.
+ assertEquals("foo", "f".concat("oo"), "fooo?");
+ System.out.println("test dumy ");
+ TleDataRetriever tdr = new TleDataRetriever();
+ System.out.println(tdr.getTle(25544));
+ }
+}
diff --git a/ApplicationJMultisat/src/test/java/org/josast/essai/TleManagerTest.java b/ApplicationJMultisat/src/test/java/org/josast/essai/TleManagerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..66b44157eedf620b2afa8caf274505f7bdbb039a
--- /dev/null
+++ b/ApplicationJMultisat/src/test/java/org/josast/essai/TleManagerTest.java
@@ -0,0 +1,41 @@
+package org.josast.essai;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.josast.keplerelement.celestrak.KeplerianElementManager;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.util.List;
+
+public class TleManagerTest {
+
+ private KeplerianElementManager manager;
+
+ @BeforeEach
+ public void setUp() {
+ manager = new KeplerianElementManager();
+ }
+
+ @Test
+ public void testAddSatellite() {
+
+ List satelliteIds = manager.getSatelliteIds();
+ int nb = satelliteIds.size();
+ manager.addSatellite(47438);
+ satelliteIds = manager.getSatelliteIds();
+ assertEquals(nb + 1, satelliteIds.size());
+ }
+
+ @Test
+ public void testUpdateSatellite() {}
+
+ @Test
+ public void testUpdateAllSatellites() {}
+
+ @Test
+ public void testGetSatelliteIds() {}
+
+ @Test
+ public void testGetElements() {}
+}
diff --git a/ApplicationJMultisat/src/test/java/org/josast/keplerelement/IkeplerienElementTest.java b/ApplicationJMultisat/src/test/java/org/josast/keplerelement/IkeplerienElementTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..c0f6be56fe77e55d9de68057dff9c6f072d10a0b
--- /dev/null
+++ b/ApplicationJMultisat/src/test/java/org/josast/keplerelement/IkeplerienElementTest.java
@@ -0,0 +1,57 @@
+package org.josast.keplerelement;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.josast.keplerelement.file.Read2line;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+public class IkeplerienElementTest {
+
+ private static KeplerienElement[] KE;
+
+ /** Static method run before everything else */
+ @BeforeAll
+ static void setUpBeforeAll() {
+
+ Read2line tab[];
+ tab = Read2line.readTleFile("src/test/input/amateur.txt");
+ try {
+ KE = new KeplerienElement[tab.length];
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ for (int i = 0; i < tab.length; i++) {
+
+ try {
+ KE[i] = new KeplerienElement(tab[i]);
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ // System.out.println(KE[i].toStringAll());
+ }
+ }
+
+ public void IkeplerienElementTest2() {}
+
+ @Test
+ public void testGetName() {
+ assertEquals("AMSAT-ECHO", KE[0].getName());
+ assertEquals("ISS_(ZARYA)", KE[1].getName());
+ }
+
+ @Test
+ public void testGetSatelliteNumber() {
+ assertEquals(28375, KE[0].getSatelliteNumber());
+ assertEquals(25544, KE[1].getSatelliteNumber());
+ }
+
+ @Test
+ public void testIsGeostationary() {
+ assertEquals(false, KE[0].isGeostationary());
+ assertEquals(false, KE[1].isGeostationary());
+ }
+}
diff --git a/ApplicationJMultisat/src/test/java/org/josast/keplerelement/KeplerianFileManagerTest.java b/ApplicationJMultisat/src/test/java/org/josast/keplerelement/KeplerianFileManagerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..2652d02fa8a7d5787582945d03462f876bbb72e6
--- /dev/null
+++ b/ApplicationJMultisat/src/test/java/org/josast/keplerelement/KeplerianFileManagerTest.java
@@ -0,0 +1,55 @@
+/** */
+package org.josast.keplerelement;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.josast.keplerelement.file.KeplerianFileManager;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+/** @author XTOPHE */
+public class KeplerianFileManagerTest {
+
+ private static KeplerianFileManager KFM;
+
+ /** Static method run before everything else */
+ @BeforeAll
+ static void setUpBeforeAll() {
+
+ KFM = new KeplerianFileManager("src/test/input/amateur.txt");
+ }
+
+ @Test
+ public void testGetListeSatellite() {
+ String liste[] = KFM.getListeSatelliteName();
+ assertEquals("AMSAT-ECHO", liste[0]);
+ assertEquals("ISS_(ZARYA)", liste[1]);
+ }
+
+ @Test
+ public void testReload() {
+ assertEquals(0, KFM.reload());
+ }
+
+ @Test
+ public void testGetSatelliteTLE() {
+ IkeplerienElement tle = KFM.getSatelliteKeplerianElement("AMSAT-ECHO");
+ System.out.println(tle);
+ assertEquals("AMSAT-ECHO", tle.getName());
+ assertEquals(154.3239, tle.getArgumentOfPerigeeDegree());
+ assertEquals(Math.toRadians(154.3239), tle.getArgumentOfPerigeeRadian());
+ assertEquals(0.0084769, tle.getEccentricity(), 1E-7);
+ assertEquals(4201.67056541, tle.getEpochOrbit());
+ assertEquals(2.4E-7, tle.getFirstTimeDerivative());
+ assertEquals(98.2594, tle.getInclinationDegree(), 1E-7);
+ assertEquals(Math.toRadians(98.2594), tle.getInclinationRadian(), 1E-7);
+ assertEquals(206.2206, tle.getMeanAnomalyDegree());
+ assertEquals(Math.toRadians(206.2206), tle.getMeanAnomalyRadian());
+ assertEquals(14.4037446, tle.getMeanMotion());
+ }
+
+ @Test
+ public void testGetNumberOfSatellite() {
+ assertEquals(2, KFM.getNumberOfSatellite());
+ }
+}
diff --git a/ApplicationJMultisat/src/test/java/org/josast/predict/PredictTest.java b/ApplicationJMultisat/src/test/java/org/josast/predict/PredictTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..9566acbc56f7c8d9f2264b72bf462ba8db8edd23
--- /dev/null
+++ b/ApplicationJMultisat/src/test/java/org/josast/predict/PredictTest.java
@@ -0,0 +1,58 @@
+/** */
+package org.josast.predict;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.josast.satellitePredictionG4DPZ.SatellitePropagation;
+import org.josast.station.GroundStation;
+import org.josast.station.GroundStationInterface;
+import org.josast.keplerelement.celestrak.TleDataRetriever;
+import org.josast.satellitePrediction.InterfaceSatellitePropagation;
+import org.josast.satellitePrediction.KeplerianElementTwoLine;
+import org.josast.satellitePrediction.KeplerianElementTwoLineInterface;
+import org.josast.satellitePrediction.SatellitePassfromGroundStation;
+import org.josast.satellitePrediction.SatellitePositionfromGroundStation;
+import org.josast.satellitePrediction.demo.SimpleDemo;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import uk.me.g4dpz.satellite.GroundStationPosition;
+import uk.me.g4dpz.satellite.SatPos;
+import uk.me.g4dpz.satellite.Satellite;
+import uk.me.g4dpz.satellite.SatelliteFactory;
+import uk.me.g4dpz.satellite.TLE;
+
+/** */
+public class PredictTest {
+
+ /** @throws java.lang.Exception */
+ @BeforeAll
+ public static void setUpBeforeClass() throws Exception {}
+
+ /** @throws java.lang.Exception */
+ @AfterAll
+ public static void tearDownAfterClass() throws Exception {}
+
+ /** @throws java.lang.Exception */
+ @BeforeEach
+ public void setUp() throws Exception {}
+
+ /** @throws java.lang.Exception */
+ @AfterEach
+ public void tearDown() throws Exception {}
+
+ @Test
+ public void test() {
+
+ SimpleDemo demo = new SimpleDemo();
+ demo.start();
+ }
+}
diff --git a/ApplicationJMultisat/src/test/java/org/josast/test/GroundStationTest.java b/ApplicationJMultisat/src/test/java/org/josast/test/GroundStationTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..2b57306a488052d76a2ef31c96f7e05e12392072
--- /dev/null
+++ b/ApplicationJMultisat/src/test/java/org/josast/test/GroundStationTest.java
@@ -0,0 +1,79 @@
+package org.josast.test;
+
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.josast.station.GroundStation;
+import org.josast.station.GroundStationInterface;
+import org.junit.jupiter.api.BeforeAll;
+
+public class GroundStationTest {
+
+ private static GroundStationInterface station;
+
+ @BeforeAll
+ static void setUpBeforeAll() {
+
+ station = new GroundStation("Station 1", 100.0, 10.0, 20.0);
+ }
+
+ @Test
+ public void testGetNom() {
+ station = new GroundStation("Station 1", 100.0, 10.0, 20.0);
+ assertEquals("Station 1", station.getName());
+ }
+
+ @Test
+ public void testSetNom() {
+
+ station.setName("Station 2");
+ assertEquals("Station 2", station.getName());
+ }
+
+ @Test
+ public void testGetAltitude() {
+
+ assertEquals(200.0, station.getAltitude());
+ }
+
+ @Test
+ public void testSetAltitude() {
+ station = new GroundStation("Station 1", 100.0, 10.0, 20.0);
+ station.setAltitude(200.0);
+ assertEquals(200.0, station.getAltitude());
+ }
+
+ @Test
+ public void testGetLongitude() {
+
+ assertEquals(10.0, station.getLongitude());
+ }
+
+ @Test
+ public void testSetLongitude() {
+ station = new GroundStation("Station 1", 100.0, 10.0, 20.0);
+ station.setLongitude(30.0);
+ assertEquals(30.0, station.getLongitude());
+ }
+
+ @Test
+ public void testGetLatitude() {
+ station = new GroundStation("Station 1", 100.0, 10.0, 20.0);
+ assertEquals(20.0, station.getLatitude());
+ }
+
+ @Test
+ public void testSetLatitude() {
+
+ station.setLatitude(40.0);
+ assertEquals(40.0, station.getLatitude());
+ }
+
+ @Test
+ public void testToString() {
+
+ assertEquals(
+ "GroundStation{nom='Station 1', altitude=100.0, longitude=30.0, latitude=20.0}",
+ station.toString());
+ }
+}
diff --git a/ApplicationKissTool/SatelliteNoradList.json b/ApplicationKissTool/config/SatelliteNoradList.json
similarity index 53%
rename from ApplicationKissTool/SatelliteNoradList.json
rename to ApplicationKissTool/config/SatelliteNoradList.json
index f3555c040bb4e4efd99843b3d217b65cf4a7b824..5c742bc611d39b2ea12442aa6a525b6e582b21b9 100644
--- a/ApplicationKissTool/SatelliteNoradList.json
+++ b/ApplicationKissTool/config/SatelliteNoradList.json
@@ -7,11 +7,21 @@
{
"noradId": 99999,
"name": "Defaut",
- "indicatif": ""
+ "indicatif":""
},
{
"noradId": 43132,
"name": "Picsat",
"indicatif": "PICSAT"
+ },
+ {
+ "noradId": 99997,
+ "name": "InspireSat 7",
+ "indicatif": "UVSQPL"
+ } ,
+ {
+ "noradId": 99996,
+ "name": "SPINO",
+ "indicatif": "SPINOD"
}
]
\ No newline at end of file
diff --git a/ApplicationKissTool/pom.xml b/ApplicationKissTool/pom.xml
index 279ea2923758986d2e390431dcf7c202ec84cd8e..f79c92a4bae46f2de2ab685ea0da917f71efcca1 100644
--- a/ApplicationKissTool/pom.xml
+++ b/ApplicationKissTool/pom.xml
@@ -1,37 +1,42 @@
-
- 4.0.0
-
-
+
+ 4.0.0
+
+
org.josast
JOSAST-parent
0.0.2
-
-
- ApplicationKissTool
-
-
- UTF-8
- 11
- 11
-
- 0.1.6
+
+ ApplicationKissTool
+
+
+
+
+
+
+
+ 0.1.6
${josast.version}
${josast.version}
${josast.version}
- 11.0.2
+ 22.0.2
+ 0.0.2
+ 0.10
-
-
- com.google.code.gson
- gson
- 2.10
-
-
+
+
+ com.google.code.gson
+ gson
+ 2.10.1
+
+
+
org.openjfx
javafx-controls
${JavaFx.version}
@@ -66,30 +71,45 @@
javafx-swing
${JavaFx.version}
+
+
-
- org.json
- json
- 20220924
-
-
-
-
+
+ org.json
+ json
+ 20240303
+
+
+
+
org.josast
ModuleUVSQsatTelemetry
0.0.2
-
+
+
+ org.josast
+ ModuleInspireSat7
+ 0.0.2
+
+
+
+ org.josast
+ ModuleSpino
+ 0.0.2
+
+
+
io.kaitai
kaitai-struct-runtime
- 0.10
+ ${kaitai-struct-runtime-version}
name.valery1707.kaitai
kaitai-maven-plugin
${kaitai-maven-plugin-version}
-
+
org.josast
ModuleSIDS
${ModuleSIDS.version}
@@ -104,31 +124,64 @@
ModuleConfig
${ModuleConfig.version}
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 11
-
-
-
- org.openjfx
- javafx-maven-plugin
- 0.0.8
-
- org.josast.ApplicationKissTool.App
-
-
-
+
+
+
+ org.slf4j
+ slf4j-api
+ 2.0.5
+
+
+ ch.qos.logback
+ logback-classic
+ 1.4.6
+
+
+ ch.qos.logback
+ logback-core
+ 1.4.6
+
+
+
+
+
+
+
+
+ maven-assembly-plugin
+
+
+
+ src/main/assembly/assembly.xml
+
+
+
+
+ make-assembly
+ package
+
+ single
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 11
+
+
+
+
org.apache.maven.plugins
maven-assembly-plugin
- make-assembly
+ make-assembly
package
single
@@ -139,7 +192,7 @@
- org.josast.ApplicationKissTool.App
+ org.josast.kisstool.App
@@ -148,6 +201,91 @@
+
+
+
+ org.panteleyev
+ jpackage-maven-plugin
+ 1.6.4
+
+
+ KissTool
+ ${project.version}
+ josast.org
+ C:\01-projets\josastgit\jdkfx-11
+ ApplicationKissTool-0.0.2-jar-with-dependencies.jar
+
+
+
+
+ target/jmods
+
+ target
+ target/dist
+
+ --enable-preview
+ -Dfile.encoding=UTF-8
+
+
+
+
+
+ win
+
+
+ true
+ true
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+ target/jmods
+
+
+
+
+
+
+ org.openjfx
+ javafx-maven-plugin
+ 0.0.8
+
+ true
+ 2
+ true
+ true
+ ApplicationKissTool
+ ApplicationKissTool
+ ApplicationKissToolZip
+ org.josast.kisstool.App
+
+
+
+
+
\ No newline at end of file
diff --git a/ApplicationKissTool/src/main/assembly/assembly.xml b/ApplicationKissTool/src/main/assembly/assembly.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e22718c320ecb975ae41c89071eeb08864caeb77
--- /dev/null
+++ b/ApplicationKissTool/src/main/assembly/assembly.xml
@@ -0,0 +1,20 @@
+
+ jar-with-dependencies
+
+ jar
+
+
+
+
+ metaInf-services
+
+
+ metaInf-spring
+
+
+ plexus
+
+
+
\ No newline at end of file
diff --git a/ApplicationKissTool/src/main/java/module-info.java b/ApplicationKissTool/src/main/java/module-info.java
index 3f0eba0c03e0c99790bba9fe7c4484402d8c4999..9b40bdf21ee737c554529a3b5aa93e0e96e836a1 100644
--- a/ApplicationKissTool/src/main/java/module-info.java
+++ b/ApplicationKissTool/src/main/java/module-info.java
@@ -13,6 +13,9 @@ module org.josast.ApplicationKissTool {
requires org.json;
requires javafx.base;
requires com.google.gson;
+ requires java.base;
+ requires ModuleJosastGeneric;
+ requires javafx.web;
opens org.josast.ApplicationKissTool to
javafx.fxml;
diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/SatelliteNoradFile.java b/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/SatelliteNoradFile.java
deleted file mode 100644
index 3d44cd4fcec51db31cc937273c251508e9dd4210..0000000000000000000000000000000000000000
--- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/SatelliteNoradFile.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/** */
-package org.josast.ApplicationKissTool;
-
-import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
-import java.io.FileWriter;
-import java.io.Reader;
-import java.io.Writer;
-import java.nio.charset.Charset;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.logging.Logger;
-
-/** @author chris */
-public class SatelliteNoradFile {
-
- private static Logger appLogger = Logger.getLogger("AmsatLogger");
- private List SatelliteNoradList;
- private Hashtable htsat = new Hashtable<>();
-
- public List getSatelliteNoradList() {
- return new ArrayList(SatelliteNoradList);
- }
-
- public void writeFile(String file) {
- try {
- // create a list of users
-
- // create writer
- Writer writer = new FileWriter(file,Charset.forName("utf-8"));
-
- // convert users list to JSON file
- new Gson().toJson(SatelliteNoradList, writer);
-
- // close writer
- writer.close();
-
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
-
- public void readFile(String file) {
-
- try {
- // create Gson instance
- // Gson gson = new Gson();
-
- // create a reader
- Reader reader = Files.newBufferedReader(Paths.get(file));
-
- // convert JSON array to list of users
- SatelliteNoradList =
- new Gson().fromJson(reader, new TypeToken>() {}.getType());
-
- Iterator it = SatelliteNoradList.iterator();
- appLogger.info("nb sat" + SatelliteNoradList.size());
-
- while (it.hasNext()) {
- SatelliteNorad sat = it.next();
- htsat.put(sat.getCallsign(), sat);
- }
-
- // print users
- SatelliteNoradList.forEach(System.out::println);
-
- // close reader
- reader.close();
-
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
-
- public int getNorad(String callsign) {
- int norad = 0;
- SatelliteNorad sat = htsat.get(callsign);
- if (sat != null) norad = sat.getNoradId();
- return norad;
- }
-
- public void initialise() {
-
- SatelliteNoradList =
- Arrays.asList(
- new SatelliteNorad("UVSQsat", 47438, "LATMOS"),
- new SatelliteNorad("Defaut", 99999, null),
- new SatelliteNorad("Picsat", 43132, "PICSAT"));
- }
-
- /** @param args */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- SatelliteNoradFile s = new SatelliteNoradFile();
- // s.initialise();
- // s.writeFile("SatelliteNoradList.json");
- s.readFile("SatelliteNoradList.json");
- }
-}
diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/TaskManageReceivedData.java b/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/TaskManageReceivedData.java
deleted file mode 100644
index affe3dba32444c3e7d43518b3993932528c3cbea..0000000000000000000000000000000000000000
--- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/TaskManageReceivedData.java
+++ /dev/null
@@ -1,147 +0,0 @@
-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() {
-
- String rcvCallsign = ax25display.getCallsignFrom();
-
- 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());
- }
- }
- int noradframe = ctrl.getNorad(rcvCallsign);
- if (noradframe == 0) noradframe = conf.getNorad();
- ctrl.SendSids(decodedData, noradframe);
- ctrl.IncrementNbFrameTraited();
-
- } catch (Exception e) {
- displayLog("Run - error");
- displayLog(e.toString());
- e.printStackTrace();
- }
- }
- });
- }
-
- @Override
- protected String call() throws Exception {
-
- displayLog("Message Treatment Lanched");
-
- Date lastFrameTime;
- ReceivedData decodedData;
- displayLog("Waiting Data !!!");
- while (true) {
-
- decodedData = blockingQueue.take();
- // displayLog(" Data !!!");
-
- /* check frame validity */
-
- int valid = ax25display.setdata(decodedData);
-
- if ( valid == 0)
- {
- String calsignr = ax25display.getCallsignFrom();
- if (calsignr != null) {
- displayLog(" calsign" + calsignr);
- } else displayLog(" calsign not decoded");
-
- lastFrameTime = new Date();
- 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);
- mdf.setRepositoryPath(conf.getOutputFileDirectory());
- if (mdf.saveTlmData(tlmData) != 0) {
- displayLog("Error creation JSON file");
- }
-
- displayData(decodedData);
- // datamodel.IncrementReceivedFrame();
- } else
- {
- displayLog(" Frame not decoded");
- }
-
-
- // @todo : extrait le calsign
-
- // en fonction du calssign envois SIDS (ajuster le Noarad)
-
-
- }
- }
-}
diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/AlertHelper.java b/ApplicationKissTool/src/main/java/org/josast/kisstool/AlertHelper.java
similarity index 89%
rename from ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/AlertHelper.java
rename to ApplicationKissTool/src/main/java/org/josast/kisstool/AlertHelper.java
index 531eded4264ea0b5a5bb712ed888dab4f89a896f..0f209ddafabd6cfc3a2e96ef9dc4b585f6e0bcb5 100644
--- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/AlertHelper.java
+++ b/ApplicationKissTool/src/main/java/org/josast/kisstool/AlertHelper.java
@@ -1,8 +1,9 @@
-package org.josast.ApplicationKissTool;
+package org.josast.kisstool;
import javafx.scene.control.Alert;
import javafx.stage.Window;
+/** */
public class AlertHelper {
private AlertHelper() {}
@@ -11,7 +12,7 @@ public class AlertHelper {
* Display a window in order to display a message
*
* @param alertType Type of alert
- * @param owner
+ * @param owner Windows Owner
* @param title title of the windows
* @param message message to display
*/
diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/App.java b/ApplicationKissTool/src/main/java/org/josast/kisstool/App.java
similarity index 69%
rename from ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/App.java
rename to ApplicationKissTool/src/main/java/org/josast/kisstool/App.java
index 24dbec525efd628eb3fb585f48451302d140df6f..8a54e16a883389fa0121595c308dda97463199e0 100644
--- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/App.java
+++ b/ApplicationKissTool/src/main/java/org/josast/kisstool/App.java
@@ -1,4 +1,4 @@
-package org.josast.ApplicationKissTool;
+package org.josast.kisstool;
import java.io.File;
import java.io.IOException;
@@ -14,10 +14,10 @@ import javafx.stage.Stage;
/** JavaFX App */
public class App extends Application {
- private static Scene scene;
- private static FXMLLoader fxmlLoader;
+ private Scene scene;
+ private FXMLLoader fxmlLoader;
private static Logger logger = Logger.getLogger("AmsatLogger");
- private String FxmlFile = "KissTool";
+ private String FxmlFile = "KissTool";
// TaskManageReceivedData taskMngtData = null;
@@ -25,8 +25,8 @@ public class App extends Application {
public void start(Stage stage) throws IOException {
System.setProperty("glass.accessible.force", "false");
-
- scene = new Scene(loadFXML(FxmlFile), 800, 600);
+
+ scene = new Scene(loadFXML(FxmlFile), 800, 650);
stage.setScene(scene);
Controler ctrl = fxmlLoader.getController();
@@ -42,7 +42,7 @@ public class App extends Application {
stage.show();
}
- private static Parent loadFXML(String fxml) throws IOException {
+ private Parent loadFXML(String fxml) throws IOException {
fxmlLoader = new FXMLLoader(App.class.getResource(fxml + ".fxml"));
return fxmlLoader.load();
}
@@ -50,15 +50,20 @@ public class App extends Application {
public static void main(String[] args) {
// initialisation du systéme de log en premier
try {
- String path = System.getProperty("user.dir") + "/log";
+
+ String path = System.getProperty("user.home") + File.separator + ".josast";
+ path += File.separator + "kisstool" + File.separator + "kisstoolLog";
File apath = new File(path);
- if (!apath.exists()) {
- if (apath.mkdir() == false) {
- System.err.println("fail to create " + path);
- }
+ if (apath.exists()) {
+ logger.info(apath + " already exists");
+ } else if (apath.mkdirs()) {
+ logger.info(apath + " was created");
+ } else {
+ logger.severe(apath + " was not created");
}
- FileHandler fh = new FileHandler(path + "/" + "KissTool.log.xml");
+
+ FileHandler fh = new FileHandler(path + File.separator + "KissTool.log.xml");
logger.setUseParentHandlers(false);
Handler[] handlers = logger.getHandlers();
for (Handler handler : handlers) {
diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/Ax25Display.java b/ApplicationKissTool/src/main/java/org/josast/kisstool/Ax25Display.java
similarity index 62%
rename from ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/Ax25Display.java
rename to ApplicationKissTool/src/main/java/org/josast/kisstool/Ax25Display.java
index f01e3202dc9c9a46c15a25de440e77059a9bb76d..12497dadee76ce308d6279d06a007363567bbcb6 100644
--- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/Ax25Display.java
+++ b/ApplicationKissTool/src/main/java/org/josast/kisstool/Ax25Display.java
@@ -1,12 +1,11 @@
-package org.josast.ApplicationKissTool;
+package org.josast.kisstool;
import java.util.logging.Logger;
-
import org.josast.AX25.AX25DecodedData;
public class Ax25Display {
- private static Logger logger = Logger.getLogger("AmsatLogger");
+ private static Logger logger = Logger.getLogger("AmsatLogger");
ReceivedData decodedData = null;
AX25DecodedData ax25 = null;
@@ -21,21 +20,18 @@ public class Ax25Display {
return sb.toString();
}
- public int setdata( ReceivedData decodedData2) {
- int error = 0;
-
+ public int setdata(ReceivedData decodedData2) {
+ int error = 0;
+
this.decodedData = decodedData2;
- try
- {
- ax25 = new AX25DecodedData(decodedData.getData());
+ try {
+ ax25 = new AX25DecodedData(decodedData.getData());
+ } catch (Exception e) {
+ logger.severe("Error decoding AX25 : " + e.getMessage());
+ error = -1;
}
- catch (Exception e )
- {
- logger.severe("Error decoding AX25 : "+e.getMessage());
- error = -1;
- }
-
- return error;
+
+ return error;
}
public String getAx25Data() {
diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/Configuration.java b/ApplicationKissTool/src/main/java/org/josast/kisstool/Configuration.java
similarity index 84%
rename from ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/Configuration.java
rename to ApplicationKissTool/src/main/java/org/josast/kisstool/Configuration.java
index d9a07f5d1230c18035e25c66d0b2fac31b662610..4f16902f894f943f340616ac42ede25257739c8c 100644
--- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/Configuration.java
+++ b/ApplicationKissTool/src/main/java/org/josast/kisstool/Configuration.java
@@ -1,5 +1,5 @@
/** */
-package org.josast.ApplicationKissTool;
+package org.josast.kisstool;
import org.josast.property.CONFIG;
@@ -40,6 +40,11 @@ public class Configuration {
private final CONFIG conf = CONFIG.getInstance();
private boolean SIDS_Picsat = false;
private String SIDSPicsatSource = "Anonymous";
+ private String rawFile = "0";
+ private String jsonFile = "0";
+
+ private boolean rawFileBoolean = false;
+ private boolean jsonFileBoolean = false;
public static Configuration getInstance() {
return SingletonHolder.instance;
@@ -70,6 +75,20 @@ public class Configuration {
soundModemPort = conf.getProperty("soundModemPort");
OutputFileDirectory = conf.getProperty("OutputFileDirectory");
SilentMode = conf.getProperty("SilentMode");
+ rawFile = conf.getProperty("rawFile");
+ jsonFile = conf.getProperty("jsonFile");
+
+ if (rawFile.contentEquals("0")) {
+ rawFileBoolean = false;
+ } else {
+ rawFileBoolean = true;
+ }
+ if (jsonFile.contentEquals("0")) {
+ jsonFileBoolean = false;
+ } else {
+ jsonFileBoolean = true;
+ }
+
if (norads != null) {
Norad = Integer.parseInt(norads);
}
@@ -152,6 +171,8 @@ public class Configuration {
conf.setProperty("soundModemIP", this.soundModemIP);
conf.setProperty("OutputFileDirectory", OutputFileDirectory);
conf.setProperty("SilentMode", this.SilentMode);
+ conf.setProperty("rawFile", rawFile);
+ conf.setProperty("jsonFile", jsonFile);
}
public String getCallsign() {
@@ -295,4 +316,34 @@ public class Configuration {
public void setSIDSPicsatSource(String sSIDSPicsatSource) {
SIDSPicsatSource = sSIDSPicsatSource;
}
+
+ /** @return the rawFileBoolean */
+ public final synchronized boolean isRawFileBoolean() {
+ return rawFileBoolean;
+ }
+
+ /** @param rawFileBoolean the rawFileBoolean to set */
+ public final synchronized void setRawFileBoolean(boolean rawFileBoolean) {
+ this.rawFileBoolean = rawFileBoolean;
+ if (rawFileBoolean == true) {
+ rawFile = "1";
+ } else {
+ rawFile = "0";
+ }
+ }
+
+ /** @return the jsonFileBoolean */
+ public final synchronized boolean isJsonFileBoolean() {
+ return jsonFileBoolean;
+ }
+
+ /** @param jsonFileBoolean the jsonFileBoolean to set */
+ public final synchronized void setJsonFileBoolean(boolean jsonFileBoolean) {
+ this.jsonFileBoolean = jsonFileBoolean;
+ if (jsonFileBoolean == true) {
+ jsonFile = "1";
+ } else {
+ jsonFile = "0";
+ }
+ }
}
diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/Controler.java b/ApplicationKissTool/src/main/java/org/josast/kisstool/Controler.java
similarity index 79%
rename from ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/Controler.java
rename to ApplicationKissTool/src/main/java/org/josast/kisstool/Controler.java
index 78e1a21bb86d0b03daf718428443216518a904d4..a785bd41bdbd5b0e698f9f67095730873e54fc24 100644
--- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/Controler.java
+++ b/ApplicationKissTool/src/main/java/org/josast/kisstool/Controler.java
@@ -4,12 +4,15 @@
* @todo Gestion de la configuration
* @todo Gestion des envoie de trame SIDS : message de retour
*/
-package org.josast.ApplicationKissTool;
+package org.josast.kisstool;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.text.SimpleDateFormat;
+import java.util.ArrayList;
import java.util.Date;
import java.util.TimeZone;
import java.util.concurrent.BlockingQueue;
@@ -20,6 +23,7 @@ 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;
@@ -32,19 +36,27 @@ import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
+import javafx.scene.control.Tab;
+import javafx.scene.control.TableColumn;
+import javafx.scene.control.TableView;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
+import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
+import javafx.scene.web.WebEngine;
+import javafx.scene.web.WebView;
import javafx.stage.DirectoryChooser;
import javafx.stage.Stage;
import javafx.stage.Window;
import javax.imageio.ImageIO;
import org.josast.ModuleSoundModem.SoundModemConfiguration;
import org.josast.SIDS.Station;
+import org.josast.informationMessage.InformationMessage;
import org.josast.propertyHttp.ConfigHttp;
+import org.josast.telemetry.DataTelemetry;
public class Controler {
@@ -54,7 +66,7 @@ public class Controler {
private static final int STATE_SAVE = 3;
private int delayRefresh = 15; // toute les 10 mn
// @todo : vérifier la mise à jour de la variable
- private Date lastFrameTime = new Date();
+ // private Date lastFrameTime = new Date();
private static Logger appLogger = Logger.getLogger("AmsatLogger");
ConfigHttp c = new ConfigHttp("http://site.amsat-f.org/download/117487/");
@@ -63,7 +75,7 @@ public class Controler {
private ManageDataFile mdf = new ManageDataFile();
- private String version = "1.11";
+ private String version = "3.0 Beta";
@FXML private Button ButtonStart;
@FXML private Button ButtonStop;
@@ -77,6 +89,7 @@ public class Controler {
@FXML private Button ButtonFile;
@FXML private Button ButtonSerial;
@FXML private Button ButtonKiss;
+ @FXML private Button ButtonSendMessage;
@FXML private TextField FieldIP;
@FXML private TextField FieldPort;
@@ -92,6 +105,8 @@ public class Controler {
@FXML private TextField textFieldDate;
+ @FXML private TextField textFieldTimeStamps;
+
@FXML private Label LabelInformation;
@FXML private ImageView ImageViewAMSAT;
@@ -125,14 +140,39 @@ public class Controler {
@FXML private Label LastDecoded;
+ @FXML private CheckBox CheckBoxJsonFile;
+ @FXML private CheckBox CheckBoxrawfile;
+
+ @FXML private TableColumn tbcolumnName;
+ @FXML private TableColumn tbcolumnValue;
+ @FXML private TableView TableviewTelemery;
+
+ @FXML private TextField labelFrameName;
+
+ @FXML private WebView WebViewInfo;
+ @FXML private Tab infoTab;
+
+ @FXML private TextField TextFileldCallsign;
+
+ @FXML private TableView TableviewInfMsg;
+ @FXML private TableColumn tbcolumnInfDate;
+
+ @FXML private TableColumn tbcolumnInfSatelliteName;
+
+ @FXML private TableColumn tbcolumnInfMessage;
+
+ ObservableList observableListInfoMessage =
+ FXCollections.observableArrayList();
+
ScheduledExecutorService ses = Executors.newScheduledThreadPool(1);
private ScheduledFuture> scheduledFuture = null;
- private volatile BlockingQueue receivedFrame = new LinkedBlockingDeque();
+ private volatile BlockingQueue receivedFrame =
+ new LinkedBlockingDeque();
Stage primaryStage = null;
private String imgAmsat = "logoAmsat.png";
- private String imgAmicalsat = "OIP.jpg";
+ private String imgAmicalsat = "LogoJosast0.png";
private int selectedNoradId;
@@ -248,6 +288,9 @@ public class Controler {
conf.setSIDSSatnogs("0");
}
+ conf.setRawFileBoolean(CheckBoxrawfile.isSelected());
+ conf.setJsonFileBoolean(CheckBoxJsonFile.isSelected());
+
conf.save();
mdf.setRepositoryPath(conf.getOutputFileDirectory());
manageStatusinformation("Configuration Saved", "Configuration Saved");
@@ -298,8 +341,7 @@ public class Controler {
// La tache s'est correctement terminee.
manageStatusinformation(
"KISS TCP CONNECTION FAILED", "KISS TCP DISCONNECTED - Connection failed");
- displayLog(event.toString());
- displayLog(event.getSource().toString());
+ // displayLog("Connection fail :" + event.toString() + event.getSource().toString());
manageStateMMI(STATE_STOP);
CircleModem.setFill(Color.RED);
}
@@ -347,6 +389,14 @@ public class Controler {
public void initMMI() {
+ tbcolumnName.setCellValueFactory(new PropertyValueFactory<>("dataName"));
+ tbcolumnValue.setCellValueFactory(new PropertyValueFactory<>("value"));
+
+ tbcolumnInfDate.setCellValueFactory(new PropertyValueFactory<>("date"));
+ tbcolumnInfSatelliteName.setCellValueFactory(new PropertyValueFactory<>("satellite"));
+ tbcolumnInfMessage.setCellValueFactory(new PropertyValueFactory<>("message"));
+ TableviewInfMsg.setItems(observableListInfoMessage);
+
manageStatusinformation("Initialised", "KISS TOOL - LOG \r\n Initialise application");
satnorad = new SatelliteNoradFile();
satnorad.readFile("SatelliteNoradList.json");
@@ -358,40 +408,34 @@ public class Controler {
LabelAmsatSent.setText("0");
LabelPicsatSent.setText("0");
LabelSatnogsSent.setText("0");
-
+ appLogger.severe("initialisation information");
+
+ setupInfoTab();
taskMngtData = new TaskManageReceivedData(receivedFrame, this);
Thread backgroundThread = new Thread(taskMngtData);
backgroundThread.setDaemon(true);
backgroundThread.start();
-
-
-
-
-
-
+
// init Delay = , repeat the task every X Minute
/*
- * active le garbage collector
- * @todo : verifier si vraiment utile
+ * active le garbage collector
+ * @todo : verifier si vraiment utile
*/
-
+
Runnable task1 =
() -> {
- Date date = new Date();
-// if (date.getTime() - lastFrameTime.getTime() > 900000) {
-// System.gc();
+ // Date date = new Date();
+ // if (date.getTime() - lastFrameTime.getTime() > 900000) {
+ // System.gc();
// appLogger.info("System.gc();");
- // }
- // check if task are actives
- if(receivedFrame.size()!=0)
- {
- appLogger.severe("queue size greater than 0 : "+receivedFrame.size());
- appLogger.severe("State task"+ backgroundThread.getState().name());
+ // }
+ // check if task are actives
+ if (receivedFrame.size() != 0) {
+ appLogger.severe("queue size greater than 0 : " + receivedFrame.size());
+ appLogger.severe("State task" + backgroundThread.getState().name());
}
-
-
};
scheduledFuture = ses.scheduleAtFixedRate(task1, delayRefresh, delayRefresh, TimeUnit.MINUTES);
@@ -425,6 +469,8 @@ public class Controler {
CheckBoxSatPicsat.setSelected(true);
}
+ CheckBoxrawfile.setSelected(conf.isRawFileBoolean());
+ this.CheckBoxJsonFile.setSelected(conf.isJsonFileBoolean());
checkboxSilenceMode.setSelected(conf.isSilentMode());
if (checkboxSilenceMode.isSelected()) appLogger.setLevel(Level.SEVERE);
else appLogger.setLevel(Level.INFO);
@@ -530,8 +576,15 @@ public class Controler {
public void displayLog(String log) {
appLogger.info(log);
- TexAreaLog.appendText(log);
- TexAreaLog.appendText("\r\n");
+ // update of ui could be set by an other tread
+ Platform.runLater(
+ new Runnable() {
+ @Override
+ public void run() {
+ TexAreaLog.appendText(log);
+ TexAreaLog.appendText("\r\n");
+ }
+ });
}
private void manageStateMMI(int state) {
@@ -618,4 +671,58 @@ public class Controler {
int norad = satnorad.getNorad(rcvCallsign);
return norad;
}
+
+ @FXML
+ private void HandleInfoTabChange() {
+ Platform.runLater(
+ new Runnable() {
+ @Override
+ public void run() {
+ if (infoTab.isSelected()) setupInfoTab();
+ }
+ });
+ }
+
+ private void setupInfoTab() {
+
+ URL urlHelp = App.class.getResource("KissToolHelp.html");
+
+ File f = new File(urlHelp.getPath());
+
+ WebEngine engine = WebViewInfo.getEngine();
+
+ if (f.exists()) {
+ File file = new File(f.getAbsolutePath());
+ URL url = null;
+ try {
+ url = file.toURI().toURL();
+ engine.load(url.toString());
+ // engine.loadContent(" test ");
+ } catch (MalformedURLException e) {
+ appLogger.severe("Error to acces to " + f.getName());
+ }
+
+ } else {
+ appLogger.severe(f.getName() + "Not Found");
+ }
+ appLogger.severe(f.getName() + "loaded");
+ }
+
+ public void setDecodedTable(ArrayList table, String tableName) {
+ ObservableList observableList = FXCollections.observableList(table);
+ TableviewTelemery.getItems().clear();
+ TableviewTelemery.setItems(observableList);
+ labelFrameName.setText(tableName);
+ String creationdate = ISO8601DATEFORMAT.format(new Date());
+ textFieldTimeStamps.setText(creationdate);
+ }
+
+ public String getName(String rcvCallsign) {
+ return satnorad.getName(rcvCallsign);
+ }
+
+ public void displayInformationMessage(InformationMessage informationMessage) {
+
+ observableListInfoMessage.add(informationMessage.getIndex(), informationMessage);
+ }
}
diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/DisplayUVSQsat.java b/ApplicationKissTool/src/main/java/org/josast/kisstool/DisplayUVSQsat.java
similarity index 62%
rename from ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/DisplayUVSQsat.java
rename to ApplicationKissTool/src/main/java/org/josast/kisstool/DisplayUVSQsat.java
index cf444f7ac90430a0c05a639733196de05e4fd188..b7bb27654fe4e9445ca4c2a0e60ddb8518aa9755 100644
--- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/DisplayUVSQsat.java
+++ b/ApplicationKissTool/src/main/java/org/josast/kisstool/DisplayUVSQsat.java
@@ -1,19 +1,26 @@
package org.josast.ApplicationKissTool;
import io.kaitai.struct.ByteBufferKaitaiStream;
+
+import java.util.ArrayList;
import java.util.logging.Logger;
-import org.josast.uvsqsat.Frame;
+
+import org.josast.abstractclass.AFrame;
+import org.josast.telemetry.DataTelemetry;
+import org.josast.uvsqsat.DataAnalysis;
import org.josast.uvsqsat.generated.Uvsqsat;
public class DisplayUVSQsat {
- Frame frame = null;
+ DataAnalysis frame = null;
+ AFrame aframe = null;
private static Logger appLogger = Logger.getLogger("AmsatLogger");
public void setData(ReceivedData decodedData) {
try {
Uvsqsat cube = new Uvsqsat(new ByteBufferKaitaiStream(decodedData.getData()));
- frame = new Frame();
+ frame = new DataAnalysis();
frame.setUp(cube);
+ aframe = (AFrame) frame.getTelemetryData();
} catch (Exception e) {
@@ -32,4 +39,14 @@ public class DisplayUVSQsat {
sb.append("\r\n");
return sb.toString();
}
+
+ public ArrayList getTable() {
+
+ return aframe.getDataList();
+ }
+
+ public String getTableName() {
+
+ return aframe.getTelemetryName();
+ }
}
diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/LogFile.java b/ApplicationKissTool/src/main/java/org/josast/kisstool/LogFile.java
similarity index 80%
rename from ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/LogFile.java
rename to ApplicationKissTool/src/main/java/org/josast/kisstool/LogFile.java
index 06b85af96616e92062fcb303ee3fbc65fcb3dce0..b2f7709e285d77d7364ea9daa8fa0a40bbff53e7 100644
--- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/LogFile.java
+++ b/ApplicationKissTool/src/main/java/org/josast/kisstool/LogFile.java
@@ -1,5 +1,5 @@
/** */
-package org.josast.ApplicationKissTool;
+package org.josast.kisstool;
import java.io.File;
import java.io.FileWriter;
@@ -10,18 +10,21 @@ import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Logger;
+@Deprecated
/** @author christophe */
public class LogFile {
private static Logger appLogger = Logger.getLogger("AmsatLogger");
private PrintWriter pw;
+ @Deprecated
/** */
public LogFile() {
initdisplayLogFile();
}
+ @Deprecated
private void initdisplayLogFile() {
SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd-HHmmss");
@@ -35,13 +38,18 @@ public class LogFile {
}
}
try {
- pw = new PrintWriter(new FileWriter(path + "/" + formater.format(aujourdhui) + "-" + ".log",Charset.forName("utf-8")));
+ pw =
+ new PrintWriter(
+ new FileWriter(
+ path + "/" + formater.format(aujourdhui) + "-" + ".log",
+ Charset.forName("utf-8")));
} catch (IOException e) {
appLogger.severe("erreur creating log file");
appLogger.severe(e.toString());
}
}
+ @Deprecated
public void displayLog(String log) {
if (pw != null) {
pw.println(log);
diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/ManageDataFile.java b/ApplicationKissTool/src/main/java/org/josast/kisstool/ManageDataFile.java
similarity index 57%
rename from ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/ManageDataFile.java
rename to ApplicationKissTool/src/main/java/org/josast/kisstool/ManageDataFile.java
index 8a446dbcf7620571d388922ec96e791a428e2cfc..9cf895abe5f1e44726b0f10a92cb45883961ee0c 100644
--- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/ManageDataFile.java
+++ b/ApplicationKissTool/src/main/java/org/josast/kisstool/ManageDataFile.java
@@ -1,17 +1,14 @@
-package org.josast.ApplicationKissTool;
+package org.josast.kisstool;
import java.io.File;
-import java.io.FileWriter;
import java.io.IOException;
-import java.io.PrintWriter;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.json.JSONObject;
@@ -19,67 +16,52 @@ import org.json.JSONObject;
public class ManageDataFile {
private static Logger appLogger = Logger.getLogger("AmsatLogger");
- private String generateRepository = "./ouputFile";
+
private int cpt = 0;
private Path filepath;
private String RepositoryPath = null;
- private static final String LINE_SEPARATOR = "\r\n";
-
+ /** Initialise le répertoire de sauvegarde et le répertoire généré s'ils n'existent pas. */
public ManageDataFile() {
initDirectory();
}
- public String saveRawFile(byte[] data) {
+ public void saveRawFile(byte[] data) {
- String message = "File created ";
+ SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss.SSS", Locale.ENGLISH);
+ Date aujourdhui = new Date();
+ String creationdate = formater.format(aujourdhui);
- try {
- Files.write(Paths.get(generateRepository + "\\Frame_" + cpt++ + ".bin"), data);
- } catch (IOException e) {
+ String message = "File created ";
- message = "Error creation file : " + e.toString();
- appLogger.severe(message);
+ String fileSeparator = File.separator;
+ if (fileSeparator.equals("\\")) {
+ fileSeparator = "/";
}
- return generateRepository;
- }
-
- public void saveDataFileHex(String stringData) {
-
- SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd-HHmmss");
- Date aujourdhui = new Date();
-
- PrintWriter pw = null;
- File files = new File(RepositoryPath + "/" + formater.format(aujourdhui) + "-tlm-Hexa.txt");
try {
- if (files.exists() == false) {
- pw =
- new PrintWriter(
- new FileWriter(
- RepositoryPath + "/" + formater.format(aujourdhui) + "-tlm-Hexa.txt",StandardCharsets.UTF_8));
- pw.write("Start file");
- pw.write(LINE_SEPARATOR);
- } else {
- pw = new PrintWriter(RepositoryPath + "/" + formater.format(aujourdhui) + "-tlm-Hexa.txt",StandardCharsets.UTF_8);
- }
- pw.append(stringData);
- pw.append(LINE_SEPARATOR);
-
- pw.flush();
- pw.close();
+ Files.write(
+ Paths.get(
+ this.RepositoryPath + fileSeparator + "Frame_" + creationdate + "_" + cpt++ + ".bin"),
+ data);
} catch (IOException e) {
- e.printStackTrace();
+ message = "Error creation file : " + e.toString();
+ appLogger.severe(message);
}
}
public void saveDataHex(String stringData) {
- SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd-HH");
+ SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss.SSS", Locale.ENGLISH);
Date aujourdhui = new Date();
String creationdate = formater.format(aujourdhui);
- filepath = Paths.get(this.RepositoryPath + "\\" + creationdate + "-Data-hex.txt");
+ String fileSeparator = File.separator;
+ if (fileSeparator.equals("\\")) {
+ fileSeparator = "/";
+ }
+
+ filepath = Paths.get(this.RepositoryPath + fileSeparator + creationdate + "-Data-hex.txt");
try {
if (!Files.exists(filepath)) {
@@ -95,21 +77,22 @@ public class ManageDataFile {
public int saveTlmData(TlmData tlmData) {
int erreur = 0;
- SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss.SSS");
+ SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss.SSS", Locale.ENGLISH);
Date aujourdhui = new Date();
JSONObject jasonObject = new JSONObject(tlmData);
String creationdate = formater.format(aujourdhui);
- filepath = Paths.get(this.RepositoryPath + "\\" + creationdate + "-Data.json");
+ String fileSeparator = File.separator;
+ if (fileSeparator.equals("\\")) {
+ fileSeparator = "/";
+ }
+
+ filepath = Paths.get(this.RepositoryPath + fileSeparator + creationdate + "-Data.json");
try {
- // if (!Files.exists(filepath))
- // {
Files.createFile(filepath);
- // Files.writeString(filepath, "Test" + "\r\n",StandardOpenOption.CREATE);
- // }
-
Files.writeString(filepath, jasonObject.toString() + "\r\n", StandardOpenOption.CREATE);
+
if (Files.size(filepath) < 10) {
appLogger.severe("file not created ");
erreur = -1;
@@ -123,13 +106,12 @@ public class ManageDataFile {
return erreur;
}
- /** Create all directory needed for saving data in different format */
public void initDirectory() {
if (RepositoryPath == null) {
- RepositoryPath = System.getProperty("user.dir") + "\\data";
+ RepositoryPath = System.getProperty("user.dir") + File.separator + "data";
} else if (RepositoryPath.length() == 0) {
- RepositoryPath = System.getProperty("user.dir") + "\\data";
+ RepositoryPath = System.getProperty("user.dir") + File.separator + "data";
}
Path path = Paths.get(RepositoryPath);
@@ -139,7 +121,19 @@ public class ManageDataFile {
Files.createDirectories(path);
appLogger.info("directory created : " + RepositoryPath);
} catch (IOException e) {
- appLogger.log(Level.SEVERE, "cannot create outpout directorie " + e.toString());
+ appLogger.log(Level.SEVERE, "cannot create output directory " + e.toString());
+ }
+ }
+
+ String generateRepository = this.RepositoryPath + File.separator + "generate";
+ path = Paths.get(generateRepository);
+ // if directory exists?
+ if (!Files.exists(path)) {
+ try {
+ Files.createDirectories(path);
+ appLogger.info("directory created : " + generateRepository);
+ } catch (IOException e) {
+ appLogger.log(Level.SEVERE, "cannot create output directory " + e.toString());
}
}
}
diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/ModelReceivedData.java b/ApplicationKissTool/src/main/java/org/josast/kisstool/ModelReceivedData.java
similarity index 98%
rename from ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/ModelReceivedData.java
rename to ApplicationKissTool/src/main/java/org/josast/kisstool/ModelReceivedData.java
index 1b613524b385fb9f99272af3fe78c488eff69e27..7518960c33ca40648132d0c6289cb27532d08296 100644
--- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/ModelReceivedData.java
+++ b/ApplicationKissTool/src/main/java/org/josast/kisstool/ModelReceivedData.java
@@ -1,5 +1,5 @@
/** @todo Utiliser ce model de data pour eviter les dependances - Pour le refactoring */
-package org.josast.ApplicationKissTool;
+package org.josast.kisstool;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/ReceivedData.java b/ApplicationKissTool/src/main/java/org/josast/kisstool/ReceivedData.java
similarity index 90%
rename from ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/ReceivedData.java
rename to ApplicationKissTool/src/main/java/org/josast/kisstool/ReceivedData.java
index 85a1bdb7c333bd03a50080b74944c235d8234c97..b989d12d49ef3bd67c4513b005f5f41d511d1cee 100644
--- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/ReceivedData.java
+++ b/ApplicationKissTool/src/main/java/org/josast/kisstool/ReceivedData.java
@@ -1,4 +1,4 @@
-package org.josast.ApplicationKissTool;
+package org.josast.kisstool;
import java.nio.charset.StandardCharsets;
import java.util.Date;
@@ -32,6 +32,6 @@ public class ReceivedData {
@Override
public String toString() {
- return "Frame [time=" + time + "][ Frame=" + new String(data,StandardCharsets.UTF_8) + "]";
+ return "Frame [time=" + time + "][ Frame=" + new String(data, StandardCharsets.UTF_8) + "]";
}
}
diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/SatelliteNorad.java b/ApplicationKissTool/src/main/java/org/josast/kisstool/SatelliteNorad.java
similarity index 95%
rename from ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/SatelliteNorad.java
rename to ApplicationKissTool/src/main/java/org/josast/kisstool/SatelliteNorad.java
index 4b2c9f6eba2f045a8aaa2488146574ae2a674385..160cf211fdb8cd85ad3cef7b796424eef2cd46ca 100644
--- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/SatelliteNorad.java
+++ b/ApplicationKissTool/src/main/java/org/josast/kisstool/SatelliteNorad.java
@@ -1,4 +1,4 @@
-package org.josast.ApplicationKissTool;
+package org.josast.kisstool;
public class SatelliteNorad {
diff --git a/ApplicationKissTool/src/main/java/org/josast/kisstool/SatelliteNoradFile.java b/ApplicationKissTool/src/main/java/org/josast/kisstool/SatelliteNoradFile.java
new file mode 100644
index 0000000000000000000000000000000000000000..3045631bd5c4b4e3a5b06c81d73096f796b53ba0
--- /dev/null
+++ b/ApplicationKissTool/src/main/java/org/josast/kisstool/SatelliteNoradFile.java
@@ -0,0 +1,133 @@
+/** */
+package org.josast.kisstool;
+
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.Reader;
+import java.io.Writer;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.logging.Logger;
+
+/** @author chris */
+public class SatelliteNoradFile {
+
+ private static Logger appLogger = Logger.getLogger("AmsatLogger");
+ private List SatelliteNoradList;
+ private Hashtable htsatNorad = new Hashtable<>();
+
+ public List getSatelliteNoradList() {
+ return new ArrayList(SatelliteNoradList);
+ }
+
+ private String getFileName(String file) {
+
+ String path = System.getProperty("user.home") + File.separator + ".josast";
+ path += File.separator + "kisstool" + File.separator + "config";
+ File apath = new File(path);
+
+ if (!apath.exists()) {
+ boolean res = apath.mkdir();
+ if (!res) {
+ appLogger.severe("fail to create " + path);
+ }
+ }
+ return path + File.separator + file;
+ }
+
+ public void writeFile(String file) {
+ try {
+ // create a list of users
+
+ // create writer
+ Writer writer = new FileWriter(getFileName(file), Charset.forName("utf-8"));
+
+ // convert users list to JSON file
+ new Gson().toJson(SatelliteNoradList, writer);
+
+ // close writer
+ writer.close();
+
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ public void readFile(String file) {
+
+ initialise();
+ File f = new File(getFileName(file));
+ if (!f.exists()) {
+ appLogger.severe("file do not exist " + f.getAbsolutePath());
+
+ } else {
+
+ try {
+
+ // create a reader
+ Reader reader = Files.newBufferedReader(Paths.get(getFileName(file)));
+
+ // convert JSON array to list of users
+ SatelliteNoradList =
+ new Gson().fromJson(reader, new TypeToken>() {}.getType());
+
+ // close reader
+ reader.close();
+
+ } catch (Exception ex) {
+ appLogger.severe("Error reading " + f.getAbsolutePath() + " with error " + ex.toString());
+ }
+ }
+ Iterator it = SatelliteNoradList.iterator();
+ appLogger.info("nb sat" + SatelliteNoradList.size());
+ while (it.hasNext()) {
+ SatelliteNorad sat = it.next();
+ htsatNorad.put(sat.getCallsign(), sat);
+ }
+
+ // print Satellites
+ SatelliteNoradList.forEach(System.out::println);
+ }
+
+ public int getNorad(String callsign) {
+ int norad = 0;
+ SatelliteNorad sat = htsatNorad.get(callsign);
+ if (sat != null) norad = sat.getNoradId();
+ return norad;
+ }
+
+ public String getName(String callsign) {
+ String name = null;
+ SatelliteNorad sat = htsatNorad.get(callsign);
+
+ if (sat != null) name = sat.getName();
+
+ return name;
+ }
+
+ public void initialise() {
+
+ SatelliteNoradList = new ArrayList();
+ SatelliteNoradList.add(new SatelliteNorad("UVSQsat", 47438, "LATMOS"));
+ SatelliteNoradList.add(new SatelliteNorad("Defaut", 99999, ""));
+ SatelliteNoradList.add(new SatelliteNorad("Picsat", 43132, "PICSAT"));
+
+ System.out.println(SatelliteNoradList.size());
+ }
+
+ /** @param args */
+ public static void main(String[] args) {
+
+ SatelliteNoradFile s = new SatelliteNoradFile();
+ // s.initialise();
+ // s.writeFile("SatelliteNoradList.json");
+ s.readFile("SatelliteNoradList.json");
+ }
+}
diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/SendSIDS.java b/ApplicationKissTool/src/main/java/org/josast/kisstool/SendSIDS.java
similarity index 96%
rename from ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/SendSIDS.java
rename to ApplicationKissTool/src/main/java/org/josast/kisstool/SendSIDS.java
index a3d7e83bb47851f23a3db4fc11181aef61d0397c..50f652f007a8047235041fb55f3012d9c94237d0 100644
--- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/SendSIDS.java
+++ b/ApplicationKissTool/src/main/java/org/josast/kisstool/SendSIDS.java
@@ -1,4 +1,4 @@
-package org.josast.ApplicationKissTool;
+package org.josast.kisstool;
import java.math.BigInteger;
import org.josast.SIDS.HttpPostSIDS;
diff --git a/ApplicationKissTool/src/main/java/org/josast/kisstool/TaskManageReceivedData.java b/ApplicationKissTool/src/main/java/org/josast/kisstool/TaskManageReceivedData.java
new file mode 100644
index 0000000000000000000000000000000000000000..166a2733545dafbc6e49cc3053fbabac075ed6ca
--- /dev/null
+++ b/ApplicationKissTool/src/main/java/org/josast/kisstool/TaskManageReceivedData.java
@@ -0,0 +1,171 @@
+package org.josast.kisstool;
+
+import java.math.BigInteger;
+import java.text.SimpleDateFormat;
+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.telemetry.api.AbstractAnalysisInterface;
+import org.josast.telemetry.api.InterfaceAnalyseData;
+import org.josast.telemetry.api.TelemetryAnalysisProvider;
+import org.josast.telemetry.api.TelemetryDataInterface;
+
+public class TaskManageReceivedData extends Task {
+ private static Logger appLogger = Logger.getLogger("AmsatLogger");
+ private final SimpleDateFormat ISO8601DATEFORMAT =
+ new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
+ private final Configuration conf = Configuration.getInstance();
+ private Ax25Display ax25display = new Ax25Display();
+ private ManageDataFile mdf = new ManageDataFile();
+ // private DisplayUVSQsat displayUVSQsat = new DisplayUVSQsat();
+
+ // setup provider
+ TelemetryAnalysisProvider tap = new TelemetryAnalysisProvider();
+
+ 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());
+ appLogger.severe(e.toString());
+ }
+ }
+ });
+ }
+
+ private void displayData(ReceivedData decodedData) {
+ Platform.runLater(
+ new Runnable() {
+
+ @Override
+ public void run() {
+
+ String rcvCallsign = ax25display.getCallsignFrom();
+
+ try {
+
+ if (!conf.isSilentMode()) {
+
+ String satname = ctrl.getName(rcvCallsign);
+
+ if (satname == null) {
+ ctrl.displayLog("satname is Null :" + decodedData.toString());
+ ctrl.SetDecodedData(ax25display.getDisplay());
+ } else {
+
+ ctrl.displayLog("satname " + satname);
+ // récupére l'interpréteur
+ InterfaceAnalyseData dataAnalyser = tap.getDataAnalyser(satname);
+
+ if (dataAnalyser != null) {
+ TelemetryDataInterface td = dataAnalyser.analyse(decodedData.getData());
+ ctrl.setDecodedTable(td.getDataList(), td.getTelemetryName());
+ if (dataAnalyser.getDataType()
+ == AbstractAnalysisInterface.INFORMATION_MESSAGE) {
+ ctrl.displayInformationMessage(dataAnalyser.getInformationMessage());
+ }
+
+ } else {
+ displayLog("Decoder not found ");
+ ctrl.displayLog(decodedData.toString());
+ ctrl.SetDecodedData(ax25display.getDisplay());
+ }
+ }
+ }
+ int noradframe = ctrl.getNorad(rcvCallsign);
+ if (noradframe == 0) noradframe = conf.getNorad();
+ ctrl.SendSids(decodedData, noradframe);
+ ctrl.IncrementNbFrameTraited();
+
+ } catch (Exception e) {
+ displayLog("Run - error");
+ displayLog(e.toString());
+ appLogger.severe(e.toString());
+ }
+ }
+ });
+ }
+
+ @Override
+ protected String call() throws Exception {
+
+ displayLog("Message Treatment Lanched");
+
+ // display provider
+ tap.displayProviderNames();
+
+ Date lastFrameTime;
+ ReceivedData decodedData;
+ displayLog("Waiting Data !!!");
+ while (true) {
+
+ decodedData = blockingQueue.take();
+ // displayLog(" Data !!!");
+
+ /* check frame validity */
+
+ int valid = ax25display.setdata(decodedData);
+
+ if (valid == 0) {
+ String calsignr = ax25display.getCallsignFrom();
+ if (calsignr == null) {
+ displayLog(" calsign not decoded");
+ }
+ ;
+
+ lastFrameTime = decodedData.getTime(); // new Date();
+ String creationdate = ISO8601DATEFORMAT.format(lastFrameTime);
+
+ String hexaString = new BigInteger(1, decodedData.getData()).toString(16);
+
+ TlmData tlmData =
+ new TlmData(
+ hexaString,
+ conf.getCallsign(),
+ conf.getLongitude(),
+ conf.getLatitude(),
+ creationdate);
+ mdf.setRepositoryPath(conf.getOutputFileDirectory());
+ if (conf.isRawFileBoolean() == true) {
+ mdf.saveRawFile(decodedData.getData());
+ }
+ if (conf.isJsonFileBoolean() == true) {
+ if (mdf.saveTlmData(tlmData) != 0) {
+ displayLog("Error creation JSON file");
+ }
+ }
+ displayData(decodedData);
+ // datamodel.IncrementReceivedFrame();
+ } else {
+ displayLog(" Frame not decoded");
+ displayLog("" + decodedData.getData());
+ }
+ }
+ }
+}
diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/TaskSoundmodemTCP.java b/ApplicationKissTool/src/main/java/org/josast/kisstool/TaskSoundmodemTCP.java
similarity index 82%
rename from ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/TaskSoundmodemTCP.java
rename to ApplicationKissTool/src/main/java/org/josast/kisstool/TaskSoundmodemTCP.java
index 37a2835d10e0feeb778b842b29d6a92a41f43904..8adb98ca3f7dc9401b303a93a1a2702552a6cba9 100644
--- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/TaskSoundmodemTCP.java
+++ b/ApplicationKissTool/src/main/java/org/josast/kisstool/TaskSoundmodemTCP.java
@@ -1,4 +1,4 @@
-package org.josast.ApplicationKissTool;
+package org.josast.kisstool;
import java.util.Date;
import java.util.concurrent.BlockingQueue;
@@ -14,21 +14,22 @@ public class TaskSoundmodemTCP extends Task {
private volatile boolean running = true;
- SoundModemConfiguration smConfiguration = null;
- SoundModemClient smc = null;
- Controler ctrl = null;
+ private SoundModemConfiguration smConfiguration = null;
+ private SoundModemClient smc = null;
+ private Controler ctrl = null;
// ModelReceivedData receivedFrame = null;
- BlockingQueue blockingQueue = null;
- //private ModelReceivedData datamodel = null;
+ private BlockingQueue blockingQueue = null;
+
+ // private ModelReceivedData datamodel = null;
/**
* @param smConfiguration fichier de configuration
* @param receivedFrame Frame Data model
*/
public TaskSoundmodemTCP(
- SoundModemConfiguration smConfiguration2,
- BlockingQueue blockingQueueIn,
- Controler ctrlIn) {
+ final SoundModemConfiguration smConfiguration2,
+ final BlockingQueue blockingQueueIn,
+ final Controler ctrlIn) {
this.smConfiguration = smConfiguration2;
this.blockingQueue = blockingQueueIn;
@@ -45,12 +46,12 @@ public class TaskSoundmodemTCP extends Task {
* @param receivedFrame Frame Data model
*/
public TaskSoundmodemTCP(
- SoundModemConfiguration smConfiguration2,
- BlockingQueue blockingQueueIn) {
+ final SoundModemConfiguration smConfiguration2,
+ final BlockingQueue blockingQueueIn) {
this.smConfiguration = smConfiguration2;
this.blockingQueue = blockingQueueIn;
- // this.datamodel = datamodel;
+ // this.datamodel = datamodel;
smc = new SoundModemClient(smConfiguration2);
// ctrl = ctrlIn;
@@ -60,7 +61,7 @@ public class TaskSoundmodemTCP extends Task {
} else this.succeeded();
}
- public TaskSoundmodemTCP(BlockingQueue blockingQueueIn) {
+ public TaskSoundmodemTCP(final BlockingQueue blockingQueueIn) {
smConfiguration = new SoundModemConfiguration("default");
blockingQueue = blockingQueueIn;
diff --git a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/TlmData.java b/ApplicationKissTool/src/main/java/org/josast/kisstool/TlmData.java
similarity index 97%
rename from ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/TlmData.java
rename to ApplicationKissTool/src/main/java/org/josast/kisstool/TlmData.java
index 4c9b5987120f1696ed5a99cda55c14e848f2ae7f..fd100318bce027e8eb3f83c8dcb76eba69811be2 100644
--- a/ApplicationKissTool/src/main/java/org/josast/ApplicationKissTool/TlmData.java
+++ b/ApplicationKissTool/src/main/java/org/josast/kisstool/TlmData.java
@@ -1,4 +1,4 @@
-package org.josast.ApplicationKissTool;
+package org.josast.kisstool;
public class TlmData {
@@ -28,38 +28,47 @@ public class TlmData {
public String getData() {
return data;
}
+
/** @param data the data to set */
public void setData(String data) {
this.data = data;
}
+
/** @return the source */
public String getSource() {
return source;
}
+
/** @param source the source to set */
public void setSource(String source) {
this.source = source;
}
+
/** @return the longitude */
public String getLongitude() {
return longitude;
}
+
/** @param longitude the longitude to set */
public void setLongitude(String longitude) {
this.longitude = longitude;
}
+
/** @return the latitude */
public String getLatitude() {
return latitude;
}
+
/** @param latitude the latitude to set */
public void setLatitude(String latitude) {
this.latitude = latitude;
}
+
/** @return the timestamp */
public String getTimestamp() {
return timestamp;
}
+
/** @param timestamp the timestamp to set */
public void setTimestamp(String timestamp) {
this.timestamp = timestamp;
diff --git a/ApplicationKissTool/src/main/resources/META-INF/services/org.josast.telemetry.api.InterfaceAnalyseData b/ApplicationKissTool/src/main/resources/META-INF/services/org.josast.telemetry.api.InterfaceAnalyseData
new file mode 100644
index 0000000000000000000000000000000000000000..8f8de98bbd6a40795e9f91cf05c23e98c3ea0cb4
--- /dev/null
+++ b/ApplicationKissTool/src/main/resources/META-INF/services/org.josast.telemetry.api.InterfaceAnalyseData
@@ -0,0 +1,3 @@
+org.josast.inspiresat7.DataAnalysis
+org.josast.uvsqsat.DataAnalysis
+org.josast.spino.spi.DataAnalysis
\ No newline at end of file
diff --git a/ApplicationKissTool/src/main/resources/org/josast/ApplicationKissTool/KissTool.fxml b/ApplicationKissTool/src/main/resources/org/josast/ApplicationKissTool/KissTool.fxml
deleted file mode 100644
index 373986eec910c2a355638f66907a930668b507f9..0000000000000000000000000000000000000000
--- a/ApplicationKissTool/src/main/resources/org/josast/ApplicationKissTool/KissTool.fxml
+++ /dev/null
@@ -1,272 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ApplicationKissTool/src/main/resources/org/josast/kisstool/KissTool.fxml b/ApplicationKissTool/src/main/resources/org/josast/kisstool/KissTool.fxml
new file mode 100644
index 0000000000000000000000000000000000000000..ccac6ee786f538b638366c02db4617f3fd21615c
--- /dev/null
+++ b/ApplicationKissTool/src/main/resources/org/josast/kisstool/KissTool.fxml
@@ -0,0 +1,626 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ApplicationKissTool/src/main/resources/org/josast/kisstool/KissToolHelp.html b/ApplicationKissTool/src/main/resources/org/josast/kisstool/KissToolHelp.html
new file mode 100644
index 0000000000000000000000000000000000000000..29fb0db793b301895e3b5b1fc755111a1cb1403b
--- /dev/null
+++ b/ApplicationKissTool/src/main/resources/org/josast/kisstool/KissToolHelp.html
@@ -0,0 +1,20 @@
+Application KISS TOOL
+
+ Introduction
+
+KISS TOOL helps to decode data from Satellite and send them to databases (SatNogs,AMSAT-F,PICSAT).
+This application is written in java with javaFx library. The application can be executed on all operating system supporting Java.
+The input data for KISS TOOL come from demodulator thanks to TCP KISS protocol.
+
+
+ User Manual (To BE UPDATED FOR KISS TOOL)
+
+ User Manual in English
+ Manuel Utilisateur en Français
+
+ UVSQsat Link
+
+
+
To learn more about the UVSQsat mission, visit the project's dedicated site : project page
+ Satellite information is available on UVSQsat AmsatList
+
\ No newline at end of file
diff --git a/ApplicationKissTool/src/main/resources/org/josast/kisstool/LogoJosast0.png b/ApplicationKissTool/src/main/resources/org/josast/kisstool/LogoJosast0.png
new file mode 100644
index 0000000000000000000000000000000000000000..7efaa8f63dc4c651e8a34e2493d00e996709259b
Binary files /dev/null and b/ApplicationKissTool/src/main/resources/org/josast/kisstool/LogoJosast0.png differ
diff --git a/ApplicationKissTool/src/main/resources/org/josast/ApplicationKissTool/OIP.jpg b/ApplicationKissTool/src/main/resources/org/josast/kisstool/OIP.jpg
similarity index 100%
rename from ApplicationKissTool/src/main/resources/org/josast/ApplicationKissTool/OIP.jpg
rename to ApplicationKissTool/src/main/resources/org/josast/kisstool/OIP.jpg
diff --git a/ApplicationKissTool/src/main/resources/org/josast/ApplicationKissTool/boot.css b/ApplicationKissTool/src/main/resources/org/josast/kisstool/boot.css
similarity index 100%
rename from ApplicationKissTool/src/main/resources/org/josast/ApplicationKissTool/boot.css
rename to ApplicationKissTool/src/main/resources/org/josast/kisstool/boot.css
diff --git a/ApplicationKissTool/src/main/resources/org/josast/ApplicationKissTool/logoAmsat.png b/ApplicationKissTool/src/main/resources/org/josast/kisstool/logoAmsat.png
similarity index 100%
rename from ApplicationKissTool/src/main/resources/org/josast/ApplicationKissTool/logoAmsat.png
rename to ApplicationKissTool/src/main/resources/org/josast/kisstool/logoAmsat.png
diff --git a/ApplicationKissTool/src/main/resources/org/josast/ApplicationKissTool/primary.fxml b/ApplicationKissTool/src/main/resources/org/josast/kisstool/primary.fxml
similarity index 100%
rename from ApplicationKissTool/src/main/resources/org/josast/ApplicationKissTool/primary.fxml
rename to ApplicationKissTool/src/main/resources/org/josast/kisstool/primary.fxml
diff --git a/ApplicationKissTool/src/main/resources/org/josast/ApplicationKissTool/secondary.fxml b/ApplicationKissTool/src/main/resources/org/josast/kisstool/secondary.fxml
similarity index 100%
rename from ApplicationKissTool/src/main/resources/org/josast/ApplicationKissTool/secondary.fxml
rename to ApplicationKissTool/src/main/resources/org/josast/kisstool/secondary.fxml
diff --git a/ApplicationKissTool/src/site/html/ManuelUtilisateur.html b/ApplicationKissTool/src/site/html/ManuelUtilisateur.html
new file mode 100644
index 0000000000000000000000000000000000000000..0d00433c37088e0345f9f2b3548264af60cf16a1
--- /dev/null
+++ b/ApplicationKissTool/src/site/html/ManuelUtilisateur.html
@@ -0,0 +1,142 @@
+
+Contexte
+Ce logiciel a été créé initialement pour aider à récupérer des trames de télémesures au format AX25 pour permettre de les analyser ou de les envoyer vers des bases de données.
+Fonctionalités
+Le logiciel permet de :
+
+capturer des données issue d'un démodulateur compatible du protocole TCP KISS (soundmodem par exemple)
+Analyser les données reçues pour identifier l'indicatif du satellite et si l'analyse des données est présente affiche les données décodées sous forme de tableau
+Transférer les données reçues vers une base de données utilisant le protocole SIDS ( eg AMSAT-F, Satnogs, Picsat)
+sauvegarder les données dans des fichiers au fomat binaire ou au format json
+
+Téléchargement
+Le logiciel est téléchargeable via les liens suivants :
+Windows
+
+Linux
+
+Prérequis
+Pour recevoir les trames d'UVSQsat, il est nécessaire d’avoir
+
+un récepteur
+un démodulateur permettant de démoduler les signaux du satellite
+
+Pour les satellites UVSQsat & InspireSat7 un modem compatible BPSK GR3UH 1200 bauds ou BPSK GR3UH 9600 bauds avec une interface TCP KISS ( Soundmodem )
+Installation
+Une fois le fichier téléchargé, décompressez le fichier dans un répertoire de votre choix.
+Windows
+ Sélectionner le fichier, clic droit et ensuite extraire le fichier
+Linux
+ Par ligne de commande :
+tar -xzvf UVSQsatDecoderWithJRE.gz
+
+Lancement du logiciel
+Allez dans le répertoire où vous avez décompressé le fichier téléchargé.
+pour windows
+
+pour linux
+
+lancer le script :
+launchKISSTOOL.sh
+
+
+
+Au bout de quelques secondes, l'interface du logiciel s'affiche
+
+5 onglets sont disponibles :
+
+Data Table : Affiche les données décodées sous forme d'un tableau
+Data Stream : Si les données ne sont pas décodées, cet onglet est utilisé pour afficher les données sous forme Hexadécimale
+Log : affiche les messages d'informations et d'erreurs
+configuration : permet de configurer le logiciel.
+Information : avigateur interne pour afficher l'aide
+
+configuration pour envoyer les données
+Selectionnez l'onglet Configuration
+
+Définition de la station
+
+1 : permet d’indiquer son indicatif
+
+2 : permet d’indiquer la latitude de la station au format XX.XXS pour Sud ou XX.XXN pour le Nord.
+
+3 : permet d’indiquer la longitude de la station au format XX.XXE pour East ou XX.XXW pour l’Ouest
+
+
+Paramétre de la base données
+
+4 : si la case est cochée, l’envoie de trame vers la base de données sélectionnée sera activée. Les 3 bases de données peuvent être sélectionnées.
+
+5 : texte utilisé dans le protocole SIDS pour identifier la source
+
+
+Paramétres fichier
+
+6 : défini le répertoire ou seront stokés les fichiers
+
+7: permet de sélectionner le format du fichier Json ou binaire. Les fichiers ne contiennent qu'une seule trame.
+
+8 : Adresse IP du démodulateur , par défaut localhost (127.0.0.1)
+
+9 : Port , par défaut 8100 pour Soundmodem
+
+10 : Sauvegarde le configuration dans un fichier texte situé dans le répertoire Config. La configuration est prise en compte immédiatement. Au prochain lancement, le logiciel reprendra les données de configuration sauvegardées
+
+
+Connection au modem & réception des données
+
+
+4 : si le logiciel a accès à internet, il ira chercher les dernières informations et indiquera si une nouvelle version est disponible. L’affectation du Numéro TLE sera automatiquement mis à jours.
+
+1 : Adresse IP du démodulateur , par défaut localhost
+
+2 : Port , par défaut 8100 pour Soundmodem
+
+3 : Start permet de se connecter à démodulateur . Le démodulateur doit avoir été lancé avant.
+
+5 : il est possible de définir le satellite par défaut. Cette information ne sera utilisé que si le satellite n'est pas reconnu par le logiciel. Il est possible d'ajouter d'autres satellite en configurant le fichier "SatelliteNoradList.json" situé dans le répertoire app/config
+
+
+ L’appuie sur le bouton start 3 lance la connexion avec le démodulateur
+
+
+1 : le résultat de la connexion s’affiche
+
+Connected to modem : la connexion est réalisé, le logiciel est prêt a recevoir une trame
+TCP DISCONNECTED : la connexion a été interrompue, pas possibilité de se connecté à soundmodem. Vérifié que soundmodem est bien lancé et configuré.
+
+
+3 : si la cercle est vert, le modem est connecté. Si un erreur se produit et le modem se déconnecte, le cercle passe en rouge
+
+2 : le bouton Stop permet d’arrêter la connexion avec soundmodem. Ce sera effectif après la réception d’une trame
+
+
+reception de données
+
+
+1 : Le nombre de trames reçues et traitées est affiché
+
+2 : le bouton Stop permet d’arrêter la connexion avec soundmodem. Ce sera effectif après la réception d’une trame
+
+3 : Indique le nombre de trames envoyées vers la base de données concernée. Le cercle est vert si l'envoie est réussi, sinon il est rouge. La raison est donnée dans l'onglet log
+
+4 : N° Norad du satellite décodé
+
+5 : Trame de télémesure décodée.
+
+
+Questions
+ Une rubrique dédié sur le Forum de l'AMSAT-Francophone est à votre disposition : Rubrique Kisstool Decoder
+License
+GNU Lesser General Public License v2.1
diff --git a/ApplicationKissTool/src/site/image/KisstooBullel.png b/ApplicationKissTool/src/site/image/KisstooBullel.png
new file mode 100644
index 0000000000000000000000000000000000000000..d96e0df2fdf38b488f5f0df30f32b93fbec07283
Binary files /dev/null and b/ApplicationKissTool/src/site/image/KisstooBullel.png differ
diff --git a/ApplicationKissTool/src/site/image/Kisstool.png b/ApplicationKissTool/src/site/image/Kisstool.png
new file mode 100644
index 0000000000000000000000000000000000000000..9ee17e971caa8f64412e31d7ba4392bd99e811e7
Binary files /dev/null and b/ApplicationKissTool/src/site/image/Kisstool.png differ
diff --git a/ApplicationKissTool/src/site/image/KisstoolConnected.png b/ApplicationKissTool/src/site/image/KisstoolConnected.png
new file mode 100644
index 0000000000000000000000000000000000000000..5955f017750c08c966fec1eb1b373a55481db063
Binary files /dev/null and b/ApplicationKissTool/src/site/image/KisstoolConnected.png differ
diff --git a/ApplicationKissTool/src/site/image/KisstoolConnectedBulle.png b/ApplicationKissTool/src/site/image/KisstoolConnectedBulle.png
new file mode 100644
index 0000000000000000000000000000000000000000..a7d15e1eb1faa7cf15b8be7d8adade293a19be9e
Binary files /dev/null and b/ApplicationKissTool/src/site/image/KisstoolConnectedBulle.png differ
diff --git a/ApplicationKissTool/src/site/image/KisstoolData.png b/ApplicationKissTool/src/site/image/KisstoolData.png
new file mode 100644
index 0000000000000000000000000000000000000000..7d619abecaf31f9c3292f962c454bd70d6b269a9
Binary files /dev/null and b/ApplicationKissTool/src/site/image/KisstoolData.png differ
diff --git a/ApplicationKissTool/src/site/image/KisstoolDataBulle.png b/ApplicationKissTool/src/site/image/KisstoolDataBulle.png
new file mode 100644
index 0000000000000000000000000000000000000000..ef4611e47197ccc0d5c542afa60c07fe02594116
Binary files /dev/null and b/ApplicationKissTool/src/site/image/KisstoolDataBulle.png differ
diff --git a/ApplicationKissTool/src/site/image/configuration.png b/ApplicationKissTool/src/site/image/configuration.png
new file mode 100644
index 0000000000000000000000000000000000000000..fabce9fd779d3678e507997d258881790375612e
Binary files /dev/null and b/ApplicationKissTool/src/site/image/configuration.png differ
diff --git a/ApplicationKissTool/src/site/markdown/ManuelUtilisateur.md b/ApplicationKissTool/src/site/markdown/ManuelUtilisateur.md
new file mode 100644
index 0000000000000000000000000000000000000000..080ddeba799528c61a6357241a79c4fd1bf85245
--- /dev/null
+++ b/ApplicationKissTool/src/site/markdown/ManuelUtilisateur.md
@@ -0,0 +1,168 @@
+# Logiciel KissTool
+
+## Contexte
+
+Ce logiciel a été créé initialement pour aider à récupérer des trames de télémesures au format AX25 pour permettre de les analyser ou de les envoyer vers des bases de données.
+
+## Fonctionalités
+
+Le logiciel permet de :
+* capturer des données issue d'un démodulateur compatible du protocole TCP KISS (soundmodem par exemple)
+* Analyser les données reçues pour identifier l'indicatif du satellite et si l'analyse des données est présente affiche les données décodées sous forme de tableau
+* Transférer les données reçues vers une base de données utilisant le protocole SIDS ( eg AMSAT-F, Satnogs, Picsat)
+* sauvegarder les données dans des fichiers au fomat binaire ou au format json
+
+
+## Téléchargement
+
+Le logiciel est téléchargeable via les liens suivants :
+
+### Windows
+
+* [AMSATF-KisstoolWithJRE.zip](https://site.amsat-f.org/download/117659/)
+
+### Linux
+
+* [AMSATF-KisstoolWithJRE.gz](https://site.amsat-f.org/download/117663/)
+
+## Prérequis
+
+Pour recevoir les trames d'UVSQsat, il est nécessaire d’avoir
+ * un récepteur
+ * un démodulateur permettant de démoduler les signaux du satellite
+
+
+Pour les satellites UVSQsat & InspireSat7 un modem compatible BPSK GR3UH 1200 bauds ou BPSK GR3UH 9600 bauds avec une interface TCP KISS ( [Soundmodem](http://uz7.ho.ua/packetradio.htm))
+
+## Installation
+
+Une fois le fichier téléchargé, décompressez le fichier dans un répertoire de votre choix.
+
+### Windows
+
+ Sélectionner le fichier, clic droit et ensuite extraire le fichier
+
+
+
+### Linux
+
+ Par ligne de commande :
+
+ tar -xzvf UVSQsatDecoderWithJRE.gz
+
+
+## Lancement du logiciel
+
+
+Allez dans le répertoire où vous avez décompressé le fichier téléchargé.
+
+### pour windows
+ * cliquez deux fois sur le fichier "launchKISSTOOL.bat "
+ * ou lancer le sript
+
+ launchKISSTOOL.bat
+
+### pour linux
+ * lancer le script :
+
+ launchKISSTOOL.sh
+
+
+
+
+Au bout de quelques secondes, l'interface du logiciel s'affiche
+
+![MMI](https://site.amsat-f.org/wp-content/uploads/2023/03/Kisstool.png)
+
+
+5 onglets sont disponibles :
+
+ * Data Table : Affiche les données décodées sous forme d'un tableau
+ * Data Stream : Si les données ne sont pas décodées, cet onglet est utilisé pour afficher les données sous forme Hexadécimale
+ * Log : affiche les messages d'informations et d'erreurs
+ * configuration : permet de configurer le logiciel.
+ * Information : avigateur interne pour afficher l'aide
+
+
+
+
+## configuration pour envoyer les données
+
+Selectionnez l'onglet Configuration
+
+![MMI-Configuration](https://site.amsat-f.org/wp-content/uploads/2023/03/configuration.png)
+
+### Définition de la station
+ * 1 : permet d’indiquer son indicatif
+
+ * 2 : permet d’indiquer la latitude de la station au format XX.XXS pour Sud ou XX.XXN pour le Nord.
+
+ * 3 : permet d’indiquer la longitude de la station au format XX.XXE pour East ou XX.XXW pour l’Ouest
+
+### Paramétre de la base données
+
+ * 4 : si la case est cochée, l’envoie de trame vers la base de données sélectionnée sera activée. Les 3 bases de données peuvent être sélectionnées.
+
+ * 5 : texte utilisé dans le protocole SIDS pour identifier la source
+
+### Paramétres fichier
+
+ * 6 : défini le répertoire ou seront stokés les fichiers
+
+ * 7: permet de sélectionner le format du fichier Json ou binaire. Les fichiers ne contiennent qu'une seule trame.
+
+ * 8 : Adresse IP du démodulateur , par défaut localhost (127.0.0.1)
+
+ * 9 : Port , par défaut 8100 pour Soundmodem
+
+ * 10 : Sauvegarde le configuration dans un fichier texte situé dans le répertoire Config. La configuration est prise en compte immédiatement. Au prochain lancement, le logiciel reprendra les données de configuration sauvegardées
+
+
+## Connection au modem & réception des données
+
+![MMI-Configuration](https://site.amsat-f.org/wp-content/uploads/2023/03/KisstooBullel.png)
+
+ * 4 : si le logiciel a accès à internet, il ira chercher les dernières informations et indiquera si une nouvelle version est disponible. L’affectation du Numéro TLE sera automatiquement mis à jours.
+
+ * 1 : Adresse IP du démodulateur , par défaut localhost
+
+ * 2 : Port , par défaut 8100 pour Soundmodem
+
+ * 3 : Start permet de se connecter à démodulateur . Le démodulateur doit avoir été lancé avant.
+
+ * 5 : il est possible de définir le satellite par défaut. Cette information ne sera utilisé que si le satellite n'est pas reconnu par le logiciel. Il est possible d'ajouter d'autres satellite en configurant le fichier "SatelliteNoradList.json" situé dans le répertoire app/config
+
+
+ L’appuie sur le bouton start 3 lance la connexion avec le démodulateur
+
+ ![MMI-Configuration]( https://site.amsat-f.org/wp-content/uploads/2023/03/KisstoolConnected-1.png)
+
+ * 1 : le résultat de la connexion s’affiche
+ * Connected to modem : la connexion est réalisé, le logiciel est prêt a recevoir une trame
+ * TCP DISCONNECTED : la connexion a été interrompue, pas possibilité de se connecté à soundmodem. Vérifié que soundmodem est bien lancé et configuré.
+ * 3 : si la cercle est vert, le modem est connecté. Si un erreur se produit et le modem se déconnecte, le cercle passe en rouge
+
+* 2 : le bouton Stop permet d’arrêter la connexion avec soundmodem. Ce sera effectif après la réception d’une trame
+
+### reception de données
+
+ ![MMI-Configuration](https://site.amsat-f.org/wp-content/uploads/2023/03/KisstoolDataBulle.png)
+
+* 1 : Le nombre de trames reçues et traitées est affiché
+
+* 2 : le bouton Stop permet d’arrêter la connexion avec soundmodem. Ce sera effectif après la réception d’une trame
+
+* 3 : Indique le nombre de trames envoyées vers la base de données concernée. Le cercle est vert si l'envoie est réussi, sinon il est rouge. La raison est donnée dans l'onglet log
+
+* 4 : N° Norad du satellite décodé
+
+* 5 : Trame de télémesure décodée.
+
+ ## Questions
+
+ Une rubrique dédié sur le Forum de l'AMSAT-Francophone est à votre disposition : [Rubrique Kisstool Decoder ](http://forum.amsat-f.org/forumdisplay.php?fid=36)
+
+
+ ## License
+[GNU Lesser General Public License v2.1](http://choosealicense.com/licenses/lgpl-2.1/)
+
diff --git a/ApplicationKissTool/src/site/markdown/UserManual.md b/ApplicationKissTool/src/site/markdown/UserManual.md
new file mode 100644
index 0000000000000000000000000000000000000000..42328050f5e105551e2d46d9c76ad2be1a85f8c1
--- /dev/null
+++ b/ApplicationKissTool/src/site/markdown/UserManual.md
@@ -0,0 +1,171 @@
+# KissTool Software
+
+## Context
+
+This software was originally created to help recover telemetry frames in AX25 format to allow them to be analyzed or sent to databases.
+
+## Features
+
+The software allows you to:
+* capture data from a TCP KISS protocol compatible demodulator (e.g. soundmodem)
+* Analyze the received data to identify the satellite's call sign and if data analysis is present, display the decoded data in table form
+* Transfer the received data to a database using the SIDS protocol (e.g. AMSAT-F, Satnogs, Picsat)
+* save data in binary or json format files
+
+
+## Download
+
+The software can be downloaded via the following links:
+
+### Windows
+
+* [AMSATF-KisstoolWithJRE.zip](https://site.amsat-f.org/download/117659/)
+
+### Linux
+
+* [AMSATF-KisstoolWithJRE.gz](https://site.amsat-f.org/download/117663/)
+
+## Prerequisites
+
+To receive frames, it is necessary to have
+ * a receiver
+ * a demodulator capable of demodulating satellite signals
+
+
+For UVSQsat & InspireSat7 satellites a BPSK GR3UH 1200 bauds or BPSK GR3UH 9600 bauds modem with a TCP KISS interface ([Soundmodem](http://uz7.ho.ua/packetradio.htm))
+
+## Installation
+
+Once the file has been downloaded, unzip it into a directory of your choice.
+
+### Windows
+
+Select the file, right-click and then extract the file
+
+
+
+### Linux
+
+By command line:
+
+ tar -xzvf AMSATF-KisstoolWithJRE.gz
+
+
+## Launching the software
+
+
+Go to the directory where you unzipped the downloaded file.
+
+### for windows
+ * double-click on the "launchKISSTOOL.bat" file
+ * or run script
+
+ launchKISSTOOL.bat
+
+### for linux
+ * run script:
+
+ launchKISSTOOL.sh
+
+
+
+
+
+After a few seconds, the software interface appears
+
+![MMI](https://site.amsat-f.org/wp-content/uploads/2023/03/Kisstool.png)
+
+
+5 tabs are available:
+
+ * Data Table: Displays decoded data in table form
+ * Data Stream: If data is not decoded, this tab is used to display data in hexadecimal form
+ * Log: displays information and error messages
+ * Configuration: allows you to configure the software.
+ * Information: internal browser to display help
+
+
+
+
+## Configuration to send data
+
+Select the Configuration tab
+
+![MMI-Configuration](https://site.amsat-f.org/wp-content/uploads/2023/03/configuration.png)
+
+### Station definition
+ * 1: allows you to indicate your call sign
+
+ * 2: allows you to indicate the station's latitude in XX.XXS format for South or XX.XXN for North.
+
+ * 3: allows you to indicate the station's longitude in XX.XXE format for East or XX.XXW for West
+
+### Database parameters
+
+ * 4: if checked, frame sending to the selected database will be enabled. All 3 databases can be selected.
+
+ * 5: text used in SIDS protocol to identify source
+
+### File parameters
+
+ * 6: defines directory where files will be stored
+
+ * 7: allows you to select file format Json or binary. Files contain only one frame.
+
+ * 8: IP address of demodulator, default localhost (127.0.0.1)
+
+ * 9: Port, default 8100 for Soundmodem
+
+ * 10: Saves configuration in a text file located in Config directory. The configuration is taken into account immediately. At next launch, software will resume saved configuration data
+
+
+## Connection to modem & reception of data
+
+![MMI-Configuration](https://site.amsat-f.org/wp-content/uploads/2023/03/KisstooBullel.png)
+
+
+
+* 4: if the software has internet access, it will fetch the latest information and indicate if a new version is available. The TLE Number assignment will be automatically updated.
+
+* 1: IP address of demodulator, default localhost
+
+* 2: Port, default 8100 for Soundmodem
+
+* 3: Start allows you to connect to demodulator. The demodulator must have been launched before.
+
+* 5: it is possible to define the default satellite. This information will only be used if the satellite is not recognized by the software. It is possible to add other satellites by configuring the "SatelliteNoradList.json" file located in the app/config directory
+
+
+Pressing start button 3 initiates connection with demodulator
+
+![MMI-Configuration](https://site.amsat-f.org/wp-content/uploads/2023/03/KisstoolConnected-1.png)
+
+* 1: connection result is displayed
+ * Connected to modem: connection established, software ready to receive frame
+ * TCP DISCONNECTED: connection interrupted, unable to connect to soundmodem. Verify that soundmodem is launched and configured.
+* 3: if circle is green, modem connected. If error occurs and modem disconnects, circle turns red
+
+*2 : Stop button allows you to stop connection with soundmodem. This will be effective after receiving a frame
+
+### Data reception
+
+![MMI-Configuration](https://site.amsat-f.org/wp-content/uploads/2023/03/KisstoolDataBulle.png)
+
+*1 : Number of frames received and processed displayed
+
+*2 : Stop button allows you to stop connection with soundmodem. This will be effective after receiving a frame
+
+*3 : Indicates number of frames sent to concerned database. Circle green if sending successful otherwise red. Reason given in log tab
+
+*4 : Norad number of decoded satellite
+
+*5 : Decoded telemetry frame.
+
+Here is a translation of the text you provided:
+## Questions
+
+A dedicated section on the AMSAT-Francophone Forum is at your disposal: [Kisstool Decoder Section](http://forum.amsat-f.org/forumdisplay.php?fid=36)
+
+
+## License
+[GNU Lesser General Public License v2.1](http://choosealicense.com/licenses/lgpl-2.1/)
\ No newline at end of file
diff --git a/ApplicationKissTool/src/site/markdown/configuration satellite.md b/ApplicationKissTool/src/site/markdown/configuration satellite.md
new file mode 100644
index 0000000000000000000000000000000000000000..89e85c8c5997a1492a117b914fc55436c4a6d9da
--- /dev/null
+++ b/ApplicationKissTool/src/site/markdown/configuration satellite.md
@@ -0,0 +1,35 @@
+# satellite configuration
+
+Kisstool application could be setup for perform treatment on different satellite
+ - send to SIDS server with right Nasa ID
+ - perform decoding data (need additional java service)
+
+# configuration file
+
+Configuration file is based on json format
+
+ example :
+ [
+ {
+ "noradId": 47438,
+ "name": "UVSQsat",
+ "indicatif": "LATMOS"
+ },
+ {
+ "noradId": 99999,
+ "name": "Defaut",
+ "indicatif": ""
+ },
+ {
+ "noradId": 43132,
+ "name": "Picsat",
+ "indicatif": "PICSAT"
+ }
+ ]
+
+Json structure is :
+ - noradId norad : identifier, used by the SIDS protocol for identifying the satellite
+ - name : satellite name used also to get access to service
+ - indicatif : satellite callsign, used by kisstool to identify the satellite
+
+
diff --git a/ApplicationSatelliteDatabaseCli/pom.xml b/ApplicationSatelliteDatabaseCli/pom.xml
index 4affc4ababf843830ae6143e4c2a551b5eda9e74..9be4a386bc691cfbdf07c36fb06fae95d6a7064c 100644
--- a/ApplicationSatelliteDatabaseCli/pom.xml
+++ b/ApplicationSatelliteDatabaseCli/pom.xml
@@ -11,11 +11,11 @@
0.0.2
-
- ApplicationSatelliteDatabaseCli is a toolset for AmsatList Database.
- This appliation allows to perform different actions : merge, check,
- update
-
+
+ ApplicationSatelliteDatabaseCli is a toolset for AmsatList Database.
+ This appliation allows to perform different actions : merge, check,
+ update
+
ApplicationSatelliteDatabaseCli
@@ -35,14 +35,13 @@
3.0.0-M2
3.0.0-M2
3.0.0-M2
-
-
- 2.17.1
- 20211205
- 1.5.0
-
+ 3.0.0-beta1
+ 20231013
+ 1.6.0
+
+
@@ -58,7 +57,8 @@
${commons-cli.version}
-
+
org.apache.logging.log4j
log4j-core
@@ -78,7 +78,6 @@
-
@@ -88,7 +87,8 @@
maven-assembly-plugin
- make-assembly
+ make-assembly
package
single
@@ -110,8 +110,6 @@
-
-
diff --git a/ApplicationSatelliteDatabaseCli/src/DataTest/AmsatList.xml b/ApplicationSatelliteDatabaseCli/src/DataTest/AmsatList.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bbdafcfff1ae364cabcc00a6eb48db4f87e6c4a2
--- /dev/null
+++ b/ApplicationSatelliteDatabaseCli/src/DataTest/AmsatList.xml
@@ -0,0 +1,21350 @@
+
+
+
+ Al-Farabi-2
+ 43805
+ Operational
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 436500000
+
+ GMSK
+ 4800bps
+
+
+ CW
+
+
+ UN1GWA
+
+
+
+
+ GT-1
+ 51510
+
+ Operational
+
+ false
+
+ U
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Telemetry
+ 437175000
+
+ FSK
+ 9600
+
+
+
+
+
+ KK4UVG
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ INSPIREsat-1
+ 51657
+
+ Operational
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Telemetry 1
+ 437500000
+
+ GFSK
+ 9600
+
+ BCT
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+
+ U
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1KUNS-PF
+ 43466
+ Decayed
+
+ true
+ Coordinated
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=559
+ 5Z4HL Heywood Ouma
+ 2017-06-03
+ 2017-06-23
+ houma@ieee.org.nospam
+
+ Verified
+ 2019-08-07
+
+ Information page
+ https://1kuns-pf.ns0.it/
+
+
+
+ Beacon
+ 437300000
+
+ GMSK
+ 9600
+
+
+ GMSK
+ 1200
+
+
+ GMSK
+ 2400
+
+
+ GMSK
+ 4800
+
+
+
+
+
+
+ 3CAT-2
+ 41732
+ 2016-051B
+ Inactive
+
+ true
+ coordinated
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=371
+ Vicente J. Gomez Oviedo EA3GP
+ 2014-01-23
+ 2014-06-09
+ vjgomez@tsc.upc.edu.nospam
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 24010000000
+
+ BPSK
+ 1000000
+
+
+
+
+ Beacon
+ 145970000
+
+ BPSK
+ 9600
+
+
+
+
+
+
+ 3CAT1
+ 43781
+ Inactive
+
+ India
+
+
+ Verified
+ 2021-08-04+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=370
+ 3CAT1 Hello World has been coordinated by
+ IARU
+ 3CAT1 Hello World a été coordonné par l'IARU
+
+
+
+ Telemetry 1
+ 437250000
+
+ FSK
+ 9k6
+
+
+ CW
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 4M-LXS
+ 0
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 145980000
+
+ WSJT-JT65B
+
+ LX0OHB
+
+
+
+
+ Aalto-1
+ 42775
+ 2017-036L
+ Operational
+
+ true
+ Coordinated
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=292
+ Timo Nikkanen OH2EGZ
+ 2013-03-15
+ 2015-06-03
+ timo.nikkanen@gmail.com.nospam
+
+ INIT
+ 2021-08-13+02:00
+
+ Mission description
+ https://wiki.aalto.fi/display/SuomiSAT
+
+
+
+ PDF file
+
+ https://docs.google.com/file/d/0B9SJ8FHoqwj-eVR2SzhrWFFTZTA/edit
+
+
+
+
+ Beacon
+ 437220000
+
+ FSK CW
+ 9600bps
+
+
+ CW
+
+
+ OH2A1S
+
+
+
+
+ Aalto-2 (FI01)
+ 42729
+ Decayed
+
+ true
+ Coordinated
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=362
+ Timo Nikkanen OH2EGZ
+ 2013-11-13
+ 2015-06-18
+ timo.nikkanen@gmail.com.nospam
+
+ INIT
+ 2019-08-07
+
+
+ Beacon
+ 437.335
+
+ GFSK
+ 9600 bps
+
+ AALTO2
+
+
+
+
+ AAUSAT-4
+ 41460
+ 2016-025E
+ Operational
+
+ true
+ Coordinated
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=375
+ Jens Frederick Dalsgaard OZ2JDN
+ 2014-01-24
+ 2014-07-14
+ jdn@es.aau.dk.nospam
+
+ VERIFIED
+ 2021-08-13+02:00
+
+ Mission description
+ http://www.space.aau.dk/aausat4/
+
+
+
+
+ Beacon
+ 437425000
+
+ GFSK
+ 2400
+
+
+ GFSK
+ 9600
+
+
+ GFSK
+ 19200
+
+
+ CW
+
+
+ OZ4CUB
+
+
+
+
+ AAUSAT-5
+ 40948
+ Decayed
+
+ true
+ Coordinated
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=375
+ Jens Frederick Dalsgaard OZ2JDN
+ 2014-02-01
+ 2014-05-04
+ jdn@es.aau.dk.nospam
+
+ INIT
+ 2019-08-07
+
+ Mission description
+ http://www.space.aau.dk/aausat5/
+
+
+
+
+ Beacon
+ 437425000
+
+ GMSK9k6
+ 9600 bps
+
+
+
+
+
+
+ AAUSAT-II
+ 32788
+ 2008-021F
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=60
+
+ 2021-08-13+02:00
+
+
+ Main
+ 437432000
+
+ FFSK/MSK
+ 1200
+
+
+
+
+ Main
+ 437432000
+
+ FSK
+ 9600
+
+ OZ2CUB
+
+
+
+
+ AAUSAT
+ 27846
+ 2003-031G
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437450000
+
+ GMSK
+ 9600
+
+
+
+
+
+
+ AAUSat3
+ 39087
+ 2013-009B
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437425000
+
+ FSK
+ 400
+
+
+ CW
+
+ OZ3CUB
+
+
+
+
+ ACRUX-1
+ 44369
+ 2019-037E
+ Operational
+
+ true
+ Coordinated
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=644
+ Gabriel Abrahams VK3EXO
+ 2018-09-15
+ 2018-11-13
+ abrahams.gabi@gmail.com.nospam
+
+
+ 2019-06-29
+
+
+ draft
+ 2021-08-13+02:00
+
+ ACRUX-1
+ https://melbournespace.com.au/projects/
+
+
+
+
+ Beacon
+ 437200000
+
+ GMSK
+ 9600bps
+
+ CQCQCQ
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Aeneas
+ 38760
+ 2012-048C
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=253
+
+ 2021-08-13+02:00
+
+
+ Main
+ 437600000
+
+ AFSK
+ 1200
+
+ KE6YFA-1
+
+
+
+
+ AeroCube-2
+ 31122
+ 2007-012F
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 0
+
+ GFSK
+ 9600
+
+
+
+
+
+
+ AeroCube1
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 0
+
+ GFSK
+ 9600
+
+
+
+
+
+
+ AESP14
+ 40389
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437600000
+
+ GFSK
+ 9600
+
+
+
+
+
+ AggieSat-4
+ 41313
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 436250000
+
+ FSK
+ 9600
+
+
+
+
+
+ AISat
+ 40054
+ 2014-034B
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437511000
+
+ CW
+
+ DP0AIS
+
+
+
+
+ AIST-1 (RS-41)
+ 39492
+ 2013-078C
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 435265000
+
+ CW
+
+
+
+
+
+ AIST-2 (RS-43)
+ 39133
+ 2013-015D
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 435265000
+
+ CW
+
+
+
+
+
+ AISTECHSAT-2
+ 43768
+ Operational
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 436730000
+
+ GMSK
+ 4800
+
+
+ GMSK
+ 49600
+
+
+
+
+
+
+ AISTECHSAT-3
+ 44103
+ 2019-018AB
+ Operational
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 436730000
+
+ GFSK
+ 9600
+
+
+ GFSK
+ 4800
+
+
+
+
+
+
+ ALEXANDER (PhoneSat2)
+ 39146
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437425000
+
+ AFSK
+ 1200
+
+ KJ6KRW
+
+
+
+
+ All-Star - THEIA
+ 39683
+ Unknown
+ 2020-05-24+02:00
+
+
+ Main
+ 2401700000
+
+ BPSK
+ 256000
+
+ COSGC1AS
+
+
+
+
+ ALMASat-1
+ 38078
+ 2012-006B
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437465000
+
+ FSK
+ 1200
+
+ ALMASAT
+
+
+
+
+ ALSat-1N
+ 41789
+ 2016-059G
+ Operational
+
+ true
+ Coordinated
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=485
+ Djamel Eddine Baba Hamed 7X4TS
+ 2015-11-06
+ 2016-01-11
+ debabahamed@cds.asal.dz.nospam
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437650000
+
+ FSK9k6
+ 9600 bps
+
+ AL1N
+
+
+
+
+ Amicalsat
+ 46287
+ 2020-061R
+ Operational
+
+ true
+ Coordinated
+ UGA-CSUG France - SINP MSU - NILAKT Russia
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=686
+ Igor Blinov RK3X
+ 2019-07-17
+ 2019-09-23
+ rw3xl@ya.ru.nospamm
+
+
+ 2020-06-18
+ Kourou
+
+ 2021-08-13+02:00
+
+ Amicalsat project page
+ http://amicalsat.univ-grenoble-alpes.fr/
+ The satellite is made for observing Auroras from
+ space. (more information on this page) Our scientists can give
+ information to the community about space weather. Telemetries
+ are coming by UHF band. Pictures are available by S band on
+ demands (website in progress). The pictures are in Raw format.
+ Exploitation is possible with software (soon available) We aim
+ to use skills of the community to get back pictures and
+ telemetries downloaded through the website.
+
+
+
+ UHF
+ 436100000
+
+ AFSK
+ 1200
+
+ RS17S
+
+
+ S band
+ 2415300000
+
+ GFSK
+ 1000 kb/s
+
+
+
+
+
+
+ Josast project - Amicalsat tools
+ https://code.electrolab.fr/xtof/josast
+
+
+ Satnogs Database
+ https://db.satnogs.org/satellite/99836/
+
+
+ Telemetrie kaitai structure
+
+ https://code.electrolab.fr/xtof/telemetrydescription/-/tree/master/Amicalsat
+
+
+
+
+
+ satellite@adri38.fr
+
+ https://code.electrolab.fr/xtof/josast/-/blob/master/ApplicationAmicalsat/src/site/markdown/ManuelUtilisateur.md
+
+
+
+ AMSAT-India APRS
+ 44104
+ Operational
+
+ 2019-03-04
+ Satish Dhawan Space Centre (SDSC) SHAR, Sriharikota
+
+
+ Verified
+ 2020-05-24+02:00
+
+ Project description
+ http://amsatindia.org/
+ This experimental radio payload on the
+ fourth stage platform is an Automatic Packet Reporting System
+ (APRS) – also called a digipeater.
+
+ Charge utile radioamateur fixée sur le
+ quatriéme étage de la fusée PSLV. La charge utile est un
+ digipeater
+
+
+ IARU Coordination
+
+ Payload have not been coordinated - APRS
+ default frequency
+ La fréquence utilisée par la charge utile
+ n'a pas été coordonnée - Utilisation de la fréquence APRS par
+ défaut
+
+
+
+ APRS
+
+ 1458250000
+
+
+ 1458250000
+
+ AFSK 1200
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AmurSat (AmGU-1)
+ 44394
+ 2019-038J
+ Operational
+ Draft
+ 2021-08-13+02:00
+
+ IARU coordination Declined
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=582
+
+
+
+
+ Beacon
+ 436250000
+
+ mobitex
+ 4800bps
+
+
+
+
+
+
+ ANDE-2 (Castor)
+ 35694
+ Decayed
+
+ true
+ Coordinated
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=144
+ Iavan Galysh KD4HBO
+ 2009-01-03
+ 2009-07-02
+ Ivan.galysh@nrl.navy.mil.nospam
+
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 145825000
+
+ AFSK
+ 1200 bps
+
+ KD4HBO-1
+
+
+
+
+ ANDE-2(Pollux)
+ 35693
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 145825000
+
+ AFSK
+ 1200
+
+ POLLUX-1
+
+
+ Main
+ 145825000
+
+ AFSK
+ 1200
+
+ KD4HBO-1
+
+
+
+
+ ANTELSat
+ 40034
+ 2014-033AA
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437280000
+
+ AFSK GFSK/MSK
+ 1200
+
+
+ CW
+
+ CX1SAT
+
+
+
+
+ ANUSAT
+ 34808
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 137400000
+
+ AFSK
+ 1200 bps
+
+
+
+
+
+
+ AO-1(Oscar-1)
+ 214
+ Decayed
+ AO-1
+ Verified
+ 2020-05-24+02:00
+
+
+ Main
+ 144983000
+
+ CW
+
+
+
+
+
+
+ AO-10(Phase-3B)
+ 14129
+ 1983-058B
+ Inactive
+ AO-10
+ 2021-08-04+02:00
+
+
+ Main
+ 145810000
+
+ CW
+
+
+
+
+
+
+ AO-13(Phase-3C)
+ 19216
+ Decayed
+ AO-13
+ 2020-05-24+02:00
+
+
+ Main
+ 145812000
+
+ CW
+
+
+
+
+
+
+ AO-16(PACSAT)
+ 20439
+ 1990-005D
+ Inactive
+ AO-16
+ 2021-08-04+02:00
+
+
+ Main
+ 2401143000
+
+ PSK
+
+ PACSAT-11-12
+
+
+
+
+ AO-2(Oscar-2)
+ 305
+ Decayed
+ AO-2
+ Verified
+ 2020-05-24+02:00
+
+
+ Main
+ 144983000
+
+ CW
+
+
+
+
+
+
+ AO-24 (ARSENE)
+ 22654
+ 1993-031B
+ Inactive
+ AO-24
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 2446540000
+
+ AFSK
+ 1200bps
+
+
+
+
+ Beacon
+ 145975000
+
+ AFSK
+ 1200bps
+
+
+
+
+
+
+ AO-27(EYESAT-A)
+ 22825
+ 1993-061C
+ Operational
+
+ 1993-09-26
+ Kourou
+
+ AO-27
+ Verified
+ 2020-05-24+02:00
+
+
+ Main
+ 436795000
+
+ AFSK
+ 1200
+
+
+
+
+ FM
+
+ 145800000
+
+
+ 436795000
+
+ FM
+
+
+
+
+
+ PE0SAT AO27 site
+
+ https://www.pe0sat.vgnet.nl/satellite/amateur-radio-satellites/ao-27/
+
+
+ F6BVP article (decoding telemetry with linux)
+
+ http://site.amsat-f.org/2020/05/21/ao-27-est-de-retour-ao-27-is-back/
+
+
+
+
+
+
+ http://www.dk3wn.info/files/ao27.zip
+
+
+
+ AO-3(Oscar-3)
+ 1293
+ 1965-016F
+ Inactive
+ AO-3
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+
+ 145975000
+ 146025000
+
+
+ 144325000
+ 144375000
+
+ SSB/CW
+
+
+
+
+
+ AO-37(ASUSAT)
+ 26065
+ 2000-004E
+ Inactive
+ AO-37
+ 2021-08-04+02:00
+
+
+ Main
+ 0
+
+ FSK
+ 9600
+
+
+
+
+
+
+ AO-4(Oscar-4)
+ 1902
+ Decayed
+ AO-4
+ Verified
+ 2020-05-24+02:00
+
+
+ Main
+
+ 432145000
+ 432155000
+
+
+ 144300000
+ 144310000
+
+ SSB/CW
+
+
+
+
+
+ AO-40(Phase-3D)
+ 26609
+ 2000-072B
+ Inactive
+ AO-40
+ 2021-08-04+02:00
+
+
+ Main
+ 2401323000
+
+ PSK
+ 400
+
+
+
+
+
+
+ AO-49(Rubin-2)
+ 27605
+ 2002-058A
+ Inactive
+ AO-49
+ 2021-08-04+02:00
+
+
+ Main
+ 145825000
+
+ U/1200D/9600
+
+ MSK
+
+
+
+
+ AO-5(Oscar-5)
+ 4321
+ 1970-008B
+ Inactive
+ AO-5
+ Verified
+ 2021-08-04+02:00
+
+
+ TLM1
+ 144050000
+
+ CW
+
+
+
+
+ TLM2
+ 29450000
+
+ CW
+
+
+
+
+
+
+ AO-51(Echo)
+ 28375
+ 2004-025K
+ Inactive
+ AO-51
+ 2021-08-04+02:00
+
+
+ Main
+ 435150000
+
+ FM_tone670Hz
+
+
+
+
+ Main
+ 435150000
+
+ FSK
+
+ 9600
+ PECHO-11-12
+
+
+ Main
+ 435150000
+
+ FSK
+
+ 9600
+ PACB-11-12
+
+
+
+
+ AO-54(SuitSat)
+ 28933
+ Inactive
+ AO-54
+ Draft
+ 2021-08-04+02:00
+
+
+ Main
+ 0
+
+ FM
+
+
+
+
+
+
+ AO-6(Phase-2A)
+ 6236
+ 1972-082B
+ Inactive
+ AO-6
+ 2021-08-04+02:00
+
+
+ Main
+ 0
+
+ CW
+
+
+
+
+
+
+ AO-7(Phase-2B)
+ 7530
+ 1974-089B
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=19
+
+
+ 1974-11-15
+ Vandenberg
+
+ AO-7
+ 2021-08-13+02:00
+
+
+ Mode V/A (A) TLM Beacon
+ 29502000
+
+ CW
+
+
+
+
+ Mode U/V (B) TLM Beacon
+ 1459775000
+
+ CW
+
+
+
+
+ Mode U TLM Beacon
+ 435100000
+
+ CW
+
+
+
+
+
+
+ AO-71(AubieSat-1)
+ 37854
+ 2011-061E
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437473000
+
+ AFSK
+ 1200
+
+
+ CW
+
+
+
+
+
+
+ AO-8(Phase-2D)
+ 10703
+ 1978-026B
+ Inactive
+ AO-8
+ 2021-08-04+02:00
+
+
+ Main
+ 29402000
+
+ CW
+
+
+
+
+ Main
+ 435095000
+
+ CW
+
+
+
+
+
+
+ AO-85 (Fox-1A)
+ 40967
+ 2015-058D
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=309
+
+ 2021-08-13+02:00
+
+
+ Main
+ 145980000
+
+ FM CTCSS 670Hz
+
+
+
+
+
+ AO-92 (Fox-1D)
+ 43137
+ 2018-004A
+ Operational
+
+ true
+ Coordinated
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=456
+ Andrew Glassbrenner KO4MA
+ 2015-04-01
+ 2015-04-08
+ ko4ma@amsat.org.nospam
+
+ AO-92
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 145880000
+
+ DUV
+ 200 bps
+
+
+
+
+ Repeater
+
+ 435350000
+
+
+ 145880000
+
+ FM
+
+
+ Repeater
+
+ 1267350000
+
+
+ 145880000
+
+ FM
+
+
+
+
+ AO-95 (Fox-1Cliff)
+ 43770
+ 2018-099N
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=455
+
+
+ 2018-12-03
+ Vandenberg Air Force Base, California
+
+ AMSAT-OSCAR 95 (AO-95)
+ Verified
+ 2021-08-13+02:00
+
+ project
+ https://www.amsat.org/fox-1cliff-ready-for-launch/
+
+
+
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=455
+ Fox-1Cliff has been coordinated by IARU
+ Fox-1Cliff a été coordonné par l'IARU
+
+
+
+ Telemetry 1
+ 145920000
+
+ FSK
+
+
+
+
+
+ FM voice repeater mode 1
+
+ 435300000
+
+
+ 145920000
+
+ FM
+ 67
+
+
+ FM voice repeater Mode 2
+
+ 1267300000
+
+
+ 145920000
+
+ FM
+ 67
+
+
+
+
+ Telemesure software : FOXTelem
+
+ https://www.amsat.org/foxtelem-software-for-windows-mac-linux/
+
+
+
+
+
+
+
+ https://www.amsat.org/foxtelem-software-for-windows-mac-linux/
+
+
+
+ Aoba-Velox 4
+ 43940
+ 2019-003J
+ Inactive
+
+ 2019-01-18
+ Centre spatial JAXA Uchinoura, Kagoshima, Japan
+
+
+ Verified
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=499
+
+
+
+
+ AOBA VELOX-IV site
+
+ http://www.eee.ntu.edu.sg/research/SaRC/Research/Projects/Pages/AOBA-VELOX-IV.aspx
+
+
+
+
+
+ Telemetry 1
+ 437225000
+
+ GMSK
+ 9600
+
+
+
+
+
+
+
+
+
+
+
+
+
+ av4mail@googlegroups.com
+
+
+
+
+ Aoba-VELOX-III
+ 41935
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 437375000
+
+ CW
+ 0
+
+
+ AFSK
+ 1200 bps
+
+ JG6YBW
+
+
+
+
+ AoXiang-1 (CN04)
+ 42735
+ Decayed
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=433
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 2401600000
+
+ BPSK
+ 9600 bps
+
+ NPUAX1
+
+
+ Beacon
+ 437525000
+
+ BPSK
+ 9600 bps
+
+ NPUAX1
+
+
+ Beacon
+ 437500000
+
+ BPSK
+ 9600 bps
+
+ NPUAX1
+
+
+
+
+ ARC-1
+ 40969
+ 2015-058F
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437565000
+
+ CW
+
+
+
+
+
+ ArduSat-1
+ 39412
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437000000
+
+ MSK
+ 9600
+
+
+ CW
+
+ WG9XFC-1
+
+
+
+
+ ArduSat-2
+ 39570
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437000000
+
+ 9600bps MSK CCSDS
+
+
+
+
+
+ ArduSat-X
+ 39414
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437007000
+
+ MSK
+ 9600
+
+
+ CW
+
+ WG9XFC-X
+
+
+
+
+ Argus-2
+ 45257
+ 1998-067RA
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=661
+
+
+ Wallops Flight Facility, états unis
+
+
+ Draft
+ 2021-08-13+02:00
+
+ IARU information
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=682
+
+
+
+
+ Beacon
+ 437290000
+
+ GMSK
+ 9600
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Argus
+ 0
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437290000
+
+ AFSK
+ 1200
+
+
+
+
+
+ ARISSat-1
+ 37772
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 145919000
+
+ 39FMlinear/inverti
+
+ ng
+
+
+ Main
+ 145950000
+
+ FMVOICE/SSTV/Tel
+
+ emetry
+
+
+ Main
+ 145919000
+
+ BPSK
+ 1000
+
+
+ CW
+
+ RS01S
+
+
+ Main
+ 145939000
+
+ BPSK
+ 400
+
+
+ CW
+
+
+
+
+
+ Armadillo
+ 44352
+ 2019-036P
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=237
+
+ Draft
+ 2021-08-13+02:00
+
+ IARU coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=237
+
+
+
+ Project information
+
+ https://www.facebook.com/UTSatLab/app/208195102528120/?ref=page_internal
+
+
+
+
+ Beacon
+ 437525000
+
+ GMSK
+ 19200 bps
+
+
+ GMSK
+ 38400 bps
+
+
+ CW
+
+
+ KE5DTW
+
+
+
+
+ SATNOGS : Kaitai Struct for telemetry
+
+ https://gitlab.com/librespacefoundation/satnogs/satnogs-decoders/blob/master/ksy/armadillo.ksy
+
+
+
+
+
+
+
+
+
+
+ ARTSAT1-INVADER (CO-77)
+ 39577
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437325000
+
+ 1k2AFSK DigiTalker CW
+
+
+ CW
+
+ JQ1ZKK
+
+
+
+
+ ARTSAT2-DESPATCH (FO-81)
+ 40321
+ Deep Space
+ 2020-05-24+02:00
+
+
+ Main
+ 437325000
+
+ CW
+
+ JQ1ZNN
+
+
+
+
+ Astrocast-0.2
+ 44083
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=598
+
+ INIT
+ 2021-08-13+02:00
+
+ project information
+ https://www.astrocast.com/
+
+
+
+
+ Beacon
+ 437175000
+
+ FSK
+ 1200 bps
+
+ HB9GSF
+
+
+ Beacon
+ 2406000000
+
+ FM
+ 0
+
+
+
+
+
+
+ Athenoxat-1
+ 41168
+ 2015-077C
+ Operational
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437485000
+
+ CW
+ 0
+
+
+ GMSK
+ 4800 bps
+
+ ATX1
+
+
+
+
+ ATL 1 (MO-106)
+ 44830
+ Operational
+
+ true
+ Coordinated
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=640
+ Levente Dudas HA7WEN
+ 2018-08-13
+ 2018-11-19
+ dudas@hvt.bme.hu.nospam
+
+
+ 2019-12-06
+ Rocket Lab Launch Complex 1 - Mahia Peninsula, New
+ Zealand
+
+ Magyar-OSCAR 106 (MO-106)
+ Verified
+ 2019-11-26
+
+ Project information
+ http://gnd.bme.hu
+
+
+
+
+
+ Beacon
+ 437175000
+
+ GMSK
+ 12500
+
+
+
+
+
+
+ Atlantis (US02)
+ 42737
+ Decayed
+ INIT
+ 2019-08-07
+
+
+ Beacon
+ 436390000
+
+ GMSK
+ 9600bps
+
+ WD8DOX
+
+
+
+
+ AZTECHSAT-1
+ 45261
+ 1998-067RE
+ Operational
+
+ true
+ Coordinated
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=661
+ Enrique Sanchez Lara XE1SLE
+ 2018-11-27
+ 2019-05-19
+ enrique.sanchez@upaep.mx.nospam
+
+
+ Wallops Flight Facility, états unis
+
+
+ Draft
+ 2021-08-13+02:00
+
+ Project page
+ http://www.upaep.mx/aztechsat
+
+
+
+
+ Beacon
+ 437300000
+
+ GMSK
+ 9600
+
+
+ FSK
+ 9600
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ BCCSAT-1
+ 48041
+ 2021-022AK
+ Launched
+
+ false
+
+
+
+
+
+
+
+ 2021-03-22
+
+
+
+ Verified
+ 2021-08-13+02:00
+
+ project information
+ http://bccsat.bcc.ac.th/
+
+
+
+
+
+ Beacon
+ 435635000
+
+ CW
+
+
+
+ SSDV AFSK
+ 1200
+
+
+ GMSK
+ 9600
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ BeEagleSat (TR01)
+ 42736
+ Decayed
+ INIT
+ 2019-08-07
+
+
+ Beacon
+ 437370000
+
+ GMSK
+ 9600bps
+
+ ON01TR
+
+
+
+
+ BeeSat-1
+ 35933
+ 2009-051C
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=465
+
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Main
+ 436000000
+
+ GMSK
+ 4800 9600
+
+ DP0BEE
+
+
+
+
+ BEESAT-2
+ 39136
+ 2013-015G
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=233
+
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Main
+ 435950000
+
+ GMSK
+ 4800
+
+
+ CW
+
+ DP0BEF
+
+
+
+
+ BEESAT-3
+ 39135
+ 2013-015F
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=234
+
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Main
+ 435950000
+
+ GMSK
+ 4800
+
+
+ CW
+
+ DP0BEF
+
+
+
+
+ BEESAT-4
+ 41619
+ 2016-040W
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=465
+
+ INIT
+ 2021-08-13+02:00
+
+ CITATION NEEDED - https://xkcd.com/285/
+
+
+
+
+
+ Beacon
+ 435950000
+
+ FM
+ 0
+
+
+ GMSK
+ 4800 bps
+
+ DP0BEH
+
+
+ Digipeater
+
+ 435950000
+
+
+ 435950000
+
+
+
+
+
+
+ BEESAT-5
+ 47983
+ Operational
+
+ true
+ Coordinated
+ Technische Universität Berlin
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=796
+ Frank Baumann DK7FB
+ 2021-03-07
+ frank.baumann@tu-berlin.de.nospam
+
+
+ 2021-03-22
+
+
+
+ Verified
+ 2020-03-13
+
+ informaion for radioamateur
+ https://www.tu-berlin.de/?176169
+
+
+
+
+
+ Beacon
+ 435950000
+
+ GMSK BT=0.5
+ 1200
+
+
+ GMSK BT=0.5
+ 2400
+
+
+ GMSK BT=0.5
+ 4800
+
+ DP0BEI
+
+
+
+
+ Telemetry description
+
+ https://www.raumfahrttechnik.tu-berlin.de/fileadmin/fg169/amateur-radio/BEESAT-5...8_Telemetry_Format_2021-02-08.ods
+
+
+
+
+
+
+
+ Telemetry Collector Server
+ fachgebiet.rft.tu-berlin.de/ham/telemetry/send
+
+
+
+
+
+
+ BEESAT-6
+ 47983
+ Operational
+
+ true
+ Coordinated
+ Technische Universität Berlin
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=796
+ Frank Baumann DK7FB
+ 2021-03-07
+ frank.baumann@tu-berlin.de.nospam
+
+
+ 2021-03-22
+
+
+
+ Verified
+ 2020-03-13
+
+ informaion for radioamateur
+ https://www.tu-berlin.de/?176169
+
+
+
+
+
+ Beacon
+ 435950000
+
+ GMSK BT=0.5
+ 1200
+
+
+ GMSK BT=0.5
+ 2400
+
+
+ GMSK BT=0.5
+ 4800
+
+ DP0BEJ
+
+
+
+
+ Telemetry description
+
+ https://www.raumfahrttechnik.tu-berlin.de/fileadmin/fg169/amateur-radio/BEESAT-5...8_Telemetry_Format_2021-02-08.ods
+
+
+
+
+
+
+
+ Telemetry Collector Server
+ fachgebiet.rft.tu-berlin.de/ham/telemetry/send
+
+
+
+
+
+
+ BEESAT-7
+ 47983
+ Operational
+
+ true
+ Coordinated
+ Technische Universität Berlin
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=796
+ Frank Baumann DK7FB
+ 2021-03-07
+ frank.baumann@tu-berlin.de.nospam
+
+
+ 2021-03-22
+
+
+
+ Verified
+ 2020-03-13
+
+ informaion for radioamateur
+ https://www.tu-berlin.de/?176169
+
+
+
+
+
+ Beacon
+ 435950000
+
+ GMSK BT=0.5
+ 1200
+
+
+ GMSK BT=0.5
+ 2400
+
+
+ GMSK BT=0.5
+ 4800
+
+ DP0BEK
+
+
+
+
+ Telemetry description
+
+ https://www.raumfahrttechnik.tu-berlin.de/fileadmin/fg169/amateur-radio/BEESAT-5...8_Telemetry_Format_2021-02-08.ods
+
+
+
+
+
+
+
+ Telemetry Collector Server
+ fachgebiet.rft.tu-berlin.de/ham/telemetry/send
+
+
+
+
+
+
+ BEESAT-8
+ 47983
+ Operational
+
+ true
+ Coordinated
+ Technische Universität Berlin
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=796
+ Frank Baumann DK7FB
+ 2021-03-07
+ frank.baumann@tu-berlin.de.nospam
+
+
+ 2021-03-22
+
+
+
+ Verified
+ 2020-03-13
+
+ informaion for radioamateur
+ https://www.tu-berlin.de/?176169
+
+
+
+
+
+ Beacon
+ 435950000
+
+ GMSK BT=0.5
+ 1200
+
+
+ GMSK BT=0.5
+ 2400
+
+
+ GMSK BT=0.5
+ 4800
+
+ DP0BEL
+
+
+
+
+ Telemetry description
+
+ https://www.raumfahrttechnik.tu-berlin.de/fileadmin/fg169/amateur-radio/BEESAT-5...8_Telemetry_Format_2021-02-08.ods
+
+
+
+
+
+
+
+ Telemetry Collector Server
+ fachgebiet.rft.tu-berlin.de/ham/telemetry/send
+
+
+
+
+
+
+ BEESAT-9
+ 44412
+ 2019-038AC
+ Operational
+ draft
+ 2021-08-13+02:00
+
+ IARU coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=657
+
+
+
+ Project information
+
+ https://www.raumfahrttechnik.tu-berlin.de/menue/research/current_projects/beesat_9/parameter/en/
+
+
+
+
+ Beacon
+ 435950000
+
+ GMSK
+ 19200 bps
+
+
+ GMSK
+ 38400 bps
+
+
+ CW
+
+
+ DP0BEM
+
+
+
+
+ information for amateur radio comunitie
+
+ https://www.raumfahrttechnik.tu-berlin.de/menue/amateur_radio/parameter/en/
+
+
+ Telemetry description
+
+ https://www.raumfahrttechnik.tu-berlin.de/fileadmin/fg169/amateur-radio/BEESAT-9_Telemetry_Format.ods
+
+
+
+
+
+
+
+
+
+
+ BELL (PhoneSat1)
+ 39143
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437425000
+
+ AFSK
+ 1200
+
+ KJ6KRW-1
+
+
+
+
+ Bevo-2
+ 41314
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437325000
+
+ FSK
+ 38400
+
+
+ CW
+
+
+
+
+
+ BHUTAN-1
+ 43591
+ 1998-067PF
+ Decayed
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=518
+
+
+ 2018-08-10
+ ISS
+
+
+ Verified
+ 2021-08-13+02:00
+
+ BIRDS-2 Operation page
+ http://birds2.birds-project.com/operation/
+ The second BIRDS Project, BIRDS-2, started in
+ November, 2016. The participating countries are Bhutan,
+ Malaysia, Philippines and Japan. 11 students will develop 3
+ identical 1U CubeSats which will have capability to perform same
+ missions. The bus system for BIRDS-2 takes heritage from BIRDS-1
+ bus system and incorporates the lessons learned from BIRDS-1.
+
+
+
+ IARU
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=562
+
+
+
+
+ Main
+ 437375000
+
+ BPSK
+ 1200
+
+
+ CW
+
+ JG6YKL
+
+
+
+
+ Beacon Sequence and Format of BIRDS-2 CubeSats
+ http://birds2.birds-project.com/operation/
+
+
+ BIRDS-2 Data Submission
+ http://birds2.birds-project.com/data-submission/
+
+
+
+ BIRDS-2 Data Submission
+ http://birds2.birds-project.com/data-submission/
+
+
+
+
+ BIRD-G (Ghana GhanaSat-1)
+ 42821
+ Inactive
+ Draft
+ 2021-08-04+02:00
+
+
+ Beacon
+ 437372000
+
+ GMSK
+ 9600 bps
+
+
+ AFSK
+ 1200 bps
+
+
+ CW
+
+
+ JG6YJP
+
+
+
+
+ BIRD-M (Mongolia Mazaalai)
+ 42822
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 437372000
+
+ GMSK
+ 9600 bps
+
+
+ AFSK
+ 1200 bps
+
+
+ CW
+
+
+ JG6YJQ
+
+
+
+
+ BIROS
+ 41604
+ 2016-040F
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=480
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437525000
+
+ GMSK
+ 4800 bps
+
+
+
+
+
+
+ BisonSat
+ 40968
+ 2015-058E
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=318
+
+ 2021-08-13+02:00
+
+
+ Main
+ 437375000
+
+ GMSK
+ 9600
+
+
+
+
+
+ Black Knight-1
+ 39398
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437345000
+
+
+
+
+
+
+
+ BO-47(IDEFIX)BO-48(IDEFIX)
+ 27422
+ 2002-021B
+ Inactive
+ BO-47
+ 2021-08-04+02:00
+
+
+ BO-47
+ 145840000
+
+ BPSK
+ 400
+
+
+
+
+ BO-48
+ 435270000
+
+ BPSK
+ 400
+
+
+
+
+
+
+ Bobcat-1
+ 0
+
+ Inactive
+
+ true
+ Coordinated
+ Ohio University
+ http://www.amsatuk.me.uk/iaru/formal_detail.php?serialnum=713
+ Kevin Croissant W8PZS
+ 2019-12-18
+ 2020-01-19
+ kc855413@ohio.edu.nospam
+
+
+
+
+ 2021-08-04+02:00
+
+
+ https://www.ion.org/publications/abstract.cfm?articleID=16808
+
+
+
+
+ https://www.ohio.edu/engineering/avionics/
+
+
+
+
+
+
+ 436600000
+
+ FSK AX.100
+ 9600
+
+
+ FSK AX.100
+ 1200
+
+
+ MSK AX.100
+ 10000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ BRAC (BIRD-B)
+ 42823
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 437372000
+
+ GMSK
+ 9600 bps
+
+
+ AFSK
+ 1200 bps
+
+
+ CW
+
+
+ JG6YJS
+
+
+
+
+ BRICSat-2
+ 44355
+ 2019-036S
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=472
+
+
+ 2019-08-07
+
+
+ Navy-OSCAR 103 (NO-103)
+ Verified
+ 2021-08-13+02:00
+
+ Information page
+ http://aprs.org/bricsat-2.html
+
+
+
+ Beacon
+ 437605000
+
+ FSK
+ 9600
+
+ USNA14
+
+
+ APRS
+
+ 145825000
+
+
+ 145825000
+
+ APRS 1200 bauds
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ BRITE-PL
+ 39431
+ 2013-066R
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 145890000
+
+ 32Kbps-256Kbps
+
+
+
+
+
+ BugSat-1
+ 40014
+ 2014-033E
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=376
+
+
+ 2014-06-19
+ Orenburg, Russia
+
+ Verified
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=376
+
+
+
+ Wikipedia
+ https://en.wikipedia.org/wiki/BugSat_1
+
+
+
+
+ Main
+ 437445000
+
+ GMSK
+ 9600
+
+ LU7AA
+
+
+
+
+
+
+
+
+
+
+
+
+ http://www.dk3wn.info/software.shtml
+
+
+
+ BY70-1
+ 41909
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 436200000
+
+ BPSK
+ 9600 bps
+
+
+
+
+ Repeater
+
+ 145920000
+
+
+ 436200000
+
+
+
+
+
+
+ BY70-2
+ 45857
+ 2020-042B
+ Operational
+
+ false
+ Coordinated
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=531
+ Mingchuan Wei BG2BHC
+ 2018-11-18
+ 2018-11-30
+ bg2bhc@gmail.com.nospam
+
+ Verified
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ BY70-1 has been used for the BY70-2
+ satellite
+
+
+
+ FM to codec2 digital audio transponder
+
+ https://www.amsat.org/wordpress/wp-content/uploads/2019/03/N8HM_LilacSat_LO-90.pdf.
+
+ Contrairement à BY70-1, qui transportait un
+ transpondeur FM, BY70-2 transportera un transpondeur FM-à-Codec2
+ similaire à ceux qui se trouvaient à bord de LO-90 et Taurus-1.
+ Vous trouverez plus d’informations sur le fonctionnement de ce
+ type de transpondeur dans un article intitulé « Digital Voice on
+ Amateur Satellites » : Experiences with LilacSat-OSCAR 90″ de
+ Paul Stoetzer, N8HM, dans le numéro de janvier/février 2019 de
+ The AMSAT Journal.
+
+
+
+ Beacon
+ 436200000
+
+ BPSK
+ 9600 bps
+
+
+
+
+ FM to codec2 digital audio transponder
+
+ 145920000
+
+
+ 436200000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CACTUS-1
+ 0
+ Inactive
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+ 2021-08-04+02:00
+
+ Mission description
+ https://github.com/sandyfreelance/cactus-open
+
+
+
+
+
+ Telemetry 1
+ 434031000
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CADRE
+ 41475
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 437485000
+
+ GMSK 1Mbit OQPSK
+ 9600bps
+
+
+
+
+ Beacon
+ 3404000000
+
+ OQPSK
+ 1Mbit
+
+
+
+
+
+
+ CAERUS
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 437600000
+
+ AFSK
+ 1200
+
+ KJ6FIX-1
+
+
+
+
+ CAMSAT CAS-6
+ 44881
+ 2019-093C
+ Operational
+
+ true
+ Coordinated
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=622
+ Alan Kung BA1DU
+ 2018-05-18
+ 2018-07-19
+ alankung@vip.sina.com.nospam
+
+
+ 2019-12-20
+ CZ-4B launch vehicle from Taiyuan Satellite Launch
+ Center
+
+
+ TQ-OSCAR 108 (TO-108)
+ Verified
+ 2021-08-13+02:00
+
+ Information document
+
+ https://ukamsat.files.wordpress.com/2019/12/camsat-news-release-for-cas-6-satellie.pdf
+
+
+
+
+
+
+ CW Beacon
+ 145910000
+
+ CW
+
+
+ BJ1SO
+
+
+ GMSK Beacon
+ 145890000
+
+ GMSK
+ 4800
+
+ BJ1SO
+
+
+ U/V Linear Transponder
+
+ 435282000
+ 435302000
+
+
+ 145945000
+ 145965000
+
+
+ true
+
+
+
+
+ Digital telemetry format
+
+ https://ukamsat.files.wordpress.com/2019/12/cas-6-satellites-digital-telemetry-description.pdf
+
+
+
+ CW telemetry format
+
+ https://ukamsat.files.wordpress.com/2019/12/cas-6-cw-telemetry-encoding-format.pdf
+
+
+
+
+
+
+
+
+
+
+
+ CANX-1
+ 27847
+ 2003-031H
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437880000
+
+ AFSK
+ 1200
+
+ VA3SFL
+
+
+
+
+ CANX-2
+ 32790
+ 2008-021H
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 0
+
+ OverGSonly
+
+ VA3SFL
+
+
+ Main
+ 0
+
+ 6KbpsGMSK
+
+ VA3SFL
+
+
+
+
+ CanX-4
+ 40055
+ 2014-034C
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437365000
+
+ 32Kbps-256Kbps BPSK
+
+
+
+
+
+ CanX-5
+ 40056
+ 2014-034D
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437365000
+
+ 32Kbps-256Kbps BPSK
+
+
+
+
+
+ Cape III
+ 47309
+ 2021-002A
+ Operational
+
+ true
+ Coordinated
+ University of Louisiana at Lafayette
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=519
+ Nick Pugh W5UL
+ 2016-08-16
+ 2016-11-01
+ quadpugh@bellsouth.net.nospam
+
+
+ 2020-01-13
+ Virgin Orbit Test Flight
+
+
+
+ 2021-08-13+02:00
+
+ Mission description
+
+ https://ee.louisiana.edu/research/cape/satellite-missions/cape-3
+ To implement a new radiation detection
+ experiment using tribo-luminescent crystals.
+
+
+
+
+ Telemetry 1
+ 145825000
+
+ -
+
+
+ W5UL-11
+
+
+ Telemetry 2
+ 435325000
+
+ -
+
+
+ W5UL-11
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CAPE-1
+ 31130
+ 2007-012P
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 435248000
+
+ AFSK
+ 1200
+
+ K5USL
+
+
+
+
+ CAPE-2 (LO-75)
+ 39382
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 145825000
+
+ AFSK
+ 1200
+
+
+ CW
+
+ W5UL-15
+
+
+
+
+ CAS-3E (XW-2E)
+ 40909
+ 2015-049L
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=470
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 145910000
+
+ CW
+ 0
+
+ BJ1SF
+
+
+ Beacon
+ 145890000
+
+ GMSK
+ 9600
+
+ BJ1SF
+
+
+ Repeater
+
+ 435270000
+ 435290000
+
+
+ 145915000
+ 145935000
+
+ LSB/USB
+
+
+
+
+ CAS-4A (ZHUHAI-1 01)
+ 42761
+ 2017-034D
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=533
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon 1
+ 145855000
+
+ CW
+ 0
+
+
+ GMSK
+ 4800bps
+
+ BJ1SK
+
+
+ Beacon 2
+ 145835000
+
+ CW
+ 0
+
+
+ GMSK
+ 4800bps
+
+ BJ1SK
+
+
+ Repeater
+
+ 435210000
+ 435230000
+
+
+ 145860000
+ 145880000
+
+ SSB 20_kHz bandwidth inverted
+
+
+
+
+ CAS-4B (ZHUHAI-1 02)
+ 42759
+ 2017-034B
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=533
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 145910000
+
+ CW
+ 0
+
+
+ GMSK
+ 4800 bps
+
+ BJ1SL
+
+
+ Beacon
+ 145890000
+
+ FSK
+ 4800
+
+
+
+
+ Repeater
+
+ 435270000
+ 435290000
+
+
+ 145915000
+ 145935000
+
+ SSB 20_kHz bandwidth inverted
+
+
+
+
+ CAS-7B (BP-1B)
+ 44443
+
+ Decayed
+
+ 2019-07-25
+ Jiuquan
+
+ BIT Progress-OSCAR 102 (BO-102)
+ verified
+ 2021-03-22
+
+ IARU coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=659
+
+
+ Information
+ CAS-7B (BP-1B) was developed by the Chinese Amateur
+ Satellite Group (CAMSAT), and in cooperation with the Beijing
+ Institute of Technology (BIT). CAMSAT completed the project
+ planning, design, build, and testing, and manages the on-orbit
+ operation of the satellite. BIT provided the satellite
+ environmental testing, launch support, and financial support.
+ Many students from BIT were involved with the project, learning
+ about satellite technology and amateur radio. The satellite
+ carries a CW telemetry beacon and FM repeater that has been
+ active since launch.
+
+
+
+ CW Beacon
+ 435715000
+
+ CW
+
+
+
+
+ FM Transpondeur
+
+ 145900000
+
+
+ 435690000
+
+ FM
+ yes
+
+
+
+
+ Telemetry information
+
+ https://ukamsat.files.wordpress.com/2019/06/camsat-cas-7b-news-release.pdf
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Challenger (US01)
+ 42721
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 437510000
+
+ GMSK
+ 9600 bps
+
+ QBUS01
+
+
+
+
+ ChargerSat-1
+ 39405
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437405000
+
+ FSK
+ 9600
+
+
+
+
+
+ Chasqui-1
+ 40117
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437025000
+
+ AFSK
+ 1200
+
+
+ GMSK
+ 9600
+
+
+
+
+
+ CHOMPTT
+ 43855
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=523
+
+
+ 2018-12-16
+ Launch Complex 1 - Māhia Peninsula, New Zealand
+
+
+ Verified
+ 2021-08-13+02:00
+
+ CHOMPTT presentation
+
+ http://mstl.atl.calpoly.edu/~bklofas/Presentations/DevelopersWorkshop2014/Conklin_CHOMPTT.pdf
+
+
+
+ IARU coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=523
+
+
+
+
+ Telemetry
+ 437560000
+
+ GMSK
+ 9600 bauds
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ChubuSat-1
+ 40300
+ 2014-070C
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437485000
+
+ 1200bps 9600bps CW
+
+
+ CW
+
+ JJ2YJY
+
+
+
+
+ ChubuSat-2
+ 41338
+ 2016-012B
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=447
+
+ draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437102000
+
+ GMSK
+ 9600 bps
+
+
+ AFSK
+ 1200 bps
+
+
+ CW
+
+
+ JJ2YPN
+
+
+
+
+ ChubuSat-3
+ 41339
+ 2016-012C
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=448
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437424000
+
+ GMSK
+ 9600 bps
+
+
+ AFSK
+ 1200 bps
+
+
+ CW
+
+
+ JJ2YPO
+
+
+
+
+ CNUSail-1
+ 43133
+ Unknown
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 437100000
+
+ GMSK
+ 9600 bps
+
+
+
+
+
+
+ CO-55(CUTE-I)
+ 27844
+ 2003-031E
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=56
+
+ CO-55
+ 2021-08-13+02:00
+
+
+ Main
+ 4368375000
+
+ AFSK
+ 1200
+
+ JQ1YCY
+
+
+
+
+ CO-56(CUTE17)
+ 28941
+ Decayed
+ CO-56
+ 2020-05-24+02:00
+
+
+ Main
+ 437382000
+
+ AFSK
+ 1200
+
+ JQ1YPC
+
+
+ Main
+ 437382000
+
+ GMSK
+ 9600
+
+
+
+
+
+
+ CO-57(XI-IV)
+ 27848
+ 2003-031J
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=19
+
+ CO-57
+ 2021-08-13+02:00
+
+
+ Main
+ 4368475000
+
+ AFSK
+ 1200
+
+
+ CW
+
+ JQ1YCW
+
+
+
+
+ CO-58(XI-V)
+ 28895
+ 2005-043F
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=37
+
+ CO-58
+ 2021-08-13+02:00
+
+
+ Main
+ 437465000
+
+ AFSK
+ 1200
+
+
+ CW
+
+ JQ1YGW
+
+
+
+
+ CO-66(SEEDS-II)
+ 32791
+ 2008-021J
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=36
+
+ CO-66
+ 2021-08-13+02:00
+
+
+ Main
+ 437485000
+
+ CW
+
+
+ AFSK
+ 1200
+
+ JQ1YGU
+
+
+
+
+ Columbia (US04)
+ 42702
+ Inactive
+ Draft
+ 2021-08-04+02:00
+
+
+ Beacon
+ 437055000
+
+ GMSK
+ 9600 bps
+
+ KD8CJT
+
+
+
+
+ COMPASS-1
+ 32787
+ 2008-021E
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437275000
+
+ AFSK
+ 1200
+
+
+ CW
+
+ DP0COM
+
+
+
+
+ COMPASS-2 - DragSail (DE04)
+ 42777
+ Inactive
+ Draft
+ 2021-08-04+02:00
+
+ Information page
+ http://149.201.163.33/?page_id=125
+
+
+
+ Beacon
+ 437300000
+
+ s AFSK
+ 1200 Bps
+
+
+
+
+ Beacon
+ 2403000000
+
+ AFSK
+ 1200 Bps
+
+
+
+
+
+
+
+
+
+
+ Amateur radio information
+ http://149.201.163.33/?page_id=892
+
+
+
+ https://www.dropbox.com/sh/v6ji3pduzm4ue4m/AABQGgBKULDBgroJWs0e-Bqwa?dl=0
+
+
+
+ COPPER
+ 39395
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437290000
+
+ FSK
+ 9600
+
+
+
+
+
+ CP-6
+ 35003
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437365000
+
+ AFSK
+ 1200
+
+
+ CW
+
+ N6CP
+
+
+
+
+ CP-7 (DAVE)
+ 43615
+ 2018-070C
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=513
+
+ Draft
+ 2021-08-13+02:00
+
+ Project information
+ https://www.polysat.org/launched
+
+
+
+
+ Beacon
+ 437150000
+
+ FSK
+ 9600 bps
+
+
+ CW
+
+
+ WI2XNR-1
+
+
+
+
+ CP-9
+ 44360
+ 2019-036X
+ Operational
+
+ 2019-06-25
+
+
+
+ DRAFT
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=481
+ CP-9 has been coordinated by IARU
+ CP-9 a été coordonné par l'IARU
+
+
+ Information page
+ https://www.polysat.org/
+
+
+
+ Telemetry 1
+ 437505000
+
+ FSK
+ 9k6
+
+
+ FSK
+ 19k2
+
+
+ FSK
+ 38k4
+
+ KJ6RQH-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CP5
+ 38763
+ 2012-048F
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437405000
+
+ AFSK
+ 1200
+
+ CP5
+
+
+
+
+ CSIM
+ 43793
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=585
+
+
+ Vandenberg Air Force Base, California
+
+
+ Verified
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=585
+ CSIM has been coordinated by IARU
+ CSIM a été coordonné par l'IARU
+
+
+
+ Telemetry 1
+ 437250000
+
+ GMSK
+ 19200 kbps
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CSSWE
+ 38761
+ 2012-048D
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437349000
+
+ GMSK
+ 9600
+
+ CSSWE
+
+
+
+
+ CSTB-1
+ 31133
+ 2007-012R
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 0
+
+ AFSK
+ 1200
+
+
+
+
+
+
+ CSUNSat1
+ 42715
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 437400000
+
+ CW
+ 0
+
+
+ GMSK
+ 9600 bps
+
+ CSUNSAT1
+
+
+
+
+ CUAVA-1
+ 0
+ Inactive
+
+
+
+
+ DRAFT
+ 2021-08-04+02:00
+
+ IARU Coordination
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=
+ CUAVA-1 has been coordinated by IARU
+ EntrySat a été coordonné par l'IARU
+
+
+
+ Telemetry U
+ 437075000
+
+ GMSK
+ 9k6
+
+
+
+
+ Telemetry S
+ 2404000000
+
+
+
+
+
+
+
+ Telemetry S?
+ 5840000000
+
+
+
+
+
+
+
+ Telemetry M
+ 76800000000
+
+
+
+
+
+
+
+ transpondeur U
+
+ 145875000
+
+
+
+
+
+ transpondeur S
+
+ 2404000000
+
+
+
+
+
+ Transponder
+
+ 5660000000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CubeBel-1(BSUSat-1)
+ 43666
+ 2018-083E
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=577
+
+ Draft
+ 2021-08-13+02:00
+
+ IARU coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=577
+
+
+
+
+
+ Beacon
+ 436990000
+
+ GMSK
+ 4800 bps
+
+
+ GMSK
+ 9600 bps
+
+ EU10S
+
+
+ Digipeater
+
+ 436200000
+
+
+ 436200000
+
+
+
+
+
+
+ information for amateur radio comunitie
+
+ https://www.raumfahrttechnik.tu-berlin.de/menue/amateur_radio/parameter/en/
+
+
+ Telemetry description
+ https://bsusat.com/projects/telemetry-data-structure
+
+
+ How to upload telemetry
+
+ https://bsusat.com/for-radio-amateurs/how-to-upload-telemetry
+
+
+
+
+
+
+ CubeBug-1
+ 39153
+ 2013-018D
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=239
+
+ 2021-08-13+02:00
+
+
+ Main
+ 437438000
+
+ AFSK
+ 1200
+
+ CUBEB1
+
+
+
+
+ CubeBug-2 (LO-74)
+ 39440
+ 2013-066AA
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=130
+
+
+ 2013-11-21
+ Orenburg, Russia
+
+ Verified
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=310
+
+
+
+
+ Main
+ 437445000
+
+ FSK
+ 1200
+
+
+ GMSK
+ 9600
+
+ CUBEB2-6
+
+
+
+
+ Amateur Radio – PEØSAT - information on telemetry data
+
+ https://www.pe0sat.vgnet.nl/satellite/cube-nano-picosats/cubebug-2/
+
+
+
+
+
+
+
+
+
+
+ CubeSail 1
+ 43851
+ Unknown
+
+ Launch Complex 1 - Māhia Peninsula, New Zealand
+
+
+ Draft
+ 2020-05-24+02:00
+
+
+
+
+
+
+
+ Telemetry
+ 437505000
+
+ GMSK
+ 9600 bauds
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CubeSX-HSE(RS13S)
+ 47952
+ 2021-022W
+ Operational
+
+ true
+ Coordinated
+ HSE Tikhonov Moscow Institute of Electronics
+ and Mathematics (MIEM HSE, https://miem.hse.ru/en/)
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=788
+ Roman Komyagin R2ANF
+ 2021-02-04
+ 2021-03-18
+ roman_komyagin@list.ru.nospam
+
+
+ 2021-03-22
+
+
+
+ Verified
+ 2021-08-13+02:00
+
+
+
+
+
+
+
+
+ Beacon
+ 435650000
+
+ GMSK -USP FEC protocol
+ 9600
+
+
+
+ DATV
+ 10455000000
+
+ DVB-S2
+
+
+
+
+
+
+ SPUTNIX USP FEC protocol general description
+ https://github.com/sputnixru/SX-USP
+
+
+ Information for hamradio
+ https://sputnix.ru/en/satellites/for-radioamateurs
+
+
+
+
+
+
+
+
+
+
+ CubeSX-Sirius-HSE(RS14S)
+ 47951
+ 2021-022V
+ Operational
+
+ true
+ Coordinated
+ HSE Tikhonov Moscow Institute of Electronics
+ and Mathematics (MIEM HSE, https://miem.hse.ru/en/)
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=789
+ Roman Komyagin R2ANF
+ 2021-02-04
+ 2021-03-18
+ roman_komyagin@list.ru.nospam
+
+
+ 2021-03-22
+
+
+
+ Verified
+ 2021-08-13+02:00
+
+
+
+
+
+
+
+
+ Beacon
+ 437050000
+
+ GMSK -USP FEC protocol
+ 9600
+
+
+
+ DATV
+ 10465000000
+
+ DVB-S2
+
+
+ RS14S
+
+
+
+
+ SPUTNIX USP FEC protocol general description
+ https://github.com/sputnixru/SX-USP
+
+
+ Information for hamradio
+ https://sputnix.ru/en/satellites/for-radioamateurs
+
+
+
+
+
+
+
+
+
+
+ CUNYSAT-1
+ 39470
+ 2013-072J
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437505000
+
+ GMSK
+ 9600
+
+
+ CW
+
+
+
+
+
+ CUSat-1
+ 39266
+ 2013-055B
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437405000
+
+ AFSK
+ 1200
+
+ BOTTOM
+
+
+
+
+ CUSat-2
+ 39271
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437485000
+
+ AFSK
+ 1200
+
+ WG2XTI
+
+
+
+
+ CUTE
+
+ To be launch
+
+ true
+ Coordinated
+ University of Colorado
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=720
+ Scott Palo K0UOR
+ 2020-01-26
+ 2020-04-25
+ palo@colorado.edu.nospam
+
+
+ 2021-09-23
+ Vandeberg
+ Atlas-5(401)
+ ElaNa 34
+
+
+ Verified
+ 2021-08-28
+
+ Mission description
+ https://lasp.colorado.edu/home/cute/
+ 6U CubeSat. The Colorado Ultraviolet Transit
+ Experiment (CUTE) will have a 1‐year mission life time and plans
+ to launch in early 2021. The mission goal is to train and
+ educate students while conducting scientific research. The
+ onboard science instrument uses nearultraviolet (NUV)
+ transmission spectroscopy from 255 to 330 nanometers (nm) to
+ characterize the composition and mass‐loss rates of exoplanet
+ atmospheres. CUTE measures how the NUV light from the host star
+ is changed as the exoplanet transits in front of the star and
+ passes through the planet’s atmospheres. CUTE’s spectrally
+ resolved lightcurve will provide constraints on the composition
+ and escape rates of these atmospheres, and may provide the first
+ concrete evidence for magnetic fields on extrasolar planets.
+ This mission is similar to the CSSWE, MinXSS‐1, MinXSS‐2 and
+ CSIM, which have gathered over 100 MB of data from amateur
+ operators and were coordinated by the IARU. As has been the case
+ in the past, we will be actively soliciting the telemetry from
+ amateurs. The information provided by amateurs has been crucial
+ for past missions, enabling us to detect instrument orbits and
+ the Doppler‐shifted communication frequencies and troubleshoot
+ anomalies. It is common for all of our missions to have
+ extensive student involvement during the design, building,
+ testing, and operation of the instrument. We take the training
+ of next generation scientists and engineers very seriously.
+ While the exact number of students who are involved in CUTE
+ continues to increase, similar missions such as CSIM, CSSWE,
+ QB50‐Challenger and MinXSS trained over 150 undergraduate and
+ graduate students as part of our ASEN 5018/6028 CubeSat course
+ and independent study. Additionally in August 2018 the
+ University of Colorado and AMSAT‐NA executed a collaborative
+ agreement on the development of communications transponders for
+ small satellites. Our students will continue to be trained in
+ the art of satellite communications, space weather, spacecraft
+ design and operations. All students working on our cubesat
+ projects are strongly encouraged to pursue their radio amateur
+ license if they are not already licensed.
+
+
+
+
+ Telemetry UHF
+ 437250000
+
+ GMSK
+ 9k6
+
+
+ GMSK
+ 1k2
+
+
+
+
+ Telemetry S
+ 437250000
+
+ BPSK
+ 1 Mbps
+
+
+
+
+
+
+ CUTE beacon (DK3WN SatBlog)
+
+ https://www.satblog.info/wp-content/uploads/2021/08/CUTE_beacon_definition.xlsx
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CUTE17+APDII
+ 32785
+ 2008-021C
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=78
+
+ CO-65
+ Draft
+ 2021-08-13+02:00
+
+
+ Main
+ 0
+
+ GMSK
+ 9600
+
+ JQ1YTC
+
+
+ Main
+ 437275000
+
+ AFSK
+ 1200
+
+
+ CW
+
+ JQ1YTC
+
+
+
+
+ CXBN-2
+ 42704
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 437525000
+
+ FSK
+ 9600 bps
+
+
+
+
+
+
+ CXBN
+ 38762
+ 2012-048E
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437525000
+
+ GFSK
+ 9600
+
+
+
+
+
+
+ D-SAT
+ 42794
+ 2017-036AF
+ Inactive
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437505000
+
+ 4800bps GMSK CW
+
+
+
+ GMSK
+ 4800 bps
+
+
+ CW
+
+
+ U1-DSAT-U1
+
+
+
+
+ D-Star ONE EXOCONNECT
+ 44413
+ Inactive
+ INIT
+ 2021-08-04+02:00
+
+
+ Beacon
+ 435700000
+
+ mobitex GMSK
+ 4800
+
+
+ mobitex GMSK
+ 9600
+
+
+
+
+
+
+ D-Star ONE iSat
+ 43879
+ Operational
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 435700000
+
+ GMSK
+ 4800
+
+
+ GMSK4k8
+ 9600
+
+ DP2GOS
+
+
+ Repeater
+
+ 437325000
+
+
+ 435525000
+
+ FM
+
+
+
+
+ D-Star ONE Phoenix
+ 43188
+ 2018-014J
+ Inactive
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+ 435525000
+
+ D-Star Telemetry
+ 0
+
+ DP1GOS
+
+
+
+
+ D-Star ONE Sparrow
+ 43881
+ 2018-111F
+ Operational
+
+ 2018-12-27
+ Vostochny
+
+
+ Verified
+ 2021-08-13+02:00
+
+ D-Star ONE presentation
+ http://www.d-star.one/
+
+
+
+ IARU coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=582
+
+
+
+
+ Telemetry
+ 435700000
+
+ GMSK Mobitex (CMX990)
+ 4800 bauds
+
+ DP1GOS
+
+
+ D-Star
+
+ 437325000
+
+
+ 435525000
+
+ DSTAR
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DANDE
+ 39267
+ 2013-055C
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 436750000
+
+ GMSK
+ 9600
+
+ DANDE-2
+
+
+
+
+ DaVinci
+ 0
+ Inactive
+
+ Launch Complex 1 - Māhia Peninsula, New Zealand
+
+
+ Verified
+ 2021-08-04+02:00
+
+ IARU coordination
+
+ http://www.amsatuk.me.uk/iaru/informal_detail.php?serialnum=524
+ No frequency coordination has been provided
+
+
+ DaVinci project pages
+ https://www.projectdavincicubesat.org/
+
+
+
+ Twitter @DavinciCubeSat
+ https://twitter.com/davincicubesat
+
+
+
+ FaceBook
+ https://www.facebook.com/Project-DaVinci-1225716617456409/
+
+
+
+
+ Telemetry
+ 436500000
+
+ GMSK
+ 9600 bauds
+
+
+ CW
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Delfi-n3Xt
+ 39428
+ 2013-066N
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 2405000000
+
+ BPSK MSK
+ 2400
+
+
+
+
+
+ Delphini-1
+ 44030
+ Decayed
+
+ true
+
+ Verified
+ 2021-03-21
+
+
+ Beacon
+ 437500000
+
+ GMSK
+ 1200 Bps
+
+
+ GMSK
+ 4800 Bps
+
+
+ GMSK
+ 9600 Bps
+
+
+
+
+
+
+ DeorbitSail
+ 40719
+ 2015-032E
+ Inactive
+ Drfat
+ 2021-08-13+02:00
+
+
+ Beacon
+ 145975000
+
+ BPSK
+ 1200bps
+
+ DOS
+
+
+
+
+ Descent
+ 0
+
+ Inactive
+
+ true
+ Coordinated
+ assonde School of Engineering @ York
+ University
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=625
+ Vidushi Jain VE3ARY
+ vidushij@my.yorku.ca.nospam
+
+
+
+
+ 2021-08-04+02:00
+
+ CubeSats can serve multiple stakeholders too: use of the
+ DESCENT mission to develop national and international
+ collaboration
+
+ https://casi.ca/resources/Documents/ASTRO/2018/Papers%20Submitted/1C-3%20CubeSats%20Can%20Server%20Multiple%20Stakeholders%20Too%20-Use%20of%20the%20DESCENT%20Mission%20to%20Develop%20National%20and%20International%20Collaboration.pdf
+ The DESCENT space segment consists of two 1U CubeSats
+ attached with a 100m long tether.As the tether moves along the
+ Earth’s plasma, the tether collects electrons from the Earth’s
+ magnetic field and ejects them from an on-board Spindt array.
+ This creates a Lorentz force (H. Wen, 2008) which slows the
+ satellite down and brings it down to burn up in the Earth’s
+ atmosphere. The satellite will be launched from the
+ International Space Station (ISS) by NanoRacks, a US company
+ providing small satellites launch service from the ISS. Upon
+ deployment, after the attitude stabilization is achieved, the
+ two CubeSats will be commanded to separate. A ground station
+ located at York University, Toronto, Canada will be responsible
+ for communications to the spacecraft. The mission duration,
+ along with the deorbiting process is expected to last six
+ months.
+
+
+
+ https://www.ohio.edu/engineering/avionics/
+
+
+
+
+ UHF
+ 435775000
+
+ GMSK
+ 19k34
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ vidushij@my.yorku.ca
+
+
+
+
+ DIWATA-2
+ 43678
+ 2018-084H
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=593
+
+
+ 2018-10-29
+ Tanegeshima Space Center in Japan
+
+ PO-101
+ Verified
+ 2021-08-13+02:00
+
+ Project page
+ http://phl-microsat.upd.edu.ph/diwata2
+
+
+
+ Facebook
+ https://www.facebook.com/PHLMicrosat
+
+
+
+
+ Telemetry APRS
+ 145900000
+
+ BPSK
+ 1200 bauds
+
+
+ CW
+ 120 WPM
+
+ D1W2PH
+
+
+ Main
+
+ 437700000
+
+
+ 145900000
+
+ FM / APRS
+
+
+
+
+
+ Telemetrie description
+ http://phl-microsat.upd.edu.ph/diwata2
+
+
+
+
+
+
+
+
+
+
+ DIY-1
+ 47963
+ 2021-022AH
+ Launched
+
+ true
+ Coordinated
+ Diysatellite Group
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=501
+ Gustavo Carpignano LW2DTZ
+ 2016-04-04
+ 2016-04-16
+ gus@diysatellite.com.nospam
+
+
+ 2021-03-22
+
+
+
+ Verified
+ 2021-08-13+02:00
+
+ project page
+ www.diysatellite.com
+
+
+
+
+
+ Beacon
+ 437125000
+
+ RTTY 100BD 7N2
+
+
+
+ CW
+ 15 ppm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DO-17(DOVE)
+ 20440
+ 1990-005E
+ Inactive
+ DO-17
+ 2021-08-04+02:00
+
+
+ Main
+ 2401220000
+
+ AFSK
+ 1200
+
+ DOVE-1
+
+
+
+
+ DO-64(DELFI-C3)
+ 32789
+ 2008-021G
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=68
+
+ DO-64
+ Draft
+ 2021-08-13+02:00
+
+
+ Main
+ 1458675000
+
+ BPSK
+ 1200
+
+ DLFIC3
+
+
+ Main
+ 145930000
+
+ CW
+
+ DLFIC3
+
+
+
+
+ DOSAAF-85 (RS-44)
+ 44909
+ 2019-096E
+ Operational
+
+ false
+
+
+ 2019-12-26
+ Plesetsk Cosmodrome
+
+ Draft
+ 2021-08-13+02:00
+
+ satellite information
+
+ https://r4uab.ru/2020/04/30/na-sputnike-dosaaf-85-rs-44-dlya-testirovaniya-byl-vklyuchen-radiolyubitelskij-retranslyator/
+
+
+
+ Beacon
+ 435605000
+
+ CW
+ RS44
+
+
+
+
+ Transpondeur
+
+ 145935000
+ 145995000
+
+
+ 435610000
+ 435670000
+
+ LSB/USB
+ yes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Dove-1 - 2
+ 39144
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 2420000000
+
+ AFSK
+ 1200
+
+
+
+
+
+ DRAGONSat(AggieSat-2)
+ 35690
+ Decayed
+ Verified
+ 2020-05-24+02:00
+
+
+ Main
+ 436250000
+
+ FSK
+ 19200
+
+
+
+
+ Main
+ 437325000
+
+ FSK
+ 9600
+
+
+
+
+
+
+ DragonSat-1
+ 39383
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 0000
+
+ FSK
+ 9600
+
+
+
+
+
+ DTUSat-2
+ 40030
+ 2014-033W
+ Operational
+
+ 2014-06-19
+ Orenburg, Russia
+
+ Verified
+ 2019-05-06
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=87
+
+
+
+ DTUsat Site
+ http://www.dtusat.dtu.dk/
+
+
+
+
+ Main
+ 2401835000
+
+ MSK
+ 1200
+
+
+ CW
+
+
+
+
+
+
+ DTUSAT
+ 27842
+ 2003-031C
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437475000
+
+ AFSK
+ 2400
+
+ OZ2DTU
+
+
+
+
+ DUCHIFAT-1
+ 40021
+ 2014-033M
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=258
+
+
+ 2014-06-19
+ Orenburg, Russia
+
+ Verified
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=258
+
+
+
+ Duchifat 1 site
+ http://www.h-space-lab.org/php/duchifat1-en.php
+
+
+
+
+ Main
+ 145980000
+
+ BPSK
+ 1200
+
+
+ CW
+
+ 4X4HSL
+
+
+ APRS Digipeater
+
+ 435220000
+
+
+ 145980000
+
+ AFSK / BPSK
+ 1200
+
+
+
+
+
+
+
+
+
+
+
+
+
+ http://www.h-space-lab.org/download/Public%20Release.rar
+
+
+
+ Duchifat3
+ 44854
+ 2019-089C
+ Operational
+
+ true
+ Coordinated
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=586
+ Shamai Opfer 4Z1WS and David Greenberg 4X1DG
+ 2017-10-17
+ 2017-11-22
+ 4z1ws@amsat.org.nospam and
+ david.greenberg@bezeqint.net.nospam
+
+
+ 2019-12-11
+
+
+
+ INIT
+ 2021-08-13+02:00
+
+
+
+
+
+
+
+
+
+ Beacon
+ 436400000
+
+ PBSK
+ 9600
+
+
+
+
+ U/V FM
+
+ 145970000
+
+
+ 436400000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DUTHSat (GR01)
+ 42724
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 436420000
+
+ BPSK
+ 1200 bps
+
+ SZ2DUT
+
+
+
+
+ DX-1
+ 40071
+ 2014-037C
+ Operational
+
+
+ Main
+ 438225000
+
+ GFSK
+ 9600
+
+ DAURIA
+
+
+
+
+ e-st@r
+ 38079
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437445000
+
+ AFSK
+ 1200
+
+ E-STAR-I
+
+
+
+
+ E-Star-2
+ 41459
+ 2016-025D
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=241
+
+
+ 2016-04-25
+ Kourou, Guyanne Française
+
+ Verified
+ 2021-08-13+02:00
+
+ Porject page
+ http://www.cubesatteam-polito.com/e-star-ii/
+
+
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=241
+
+
+
+
+ Main
+ 437485000
+
+ AFSK
+ 1200
+
+
+ CW
+
+
+
+
+
+
+ E1P-U2
+ 37855
+ 2011-061F
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=116
+
+ 2021-08-13+02:00
+
+
+ Main
+ 437502000
+
+ AFSK
+ 1200
+
+
+
+
+
+
+ Eagle-1 (BeakerSat-1)
+ 39437
+ 2013-066X
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437465000
+
+ GFSK
+ 9600
+
+
+
+
+
+ Eagle-2 ($50SAT MO-76)
+ 39436
+ Decayed
+ MO-76
+ Draft
+ 2015-05-30
+
+ project website
+ http://www.50dollarsat.info/
+ $50SAT (aka Eagle-2 prelaunch) MO-76 was launched
+ aboard Unisat-5 on November 21, 2013 from Dombarovsky, Russia on
+ a Dnepr vehicle. This project is a joint effort involving
+ Professor Bob Twiggs, Morehead State University, Howie DeFelice,
+ AB2S, Michael Kirkhart, KD8QBA, and Stuart Robinson, GW7HPW.
+ (Source AMSAT-NA)
+
+
+ Yahoo group Discution
+
+ https://groups.yahoo.com/neo/groups/50dollarsat/conversations/topics
+
+
+
+ Main
+ 437505000
+
+ GFSK
+ 9600
+
+
+ CW
+
+
+ RTTY
+
+
+
+
+
+ EagleSat-1
+ 43018
+ 2017-073F
+ Inactive
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437645000
+
+ AFSK
+ 1200bps
+
+
+
+
+
+
+ EASAT-2
+ 51081
+
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SO-114
+
+
+
+
+
+
+
+
+
+ Telemetry
+ 436666000
+
+ AFSK
+ 1200
+
+
+ AFSK
+ 2400
+
+
+ CW
+
+
+ AM5SAT
+
+
+
+
+ 145875000
+
+
+ 436666000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ EcAMSat
+ 43019
+ 1998-067NG
+ Operational
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437095000
+
+ AFSK
+ 1200bps
+
+ KE6QLL
+
+
+
+
+ EDSN
+ -29
+ Unknown
+ 2020-05-24+02:00
+
+
+ Main
+ 437100000
+
+ AFSK
+ 1200
+
+
+
+
+
+ EduSat-1 (BIRD-N)
+ 42824
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 437372000
+
+ GMSK
+ 9600 bps
+
+
+ AFSK
+ 1200 bps
+
+
+ CW
+
+
+ JG6YJR
+
+
+
+
+ ELFIN-A
+ 43617
+ 2018-070E
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=431
+
+ Draft
+ 2021-08-13+02:00
+
+ Project information
+ https://elfin.igpp.ucla.edu/
+
+
+
+
+ Beacon
+ 437450000
+
+ GFSK
+ 9600bps
+
+ WJ2XNX
+
+
+
+
+ information for amateur radio comunitie
+ https://elfin.igpp.ucla.edu/listen-to-elfin
+
+
+ Telemetry description
+ https://elfin.igpp.ucla.edu/s/Beacon-Format_v2.xlsx
+
+
+ SatNOGS : Kaitai Struct telemetry
+
+ https://gitlab.com/librespacefoundation/satnogs/satnogs-decoders/blob/master/ksy/elfin.ksy
+
+
+
+
+
+ elfin@igpp.ucla.edu
+
+
+
+
+ ELFIN-B
+ 43616
+ 2018-070D
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=626
+
+ Draft
+ 2021-08-13+02:00
+
+ Project information
+ https://elfin.igpp.ucla.edu/
+
+
+
+
+ Beacon
+ 437450000
+
+ GFSK
+ 9600bps
+
+ WJ2XOX
+
+
+
+
+ information for amateur radio comunitie
+ https://elfin.igpp.ucla.edu/listen-to-elfin
+
+
+ Telemetry description
+ https://elfin.igpp.ucla.edu/s/Beacon-Format_v2.xlsx
+
+
+ SatNOGS : Kaitai Struct telemetry
+
+ https://gitlab.com/librespacefoundation/satnogs/satnogs-decoders/blob/master/ksy/elfin.ksy
+
+
+
+
+
+ elfin@igpp.ucla.edu
+
+
+
+
+ EnduroSat One
+ 43551
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=574
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437050000
+
+ GMSK
+ 9600bps
+
+ LZ0AMS
+
+
+
+
+ EntrySat
+ 44429
+ 1998-067QP
+ Inactive
+
+ true
+ Coordinated
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=334
+ Nicolas Nolhier F5MDY
+ 2013-10-15
+ 2015-01-08
+ nolhier@laas.fr.nospam
+
+
+ 2019-07-03
+ ISS
+
+
+ Verified
+ 2021-08-13+02:00
+
+ Mission description
+ https://www.csut.eu/en/project/entrysat/
+ The objective of the mission, to study the
+ atmospheric re-entry of debris, is well described, the
+ scientific requirements and the system requirements are fully
+ specified. However, given the short duration of analysis of
+ atmospheric re-entry phenomena, this mission is ambitious and
+ requires additional technical studies to show its full
+ feasibility.
+ The mission analysis is to consolidate, when information about
+ the orbit and the launcher will be well known.
+
+
+
+ Mission description
+ https://websites.isae-supaero.fr/entrysat/
+
+
+
+
+ Telemetry 1
+ 436950000
+
+ BPSK
+ 9k6
+
+ ON02FR
+
+
+
+
+ EntrySat reception
+ https://www.csut.eu/en/recevoir-entrysat/
+
+
+ AMSAT-F : Kaitai file Description (*.ksy)
+
+ https://code.electrolab.fr/xtof/telemetrydescription/tree/master/EntrySat
+
+
+ SatNogGS: Kaitai file Description (*.ksy)
+
+ https://gitlab.com/librespacefoundation/satnogs/satnogs-decoders/blob/master/ksy/entrysat.ksy
+
+
+
+
+
+
+ http://site.amsat-f.org/entrysat/
+
+
+
+ EO-88 (FUNcube-5 Nayif-1)
+ 42017
+ 2017-008BX
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=469
+
+ EO-88
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 145940000
+
+ BPSK SSB
+ 1200
+
+
+
+
+ Beacon
+ 145940000
+
+ BPSK SSB
+ 1200
+
+
+
+
+ Main
+
+ 435015000
+ 435045000
+
+
+ 145960000
+ 145990000
+
+ SSB/CW
+ yes
+
+
+
+
+ Telemetry dashboard
+ http://data2.amsat-uk.org/ui/nayif1
+
+
+
+
+
+ operations@funcube.org.uk
+
+ https://funcube.org.uk/working-documents/funcube-telemetry-dashboard/
+
+
+
+ EQUISat
+ 43552
+ Operational
+ Draft
+ 2019-08-07
+
+ Information page
+ https://brownspace.org/equisat/
+
+
+
+ Beacon
+ 435550000
+
+ CW
+
+
+
+ FSK
+ 9600
+
+
+ FSK
+ 4800
+
+
+
+
+
+
+
+
+
+
+ Dasboard
+ https://equisat.brownspace.org
+
+
+
+
+
+
+ Es'Hail-2 (Phase-4A QO-100)
+ 43700
+ 2018-090A
+ Operational
+ QO-100
+ Verified
+ 2021-08-13+02:00
+
+ P4A AMSAT DL Forum
+
+ https://forum.amsat-dl.org/index.php?board/3-es-hail-2-amsat-phase-4-a/
+ AMSAT DL Forum for Phase 4A payload
+ Forum de l'AMSAT-DL pour Phase 4A
+
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=630
+ AMSAT P4-A has been coordinated by IARU
+ AMSAT P4-A a été coordonné par l'IARU
+
+
+
+ Beacon
+
+
+ Linear transponder
+
+
+
+
+
+ Narrowband Linear transponder
+
+ 2400050000
+ 2400300000
+
+
+ 10489550000
+ 10489800000
+
+
+
+
+ Wideband digital transponder
+
+ 2401500000
+ 2409500000
+
+
+ 10491000000
+ 10499000000
+
+
+
+
+
+
+ ESEO (FUNcube 4)
+ 43792
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=82
+
+
+ 2018-12-03
+ Vandenberg Air Force Base, California
+
+
+ Verified
+ 2021-08-13+02:00
+
+ Project description
+ https://www.esa.int/Education/ESEO
+ During its operational mission phase, ESEO
+ will run the scientific experiments and test the various
+ technology demonstrators designed and built by the students, and
+ constantly monitor its own performance.
+
+
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=82
+ ESEO has been coordinated by IARU
+ ESEO a été coordonné par l'IARU
+
+
+
+ TLM 1
+ 145895000
+
+ BPSK
+ 4800 bps
+
+
+ BPSK
+ 1200 bps
+
+
+
+
+ TLM 2
+ 437000000
+
+ BPSK
+ 4800 bps
+
+
+ BPSK
+ 1200 bps
+
+
+
+
+ FM voice repeater
+
+ 1263500000
+
+
+ 145895000
+
+ FM
+ 67
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://download.funcube.org.uk/ESEO_Dashboard_v1177.msi
+
+
+
+ EstCube-1
+ 39161
+ 2013-021C
+ Inactive
+
+ Draft
+ 2021-08-04+02:00
+
+
+ Main
+ 437254000
+
+ GMSK
+ 9600
+
+
+ CW
+
+ ES5E-11 ES5E/S
+
+
+
+
+ ESTELLE
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 580000000
+
+ 1Mbps-10Mbps GFSK BPSK
+
+
+
+
+
+ ExAlta-1 (CA03)
+ 42734
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 436705000
+
+ 4k8*/9k6/19k2 GMSK
+ 4800
+
+
+ 4k8*/9k6/19k2 GMSK
+ 9600
+
+
+ 4k8*/9k6/19k2 GMSK
+ 19200
+
+ ON03CA
+
+
+
+
+ ExoCube
+ 40380
+ 2015-003E
+ Operational
+
+
+ Main
+ 437270000
+
+ FSK
+ 9600
+
+
+ CW
+
+ KK6HGC XO3
+
+
+
+
+ ExoCube2-CP12
+ 0
+ Inactive
+
+ true
+ Coordinated
+ Cal Poly
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=515
+ John Bellardo KK6HIT
+ 2016-08-07
+ 2016-11-06
+ bellardo@calpoly.edu.nospam
+
+
+ 2020-01-13
+ Virgin Orbit Test Flight
+
+
+
+ 2021-08-04+02:00
+
+ Mission description
+ https://www.polysat.org/
+ ExoCube 2 is a relaunch of the original
+ ExoCube which was launched in early 2015. ExoCube 2 has
+ undergone a complete redesign of the antenna deployment
+ mechanisms compared to the original ExoCube, and is a
+ collaboration between Cal Poly SLO, NASA Goddard, the University
+ of Wisconsin, and the University of Illinois. Cal Poly is
+ providing the bus design and manufacturing. NASA Goddard is
+ providing the scientific payload which is a custom mass
+ spectrometer. Both the University of Wisconsin and the
+ University of Illinois are responsible for collection and
+ interpretation of the payload data collected. The data in
+ question is the mass and densities of ions located in the
+ exosphere, which is the uppermost part of our atmosphere at
+ approximately 600km above sea level.
+ ExoCube 2 is Cal Poly’s 12th CubeSat (CP12) and similarly to its
+ predecessor is a 3U format- its outer dimensions are 10cm x 10cm
+ x 30cm (3.9in x 3.9in x 11.8in). The satellite has custom
+ payload housing and structure, machined in the Cal Poly shops by
+ Cal Poly students, as well as student designed electrical
+ boards. It has an advanced Attitude Determination Control System
+ (ADCS) which includes two deployable gravity gradient booms with
+ brass tip masses for passive stabilization, magnetic torquers
+ for de-tumbling, a momentum wheel for increased attitude
+ control, solar angle sensors to determine the satellite's
+ position, and custom Cal Poly software to process data from the
+ solar angle sensors. ExoCube 2 is due to launch on a Virgin
+ Orbit test launch late-2018.
+
+
+
+
+ Telemetry 1
+ 437150000
+
+ AX25 FSK
+ 9600
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ F-1
+ 38855
+ Decayed
+ Verified
+ 2020-05-24+02:00
+
+
+ Main
+ 437485000
+
+ AFSK
+ 1200
+
+
+ CW
+
+ XV1VN
+
+
+
+
+ FACSAT
+ 43721
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=635
+
+
+ India
+
+
+ Verified
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=635
+ FACSAT Hello World has been coordinated by
+ IARU
+ FACSAT Hello World a été coordonné par l'IARU
+
+
+
+ Telemetry 1
+ 437350000
+
+ GMSK
+ 9k6
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FalconSAT-3
+ 30776
+ 2007-006E
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=21
+
+ INIT
+ 2021-08-13+02:00
+
+
+ Digipeater
+
+ 145840000
+
+
+ 435103000
+
+ 9600bps GMSK
+
+
+
+
+ FEES
+ 48082
+ 2021-022AL
+ Operational
+
+ true
+
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=576
+
+
+
+
+
+
+
+
+ 2021-08-13+02:00
+
+ Mission description
+
+
+
+
+
+
+ Telemetry 1
+ 437200000
+
+ FSK
+ 9600
+
+
+ Lora
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FIREBIRD-II FU3
+ 40377
+ 2015-003B
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=400
+
+ 2021-08-13+02:00
+
+
+ Main
+ 437395000
+
+ FSK
+ 19200
+
+ K7MSU
+
+
+
+
+ FIREBIRD-II FU4
+ 40378
+ 2015-003C
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=400
+
+ 2021-08-13+02:00
+
+
+ Main
+ 437219000
+
+ FSK
+ 19200
+
+ K7MSU
+
+
+
+
+ FIREBIRD-U1
+ 39463
+ 2013-072B
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437405000
+
+ FSK
+ 19200
+
+ K7MSU
+
+
+
+
+ FIREBIRD-U2
+ 39464
+ 2013-072C
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437230000
+
+ FSK
+ 19200
+
+ K7MSU
+
+
+
+
+ First-MOVE
+ 39439
+ 2013-066Z
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=125
+
+
+ 2013-11-21
+ Orenburg, Russia
+
+ Verified
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=125
+
+
+
+ Mission information
+
+ https://www.pe0sat.vgnet.nl/satellite/cube-nano-picosats/first-move/
+ First-MOVE On-Board Computer Damaged - As we posted on
+ December 21st 2013, we are not receiving data beacons from
+ First-MOVE anymore. In contrast to the nominal mode in which CW
+ beacons and AX.25 beacons alternate every 60 seconds, we are now
+ hearing only CW beacons every 60 seconds. After trying many
+ different approaches to reset our on-board computer via
+ telecommands we re-analyzed our current options again last week.
+ This analysis resulted in the conclusion, that the on-board
+ software has sustained irreparable damage. The fact that we are
+ receiving CW beacons every 60 seconds indicates, that both the
+ transceiver and the power supply are functioning properly. For
+ the transceiver to return to the 60 second CW beacon mode, it
+ has to be power cycled, since this mode cannot be activated by
+ the on-board software. This means that there was definitively an
+ interruption in the power supply. In case of an interruption,
+ the computer should deactivate the 60 second CW beacon mode as
+ the first task during the boot sequence. As this has obviously
+ not happened, the only conclusion is, that the computer is not
+ getting through the entire boot sequence, probably because it
+ was damaged due to an erroneous write process on the memory
+ chip. Since there is no way to upload new software to First-MOVE
+ we see no possibility to continue the mission and perform the
+ planned experiments. It seems that First-MOVE has become
+ inactive after a very short lifetime. We will still receive the
+ CW beacons, but we will not hear anything but his name.
+
+
+
+
+ Main
+ 145970000
+
+ BPSK
+ 1200
+
+
+ CW
+
+ MOVE1
+
+
+ Repeater
+
+ 435520000
+
+
+ 145970000
+
+
+
+
+
+
+ FITSAT-1
+ 38853
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437250000
+
+ 1200bps/1152kbps
+
+ JG6YEW
+
+
+
+
+ FloripaSat-1
+ 44885
+ 2019-093G
+ Inactive
+
+ true
+ Coordinated
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=478
+ Mauricio Sinigaglia PP5BMS
+ 2018-09-27
+ 2018-10-23
+ mauricio.sinigaglia@gmail.com.nospam
+
+
+ 2019-12-20
+ CZ-4B launch vehicle from Taiyuan Satellite Launch
+ Center
+
+ INIT
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=646
+
+
+
+
+ FloripaSat-1 web site
+ https://floripasat.ufsc.br/
+
+
+
+
+
+ VHF Beacon
+ 145900000
+
+ GFSK
+ 1200
+
+
+
+
+ UHF Beacon
+ 436100000
+
+ GFSK
+ 2400
+
+
+
+
+ Repeater
+
+ 436100000
+
+
+ 436100000
+
+ GFSK -2400
+
+
+
+
+ INFORMATION FOR COMMUNICATING WITH FLORIPASAT-1
+ https://floripasat.ufsc.br/communication-info/
+
+
+
+
+
+
+ https://github.com/floripasat/grs/releases
+
+
+
+ FMN-1 (FengMaNiu-1)
+ 43192
+ 2018-015A
+ Operational
+
+ true
+
+ INIT
+ 2021-08-13+02:00
+
+ CITATION NEEDED - https://xkcd.com/285/
+
+
+
+
+
+ Beacon
+ 435350000
+
+ BPSK
+ 9600bps
+
+ BUAABJ
+
+
+ Repeater
+
+ 145945000
+
+
+ 435350000
+
+ FM
+
+
+
+
+ FO-12 (JAS-1)
+ 16909
+ 1986-061B
+ Inactive
+ FO-12
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 435795000
+
+ CW
+
+
+
+
+
+
+
+ FO-20(JAS-1b)
+ 20480
+ 1990-013C
+ Inactive
+ FO-20
+ 2021-08-04+02:00
+
+
+ Main
+ 435795000
+
+ CW
+
+
+
+
+
+
+ FO-29(JAS-2)
+ 24278
+ 1996-046B
+ Operational
+ FO-29
+ Draft
+ 2019-08-05
+
+
+ Main
+ 4357964000
+
+ CW
+
+ 8J1JCS
+
+
+
+
+ FO-69(FASTRAC-1)
+ 37227
+ 2010-062F
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437342000
+
+ AFSK
+ 1200
+
+ FAST1
+
+
+ Main
+ 437342000
+
+ FSK
+ 9600
+
+ FAST1
+
+
+
+
+ FO-70(FASTRAC-2)
+ 37380
+ 2010-062M
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 145825000
+
+ AFSK
+ 1200
+
+ FAST2
+
+
+ Main
+ 145825000
+
+ FSK
+ 9600
+
+ FAST2
+
+
+
+
+ FossaSat-1
+ 44829
+ Inactive
+
+ true
+ Coordinated
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=652
+ Julian Ismael Fernandez Barcellona EA4HCD
+ 2018-10-29
+ 2019-05-27
+ julian.ismael.fernandez@gmail.com.nospam
+
+
+ 2019-12-06
+ Rocket Lab Launch Complex 1 - Mahia Peninsula, New
+ Zealand
+
+ INIT
+ 2021-08-04+02:00
+
+ The FossaSat-1 Pocketqube
+ https://fossa.systems/fossasat-1/
+
+
+
+
+
+ Beacon
+ 436700000
+
+ LORA
+ : Bandwidth 125 kHz , Spreading factor 11 , Coding
+ rate 4/8 , Sync word 0x0F0F
+
+
+ RTTY
+ Frequency shift 182 Hz, Baudrate 45 baud , Encoding
+ ITA2 (5-bit, aka “Baudot code”), Single stop bit, no
+ parity
+
+
+
+
+
+
+ To use and decode the FossaSat-1 Satellite, please
+ consult our ground station database and instructional
+ guides.
+ http://groundstationdatabase.com/index.php
+
+
+
+
+
+
+
+
+
+
+ FossaSat-1B
+ -1
+
+ Launch fail
+
+ true
+ Coordinated
+ AMSAT-EA
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=702
+ Julian Ismael Fernandez Barcellona EA4HCD
+ 2019-10-23
+ 2020-02-24
+ julian.ismael.fernandez@gmail.com.nospam
+
+
+ 2021-09-02
+ Vandeberg
+ Firefly Alpha
+ DREAM
+
+
+ Verified
+ 2021-08-28
+
+ Mission description
+ https://github.com/typeproto187/FOSSASAT-1B
+ FOSSASAT-1B is slightly modified second
+ iteration of the FOSSASAT-1 satellite launched in December of
+ 2019 Second generation 1P Satellite. It is set to launch with
+ FOSSASAT-2 aboard the Alpha Firefly rocket in Q2-3 2020 into a
+ 300km LEO orbit. The following differences are listed: Use of
+ IXYS Cells instead of TrisolX No deployable Solar Panels Use of
+ a new through-hole burnwire resistor Diodes added in MPPT
+ DRF1268 has RST and SW connections modified Added Watchdog
+ external connection for programming Passive attitude control
+ re-designed
+
+
+
+
+
+ Telemetry UHF
+ 436700000
+
+ GMSK
+ 9600
+
+
+ CW
+
+
+
+ Lora
+ 125kbps
+
+
+
+
+ Telemetry UHF(coordonné usage à confirmer
+ 436800000
+
+ GMSK
+ 9600
+
+
+ CW
+
+
+
+ Lora
+ 125kbps
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FossaSat-2
+ -1
+
+ Launch fail
+
+ true
+ Coordinated
+ AMSAT-EA
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=702
+ Julian Ismael Fernandez Barcellona EA4HCD
+ 2020-06-05
+ 2020-07-05
+ julian.ismael.fernandez@gmail.com.nospam
+
+
+ 2021-09-02
+ Vandeberg
+ Firefly Alpha
+ DREAM
+
+
+ Verified
+ 2021-08-28
+
+ Mission description
+ https://github.com/FOSSASystems/FOSSASAT-2
+ First generation 2P Satellite dedicated to
+ demonstrating new miniaturized technology for picosatellites
+ developed by FOSSA. The main payload of FossaSat-2 is an OV2640
+ low-resolution CMOS camera. GSD is >50m/pixel. A Skytraq GNSS
+ reciever is being used to test active TLE generation for
+ PocketQubes. GPS Payload Supported by the Galileo Science
+ office.
+
+
+
+
+ Telemetry UHF
+ 436700000
+
+ GMSK
+ 9600
+
+
+ CW
+
+
+
+ Lora
+ 125kbps
+
+
+
+
+ Telemetry UHF(coordonné usage à confirmer
+ 436900000
+
+ GMSK
+ 9600
+
+
+ CW
+
+
+
+ Lora
+ 125kbps
+
+
+
+
+
+
+ FOSSASAT-2 Band Plan
+
+ https://github.com/FOSSASystems/FOSSASAT-2/blob/master/docs/Band%20Plan.md
+
+
+ FOSSASAT-2 Communication Protocol
+
+ https://github.com/FOSSASystems/FOSSASAT-2/blob/master/docs/Communication%20Protocol.md
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Fox-1B (RadFxSat AO-91)
+ 43017
+ 2017-073E
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=342
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 145960000
+
+ DUV
+ 200 Bps
+
+
+
+
+ FM voice repeater mode 1
+
+ 435250000
+
+
+ 145960000
+
+ FM
+ 67
+
+
+
+
+ FUNcube-1 (AO-73)
+ 39444
+ 2013-066AE
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=158
+
+
+ 2013-11-21
+ Orenburg, Russia
+
+ Verified
+ 2021-08-13+02:00
+
+ project information page
+ https://funcube.org.uk/
+
+
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=158
+
+
+
+
+ BPSK
+ 145935000
+
+ BPSK
+ 1200
+
+
+
+ CW
+ 145815000
+
+ CW
+
+
+
+
+ Repeater
+
+ 435130000
+ 435150000
+
+
+ 145950000
+ 145970000
+
+
+
+
+
+
+ Galassia
+ 41170
+ 2015-077E
+ Inactive
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+ 145800000
+
+ GMSK
+ 9600 bps
+
+
+
+
+
+
+ GEARRSat-1
+ 40456
+ Unknown
+ INIT
+ 2019-08-07
+
+
+ Beacon
+
+
+
+ 0
+
+
+
+
+
+
+ GeneSat-1
+ 29655
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437065000
+
+ AFSK
+ 1200
+
+ KE7EGC
+
+
+
+
+ GENESIS-L
+ -1
+
+ Launch fail
+
+ true
+ Coordinated
+ AMSAT-EA
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=698
+ Felix Paez Pavon EA4GQS
+ 2019-09-30
+ 2019-09-12
+ ea4gqs@gmail@com.nospam
+
+
+ 2021-09-02
+ Vandeberg
+ Firefly Alpha
+ DREAM
+
+
+ Verified
+ 2021-08-24
+
+ Mission description
+ https://www.amsat-ea.org/proyectos/
+ Main mission for GENESIS-L and GENESIS-N
+ satellites is to provide radio amateur communication with a
+ regenerative ASK repeater. They will also be used to test the
+ transponder receiver part of future EASAT-2 satellite in
+ engineering process by AMSAT EA with Universidad Europea, and to
+ validate the structure, the thermal model and the passive
+ attitude system being developed in the university by students.
+ The satellites will transmit ASK telemetry with its internal
+ status so radio-amateurs can decode it and participate in the
+ data analysis. Minor differences there will be implemented
+ between the L and the N satellites (basically different thermal
+ design).
+
+
+
+
+ Telemetry 1
+ 436875000
+
+ CW
+ 32 WPM
+
+
+ ASK
+ 50 bps
+
+ AM2SAT
+
+
+ Digipeater
+
+ 145875000
+
+
+ 436875000
+
+ ASK /CW
+
+
+
+
+ Telemetry Information
+
+ https://www.amsat-ea.org/app/download/12293076/AMSAT+EA+-+GENESIS+transmissions+description.pdf
+
+
+ AMSAT EA GENESIS satellites telemetry sample (wav)
+
+ https://www.amsat-ea.org/app/download/12675621/amsat_ea-GENESIS-telemetry-sample.zip
+
+
+
+
+
+ genesis@amsat-ea.org
+ amsat_ea_tlmrx_v1.09.zip
+
+
+
+ GENESIS-N
+ -1
+
+ Launch fail
+
+ true
+ Coordinated
+ AMSAT-EA
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=699
+ Felix Paez Pavon EA4GQS
+ 2019-09-30
+ 2019-09-12
+ ea4gqs@gmail@com.nospam
+
+
+ 2021-09-02
+
+
+
+ Verified
+ 2021-08-24
+
+ Mission description
+ https://www.amsat-ea.org/proyectos/
+ Main mission for GENESIS-L and GENESIS-N
+ satellites is to provide radio amateur communication with a
+ regenerative ASK repeater. They will also be used to test the
+ transponder receiver part of future EASAT-2 satellite in
+ engineering process by AMSAT EA with Universidad Europea, and to
+ validate the structure, the thermal model and the passive
+ attitude system being developed in the university by students.
+ The satellites will transmit ASK telemetry with its internal
+ status so radio-amateurs can decode it and participate in the
+ data analysis. Minor differences there will be implemented
+ between the L and the N satellites (basically different thermal
+ design).
+
+
+
+
+ Telemetry 1
+ 436888000
+
+ CW
+ 32 WPM
+
+
+ ASK
+ 50 bps
+
+ AM3SAT
+
+
+ Digipeater
+
+ 145888000
+
+
+ 436888000
+
+ ASK /CW
+
+
+
+
+ Telemetry Information
+
+ https://www.amsat-ea.org/app/download/12293076/AMSAT+EA+-+GENESIS+transmissions+description.pdf
+
+
+ AMSAT EA GENESIS satellites telemetry sample (wav)
+
+ https://www.amsat-ea.org/app/download/12675621/amsat_ea-GENESIS-telemetry-sample.zip
+
+
+
+
+
+ genesis@amsat-ea.org
+
+ https://www.amsat-ea.org/app/download/12678387/amsat_ea_tlmrx_v1.09.zip
+
+
+
+ GO-32(TechSat)
+ 25397
+ 1998-043D
+ Operational
+ GO-32
+
+
+ Main
+ 435225000
+
+ FSK
+ 9600
+
+ 4XTECH-11-12
+
+
+
+
+ Goliat
+ 38085
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437485000
+
+ AFSK
+ 1200
+
+
+ CW
+
+ YO7MJF
+
+
+
+
+ GOMX-1
+ 39430
+ 2013-066Q
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=231
+
+
+ 2013-11-21
+ Orenburg, Russia
+
+ Verified
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=231
+
+
+
+ Twitter
+ https://gomspace.com/gomx-1.aspx
+
+
+
+
+ Main
+ 437250000
+
+ GMSK
+ 1200
+
+
+ GMSK
+ 2400
+
+
+ GMSK
+ 4800
+
+
+ GMSK
+ 9600
+
+
+ CW
+
+
+
+
+
+ GOMX-3
+ 40949
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 437250000
+
+ GMSK
+ 19200
+
+
+ GMSK
+ 4800
+
+
+
+
+
+
+ GRAHAM (PhoneSat1)
+ 39142
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437425000
+
+ AFSK
+ 1200
+
+ KJ6KRW-2
+
+
+
+
+ GRBALPHA
+ 47959
+ Operational
+
+ true
+
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=745
+
+
+
+
+
+
+
+
+ 2021-08-13+02:00
+
+ Mission description
+
+
+
+
+
+
+ Telemetry 1
+ 437025000
+
+ CW
+
+
+
+ -
+
+
+ OM9GRB
+
+
+ Digipeater
+
+ 145905000
+
+
+ 437025000
+
+ GFSK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ GRIFEX
+ 40379
+ 2015-003D
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=385
+
+ 2021-08-13+02:00
+
+
+ Main
+ 438480000
+
+ GMSK
+ 1200
+
+ KD8SPS
+
+
+
+
+ GuaraniSat-1 (BIRDS-4)
+ 47931
+ 1998-067SH
+ Launched
+
+ true
+ Coordinated
+ Kyushu Institute of Technology
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=689
+ Daisuke Nakayama JG6YBW
+ 2019-08-02
+ 2019-09-10
+ o108074d@mail.kyutech.jp.nospam
+
+
+ 2021-03-13
+
+
+
+ Verified
+ 2021-08-13+02:00
+
+ Project site
+ https://birds4.birds-project.com/
+
+
+
+
+
+ Beacon
+ 437375000
+
+ CW
+
+
+
+
+
+
+ JG6YMZ
+
+
+ APRS
+
+ 145825000
+
+
+ 145825000
+
+
+
+
+
+
+ Decoder user manual
+
+ http://birds4.birds-project.com/wp-content/uploads/2021/03/How-to-use-BIRDS-4-CW-decoder-v1.1-1.pptx
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HA-1 (Zhou Enlai Huai'An-1)
+ 43156
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=589
+
+ INIT
+ 2021-08-13+02:00
+
+ CITATION NEEDED - https://xkcd.com/285/
+
+
+
+
+
+ Beacon
+ 437350000
+
+ BPSK
+ 9600bps
+
+ BI4ST
+
+
+ Beacon
+ 437644000
+
+ BPSK
+ 9600bps
+
+ BI4ST
+
+
+ Repeater
+
+ 145930000
+
+
+ 436950000
+
+ FM
+
+
+
+
+ HAUSAT-1
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 437465000
+
+ AFSK
+ 1200
+
+ D90HP
+
+
+
+
+ HAVELSAT (TR02)
+ 42701
+ Inactive
+ Draft
+ 2021-08-04+02:00
+
+
+ Beacon
+ 436845000
+
+ GMSK
+ 9600 bps
+
+
+
+
+ Beacon
+ 436843500
+
+ CW
+ 0
+
+
+
+
+
+
+ HawaiiSat1 (HiakaSat1)
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 437270500
+
+ GFSK
+ 9600
+
+
+
+ Main
+ 145980500
+
+ GFSK
+ 9600
+
+
+
+
+
+ HawkSat-1
+ 35004
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437345000
+
+ AFSK
+ 1200
+
+
+
+
+
+
+ Hiapo
+ -1
+
+ Launch fail
+
+ true
+ Coordinated
+ Hawaiii Science and Technology Museum
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=747
+ Amber Imai-Hong WH6GGI
+ 2020-06-05
+ 2020-07-05
+ amber@hsfl.hawaii.edu.no spam
+
+
+ 2021-09-02
+ Vandeberg
+ Firefly Alpha
+ DREAM
+
+
+ Verified
+ 2021-08-28
+
+ Mission description
+ https://hawaiisciencemuseum.org/research-and-development/
+ A 1U CubeSat mission. The Hiapo project is a
+ unique platform being used to provide engaging meaningful
+ hands-on STEM curriculum for Hawaii students K-12. Part of this
+ curriculum involves obtaining data about solar flares solar
+ particle events and the disturbances of the Earths magnetic
+ field. They can also collect data on solar events with relation
+ to the propagation of radio waves reflected or refracted back
+ towards the Earth from the ionosphere. During the lifespan of
+ this mission that data will be available for amateur operators
+ to download directly from the satellite. We were awarded a no
+ cost flight of the launch and a limited resources will not allow
+ the development of an amateur digipeater however if the launch
+ date slips we plan to work with resources at am sat to develop a
+ digipeater.
+
+
+
+
+ Telemetry UHF
+ 437225000
+
+ FSK
+ 9600
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HiNCube
+ 39445
+ 2013-066AF
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 438305000
+
+
+
+
+
+
+
+ Ho'oponopono-2
+ 39403
+ 2013-064Z
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 427220000
+
+ GMSK
+ 9600
+
+
+
+
+
+ HO-59(HITSAT)
+ 29484
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437275000
+
+ AFSK
+ 1200
+
+ JR8YJT
+
+
+
+
+ HO-68(XW-1)
+ 36122
+ 2009-072B
+ Operational
+
+
+ Main
+ 435790000
+
+ SSBinvertingCW
+
+ BJ1SA-11-12
+
+
+ Main
+ 435790000
+
+ FM_tone67Hz
+
+
+ CW
+
+ BJ1SA-11-12
+
+
+
+
+ Hoopoe (IL01)
+ 42718
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 437740000
+
+ BPSK
+ 9600 bps
+
+ ON01IL
+
+
+
+
+ Horyu-2
+ 38340
+ 2012-025D
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=216
+
+ 2021-08-13+02:00
+
+
+ Main
+ 437378000
+
+ FSK
+ 1200
+
+
+ CW
+
+
+
+
+
+
+ HORYU-4
+ 41340
+ 2016-012D
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=343
+
+
+ 2016-02-17
+ TANEGASHIMA SPACE CENTER
+
+ Draft
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=434
+ has been coordinated by IARU
+ a été coordonné par l'IARU
+
+
+
+ Beacon
+ 437375000
+
+ CW
+
+
+
+ AFSK
+ 1200
+
+
+ GFSK
+ 9600
+
+ JG6YBW
+
+
+ Beacon S
+ 2400300000
+
+ BPSK
+ 10000
+
+
+
+
+
+
+ Humsat-D
+ 39433
+ 2013-066T
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437325000
+
+ CW
+
+
+
+
+
+ HuskySat-1 - HO-107
+ 45119
+ 2019-071J
+ Operational
+
+ true
+ Coordinated
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=604
+ Jeffrey Chrisope KI7ORW
+ 2018-03-07
+ 2018-04-09
+ jeffchrisope@live.com.nospam
+
+
+ 2019-11-02
+ Wallops Flight Facility,USA
+
+ HuskySat-OSCAR 107 (HO-107)
+ Verified
+ 2021-08-13+02:00
+
+ Project Information page
+ https://sites.google.com/uw.edu/huskysatellitelab/huskysat-1
+
+
+
+ Beacon
+ 435800000
+
+ BPSK
+ 1200
+
+
+
+
+ Beacon Experimental
+ 24049000000
+
+
+
+
+
+
+
+ V/U
+
+ 145910000
+ 145940000
+
+
+ 435810000
+ 435840000
+
+
+ true
+
+
+
+
+ FoxTLM is used for this satellite
+ https://www.amsat.org/tlm/leaderboard.php?id=0
+
+
+
+
+
+ cubesat@uw.edu
+ https://www.g0kla.com/foxtelem/index.php
+
+
+
+ i-INSPIRE II (AU03)
+ 42731
+ Decayed
+ INIT
+ 2019-08-07
+
+
+
+
+ GMSK
+ 4800 bps
+
+ ON03AU
+
+
+
+
+ IceCube
+ 42705
+ Unknown
+ INIT
+ 2019-08-07
+
+
+ Beacon
+
+
+
+ 0
+
+
+
+
+
+
+ ICEcube1
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 0
+
+ FSK
+ 9600
+
+ W2CXM
+
+
+
+
+ ICEcube2
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 0
+
+ FSK
+ 9600
+
+ N2VR
+
+
+
+
+ ICUBE-1
+ 39432
+ 2013-066S
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 145947000
+
+ 1200bps BPSK/FM-DSB_Transponder
+
+
+
+
+
+ IiNUSat
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 436915000
+
+ 1k2 9k6 2FSK
+
+
+
+
+
+ InflateSail (GB06)
+ 42770
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 436060000
+
+ BPSK
+ 1200bps
+
+ ON06GB
+
+
+
+
+ InnoSAT-2
+ 43738
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=548
+
+
+ India
+
+
+ Verified
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=548
+ InnoSAT-2 has been coordinated by IARU
+ InnoSAT-2 a été coordonné par l'IARU
+
+
+
+ Telemetry 1
+ 437450000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ INS-1C
+ 43116
+ 2018-004F
+ Operational
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 435080000
+
+ FSK
+ 1200 bps
+
+ INDUSR-10
+
+
+
+
+ IO-26(ITAMSAT)
+ 22826
+ 1993-061D
+ Inactive
+ IO-26
+ 2021-08-04+02:00
+
+
+ Main
+ 435791000
+
+ PSK
+ 1200
+
+ ITMSAT-11-12
+
+
+
+
+ IO-86 (LAPAN-A2 ORARI)
+ 40931
+ 2015-052B
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=155
+
+ IO-86
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437325000
+
+ AFSK
+ 1200 Bps
+
+ YBSAT/YBOX-1
+
+
+ Repeater
+
+ 145825000
+
+
+ 145825000
+
+ APRS
+
+
+ Repeater
+
+ 145880000
+
+
+ 435880000
+
+ FM
+
+
+
+
+ ION
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Beacon
+ 437505000
+
+ AFSK
+ 1200
+
+
+
+
+
+
+ IPEX
+ 39471
+ 2013-072K
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437270000
+
+ GMSK
+ 9600
+
+
+ CW
+
+ KJ6KSL-1
+
+
+
+
+ Irazu
+ 43468
+ Decayed
+ Verified
+ 2021-03-22
+
+
+ Beacon
+ 436500000
+
+ FSK
+ 9600bps
+
+ TI0IRA
+
+
+
+
+ Irvine 02
+ 43789
+ Inactive
+
+ Vandenberg Air Force Base, California
+
+
+ Verified
+ 2021-08-04+02:00
+
+ Project
+ https://www.irvinecubesat.org/irvine02
+
+
+
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=557
+ Irvine 02 has been coordinated by IARU
+ Irvine 02a été coordonné par l'IARU
+
+
+
+ Telemetry 1
+ 437450000
+
+ FSK
+ 9600
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Irvine
+ 43693
+ 2018-088D
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=504
+
+
+
+
+
+ Verified
+ 2021-08-13+02:00
+
+
+ Telemetry 1
+ 437800000
+
+ FSK
+ 9600
+
+
+ CW
+
+
+ WI2XPH
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ISS
+ 25544
+ 1998-067A
+ Operational
+ Draft
+ 2019-08-05
+
+
+ Main
+ 0
+
+ Voice(Reg1)
+
+ NA1SS
+
+
+ Main
+ 0
+
+ Voice(Reg23)
+
+ NA1SS
+
+
+ Main
+ 145800000
+
+ Packet
+
+ RS0ISS
+
+
+ Main
+ 437550000
+
+ APRS
+
+ RS0ISS
+
+
+ Main
+ 145825000
+
+ APRS
+
+ RS0ISS-4-11
+
+
+
+
+ ISX (CP-11)
+ 43856
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Beacon
+ 437150000
+
+ FSK
+ 9600 bps
+
+
+ CW
+
+
+
+
+
+
+
+ ISX-SR1 -ISX - CP11
+ 0
+ Inactive
+
+ Launch Complex 1 - Māhia Peninsula, New Zealand
+
+
+ Verified
+ 2021-08-04+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=514
+
+
+
+ Project page
+ http://www.polysat.org/in-development/
+
+
+
+
+ Telemetry UHF
+ 437150000
+
+ FSK
+ 9600 bauds
+
+
+
+
+ Telemetry 2
+ 5840000000
+
+ QPSK
+ 10 Mb
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ITASAT 1
+ 43786
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=529
+
+
+
+
+
+ Verified
+ 2021-08-13+02:00
+
+ project Web site
+ http://www.itasat.ita.br/
+
+
+
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=435
+ ITASAT 1 has been coordinated by IARU
+ ITASAT 1 a été coordonné par l'IARU
+
+
+
+ Telemetry 1
+ 145860000
+
+ BPSK
+ 1200
+
+
+
+
+ Telemetry 1
+ 2400150000
+
+ BPSK
+ 14400
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ITF-1
+ 39573
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437525000
+
+ CW
+
+ JQ1ZLO
+
+
+
+
+ ITF-2 (TO-89)
+ 41932
+ Decayed
+ TO-89
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 437525000
+
+ FM CW
+ 1200 bps
+
+
+ CW
+ 0
+
+ JQ1ZTK
+
+
+
+
+ ITU-pSat1
+ 35935
+ 2009-051E
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=113
+
+ 2021-08-13+02:00
+
+
+ Main
+ 437325000
+
+ GFSK
+ 19200
+
+
+ CW
+
+
+
+
+
+
+ JAISAT-1
+ 44419
+ 2019-038F
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=521
+
+ Draft
+ 2021-08-13+02:00
+
+ Information page
+ http://www.rast.or.th/jaisat
+
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=521
+
+
+
+ Beacon
+ 4435325000
+
+ CW
+
+
+
+ GMSK
+ 4800
+
+
+
+
+ Transpondeur
+
+ 145935000
+ 145965000
+
+
+ 435935000
+ 435965000
+
+
+
+
+
+
+ Jugnu
+ 37839
+ 2011-058B
+ Operational
+
+
+ Main
+ 4372759000
+
+ CW
+
+
+
+
+
+
+ Juvenile-1F(Shaonian-Xing)
+ 43199
+ 2018-015H
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=547
+
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+ 436370000
+
+ BPSK
+ 9600 bps
+
+ MXSAT-1
+
+
+
+
+ JY1SAT -JO-97
+ 43803
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=554
+
+
+ 2018-12-03
+ Vandenberg Air Force Base, California
+
+ Jordan-OSCAR 97 (JO-97)
+ Verified
+ 2021-08-13+02:00
+
+ JY1SAT launch information and Dashboard
+ https://funcube.org.uk/2018/11/15/jy1sat/
+
+
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=554
+ JY1SAT has been coordinated by IARU
+ JY1SAT a été coordonné par l'IARU
+
+
+
+ FUNcube telemetry
+ 145840000
+
+ BPSK
+ 1200
+
+
+ SSDV
+
+
+ JY1
+
+
+ Main
+
+ 435100000
+ 435120000
+
+
+ 145855000
+ 145875000
+
+ SSB/CW
+ yes
+
+
+
+
+ Telemetry dashboard
+ http://data2.amsat-uk.org/ui/jy1sat-fm
+
+
+
+
+
+ operations@funcube.org.uk
+
+ https://download.funcube.org.uk/JY11Sat_Dashboard_v1160.msi
+
+
+
+ K2SAT
+ 43761
+ Inactive
+
+ Vandenberg Air Force Base, California
+
+
+ Verified
+ 2021-08-04+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=552
+ K2SAT has been coordinated by IARU
+ K2SAT a été coordonné par l'IARU
+
+
+ K2SAT S-band image receiver
+ https://destevez.net/2018/07/k2sat-s-band-image-receiver/
+ Technical article from DANIEL ESTÉVEZ
+ Article technique de DANIEL ESTÉVEZ
+
+
+
+ Telemetry 1
+ 435835000
+
+ BPSK
+ 9600
+
+
+
+
+ Telemetry 2
+ 2404000000
+
+ QPSK
+ 2 Mb
+
+
+
+
+ FM voice repeater
+
+ 145980000
+
+
+ 436225000
+
+ FM
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KAGAYAKI
+ 33495
+ 2009-002D
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437375000
+
+ FSK
+ 9600
+
+
+ CW
+
+
+
+
+
+
+ Kaidun-1
+ 41915
+ Operational
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 437600000
+
+ G3RUH BPSK
+ 1200 bps
+
+ AXNWPU-4
+
+
+
+
+ KAITUO-1B (CAS-3G DCBB)
+ 40912
+ 2015-049P
+ Operational
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437950000
+
+ GMSK
+ 9600
+
+ BJ1SH
+
+
+ Beacon
+ 145475000
+
+ GMSK
+ 9600
+
+ BJ1SH
+
+
+
+
+ KALAMSAT-V2
+ 43948
+ 2019-006B
+ Unknown
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 436500000
+
+
+ 0
+
+
+
+
+
+
+ Karksat
+ 44427
+ 1998-067QM
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=608
+
+
+ 2019-04-17
+
+
+
+ Draft
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=608
+ coordinated by IARU
+ coordonné par l'IARU
+
+
+ Project Site
+ https://www.kraksat.pl/space/
+ project page
+ site du projet
+
+
+
+ Beacon
+ 435500000
+
+ AFSK
+ 1200
+
+
+ AFSK
+ 9600
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KAUSAT-5
+ 43135
+ Unknown
+ INIT
+ 2019-08-07
+
+
+ Beacon
+ 437465000
+
+ FSK
+ 9600 Bps
+
+
+
+
+ Beacon 2
+ 2413000000
+
+ MSK
+ 115200
+
+
+
+
+
+
+ KAZSCISAT-1
+ 43787
+ Operational
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 435500000
+
+ GMSK
+ 9600bps
+
+
+
+
+
+
+ KickSat-2
+ 44046
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 437505000
+
+ FSK
+ 1200bps
+
+ KD2BHC
+
+
+
+
+ KickSat
+ 39685
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437505000
+
+ 1200bps AFSK
+ 1200
+
+ KD2BHC
+
+
+
+
+ KKS-1(KISEKI)
+ 33499
+ 2009-002H
+ Operational
+
+
+ Main
+ 437385000
+
+ AFSK
+ 1200
+
+
+ CW
+
+ JQ1YYY
+
+
+
+
+ Knacksat
+ 43761
+ Inactive
+
+ Vandenberg Air Force Base, California
+
+
+ Verified
+ 2021-08-04+02:00
+
+ project pages
+ http://www.knacksat.space
+
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=520
+ Knacksat has been coordinated by IARU
+ Knacksat a été coordonné par l'IARU
+
+
+
+ FUNcube telemetry
+ 435635000
+
+ CW
+
+
+
+ GFSK
+ 9600
+
+
+ GFSK
+ 1200
+
+ HS0K
+
+
+
+
+ Hamradio Information
+ http://www.knacksat.space/amateur-radio
+
+
+
+
+
+ knacksat@gmail.com
+
+
+
+
+ KO-23(KITSAT-A)
+ 22077
+ 1992-052B
+ Inactive
+ KO-23
+ 2021-08-04+02:00
+
+
+ Main
+ 435175000
+
+ FSK
+ 9600
+
+ HL01-11-12
+
+
+
+
+ KO-25(KITSAT-B)
+ 22828
+ 1993-061F
+ Inactive
+ KO-25
+ 2021-08-04+02:00
+
+
+ Main
+ 436500000
+
+ FSK
+ 9600
+
+ HL02-11-12
+
+
+
+
+ KS-1Q
+ 41847
+ Operational
+ Drfat
+ 2020-05-24+02:00
+
+
+ Beacon
+ 436500000
+
+ GMSK
+ 20000 bps
+
+
+
+
+
+
+ KSML
+ 0
+ Inactive
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+ 2021-08-04+02:00
+
+ Mission description
+
+
+
+
+
+
+ Telemetry 1
+ 437265000
+
+ DPSK
+ 9600
+
+
+ -
+
+
+ KMSLAB-1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KSU-cubesat
+ 47954
+ Launched
+
+ true
+ Coordinated
+ College of Engineering King Saud Univeristy
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=722
+ Abdulmohsen Albedah 7Z1KSU
+ 2020-11-20
+ 2020-02-14
+ albedah@ksu.edu.sa
+
+
+ 2021-03-22
+
+
+
+ Verified
+ 2020-03-13
+
+
+
+
+
+
+
+
+ Beacon
+ 437130000
+
+ GMSK
+ 4800
+
+ KSU1C
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ KUTESatPathfinder
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 0
+
+ AFSK
+ 1200
+
+ KC0RMW
+
+
+
+
+ KySat-2
+ 39384
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437402000
+
+ FSK
+ 9600
+
+ KK4AJJ
+
+
+
+
+ Lambda-Sat
+ 40458
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437462000
+
+ AFSK
+ 1200
+
+
+
+
+
+ LEDSAT
+ 0
+
+ To be launch
+
+ true
+ Coordinated
+ DIAEE Sapienza University of Rome
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=717
+ Fabio Santoni IU0MFM
+ 2020-01-15
+ 2020-04-05
+ fabio.santoni@uniroma1.it.nospam
+
+
+ 2021-08-17
+ Kourou
+ VEGA
+ Transporter 2
+
+
+ Verified
+ 2021-08-15
+
+ Mission description
+
+ https://www.esa.int/Education/CubeSats_-_Fly_Your_Satellite/Be_the_first_to_hear_LEDSAT_in_orbit
+ A 1U CubeSat Mission. It is managed by
+ students as part of the ESA "Fly your Satellite" Mission. It is
+ aimed at testing orbit and attitude determination by means of
+ ground based optical observation and testing LED based optical
+ communication. **LEDSAT will equip a bespoke digipeater system
+ with both real tile and “store - forward” capabilities for
+ radio-amateur use; the radio-amateur user can define the delay
+ in the retransmission of the message in a range of 0sec to
+ 24hours.
+
+
+
+
+ Telemetry 1
+ 435190000
+
+ GMSK
+ 9600
+
+
+ GMSK
+ 4800
+
+
+ GMSK
+ 1200
+
+
+
+
+ Digipeater
+
+ 435190000
+
+
+ 435190000
+
+ GMSK 1200/9600)
+
+
+
+
+ Decoding LEDSAT
+ https://www.s5lab.space/index.php/decoding-ledsat/
+
+
+ Cubesat Space Protocol
+ https://github.com/libcsp
+
+
+
+
+ LIBERTAD-1
+ 31129
+ 2007-012N
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437399000
+
+ AFSK
+ 1200
+
+ 5K3L
+
+
+
+
+ Light-1
+ 51509
+
+ Operational
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Telemetry
+ 437710000
+
+ BPSK
+ 1200
+
+
+ GMSK
+ 2400
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LightSail-A
+ 40661
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437435000
+
+ FSK
+ 9600
+
+
+
+
+
+ LightSail-B (now LightSail-2)
+ 44420
+ 2019-036AC
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=489
+
+
+ 2019-06-25
+
+
+
+ DRAFT
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=489
+ LightSail-2 has been coordinated by IARU
+ LightSail-2 a été coordonné par l'IARU
+
+
+
+ Telemetry 1
+ 437025000
+
+ GMSK
+ 9k6
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LightSat (D-Star One)
+ 44393
+ 2019-038H
+ Operational
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+ 435700000
+
+ mobitex GMSK
+ 4800 Bps
+
+
+
+
+ Beacon
+ 435700000
+
+ mobitex GMSK
+ 9600 Bps
+
+
+
+
+
+
+ LilacSat-2 (CAS-3H)
+ 40908
+ 2015-049K
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=395
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437200000
+
+ 1k2/4k8*/9k6 AFSK/GFSK
+ 0
+
+ BJ1SI
+
+
+ Repeater
+
+ 144350000
+
+
+ 437250000
+
+
+
+
+ Repeater
+
+ 144390000
+
+
+ 144390000
+
+
+
+
+
+
+ LINK (KR01)
+ 42714
+ Inactive
+ Draft
+ 2021-08-04+02:00
+
+
+ Beacon
+ 436030000
+
+ BPSK
+ 1200bps
+
+ D80LW
+
+
+
+
+ LitSat-1
+ 39568
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 145965000
+
+ SSB
+
+
+
+ Main
+ 435138000
+
+ FSK
+ 9600
+
+
+ CW
+
+ LY1LS
+
+
+
+
+ LituanicaSAT-1 (LO-78)
+ 39569
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 435176000
+
+ FM_tone 670Hz
+
+
+
+ Main
+ 437275000
+
+ FSK
+ 9600
+
+
+ CW
+
+ LY5N
+
+
+
+
+ LituanicaSAT-2 (LT01)
+ 42768
+ 2017-036D
+ Inactive
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437265000
+
+ FSK
+ 9600bps
+
+ LY0LS
+
+
+
+
+ LO-19(LUSAT)
+ 20442
+ 1990-005G
+ Inactive
+ LO-19
+ 2021-08-04+02:00
+
+
+ Main
+ 437125000
+
+ CW
+
+ LUSAT-11-12
+
+
+
+
+ LO-90 (LilacSat-1 CN02)
+ 42725
+ Operational
+ LO-90
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 436510000
+
+ BPSK
+ 9600bps
+
+ ON02CN
+
+
+ FM Transpondeur
+
+ 145985000
+
+
+ 436510000
+
+ FM
+
+
+
+
+ LO-93 (DSLWP-A1)
+ 43471
+ 2018-045B
+ Inactive
+ LO-93
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 436425000
+
+ 500/250bps GMSK
+ 0
+
+ BJ1SM
+
+
+ Beacon
+ 435425000
+
+ 500/250bps GMSK
+ 0
+
+ BJ1SM
+
+
+ Beacon
+ 2222810000
+
+ 500/250bps GMSK
+ 0
+
+ BJ1SM
+
+
+
+
+ LO-94 (DSLWP-A2)
+ 43472
+ Decayed
+ LO-94
+ INIT
+ 2021-03-22
+
+
+ Beacon
+ 436400000
+
+ 500/250bps GMSK
+ 0
+
+ BJ1SN
+
+
+ Beacon
+ 435400000
+
+ 500/250bps GMSK
+ 0
+
+ BJ1SN
+
+
+ Beacon
+ 2275220000
+
+ 500/250bps GMSK
+ 0
+
+ BJ1SN
+
+
+
+
+ LQSat
+ 40958
+ 2015-057A
+ Inactive
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon 1
+ 437650000
+
+ 4k8 MSK
+ 4800 Bps
+
+
+ CW
+ 0
+
+
+
+
+ Beacon
+
+ MSK4k8
+ 0
+
+
+
+
+ Beacon
+ 2404035000
+
+ QPSK
+ 1Mbps
+
+
+
+
+
+
+ Lucky-7
+ 44406
+ 2019-038W
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=452
+
+ Verified
+ 2021-08-13+02:00
+
+ Information page
+ http://www.lucky7satellite.org/
+
+
+
+ Beacon
+ 437525000
+
+ GFSK
+ 4600 Bps
+
+
+
+
+
+
+
+
+
+
+ Telemetry description
+
+ http://www.lucky7satellite.org/download/Lucky-7_-_Amateur_Radio_Information.pdf
+
+
+
+
+
+
+ LUME-1
+ 43908
+ 2018-111AJ
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=648
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437060000
+
+ GMSK
+ 4800bps
+
+
+
+
+
+
+ M-Cubed
+ 37855
+ 2011-061F
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=116
+
+ Verified
+ 2021-08-13+02:00
+
+
+ Main
+ 437485000
+
+ GMSKKISS
+ 9600
+
+
+
+
+
+
+ M6P
+ 44109
+ 2019-018AF
+ Operational
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437265000
+
+ FSK
+ 9600 bps
+
+ LY0LS
+
+
+
+
+ Magento
+ -1
+
+ Launch fail
+
+ true
+ Coordinated
+ University of Southern California
+ Informational Sciences Institute
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=705
+ Rahul Rughani KN6BSR
+ 2019-12-10
+ rrughani@isi.edu.nospam
+
+
+ 2021-09-02
+ Vandeberg
+ Firefly Alpha
+ DREAM
+
+
+ Verified
+ 2021-08-28
+
+ Mission description
+ https://www.isi.edu/centers/serc/magneto
+ A 1.5U CubeSat mission. Gather and transmit
+ magnetic field data from LEO.
+
+
+
+
+ Telemetry UHF
+ 437400000
+
+
+ 1k2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MakerSat-0
+ 43016
+ 2017-073D
+ Inactive
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+
+
+
+
+
+
+
+
+
+
+ MaSat-1(MO-72)
+ 38081
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437345000
+
+ 625/1250bpsGFSKC
+
+ WHA5MASAT
+
+
+
+
+ MAST
+ 31126
+ 2007-012K
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 0
+
+ FHSS
+
+
+
+
+
+
+ Max Valier Sat
+ 42778
+ 2017-036P
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=256
+
+
+ 2017-06-23
+ Satish Dhawan Space Centre.
+
+ Verified
+ 2021-08-13+02:00
+
+ Information page
+ http://aprs.org/bricsat-2.html
+
+
+
+ Radio Beacon
+ 145960000
+
+ CW
+
+
+ II3MV
+
+
+ Beacon Astrodev Helium-100
+ 145860000
+
+ GMSK
+
+
+ II3MV
+
+
+
+
+ Amateur information
+ http://www.maxvaliersat.it/amateurradio
+
+
+ QSL Card Request
+ mailto:maxvaliersat[at]tfobz[dot]net.
+
+
+
+
+
+
+
+
+
+
+ MAYA-1
+ 43590
+ 1998-067PE
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=518
+
+
+ 2018-08-10
+ ISS
+
+
+ Verified
+ 2021-08-13+02:00
+
+ BIRDS-2 Operation page
+ http://birds2.birds-project.com/operation/
+ The second BIRDS Project, BIRDS-2, started in
+ November, 2016. The participating countries are Bhutan,
+ Malaysia, Philippines and Japan. 11 students will develop 3
+ identical 1U CubeSats which will have capability to perform same
+ missions. The bus system for BIRDS-2 takes heritage from BIRDS-1
+ bus system and incorporates the lessons learned from BIRDS-1.
+
+
+
+ IARU
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=564
+
+
+
+
+ Main
+ 437375000
+
+ BPSK
+ 1200
+
+
+ CW
+
+ JG6YKM
+
+
+
+
+ Beacon Sequence and Format of BIRDS-2 CubeSats
+ http://birds2.birds-project.com/operation/
+
+
+ BIRDS-2 Data Submission
+ http://birds2.birds-project.com/data-submission/
+
+
+
+ BIRDS-2 Data Submission
+ http://birds2.birds-project.com/data-submission/
+
+
+
+
+ Maya-2
+ 47929
+ 1998-067SF
+ Operational
+
+ true
+ Coordinated
+ Kyushu Institute of Technology
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=690
+ Daisuke Nakayama JG6YBW
+ 2019-08-02
+ 2019-09-10
+ o108074d@mail.kyutech.jp.nospam
+
+
+ 2021-03-13
+
+
+
+ Verified
+ 2021-08-13+02:00
+
+
+
+
+
+
+
+
+ 437375000
+
+
+ CW
+
+
+
+
+
+
+ JG6YMY
+
+
+ APRS
+
+ 145825000
+
+
+ 145825000
+
+
+
+
+
+
+ Decoder user manual
+
+ http://birds4.birds-project.com/wp-content/uploads/2021/03/How-to-use-BIRDS-4-CW-decoder-v1.1-1.pptx
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MCubed-2
+ 39469
+ 2013-072H
+ Operational
+
+ 2013-12-06
+ Air Force Western Test Range
+
+ Verified
+ 2019-05-06
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=265
+
+
+
+ MCubed-2 recovery
+ http://www.ne.jp/asahi/hamradio/je9pel/mc2recov.htm
+
+
+
+
+ Main
+ 437485000
+
+ GMSK
+ 9600
+
+ NOCALL
+
+
+
+
+ MeaHuaka'iVoyager
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 0
+
+ AFSK
+ 1200
+
+
+
+
+
+
+ MEROPE
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 0
+
+ AFSK
+ 1200
+
+ K7MSU-1
+
+
+
+
+ MicroMAS-1
+ 40457
+ Unknown
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 468000000
+
+ OQPSK
+ 1.5Mbit/s
+
+
+
+
+
+
+ MINXSS 2
+ 41474
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=411
+
+
+ Vandenberg Air Force Base, California
+
+
+ Verified
+ 2021-08-13+02:00
+
+ Project web site
+ http://lasp.colorado.edu/home/minxss/
+
+
+
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=477
+ MINXSS 2 has been coordinated by IARU
+ MINXSS 2 a été coordonné par l'IARU
+
+
+
+ Telemetry 1
+ 437250000
+
+ GMSK
+ 9600
+
+
+
+
+
+
+ Ham radio information
+ http://lasp.colorado.edu/home/minxss/data/
+
+
+
+
+
+
+
+ https://github.com/jmason86/MinXSS_Beacon_Decoder/releases
+
+
+
+ MIR-SAT1
+ 48868
+ 1998-067SP
+ Operational
+
+ true
+ Coordinated
+ MIR-SAT1
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=679
+ Jean Marc Momplé 3B8DU
+ 2019-06-26
+ jean.marc.momple@gmail.com.nospam
+
+
+ 2021-06-22
+ ISS
+
+ MO-112 MIRSAT-OSCAR 112
+ Verified
+ 2021-08-13+02:00
+
+ Mission description
+ https://spacemauritius.com/
+ A 1U CubeSat mission with the following
+ objectives: 1. Verify the performance of the on-board subsystems
+ by receiving telemetry from the satellite and establish
+ communication to and from the satellite (command and control).
+ 2. Collect images of Mauritius and the Mauritian EEZ for
+ capacity, building, experiment and research. 3. Experimental
+ communication with other islands via the satellite (for
+ scientific and/or emergency purposes), through a Radio Amateur
+ digipeater payload. 4. V/U 9600bps GMSK digipeater may be open
+ for Radio Amateur communication worldwide when the satellite not
+ used for all above.
+
+
+
+ special awards
+
+ https://mars3b8.wordpress.com/2021/06/19/mir-sat1-special-award/
+
+ In addition, the Mauritius Amateur Radio Society (MARS) is
+ creating special awards open to all participating Hams/SWL's
+ worldwide. These awards will be issued to those decoding
+ MIR-SAT1 telemetry and forwarding same to SatNOGS.
+
+ - A Platinum award will be issued to the first 10 ground station
+ applying for MIR-SAT1 Award after having forwarded the telemetry
+ to SatNOGS.
+ - A Gold award will be issued to the next 20 ground station
+ applying for MIR-SAT1 Award after having forwarded the telemetry
+ to SatNOGS.
+ - A Silver award will be issued to the next 30 ground station
+ applying for MIR-SAT1 Award after having forwarded the telemetry
+ to SatNOGS.
+ - A Bronze award will be issued to the next 50 ground station
+ applying for MIR-SAT1 Award after having forwarded the telemetry
+ to SatNOGS.
+
+
+
+
+
+ Telemetry 1
+ 436925000
+
+ GMSK
+ 9k6
+
+ 3B8MIR
+
+
+ Repeater
+
+ 145987500
+
+
+ 436925000
+
+ GMSK
+
+
+
+
+ Telemetry Information
+ https://spacemauritius.com/telemetry/
+
+
+
+
+
+
+
+
+
+
+
+ https://github.com/daniestevez/gr-satellites/blob/master/python/telemetry/mirsat1.py
+
+
+
+ MIR
+ 16609
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 145985000
+
+ PSK
+
+ R0MIR-1
+
+
+
+
+ MiTEE-1A
+ 47314
+ 2021-002F
+ Operational
+
+ true
+ Coordinated
+ The University of Michigan
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=510
+ Brian Gilchrist KF6ON
+ 2016-06-12
+ 2016-12-12
+ brian.gilchrist@umich.edu.nospam
+
+
+
+
+
+
+ 2021-08-13+02:00
+
+ Mission description
+
+ http://clasp-research.engin.umich.edu/groups/s3fl/mitee/home/
+
+
+
+
+
+ Telemetry 1
+ 437800000
+
+ FSK AX25.
+ 9600 Bauds
+
+ WL9XJH
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MO-30 (UNAMSAT-B)
+ 24305
+ Inactive
+ MO-30
+ Draft
+ 2021-08-04+02:00
+
+
+ Beacon
+ 435138000
+
+ BPSK
+ 1200bps
+
+
+
+
+
+
+ MO-46(TiungSat)
+ 26548
+ 2000-057D
+ Inactive
+ MO-46
+ 2021-08-04+02:00
+
+
+ Main
+ 437325000
+
+ FSK
+ 38400
+
+ MYSAT3-11-12
+
+
+
+
+ MOVE II
+ 43780
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=487
+
+
+ Vandenberg Air Force Base, California
+
+
+ Verified
+ 2021-08-13+02:00
+
+ Project
+ https://www.move2space.de/MOVE-II/
+ MOVE-II is a CubeSat, a tiny satellite with
+ dimensions of 10 x 10 x 13 cm and a mass of 1.2 kg. It is the
+ second satellite of the Technical University of Munich (TUM) and
+ the follow-up project of First-MOVE. The name MOVE is an acronym
+ and stands for Munich Orbital Verification Experiment. The
+ number “II” implies that it is the second of its series.
+
+
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=557
+ MOVE II has been coordinated by IARU
+ MOVE II a été coordonné par l'IARU
+
+
+
+ Telemetry 1
+ 145950000
+
+ BPSK
+ 9600
+
+
+ CW
+
+
+ DP0MOV
+
+
+
+
+ Hamradio information
+ https://www.move2space.de/MOVE-II/radio-amateurs/
+
+
+
+
+
+
+
+
+
+
+ MOVE-IIb
+ 44398
+ 2019-038N
+ Unknown
+ Draft
+ 2021-08-13+02:00
+
+ Information page
+ https://www.move2space.de/MOVE-II/
+
+
+
+ Beacon
+ 145840000
+
+ QPSK
+ 12500 Bps
+
+
+ CW
+
+
+
+
+
+
+
+ myPocketQub
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 437425000
+
+
+
+
+
+
+
+ MYSAT-1
+ 44045
+ 2018-092F
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=560
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 435775000
+
+ BPSK
+ 1200
+
+
+ BPSK
+ 4800
+
+
+ BPSK
+ 9600
+
+ A68MY
+
+
+
+
+ NanoSail-D2
+ 37361
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437270000
+
+ AFSK
+ 1200
+
+ KE7EGC
+
+
+
+
+ NanoSat-6 (Oculus-ASR)
+ 44346
+ Unknown
+ draft
+ 2019-08-07
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=266
+
+
+ Project information page
+ http://aerospace.mtu.edu/spacecraft/oculus-asr
+
+
+
+ Beacon
+ 437200000
+
+ GMSK
+ 9600 Bps
+
+
+
+
+
+
+ Nanosat-7 (Prox-1)
+ 44339
+ 2019-036A
+ Unknown
+ draft
+ 2021-08-13+02:00
+
+ Information page
+ http://prox-1.gatech.edu/
+
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=437
+ Prox-1 has been coordinated by IARU
+ Prox-1 a été coordonné par l'IARU
+
+
+
+ Beacon
+ 2306500000
+
+ FSK
+ 38400 Bps
+
+
+
+
+
+
+
+
+
+
+ Telemetry description
+ http://prox-1.gatech.edu/beacon.html
+
+
+
+
+
+
+ NanosatC-Br1
+ 40024
+ 2014-033Q
+ Operational
+
+ 2014-06-19
+ Orenburg, Russia
+
+ Verified
+ 2019-05-06
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=209
+
+
+
+ NanosatC-Br1
+ http://www.h-space-lab.org/php/duchifat1-en.php
+
+
+
+
+ Main
+ 145865000
+
+ BPSK
+ 1200
+
+
+ CW
+
+ NCBR1
+
+
+
+
+ Operating for Amateur Radio
+
+ http://www.inpe.br/crs/nanosat/acompanhe/radio_amadores.php
+
+
+ Data acquisition page
+ http://www3.inpe.br/crs/nanosat/aquisicao_dados.php
+
+
+ http://www.dk3wn.info/files/ncbr1.zip
+
+
+
+ nCUBE-1
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 0
+
+ GMSK
+ 9600
+
+ LA1CUB
+
+
+
+
+ NCUBE2
+ 28897
+ 2005-043H
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437305000
+
+ FSK
+ 9600
+
+ LA1CUB
+
+
+
+
+ Negai
+ 36575
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437305000
+
+ AFSK
+ 1200
+
+
+ CW
+
+ JQ1ZEX
+
+
+
+
+ NepaliSat1
+ 44331
+ 1998-067QG
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=618
+
+
+ 2019-04-17
+
+
+
+ Draft
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=618
+ coordinated by IARU
+ coordonné par l'IARU
+
+
+ Bird3 hamradio information
+ http://birds3.birds-project.com/document/amateur/
+ Radio documents
+ documents radio
+
+
+
+ Beacon
+ 435375000
+
+ CW
+
+
+
+ GMSK
+ 9600
+
+
+
+
+
+
+
+
+
+
+ BIRDS Project - JGMNB
+ https://www.formpl.us/form/6372043568185344
+
+
+
+
+
+
+ Netsat-1
+ 0
+
+ Inactive
+
+ true
+ Coordinated
+ Zentrum für Telematik e.V.
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=674
+ Roland Haber DO4ROL
+ 2019-05-15
+ 2019-08-19
+ roland.haber@telematik-zentrum.de.nospam
+
+
+ 2020-09-28
+ Plesetsk
+
+ 2021-08-04+02:00
+
+ Project site
+
+ https://www.raumfahrttechnik.tu-berlin.de/menue/forschung/aktuelle_projekte/salsat/parameter/en/
+ NetSat is an experimental CubeSat formation of four 3U
+ CubeSats, which will provide a digipeater service in the 70cm
+ band which is open to all radio amateurs. Thus, NetSat benefits
+ the amateur radio and the amateur radio community. Furthermore,
+ the satellite gives students at the University of Würzburg
+ hands-on experience in satellite technology. They are given the
+ opportunity to participate in the whole mission from development
+ and assembly of the satellite to in-orbit operations. After
+ launch, the students will be able to learn how to communicate
+ with the satellite and operate it via the ground station located
+ at the Institute of Computer Science.
+
+
+
+ UHF
+ 435600000
+
+ FSK
+ 9600
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ NEUTRON-1
+ 0
+
+ Inactive
+
+ true
+ Coordinated
+ University of Hawaii, Hawaii Space Flight
+ Laboratory
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=683
+ Tom Ellis K4XV/WH6DNU
+ tom@k4xv.com.nospam
+
+
+
+
+ 2021-08-04+02:00
+
+ project web site
+ https://www.hsfl.hawaii.edu/
+
+
+
+
+
+ 4353000000
+
+ AX25
+ 1200
+
+
+ AX25
+ 9600
+
+
+
+ FM voice repeater V/U
+
+ 435250000
+
+
+ 145840000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Nexus
+ 43937
+ 2019-003F
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=535
+
+
+ 2019-01-18
+ Centre spatial JAXA Uchinoura, Kagoshima, Japan
+
+ Fuji-OSCAR 99
+ Verified
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=535
+
+
+
+
+ Project Web site
+ http://sat.aero.cst.nihon-u.ac.jp/nexus/E0_Top.html
+
+
+
+
+
+ Telemetry 1
+ 437075000
+
+ CW
+
+
+
+
+
+ Telemetry 2
+ 435900000
+
+ FSK AX.25 / π/4 shift QPSK CCSDS
+
+
+
+
+
+ SSB/CW transponder
+
+ 145900000
+ 145930000
+
+
+ 435880000
+ 435910000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ NIUSAT
+ 42766
+ 2017-036B
+ Operational
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+ 436000000
+
+ FSK
+ 1200 bps
+
+ NIUOBT
+
+
+ Beacon
+ 2240000000
+
+
+ 0
+
+
+
+
+
+
+ NJUST-1 (CN03)
+ 42722
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 436570000
+
+ BPSK
+ 1200bps
+
+ BI4ST
+
+
+
+
+ NMARS
+ 29662
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 0
+
+ AFSK
+ 1200
+
+
+
+
+
+
+ NO-44(PCsat1)
+ 26931
+ 2001-043C
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=25
+
+ NO-44
+ Draft
+ 2021-08-13+02:00
+
+
+ Main
+ 145827000
+
+ AFSK
+ 1200
+
+ (A)PCSAT-1
+
+
+ Main
+ 145827000
+
+ FSK
+ 9600
+
+ (A)PCSAT-2
+
+
+ Main
+ 144390000
+
+ AFSK
+ 1200
+
+ (B)PCSAT-11
+
+
+ Main
+ 144390000
+
+ FSK
+ 9600
+
+ (B)PCSAT-12
+
+
+
+
+ NO-45(Sapphire)
+ 26932
+ 2001-043D
+ Inactive
+ NO-45
+ 2021-08-04+02:00
+
+
+ Main
+ 437100000
+
+ AFSK
+ 1200
+
+ KE6QMD
+
+
+
+
+ NO-60(RAFT)
+ 29661
+ Decayed
+ NO-60
+ 2020-05-24+02:00
+
+
+ Main
+ 145825000
+
+ AFSK
+ 1200
+
+ RAFT
+
+
+
+
+ NO-61(ANDE)
+ 29664
+ Decayed
+ NO-61
+ 2020-05-24+02:00
+
+
+ Main
+ 145825000
+
+ AFSK
+ 1200
+
+ ANDE-1
+
+
+
+
+ NO-62(FCAL)
+ 29667
+ Decayed
+ NO-62
+ 2020-05-24+02:00
+
+
+ Main
+ 437385000
+
+ AFSK
+ 1200
+
+ KD4HBO
+
+
+
+
+ NO-83 (BRICsat)
+ 40655
+ 2015-025E
+ Inactive
+ AO-83
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437975000
+
+ FSK PSK31
+ 9600 bps
+
+ BRCSAT
+
+
+ PSK31
+
+ 28120000
+
+
+ 435350000
+
+ APRS 1200 bauds
+
+
+
+
+ Nodes-1
+ 41478
+ Decayed
+ INIT
+ 2019-08-07
+
+
+ Beacon
+ 437100000
+
+ AFSK
+ 1200
+
+ KE6QLL
+
+
+
+
+ Nodes-2
+ 41477
+ Inactive
+ INIT
+ 2021-08-04+02:00
+
+
+ Beacon
+ 437100000
+
+ AFSK
+ 1200
+
+ KE6QLL
+
+
+
+
+ NPS-SCAT
+ 39389
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437525000
+
+ AFSK
+ 1200
+
+
+ CW
+
+ K6NPS
+
+
+
+
+ nSight-1 (AZ02)
+ 42726
+ Operational
+ Draft
+ 2019-08-07
+
+ DK3WN information
+ http://www.dk3wn.info/p/?page_id=29535
+
+
+
+
+ Beacon
+ 435900000
+
+ GMSK
+ 9600bps
+
+ ON02AZ
+
+
+ Beacon
+ 2405000000
+
+ GMSK
+ 9600b ps
+
+ ON02AZ
+
+
+
+
+ NUDT-PhoneSat (CAS-3I)
+ 40900
+ 2015-049B
+ Inactive
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437300000
+
+ GFSK
+ 96000
+
+ BJ1SJ
+
+
+
+
+ NUDTSat (CN06)
+ 42787
+ 2017-036Y
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=379
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 436270000
+
+ BPSK
+ 9600 Bps
+
+ BG7AKF
+
+
+
+
+ NuSat-1 (LO-87)
+ 41557
+ 2016-033B
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=486
+
+ LO-87
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon 1
+ 145900000
+
+ SSB CW
+ 0
+
+
+
+
+ Beacon 2
+ 436445000
+
+ FSK
+ 19200
+
+
+
+
+ Repeater
+
+ 436935000
+ 436965000
+
+
+ 145935000
+ 145965000
+
+ Linear
+
+
+
+
+ NuSat-2
+ 41558
+ 2016-033C
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=486
+
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+ 145900000
+
+ SSB CW
+ 0
+
+
+
+
+
+
+ OO-38(OPAL)
+ 26063
+ 2000-004C
+ Inactive
+ OO-38
+ 2021-08-04+02:00
+
+
+ Main
+ 437100000
+
+ FSK
+ 9600
+
+ KF6RFX
+
+
+
+
+ OPS-Sat
+ 44878
+ 2019-092F
+ Operational
+
+ true
+ Coordinated
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=478
+ Allesandro Donati DJ0MDO
+ 2015-07-15
+ 2015-10-04
+ alessandro.donati@esa.int.nospam
+
+
+ 2019-12-18
+ Kourou, French Guiana
+
+ Verified
+ 2021-08-13+02:00
+
+ Calling radio amateurs: help find OPS-SAT!
+
+ http://www.esa.int/Enabling_Support/Operations/Calling_radio_amateurs_help_find_OPS-SAT
+
+
+
+
+ OPS-SAT: your flying laboratory!
+
+ http://www.esa.int/Enabling_Support/Operations/OPS-SAT_your_flying_laboratory
+
+
+
+
+
+ Beacon
+ 437200000
+
+ GMSK
+ 9600
+
+
+
+
+
+
+ OPS-SAT UHF Handbook
+
+ https://github.com/esa/gr-opssat/blob/master/docs/os-uhf-specs.pdf
+
+
+ OPS-SAT UHF beacon reception report
+
+ https://docs.google.com/forms/d/e/1FAIpQLSfkHF_wN2IxBb2WNYm6RuA_iT6qJH4Hz_pA9hCbcp0AcG5TbA/viewform
+
+
+ https://github.com/esa/gr-opssat
+
+
+
+ OPUSAT-II(Hirogari)
+ 47930
+ 1998-067SG
+ Operational
+
+ true
+ Coordinated
+ Small Spacecraft System Research Center
+ Osaka Pref University
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=631
+ Wataru Hatafuku JL3YTD
+ 2018-06-13
+ 2018-07-19
+ sz03116@edu.osakafu-u.ac.jp
+
+
+ 2021-03-13
+
+
+
+ Verified
+ 2021-08-13+02:00
+
+ Project site
+
+ http://www.sssrc.aero.osakafu-u.ac.jp/activity/opusat-iienglish
+ Demonstration of high-speed data transmission
+ in amateur radio band ~”EXPAND” the reach of amateur radio~
+ Many of the nano-satellites launched so far adopted the data
+ transmission rates of 1200 or 9600 bps in the UHF or VHF amateur
+ radio bands. In this mission, we will downlink data not only
+ with 1200 bps AFSK and 9600 bps GMSK but also with 13600 bps
+ GMSK and 19200 bps 4FSK.
+
+ Conventional amateur radio satellites mainly use the AX.25
+ protocol, which requires re-transmission requests from earth
+ stations in case of packet loss, which makes the satellite
+ operation costly. In HIROGARI project, we will demonstrate a
+ protocol using Reed-Solomon encoding and convolutional
+ processing with error correction capability. We will conduct
+ communication experiments to evaluate capability of each
+ protocol and investigate which protocol is suitable for
+ nano-satellite operation. We will also conduct communication
+ experiments to evaluate the usefulness of these communication
+ systems.
+
+ If those communication systems are verified to be useful,
+ satellites using amateur radio band will be able to communicate
+ more efficiently.
+
+ The results of the experiment and the design of the satellite’s
+ communication system and the earth station system will be
+ available on our homepage so that amateur radio operators around
+ the world can use this high-speed communication technology to
+ improve the communication technology for amateur radio
+ satellites.
+
+
+
+
+
+
+ Beacon
+ 145900000
+
+ CW
+ 40 / 80
+
+
+ AFK AX25
+ 1200
+
+
+ GMSK AX25 RS Convolution
+ 9600
+
+
+ GMSK AX25 RS Convolution
+ 13600
+
+
+ 4FK AX25 RS Convolution
+ 19200
+
+
+
+
+ Digital Repeater ?
+
+ 436500000
+
+
+ 145900000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OPUSAT-II(Hirogari)
+ To Be Launch
+
+ true
+ Coordinated
+ Small Spacecraft System Research Center
+ Osaka Pref University
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=631
+ Wataru Hatafuku JL3YTD
+ 2018-06-13
+ 2018-07-19
+ sz03116@edu.osakafu-u.ac.jp
+
+
+ 2021-03-13
+
+
+
+ Verified
+ 2020-03-13
+
+ Project site
+
+ http://www.sssrc.aero.osakafu-u.ac.jp/activity/opusat-iienglish
+ Demonstration of high-speed data transmission
+ in amateur radio band ~”EXPAND” the reach of amateur radio~
+ Many of the nano-satellites launched so far adopted the data
+ transmission rates of 1200 or 9600 bps in the UHF or VHF amateur
+ radio bands. In this mission, we will downlink data not only
+ with 1200 bps AFSK and 9600 bps GMSK but also with 13600 bps
+ GMSK and 19200 bps 4FSK.
+
+ Conventional amateur radio satellites mainly use the AX.25
+ protocol, which requires re-transmission requests from earth
+ stations in case of packet loss, which makes the satellite
+ operation costly. In HIROGARI project, we will demonstrate a
+ protocol using Reed-Solomon encoding and convolutional
+ processing with error correction capability. We will conduct
+ communication experiments to evaluate capability of each
+ protocol and investigate which protocol is suitable for
+ nano-satellite operation. We will also conduct communication
+ experiments to evaluate the usefulness of these communication
+ systems.
+
+ If those communication systems are verified to be useful,
+ satellites using amateur radio band will be able to communicate
+ more efficiently.
+
+ The results of the experiment and the design of the satellite’s
+ communication system and the earth station system will be
+ available on our homepage so that amateur radio operators around
+ the world can use this high-speed communication technology to
+ improve the communication technology for amateur radio
+ satellites.
+
+
+
+
+
+
+ Beacon
+ 145900000
+
+ CW
+ 40 / 80
+
+
+ AFK AX25
+ 1200
+
+
+ GMSK AX25 RS Convolution
+ 9600
+
+
+ GMSK AX25 RS Convolution
+ 13600
+
+
+ 4FK AX25 RS Convolution
+ 19200
+
+
+
+
+ Digital Repeater ?
+
+ 436500000
+
+
+ 145900000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OPUSAT
+ 39575
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437154000
+
+ AFSK
+ 1200
+
+
+ GFSK
+ 9600
+
+
+ CW
+
+ JL3ZCA
+
+
+
+
+ ORBICRAFT-ZORKIY(RS15S)
+ 47960
+ 2021-022AE
+ Operational
+
+ true
+ Coordinated
+ SPUTNIX Ltd. (sputnix.ru/en/)
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=789
+ Roman Komyagin R2ANF
+ 2021-02-04
+ roman_komyagin@list.ru.nospam
+
+
+ 2021-03-22
+
+
+
+ Verified
+ 2021-08-13+02:00
+
+
+
+
+
+
+
+
+ Beacon
+ 437850000
+
+ GMSK -USP FEC protocol
+ 9600
+
+
+
+ Beacon
+ 437950000
+
+ GMSK -USP FEC protocol
+ 9600
+
+ RS15S
+
+
+ DATV
+ 10465000000
+
+ DVB-S2
+
+
+ RS15S
+
+
+
+
+ SPUTNIX USP FEC protocol general description
+ https://github.com/sputnixru/SX-USP
+
+
+ Information for hamradio
+ https://sputnix.ru/en/satellites/for-radioamateurs
+
+
+
+
+
+
+
+
+
+
+ Orbital Factory 2 (OF-2)
+ 0
+ Inactive
+
+ Wallops Flight Facility, états unis
+
+
+ Draft
+ 2021-08-04+02:00
+
+ IARU information
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=685
+
+
+
+
+ Beacon
+ 435040000
+
+ GMSK
+ 9600
+
+
+
+
+ Beacon
+ 2426000000
+
+ QPSK
+ 3-5 Mbps
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OrigamiSat-1
+ 43933
+ 2019-003B
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=591
+
+
+ 2019-01-18
+ Centre spatial JAXA Uchinoura, Kagoshima, Japan
+
+ FO-98
+ Verified
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=591
+
+
+
+
+
+ Telemetry 1
+ 437050500
+
+ AFSK
+ 1200
+
+
+ CW
+
+
+ JS1YAX
+
+
+ Telemetry 2
+ 5840000000
+
+
+ 115kbps
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ORS-Squared
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 437325000
+
+ GMSK
+ 9600
+
+
+
+
+
+ OSIRIS-3U
+ 43027
+ Decayed
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=506
+
+ Verified
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437505000
+
+ GMSK
+ 9600 Bps
+
+
+ GMSK
+ 38400 Bps
+
+
+
+
+
+
+ OSSI-1
+ 39131
+ Unknown
+
+ Draft
+ 2019-08-05
+
+
+ Main
+ 145980000
+
+ AFSK
+ 1200
+
+
+ CW
+
+
+
+
+
+ OUFTI-1
+ 41458
+ 2016-025C
+ Inactive
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 145980000
+
+ FSK
+ 9600 bps
+
+
+ CW
+ 0
+
+ OUFTI-1
+
+
+ DSTAR
+
+ 435045000
+
+
+ 145950000
+
+ DSTAR
+
+
+
+
+ PACE
+ 40022
+ 2014-033N
+ Inactive
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437485000
+
+ CW
+ 0
+
+
+ AFSK
+ 1200bps
+
+
+
+
+
+
+ ParkinsonSAT (PSAT)
+ 40654
+ 2015-025D
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=473
+
+ NO-84
+ Verified
+ 2021-08-13+02:00
+
+ PSAT
+ http://aprs.org/psat.html
+ ParkinsonSAT description
+
+
+
+ APRS
+ 145825000
+
+ AX25
+ 1200
+
+
+
+ PSK31
+ 435350000
+
+ PSK31
+
+ W3ADO-5
+
+
+ PSK31
+
+ 28120000
+
+
+ 435035000
+
+ SSB PSK31
+
+
+
+
+ LIVE Telemetry Downlink
+ http://pcsat.aprs.org
+
+
+
+
+ PCSat2
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 437975000
+
+ FSK
+ 9600
+
+ PC2TLM
+
+
+
+
+ Pegasus (AT03)
+ 42784
+ 2017-036V
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=393
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 436670000
+
+ GMSK
+ 9600 bps
+
+ ON03AT
+
+
+
+
+ PharmaSat-1
+ 35002
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437465000
+
+ AFSK
+ 1200
+
+ KE7EGC
+
+
+
+
+ PHOENIX (TW01)
+ 42706
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 436915000
+
+ GMSK
+ 9600bps
+
+ ON01TW
+
+
+
+
+ PHOENIX
+ 45258
+ 1998-067RB
+ Operational
+
+ true
+ Coordinated
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=594
+ QB50 and National Cheng Kung University
+ 2013-10-15
+ 2015-04-06
+ bx1ad@ctarl.org.tw.nospam
+
+ Draft
+ 2021-08-13+02:00
+
+ Project page
+ http://phxcubesat.asu.edu/
+
+
+ Frequency coordination note
+
+ 437350000 is used instead of 436915000. This frequency
+ is also used by Quarman satellite. THe satellite allow a ping
+ command
+
+
+
+ Beacon
+ 437350000
+
+ GMSK
+ 9600
+
+ KIOO7Y - WJ2OXY
+
+
+ Ping Mode
+
+ 437350000
+
+
+ 437350000
+
+
+
+
+
+
+ Radioamateur page including beacon description
+ https://github.com/ASU-cubesat/phxsat-gsw-public
+
+
+
+
+
+
+ https://github.com/ASU-cubesat/phxsat-gsw-public
+
+
+
+ PhoneSat24
+ 39381
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437425000
+
+ AFSK
+ 1200
+
+ KJ6KRW
+
+
+
+
+ PhoneSat25
+ 39684
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437425000
+
+ AFSK
+ 1200
+
+ KJ6KRW
+
+
+
+
+ PicoDragon
+ 39413
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437250000
+
+ AFSK
+ 1200
+
+
+ CW
+
+ XV9PID
+
+
+
+
+ PICPOT
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 0
+
+ FSK
+ 9600
+
+
+
+
+ Main
+ 0
+
+ 10kbitGFSK
+
+
+
+
+
+
+ PicSat
+ 43132
+ 2018-004X
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=536
+
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+ 435525000
+
+ BPSK
+ 1200
+
+
+ BPSK
+ 9600
+
+ PICSAT
+
+
+ Repeater
+
+ 145910000
+
+
+ 435525000
+
+ FM
+
+
+
+
+ PO-28(POSAT)
+ 22829
+ 1993-061G
+ Inactive
+ PO-28
+ 2021-08-04+02:00
+
+
+ Main
+ 0
+
+ FSK
+ 9600
+
+ POSAT1-11-12
+
+
+
+
+ PO-34(PANSAT)
+ 25520
+ 1998-064B
+ Inactive
+ PO-34
+ 2021-08-04+02:00
+
+
+ Main
+ 0
+
+ Spectrum
+
+
+
+
+
+
+ PO-63 (PehuenSat)
+ 29712
+ 2007-001D
+ Inactive
+ PO-63
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 145825000
+
+ AFSK
+ 1200bps
+
+ LU1YUC
+
+
+
+
+ PO-63(PehuenSat)
+ 29709
+ Unknown
+ PO-63
+ 2020-05-24+02:00
+
+
+ Main
+ 145825000
+
+ AFSK
+ 1200
+
+ LU1YUC
+
+
+
+
+ Pocket-PUCP
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 437200000
+
+ AFSK
+ 1200
+
+
+ CW
+
+
+
+
+
+ PolyITAN-1
+ 40042
+ 2014-033AJ
+ Operational
+
+
+ Main
+ 437675000
+
+ FSK
+ 9600
+
+
+ CW
+
+ EM0UKP
+
+
+
+
+ PolyITAN-2-SAU (UA01)
+ 42732
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 436600000
+
+ BPSK
+ 9600bps
+
+ QBUA01
+
+
+
+
+ PolySatCP1
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 0
+
+ 15bpsDTMFCW
+
+ N6CP
+
+
+
+
+ PolySatCP2
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 437325000
+
+ AFSK
+ 1200
+
+
+
+
+
+
+ PolySatCP3
+ 31128
+ 2007-012M
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 0
+
+ AFSK
+ 1200
+
+
+
+
+
+
+ PolySatCP4
+ 31132
+ 2007-012Q
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437323000
+
+ SSB
+ 1200
+
+ N6CP
+
+
+
+
+ POPSAT-HIP1
+ 40028
+ 2014-033U
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437405000
+
+ 1k2 9k6 CCSDS CW
+
+
+ CW
+
+ POPSAT
+
+
+
+
+ Pratham
+ 41783
+ 2016-059A
+ Inactive
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 145980000
+
+ AFSK
+ 1200bps
+
+
+ CW
+ 0
+
+ PRATHAM
+
+
+
+
+ PrintSat
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 437325000
+
+ GMSK
+ 9600
+
+
+
+
+
+ PRISM(HITOMI)
+ 33493
+ 2009-002B
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=97
+
+ 2021-08-13+02:00
+
+
+ Main
+ 437250000
+
+ AFSK
+
+
+ GMSK
+
+
+ CW
+
+ JQ1YCX
+
+
+
+
+ PROITERES
+ 38756
+ 2012-047B
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437485000
+
+ AFSK
+ 1200
+
+
+ CW
+
+ JL3YZL
+
+
+
+
+ PSAT-2
+ 44354
+ 2019-036R
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=473
+
+
+ 2019-06-25
+
+
+ Navy- OSCAR 104 (NO-104)
+ Verified
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=473
+ PSAT-2 has been coordinated by IARU
+ PSAT-2 a été coordonné par l'IARU
+
+
+ Information page
+ http://aprs.org/psat2.html
+
+
+
+ SSTV
+ 435350000
+
+ SSTV
+
+
+
+
+
+ APRS
+
+ 145825000
+
+
+ 145825000
+
+ AFSK
+ 1200
+
+
+ PSK31
+
+ 294815000
+
+
+ 435350000
+
+ AFSK
+ 1200
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PTecSat
+ 0
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 436000000
+
+ AFSK
+ 1200
+
+
+
+
+
+ PUCP-SAT-1
+ 39442
+ 2013-066AC
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 145840000
+
+ AFSK
+ 1200
+
+
+
+
+
+ PW-Sat 2
+ 43814
+ Decayed
+
+ true
+
+
+ Vandenberg Air Force Base, California
+
+
+ Verified
+ 2020-05-24+02:00
+
+ Project Site
+ https://pw-sat.pl/en/home-page/
+ PW-Sat2 is a student satellite project
+ started in 2013 at Warsaw University of Technology by the
+ Students Space Association members. Its main technical goal is
+ to test new deorbit technology in form of a large deorbit sail
+ whereas the project purpose is to educate a group of new space
+ engineers
+
+
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=545
+ PW-Sat 2 has been coordinated by IARU
+ PW-Sat 2 a été coordonné par l'IARU
+
+
+
+ Telemetry 1
+ 435275000
+
+ BPSK
+ 9600
+
+
+ BPSK
+ 1200
+
+
+
+
+
+
+ Ham radio information
+ https://pw-sat.pl/en/information-for-radio-amateurs/
+
+
+
+
+
+
+ https://radio.pw-sat.pl/communication/desktopsoftware
+
+
+
+ PW-Sat1
+ 38083
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 145902000
+
+ BPSK
+ 1200
+
+
+ CW
+
+ VOID
+
+
+
+
+ Q-PACE
+ 0
+ Inactive
+
+ true
+ Coordinated
+ University of Central Florida
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=542
+ Douglas Maukonen Experimental
+ 2017-02-02
+ 2017-02-15
+ Douglas.maukonen@ucf.edu.nospam
+
+
+
+
+
+
+ 2021-08-04+02:00
+
+ Mission description
+ https://sciences.ucf.edu/physics/microgravity/q-pace/
+
+
+
+
+
+ Telemetry 1
+ 2412500000
+
+
+
+
+
+
+
+ Telemetry 2
+ 437275000
+
+ FSK
+ 9600
+
+
+
+
+
+
+
+
+ Repeater
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ QARMAN
+ 45257
+ 1998-067RA
+ Inactive
+
+ true
+ Coordinated
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=661
+ Thosten Scholz DO2TSB
+ 2013-10-31
+ 2015-06-08
+ scholz@vki.ac.be.nospam
+
+ Draft
+ 2021-08-13+02:00
+
+ Project Information page
+ https://qarman.eu/
+
+
+
+ Beacon
+ 437350000
+
+ GMSK
+ 9600
+
+ ON05BE
+
+
+
+
+ Qarman Beacon Definition
+
+ https://ukamsat.files.wordpress.com/2020/01/qarman_bcndef_v1.1.pdf
+
+
+ Beacon Decoder spreadsheet
+
+ https://ukamsat.files.wordpress.com/2020/01/qarman_bcndecoder.xlsx
+
+
+
+
+
+ operations@qarman.eu
+
+
+
+
+ QB50p1 - FUNcube3
+ 40025
+ 2014-033R
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=369
+
+
+ 2014-06-19
+ Yasniy site
+
+ EO-79
+ Verified
+ 2021-08-13+02:00
+
+ QB50 Precursor Mission page
+ https://www.qb50.eu/index.php/precursor-flight
+ EO-79, also known as QB50p1 and FUNcube-3, is
+ a 2U cubesat (10cm x 10cm x 20cm) built and launched as a
+ collaborative effort led by the von Karman Institute and
+ ISIS-BV. The primary function of the satellite is testing of the
+ systems designed for the QB50 mission cubesats, including the
+ Attitude Determination and Control System, Ion and Neutral Mass
+ Spectrometer, Oxygen Flux Probe, Satellite Control Software, and
+ the Quadpack deployer. Additionally, the satellite carries a
+ AMSAT-NL constructed transponder as a return favor for support
+ of the use of the amateur bands for the primary QB50 mission.
+ The transponder will be active after the primary mission is
+ complete, estimated at six months. (Source AMSAT-NA)
+
+
+ Funcube Home page
+ http://funcube.org.uk/
+ Funcube project home page
+
+
+
+ Main
+ 145815000
+
+ BPSK
+ 1200
+
+
+ CW
+
+ QB50P1
+
+
+ Main
+
+ 435035000
+ 435065000
+
+
+ 145935000
+ 145965000
+
+ SSB/CW
+ yes
+
+
+
+
+ QB50 precursor amateur radio operator page
+
+ https://www.qb50.eu/index.php/precursor-amateur-radio-operator
+
+
+ CW beacon content
+ http://www.isispace.nl/HAM/qb50p_cwbeacon.pdf
+
+
+ AX.25 beacon content
+ http://www.isispace.nl/HAM/qb50p_ax25beacon.pdf
+
+
+ QB50 upload interface
+ https://upload.qb50.eu/
+
+ operations@isispace.nl
+
+
+
+
+ QB50p2 (EO-80)
+ 40032
+ 2014-033Y
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=368
+
+
+ 2014-06-19
+ Yasniy site
+
+ EO-80
+ Verified
+ 2021-08-13+02:00
+
+ QB50 Precursor Mission page
+ https://www.qb50.eu/index.php/precursor-flight
+ EO-80, also known as QB50p2, is a 2U cubesat
+ (10cm x 10cm x 20cm) built and launched as a collaborative
+ effort led by the von Karman Institute and ISIS-BV. The primary
+ function of the satellite is testing of the systems designed for
+ the QB50 mission cubesats, including the Attitude Determination
+ and Control System, Ion and Neutral Mass Spectrometer, Oxygen
+ Flux Probe, Satellite Control Software, and the Quadpack
+ deployer. Additionally, the satellite carries a AMSAT-F
+ constructed repeater as a return favor for support of the use of
+ the amateur bands for the primary QB50 mission. The transponder
+ will be active after the primary mission is complete, estimated
+ at six months.(source AMSAT-NA)
+
+
+
+ Le@af 4 - Edition spéciale QB50
+ http://www.amsat-f.org/spip/IMG/pdf/leaf4.pdf
+ Amsat-Francophone publication dedicated to QB50P2
+
+
+
+ Main
+ 145880000
+
+ BPSK
+ 1200
+
+
+ CW
+
+ QB50P2
+
+
+ FM voice repeater
+
+ 435080000
+
+
+ 145840000
+
+ FM
+ 210.7
+
+
+
+
+ QB50 precursor amateur radio operator page
+
+ https://www.qb50.eu/index.php/precursor-amateur-radio-operator
+
+
+ CW beacon content
+ http://www.isispace.nl/HAM/qb50p_cwbeacon.pdf
+
+
+ AX.25 beacon content
+ http://www.isispace.nl/HAM/qb50p_ax25beacon.pdf
+
+
+ QB50 upload interface
+ https://upload.qb50.eu/
+
+ operations@isispace.nl
+
+
+
+
+ QBEE (SE01)
+ 42708
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 435800000
+
+ GFSK
+ 9600bps
+
+ ON01SE
+
+
+
+
+ QBITO (ES01)
+ 42728
+ Decayed
+ INIT
+ 2019-08-07
+
+
+ Beacon
+ 436810000
+
+ GFSK
+ 9600bps
+
+
+
+
+
+
+ QUAKESAT
+ 27845
+ 2003-031F
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 436682000
+
+ FSK
+ 9600
+
+ KD7OVB
+
+
+
+
+ Quantutong-1 (TY-6 Tianyi-6 Xiaoxiang-6)
+ 43158
+ 2018-008D
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=556
+
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+ 436100000
+
+ GMSK
+ 9600
+
+
+
+
+ T1
+
+ 436100000
+
+
+ 436100000
+
+ 9k6 GMSK
+
+
+ T2
+
+ 2415000000
+
+
+ 2415000000
+
+ 5Mbps OFDM
+
+
+ T3
+
+ 5667000000
+
+
+ 5845000000
+
+ 5Mbps OFDM
+
+
+
+
+ Qubescout-S1
+ 39443
+ 2013-066AD
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437525000
+
+ GMSK
+ 9600
+
+
+
+
+
+ QUETZAL-1
+ 45598
+ 1998-067RL
+ Operational
+
+ true
+ Coordinated
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=663
+ José Bagur TG8JAB
+ 2018-11-15
+ 2019-07-23
+ jabagur@uvg.edu.gt.nospam
+
+
+ International Space Station
+
+ Draft
+ 2021-08-13+02:00
+
+ Project page
+ https://www.uvg.edu.gt/cubesat-en/
+
+
+ Telemetry description and associated SW
+ https://github.com/danalvarez/gr-quetzal1
+ This repository includes the UHF
+ specifications for Quetzal-1, information on demodulating and
+ decoding beacons from the satellite, as well as a graphical
+ application to view beacon data.
+
+
+
+
+ Beacon
+ 437200000
+
+ GMSK
+ 4800
+
+
+
+
+
+
+ beacon description
+
+ https://github.com/danalvarez/gr-quetzal1/blob/master/docs/Beacon_Package_Data.xlsx
+
+
+
+
+
+ satelite@uvg.edu.gt
+ https://github.com/danalvarez/gr-quetzal1
+
+
+
+ Raavana 1
+ 44329
+ 1998-067QE
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=616
+
+
+ 2019-04-17
+
+
+
+ Draft
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=616
+ coordinated by IARU
+ coordonné par l'IARU
+
+
+ Bird3 hamradio information
+ http://birds3.birds-project.com/document/amateur/
+ Radio documents
+ documents radio
+
+
+
+ Beacon
+ 435375000
+
+ CW
+
+
+
+ GMSK
+ 9600
+
+
+
+
+
+
+
+
+
+
+ BIRDS Project - JGMNB
+ https://www.formpl.us/form/6372043568185344
+
+
+
+
+
+
+ RadFxSat-2-Fox-1E
+ To Be Launch
+
+ true
+ Coordinated
+ AMSAT-NA
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=541
+ Andrew Glassbrenner KO4MA
+ 2017-01-20
+ 2017-02-17
+ glasbrenner@mindspring.com.nospam
+
+
+ 2021-01-13
+
+
+ Draft
+ 2021-01-12
+
+ Mission description
+ http://uvsq-sat.projet.latmos.ipsl.fr/
+ RadFxSat-2, like RadFxSat / Fox-1B, now
+ AMSAT-OSCAR 91, is a partnership opportunity between Vanderbilt
+ University and AMSAT and will carry a similar radiation effects
+ experiment, studying new FinFET technology.
+
+
+
+
+ Beacon
+ 435750000
+
+ BPSK
+ 1200 Bps
+
+
+
+
+ FM voice repeater mode 1
+
+ 145875000
+
+
+ 435775000
+
+ FM
+ 67
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://www.amsat.org/foxtelem-software-for-windows-mac-linux/
+
+
+
+ RadSat-u
+ 45262
+ 1998-067RF
+ Inactive
+
+ true
+ Coordinated
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=551
+ Larry Springer expérimental
+ 2017-03-08
+ 2017-04-26
+ Larry.springer@msu.edu.nospam
+
+
+ Wallops Flight Facility, états unis
+
+
+ Draft
+ 2021-08-13+02:00
+
+ RadSat-U publication
+ https://scholarworks.montana.edu/xmlui/handle/1/12916
+ Les chercheurs de MSU travaillent depuis huit ans sur
+ un système informatique tolérant aux rayonnements ionisants pour
+ les applications spatiales. Afin de quantifier la quantité de
+ rayonnement ressentie par l'ordinateur, l'équipe RadSat-U
+ développe un capteur de rayonnement photo-voltaïque. RadSat-U,
+ un satellite 3U conçu pour transporter l'ordinateur tolérant aux
+ radiations dans l'espace, est la plate-forme de test idéale.
+ L'expérience consiste en une cellule solaire entièrement
+ intégrée et un circuit de conditionnement de signaux conçus pour
+ s'adapter à RadSat-U. RadSat-U transportera ensuite à la fois
+ l'ordinateur tolérant aux radiations et l'expérience sur les
+ cellules solaires en orbite où l'environnement de rayonnement
+ spatial testera les limites des deux systèmes. Un test à grande
+ échelle élèvera cette nouvelle technologie au plus haut niveau
+ de la NASA pour les technologies émergentes, ce qui lui
+ permettra d'être utilisé dans de futures missions.
+
+
+ An FPGA-based Radiation Tolerant SmallSat Computer System
+
+ http://www.montana.edu/blameres/vitae/publications/d_conference_full/conf_full_033_fpga_based_smallsat_computer.pdf
+
+
+
+
+ Beacon
+ 437425000
+
+ GMSK
+ 19200
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ RAIKO
+ 38852
+ Not amateur satellite
+
+ Draft
+ 2020-05-24+02:00
+
+
+ Main
+ 1300000000000
+
+ 384-500kbps
+
+
+
+
+
+
+ Range A
+ 43798
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=598
+
+
+ Vandenberg Air Force Base, California
+
+
+ Verified
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=497
+ RAnge A has been coordinated by IARU
+ RAnge A a été coordonné par l'IARU
+
+
+
+ Telemetry 1
+ 437150000
+
+ FSK
+ 0.1 kbps to 115.2 kbps
+
+
+ MSK
+ 0.1 kbps to 115.2 kbps
+
+
+ GFSK
+ 0.1 kbps to 115.2 kbps
+
+
+ GMSK
+ 0.1 kbps to 115.2 kbps
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Range B
+ 43773
+ Inactive
+
+ Vandenberg Air Force Base, California
+
+
+ Verified
+ 2021-08-04+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=497
+ RAnge B has been coordinated by IARU
+ RAnge B a été coordonné par l'IARU
+
+
+
+ Telemetry 1
+ 437475000
+
+ FSK
+ 0.1 kbps to 115.2 kbps
+
+
+ MSK
+ 0.1 kbps to 115.2 kbps
+
+
+ GFSK
+ 0.1 kbps to 115.2 kbps
+
+
+ GMSK
+ 0.1 kbps to 115.2 kbps
+
+
+
+
+
+
+ n
+
+
+
+
+
+
+
+
+
+
+
+ RANGE-A
+ 43772
+ Inactive
+ Draft
+ 2021-08-04+02:00
+
+
+ Beacon
+ 437150000
+
+ 0.1kbps-115.2kbps FSK/MSK/GFSK/GMSK
+ 0
+
+
+
+
+
+
+ RASAT
+ 37791
+ Inactive
+ INIT
+ 2021-08-04+02:00
+
+
+ Beacon
+ 437400000
+
+ FSK
+ 9600 bps
+
+ RASAT0-11 -12
+
+
+
+
+ RAX-1
+ 37223
+ 2010-062B
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437505000
+
+ GMSKKISS
+ 9600
+
+ RAX-1
+
+
+
+
+ RAX-2
+ 37853
+ 2011-061D
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437345000
+
+ GMSK
+ 9600
+
+
+
+
+
+
+ Reaktor Hello World
+ 43743
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=503
+
+
+ 2018-12-16
+ India
+
+
+ Verified
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=503
+ Reaktor Hello World has been coordinated by
+ IARU
+ Reaktor Hello World a été coordonné par
+ l'IARU
+
+
+
+ Telemetry 1
+ 437775000
+
+ CW
+
+
+
+ 2GFSK
+ 9k6
+
+
+
+
+ Telemetry corrected frequency
+ 437775270
+
+ CW
+
+
+
+ 2GFSK
+ 9k6
+
+
+
+
+ Telemetry 1
+ 2410000000
+
+ MSK
+ 1Mbs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ RINCON
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 437345000
+
+ AFSK
+ 1200
+
+ WA4CEW
+
+
+
+
+ Robusta-1B
+ 42792
+ 2017-036AD
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=397
+
+ Verified
+ 2021-08-13+02:00
+
+
+ Main
+ 437325000
+
+ AFSK
+ 1200
+
+
+ CW
+
+
+ FX6FR
+
+
+
+
+ Robusta
+ 38080
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437325000
+
+ FM
+ 1200
+
+
+
+
+
+
+ RS-1 (Radio Sputnik 1)
+ 11085
+ 1978-100B
+ Inactive
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+
+
+
+
+
+
+
+
+
+
+ RS-10 (COSMOS 1861)
+ 18129
+ Inactive
+ Draft
+ 2021-08-04+02:00
+
+
+ Beacon
+ 29357000
+
+ CW
+
+
+
+
+
+ Beacon
+ 29403000
+
+ CW
+
+
+
+
+
+
+
+ RS-12(Sputnik)
+ 21089
+ 1991-007A
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 29408000
+
+ CW
+
+
+
+
+ Main
+ 145862000
+
+ CW
+
+
+
+
+
+
+ RS-14 (Informator-1)
+ 21087
+ Inactive
+ INIT
+ 2021-08-04+02:00
+
+
+ Beacon
+ 145822000
+
+ CW
+
+
+
+
+
+ Beacon
+ 145948000
+
+ CW
+
+
+
+
+
+
+
+ RS-15(Sputnik)
+ 23439
+ 1994-085A
+ Operational
+
+
+ Main
+ 29352000
+
+ CW
+
+
+
+
+
+
+ RS-16 (Mozhayets-2)
+ 24744
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 435510000
+
+ CW
+ 0
+
+
+
+
+
+
+ RS-17 (Sputnik 40)
+ 24958
+ Decayed
+ INIT
+ 2019-08-07
+
+
+ Beacon
+ 145820000
+
+ CW
+
+
+
+
+
+
+
+ RS-18 (Sputnik 41)
+ 25533
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 145812000
+
+ CW
+ 0
+
+
+
+
+
+
+ RS-19 (Sputnik 99)
+ 25685
+ Decayed
+ INIT
+ 2019-08-07
+
+
+ Beacon
+ 145815000
+
+ CW
+
+
+
+
+
+
+
+ RS-2 (Radio Sputnik 2)
+ 11086
+ 1978-100C
+ Inactive
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+
+
+
+
+
+
+
+
+
+
+ RS-20 (Mozhayets-3)
+ 27560
+ Decayed
+ INIT
+ 2019-08-07
+
+
+ Beacon
+ 145828000
+
+ CW
+
+
+
+
+
+ Beacon
+ 435319000
+
+ CW
+
+
+
+
+
+
+
+ RS-21(Sputnik)
+ 27394
+ Decayed
+
+
+ Main
+ 145825000
+
+ CW
+
+
+
+
+
+
+ RS-22(Mozhayets)
+ 27939
+ 2003-042A
+ Operational
+
+
+ Main
+ 435352000
+
+ CW
+
+
+
+
+
+
+ RS-23 (Tatyana)
+ 28523
+ Inactive
+ Draft
+ 2021-08-04+02:00
+
+
+ Beacon
+ 435215000
+
+ CW
+ 0
+
+
+
+
+ Beacon
+ 435315000
+
+ CW
+ 0
+
+
+
+
+
+
+ RS-25
+ 28898
+ 2005-043G
+ Unknown
+
+
+ Main
+ 435325000
+
+ CW
+
+
+
+
+
+
+ RS-28(UgatuSat)
+ 35869
+ 2009-049E
+ Inactive
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Main
+ 435264000
+
+ CW
+
+ RS28
+
+
+
+
+ RS-3 (Radio Sputnik 3)
+ 12997
+ 1981-120A
+ Inactive
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+
+
+
+
+
+
+
+
+
+
+ RS-30(Yubileiniy)
+ 32953
+ 2008-025A
+ Inactive
+
+ Draft
+ 2021-08-04+02:00
+
+
+ Main
+ 435315000
+
+ CW
+
+ RS30
+
+
+
+
+ RS-38(Tatiana-2)
+ 35868
+ 2009-049D
+ Inactive
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Main
+ 435490000
+
+ CW
+
+ RS38
+
+
+
+
+ RS-39 (Chibis-M)
+ 38051
+ Inactive
+ INIT
+ 2021-08-04+02:00
+
+
+ Beacon
+ 435315000
+
+ CW
+
+
+
+
+
+ Beacon
+ 435215000
+
+ CW
+
+
+
+
+
+
+
+ RS-4 (Radio Sputnik 4)
+ 13000
+ 1981-120D
+ Inactive
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+
+
+
+
+
+
+
+
+
+
+ RS-40 (Yubileyny-2 MiR)
+ 38735
+ Inactive
+ INIT
+ 2021-08-04+02:00
+
+
+ Beacon
+ 435365000
+
+ CW
+
+
+
+
+
+
+
+ RS-46 (COSMOS-2491)
+ 39497
+ Inactive
+ INIT
+ 2021-08-04+02:00
+
+
+ Beacon
+ 435465000
+
+ CW
+
+
+
+
+
+ Beacon
+ 435565000
+
+ CW
+
+
+
+
+
+
+
+ RS-47 (COSMOS-2499)
+ 39765
+ Inactive
+ INIT
+ 2021-08-04+02:00
+
+
+ Beacon 1
+ 435565000
+
+ CW
+
+
+
+
+
+ Beacon 2
+ 435465000
+
+ CW
+
+
+
+
+
+
+
+ RS-5 (Radio Sputnik 5)
+ 12999
+ 1981-120C
+ Inactive
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+
+
+
+
+
+
+
+
+
+
+ RS-6 (Radio Sputnik 6)
+ 13002
+ 1981-120F
+ Inactive
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+
+
+
+
+
+
+
+
+
+
+ RS-7 (Radio Sputnik 7)
+ 13001
+ 1981-120E
+ Inactive
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+
+
+
+
+
+
+
+
+
+
+ RS-8 (Radio Sputnik 8)
+ 12998
+ 1981-120B
+ Inactive
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+
+
+
+
+
+
+
+
+
+
+ RSP-00
+ 43639
+ Inactive
+ draft
+ 2021-08-04+02:00
+
+ project site
+
+ http://rymansat.com/en/2018/10/15/operational-status-of-rsp-00/
+
+
+
+
+
+ Beacon
+ 145890000
+
+ 38k4 pi/4QPSK CW
+
+
+
+ AFSK
+ 1200
+
+
+ FM
+
+
+
+ CW
+
+
+ 8J1RSP
+
+
+ Beacon
+ 436930000
+
+ pi/4QPSK
+ 38400 Bps
+
+ 8J1RSP
+
+
+
+
+ SACRED
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+ Wiki page
+ https://en.wikipedia.org/wiki/SACRED
+
+
+
+
+ Main
+ 0
+
+ AFSK
+ 1200
+
+ WA4CEW
+
+
+
+
+ SAFIR-S
+ 25399
+ 1998-043F
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 2401900000
+
+ FSK
+ 9600
+
+ DP1AIS
+
+
+
+
+ Salsat
+ 0
+
+ Inactive
+
+ true
+ Coordinated
+ Technische Universität Berlin (TU Berlin)
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=718
+ Sebastian Lange DL7BST
+ 2020-01-15
+ 2020-06-06
+ LANGE@tu-berlin.de.no spam
+
+
+ 2020-09-28
+ Plesetsk
+
+ 2021-08-04+02:00
+
+ project site
+
+ https://www.raumfahrttechnik.tu-berlin.de/menue/research/current_projects/salsat/
+
+
+
+
+ UHF
+ 435950000
+
+ AFSK
+ 1200
+
+
+ AFSK
+ 2400
+
+
+
+
+
+
+ TUBiX10 Communication System Specifications
+
+ https://www.raumfahrttechnik.tu-berlin.de/fileadmin/fg169/amateur-radio/TUBiX10-COM.pdf
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SamSat-218D
+ 41466
+ 2016-026C
+ Inactive
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 145870000
+
+ CW
+ 0
+
+ SAMSAT-218D
+
+
+
+
+ Sathyabamasat
+ 41600
+ 2016-040B
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=189
+
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+ 145980000
+
+ CW
+ 0
+
+
+ BPSK CW
+ 2400 bps
+
+ SNSAT
+
+
+
+
+ SATLLA-1
+ 0
+
+ Inactive
+
+ true
+ Coordinated
+ Ariel University
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=683
+ Yosef Pinhasi 4Z1VC
+ benmo@g.ariel.ac.il.nospam
+
+
+
+
+ 2021-08-04+02:00
+
+ project web site
+ https://www.ariel-asc.com/
+
+
+
+
+ UHF
+ 437250000
+
+ Lora
+
+
+
+
+ SBAND
+ 240100000
+
+ Lora
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SaudiSat-4
+ 40016
+ 2014-033G
+ Inactive
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+
+
+ Ka-band SSB
+ 0
+
+
+
+
+
+
+ SEAM-2.0
+ 44411
+ Unknown
+ Draft
+ 2019-08-07
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=584
+ TBEx has been coordinated by IARU
+ TBEx a été coordonné par l'IARU
+
+
+
+ Beacon
+ 437250000
+
+ GMSK
+ 9600 bps
+
+
+
+
+
+
+ SeeMe
+ 0
+ Inactive
+
+ Vandenberg Air Force Base, California
+
+
+ Verified
+ 2021-08-04+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=457
+ SeeMehas been coordinated by IARU
+ SeeMe a été coordonné par l'IARU
+
+
+
+ Telemetry 1
+ 437425000
+
+
+
+
+
+
+
+ Telemetry 2
+ 437450000
+
+
+
+
+
+
+
+ Telemetry 3
+ 2424250000
+
+ BPSK
+ 1.6Mbps
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SERPENS
+ 40897
+ Decayed
+
+ 2015-09-17
+ International Space Station
+
+ None
+ Verified
+ 2020-05-24+02:00
+
+ SERPENS Ham Radio Page
+ http://www.aerospace.unb.br/serpens_radioamateurs
+ SERPENS is a 3U CubeSat which was developed
+ by students at the University of Brasilia and focuses on
+ meteorological data collection.
+
+
+
+ Sector A
+ 145980000
+
+ GFSK
+ 9600
+
+ PY0ESA
+
+
+ SECTOR B
+ 437365000
+
+ CW
+
+
+ MSK
+ 1200
+
+ PY0ESA
+
+
+
+
+ SERPEN HamRadio Home Page
+ http://www.aerospace.unb.br/serpens_radioamateurs
+
+
+ Report shall be sent by email
+ serpens.reports@aerospace.unb.br.
+
+
+
+
+
+ SGSat
+ 42703
+ Unknown
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 437450000
+
+ FSK
+ 9600bps
+
+
+
+
+
+
+ SHIN'EN2 (FO-82)
+ 40320
+ Deep Space
+ 2020-05-24+02:00
+
+
+ Main
+ 437385000
+
+ Transponder WSJT/CW
+
+ JG6YIG
+
+
+
+
+ ShindaiSat
+ 39572
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437485000
+
+ AFSK
+ 1200
+
+
+ CW
+
+ JR0ZST
+
+
+
+
+ SIRIUSSAT-1 (SXC1-181 RS13S)
+ 43595
+ 1998-067PG
+ Decayed
+
+ 2018-08-15
+ ISS
+
+
+ Verified
+ 2020-12-20
+
+ Siriussat information page (Russian)
+
+ http://sputnix.ru/ru/nashi-sputniki/siriussat-1
+
+ http://sputnix.ru/en/about/news/siriussat-12-satellites-amateur-radio-information
+
+
+ Siriussat hamradio information from Sputnix companie
+
+ http://sputnix.ru/en/about/news/siriussat-12-satellites-amateur-radio-information
+ hamradio information from Spunix Companie
+
+
+
+ Main
+ 435570000
+
+ GMSK
+ 4800
+
+ RS13S
+
+
+
+
+
+
+
+
+
+
+
+ siriussat@sputnix.ru
+
+ Télécharger SPUTNIX Telemetry Viewer (Win ENG)
+
+ http://sputnix.ru/tpl/docs/SX-TLM-Viewer-0.0.0-win32-en.zip
+
+
+
+
+ SiriusSat-2(SXC1-182 RS14S)
+ 43596
+ 1998-067PH
+ Decayed
+
+ 2018-08-15
+ ISS
+
+
+ Verified
+ 2020-12-20
+
+ Siriussat information page (Russian)
+
+ http://sputnix.ru/ru/nashi-sputniki/siriussat-1
+
+ http://sputnix.ru/en/about/news/siriussat-12-satellites-amateur-radio-information
+
+
+ Siriussat hamradio information from Sputnix companie
+
+ http://sputnix.ru/en/about/news/siriussat-12-satellites-amateur-radio-information
+ hamradio information from Spunix Companie
+
+
+
+ Main
+ 435670000
+
+ GMSK
+ 4800
+
+ RS14S
+
+
+
+
+
+
+
+
+
+
+
+ siriussat@sputnix.ru
+
+ Télécharger SPUTNIX Telemetry Viewer (Win ENG)
+
+ http://sputnix.ru/tpl/docs/SX-TLM-Viewer-0.0.0-win32-en.zip
+
+
+
+
+ skCUBE
+ 42789
+ 2017-036AA
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=474
+
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437100000
+
+ CW
+
+
+
+ GMSK
+ 9600 Bps
+
+
+
+ Digipeater
+
+ 2401000000
+
+
+ 437100000
+
+
+
+
+
+
+ SATNOGS : Kaitai Struct for Telemetry
+
+ https://gitlab.com/librespacefoundation/satnogs/satnogs-decoders/blob/master/ksy/skcube.ksy
+
+
+
+
+
+
+
+
+
+
+ SMOG-1
+ 47964
+ Operational
+
+ false
+
+
+
+
+
+
+
+
+
+ MO-110
+
+
+ Mission description
+
+
+
+
+
+
+ Telemetry 1
+ 437345000
+
+ 2GMSK
+
+
+
+ CW
+
+
+
+
+
+ Repeater
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SMOG-P (MO-105)
+ 44832
+ Operational
+
+ true
+ Coordinated
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=641
+ Levente Dudas HA7WEN
+ 2018-08-13
+ 2018-11-19
+ dudas@hvt.bme.hu.nospam
+
+
+ 2019-12-06
+ Rocket Lab Launch Complex 1 - Mahia Peninsula, New
+ Zealand
+
+ Magyar-OSCAR 105 (MO-105)
+ Verified
+ 2019-11-26
+
+ Project information
+ http://gnd.bme.hu
+
+
+
+
+
+ Beacon
+ 437150000
+
+ GMSK
+ 12500
+
+
+
+
+
+
+ Snuglite
+ 43784
+ Operational
+
+ Vandenberg Air Force Base, California
+
+
+ Verified
+ 2018-11-04
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=529
+ Snuglite has been coordinated by IARU
+ Snuglite a été coordonné par l'IARU
+
+
+
+ Telemetry 1
+ 437275000
+
+ GMSK
+ 9600
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SNUSAT-1 (KR02)
+ 42733
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 436090000
+
+ BPSK
+ 1200bps
+
+ ON02KR
+
+
+
+
+ SNUSAT-1b (KR03)
+ 42727
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 435950000
+
+ BPSK
+ 1200bps
+
+ ON03KR
+
+
+
+
+ SNUSAT-2
+ 43782
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=509
+
+
+ Vandenberg Air Force Base, California
+
+
+ Verified
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=509
+ SNUSAT-2 has been coordinated by IARU
+ SNUSAT-2 a été coordonné par l'IARU
+
+
+
+ Telemetry 1
+ 437625000
+
+ BPSK
+ 9600
+
+
+
+
+ Telemetry 2
+ 2402000000
+
+ DQPSK
+ 1.06Mbit/s
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SO-33(SEDSAT-1)
+ 25509
+ 1998-061B
+ Inactive
+ SO-33
+ 2021-08-04+02:00
+
+
+ Main
+ 437910000
+
+ FSK
+ 9600
+
+ SEDSAT-1
+
+
+
+
+ SO-35(SUNSAT-1)
+ 25636
+ 1999-008C
+ Inactive
+ SO-35
+ 2021-08-04+02:00
+
+
+ Main
+ 145825000
+
+ 9600bpsFM
+
+ SUNSAT-3
+
+
+
+
+ SO-41(SaudiSat-1a)
+ 26545
+ 2000-057A
+ Inactive
+ SO-41
+ 2021-08-04+02:00
+
+
+ Main
+ 436775000
+
+ FSK
+ 9600
+
+ SASAT1-11-12
+
+
+
+
+ SO-42(SaudiSat-1b)
+ 26549
+ 2000-057E
+ Inactive
+ SO-42
+ 2021-08-04+02:00
+
+
+ Main
+ 436075000
+
+ FSK
+ 9600
+
+ SASAT2-11-12
+
+
+
+
+ SO-43(Starshine)
+ 26929
+ Decayed
+ SO-43
+ 2020-05-24+02:00
+
+
+ Main
+ 145820000
+
+ FSK
+ 9600
+
+ STRSHN
+
+
+
+
+ SO-50(SaudiSat-1c)
+ 27607
+ 2002-058C
+ Operational
+ SO-50
+
+
+ Main
+ 0
+
+ FM_tone670Hz
+
+
+
+
+
+
+ SO-67(SumbandilaSat)
+ 35870
+ 2009-049F
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 435300000
+
+ FM_tone2336Hz
+
+
+
+
+
+
+ Socrat
+ 44405
+ Operational
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 436000000
+
+ mobitex
+ 4800 bps
+
+
+
+
+
+
+ SOHLA-1(MAIDO-1)
+ 33496
+ 2009-002E
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437505000
+
+ AFSK
+ 1200
+
+
+ CW
+
+ JL3YUS
+
+
+
+
+ SOMP-2 (DE02)
+ 42700
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 437405000
+
+ GMSK
+ 9600 bps
+
+
+ CW
+ 0
+
+ ON02TR
+
+
+
+
+ SOMP
+ 39134
+ 2013-015E
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=173
+
+ 2021-08-13+02:00
+
+
+ Main
+ 437503000
+
+ AFSK
+ 1200
+
+
+ CW
+
+ DP0TUD
+
+
+
+
+ SONATE
+ 44400
+ 2019-038Q
+ Unknown
+ INIT
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=572
+ SONATE has been coordinated by IARU
+ SONATE a été coordonné par l'IARU
+
+
+ project information
+
+ http://www8.informatik.uni-wuerzburg.de/en/wissenschaftforschung/sonate/
+
+
+
+
+
+ Telemetry 1
+ 145840000
+
+ SSTV
+
+
+
+
+
+ Telemetry 2
+ 437025000
+
+ GFSK
+ 9600 Bps
+
+
+ GMSK
+ 9600 Bps
+
+
+
+
+
+
+ SpaceCube (FR05)
+ 42717
+ Decayed
+ INIT
+ 2019-08-07
+
+
+ Beacon
+ 436880000
+
+ 1200bps AFSK FM
+ 0
+
+ ON05FR
+
+
+ FM voice repeater
+
+ 436880000
+
+
+ 145860000
+
+ FM
+
+
+
+
+ SpinSat
+ 40314
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437230000
+
+ GFSK
+ 9600
+
+
+
+
+
+ SPOC
+ 0
+
+ Inactive
+
+ true
+ Coordinated
+ University of Georgia Small Satellite
+ Research Laboratory
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=664
+ Nicholas Neel KN4LIP
+ hollisneel@gmail.com.nospam
+
+
+
+
+ 2021-08-04+02:00
+
+ project page
+ http://www.smallsat.uga.edu/missions
+ The SPectral Ocean Color (SPOC) satellite mission, was
+ funded through NASA’s second iteration of the Undergraduate
+ Student Instrument Project (USIP) in mid 2016. The SPOC's
+ mission shall acquire moderate resolution imagery across a wide
+ range of spectral bands to monitor coastal ecosystems and ocean
+ color. SPOC will acquire image data between 433 and 866 nm to
+ monitor 1) coastal wetlands status, 2) estuarine water quality
+ including wetland biophysical characteristics and phytoplankton
+ dynamics, and 3) near-coastal ocean productivity. SPOC shall use
+ multispectral remote sensing techniques to quantify vegetation
+ health, primary productivity, ocean productivity, suspended
+ sediments, and organic matter in coastal regions. The uniqueness
+ of SPOC lies in its payload, a 16 band adjustable multi spectral
+ imager, called SPOC eye. The payload structure for SPOC was
+ designed by Cloudland Instruments and the UGA SSRL SPOC team is
+ actively building and refining the optical structure.
+
+
+
+ UHF
+ 437350000
+
+ GMSK
+ 9600
+
+
+
+
+ S Band
+ 2401300000
+
+ QPSK IESS-308
+ 2000000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ http://www.smallsat.uga.edu/contact
+
+
+
+
+ SpooQy-1
+ 44332
+ 1998-067QH
+ Operational
+ Draft
+ 2021-08-13+02:00
+
+ project information
+ https://sites.google.com/site/phylej/projects-1/spooqy-1
+
+
+
+
+ IARU Coordination declined
+
+
+
+
+
+
+ Beacon
+ 436200000
+
+ GMSK
+ 9600bps
+
+
+
+
+
+
+ SporeSat
+ 39681
+ Unknown
+ 2020-05-24+02:00
+
+
+ Main
+ 437100000
+
+ AFSK
+ 1200
+
+
+
+
+
+ SPROUT
+ 39770
+ 2014-029E
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=257
+
+
+ 2014-05-24
+ Tanegashima Space Center
+
+ None
+ Verified
+ 2021-08-13+02:00
+
+ SPace Research On Unique Technology Web Page
+ http://sat.aero.cst.nihon-u.ac.jp/sprout-e/
+ There are 3 main missions in SPROUT : -
+ Deployment demonstration of inflatable membrane structure. -
+ Demonstration of attitude determination and control technology
+ for several kilogram class nano-satellite. - Upbringing of human
+ resources of a space sector
+ Trois missions sont allouées au satellite
+ SPROUT : - Deployment demonstration of inflatable membrane
+ structure. - Demonstration of attitude determination and control
+ technology for several kilogram class nano-satellite. -
+ Upbringing of human resources of a space sector
+
+
+
+ CW - FM Packet
+ 437525000
+
+ AFSK
+ 1200
+
+
+ GMSK
+ 9600
+
+
+ CW
+
+ JQ1ZJQ
+
+
+ SSTV
+ 437600000
+
+ SSTV
+
+
+
+ Digipeater
+
+ 437600000
+
+
+ 437600000
+
+
+
+
+
+ Sprout telemetry format
+
+ http://sat.aero.cst.nihon-u.ac.jp/sprout-e/2-Formats%20of%20telemetry-e.html
+
+
+ Sprout team propose different types of Report
+
+ http://sat.aero.cst.nihon-u.ac.jp/sprout-e/2-Amateur%20satellite-e.html
+
+
+ http://sat.aero.cst.nihon-u.ac.jp/sprout-e/2-Software-e.html
+
+
+
+ SRMSAT
+ 37841
+ 2011-058D
+ Operational
+
+
+ Main
+ 437425000
+
+ CW
+
+
+
+
+
+
+ STARS(KUKAI)
+ 33498
+ 2009-002G
+ Operational
+
+
+ Main
+ 437305000
+
+ FM
+ 1200
+
+
+ CW
+
+ JR5YBN(mother
+
+
+ Main
+ 437275000
+
+ FM
+ 1200
+
+
+ CW
+
+ JR5YBO(daught
+
+
+
+
+ STARS-AO
+ 43679
+ 2018-084I
+ Operational
+ Draft
+ 2021-08-13+02:00
+
+ Project information
+ https://stars-ao.info
+
+
+
+
+ Beacon
+ 437350000
+
+ CW
+
+
+ JJ2YSY
+
+
+ Beacon
+ 437400000
+
+ CW
+
+
+ JJ2YSY
+
+
+ Beacon
+ 437200000
+
+ GMSK
+
+
+ JJ2YSY
+
+
+
+
+ STARS-C (Daughter)
+ 41895
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 437245000
+
+ AFSK
+ 1200bps
+
+
+ CW
+ 0
+
+ JJ2YPM
+
+
+ Beacon
+ 437405000
+
+ AFSK
+ 1200bps
+
+ JJ2YPM
+
+
+
+
+ STARS-II (Mother)
+ 39579
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437245000
+
+ AFSK
+ 1200
+
+
+ CW
+
+ JR5YDX
+
+
+ Main
+ 437255000
+
+ AFSK
+ 1200
+
+
+ CW
+
+ JR5YDY
+
+
+
+
+ STARS-Me (Mother)
+ 43640
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=571
+
+ Draft
+ 2021-08-13+02:00
+
+ Project information
+ http://stars.eng.shizuoka.ac.jp/english.html
+
+
+
+
+ Mother - Beacon 1
+ 437245000
+
+ CW
+
+
+
+ AFSK
+ 1200
+
+ JJ2YPL
+
+
+ Mother - Beacon 2
+ 437405000
+
+ CW
+
+
+
+ AFSK
+ 1200
+
+ JJ2YPL
+
+
+ Daughter - Beacon 1
+ 437255000
+
+ CW
+
+
+
+ AFSK
+ 1200
+
+ JJ2YPL
+
+
+ Daughter - Beacon 2
+ 437425000
+
+ CW
+
+
+
+ AFSK
+ 1200
+
+ JJ2YPL
+
+
+
+
+ STECCO
+ 47943
+ 2021-022M
+ Unknown
+
+ true
+ Coordinated
+ Scuola di Ingegneria Aerospaziale
+ http://www.amsatuk.me.uk/iaru/formal_detail.php?serialnum=782
+ Augusto Nascetti IU0NNW
+ 2020-12-15
+ 2021-03-07
+ Augusto.nascetti@uniroma1.it.nospam
+
+
+ 2021-03-22
+
+
+
+ Verified
+ 2021-08-13+02:00
+
+ project information
+
+ https://sites.google.com/uniroma1.it/stecco-sia/radio-amateurs?authuser=0
+
+
+
+
+
+ Beacon
+ 435800000
+
+ FSK G3RUH
+ 9600
+
+
+
+
+ Digipeater
+
+ 435800000
+
+
+ 435800000
+
+ 9600 FSK G3RUH
+
+
+
+
+ Information for radioamateur
+
+ https://sites.google.com/uniroma1.it/stecco-sia/radio-amateurs?authuser=0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ STEP Cube Lab (STEP-1)
+ 43138
+ 2018-004AD
+ Operational
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437485000
+
+ FSK
+ 9600 bps
+
+
+ CW
+ 0
+
+
+
+
+
+
+ STMSat-1
+ 41476
+ Inactive
+ Draft
+ 2021-08-04+02:00
+
+
+ Beacon
+ 437800000
+
+ SSTV
+ 0
+
+
+ GMSK
+ 9600 bps
+
+
+
+
+
+
+ STRaND-1
+ 39090
+ 2013-009E
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=212
+
+ 2021-08-13+02:00
+
+
+ Main
+ 437568000
+
+ GMSK
+ 9600
+
+
+
+
+
+ StudSat
+ 36796
+ 2010-035B
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437861000
+
+ FSK
+ 9600
+
+
+ CW
+
+
+
+
+
+
+ SUCHAI
+ 42788
+ 2017-036Z
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=278
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437230000
+
+ CW
+
+
+
+ FSK2k4
+ 2400 Bps
+
+ SUCHAI
+
+
+
+
+ Suomi 100
+ 43804
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=507
+
+
+ Vandenberg Air Force Base, California
+
+
+ Verified
+ 2021-08-13+02:00
+
+ Project
+ http://www.suomi100satelliitti.fi/eng
+
+
+
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=507
+ Suomi 100 has been coordinated by IARU
+ Suomi 100 a été coordonné par l'IARU
+
+
+
+ Telemetry 1
+ 437775000
+
+
+
+
+
+
+
+ Telemetry 2
+ 2410000000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SurfSat
+ 43614
+ 2018-070B
+ Inactive
+ Draft
+ 2021-08-13+02:00
+
+ Project information
+
+ https://icubesat.files.wordpress.com/2015/06/icubesat-2015_org_b-3-5_surfsatweb_dove.pdf
+
+
+
+
+ Beacon
+ 437275000
+
+ FSK
+ 9600bps
+
+
+
+
+
+
+ SUSat (AU01)
+ 42730
+ Inactive
+ Draft
+ 2021-08-04+02:00
+
+
+ Beacon
+ 436775000
+
+ FSK
+ 9600bps
+
+
+
+
+
+
+ SwampSat II
+ 45115
+ 2019-071E
+ Operational
+
+ true
+ Coordinated
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=677
+ Jay Garlitz AA4FL
+ 2019-06-26
+ 2019-09-09
+ jgarlitz@ufl.edu.nospam
+
+
+ Wallops Flight Facility, états unis
+
+
+ Draft
+ 2021-08-13+02:00
+
+ Large Square-Loop Antenna Deployment from CubeSats
+
+ http://digitalcommons.usu.edu/cgi/viewcontent.cgi?article=3510
+
+
+
+
+ Beacon
+ 145875000
+
+ GMSK
+ 9600
+
+
+
+
+ Beacon
+ 436350000
+
+ GMSK
+ 9600
+
+
+
+
+ Beacon
+ 2432000000
+
+ QPSK
+ 3 Mbps
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwampSat
+ 39402
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437385000
+
+ FSK
+ 9600
+
+
+
+
+
+ Swayam COEP
+ 41607
+ Inactive
+ Draft
+ 2021-08-04+02:00
+
+
+ Beacon
+ 437025000
+
+ CW
+ 0
+
+
+ BPSK
+ 1200 bps
+
+ SWAYAM
+
+
+
+
+ Swiatowid
+ 44426
+ Operational
+
+ true
+
+
+ 2019-04-17
+
+
+
+ Draft
+ 2020-05-24+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=609
+ coordinated by IARU
+ coordonné par l'IARU
+
+
+ project site
+ https://satrevolution.com/projects/swiatowid/
+
+
+
+
+
+ Beacon
+ 435500000
+
+ AFSK
+ 1200
+
+
+
+
+ APRS
+
+ 435500000
+
+
+ 435500000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SwissCube-1
+ 35932
+ 2009-051B
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=142
+
+ 2021-08-13+02:00
+
+
+ Main
+ 437505000
+
+ BFSK
+ 1200
+
+
+ CW
+
+ HB9EG1
+
+
+
+
+ TabletSat-Aurora
+ 40017
+ 2014-033H
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437050000
+
+ 9600bps GMSK D-STAR
+
+
+
+
+
+ Tancredo-1 (UbatubaSat)
+ 41391
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 437200000
+
+ AFSK
+ 1200 bps
+
+
+ CW
+
+
+ PY0ETA
+
+
+
+
+ Tanusha-SWSU-1 (RS-6S)
+ 42911
+ Inactive
+ draft
+ 2021-08-04+02:00
+
+
+ Beacon
+ 437050000
+
+ AFSK
+ 1200 bps
+
+
+ Voice
+
+
+ RS6S
+
+
+
+
+ Tanusha-SWSU-2 (RS-7S)
+ 42912
+ Inactive
+ Draft
+ 2021-08-04+02:00
+
+
+ Beacon
+ 437050000
+
+ AFSK
+ 1200 bps
+
+
+ Voice
+
+
+ RS7S
+
+
+
+
+ Tanusha-SWSU-3 (RS-8S)
+ 43597
+ Operational
+ Draft
+ 2020-05-24+02:00
+
+
+ Beacon
+ 437050000
+
+ AFSK
+ 1200 bps
+
+
+ Voice
+
+
+ RS8S
+
+
+
+
+ Tanusha-SWSU-4 (RS-9S)
+ 43598
+ Inactive
+ Draft
+ 2021-08-04+02:00
+
+
+ Beacon
+ 437050000
+
+ AFSK
+ 1200 bps
+
+
+ Voice
+
+
+ RS9S
+
+
+
+
+ Taurus-1 (Jinniuzuo-1)
+ 44530
+ 2019-059C
+ Operational
+
+ 2013-09-12
+ Taiyuan Satellite Launch Center, Chine
+
+
+ Draft
+ 2021-08-13+02:00
+
+ Digital FM to Codec 2 transpondeur
+
+ https://www.amsat.org/wordpress/wp-content/uploads/2019/03/N8HM_LilacSat_LO-90.pdf
+
+
+
+
+ Beacon
+ 435840000
+
+
+
+
+
+
+
+ FM to Codec-2
+
+ 145820000
+
+
+ 436760000
+
+ FM to Codec-2
+ 67
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TAUSAT-1
+ 47926
+ 1998-067SC
+ Operational
+
+ true
+ Coordinated
+ Herzliya Science Center
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=773
+ David Greenberg 4X1DG
+ 2020-10-06
+ 2020-11-12
+ David.greenberg@bezeqint.net.nospam
+
+
+ 2021-03-13
+
+
+
+ Verified
+ 2021-08-13+02:00
+
+ Project data
+
+ https://drive.google.com/drive/folders/0ByJzUp9kSx_ZUWk2N0U3MnB1Z0E
+
+
+
+
+
+ Beacon
+ 436000000
+
+ BPSK
+ 9600
+
+
+
+
+ FM U
+
+
+ 436000000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TBEx-a
+ 44356
+ Unknown
+
+ 2019-06-25
+
+
+
+ DRAFT
+ 2020-05-24+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=502
+ has been coordinated by IARU
+ a été coordonné par l'IARU
+
+
+ project information
+ https://exploration.engin.umich.edu/blog/?page_id=3257
+
+
+
+
+
+ Telemetry 1
+ 437535000
+
+ GMSK
+ 9k6
+
+
+
+
+
+
+ TBEx – Tandem Beacon Experiment
+ https://exploration.engin.umich.edu/blog/?page_id=3257
+
+
+ SATNOGS : Kaitai Struct for Telemetry
+ https://exploration.engin.umich.edu/blog/?page_id=3257
+
+
+
+
+
+ jwcutler@umich.edu
+
+
+
+
+ TBEx-b
+ 44359
+ To be launch
+
+ 2019-06-25
+
+
+
+ DRAFT
+ 2020-05-24+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=502
+ TBEx has been coordinated by IARU
+ TBEx a été coordonné par l'IARU
+
+
+ project information
+ https://exploration.engin.umich.edu/blog/?page_id=3257
+
+
+
+
+
+ Telemetry 1
+ 437535000
+
+ GMSK
+ 9k6
+
+
+
+
+
+
+ TBEx – Tandem Beacon Experiment
+ https://exploration.engin.umich.edu/blog/?page_id=3257
+
+
+ SATNOGS : Kaitai Struct for Telemetry
+
+ https://gitlab.com/librespacefoundation/satnogs/satnogs-decoders/blob/master/ksy/tbex.ksy
+
+
+
+
+
+ jwcutler@umich.edu
+
+
+
+
+ TechEdSat-3
+ 39415
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437465000
+
+ AFSK
+ 9600
+
+
+ CW
+
+
+
+
+
+ TechEdSat-4
+ 40455
+ Unknown
+ INIT
+ 2019-08-07
+
+
+ Beacon
+
+
+
+ 0
+
+
+
+
+
+
+ TechEdSat-5
+ 42066
+ Decayed
+ INIT
+ 2019-08-07
+
+
+ Beacon
+
+
+
+
+
+
+
+
+
+
+ TechEdSat
+ 38854
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437465000
+
+ FM
+ 1200
+
+
+ CW
+
+ KJ6TVO
+
+
+
+
+ TechnoSat
+ 42829
+ 2017-042E
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=463
+
+ draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 435950000
+
+ GMSK
+ 4800bps
+
+
+ GMSK
+ 9600bps
+
+
+ CW
+
+
+ DP0TBA
+
+
+
+
+ TeikyoSat-3
+ 39576
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437450000
+
+ AFSK
+ 1200
+
+
+ CW
+
+ JQ1ZKM
+
+
+
+
+ Ten-Koh
+ 43677
+ 2018-084G
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=579
+
+ Draft
+ 2021-08-13+02:00
+
+ Project information
+ http://kit-okuyama-lab.com/en/ten-koh/
+
+
+
+
+ Beacon
+ 437390000
+
+ AFSK
+ 1200bps
+
+
+ GMSK
+ 9600bps
+
+
+ CW
+
+
+
+ WSJT
+
+
+ JG6YKY
+
+
+
+
+ amateur information
+
+ http://kit-okuyama-lab.com/en/ten-koh/for-amateur-radio-reception/
+
+
+
+
+ TetherSat
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 437100000
+
+ GFSK
+ 9600
+
+
+
+
+
+ Tianwang-1A (TW-1A SECM-1)
+ 40928
+ 2015-051D
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/formal_detail.php?serialnum=468
+
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+ 435645000
+
+ GMSK
+ 4800
+
+
+ GMSK
+ 9600
+
+
+
+
+
+
+ Tianwang-1B (TW-1B NJUST-2)
+ 40927
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/formal_detail.php?serialnum=468
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437645000
+
+ GMSK
+ 4800
+
+
+ GMSK
+ 9600
+
+
+
+
+
+
+ Tianwang-1C (TW-1C NJFA-1)
+ 40926
+ Operational
+
+ true
+
+ Draft
+ 2020-05-24+02:00
+
+
+ Beacon
+ 435645000
+
+ GMSK
+ 4800
+
+
+ GMSK
+ 9600
+
+
+
+
+
+
+ TigriSat
+ 40043
+ 2014-033AK
+ Operational
+
+
+ Main
+ 436000000
+
+ FSK
+ 9600
+
+ HNATIG
+
+
+
+
+ TIsat-1
+ 36799
+ 2010-035E
+ Inactive
+
+ Verify
+ 2021-08-04+02:00
+
+
+ Main
+ 145980000
+
+ PSK
+
+
+ AFSK
+
+
+ CW
+
+ HB9DE
+
+
+
+
+ TJ3Sat
+ 39385
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437320000
+
+ CW
+
+
+
+
+
+ TO-31(TMSAT-1)
+ 25396
+ 1998-043C
+ Inactive
+ TO-31
+ 2021-08-04+02:00
+
+
+ Main
+ 436925000
+
+ FSK
+ 9600
+
+ TMSAT1-11-12
+
+
+
+
+ Toki (BIRD-J)
+ 42820
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 437372000
+
+ AFSK
+ 1200bps
+
+
+ GMSK
+ 9600bps
+
+
+ CW
+
+
+ JG6YJO
+
+
+
+
+ Tomsk-TPU-120 (RS04S)
+ 42910
+ Inactive
+ Draft
+ 2021-08-04+02:00
+
+
+ Beacon
+ 145800000
+
+ FSK
+ 9600bps
+
+
+ Voice
+
+
+ RS4S
+
+
+
+
+ Trailblazer-1
+ 39400
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437425000
+
+ FSK
+ 9600
+
+
+
+
+
+ Triton-1
+ 39427
+ 2013-066M
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 2408000000
+
+ 1200bps RC-BPSK CW
+
+
+ CW
+
+ TRIV0 TRIV1
+
+
+
+
+ TRSI-Sat
+ 44831
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=649
+
+
+ 2019-12-06
+ Rocket Lab Launch Complex 1 - Mahia Peninsula, New
+ Zealand
+
+ Draft
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=649
+
+
+
+
+
+ Beacon (IARU) Deprecated
+ 437150000
+
+ GMSK
+ 12500
+
+
+ CW
+ 12500
+
+
+
+
+ Beacon (IARU) Deprecated
+ 437075000
+
+ GMSK
+ 12500
+
+
+ CW
+ 12500
+
+
+
+
+
+
+ TRSI Sat telemetry information Center frequency: 437.075
+ MHz
+ http://www.kocyla.de/spaceblog/?page_id=292
+
+
+
+
+
+ radio@satrevolution.com
+ https://github.com/daniestevez/gr-satellites.
+
+
+
+ TSAT (TestSat-Lite)
+ 39682
+ Unknown
+ INIT
+ 2019-08-07
+
+
+ Beacon
+
+
+
+ 0
+
+
+
+
+
+
+ TSUBAME
+ 40302
+ 2014-070E
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437275000
+
+ AFSK
+ 1200
+
+
+ CW
+
+ JQ1ZHX
+
+
+
+
+ Tsuru (BIRDS-4)
+ 47927
+ 1998-067SD
+ Operational
+
+ true
+ Coordinated
+ Kyushu Institute of Technology
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=688
+ Daisuke Nakayama JG6YBW
+ 2019-08-02
+ 2019-09-10
+ o108074d@mail.kyutech.jp.nospam
+
+
+ 2021-03-13
+
+
+
+ Verified
+ 2021-08-13+02:00
+
+ Project site
+ https://birds4.birds-project.com/
+
+
+
+
+
+ Beacon
+ 437375000
+
+ CW
+
+
+
+
+
+
+ JG6YMX
+
+
+ APRS
+
+ 145825000
+
+
+ 145825000
+
+
+
+
+
+
+ Decoder user manual
+
+ http://birds4.birds-project.com/wp-content/uploads/2021/03/How-to-use-BIRDS-4-CW-decoder-v1.1-1.pptx
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tsuru (BIRDS-4)
+ To Be Launch
+
+ true
+ Coordinated
+ Kyushu Institute of Technology
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=689
+ Daisuke Nakayama JG6YBW
+ 2019-08-02
+ 2019-09-10
+ o108074d@mail.kyutech.jp.nospam
+
+
+ 2021-03-13
+
+
+
+ Verified
+ 2020-03-13
+
+ Project site
+ https://birds4.birds-project.com/
+
+
+
+
+
+ Beacon
+ 437375000
+
+ CW
+
+
+
+
+
+
+ JG6YMX
+
+
+ APRS
+
+ 145825000
+
+
+ 145825000
+
+
+
+
+
+
+ Decoder user manual
+
+ http://birds4.birds-project.com/wp-content/uploads/2021/03/How-to-use-BIRDS-4-CW-decoder-v1.1-1.pptx
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TTÜ100 (TTÜSat, MektorySAT 1, Hämarik)
+ 0
+
+ Inactive
+
+ true
+ Coordinated
+ Tallinn University of Technology
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=565
+ Eerik Lossmann ES1JX
+ 2017-06-09
+ 2017-09-03
+ eerik.lossmann@ttu.ee.nospam
+
+
+ 2020-09-03
+ Kourou
+
+ 2021-08-04+02:00
+
+ project information
+ http://satelliit.taltech.ee/
+
+
+
+
+ Balise
+ 10465000000
+
+ OQPSK
+ 62.5kbps
+
+
+ OQPSK
+ 20Mbp
+
+
+
+
+
+ 435450000
+
+ CW
+
+
+
+ FSK
+ 1200
+
+
+ GMSK
+ 1200
+
+
+ MSK
+ 1200
+
+
+ FSK
+ 9600
+
+
+ GMSK
+ 9600
+
+
+ MSK
+ 9600
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TugSat-1 (CanX-3B)
+ 39091
+ 2013-009F
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 2234400000
+
+ 32Kbps-256Kbps BPSK
+
+
+
+
+
+ TuPOD
+ 41936
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 437425000
+
+ GMSK CW
+ 1200bps
+
+
+ CW
+
+
+ TUPOD
+
+
+
+
+ TURKSAT-3USAT
+ 39152
+ 2013-018C
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437225000
+
+ CW
+
+
+
+
+
+ TY-3 (Tianyi-3 Xiaoxiang-3)
+ 43664
+ Unknown
+ INIT
+ 2019-08-07
+
+
+ Beacon
+
+
+ 9k6 GMSK/5Mbps OFDM
+
+
+
+
+
+
+
+ TY-5 (Tianyi-5 Xiaoxiang-5)
+ 43553
+ Unknown
+ INIT
+ 2019-08-07
+
+
+ Beacon
+
+
+ 9k6 GMSK/5Mbps OFDM
+
+
+
+
+
+
+
+ UAPSat-1
+ 39571
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437385000
+
+ AFSK
+ 1200
+
+ OA0UAP-1
+
+
+
+
+ UBAKUSAT
+ 43467
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=526
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437225000
+
+ CW
+ 0
+
+ YM1RAS
+
+
+ Beacon
+ 437325000
+
+ GMSK
+ 9600bps
+
+ YM1RAS
+
+
+ Repeater
+
+ 145935000
+ 145960000
+
+
+ 435200000
+ 435250000
+
+ SSB linear
+
+
+
+
+ UbatubaSat (Tancredo-1)
+ 41931
+ Inactive
+ Draft
+ 2021-08-04+02:00
+
+
+ Beacon
+ 437200000
+
+ AFSK
+ 1200 Bps
+
+
+ CW
+ 0
+
+ PY0ETA
+
+
+
+
+ UCLSat (GB03)
+ 42765
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=421
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 435975000
+
+ GMSK
+ 9600bps
+
+ ON03GB
+
+
+
+
+ Uguisu (BIRD-JPN)
+ 44330
+ 1998-067QF
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=617
+
+
+ 2019-04-17
+
+
+
+ Draft
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=617
+ coordinated by IARU
+ coordonné par l'IARU
+
+
+ Bird3 hamradio information
+ http://birds3.birds-project.com/document/amateur/
+ Radio documents
+ documents radio
+
+
+
+ Beacon
+ 435375000
+
+ CW
+
+
+
+ GMSK
+ 9600
+
+
+
+
+
+
+
+
+
+
+ BIRDS Project - JGMNB
+ https://www.formpl.us/form/6372043568185344
+
+
+
+
+
+
+ UiTMSat-1
+ 43589
+ 1998-067PD
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=518
+
+
+ 2018-08-10
+ ISS
+
+
+ Verified
+ 2021-08-13+02:00
+
+ BIRDS-2 Operation page
+ http://birds2.birds-project.com/operation/
+ The second BIRDS Project, BIRDS-2, started in
+ November, 2016. The participating countries are Bhutan,
+ Malaysia, Philippines and Japan. 11 students will develop 3
+ identical 1U CubeSats which will have capability to perform same
+ missions. The bus system for BIRDS-2 takes heritage from BIRDS-1
+ bus system and incorporates the lessons learned from BIRDS-1.
+
+
+
+ IARU
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=563
+
+
+
+
+ Main
+ 437375000
+
+ BPSK
+ 1200
+
+
+ CW
+
+ JG6YKN
+
+
+
+
+ Beacon Sequence and Format of BIRDS-2 CubeSats
+ http://birds2.birds-project.com/operation/
+
+
+ BIRDS-2 Data Submission
+ http://birds2.birds-project.com/data-submission/
+
+
+
+ BIRDS-2 Data Submission
+ http://birds2.birds-project.com/data-submission/
+
+
+
+
+ UKube-1-FUNcube-2
+ 40074
+ 2014-037F
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=203
+
+ 2021-08-13+02:00
+
+
+ Main
+ 145840000
+
+ BPSK
+ 1200
+
+
+ CW
+
+ UKUBE1
+
+
+ Main
+ 145915000
+
+ BPSK
+ 1200
+
+
+
+
+
+ UniBRITE (CanX-3A)
+ 39092
+ 2013-009G
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 145890000
+
+ CW
+
+
+
+
+
+ UNICubeSAT
+ 38084
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437305000
+
+ FSK
+ 9600
+
+
+
+
+
+
+ UniSat-5
+ 39421
+ 2013-066F
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437175000
+
+ GMSK
+ 9600
+
+
+
+
+
+ UniSat-6
+ 40012
+ 2014-033C
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=378
+
+ Verified
+ 2021-08-13+02:00
+
+
+ Main
+ 437425000
+
+ GMSK
+ 9600
+
+
+ CW
+
+ II0US
+
+
+
+
+ UNITEC-1
+ 36578
+ 2010-020F
+ Deep Space
+ 2020-05-24+02:00
+
+
+ Main
+ 5840000000
+
+ AFSK
+ 1200
+
+
+ CW
+
+ JQ1ZUN
+
+
+
+
+ UNSA-SAT1
+ 0
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 34000000
+
+ BPSK
+ 230000
+
+
+
+
+
+ UNSW-EC0 (AU02)
+ 42723
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 436530000
+
+ 4800bps GMSK
+ 0
+
+ ON02AU
+
+
+ Beacon
+ 2400500000
+
+
+ 0
+
+
+
+
+
+
+ UO-11(UoSAT-2)
+ 14781
+ 1984-021B
+ Operational
+ UO-11
+
+
+ Main
+ 2401500000
+
+ PSK
+
+ UOSAT-2
+
+
+
+
+ UO-14(UoSAT-3)
+ 20437
+ 1990-005B
+ Inactive
+ UO-14
+ 2021-08-04+02:00
+
+
+ Main
+ 0
+
+ FM
+
+
+
+
+
+
+ UO-15 (UoSAT-4)
+ 20438
+ 1990-005C
+ Decayed
+ UO-15
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 435120000
+
+ CW
+ 0
+
+
+
+
+
+
+ UO-22(UoSAT-5)
+ 21575
+ 1991-050B
+ Inactive
+ UO-22
+ 2021-08-04+02:00
+
+
+ Main
+ 435120000
+
+ FSK
+ 9600
+
+ UOSAT5-11-12
+
+
+
+
+ UO-36(UoSAT-12)
+ 25693
+ 1999-021A
+ Inactive
+ UO-36
+ 2021-08-04+02:00
+
+
+ Main
+ 437400000
+
+ FSK
+ 38400
+
+ UO121-11-12
+
+
+
+
+ UO-9 (UoSAT-1)
+ 12888
+ Decayed
+
+ 1981-10-06
+ Vandenberg
+
+ UO-9
+ 2020-05-24+02:00
+
+
+ Main
+ 2401000000
+
+ CW
+
+
+
+
+
+
+ UPMSat-2
+ 46276
+ 2020-061E
+ Operational
+
+ true
+ Coordinated
+ Universidad Politecnica de Madrid
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=401
+ Rafael Garcia Romero EA4BPN
+ 2014-07-30
+ 2015-04-15
+ rafael.garciaro@upm.es.nospam
+
+
+ 2020-09-03
+ Kourou
+
+ 2021-08-13+02:00
+
+ project page
+ http://www.idr.upm.es/index.php/es/el-proyecto-upm-sat-2
+
+
+
+
+ UHF
+ 437405000
+
+ AFSK
+ 1200
+
+ UPMST2
+
+
+
+
+ Telemetrie description
+
+ https://www.amsat-ea.org/app/download/11965940/UPMSAT2+-+Public_TM_v1_2.pdf
+
+
+ Sound example for testing purpose
+ https://drive.upm.es/index.php/s/bJI7a643o5u47CZ
+
+
+
+
+
+
+
+ https://www.amsat-ea.org/app/download/11965964/upmsat2_v1_2.exe
+
+
+
+ UPSat (GR02)
+ 42716
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=430
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 435765000
+
+ GMSK
+ 9600 Bps
+
+
+
+
+
+
+ URSA MAIOR (IT02)
+ 42776
+ 2017-036M
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=410
+
+ draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 435950000
+
+ FSK
+ 9600 Bps
+
+ URSAMR
+
+
+
+
+ USS Langley
+ 40652
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437475000
+
+ AFSK
+ 1200
+
+
+
+
+
+ UVSQsat
+ 47438
+ 2021-006AB
+ Operational
+
+ true
+ Coordinated
+ USVQ-LATMOS
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=709
+ Michel Mahe F4DEY
+ 2019-12-03
+ 2020-06-06
+ f4dey@ref-union.org.nospam
+
+
+
+ Universite de Versailles Saint-Quentin-en-Yvelines
+ Paris:Versailles
+ France
+
+
+ Universite de Versailles Saint-Quentin-en-Yvelines
+ Paris:Versailles
+ France
+
+
+
+
+ Universite de Versailles Saint-Quentin-en-Yvelines
+ Paris:Versailles
+ France
+
+
+ Universite de Versailles Saint-Quentin-en-Yvelines
+ Paris:Versailles
+ France
+
+
+
+ 2021-01-24
+ Cape Canaveral Air Station
+ US
+ LC40
+ Falcon 9
+ SPACEX
+ Transporter 2
+
+
+ Cubesat
+ 1.600
+ Box
+
+
+ Verified
+ 2021-08-13+02:00
+
+ Mission description
+ http://uvsq-sat.projet.latmos.ipsl.fr/
+ A 1U CubeSat project. UVSQ-SAT missions are:
+ 1- Providing a flight platform with functionalities open to ham
+ radio community 2- Education with hardware/software developments
+ and training to satellite operations. 3- Science with earth
+ observation for climate purpose and SDun observation for solar
+ physic purpose. 4 - Technology demonstration with minaturized
+ sensor for earth and sun observations. Proposing a UHF downlink
+ using BPSK at 1k2 to 9k6 data rates with AX25 and PUS formats.
+ Planning a launch from Baikonur in Dec 2020 into a 600km sun
+ synchronous orbit.
+
+
+
+
+ Telemetry 1
+ 437020000
+
+ BPSK - GR3UH
+ 9k6
+
+
+ BPSK - GR3UH
+ 1k2
+
+ LATMOS-1
+
+
+ Repeater
+
+ 145905000
+
+
+ 437020000
+
+ NFM
+
+
+
+
+ UVSQSAT Reception
+ http://uvsq-sat.projet.latmos.ipsl.fr/?ong=Operation
+
+
+ AMSAT-F : Kaitai file Description (*.ksy)
+
+ https://code.electrolab.fr/xtof/telemetrydescription/-/blob/master/UVSQsat/uvsqsat.ksy
+
+
+ AMSAT-F Satellite Database
+ https://amsat.electrolab.fr/
+
+ uvsqsat.telemetry@latmos.ipsl.fr
+ https://www.dk3wn.info/files/uvsqsat.zip
+
+ DK3WN Software
+ https://www.dk3wn.info/files/uvsqsat.zip
+
+
+ AMSAT-F Software
+
+ https://code.electrolab.fr/xtof/josast/-/tree/21-ecr-uvsqsat/ApplicationUVSQsatDecoder
+
+
+ AMSAT-F : Kaitai file Description (*.ksy)
+
+ https://code.electrolab.fr/xtof/telemetrydescription/-/blob/master/UVSQsat/uvsqsat.ksy
+
+
+ AMSAT-F Satellite Database SIDS API
+ https://amsat.electrolab.fr/api/V2/SIDS
+
+
+ SatNogs
+ https://db.satnogs.org/api/telemetry/
+
+
+
+
+ UWE-1
+ 28892
+ 2005-043C
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437505000
+
+ AFSK
+ 1200
+
+ DP0UWE
+
+
+
+
+ UWE-2
+ 35934
+ 2009-051D
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437385000
+
+ AFSK
+ 1200
+
+
+ CW
+
+
+
+
+
+
+ UWE-3
+ 39446
+ 2013-066AG
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=134
+
+
+ 2013-11-21
+ Orenburg, Russia
+
+ Verified
+ 2021-08-13+02:00
+
+ project information page
+
+ http://www7.informatik.uni-wuerzburg.de/forschung/space-exploration/projects/uwe-3/
+
+
+
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=134
+
+
+
+
+ Main
+ 437385000
+
+ FSK
+ 9600
+
+
+ CW
+
+ DP0UWG
+
+
+
+
+ Amateur Radio – PEØSAT - information on telemetry data
+
+ https://www.pe0sat.vgnet.nl/satellite/cube-nano-picosats/uwe-3/
+
+
+
+
+
+
+ http://www.dk3wn.info/files/uwe3_online.zip
+
+
+
+ UWE-4
+ 43880
+ 2018-111E
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=627
+
+
+ 2018-12-27
+ Vostochny
+
+
+ Verified
+ 2021-08-13+02:00
+
+ UWE-4 presentation
+
+ http://www7.informatik.uni-wuerzburg.de/forschung/space-exploration/projects/uwe-4/news/
+
+
+
+ IARU coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=627
+
+
+
+
+ Telemetry
+ 437385000
+
+ FSK AX25
+ 9600 bauds
+
+ DP0UWH
+
+
+ Digieater
+
+ 437385000
+
+
+ 437385000
+
+
+
+
+
+
+ Telemetry XL file descriptor
+
+ http://www7.informatik.uni-wuerzburg.de/fileadmin/10030700/user_upload/forschung/Space_Exploration_Group/UWE4/UWE-4_Beacon.xlsx
+
+
+
+
+
+ uwe4@informatik.uni-wuerzburg.de
+ http://www.dk3wn.info/files/uwe4.zip
+
+
+
+ VDNH-80
+ 44392
+ 2019-038G
+ Operational
+ draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 436500000
+
+ mobitex
+ 4800 bps
+
+
+
+
+
+
+ VELOX-2
+ 41171
+ 2015-077F
+ Inactive
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+ 145930000
+
+ BPSK CW
+ 1200bps
+
+
+ CW
+ 0
+
+ VELOX2
+
+
+
+
+ VELOX-I
+ 40057
+ 2014-034E
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 145980000
+
+ FSK
+ 9600
+
+
+ CW
+
+ VELOXI
+
+
+
+
+ VELOX-P2
+ 39438
+ 2013-066Y
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 145980000
+
+ BPSK
+ 1200
+
+
+ CW
+
+
+
+
+
+ Venta-1
+ 42791
+ 2017-036AC
+ Inactive
+ Verified
+ 2021-08-04+02:00
+
+
+ Main
+ 437325000
+
+
+
+
+
+
+
+ Vermont Lunar
+ 39407
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437305000
+
+ FSK
+ 9600
+
+ W1VTC2
+
+
+
+
+ VO-52(Hamsat)
+ 28650
+ 2005-017B
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 145936000
+
+ SSBCarrier
+
+ Indian
+
+
+ Main
+ 145860000
+
+ CW
+
+ Dutch
+
+
+
+
+ VO-96 (ExseedSat-1)
+ 43758
+ Inactive
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=477
+
+
+ 2018-12-03
+ Vandenberg Air Force Base, California
+
+ VUsat-OSCAR 96 (VO-96)
+ Verified
+ 2021-08-13+02:00
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=636
+ ExseedSat 1 has been coordinated by IARU
+ ExseedSat 1 a été coordonné par l'IARU
+
+
+
+ TLM 1
+ 145900000
+
+
+
+
+
+
+
+ FM voice repeater and digipeater (APRS )
+
+ 435340000
+
+
+ 145900000
+
+ FM
+ 67
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ VZLUsat-1 (CZ02)
+ 42790
+ 2017-036AB
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=382
+
+ INIT
+ 2021-08-13+02:00
+
+ Pilsen Ground Station
+ https://www.pilsencube.zcu.cz/vzlusat1/
+
+
+
+
+ Beacon
+ 437240000
+
+ MSK
+ 4800 bps
+
+
+ CW
+ 20 Wpm
+
+ VZLUSAT1
+
+
+
+
+ information for amateur radio comunitie
+
+ https://www.pilsencube.zcu.cz/vzlusat1/static_radio_amateur.html
+
+
+
+
+ VZLUsat-2
+ 51085
+
+ Operational
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Telemetry
+ 437325000
+
+ GMSK
+ 1200
+
+
+ GMSK
+ 4800
+
+
+ GMSK
+ 9600
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Waseda-SAT2
+ 36574
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437485000
+
+ FSK
+ 1200
+
+
+ CW
+
+ WASEDA
+
+
+
+
+ WASEDA-SAT3
+ 41933
+ Inactive
+ Draft
+ 2021-08-04+02:00
+
+
+ Beacon
+ 437290000
+
+ CW
+ 0
+
+
+ FSK
+ 1200 Bps
+
+
+
+
+
+
+ WE_WISH
+ 38856
+ Decayed
+ Verified
+ 2020-05-24+02:00
+
+
+ Main
+ 437505000
+
+ CW
+
+
+ SSTV
+
+
+ AFSK
+ 2400
+
+ JQ1ZIJ
+
+
+
+
+ WO-18(WEBERSAT)
+ 20441
+ 1990-005F
+ Inactive
+ WO-18
+ 2021-08-04+02:00
+
+
+ Main
+ 0
+
+ PSK
+ 1200
+
+
+
+
+
+
+ WO-39(JAWSAT)
+ 26061
+ 2000-004A
+ Inactive
+ WO-39
+ 2021-08-04+02:00
+
+
+ Main
+ 0
+
+ FSK
+ 9600
+
+
+
+
+
+
+ Wren
+ 39435
+ 2013-066V
+ Inactive
+ 2021-08-04+02:00
+
+
+ Main
+ 437405000
+
+ FSK
+ 1200
+
+
+ CW
+
+
+
+
+
+ X-CubeSat (FR01)
+ 42707
+ Decayed
+ Draft
+ 2019-08-07
+
+
+ Beacon
+ 437020000
+
+ GMSK
+ 9600
+
+
+ AFSK1k2
+ 1200
+
+ ON01FR
+
+
+
+
+ Xatcobeo
+ 38082
+ Decayed
+ 2020-05-24+02:00
+
+
+ Main
+ 437365000
+
+ FFSKSSRC
+ 1200
+
+ W
+
+
+
+
+ Xiaoxiang-1 (TY-1 Tianyi-1)
+ 41842
+ Unknown
+ Drfaft
+ 2019-08-07
+
+
+ Beacon
+ 2401600000
+
+ GMSK
+ 9600 bps
+
+
+
+
+ Beacon
+ 437500000
+
+ GMSK
+ 9600 bps
+
+
+
+
+ Beacon
+ 437525000
+
+ GMSK
+ 9600 bps
+
+
+
+
+
+
+ Xiaoxiang-2 (TY-2 Tianyi-2)
+ 43155
+ 2018-008A
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=556
+
+ Draft
+ 2021-08-13+02:00
+
+
+ Beacon
+ 435350000
+
+ FSK
+ 9600 Bds
+
+
+
+
+ T1
+
+ 435350000
+
+
+ 435350000
+
+ 9k6 GMSK
+
+
+ T2
+
+ 2403000000
+
+
+ 2403000000
+
+ 5Mbps OFDM
+
+
+ T3
+
+ 5653000000
+
+
+ 5833000000
+
+ 5Mbps OFDM
+
+
+
+
+ Xiaoxiang-4 (TY-4 Tianyi-4)
+ 43669
+ Operational
+ draft
+ 2019-08-07
+
+
+ Beacon
+ 435925000
+
+ GMSK
+ 9600
+
+
+
+
+ T1
+
+ 435925000
+
+
+ 435925000
+
+ 9k6 GMSK
+
+
+ T2
+
+ 2409000000
+
+
+ 2409000000
+
+ 5Mbps OFDM
+
+
+ T3
+
+ 5659000000
+
+
+ 5839000000
+
+ 5Mbps OFDM
+
+
+
+
+ XO-53(SSETI)
+ 28894
+ 2005-043E
+ Inactive
+ XO-53
+ 2021-08-04+02:00
+
+
+ Main
+ 437250000
+
+ FSK
+ 9600
+
+ SSETI1
+
+
+
+
+ XW-2A (CAS 3)
+ 40903
+ 2015-049E
+ Operational
+
+ 2015-09-19
+ Taiyuan Satellite Launch Center
+
+
+ Draft
+ 2015-11-02
+
+ XW-2/CAS-3 Frequency Information Chart
+
+ https://ukamsat.files.wordpress.com/2015/05/xw-2_cas-3_-satellites-frequency-allocation.pdf
+ Frequency information for all XW-2
+ constellation
+ Information sur les fréquences exploitées
+ par la XW-2 constellation
+
+
+
+ CW Beacon
+ 145660000
+
+ CW
+
+ BJ1SB
+
+
+ Digital Telemetry
+ 145660000
+
+ GMSK
+ 9600
+
+
+ GMSK
+ 19200
+
+ BJ1SB
+
+
+ Linear Transponder
+
+ 435030000
+ 435050000
+
+
+ 145665000
+ 145685000
+
+ LSB/USB
+ yes
+
+
+
+
+ XW-2 CW Telemetry Encoding Format
+
+ https://ukamsat.files.wordpress.com/2015/05/xw-2-cw-telemetry-encoding-format.pdf
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XW-2B (CAS 3B)
+ 40911
+ 2015-049N
+ Operational
+
+ 2015-09-19
+ Taiyuan Satellite Launch Center
+
+
+ verified
+ 2015-11-02
+
+ XW-2/CAS-3 Frequency Information Chart
+
+ https://ukamsat.files.wordpress.com/2015/05/xw-2_cas-3_-satellites-frequency-allocation.pdf
+ Frequency information for all XW-2
+ constellation
+ Information sur les fréuence exploitées par
+ la XW-2 constellation
+
+
+
+ CW Beacon
+ 145725000
+
+ CW
+
+ BJ1SC
+
+
+ Digital Telemetry
+ 145705000
+
+ GMSK
+ 9600
+
+
+ GMSK
+ 19200
+
+ BJ1SC
+
+
+ Linear Transponder
+
+ 435090000
+ 435110000
+
+
+ 145815000
+ 145795000
+
+ LSB/USB
+ yes
+
+
+
+
+ XW-2 CW Telemetry Encoding Format
+
+ https://ukamsat.files.wordpress.com/2015/05/xw-2-cw-telemetry-encoding-format.pdf
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XW-2C (CAS 3C)
+ 40906
+ 2015-049H
+ Operational
+
+ 2015-09-19
+ Taiyuan Satellite Launch Center
+
+
+ Verified
+ 2015-11-02
+
+ XW-2/CAS-3 Frequency Information Chart
+
+ https://ukamsat.files.wordpress.com/2015/05/xw-2_cas-3_-satellites-frequency-allocation.pdf
+ Frequency information for all XW-2
+ constellation
+ Information sur les fréuence exploitées par
+ la XW-2 constellation
+
+
+
+ CW Beacon
+ 145790000
+
+ CW
+
+ BJ1SD
+
+
+ Digital Telemetry
+ 145770000
+
+ GMSK
+ 9600
+
+
+ GMSK
+ 19200
+
+ BJ1SD
+
+
+ Linear Transponder
+
+ 435150000
+ 435170000
+
+
+ 145795000
+ 14581500
+
+ LSB/USB
+ yes
+
+
+
+
+ XW-2 CW Telemetry Encoding Format
+
+ https://ukamsat.files.wordpress.com/2015/05/xw-2-cw-telemetry-encoding-format.pdf
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XW-2D (CAS 3D)
+ 40907
+ 2015-049J
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=470
+
+
+ 2015-09-19
+ Taiyuan Satellite Launch Center
+
+
+ Draft
+ 2021-08-13+02:00
+
+ XW-2/CAS-3 Frequency Information Chart
+
+ https://ukamsat.files.wordpress.com/2015/05/xw-2_cas-3_-satellites-frequency-allocation.pdf
+ Frequency information for all XW-2
+ constellation
+ Information sur les fréuence exploitées par
+ la XW-2 constellation
+
+
+
+ CW Beacon
+ 145855000
+
+ CW
+
+ BJ1SE
+
+
+ Digital Telemetry
+ 145835000
+
+ GMSK
+ 9600
+
+
+ GMSK
+ 19200
+
+ BJ1SE
+
+
+ Linear Transponder
+
+ 435210000
+ 435230000
+
+
+ 14586000
+ 14588000
+
+ LSB/USB
+ yes
+
+
+
+
+ XW-2 CW Telemetry Encoding Format
+
+ https://ukamsat.files.wordpress.com/2015/05/xw-2-cw-telemetry-encoding-format.pdf
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XW-2F (CAS-3F)
+ 40910
+ 2015-049M
+ Operational
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+ 145975000
+
+ CW
+ 0
+
+ BJ1SG
+
+
+ Beacon
+ 145955000
+
+ GMSK
+ 9600 bps
+
+ BJ1SG
+
+
+ Repeater
+
+ 435330000
+ 435350000
+
+
+ 145980000
+ 146000000
+
+ LSB/USB
+
+
+
+
+ ZA-AeroSat(AZ01)
+ 42713
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=337
+
+ INIT
+ 2021-08-13+02:00
+
+
+ Beacon
+ 437200000
+
+ GMSK
+ 9600bps
+
+ ON01AZ
+
+
+
+
+ ZACube-1
+ 39417
+ 2013-066B
+ Operational
+
+ true
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=204
+
+
+ 2013-11-21
+ Orenburg, Russia
+
+ Verified
+ 2021-08-13+02:00
+
+ F'SATI Web Page
+ http://www.cput.ac.za/blogs/fsati/zacube-1/
+ Project page
+
+
+ Twitter
+ https://www.twitter.com/fsatispace
+
+
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=204
+
+
+
+
+ Main
+ 14099000
+
+ GMSK
+ 9600
+
+
+ AFSK
+ 1200
+
+
+ CW
+
+ 123456
+
+
+ Repeater
+
+ 145860000
+
+
+ 437245000
+
+
+
+
+
+
+ AX.25 beacon content
+ http://www.isispace.nl/HAM/qb50p_ax25beacon.pdf
+
+
+ QB50 upload interface
+ https://upload.qb50.eu/
+
+ fsatispace@gmail.com
+
+
+
+
+ ZACube-2
+ 43907
+ 2013-066B
+ Unknown
+
+ 2018-12-27
+ Vostochny
+
+
+ Verified
+ 2018-12-27
+
+ Warning
+
+ Hamradio paylaod not clear
+ Charge utile radioamateur pas clairement
+ définie - The coordinated frequencies are beacon 14.099MHz,
+ uplinks on 437.525 and 1260.25MHz and downlinks on 437.345 and
+ 2405.00MHz
+
+
+ IARU Coordination
+
+ http://www.amsatuk.me.uk/iaru/finished_detail.php?serialnum=205
+ IZACUBE 2 has been coordinated by IARU
+ IZACUBE 2 a été coordonné par l'IARU
+
+
+ Project Site
+ http://www.cput.ac.za/blogs/fsati/zacube-2/
+
+
+
+
+
+ Telemetry 1
+ 14099000
+
+ BPSK
+ 9600
+
+
+
+
+ repeater 1(TBC)
+
+ 437525000
+
+
+ 437345000
+
+
+
+
+ repeater 2(TBC)
+
+ 1260250000
+
+
+ 2405000000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ApplicationSatelliteDatabaseCli/src/main/java/org/josast/ApplicationSatelliteDatabaseCli/cmd/CheckCmd.java b/ApplicationSatelliteDatabaseCli/src/main/java/org/josast/ApplicationSatelliteDatabaseCli/cmd/CheckCmd.java
index 9a19f34d86733149624a2db78c0ad548000cb791..9eca9b011e9d715765b1f0d86be1404e8d3eacb1 100644
--- a/ApplicationSatelliteDatabaseCli/src/main/java/org/josast/ApplicationSatelliteDatabaseCli/cmd/CheckCmd.java
+++ b/ApplicationSatelliteDatabaseCli/src/main/java/org/josast/ApplicationSatelliteDatabaseCli/cmd/CheckCmd.java
@@ -18,7 +18,7 @@ public class CheckCmd implements Cmd {
ParameterSingleton parameter = ParameterSingleton.getInstance();
// check if file exist
if (parameter.getInputFile() != null) {
- log.info("filename" + parameter.getInputFile() + " " + parameter.getInputDirectory());
+ log.info("filename : " + parameter.getInputFile() + " " + parameter.getInputDirectory());
CheckAmsatListFile check = new CheckAmsatListFile(parameter.getInputFile());
System.out.println("Multiple Name");
System.out.println(check.checkUniqueSatelliteName());
diff --git a/ApplicationSatelliteDatabaseCli/src/test/java/org/josast/ApplicationSatelliteDatabaseCli/cmd/CheckCmdTest.java b/ApplicationSatelliteDatabaseCli/src/test/java/org/josast/ApplicationSatelliteDatabaseCli/cmd/CheckCmdTest.java
index e1725a838614af730caa8846b6d3628a1b7c682b..44ff82bbb29108acda939f9fc76a278f6db4dbfe 100644
--- a/ApplicationSatelliteDatabaseCli/src/test/java/org/josast/ApplicationSatelliteDatabaseCli/cmd/CheckCmdTest.java
+++ b/ApplicationSatelliteDatabaseCli/src/test/java/org/josast/ApplicationSatelliteDatabaseCli/cmd/CheckCmdTest.java
@@ -26,7 +26,7 @@ public class CheckCmdTest {
public void test() {
ParameterSingleton parameter = ParameterSingleton.getInstance();
- parameter.setInputFile("src/test/data/FileIn/AmsatList.xml");
+ parameter.setInputFile("src\\DataTest\\AmsatList.xml");
CheckCmd cmd = new CheckCmd();
cmd.excute();
assertTrue(true);
diff --git a/ApplicationSerial/pom.xml b/ApplicationSerial/pom.xml
index fe2fa0eff4ba9cea309bb4a93fc78abbd4c4e678..5e875dc51fc90a7f5e9f6672e6e4fa485d11afd6 100644
--- a/ApplicationSerial/pom.xml
+++ b/ApplicationSerial/pom.xml
@@ -1,56 +1,58 @@
-
- 4.0.0
-
-
-
- JOSAST-parent
- org.josast
- 0.0.2
-
-
+
+ 4.0.0
- ApplicationSerial
- jar
-
- ApplicationSerial
- http://maven.apache.org
-
-
-
+
+
+ JOSAST-parent
+ org.josast
+ 0.0.2
+
+
+
+ ApplicationSerial
+ jar
+
+ ApplicationSerial
+ http://maven.apache.org
+
+
+
UTF-8
1.8
1.8
${josast.version}
-
-
-
- commons-cli
- commons-cli
- 1.5.0
-
-
+
+
+
+ commons-cli
+ commons-cli
+ 1.6.0
+
+
org.josast
ModuleConfig
${ModuleConfig.version}
-
- com.fazecast
- jSerialComm
- [2.0.0,3.0.0)
-
-
-
+
+ com.fazecast
+ jSerialComm
+ [2.0.0,3.0.0)
+
+
+
org.apache.maven.plugins
maven-assembly-plugin
- make-assembly
+ make-assembly
package
single
@@ -70,11 +72,9 @@
-
-
-
+
-
+
diff --git a/ApplicationSerial/src/main/java/org/josast/serialtoTNC/type/TncKissType.java b/ApplicationSerial/src/main/java/org/josast/serialtoTNC/type/TncKissType.java
index bfc06c35cdb7d918706150c9c73fc17c2897ec17..229ad14361341f063345042d5774f94a8a620dc5 100644
--- a/ApplicationSerial/src/main/java/org/josast/serialtoTNC/type/TncKissType.java
+++ b/ApplicationSerial/src/main/java/org/josast/serialtoTNC/type/TncKissType.java
@@ -17,7 +17,7 @@ public class TncKissType implements TncDataType {
@Override
public void send(SerialPort serialPort) {
logger.info(bytesToHexString(kiss));
- serialPort.writeBytes(kiss, size);
+ serialPort.writeBytes(kiss, (int) size);
}
public static String bytesToHexString(byte[] bytes) {
diff --git a/ApplicationSpaceTrackDownload/pom.xml b/ApplicationSpaceTrackDownload/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2bbfa69382834ad855d5950d9bb74d9d4aa58083
--- /dev/null
+++ b/ApplicationSpaceTrackDownload/pom.xml
@@ -0,0 +1,59 @@
+
+
+
+
+ JOSAST-parent
+ org.josast
+ 0.0.2
+
+
+
+ 4.0.0
+
+ ApplicationSpaceTrackDownload
+ jar
+
+ ApplicationSpaceTrackDownload
+ http://maven.apache.org
+
+
+ UTF-8
+ 1.8
+ 1.8
+ ${josast.version}
+
+
+
+
+
+ org.josast
+ ModuleConfig
+ ${ModuleConfig.version}
+
+
+
+ org.josast
+ ModuleDebug
+ ${project.version}
+
+
+
+
+ junit
+ junit
+ 3.8.1
+ test
+
+
+
+ commons-httpclient
+ commons-httpclient
+ 3.1
+
+
+
+
+
+
diff --git a/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrack/FileID.java b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrack/FileID.java
new file mode 100644
index 0000000000000000000000000000000000000000..6e95814c2d429951aeaf790004719e9571328976
--- /dev/null
+++ b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrack/FileID.java
@@ -0,0 +1,23 @@
+package org.avmdti.josast.spacetrack;
+
+/**
+ * This class define the list of file available in Spacetrack.
+ *
+ * @author XTOPHE
+ */
+public class FileID {
+ public static final int GEOSYNCHONOUS = 4;
+ public static final int NAVIGATION = 6;
+ public static final int WEATHER = 8;
+ public static final int IRIDIUM = 10;
+ public static final int ORBCOM = 12;
+ public static final int GLOBALSTAR = 14;
+ public static final int INTELSAT = 16;
+ public static final int INMARSAT = 18;
+ public static final int AMATEUR = 20;
+ public static final int VISIBLE = 22;
+ public static final int SPECIALINTEREST = 24;
+
+ /** Creates a new instance of FileID */
+ private FileID() {}
+}
diff --git a/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrack/ToolsGUzip.java b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrack/ToolsGUzip.java
new file mode 100644
index 0000000000000000000000000000000000000000..cebd4660cebc9122db62c21a660d03bb697242a1
--- /dev/null
+++ b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrack/ToolsGUzip.java
@@ -0,0 +1,68 @@
+package org.avmdti.josast.spacetrack;
+
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.zip.GZIPInputStream;
+
+import org.josast.debug.*;
+
+/**
+ * Description : This class is used to Unzip a file
+ *
+ * Projet : JOSAST
+ *
+ *
+ * @author XTOPHE
+ * @version 1.0
+ *
Source Update
+ * Version : date : name : comments
+ * V1 : 6 mai 2005 : C. Mercier : create file
+ *
@TODO : move to UTIL module ?
+ */
+public class ToolsGUzip {
+
+ public static final int ERRORCLOSINGFILE = -3;
+ public static final int INCOMPRESNNOTPOSSIBLE = -2;
+
+ /**
+ * Uncompress a Gzip file.
+ *
+ * @param gzfilename file to decompress
+ * @param OutputFilename output file
+ * @return return Status
+ */
+ public static int uncompress(String gzfilename, String OutputFilename) {
+ GZIPInputStream zipin;
+ try {
+ FileInputStream in = new FileInputStream(gzfilename);
+ zipin = new GZIPInputStream(in);
+ } catch (IOException e) {
+ TRACE.error("Impossible d'ouvrir " + gzfilename + ".");
+ return -1;
+ }
+ int taillebuffer = 1000;
+ byte[] buffer = new byte[taillebuffer];
+ // d�compresse le fichier
+ try {
+ FileOutputStream out = new FileOutputStream(OutputFilename);
+ int length;
+ while ((length = zipin.read(buffer, 0, taillebuffer)) != -1) out.write(buffer, 0, length);
+ out.close();
+ } catch (IOException e) {
+ TRACE.error("Impossible de d�compresser " + OutputFilename + ".");
+ return INCOMPRESNNOTPOSSIBLE;
+ }
+ try {
+ zipin.close();
+ } catch (IOException e) {
+ TRACE.error("error during ZIP closing" + gzfilename);
+ return ERRORCLOSINGFILE;
+ }
+ return 0;
+ }
+
+ public static void main(String[] args) {
+ ToolsGUzip.uncompress("geo_3l_2005_05_05_am.txt.gz", "geo.tle");
+ }
+}
diff --git a/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrack/Wget.java b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrack/Wget.java
new file mode 100644
index 0000000000000000000000000000000000000000..b6232552e5135310057488b0a9b5b7d4eef57084
--- /dev/null
+++ b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrack/Wget.java
@@ -0,0 +1,208 @@
+package org.avmdti.josast.spacetrack;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
+import org.apache.commons.httpclient.Header;
+import org.apache.commons.httpclient.HeaderElement;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpException;
+import org.apache.commons.httpclient.HttpMethod;
+import org.apache.commons.httpclient.HttpStatus;
+import org.apache.commons.httpclient.NameValuePair;
+import org.apache.commons.httpclient.UsernamePasswordCredentials;
+import org.apache.commons.httpclient.auth.AuthScope;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.params.HttpMethodParams;
+import org.josast.debug.TRACE;
+
+/**
+ * Description : API to get information from a Web site.
+ *
+ *
Projet : JOSAST
+ *
+ * JOSAST : Java Open Source Amateur Satellite Toolbox
+ * The aim of the project is to create a set of tools for amateur satellite purpose. All this tools
+ * could be used together to create specific software. JOSAST project is managed by AVMDTI
+ * (http://www.avmdti.org )
+ * This software is an open source software. Please read the JOSAST licence
+ * (http://www.avmdti.org )
+ *
+ *
for more information contact josast@avmdti.org
+ *
+ * @author mercier
+ * @version 1.0
+ *
Source Update
+ * Version : date : name : comments
+ * V1 : 4 mai 2005 : C. Mercier : create file
+ *
+ */
+public class Wget {
+
+ HttpClient client;
+ private static final int FAIL = -1;
+
+ /** */
+ public Wget() {
+ super();
+ client = new HttpClient();
+ // client.getHostConfiguration().setProxy("GWHTTP-L.CORP.THALES", 8080);
+
+ // HttpState state = new HttpState();
+ // state.setProxyCredentials(null, null,
+ // new UsernamePasswordCredentials("cmercier", "cm1?60o"));
+ // client.setState(state);
+
+ client
+ .getParams()
+ .setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
+ }
+
+ public WgetResponse read(String url) {
+ WgetResponse reponse = new WgetResponse();
+
+ HttpMethod method = new GetMethod(url);
+ int statusCode = 0;
+ try {
+ statusCode = client.executeMethod(method);
+ } catch (HttpException e) {
+ TRACE.error(e.getMessage());
+ // e.printStackTrace();
+ } catch (IOException e) {
+ TRACE.error(e.getMessage());
+ // e.printStackTrace();
+ }
+ reponse.setStatusCode(statusCode);
+ if (statusCode != HttpStatus.SC_OK) {
+ TRACE.error(new String("Method failed: " + method.getStatusLine()));
+ reponse.setBuffer(new String("Method failed: " + method.getStatusLine()).getBytes());
+ } else {
+ try {
+ reponse.setBuffer(method.getResponseBody());
+ } catch (IOException e1) {
+ TRACE.error(e1.toString());
+ // e1.printStackTrace();
+ }
+ }
+ method.releaseConnection();
+ return reponse;
+ }
+
+ /**
+ * @param url
+ * @param data
+ * @return
+ */
+ public WgetResponse read(String url, NameValuePair[] data) {
+ WgetResponse reponse = new WgetResponse();
+
+ HttpMethod method = new GetMethod(url);
+ method.setFollowRedirects(true);
+ method.setQueryString(data);
+ int statusCode = 0;
+ try {
+ statusCode = client.executeMethod(method);
+ } catch (HttpException e) {
+ TRACE.error(e.getMessage()); // e.printStackTrace();
+ } catch (IOException e) {
+ TRACE.error(e.getMessage()); // e.printStackTrace();
+ }
+ reponse.setStatusCode(statusCode);
+ if (statusCode != HttpStatus.SC_OK) {
+ reponse.setBuffer(new String("Method failed: " + method.getStatusLine()).getBytes());
+ } else {
+ try {
+ // System.out.println( method.getResponseBodyAsStream());
+
+ reponse.setBuffer(method.getResponseBody());
+ reponse.setBuffer(method.getResponseBody());
+ } catch (IOException e1) {
+ TRACE.error(e1.getMessage());
+ e1.printStackTrace();
+ }
+ }
+ method.releaseConnection();
+ return reponse;
+ }
+
+ /**
+ * @param url
+ * @param data
+ * @return
+ */
+ public WgetResponseFile readFile(String url, NameValuePair[] data) {
+
+ WgetResponseFile reponse = new WgetResponseFile();
+
+ HttpMethod method = new GetMethod(url);
+ method.setQueryString(data);
+
+ int statusCode = 0;
+ try {
+ statusCode = client.executeMethod(method);
+ } catch (HttpException e) {
+ TRACE.error(e.getMessage()); // e.printStackTrace();
+ } catch (IOException e) {
+ TRACE.error(e.getMessage()); // e.printStackTrace();
+ }
+ reponse.setStatusCode(statusCode);
+ if (statusCode != HttpStatus.SC_OK) {
+ reponse.setBuffer(new String("Method failed: " + method.getStatusLine()).getBytes());
+ } else {
+ FileOutputStream out = null;
+ try {
+ // recherche du type de reponse
+ Header h = method.getResponseHeader("Content-Disposition");
+
+ // verifie que le type est un fichier
+ if (h == null) {
+ TRACE.error("not a file download");
+ reponse.setStatusCode(Wget.FAIL);
+ } else {
+ // recherche du nom de fichier
+ HeaderElement he[] = h.getElements(); // leture des
+ HeaderElement heo = he[0];
+ NameValuePair nameValuePair = heo.getParameterByName("filename");
+ String filename = nameValuePair.getValue();
+ // ouverture d'un flux de sortie sur le nom de fichier
+ reponse.setFileName(filename); // enregistrement dans la reponse
+ out = new FileOutputStream(filename);
+ }
+ // recuperation des donn�es
+ InputStream in = method.getResponseBodyAsStream();
+ byte[] input = new byte[200];
+ int nb = 0;
+ while ((nb = in.read(input)) != -1) {
+ out.write(input, 0, nb);
+ }
+ // fermeture des flux
+ out.close();
+ in.close();
+ // reponse.setBuffer( method.getResponseBody());
+
+ } catch (IOException e1) {
+ TRACE.error(e1.getMessage());
+ // e1.printStackTrace();
+ }
+ }
+ method.releaseConnection();
+ return reponse;
+ }
+
+ void setProxi(String proxi, int port) {
+ client.getHostConfiguration().setProxy(proxi, port);
+ }
+
+ void setLogin(String login, String password) {
+ client
+ .getState()
+ .setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(login, password));
+
+ // HttpState state = new HttpState();
+ // state.setProxyCredentials(null, null,
+ // new UsernamePasswordCredentials(login, password));
+ // client.setState(state);
+ }
+}
diff --git a/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrack/WgetResponse.java b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrack/WgetResponse.java
new file mode 100644
index 0000000000000000000000000000000000000000..6889db9d527e31cb5469a83f6628cff5880d889e
--- /dev/null
+++ b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrack/WgetResponse.java
@@ -0,0 +1,53 @@
+package org.avmdti.josast.spacetrack;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import org.josast.debug.TRACE;
+
+/**
+ * Description :
+ *
+ *
Projet : JOSAST
+ *
+ * @author XTOPHE
+ * @version 1.0
+ *
Source Update
+ * Version : date : name : comments
+ * V1 : 4 mai 2005 : C. Mercier : create file
+ *
+ */
+public class WgetResponse {
+
+ private int StatusCode;
+ private byte[] buffer;
+
+ /** @return Returns the statusCode. */
+ public int getStatusCode() {
+ return StatusCode;
+ }
+ /** @param statusCode The statusCode to set. */
+ public void setStatusCode(int statusCode) {
+ StatusCode = statusCode;
+ }
+ /** @return Returns the buffer. */
+ public byte[] getBuffer() {
+ return buffer;
+ }
+ /** @param buffer The buffer to set. */
+ public void setBuffer(byte[] buffer) {
+ this.buffer = buffer;
+ }
+
+ public int writeFile(String OutputFilename) {
+ try {
+ FileOutputStream out = new FileOutputStream(OutputFilename);
+ out.write(buffer, 0, buffer.length);
+ out.close();
+ } catch (IOException e) {
+ TRACE.error("Impossible de d�compresser " + OutputFilename + ".");
+ return -1;
+ }
+ return 0;
+ }
+}
diff --git a/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrack/WgetResponseFile.java b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrack/WgetResponseFile.java
new file mode 100644
index 0000000000000000000000000000000000000000..8f90ae30932e479f436c70e79f6027d363a798ca
--- /dev/null
+++ b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrack/WgetResponseFile.java
@@ -0,0 +1,41 @@
+package org.avmdti.josast.spacetrack;
+
+/**
+ * @author Propri�taire
+ *
TODO To change the template for this generated type comment go to Window - Preferences -
+ * Java - Code Style - Code Templates
+ */
+public class WgetResponseFile {
+ private int statusCode;
+ /** @param statusCode */
+ public void setStatusCode(int StatusCode) {
+ statusCode = StatusCode;
+ }
+
+ private byte[] buffer;
+ /** @param bytes */
+ public void setBuffer(byte[] bytes) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /** @return Returns the buffer. */
+ public byte[] getBuffer() {
+ return buffer;
+ }
+ /** @return Returns the statusCode. */
+ public int getStatusCode() {
+ return statusCode;
+ }
+
+ private String fileName;
+ /** @return */
+ public String getFileName() {
+ // TODO Auto-generated method stub
+ return fileName;
+ }
+ /** @param fileName The fileName to set. */
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+}
diff --git a/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrack/ZipUtil.java b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrack/ZipUtil.java
new file mode 100644
index 0000000000000000000000000000000000000000..087fe16c426e4207c43179a837d29b785344c02f
--- /dev/null
+++ b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrack/ZipUtil.java
@@ -0,0 +1,95 @@
+package org.avmdti.josast.spacetrack;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Enumeration;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+/**
+ * Description :
+ *
+ *
Projet : JOSAST
+ *
+ * JOSAST : Java Open Source Amateur Satellite Toolbox
+ * The aim of the project is to create a set of tools for amateur satellite purpose. All this tools
+ * could be used together to create specific software. JOSAST project is managed by AVMDTI (
+ * http://www.avmdti.org )
+ * This software is an open source software. Please read the JOSAST licence
+ * ( http://www.avmdti.org )
+ *
+ *
for more information contact josast@avmdti.org
+ *
+ * @author mercier
+ * @version 1.0
+ *
Source Update
+ * Version : date : name : comments
+ * V1 : 5 mai 2005 : C. Mercier : create file
+ *
+ */
+public class ZipUtil {
+
+ /**
+ * @param filename
+ * @param outputfile
+ */
+ public static void extractOneFile(String filename, String outputfile) {
+ ZipFile zf = null;
+ File f = new File(filename);
+ String path = f.getAbsolutePath();
+ try {
+ zf = new ZipFile((path));
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ Enumeration> en = zf.entries();
+ ZipEntry entrie = (ZipEntry) en.nextElement();
+ InputStream in = null;
+ FileOutputStream out = null;
+ try {
+ in = zf.getInputStream(entrie);
+ } catch (IOException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+ try {
+ out = new FileOutputStream(filename);
+ } catch (FileNotFoundException e2) {
+ // TODO Auto-generated catch block
+ e2.printStackTrace();
+ }
+ byte[] input = new byte[200];
+ int nb = 0;
+ try {
+ while ((nb = in.read(input)) != -1) {
+ out.write(input, 0, nb);
+ }
+ } catch (IOException e3) {
+ // TODO Auto-generated catch block
+ e3.printStackTrace();
+ }
+ try {
+ // fermeture des flux
+ out.close();
+ } catch (IOException e4) {
+ // TODO Auto-generated catch block
+ e4.printStackTrace();
+ }
+ try {
+ in.close();
+ // reponse.setBuffer( method.getResponseBody());
+ } catch (IOException e5) {
+ // TODO Auto-generated catch block
+ e5.printStackTrace();
+ }
+ }
+
+ public static void main(String[] args) {
+
+ ZipUtil.extractOneFile("schema_V11.zip", "geo.tle");
+ }
+}
diff --git a/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrack/spacetrack.java b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrack/spacetrack.java
new file mode 100644
index 0000000000000000000000000000000000000000..0888da8581840417655a9bcac27bef19f6462aa7
--- /dev/null
+++ b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrack/spacetrack.java
@@ -0,0 +1,112 @@
+package org.avmdti.josast.spacetrack;
+
+import org.apache.commons.httpclient.NameValuePair;
+
+/**
+ * Description : API to get information from SpaceTrack web site.
+ * To used it you should :
+ * - setup the network paramaters @see setHttpLogin
+ * - set the SpaceTrack login data @see login
+ * - send request @see query for a list of satellite or @see readFile to download a predifined file.
+ *
+ *
+ *
+ *
for more information contact josast@avmdti.org
+ *
+ * @author mercier
+ * @version 1.0
+ *
Source Update
+ * Version : date : name : comments
+ * V1 : 4 mai 2005 : C. Mercier : create file
+ *
+ */
+public class spacetrack {
+
+ Wget serveur = null;
+ private static final int FAIL = 0;
+ private static final int OK = 1;
+
+ public spacetrack() {
+ serveur = new Wget();
+ }
+
+ public void setHttpLogin(String login, String password, String proxi, int port) {
+ if (proxi != null) {
+ serveur.setProxi(proxi, port);
+ }
+
+ if (login != null) {
+ serveur.setLogin(login, password);
+ }
+ }
+ /**
+ * Login to the http://www.space-track.org web site
+ *
+ * @param name the account name
+ * @param password the password associated to the account name
+ * @return connection status
+ */
+ public int login(String name, String password) {
+
+ NameValuePair[] data = {
+ new NameValuePair("_submitted", "1"),
+ new NameValuePair("username", name),
+ new NameValuePair("password", password)
+ };
+
+ WgetResponse page = serveur.read("http://www.space-track.org/perl/login.pl", data);
+
+ return page.getStatusCode();
+ }
+
+ /**
+ * request a list of TLE base on Nasa ID.
+ *
+ * @param satelliteId array of satellite ID
+ * @return return a response from the web site
+ */
+ public WgetResponse query(int[] satelliteId) {
+ String ids;
+
+ if (satelliteId.length < 1) return (null);
+ ids = Integer.toString(satelliteId[0]);
+
+ for (int i = 1; i < satelliteId.length; i++) {
+ ids = ids + " " + satelliteId[i];
+ }
+ NameValuePair[] data = {
+ new NameValuePair("_submitted", "1"),
+ new NameValuePair("ids", ids),
+ new NameValuePair("timeframe", "latest"),
+ new NameValuePair("common_name", "yes"),
+ new NameValuePair("sort", "catnum"),
+ new NameValuePair("descending", "yes"),
+ new NameValuePair("ascii", "yes")
+ };
+ WgetResponse page = serveur.read("http://www.space-track.org/perl/id_query.pl", data);
+
+ return page;
+ }
+
+ /**
+ * request a predefined file existing in Spacetrak web Site.
+ * the FileId is define with the class FileID
+ *
+ * @param id file identifier from the FileID class
+ * @param outputfile Output file with the associated TLE
+ * @return return a status about the request.
+ * @see FileID
+ */
+ public int readFile(int id, String outputfile) {
+ NameValuePair[] data = {new NameValuePair("ID", new Integer(id).toString())};
+ // lecture du fichier sur le serveur.
+ WgetResponseFile wrf = serveur.readFile("http://www.space-track.org/perl/dl.pl", data);
+ if (wrf.getStatusCode() < 0) {
+ return spacetrack.FAIL;
+ }
+ String filename = wrf.getFileName();
+ if (ToolsGUzip.uncompress(filename, outputfile) != 0) return spacetrack.FAIL;
+
+ return spacetrack.OK;
+ }
+}
diff --git a/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/control/Process.java b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/control/Process.java
new file mode 100644
index 0000000000000000000000000000000000000000..0b9ecd2e0820a2bf897775d2c71e48f5799cf711
--- /dev/null
+++ b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/control/Process.java
@@ -0,0 +1,136 @@
+/*
+ * Process.java
+ *
+ * Created on 4 mai 2005, 23:21
+ */
+
+package org.avmdti.josast.spacetrackdownload.control;
+
+import java.io.File;
+import java.util.AbstractList;
+import java.util.Iterator;
+
+import org.avmdti.josast.spacetrack.FileID;
+import org.avmdti.josast.spacetrack.WgetResponse;
+import org.avmdti.josast.spacetrack.spacetrack;
+import org.avmdti.josast.spacetrackdownload.model.Configuration;
+import org.josast.debug.TRACE;
+
+/** @author mercier */
+public class Process {
+ spacetrack sp = null;
+
+ /** Creates a new instance of Process */
+ public Process() {}
+
+ private void login() {
+ Configuration config = Configuration.getInstance();
+ // process lengthdownload
+ sp = new spacetrack();
+
+ // tentative de login
+ int loginStatus = sp.login(config.getLogin(), config.getPassword());
+ TRACE.log("login status " + loginStatus);
+ // recuperation des fichier
+
+ }
+
+ public void executeSelectionList() {
+
+ TRACE.log("Try to login", this.getClass());
+ login();
+ Configuration config = Configuration.getInstance();
+ TRACE.log("detect output directory ", this.getClass());
+ File dir = new File(config.getLocalDirectory());
+ if (dir.exists()) {
+ if (!dir.isDirectory()) TRACE.error("Le r�pertoire LOCAL n'est pas un r�pertoire !!!");
+ } else {
+
+ dir.mkdir();
+ }
+ TRACE.log("get list of NASA ID ", this.getClass());
+ int[] NasaIdList = config.getNasaIDList();
+
+ WgetResponse response = sp.query(NasaIdList);
+ response.writeFile(config.getFileNameNasaIdList());
+ TRACE.log("update Nasa ID ended ", this.getClass());
+ }
+
+ public void execute() {
+
+ // recuperattion de la configuration
+ Configuration config = Configuration.getInstance();
+ TRACE.log("detect output directory ", this.getClass());
+ File dir = new File(config.getLocalDirectory());
+ if (dir.exists()) {
+ if (!dir.isDirectory()) TRACE.error("Le r�pertoire LOCAL n'est pas un r�pertoire !!!");
+ } else {
+
+ dir.mkdir();
+ }
+
+ login();
+
+ AbstractList al = config.getFileList();
+ TRACE.log("Login to SpaceTrack ", this.getClass());
+ Iterator it = al.iterator();
+ while (it.hasNext()) {
+
+ Integer val = (Integer) it.next();
+ TRACE.log("get File " + val, this.getClass());
+
+ switch (val.intValue()) {
+ case FileID.AMATEUR:
+ sp.readFile(
+ FileID.AMATEUR, config.getLocalDirectory() + "/" + config.getAmsateFileName());
+ break;
+ case FileID.GEOSYNCHONOUS:
+ sp.readFile(
+ FileID.GEOSYNCHONOUS,
+ config.getLocalDirectory() + "/" + config.getGeosynchronosFileName());
+ break;
+ case FileID.NAVIGATION:
+ sp.readFile(
+ FileID.NAVIGATION, config.getLocalDirectory() + "/" + config.getNavigationFileName());
+ break;
+ case FileID.WEATHER:
+ sp.readFile(
+ FileID.WEATHER, config.getLocalDirectory() + "/" + config.getWeatherFileName());
+ break;
+ case FileID.IRIDIUM:
+ sp.readFile(
+ FileID.IRIDIUM, config.getLocalDirectory() + "/" + config.getIridiumFileName());
+ break;
+ case FileID.ORBCOM:
+ sp.readFile(FileID.ORBCOM, config.getLocalDirectory() + "/" + config.getOrbcomFileName());
+ break;
+ case FileID.GLOBALSTAR:
+ sp.readFile(
+ FileID.GLOBALSTAR, config.getLocalDirectory() + "/" + config.getGlobalStarFileName());
+ break;
+ case FileID.INTELSAT:
+ sp.readFile(
+ FileID.INTELSAT, config.getLocalDirectory() + "/" + config.getIntelsatFileName());
+ break;
+ case FileID.INMARSAT:
+ sp.readFile(
+ FileID.INMARSAT, config.getLocalDirectory() + "/" + config.getInmarsatFileName());
+ break;
+
+ case FileID.VISIBLE:
+ sp.readFile(
+ FileID.VISIBLE, config.getLocalDirectory() + "/" + config.getVisibleFileName());
+ break;
+ case FileID.SPECIALINTEREST:
+ sp.readFile(
+ FileID.SPECIALINTEREST,
+ config.getLocalDirectory() + "/" + config.getSpecialInterestFileName());
+ break;
+
+ default:
+ System.err.println("file not found");
+ }
+ TRACE.log("All files updated", this.getClass());
+ }
+ }
+}
diff --git a/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/JDialogLocalFile.form b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/JDialogLocalFile.form
new file mode 100644
index 0000000000000000000000000000000000000000..85de337a187d2e5205eabfd59e642d3736708529
--- /dev/null
+++ b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/JDialogLocalFile.form
@@ -0,0 +1,97 @@
+
+
+
diff --git a/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/JDialogLocalFile.java b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/JDialogLocalFile.java
new file mode 100644
index 0000000000000000000000000000000000000000..91a27b0738ea2a1675d18c03fe34629e22920495
--- /dev/null
+++ b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/JDialogLocalFile.java
@@ -0,0 +1,159 @@
+/*
+ * JDialogLocalFile.java
+ *
+ * Created on 4 mai 2005, 20:07
+ */
+
+package org.avmdti.josast.spacetrackdownload.ihm;
+
+import org.avmdti.josast.spacetrackdownload.model.Configuration;
+
+/** @author XTOPHE */
+public class JDialogLocalFile extends javax.swing.JDialog {
+ /** A return status code - returned if Cancel button has been pressed */
+ public static final int RET_CANCEL = 0;
+ /** A return status code - returned if OK button has been pressed */
+ public static final int RET_OK = 1;
+
+ /** Creates new form JDialogLocalFile */
+ public JDialogLocalFile(java.awt.Frame parent, boolean modal) {
+ super(parent, modal);
+ initComponents();
+ }
+
+ /** @return the return status of this dialog - one of RET_OK or RET_CANCEL */
+ public int getReturnStatus() {
+ return returnStatus;
+ }
+
+ /**
+ * This method is called from within the constructor to initialize the form. WARNING: Do NOT
+ * modify this code. The content of this method is always regenerated by the Form Editor.
+ */
+ private void initComponents() { // GEN-BEGIN:initComponents
+ buttonPanel = new javax.swing.JPanel();
+ okButton = new javax.swing.JButton();
+ cancelButton = new javax.swing.JButton();
+ jPanel1 = new javax.swing.JPanel();
+ jLabel1 = new javax.swing.JLabel();
+ jPanel3 = new javax.swing.JPanel();
+ jPanel2 = new javax.swing.JPanel();
+ jLabelRepertoire = new javax.swing.JLabel();
+ jTextFieldStoragedirectory = new javax.swing.JTextField();
+ jButtonFilechooser = new javax.swing.JButton();
+
+ addWindowListener(
+ new java.awt.event.WindowAdapter() {
+ public void windowClosing(java.awt.event.WindowEvent evt) {
+ closeDialog(evt);
+ }
+ });
+
+ buttonPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));
+
+ okButton.setText("OK");
+ okButton.addActionListener(
+ new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ okButtonActionPerformed(evt);
+ }
+ });
+
+ buttonPanel.add(okButton);
+
+ cancelButton.setText("Cancel");
+ cancelButton.addActionListener(
+ new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ cancelButtonActionPerformed(evt);
+ }
+ });
+
+ buttonPanel.add(cancelButton);
+
+ getContentPane().add(buttonPanel, java.awt.BorderLayout.SOUTH);
+
+ jLabel1.setText("Local File Configuration");
+ jPanel1.add(jLabel1);
+
+ getContentPane().add(jPanel1, java.awt.BorderLayout.NORTH);
+
+ jPanel2.setLayout(new java.awt.GridLayout(0, 3));
+
+ jLabelRepertoire.setText("Storage Directory");
+ jPanel2.add(jLabelRepertoire);
+
+ jTextFieldStoragedirectory.setText("./TLE");
+ jPanel2.add(jTextFieldStoragedirectory);
+
+ jButtonFilechooser.setText("...");
+ jButtonFilechooser.addActionListener(
+ new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ jButtonFilechooserActionPerformed(evt);
+ }
+ });
+
+ jPanel2.add(jButtonFilechooser);
+
+ jPanel3.add(jPanel2);
+
+ getContentPane().add(jPanel3, java.awt.BorderLayout.CENTER);
+
+ pack();
+ } // GEN-END:initComponents
+
+ private void jButtonFilechooserActionPerformed(
+ java.awt.event.ActionEvent evt) { // GEN-FIRST:event_jButtonFilechooserActionPerformed
+ // TODO add your handling code here:
+ } // GEN-LAST:event_jButtonFilechooserActionPerformed
+
+ private void okButtonActionPerformed(
+ java.awt.event.ActionEvent evt) { // GEN-FIRST:event_okButtonActionPerformed
+ Configuration config = Configuration.getInstance();
+ config.setLocalDirectory(jTextFieldStoragedirectory.getText());
+
+ doClose(RET_OK);
+ } // GEN-LAST:event_okButtonActionPerformed
+
+ private void cancelButtonActionPerformed(
+ java.awt.event.ActionEvent evt) { // GEN-FIRST:event_cancelButtonActionPerformed
+ doClose(RET_CANCEL);
+ } // GEN-LAST:event_cancelButtonActionPerformed
+
+ /** Closes the dialog */
+ private void closeDialog(java.awt.event.WindowEvent evt) { // GEN-FIRST:event_closeDialog
+ doClose(RET_CANCEL);
+ } // GEN-LAST:event_closeDialog
+
+ private void doClose(int retStatus) {
+ returnStatus = retStatus;
+ setVisible(false);
+ dispose();
+ }
+
+ /** @param args the command line arguments */
+ public static void main(String args[]) {
+ java.awt.EventQueue.invokeLater(
+ new Runnable() {
+ public void run() {
+ new JDialogLocalFile(new javax.swing.JFrame(), true).setVisible(true);
+ }
+ });
+ }
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JPanel buttonPanel;
+ private javax.swing.JButton cancelButton;
+ private javax.swing.JButton jButtonFilechooser;
+ private javax.swing.JLabel jLabel1;
+ private javax.swing.JLabel jLabelRepertoire;
+ private javax.swing.JPanel jPanel1;
+ private javax.swing.JPanel jPanel2;
+ private javax.swing.JPanel jPanel3;
+ private javax.swing.JTextField jTextFieldStoragedirectory;
+ private javax.swing.JButton okButton;
+ // End of variables declaration//GEN-END:variables
+
+ private int returnStatus = RET_CANCEL;
+}
diff --git a/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/MMI.form b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/MMI.form
new file mode 100644
index 0000000000000000000000000000000000000000..0c81b6bf29c6c15e9ed61caad5834373734bba2e
--- /dev/null
+++ b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/MMI.form
@@ -0,0 +1,429 @@
+
+
+
diff --git a/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/MMI.java b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/MMI.java
new file mode 100644
index 0000000000000000000000000000000000000000..43b9171fe1c64f46df3dc3ce4e0d6fae63a780ac
--- /dev/null
+++ b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/MMI.java
@@ -0,0 +1,553 @@
+/*
+ * MMI.java
+ *
+ * Created on 4 mai 2005, 15:57
+ */
+
+package org.avmdti.josast.spacetrackdownload.ihm;
+
+import org.avmdti.josast.spacetrack.*;
+import org.avmdti.josast.spacetrackdownload.control.Process;
+import org.avmdti.josast.spacetrackdownload.model.Configuration;
+import org.josast.debug.TRACE;
+import org.avmdti.josast.spacetrackdownload.ihm.*;
+/** @author mercier */
+public class MMI extends javax.swing.JFrame {
+
+ /** Creates new form MMI */
+ public MMI() {
+ initComponents();
+ TRACE.setJTextArea(jTextAreaConsole);
+ }
+
+ /**
+ * This method is called from within the constructor to initialize the form. WARNING: Do NOT
+ * modify this code. The content of this method is always regenerated by the Form Editor.
+ */
+ private void initComponents() { // GEN-BEGIN:initComponents
+ jTabbedPaneSelectSatellite = new javax.swing.JTabbedPane();
+ JFileDownload = new javax.swing.JPanel();
+ jPanel1 = new javax.swing.JPanel();
+ jLabel1 = new javax.swing.JLabel();
+ jLabel2 = new javax.swing.JLabel();
+ jGeoSynchronous = new javax.swing.JCheckBox();
+ jTextFieldGeosynchronous = new javax.swing.JTextField();
+ jNavigation = new javax.swing.JCheckBox();
+ jTextFieldNavigation = new javax.swing.JTextField();
+ jWeather = new javax.swing.JCheckBox();
+ jTextFieldWeather = new javax.swing.JTextField();
+ jIridium = new javax.swing.JCheckBox();
+ jTextFieldIridium = new javax.swing.JTextField();
+ jOrbcom = new javax.swing.JCheckBox();
+ jTextFieldOrbcom = new javax.swing.JTextField();
+ jGlobalstar = new javax.swing.JCheckBox();
+ jTextFieldGlobaStar = new javax.swing.JTextField();
+ jIntelsat = new javax.swing.JCheckBox();
+ jTextFieldIntelsat = new javax.swing.JTextField();
+ jInmarsat = new javax.swing.JCheckBox();
+ jTextFieldInmarsat = new javax.swing.JTextField();
+ jAmateur = new javax.swing.JCheckBox();
+ jTextFieldAmsateur = new javax.swing.JTextField();
+ jSpecialInterest = new javax.swing.JCheckBox();
+ jTextFieldSpecialInterest = new javax.swing.JTextField();
+ jCheckBoxVisible = new javax.swing.JCheckBox();
+ jTextFieldVisible = new javax.swing.JTextField();
+ jPanel3 = new javax.swing.JPanel();
+ jToggleButtonEdit = new javax.swing.JToggleButton();
+ jBoutonDonwload = new javax.swing.JButton();
+ jPanel2 = new javax.swing.JPanel();
+ jPanel4 = new javax.swing.JPanel();
+ jButtonDownload = new javax.swing.JButton();
+ jPanel5 = new javax.swing.JPanel();
+ jPanel7 = new javax.swing.JPanel();
+ jLabel4 = new javax.swing.JLabel();
+ jTextFieldOuptputfile = new javax.swing.JTextField();
+ jPanel9 = new javax.swing.JPanel();
+ jPanel8 = new javax.swing.JPanel();
+ jLabel3 = new javax.swing.JLabel();
+ jScrollPane1 = new javax.swing.JScrollPane();
+ jTextAreaSelectSat = new javax.swing.JTextArea();
+ jPanel6 = new javax.swing.JPanel();
+ jScrollPane2 = new javax.swing.JScrollPane();
+ jTextAreaConsole = new javax.swing.JTextArea();
+ menuBar = new javax.swing.JMenuBar();
+ fileMenu = new javax.swing.JMenu();
+ openMenuItem = new javax.swing.JMenuItem();
+ saveMenuItem = new javax.swing.JMenuItem();
+ saveAsMenuItem = new javax.swing.JMenuItem();
+ exitMenuItem = new javax.swing.JMenuItem();
+ ConfigurationJmenu = new javax.swing.JMenu();
+ jMenuItemLogin = new javax.swing.JMenuItem();
+ JMenuItemLocalFile = new javax.swing.JMenuItem();
+ helpMenu = new javax.swing.JMenu();
+ aboutMenuItem = new javax.swing.JMenuItem();
+
+ setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
+ JFileDownload.setLayout(new java.awt.BorderLayout());
+
+ jPanel1.setLayout(new java.awt.GridLayout(0, 2));
+
+ jLabel1.setText("Catalog File");
+ jPanel1.add(jLabel1);
+
+ jLabel2.setText("Local FileName");
+ jPanel1.add(jLabel2);
+
+ jGeoSynchronous.setText("Geosynchronous");
+ jGeoSynchronous.addActionListener(
+ new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ jGeoSynchronousActionPerformed(evt);
+ }
+ });
+
+ jPanel1.add(jGeoSynchronous);
+
+ jTextFieldGeosynchronous.setEditable(false);
+ jTextFieldGeosynchronous.setText("geosynchronous.tle");
+ jTextFieldGeosynchronous.setMinimumSize(new java.awt.Dimension(6, 10));
+ jTextFieldGeosynchronous.setPreferredSize(new java.awt.Dimension(57, 12));
+ jPanel1.add(jTextFieldGeosynchronous);
+
+ jNavigation.setText("Navigation");
+ jNavigation.addActionListener(
+ new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ jNavigationActionPerformed(evt);
+ }
+ });
+
+ jPanel1.add(jNavigation);
+
+ jTextFieldNavigation.setEditable(false);
+ jTextFieldNavigation.setText("navigation.tle");
+ jPanel1.add(jTextFieldNavigation);
+
+ jWeather.setText("Weather");
+ jPanel1.add(jWeather);
+
+ jTextFieldWeather.setEditable(false);
+ jTextFieldWeather.setText("weather.tle");
+ jPanel1.add(jTextFieldWeather);
+
+ jIridium.setText("Iridium");
+ jPanel1.add(jIridium);
+
+ jTextFieldIridium.setEditable(false);
+ jTextFieldIridium.setText("iridium.tle");
+ jPanel1.add(jTextFieldIridium);
+
+ jOrbcom.setText("Orbcom");
+ jPanel1.add(jOrbcom);
+
+ jTextFieldOrbcom.setEditable(false);
+ jTextFieldOrbcom.setText("orbcom.tle");
+ jPanel1.add(jTextFieldOrbcom);
+
+ jGlobalstar.setText("Globalstar");
+ jPanel1.add(jGlobalstar);
+
+ jTextFieldGlobaStar.setEditable(false);
+ jTextFieldGlobaStar.setText("globalstar.tle");
+ jPanel1.add(jTextFieldGlobaStar);
+
+ jIntelsat.setText("Intelsat");
+ jPanel1.add(jIntelsat);
+
+ jTextFieldIntelsat.setEditable(false);
+ jTextFieldIntelsat.setText("intelsat.tle");
+ jPanel1.add(jTextFieldIntelsat);
+
+ jInmarsat.setText("Inmarsat");
+ jPanel1.add(jInmarsat);
+
+ jTextFieldInmarsat.setEditable(false);
+ jTextFieldInmarsat.setText("inmarsat.tle");
+ jPanel1.add(jTextFieldInmarsat);
+
+ jAmateur.setText("Amateur");
+ jPanel1.add(jAmateur);
+
+ jTextFieldAmsateur.setEditable(false);
+ jTextFieldAmsateur.setText("amateur.tle");
+ jPanel1.add(jTextFieldAmsateur);
+
+ jSpecialInterest.setText("Special Interest");
+ jPanel1.add(jSpecialInterest);
+
+ jTextFieldSpecialInterest.setEditable(false);
+ jTextFieldSpecialInterest.setText("specialinterest.tle");
+ jPanel1.add(jTextFieldSpecialInterest);
+
+ jCheckBoxVisible.setText("Visible");
+ jPanel1.add(jCheckBoxVisible);
+
+ jTextFieldVisible.setEditable(false);
+ jTextFieldVisible.setText("visible.tle");
+ jPanel1.add(jTextFieldVisible);
+
+ JFileDownload.add(jPanel1, java.awt.BorderLayout.CENTER);
+
+ jToggleButtonEdit.setText("Edit");
+ jToggleButtonEdit.addActionListener(
+ new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ jToggleButtonEditActionPerformed(evt);
+ }
+ });
+
+ jPanel3.add(jToggleButtonEdit);
+
+ jBoutonDonwload.setText("Download");
+ jBoutonDonwload.addActionListener(
+ new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ jBoutonDonwloadActionPerformed(evt);
+ }
+ });
+
+ jPanel3.add(jBoutonDonwload);
+
+ JFileDownload.add(jPanel3, java.awt.BorderLayout.SOUTH);
+
+ jTabbedPaneSelectSatellite.addTab("File Download", JFileDownload);
+
+ jPanel2.setLayout(new java.awt.BorderLayout());
+
+ jButtonDownload.setText("Download");
+ jButtonDownload.addActionListener(
+ new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ jButtonDownloadActionPerformed(evt);
+ }
+ });
+
+ jPanel4.add(jButtonDownload);
+
+ jPanel2.add(jPanel4, java.awt.BorderLayout.SOUTH);
+
+ jPanel5.setLayout(new java.awt.BorderLayout());
+
+ jLabel4.setText("Output document");
+ jPanel7.add(jLabel4);
+
+ jTextFieldOuptputfile.setText("Mykeplerienlementfile.tle");
+ jTextFieldOuptputfile.addActionListener(
+ new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ jTextFieldOuptputfileActionPerformed(evt);
+ }
+ });
+
+ jPanel7.add(jTextFieldOuptputfile);
+
+ jPanel7.add(jPanel9);
+
+ jPanel5.add(jPanel7, java.awt.BorderLayout.SOUTH);
+
+ jLabel3.setText("Satellite List");
+ jPanel8.add(jLabel3);
+
+ jTextAreaSelectSat.setText("Not Implemented for\n this version \n");
+ jTextAreaSelectSat.setToolTipText(
+ "Write on this Text fileld the list of your NASA ID satellite you wish to retreive.");
+ jTextAreaSelectSat.setMinimumSize(new java.awt.Dimension(200, 180));
+ jTextAreaSelectSat.setPreferredSize(new java.awt.Dimension(200, 180));
+ jScrollPane1.setViewportView(jTextAreaSelectSat);
+
+ jPanel8.add(jScrollPane1);
+
+ jPanel5.add(jPanel8, java.awt.BorderLayout.EAST);
+
+ jPanel2.add(jPanel5, java.awt.BorderLayout.CENTER);
+
+ jTabbedPaneSelectSatellite.addTab("Satellite list", jPanel2);
+
+ jPanel6.setLayout(new java.awt.GridLayout(1, 0));
+
+ jScrollPane2.setViewportView(jTextAreaConsole);
+
+ jPanel6.add(jScrollPane2);
+
+ jTabbedPaneSelectSatellite.addTab("Console", jPanel6);
+
+ getContentPane().add(jTabbedPaneSelectSatellite, java.awt.BorderLayout.CENTER);
+
+ fileMenu.setText("File");
+ openMenuItem.setText("Open");
+ fileMenu.add(openMenuItem);
+
+ saveMenuItem.setText("Save");
+ fileMenu.add(saveMenuItem);
+
+ saveAsMenuItem.setText("Save As ...");
+ fileMenu.add(saveAsMenuItem);
+
+ exitMenuItem.setText("Exit");
+ exitMenuItem.addActionListener(
+ new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ exitMenuItemActionPerformed(evt);
+ }
+ });
+
+ fileMenu.add(exitMenuItem);
+
+ menuBar.add(fileMenu);
+
+ ConfigurationJmenu.setText("Configuration");
+ jMenuItemLogin.setText("Login");
+ jMenuItemLogin.addActionListener(
+ new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ jMenuItemLoginActionPerformed(evt);
+ }
+ });
+
+ ConfigurationJmenu.add(jMenuItemLogin);
+
+ JMenuItemLocalFile.setText("LocalFile");
+ JMenuItemLocalFile.addActionListener(
+ new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ JMenuItemLocalFileActionPerformed(evt);
+ }
+ });
+
+ ConfigurationJmenu.add(JMenuItemLocalFile);
+
+ menuBar.add(ConfigurationJmenu);
+
+ helpMenu.setText("Help");
+ aboutMenuItem.setText("About");
+ aboutMenuItem.addActionListener(
+ new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ aboutMenuItemActionPerformed(evt);
+ }
+ });
+
+ helpMenu.add(aboutMenuItem);
+
+ menuBar.add(helpMenu);
+
+ setJMenuBar(menuBar);
+
+ pack();
+ } // GEN-END:initComponents
+
+ private void jButtonDownloadActionPerformed(
+ java.awt.event.ActionEvent evt) { // GEN-FIRST:event_jButtonDownloadActionPerformed
+ // r�cup�ration de la liste des sats
+ String selection = jTextAreaSelectSat.getText();
+ // remplace les caract�res sp�ciaux
+ selection.replace('\n', ' ');
+ selection.replace('\t', ' ');
+ // d�compose le texte en list de num�ro
+ String selectionList[] = selection.split(" ");
+ // pour chaque donn�e, traduction en entier
+ int[] selectionNasaIdList = new int[selectionList.length];
+
+ for (int i = 0; i < selectionList.length; i++) {
+ try {
+
+ selectionNasaIdList[i] = Integer.parseInt(selectionList[i]);
+ } catch (java.lang.Exception ex) {
+ TRACE.error(ex.getMessage());
+ }
+ }
+
+ Configuration config = Configuration.getInstance();
+ config.setNasaIDList(selectionNasaIdList);
+ if (config.getLogin() == null || config.getPassword() == null) {
+ jDialogLogin jdl = new jDialogLogin(this, true);
+ jdl.setVisible(true);
+ }
+ // identifie le fichier de sortie
+ config.setFileNameNasaIdList(jTextFieldOuptputfile.getText());
+ // cr�e le process
+ Process pr = new Process();
+ // execute
+ pr.executeSelectionList();
+ } // GEN-LAST:event_jButtonDownloadActionPerformed
+
+ private void jTextFieldOuptputfileActionPerformed(
+ java.awt.event.ActionEvent evt) { // GEN-FIRST:event_jTextFieldOuptputfileActionPerformed
+ // TODO add your handling code here:
+ } // GEN-LAST:event_jTextFieldOuptputfileActionPerformed
+
+ private void aboutMenuItemActionPerformed(
+ java.awt.event.ActionEvent evt) { // GEN-FIRST:event_aboutMenuItemActionPerformed
+ NewOkCancelInfo jdl = new NewOkCancelInfo(this, true);
+ jdl.setVisible(true);
+ } // GEN-LAST:event_aboutMenuItemActionPerformed
+
+ private void JMenuItemLocalFileActionPerformed(
+ java.awt.event.ActionEvent evt) { // GEN-FIRST:event_JMenuItemLocalFileActionPerformed
+ JDialogLocalFile jdl = new JDialogLocalFile(this, true);
+ jdl.setVisible(true);
+ } // GEN-LAST:event_JMenuItemLocalFileActionPerformed
+
+ private void jMenuItemLoginActionPerformed(
+ java.awt.event.ActionEvent evt) { // GEN-FIRST:event_jMenuItemLoginActionPerformed
+ jDialogLogin jdl = new jDialogLogin(this, true);
+ jdl.setVisible(true);
+ } // GEN-LAST:event_jMenuItemLoginActionPerformed
+
+ private void jToggleButtonEditActionPerformed(
+ java.awt.event.ActionEvent evt) { // GEN-FIRST:event_jToggleButtonEditActionPerformed
+ if (jToggleButtonEdit.isSelected()) {
+ jTextFieldAmsateur.setEditable(true);
+ jTextFieldGeosynchronous.setEditable(true);
+ jTextFieldGlobaStar.setEditable(true);
+ jTextFieldInmarsat.setEditable(true);
+ jTextFieldIntelsat.setEditable(true);
+ jTextFieldIridium.setEditable(true);
+ jTextFieldNavigation.setEditable(true);
+ jTextFieldOrbcom.setEditable(true);
+ jTextFieldSpecialInterest.setEditable(true);
+ jTextFieldWeather.setEditable(true);
+ jTextFieldVisible.setEditable(true);
+ } else {
+ jTextFieldAmsateur.setEditable(false);
+ jTextFieldGeosynchronous.setEditable(false);
+ jTextFieldGlobaStar.setEditable(false);
+ jTextFieldInmarsat.setEditable(false);
+ jTextFieldIntelsat.setEditable(false);
+ jTextFieldIridium.setEditable(false);
+ jTextFieldNavigation.setEditable(false);
+ jTextFieldOrbcom.setEditable(false);
+ jTextFieldSpecialInterest.setEditable(false);
+ jTextFieldWeather.setEditable(false);
+ jTextFieldVisible.setEditable(false);
+ Configuration config = Configuration.getInstance();
+ config.setAmsateFileName(jTextFieldAmsateur.getText());
+ config.setGeosynchronosFileName(jTextFieldGeosynchronous.getText());
+ config.setGlobalStarFileName(jTextFieldGlobaStar.getText());
+ config.setInmarsatFileName(jTextFieldInmarsat.getText());
+ config.setIntelsatFileName(jTextFieldIntelsat.getText());
+ config.setIridiumFileName(jTextFieldIridium.getText());
+ config.setNavigationFileName(jTextFieldNavigation.getText());
+ config.setOrbcomFileName(jTextFieldOrbcom.getText());
+ config.setSpecialInterestFileName(jTextFieldSpecialInterest.getText());
+ config.setWeatherFileName(jTextFieldWeather.getText());
+ config.setVisibleFileName(jTextFieldVisible.getText());
+ }
+ } // GEN-LAST:event_jToggleButtonEditActionPerformed
+
+ private void jBoutonDonwloadActionPerformed(
+ java.awt.event.ActionEvent evt) { // GEN-FIRST:event_jBoutonDonwloadActionPerformed
+
+ Configuration config = Configuration.getInstance();
+ if (jGeoSynchronous.isSelected()) config.addFile(FileID.GEOSYNCHONOUS);
+ if (jNavigation.isSelected()) config.addFile(FileID.NAVIGATION);
+ if (jWeather.isSelected()) config.addFile(FileID.WEATHER);
+ if (jIridium.isSelected()) config.addFile(FileID.IRIDIUM);
+ if (jOrbcom.isSelected()) config.addFile(FileID.ORBCOM);
+ if (jGlobalstar.isSelected()) config.addFile(FileID.GLOBALSTAR);
+ if (jIntelsat.isSelected()) config.addFile(FileID.INTELSAT);
+ if (jInmarsat.isSelected()) config.addFile(FileID.INMARSAT);
+ if (jAmateur.isSelected()) config.addFile(FileID.AMATEUR);
+ if (jSpecialInterest.isSelected()) config.addFile(FileID.SPECIALINTEREST);
+ if (jCheckBoxVisible.isSelected()) config.addFile(FileID.VISIBLE);
+ if (config.getLogin() == null || config.getPassword() == null) {
+ jDialogLogin jdl = new jDialogLogin(this, true);
+ jdl.setVisible(true);
+ if (jdl.RET_OK == jdl.getReturnStatus()) {
+ Process pr = new Process();
+ pr.execute();
+ } else TRACE.log("login is not valid, please retry");
+ }
+ } // GEN-LAST:event_jBoutonDonwloadActionPerformed
+
+ private void jNavigationActionPerformed(
+ java.awt.event.ActionEvent evt) { // GEN-FIRST:event_jNavigationActionPerformed
+ // TODO add your handling code here:
+ } // GEN-LAST:event_jNavigationActionPerformed
+
+ private void jGeoSynchronousActionPerformed(
+ java.awt.event.ActionEvent evt) { // GEN-FIRST:event_jGeoSynchronousActionPerformed
+ // TODO add your handling code here:
+ } // GEN-LAST:event_jGeoSynchronousActionPerformed
+
+ private void exitMenuItemActionPerformed(
+ java.awt.event.ActionEvent evt) { // GEN-FIRST:event_exitMenuItemActionPerformed
+ Configuration.getInstance().save();
+ System.exit(0);
+ } // GEN-LAST:event_exitMenuItemActionPerformed
+
+ /** @param args the command line arguments */
+ public static void main(String args[]) {
+ java.awt.EventQueue.invokeLater(
+ new Runnable() {
+ public void run() {
+
+ MMI mmi = new MMI();
+ org.avmdti.josast.spacetrackdownload.model.Configuration config =
+ org.avmdti.josast.spacetrackdownload.model.Configuration.getInstance();
+
+ mmi.setVisible(true);
+ }
+ });
+ }
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JMenu ConfigurationJmenu;
+ private javax.swing.JPanel JFileDownload;
+ private javax.swing.JMenuItem JMenuItemLocalFile;
+ private javax.swing.JMenuItem aboutMenuItem;
+ private javax.swing.JMenuItem exitMenuItem;
+ private javax.swing.JMenu fileMenu;
+ private javax.swing.JMenu helpMenu;
+ private javax.swing.JCheckBox jAmateur;
+ private javax.swing.JButton jBoutonDonwload;
+ private javax.swing.JButton jButtonDownload;
+ private javax.swing.JCheckBox jCheckBoxVisible;
+ private javax.swing.JCheckBox jGeoSynchronous;
+ private javax.swing.JCheckBox jGlobalstar;
+ private javax.swing.JCheckBox jInmarsat;
+ private javax.swing.JCheckBox jIntelsat;
+ private javax.swing.JCheckBox jIridium;
+ private javax.swing.JLabel jLabel1;
+ private javax.swing.JLabel jLabel2;
+ private javax.swing.JLabel jLabel3;
+ private javax.swing.JLabel jLabel4;
+ private javax.swing.JMenuItem jMenuItemLogin;
+ private javax.swing.JCheckBox jNavigation;
+ private javax.swing.JCheckBox jOrbcom;
+ private javax.swing.JPanel jPanel1;
+ private javax.swing.JPanel jPanel2;
+ private javax.swing.JPanel jPanel3;
+ private javax.swing.JPanel jPanel4;
+ private javax.swing.JPanel jPanel5;
+ private javax.swing.JPanel jPanel6;
+ private javax.swing.JPanel jPanel7;
+ private javax.swing.JPanel jPanel8;
+ private javax.swing.JPanel jPanel9;
+ private javax.swing.JScrollPane jScrollPane1;
+ private javax.swing.JScrollPane jScrollPane2;
+ private javax.swing.JCheckBox jSpecialInterest;
+ private javax.swing.JTabbedPane jTabbedPaneSelectSatellite;
+ private static javax.swing.JTextArea jTextAreaConsole;
+ private javax.swing.JTextArea jTextAreaSelectSat;
+ private javax.swing.JTextField jTextFieldAmsateur;
+ private javax.swing.JTextField jTextFieldGeosynchronous;
+ private javax.swing.JTextField jTextFieldGlobaStar;
+ private javax.swing.JTextField jTextFieldInmarsat;
+ private javax.swing.JTextField jTextFieldIntelsat;
+ private javax.swing.JTextField jTextFieldIridium;
+ private javax.swing.JTextField jTextFieldNavigation;
+ private javax.swing.JTextField jTextFieldOrbcom;
+ private javax.swing.JTextField jTextFieldOuptputfile;
+ private javax.swing.JTextField jTextFieldSpecialInterest;
+ private javax.swing.JTextField jTextFieldVisible;
+ private javax.swing.JTextField jTextFieldWeather;
+ private javax.swing.JToggleButton jToggleButtonEdit;
+ private javax.swing.JCheckBox jWeather;
+ private javax.swing.JMenuBar menuBar;
+ private javax.swing.JMenuItem openMenuItem;
+ private javax.swing.JMenuItem saveAsMenuItem;
+ private javax.swing.JMenuItem saveMenuItem;
+ // End of variables declaration//GEN-END:variables
+
+}
diff --git a/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/NewOkCancelInfo.form b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/NewOkCancelInfo.form
new file mode 100644
index 0000000000000000000000000000000000000000..8a4b4241fc7ea200c6a347bad70e8f43ab98d4e4
--- /dev/null
+++ b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/NewOkCancelInfo.form
@@ -0,0 +1,78 @@
+
+
+
diff --git a/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/NewOkCancelInfo.java b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/NewOkCancelInfo.java
new file mode 100644
index 0000000000000000000000000000000000000000..5edd65d9543b9bf9c21cc7d73bc9b99226a3c103
--- /dev/null
+++ b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/NewOkCancelInfo.java
@@ -0,0 +1,115 @@
+/*
+ * NewOkCancelInfo.java
+ *
+ * Created on 21 novembre 2005, 15:19
+ */
+
+package org.avmdti.josast.spacetrackdownload.ihm;
+
+/** @author mercier */
+public class NewOkCancelInfo extends javax.swing.JDialog {
+ /** A return status code - returned if Cancel button has been pressed */
+ public static final int RET_CANCEL = 0;
+ /** A return status code - returned if OK button has been pressed */
+ public static final int RET_OK = 1;
+
+ /** Creates new form NewOkCancelInfo */
+ public NewOkCancelInfo(java.awt.Frame parent, boolean modal) {
+ super(parent, modal);
+ initComponents();
+ }
+
+ /** @return the return status of this dialog - one of RET_OK or RET_CANCEL */
+ public int getReturnStatus() {
+ return returnStatus;
+ }
+
+ /**
+ * This method is called from within the constructor to initialize the form. WARNING: Do NOT
+ * modify this code. The content of this method is always regenerated by the Form Editor.
+ */
+ private void initComponents() { // GEN-BEGIN:initComponents
+ buttonPanel = new javax.swing.JPanel();
+ okButton = new javax.swing.JButton();
+ jPanel1 = new javax.swing.JPanel();
+ jPanel2 = new javax.swing.JPanel();
+ jTextPane1 = new javax.swing.JTextPane();
+ jPanel3 = new javax.swing.JPanel();
+ jLabel1 = new javax.swing.JLabel();
+
+ addWindowListener(
+ new java.awt.event.WindowAdapter() {
+ public void windowClosing(java.awt.event.WindowEvent evt) {
+ closeDialog(evt);
+ }
+ });
+
+ buttonPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));
+
+ okButton.setText("OK");
+ okButton.addActionListener(
+ new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ okButtonActionPerformed(evt);
+ }
+ });
+
+ buttonPanel.add(okButton);
+
+ getContentPane().add(buttonPanel, java.awt.BorderLayout.SOUTH);
+
+ jPanel1.setLayout(new java.awt.BorderLayout());
+
+ jTextPane1.setText("Cette boite de dialogue permet de donner une aide sur le logiciel");
+ jPanel2.add(jTextPane1);
+
+ jPanel1.add(jPanel2, java.awt.BorderLayout.CENTER);
+
+ jLabel1.setText("SPACE TRACK DOWNLOAD ");
+ jPanel3.add(jLabel1);
+
+ jPanel1.add(jPanel3, java.awt.BorderLayout.NORTH);
+
+ getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
+
+ pack();
+ } // GEN-END:initComponents
+
+ private void okButtonActionPerformed(
+ java.awt.event.ActionEvent evt) { // GEN-FIRST:event_okButtonActionPerformed
+ doClose(RET_OK);
+ } // GEN-LAST:event_okButtonActionPerformed
+
+ /** Closes the dialog */
+ private void closeDialog(java.awt.event.WindowEvent evt) { // GEN-FIRST:event_closeDialog
+ doClose(RET_CANCEL);
+ } // GEN-LAST:event_closeDialog
+
+ private void doClose(int retStatus) {
+ returnStatus = retStatus;
+ setVisible(false);
+ dispose();
+ }
+
+ /** @param args the command line arguments */
+ public static void main(String args[]) {
+ java.awt.EventQueue.invokeLater(
+ new Runnable() {
+ public void run() {
+ new NewOkCancelInfo(new javax.swing.JFrame(), true).setVisible(true);
+ }
+ });
+ }
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JPanel buttonPanel;
+ private javax.swing.JLabel jLabel1;
+ private javax.swing.JPanel jPanel1;
+ private javax.swing.JPanel jPanel2;
+ private javax.swing.JPanel jPanel3;
+ private javax.swing.JTextPane jTextPane1;
+ private javax.swing.JButton okButton;
+ // End of variables declaration//GEN-END:variables
+
+ private int returnStatus = RET_CANCEL;
+}
diff --git a/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/SpaceTrackCommandLine.java b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/SpaceTrackCommandLine.java
new file mode 100644
index 0000000000000000000000000000000000000000..3c68b8665c648360e84391f0b0b885f8b4e61f92
--- /dev/null
+++ b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/SpaceTrackCommandLine.java
@@ -0,0 +1,25 @@
+/** */
+package org.avmdti.josast.spacetrackdownload.ihm;
+
+import org.avmdti.josast.spacetrackdownload.control.Process;
+import org.avmdti.josast.spacetrackdownload.model.Configuration;
+
+/** @author cmercier */
+public class SpaceTrackCommandLine {
+
+ /** */
+ public SpaceTrackCommandLine() {
+ Configuration conf = Configuration.getInstance();
+ System.out.println(conf);
+ Process pr = new Process();
+ System.out.println(conf.getLogin());
+
+ pr.execute();
+ }
+
+ /** @param args */
+ public static void main(String[] args) {
+ // SpaceTrackCommandLine SP = new SpaceTrackCommandLine();
+
+ }
+}
diff --git a/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/jDialogLogin.form b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/jDialogLogin.form
new file mode 100644
index 0000000000000000000000000000000000000000..2474489d6f946430ee8ae32125659c8bec83f5aa
--- /dev/null
+++ b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/jDialogLogin.form
@@ -0,0 +1,105 @@
+
+
+
diff --git a/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/jDialogLogin.java b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/jDialogLogin.java
new file mode 100644
index 0000000000000000000000000000000000000000..18633a65dd37d7daad0121c9ba117996674af079
--- /dev/null
+++ b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/ihm/jDialogLogin.java
@@ -0,0 +1,191 @@
+/*
+ * NewOkCancelDialog.java
+ *
+ * Created on 4 mai 2005, 16:47
+ */
+
+package org.avmdti.josast.spacetrackdownload.ihm;
+
+import org.avmdti.josast.spacetrackdownload.model.Configuration;
+import org.josast.debug.TRACE;
+
+/** @author mercier */
+public class jDialogLogin extends javax.swing.JDialog {
+ /** A return status code - returned if Cancel button has been pressed */
+ public static final int RET_CANCEL = 0;
+ /** A return status code - returned if OK button has been pressed */
+ public static final int RET_OK = 1;
+
+ /** Creates new form NewOkCancelDialog */
+ public jDialogLogin(java.awt.Frame parent, boolean modal) {
+ super(parent, modal);
+ initComponents();
+ }
+
+ /** @return the return status of this dialog - one of RET_OK or RET_CANCEL */
+ public int getReturnStatus() {
+ return returnStatus;
+ }
+
+ /**
+ * This method is called from within the constructor to initialize the form. WARNING: Do NOT
+ * modify this code. The content of this method is always regenerated by the Form Editor.
+ */
+ private void initComponents() { // GEN-BEGIN:initComponents
+ borderLayout1 = new java.awt.BorderLayout();
+ buttonPanel = new javax.swing.JPanel();
+ okButton = new javax.swing.JButton();
+ cancelButton = new javax.swing.JButton();
+ jPanel2 = new javax.swing.JPanel();
+ jLabel3 = new javax.swing.JLabel();
+ jPanel3 = new javax.swing.JPanel();
+ jPanel1 = new javax.swing.JPanel();
+ jLabel1 = new javax.swing.JLabel();
+ jTextFieldLogin = new javax.swing.JTextField();
+ Password = new javax.swing.JLabel();
+ jTextFieldPassword = new javax.swing.JTextField();
+ jCheckBoxSaveLoginAndPassword = new javax.swing.JCheckBox();
+
+ addWindowListener(
+ new java.awt.event.WindowAdapter() {
+ public void windowClosing(java.awt.event.WindowEvent evt) {
+ closeDialog(evt);
+ }
+ });
+
+ buttonPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));
+
+ okButton.setText("OK");
+ okButton.addActionListener(
+ new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ okButtonActionPerformed(evt);
+ }
+ });
+
+ buttonPanel.add(okButton);
+
+ cancelButton.setText("Cancel");
+ cancelButton.addActionListener(
+ new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ cancelButtonActionPerformed(evt);
+ }
+ });
+
+ buttonPanel.add(cancelButton);
+
+ getContentPane().add(buttonPanel, java.awt.BorderLayout.SOUTH);
+
+ jLabel3.setText("Enter your SpaceTrack Login and password");
+ jPanel2.add(jLabel3);
+
+ getContentPane().add(jPanel2, java.awt.BorderLayout.NORTH);
+
+ jPanel1.setLayout(new java.awt.GridLayout(0, 2));
+
+ jLabel1.setText("Login");
+ jPanel1.add(jLabel1);
+
+ jPanel1.add(jTextFieldLogin);
+
+ Password.setText("Password");
+ jPanel1.add(Password);
+
+ jTextFieldPassword.addActionListener(
+ new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ jTextFieldPasswordActionPerformed(evt);
+ }
+ });
+
+ jPanel1.add(jTextFieldPassword);
+
+ jCheckBoxSaveLoginAndPassword.setText("Save in configuration file ");
+ jPanel1.add(jCheckBoxSaveLoginAndPassword);
+
+ jPanel3.add(jPanel1);
+
+ getContentPane().add(jPanel3, java.awt.BorderLayout.CENTER);
+
+ pack();
+ } // GEN-END:initComponents
+
+ private void jTextFieldPasswordActionPerformed(
+ java.awt.event.ActionEvent evt) { // GEN-FIRST:event_jTextFieldPasswordActionPerformed
+ // TODO add your handling code here:
+ } // GEN-LAST:event_jTextFieldPasswordActionPerformed
+
+ private void okButtonActionPerformed(
+ java.awt.event.ActionEvent evt) { // GEN-FIRST:event_okButtonActionPerformed
+
+ int error = 0;
+ String login = jTextFieldLogin.getText();
+ String password = jTextFieldPassword.getText();
+ System.out.println(password + " " + password.length());
+ System.err.println(login.length());
+ if (login.length() == 0) {
+ TRACE.error("login field is empty ");
+ error++;
+ }
+
+ if (password.length() == 0) {
+ TRACE.error("password field is empty ");
+ error++;
+ }
+ if (error == 0) {
+ Configuration config = Configuration.getInstance();
+ config.setLogin(login);
+ config.setPassword(password);
+ config.setSaveLogin(jCheckBoxSaveLoginAndPassword.isSelected());
+ config.save();
+ doClose(RET_OK);
+ } else {
+ doClose(RET_CANCEL);
+ }
+ } // GEN-LAST:event_okButtonActionPerformed
+
+ private void cancelButtonActionPerformed(
+ java.awt.event.ActionEvent evt) { // GEN-FIRST:event_cancelButtonActionPerformed
+ doClose(RET_CANCEL);
+ } // GEN-LAST:event_cancelButtonActionPerformed
+
+ /** Closes the dialog */
+ private void closeDialog(java.awt.event.WindowEvent evt) { // GEN-FIRST:event_closeDialog
+ doClose(RET_CANCEL);
+ } // GEN-LAST:event_closeDialog
+
+ private void doClose(int retStatus) {
+ returnStatus = retStatus;
+ setVisible(false);
+ dispose();
+ }
+
+ /** @param args the command line arguments */
+ public static void main(String args[]) {
+ java.awt.EventQueue.invokeLater(
+ new Runnable() {
+ public void run() {
+ new jDialogLogin(new javax.swing.JFrame(), true).setVisible(true);
+ }
+ });
+ }
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JLabel Password;
+ private java.awt.BorderLayout borderLayout1;
+ private javax.swing.JPanel buttonPanel;
+ private javax.swing.JButton cancelButton;
+ private javax.swing.JCheckBox jCheckBoxSaveLoginAndPassword;
+ private javax.swing.JLabel jLabel1;
+ private javax.swing.JLabel jLabel3;
+ private javax.swing.JPanel jPanel1;
+ private javax.swing.JPanel jPanel2;
+ private javax.swing.JPanel jPanel3;
+ private javax.swing.JTextField jTextFieldLogin;
+ private javax.swing.JTextField jTextFieldPassword;
+ private javax.swing.JButton okButton;
+ // End of variables declaration//GEN-END:variables
+
+ private int returnStatus = RET_CANCEL;
+}
diff --git a/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/model/Configuration.java b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/model/Configuration.java
new file mode 100644
index 0000000000000000000000000000000000000000..c18fce45dc9dc142e5c6bd3bc6f7d066ef209895
--- /dev/null
+++ b/ApplicationSpaceTrackDownload/src/main/java/org/avmdti/josast/spacetrackdownload/model/Configuration.java
@@ -0,0 +1,208 @@
+/*
+ * Configuration.java
+ *
+ * Created on 4 mai 2005, 21:48
+ */
+
+package org.avmdti.josast.spacetrackdownload.model;
+
+import org.josast.config.databinding.AbstractDataBinding;
+import org.josast.debug.TRACE;
+
+/** @author mercier */
+public class Configuration extends AbstractDataBinding {
+
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ private static Configuration instance = null;
+ private static int bonusage = 0;
+ /** Creates a new instance of Configuration */
+ public Configuration() {
+ if (bonusage == 0) {
+ TRACE.error("dot not use constructor please");
+ }
+ }
+
+ public static Configuration getInstance() {
+ if (instance == null) {
+ bonusage = 1;
+ instance = new Configuration();
+ if (instance.isExist()) {
+ // load the object
+ instance = (Configuration) instance.load();
+ }
+ }
+ return instance;
+ }
+
+ private String login = null;
+
+ public void setLogin(String login) {
+ this.login = login;
+ }
+
+ public String getLogin() {
+ return login;
+ }
+
+ private String password = null;
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ boolean saveLogin = false;
+
+ public void setSaveLogin(boolean selected) {
+ saveLogin = selected;
+ }
+
+ String localDirectory = "./TLE";
+
+ public void setLocalDirectory(String localDirectory) {
+ this.localDirectory = localDirectory;
+ }
+
+ public String getLocalDirectory() {
+ return localDirectory;
+ }
+
+ private java.util.AbstractList arrayFile = new java.util.ArrayList();
+ private int[] arrayNasaID = new int[0];
+
+ public void addFile(int fileid) {
+ arrayFile.add(new Integer(fileid));
+ }
+
+ public int[] getNasaIDList() {
+ return arrayNasaID;
+ }
+
+ public void setNasaIDList(int[] InputNasaIdList) {
+ arrayNasaID = InputNasaIdList;
+ }
+
+ public java.util.AbstractList getFileList() {
+ return arrayFile;
+ }
+
+ String AmsateFileName = "amateur.tle";
+ String GeosynchronosFileName = "geosynchronous.tle";
+ String GlobalStarFileName = "globalstar.tle";
+ String InmarsatFileName = "inmarsat.tle";
+ String IntelsatFileName = "intelsat.tle";
+ String IridiumFileName = "iridium.tle";
+ String NavigationFileName = "navigation.tle";
+ String OrbcomFileName = "orbcom.tle";
+ String SpecialInterestFileName = "specialinterest.tle";
+ String WeatherFileName = "weather.tle";
+
+ public void setAmsateFileName(String filename) {
+ AmsateFileName = filename;
+ };
+
+ public String getAmsateFileName() {
+ return AmsateFileName;
+ }
+
+ public void setGeosynchronosFileName(String filename) {
+ GeosynchronosFileName = filename;
+ };
+
+ public void setGlobalStarFileName(String filename) {
+ GlobalStarFileName = filename;
+ };
+
+ public void setInmarsatFileName(String filename) {
+ InmarsatFileName = filename;
+ };
+
+ public void setIntelsatFileName(String filename) {
+ IntelsatFileName = filename;
+ };
+
+ public void setIridiumFileName(String filename) {
+ IridiumFileName = filename;
+ };
+
+ public void setNavigationFileName(String filename) {
+ NavigationFileName = filename;
+ };
+
+ public void setOrbcomFileName(String filename) {
+ OrbcomFileName = filename;
+ };
+
+ public void setSpecialInterestFileName(String filename) {
+ SpecialInterestFileName = filename;
+ };
+
+ public void setWeatherFileName(String filename) {
+ WeatherFileName = filename;
+ };
+
+ String visibleFileName;
+
+ public void setVisibleFileName(String filename) {
+ visibleFileName = filename;
+ }
+ /** @return Returns the geosynchronosFileName. */
+ public String getGeosynchronosFileName() {
+ return GeosynchronosFileName;
+ }
+ /** @return Returns the globalStarFileName. */
+ public String getGlobalStarFileName() {
+ return GlobalStarFileName;
+ }
+ /** @return Returns the inmarsatFileName. */
+ public String getInmarsatFileName() {
+ return InmarsatFileName;
+ }
+ /** @return Returns the intelsatFileName. */
+ public String getIntelsatFileName() {
+ return IntelsatFileName;
+ }
+ /** @return Returns the iridiumFileName. */
+ public String getIridiumFileName() {
+ return IridiumFileName;
+ }
+ /** @return Returns the navigationFileName. */
+ public String getNavigationFileName() {
+ return NavigationFileName;
+ }
+ /** @return Returns the orbcomFileName. */
+ public String getOrbcomFileName() {
+ return OrbcomFileName;
+ }
+ /** @return Returns the saveLogin. */
+ public boolean isSaveLogin() {
+ return saveLogin;
+ }
+ /** @return Returns the specialInterestFileName. */
+ public String getSpecialInterestFileName() {
+ return SpecialInterestFileName;
+ }
+ /** @return Returns the visibleFileName. */
+ public String getVisibleFileName() {
+ return visibleFileName;
+ }
+ /** @return Returns the weatherFileName. */
+ public String getWeatherFileName() {
+ return WeatherFileName;
+ }
+
+ String FileNameNasaIdList;
+
+ public String getFileNameNasaIdList() {
+ return FileNameNasaIdList;
+ }
+
+ public void setFileNameNasaIdList(String Filename) {
+ FileNameNasaIdList = Filename;
+ }
+}
diff --git a/ApplicationSpaceTrackDownload/src/test/java/org/avmdti/josast/test.java b/ApplicationSpaceTrackDownload/src/test/java/org/avmdti/josast/test.java
new file mode 100644
index 0000000000000000000000000000000000000000..ce3d5c0d666302246a83c0d17530c1231e71c99d
--- /dev/null
+++ b/ApplicationSpaceTrackDownload/src/test/java/org/avmdti/josast/test.java
@@ -0,0 +1,36 @@
+/*
+ * Created on 3 mai 2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.avmdti.josast;
+
+import org.avmdti.josast.spacetrack.WgetResponse;
+import org.avmdti.josast.spacetrack.spacetrack;
+
+/**
+ * @author Christophe
+ * TODO To change the template for this generated type comment go to Window - Preferences -
+ * Java - Code Style - Code Templates
+ */
+public class test {
+
+ public static void main(String[] args) {
+
+ spacetrack sp = new spacetrack();
+
+ int status = sp.login("mercier", "Lntlcsg7");
+ System.out.println("status login =" + status);
+ int[] liste = {28649, 286448};
+ WgetResponse wgr = sp.query(liste);
+ System.out.println(new String(wgr.getBuffer()));
+ sp.readFile(4, "geo.tle");
+
+ // Wget serveur = new Wget();
+ // NameValuePair[] data = {
+ // new NameValuePair("guess", "50")
+ // };
+
+ }
+}
diff --git a/ApplicationSpinoControlCenter/pom.xml b/ApplicationSpinoControlCenter/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0e40b10418e983c24ae9d012b55e1d5062b8b722
--- /dev/null
+++ b/ApplicationSpinoControlCenter/pom.xml
@@ -0,0 +1,123 @@
+
+ 4.0.0
+
+
+ org.josast
+ JOSAST-parent
+ 0.0.2
+
+
+
+ ApplicationSpinoControlCenter
+
+
+
+ UTF-8
+ 11
+ 11
+
+
+
+ com.google.code.gson
+ gson
+ 2.10
+
+
+
+
+ org.josast
+ ModuleUtil
+ 0.0.2
+
+
+
+ org.josast
+ ModuleDriverSerial
+ 0.0.2
+
+
+ org.josast
+ ModuleSpino
+ 0.0.2
+
+
+ org.openjfx
+ javafx-controls
+ 16
+
+
+ org.openjfx
+ javafx-fxml
+ 16
+
+
+ org.openjfx
+ javafx-swing
+ 16
+
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.0
+
+ 11
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+
+
+ make-assembly
+ package
+
+ single
+
+
+
+
+
+
+
+ org.josast.ApplicationSpinoControlCenter.App
+
+
+
+
+ jar-with-dependencies
+
+
+
+
+
+
+ org.openjfx
+ javafx-maven-plugin
+ 0.0.6
+
+
+
+
+ default-cli
+
+
+ org.josast.ApplicationSpinoControlCenter.App
+
+
+
+
+
+
+
diff --git a/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/App.java b/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/App.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ec2bdf99d98a089cdc2b8c1fc0d202250caa4a8
--- /dev/null
+++ b/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/App.java
@@ -0,0 +1,34 @@
+package org.josast.ApplicationSpinoControlCenter;
+
+import java.io.IOException;
+import javafx.application.Application;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.stage.Stage;
+
+/** JavaFX App */
+public class App extends Application {
+
+ private static Scene scene;
+
+ @Override
+ public void start(Stage stage) throws IOException {
+ scene = new Scene(loadFXML("spino"), 640, 480);
+ stage.setScene(scene);
+ stage.show();
+ }
+
+ static void setRoot(String fxml) throws IOException {
+ scene.setRoot(loadFXML(fxml));
+ }
+
+ private static Parent loadFXML(String fxml) throws IOException {
+ FXMLLoader fxmlLoader = new FXMLLoader(App.class.getResource(fxml + ".fxml"));
+ return fxmlLoader.load();
+ }
+
+ public static void main(String[] args) {
+ launch();
+ }
+}
diff --git a/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/CommandeTxt.java b/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/CommandeTxt.java
new file mode 100644
index 0000000000000000000000000000000000000000..27ad857065069aaa24145c957f82286fd1a79e68
--- /dev/null
+++ b/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/CommandeTxt.java
@@ -0,0 +1,59 @@
+package org.josast.ApplicationSpinoControlCenter;
+
+public class CommandeTxt {
+
+ private String commandeName;
+ private String optionName;
+ private String optionValue;
+ private int delayms = 1000;
+
+ public CommandeTxt(String commandeName, String optionName, String optionValue) {
+ super();
+ this.commandeName = commandeName;
+ this.optionName = optionName;
+ this.optionValue = optionValue;
+ }
+
+ public String getCommandeName() {
+ return commandeName;
+ }
+
+ public void setCommandeName(String commandeName) {
+ this.commandeName = commandeName;
+ }
+
+ public String getOptionName() {
+ return optionName;
+ }
+
+ public void setOptionName(String optionName) {
+ this.optionName = optionName;
+ }
+
+ public String getOptionValue() {
+ return optionValue;
+ }
+
+ public void setOptionValue(String optionValue) {
+ this.optionValue = optionValue;
+ }
+
+ @Override
+ public String toString() {
+ return "CommandeTxt [commandeName="
+ + commandeName
+ + ", optionName="
+ + optionName
+ + ", optionValue="
+ + optionValue
+ + "]";
+ }
+
+ public int getDelayms() {
+ return delayms;
+ }
+
+ public void setDelayms(int delayms) {
+ this.delayms = delayms;
+ }
+}
diff --git a/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/ManageCmdFile.java b/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/ManageCmdFile.java
new file mode 100644
index 0000000000000000000000000000000000000000..1331dab388ab8c9a6e3ecb5904999c2fa4848800
--- /dev/null
+++ b/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/ManageCmdFile.java
@@ -0,0 +1,70 @@
+package org.josast.ApplicationSpinoControlCenter;
+
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Writer;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.logging.Logger;
+
+/** This class manages the reading and writing of Spinon commands from/to a file. */
+public class ManageCmdFile {
+
+ private static Logger appLogger = Logger.getLogger("AmsatLogger");
+ private Collection extends CommandeTxt> spinoCmdList;
+
+ /**
+ * Returns a list of Spinon commands.
+ *
+ * @return a list of Spinon commands
+ */
+ public List getSpinoCmdList() {
+ return new ArrayList(spinoCmdList);
+ }
+
+ /**
+ * Writes a list of Spinon commands to a file.
+ *
+ * @param file the name of the file to write to
+ * @param spinoCmdList the list of Spinon commands to write
+ * @throws IOException if an I/O error occurs while writing the file
+ */
+ public void writeFile(String file, List spinoCmdList) throws IOException {
+ // create writer
+ Writer writer = new FileWriter(file, Charset.forName("utf-8"));
+
+ // convert Spinon command list to JSON and write to file
+ new Gson().toJson(spinoCmdList, writer);
+
+ // close writer
+ writer.close();
+ }
+
+ /**
+ * Reads a list of Spinon commands from a file.
+ *
+ * @param file the name of the file to read from
+ * @return a list of Spinon commands read from the file
+ * @throws IOException if an I/O error occurs while reading the file
+ */
+ public List readFile(String file) throws IOException {
+ List spinoCmdList;
+ // create reader
+ Reader reader = Files.newBufferedReader(Paths.get(file));
+
+ // convert JSON array to list of Spino commands
+ spinoCmdList = new Gson().fromJson(reader, new TypeToken>() {}.getType());
+
+ // close reader
+ reader.close();
+
+ return spinoCmdList;
+ }
+}
diff --git a/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/PrimaryController.java b/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/PrimaryController.java
new file mode 100644
index 0000000000000000000000000000000000000000..d2402d058d8a2d9f62adf2aabcafa5dd2a34c24f
--- /dev/null
+++ b/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/PrimaryController.java
@@ -0,0 +1,1024 @@
+package org.josast.ApplicationSpinoControlCenter;
+
+import com.fazecast.jSerialComm.SerialPort;
+
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingDeque;
+import java.util.logging.Logger;
+
+import javax.imageio.ImageIO;
+
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.embed.swing.SwingFXUtils;
+import javafx.event.ActionEvent;
+import javafx.fxml.FXML;
+import javafx.scene.Node;
+import javafx.scene.control.Button;
+import javafx.scene.control.ComboBox;
+import javafx.scene.control.TableColumn;
+import javafx.scene.control.TableView;
+import javafx.scene.control.TextArea;
+import javafx.scene.control.TextField;
+import javafx.scene.control.TreeItem;
+import javafx.scene.control.TreeTableColumn;
+import javafx.scene.control.TreeTableView;
+import javafx.scene.control.cell.PropertyValueFactory;
+import javafx.scene.control.cell.TreeItemPropertyValueFactory;
+import javafx.scene.image.Image;
+import javafx.scene.image.ImageView;
+import javafx.scene.input.MouseEvent;
+import javafx.scene.layout.Background;
+import javafx.scene.layout.BackgroundFill;
+import javafx.scene.paint.Color;
+import javafx.stage.FileChooser;
+import javafx.stage.Stage;
+
+import org.josast.ApplicationSpinoControlCenter.connection.ReceivedData;
+import org.josast.ApplicationSpinoControlCenter.connection.tcpConnection;
+import org.josast.digipeater.DigipeaterMessage;
+import org.josast.informationMessage.InformationMessage;
+import org.josast.mailbox.Mailboxes;
+import org.josast.mailbox.MailBoxInstance;
+import org.josast.mailbox.MessageInstance;
+import org.josast.spino.ax25.AX25header;
+import org.josast.spino.commande.Command;
+import org.josast.spino.commande.CommandOption;
+import org.josast.spino.commande.Commande;
+import org.josast.spino.commande.CommandeDigipeaterMessage;
+import org.josast.spino.commande.CommandeFactory;
+import org.josast.spino.commande.CommandeGeneric;
+import org.josast.spino.commande.CommandeMailBoxAddMessage;
+import org.josast.spino.commande.CommandeMailBoxAllMessage;
+import org.josast.spino.commande.CommandeMailboxGetLastMessage;
+import org.josast.spino.serial.SerialConfiguration;
+import org.josast.spino.serial.SerialPortDriver;
+
+import org.josast.telemetry.DataTelemetry;
+import org.josast.telemetry.api.InterfaceAnalyseData;
+import org.josast.telemetry.api.TelemetryDataInterface;
+
+public class PrimaryController {
+
+ private static Logger appLogger = Logger.getLogger("AmsatLogger");
+
+ SerialPortDriver sp = new SerialPortDriver();
+ SerialPort serp = null;
+
+ @FXML private Button BtClear1;
+
+ @FXML private Button BtSave1;
+
+ @FXML private ComboBox ComboCommandList;
+
+ @FXML private ComboBox ComboOptionList;
+
+ @FXML private TextArea TestValueParameterValue1;
+
+ @FXML private Button btLoad1;
+
+ @FXML private Button buttonAddCmdList;
+
+ @FXML private Button buttonClearDigipeaterMessage;
+
+ @FXML private Button buttonSendCommandList;
+
+ @FXML private TextField TextFieldMessage;
+
+ @FXML private TextField TextFileldCallsign;
+
+ @FXML private Button ButtonSendMessage;
+
+ // @FXML private TableView> tableViewCommande1;
+ //
+ // @FXML private TableColumn, ?> tbcommandeName1;
+ //
+ // @FXML private TableColumn, ?> tboptionName1;
+ //
+ // @FXML private TableColumn, ?> tboptionValue1;
+
+ // Vector listCommande = new Vector();
+
+ @FXML private ComboBox ComBoMode;
+
+ @FXML private Button buttonConnect;
+ @FXML private Button buttonDisconect;
+ @FXML private Button buttonAddCmd;
+
+ @FXML private ComboBox ComboCommand;
+
+ @FXML private ComboBox ComboOption;
+
+ @FXML private TextArea TestValueParameterValue;
+
+ @FXML private Button buttonSend;
+ @FXML private ImageView ImageViewAMSAT;
+
+ @FXML private TableView tableViewCommande;
+ @FXML private TableColumn tbcommandeName;
+ @FXML private TableColumn tboptionName;
+ @FXML private TableColumn tboptionValue;
+
+ @FXML private TableView tableViewResult;
+
+ @FXML private TableColumn tbViewResultName;
+
+ @FXML private TableColumn tbViewResultValue;
+
+ @FXML private TextArea TextValueParameterValueList;
+ @FXML private TextArea TextAreaMessage;
+
+ @FXML private Button BtClear;
+
+ @FXML private Button BtSave;
+
+ @FXML private Button btLoad;
+
+ @FXML private Button btresult;
+
+ @FXML private Button buttonSendMailboxMessage;
+
+ @FXML private TextField TextFieldMailboxMessage;
+
+ @FXML private Button buttonGetAllMessage;
+
+ @FXML private Button buttonGetLastMessage;
+
+ @FXML private Button ButtonGetAllMailbox;
+
+ @FXML private TextField TextMailboxCallsign;
+
+ @FXML private TextField TextfiledState;
+
+ @FXML private TextField TextFieldTypeData;
+
+ @FXML private TableView TableViewMessageInfo;
+ @FXML private TableColumn TableColumnIndexMessage;
+
+ @FXML private TableColumn TableColumnMessage;
+
+ @FXML private TableColumn tableCollumnDigipeaterCallsign;
+
+ @FXML private TableColumn tableCollumnDigipeaterDate;
+
+ @FXML private TableColumn tableCollumnDigipeaterMessage;
+
+ @FXML private TableView tableViewDigipeater;
+
+ @FXML private TreeTableColumn treeTabCollumnCallsign;
+
+ @FXML private TreeTableColumn treeTabCollumnMessage;
+
+ @FXML private TreeTableColumn treeTabCollumnNumber;
+
+ @FXML private TreeTableView treeTableViewMailbox;
+
+ // List informationMessageList = new ArrayList();
+ // ObservableList observableList =
+ // FXCollections.observableList(informationMessageList);
+
+ ObservableList observableDigipeaterMessage =
+ FXCollections.observableArrayList();
+
+ ObservableList observableListInfoMessage =
+ FXCollections.observableArrayList();
+
+ Stage stage;
+
+ ObservableList listCommande = FXCollections.observableArrayList();
+ public static final short SERIAL_PORT = 1;
+ public static final short SOCKET = 2;
+ public static final short KISS_MODEM = 3;
+ private String imgAmsat = "logoAmsat.png";
+
+ SpinoCommandHastable ScHt = new SpinoCommandHastable();
+
+ Hashtable htComamd = ScHt.getHtCommande();
+ Hashtable htOptionGetSet = ScHt.getHtOptionGetSet();
+ Hashtable htOptionState = ScHt.getHtOptionState();
+ Hashtable htmode = new Hashtable();
+
+ String source = "F4AKAG";
+ String destination = "SPINOD";
+ AX25header header =
+ new AX25header(destination.getBytes(), (byte) 15, source.getBytes(), (byte) 1);
+ String headerH = header.tohex();
+ CommandeFactory cmdf = new CommandeFactory();
+
+ private tcpConnection socket;
+
+ private BlockingQueue receivedFrame = new LinkedBlockingDeque();;
+
+ private TaskManageReceivedData taskMngtData;
+
+ public static final int DISPLAY_MODE_FULL = 1;
+ public static final int DISPLAY_MODE_OPTION_VISIBLE_ONLY = 2;
+ public static final int DISPLAY_MODE_VALUE_VISIBLE_ONLY = 3;
+ public static final int DISPLAY_MODE_EMPTY = 4;
+
+ void initTreetable() {
+
+ // Création des boîtes aux lettres et des messages
+ // BoiteAuxLettres boite1 = new BoiteAuxLettres("Boîte 1");
+ // boite1.ajouterMessage(new Message(1, "2023-05-19", "Message 1"));
+ // boite1.ajouterMessage(new Message(2, "2023-05-20", "Message 2"));
+ //
+ // BoiteAuxLettres boite2 = new BoiteAuxLettres("Boîte 2");
+ // boite2.ajouterMessage(new Message(1, "2023-05-19", "Message 1"));
+
+ treeTabCollumnCallsign.setCellValueFactory(new TreeItemPropertyValueFactory<>("callsign"));
+ treeTabCollumnNumber.setCellValueFactory(new TreeItemPropertyValueFactory<>("index"));
+ treeTabCollumnMessage.setCellValueFactory(new TreeItemPropertyValueFactory<>("message"));
+
+ // Création de l'arbre des boîtes aux lettres
+ // TreeItem racine = new TreeItem<>(new BoiteAuxLettres("Indicatif"));
+ // TreeItem boite1Node = new TreeItem<>(boite1);
+ // TreeItem boite2Node = new TreeItem<>(boite2);
+ // racine.getChildren().addAll(boite1Node, boite2Node);
+
+ // TreeItem racine = new TreeItem<>(new Message("RAcine", 2, "", ""));
+ // TreeItem boite1 = new TreeItem<>(new Message("XTOF", 2, "", ""));
+ // TreeItem boite1Node = new TreeItem<>(new Message(2, "2023-05-20", "Message 2"));
+ // TreeItem boite2Node = new TreeItem<>(new Message(3, "2023-05-20", "Message 3"));
+ // boite1.getChildren().addAll(boite1Node, boite2Node);
+ // racine.getChildren().add(boite1);
+ // // Ajout des messages aux boîtes aux lettres
+ // for (Message message : boite1.getMessages()) {
+ // boite1Node.getChildren().add(new TreeItem<>(message.toString()));
+ // }
+ // for (Message message : boite2.getMessages()) {
+ // boite2Node.getChildren().add(new TreeItem<>(message.toString()));
+ // }
+
+ // treeTableViewMailbox.setRoot(racine);
+ }
+
+ void commandConf(int mode) {
+ switch (mode) {
+ case DISPLAY_MODE_FULL:
+ ComboOption.getItems().clear();
+ ComboOption.setVisible(true);
+ ComboOption.setDisable(false);
+ ComboOptionList.getItems().clear();
+ ComboOptionList.setVisible(true);
+ ComboOptionList.setDisable(false);
+ TestValueParameterValue.clear();
+ TestValueParameterValue.setVisible(true);
+ TextValueParameterValueList.clear();
+ TextValueParameterValueList.setVisible(true);
+ break;
+
+ case DISPLAY_MODE_OPTION_VISIBLE_ONLY:
+ ComboOption.getItems().clear();
+ ComboOption.setVisible(true);
+ ComboOption.setDisable(false);
+ ComboOptionList.getItems().clear();
+ ComboOptionList.setVisible(true);
+ ComboOptionList.setDisable(false);
+ TestValueParameterValue.clear();
+ TestValueParameterValue.setVisible(false);
+ TextValueParameterValueList.clear();
+ TextValueParameterValueList.setVisible(false);
+ break;
+
+ case DISPLAY_MODE_VALUE_VISIBLE_ONLY:
+ ComboOption.getItems().clear();
+ ComboOption.setVisible(false);
+ ComboOption.setDisable(true);
+ ComboOptionList.getItems().clear();
+ ComboOptionList.setVisible(false);
+ ComboOptionList.setDisable(true);
+ TestValueParameterValue.clear();
+ TestValueParameterValue.setVisible(true);
+ TextValueParameterValueList.clear();
+ TextValueParameterValueList.setVisible(true);
+ break;
+
+ case DISPLAY_MODE_EMPTY:
+ ComboOption.getItems().clear();
+ ComboOption.setVisible(false);
+ ComboOption.setDisable(true);
+ ComboOptionList.getItems().clear();
+ ComboOptionList.setVisible(false);
+ ComboOptionList.setDisable(true);
+ TestValueParameterValue.clear();
+ TestValueParameterValue.setVisible(false);
+ TextValueParameterValueList.clear();
+ TextValueParameterValueList.setVisible(false);
+ break;
+ }
+ }
+
+ public void manageOption(String value) {
+
+ Command cmd = htComamd.get(value);
+
+ if (cmd.hasOption() && cmd.hasValue()) {
+ commandConf(DISPLAY_MODE_FULL);
+ } else if (cmd.hasOption()) {
+ commandConf(DISPLAY_MODE_OPTION_VISIBLE_ONLY);
+ List listValues = new ArrayList(htOptionGetSet.keySet());
+ ObservableList oli = FXCollections.observableList(listValues);
+ ComboOption.setItems(oli);
+
+ } else if (cmd.hasValue()) {
+ commandConf(DISPLAY_MODE_VALUE_VISIBLE_ONLY);
+ ComboOption.setValue(null);
+ } else {
+ commandConf(DISPLAY_MODE_EMPTY);
+ ComboOption.setValue(null);
+ }
+
+ if (cmd.hasOption()) {
+
+ ComboOption.getItems().clear();
+ // ArrayList listValues = new ArrayList(htComamd.;
+ Hashtable options = cmd.getOptions();
+ List listValues = new ArrayList(options.keySet());
+ ObservableList oli = FXCollections.observableList(listValues);
+ ComboOption.setItems(oli);
+ }
+ }
+
+ public void manageOptionList(String value) {
+
+ Command cmd = htComamd.get(value);
+
+ if (cmd.hasOption() && cmd.hasValue()) {
+ commandConf(DISPLAY_MODE_FULL);
+ } else if (cmd.hasOption()) {
+ commandConf(DISPLAY_MODE_OPTION_VISIBLE_ONLY);
+ List listValues = new ArrayList(htOptionGetSet.keySet());
+ ObservableList oli = FXCollections.observableList(listValues);
+ ComboOptionList.setItems(oli);
+
+ } else if (cmd.hasValue()) {
+ commandConf(DISPLAY_MODE_VALUE_VISIBLE_ONLY);
+ ComboOptionList.setValue(null);
+ } else {
+ commandConf(DISPLAY_MODE_EMPTY);
+ ComboOptionList.setValue(null);
+ }
+
+ if (cmd.hasOption()) {
+
+ ComboOptionList.getItems().clear();
+ // ArrayList listValues = new ArrayList(htComamd.;
+ Hashtable options = cmd.getOptions();
+ List listValues = new ArrayList(options.keySet());
+ ObservableList oli = FXCollections.observableList(listValues);
+ ComboOptionList.setItems(oli);
+ }
+ }
+
+ @FXML
+ public void initialize() {
+ System.out.println("second");
+ initHastable();
+
+ BufferedImage bufferedImage1 = null;
+
+ try {
+
+ bufferedImage1 = ImageIO.read(getClass().getResource(imgAmsat));
+
+ } catch (IOException e) {
+
+ appLogger.severe("Error loading Image resources");
+ appLogger.severe(e.toString());
+ }
+
+ Image imageamsat = SwingFXUtils.toFXImage(bufferedImage1, null);
+ ImageViewAMSAT.setImage(imageamsat);
+ tableViewCommande.setItems(listCommande);
+ tbcommandeName.setCellValueFactory(new PropertyValueFactory<>("commandeName"));
+ tboptionName.setCellValueFactory(new PropertyValueFactory<>("optionName"));
+ tboptionValue.setCellValueFactory(new PropertyValueFactory<>("optionValue"));
+
+ String source = "F4AKAG";
+ String destination = "SPINOD";
+
+ // Initialisation du Header AX25
+
+ tbViewResultName.setCellValueFactory(new PropertyValueFactory<>("dataName"));
+ tbViewResultValue.setCellValueFactory(new PropertyValueFactory<>("value"));
+
+ TableColumnIndexMessage.setCellValueFactory(new PropertyValueFactory<>("index"));
+ TableColumnMessage.setCellValueFactory(new PropertyValueFactory<>("message"));
+ TableViewMessageInfo.setItems(observableListInfoMessage);
+
+ tableViewDigipeater.setItems(this.observableDigipeaterMessage);
+ this.tableCollumnDigipeaterCallsign.setCellValueFactory(new PropertyValueFactory<>("callsign"));
+ this.tableCollumnDigipeaterDate.setCellValueFactory(new PropertyValueFactory<>("date"));
+ this.tableCollumnDigipeaterMessage.setCellValueFactory(new PropertyValueFactory<>("message"));
+
+ // observableDigipeaterMessage.add(new DigipeaterMessage("TEST", "Message de Test"));
+
+ AX25header header =
+ new AX25header(destination.getBytes(), (byte) 15, source.getBytes(), (byte) 1);
+ headerH = header.tohex();
+
+ taskMngtData = new TaskManageReceivedData(receivedFrame, this);
+ Thread backgroundThread = new Thread(taskMngtData);
+ backgroundThread.setDaemon(true);
+ backgroundThread.start();
+
+ for (int j = 0; j < 10; j++) {
+ observableListInfoMessage.add(j, new InformationMessage(j, ""));
+ }
+ initTreetable();
+ }
+
+ public PrimaryController() {
+ System.out.println("init");
+ // initHastable();
+ }
+
+ void initHastable() {
+
+ htmode.put("SERIAL PORT", SERIAL_PORT);
+ htmode.put("SOCKET", SOCKET);
+ htmode.put("KISS MODEM", KISS_MODEM);
+ ComBoMode.getItems().clear();
+
+ List listModes = new ArrayList(htmode.keySet());
+ ObservableList olv = FXCollections.observableList(listModes);
+ ComBoMode.setItems(olv);
+ // initialise Command
+
+ ComboCommand.getItems().clear();
+ ComboCommandList.getItems().clear();
+ // ArrayList listValues = new ArrayList(htComamd.;
+ List listValues = new ArrayList(htComamd.keySet());
+ ObservableList oli = FXCollections.observableList(listValues);
+ ComboCommand.setItems(oli);
+ ComboCommandList.setItems(oli);
+ }
+
+ @FXML
+ void HandleClear(ActionEvent event) {
+
+ listCommande.clear();
+ }
+
+ @FXML
+ void HandleLoad(ActionEvent event) {
+ // create file chooser dialog
+ FileChooser fileChooser = new FileChooser();
+ fileChooser.setTitle("Open File");
+ Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
+ // show open dialog and get selected file
+ File file = fileChooser.showOpenDialog(stage);
+
+ if (file != null) {
+ // read file using ManageCmdFile
+ ManageCmdFile manageCmdFile = new ManageCmdFile();
+ try {
+ List spinoCmdList = manageCmdFile.readFile(file.getAbsolutePath());
+ listCommande = FXCollections.observableArrayList(spinoCmdList);
+ tableViewCommande.setItems(listCommande);
+ // TODO: do something with the list of Spinon commands
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ @FXML
+ void HandleSave(ActionEvent event) {
+ FileChooser fileChooser = new FileChooser();
+ fileChooser.setTitle("Save File");
+
+ Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
+
+ // set initial file name
+ fileChooser.setInitialFileName("commands.txt");
+
+ // show save dialog and get selected file
+ File file = fileChooser.showSaveDialog(stage);
+
+ if (file != null) {
+ // write file using ManageCmdFile
+ ManageCmdFile manageCmdFile = new ManageCmdFile();
+ try {
+ manageCmdFile.writeFile(file.getAbsolutePath(), listCommande);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ @FXML
+ void HandleComboCommand(ActionEvent event) {
+ System.out.println("Selected" + ComboCommand.getValue());
+ manageOption(ComboCommand.getValue());
+ }
+
+ @FXML
+ void HandleComboCommandList(ActionEvent event) {
+ System.out.println("Selected" + ComboCommandList.getValue());
+ manageOptionList(ComboCommandList.getValue());
+ }
+
+ @FXML
+ void HandleComboOption(ActionEvent event) {}
+
+ @FXML
+ void HandleParamaterValue(MouseEvent event) {}
+
+ @FXML
+ private void switchToSecondary() throws IOException {
+ // App.setRoot("secondary");
+ }
+
+ /*
+ * @todo Mettre dans classe util
+ */
+ 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;
+ }
+
+ @FXML
+ void HandleSend(ActionEvent event) {
+
+ CommandOption cmdOption = null;
+ String cmdOptionS = null;
+
+ // récupére la valeur de la commande
+ Command cmdValue = htComamd.get(ComboCommand.getValue());
+ System.out.println("cmd ->" + cmdValue.getName());
+ if (ComboOption.getValue() != null) {
+ cmdOptionS = ComboOption.getValue();
+
+ Hashtable htOption = cmdValue.getOptions();
+ System.out.println(cmdOptionS);
+ cmdOption = htOption.get(ComboOption.getValue());
+ }
+
+ String cmdValueOption = TestValueParameterValue.getText();
+ Commande cmd;
+ byte option_value = 0;
+ if (cmdOption != null) {
+ option_value = (byte) cmdOption.getId();
+ cmd = cmdOption.getCommande();
+ } else {
+ cmd = cmdValue.getCommande();
+ }
+
+ if (cmd != null) {
+ System.out.println(cmd);
+ cmd.setValue((short) cmdValue.getId(), option_value, cmdValueOption);
+
+ // ssendData(cmdHexa, cmdHexa.length);
+ }
+
+ byte[] cmdHexa = hexStringToByteArray(headerH + cmd.tohex());
+ // OutputStream outputStream = this.socket.getOutputStream();
+
+ socket.sendData(cmdHexa, cmdHexa.length);
+
+ /*
+ Commande cmd = cmdf.getCommande(cmdValue, cmdOption, cmdValueOption);
+ listCommande.add(new CommandeTxt(ComboCommand.getValue(), cmdOptionS, cmdValueOption));
+ byte[] cmdConfig = hexStringToByteArray(headerH + cmd.tohex());
+ sendData(cmdConfig, cmdConfig.length);
+ */
+ }
+
+ @FXML
+ void HandleSendList(ActionEvent event) {
+
+ CommandOption cmdOption = null;
+ Commande cmd = null;
+ byte option_value = 0;
+ if (listCommande.size() > 0) {
+ int i = 0;
+ for (i = 0; i < listCommande.size(); i++) {
+ CommandeTxt cmdTxt = listCommande.get(i);
+ Command cmdValue = htComamd.get(cmdTxt.getCommandeName());
+ if (cmdTxt.getOptionName() != null) {
+ Hashtable htOption = cmdValue.getOptions();
+ System.out.println(cmdTxt.getOptionName());
+ cmdOption = htOption.get(cmdTxt.getOptionName());
+ }
+ System.out.println("Commande : " + cmdValue.getName() + " Option" + cmdTxt.getOptionName());
+
+ if (cmdOption != null) {
+ option_value = (byte) cmdOption.getId();
+ cmd = cmdOption.getCommande();
+ } else {
+ cmd = cmdValue.getCommande();
+ }
+
+ if (cmd != null) {
+
+ cmd.setValue((short) cmdValue.getId(), option_value, cmdTxt.getOptionValue());
+ System.out.println(cmd);
+
+ // ssendData(cmdHexa, cmdHexa.length);
+ }
+
+ byte[] cmdHexa = hexStringToByteArray(headerH + cmd.tohex());
+ // OutputStream outputStream = this.socket.getOutputStream();
+
+ socket.sendData(cmdHexa, cmdHexa.length);
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ } else {
+ System.out.println("Liste vide");
+ }
+ }
+
+ @FXML
+ void HandleAddCmd(ActionEvent event) {
+
+ String cmdOptionS = null;
+ if (ComboOptionList.getValue() != null) {
+ cmdOptionS = ComboOptionList.getValue();
+ }
+ String cmdValueOption = TextValueParameterValueList.getText();
+ CommandeTxt cmd = new CommandeTxt(ComboCommandList.getValue(), cmdOptionS, cmdValueOption);
+ System.out.println(cmd.toString());
+
+ listCommande.add(cmd);
+ }
+
+ @FXML
+ void HandleComBoMode(ActionEvent event) {}
+
+ @FXML
+ void HandlebuttonConnect(ActionEvent event) {
+
+ String cmdName = ComBoMode.getValue();
+ short cmdValue = htmode.get(cmdName);
+ switch (cmdValue) {
+ case KISS_MODEM:
+ System.out.println("Not Implemented");
+ break;
+ case SERIAL_PORT:
+ sp.list();
+ // initialise pour le port COM
+ initSerial("COM3");
+ System.out.println("Not Implemented");
+ break;
+ case SOCKET:
+ this.socket = new tcpConnection();
+ socket.connect("localhost" /*host.getHostName()*/, 8888, receivedFrame);
+
+ break;
+ default:
+ System.out.println("Default Not Implemented");
+ }
+ }
+
+ @FXML
+ void HandlebuttonDisconect(ActionEvent event) {}
+
+ public void initSerial(String portcom) {
+ sp.initSerialport(portcom, new SerialConfiguration(), new SpinoAnlayseData());
+ serp = sp.getSerialPort();
+ }
+
+ @FXML
+ void HandleParamaterValueList(MouseEvent event) {
+ System.out.println("Default Not Implemented");
+ }
+
+ @FXML
+ void HandleComboOptionList(ActionEvent event) {
+ System.out.println("Default Not Implemented");
+ }
+
+ public void sendData(byte data[], int size) {
+
+ System.out.println("data" + new String(data));
+ System.out.println("size" + size);
+
+ String cmdName = ComBoMode.getValue();
+ short cmdValue = htmode.get(cmdName);
+ switch (cmdValue) {
+ case KISS_MODEM:
+ System.out.println("Not Implemented");
+ break;
+ case SERIAL_PORT:
+ sp.list();
+ // initialise pour le port COM
+ initSerial("COM3");
+ System.out.println("Not Implemented");
+ break;
+ case SOCKET:
+ this.socket = new tcpConnection();
+ socket.connect("localhost" /*host.getHostName()*/, 8888, receivedFrame);
+
+ break;
+ default:
+ System.out.println("Default Not Implemented");
+ }
+
+ //
+ //
+ // data[16] = (byte) (data[16] + (byte) 2);
+ // int crcCompute = crc.calculate(data, 0, data.length);
+ // short crcCompute_S = (short) crcCompute;
+ // byte[] crct = shortToBytes(crcCompute_S);
+ //
+ // ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ // try {
+ // baos.write(data);
+ // baos.write(crct);
+ // byte[] c = baos.toByteArray();
+ //
+ // if (serp.writeBytes(c, size + 2) < 0) {
+ // System.err.println("ERROR to Write data ");
+ // System.exit(-1);
+ // }
+ // // serp.writeBytes(crct, crct.length);
+ //
+ // } catch (IOException e) {
+ // // TODO Auto-generated catch block
+ // e.printStackTrace();
+ // }
+ }
+
+ private static byte[] shortToBytes(final short data) {
+ return new byte[] {
+ (byte) ((data >> 8) & 0xff), (byte) ((data >> 0) & 0xff),
+ };
+ }
+
+ public void displayLog(String string) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void displayResult(int errorCode) {
+
+ btresult.setText("" + errorCode);
+ if (errorCode != 0) {
+ btresult.setBackground(new Background(new BackgroundFill(Color.RED, null, null)));
+ } else {
+ btresult.setBackground(new Background(new BackgroundFill(Color.GREEN, null, null)));
+ }
+
+ // TODO Auto-generated method stub
+
+ }
+
+ public void displayTlm(InterfaceAnalyseData receivedData) {
+ ObservableList observableList =
+ FXCollections.observableList(receivedData.getTelemetryData().getDataList());
+ tableViewResult.getItems().clear();
+ tableViewResult.setItems(observableList);
+
+ TextFieldTypeData.setText(receivedData.getTelemetryData().getTelemetryName());
+ displayResult(receivedData.getError());
+
+ if (receivedData.getTelemetryData().getTelemetryName().contains("telemetry")) {
+
+ ArrayList data = receivedData.getTelemetryData().getDataList();
+
+ // Iterating ArrayList using Iterator
+ Iterator it = data.iterator();
+
+ // Holds true till there is single element
+ // remaining in the list
+
+ DataTelemetry value = null;
+ while (it.hasNext()) {
+
+ // Print the elements of ArrayList
+ value = it.next();
+ if (value.getDataName().contains("state")) {
+
+ System.out.println("valeur " + value.getValue());
+ String vale = value.getValue();
+ int val = Integer.parseInt(vale);
+ switch (val) {
+ /*
+ * public static final byte STATE_INIT = 0;
+ public static final byte STATE_SURVEY = 1;
+ public static final byte STATE_MAILBOX = 2;
+ public static final byte STATE_DIGIPEATER = 3;
+ public static final byte STATE_EXPE_DATA = 4;
+ public static final byte STATE_MAIN_PAYLOAD = 5;
+ */
+
+ case 0:
+ TextfiledState.setText("INIT");
+ break;
+
+ case 1:
+ TextfiledState.setText("SURVEY");
+ break;
+
+ case 2:
+ TextfiledState.setText("MAILBOX");
+ break;
+
+ case 3:
+ TextfiledState.setText("DIGIPEATER");
+ break;
+
+ case 4:
+ TextfiledState.setText("EXPE_DATA");
+ break;
+ case 5:
+ TextfiledState.setText("MAIN_PAYLOAD ");
+ break;
+ }
+ }
+ }
+ }
+
+ // if(dataList.getTelemetryName().contentEquals(null))
+ // {
+ //
+ // }
+
+ }
+
+ @FXML
+ void HandleButtonSendMessage(ActionEvent event) {
+
+ String destinationDigi = "SPINOD";
+ String senderCallsign = TextFileldCallsign.getText();
+ if (senderCallsign.length() < 6) {
+ for (int i = senderCallsign.length(); i < 6; i++) {
+ senderCallsign = senderCallsign + " ";
+ }
+ }
+ System.out.println("callsign :" + senderCallsign + "-" + senderCallsign.length());
+ AX25header headerDIgi =
+ new AX25header(destinationDigi.getBytes(), (byte) 3, senderCallsign.getBytes(), (byte) 1);
+ String headerHd = headerDIgi.tohex();
+ CommandeDigipeaterMessage dp = new CommandeDigipeaterMessage(TextFieldMessage.getText());
+ byte[] messageHexa = hexStringToByteArray(headerHd + dp.tohex());
+ socket.sendData(messageHexa, messageHexa.length);
+ // Wfile.writeTofile(cmdHexa, cmdHexa.length, "ENVOI_MSG_DIGI");
+ System.out.println("taille MESSAGE DIGI 2 " + messageHexa.length);
+ }
+
+ public void displayDigipeaterMessage(DigipeaterMessage digipeaterMessage) {
+
+ //
+ observableDigipeaterMessage.add(digipeaterMessage);
+ // TextAreaMessage.setText(digipeaterMessage.toString());
+ }
+
+ @FXML
+ void handleSendMailboxMessage(ActionEvent event) {
+
+ String destinationDigi = "SPINOD";
+ String senderCallsign = TextMailboxCallsign.getText();
+ // String senderCallsign = TextFileldCallsign.getText();
+ if (senderCallsign.length() < 6) {
+ for (int i = senderCallsign.length(); i < 6; i++) {
+ senderCallsign = senderCallsign + " ";
+ }
+ }
+ System.out.println("callsign :" + senderCallsign + "-" + senderCallsign.length());
+ AX25header headerDIgi =
+ new AX25header(destinationDigi.getBytes(), (byte) 2, senderCallsign.getBytes(), (byte) 1);
+ String headerHd = headerDIgi.tohex();
+
+ System.out.println("MAILBOX ADD MESSAGE");
+ CommandeMailBoxAddMessage cmd =
+ new CommandeMailBoxAddMessage(TextFieldMailboxMessage.getText());
+
+ byte[] cmdConfig = hexStringToByteArray(headerHd + cmd.tohex());
+ socket.sendData(cmdConfig, cmdConfig.length);
+ }
+
+ @FXML
+ void handleMailboxGetAllMessage(ActionEvent event) {
+
+ String destinationDigi = "SPINOD";
+ String senderCallsign = TextMailboxCallsign.getText();
+ if (senderCallsign.length() < 6) {
+ for (int i = senderCallsign.length(); i < 6; i++) {
+ senderCallsign = senderCallsign + " ";
+ }
+ }
+ System.out.println("callsign :" + senderCallsign + "-" + senderCallsign.length());
+ AX25header headerDIgi =
+ new AX25header(destinationDigi.getBytes(), (byte) 2, senderCallsign.getBytes(), (byte) 1);
+ String headerHd = headerDIgi.tohex();
+ System.out.println("CMD_MAILBOX_ALL_MESSAGE");
+ CommandeMailBoxAllMessage cmd = new CommandeMailBoxAllMessage(senderCallsign.getBytes());
+ byte[] cmdConfig = hexStringToByteArray(headerHd + cmd.tohex());
+ socket.sendData(cmdConfig, cmdConfig.length);
+ }
+
+ @FXML
+ void handleMailboxGetLastMessage(ActionEvent event) {
+
+ String destinationDigi = "SPINOD";
+ String senderCallsign = TextMailboxCallsign.getText();
+ // String senderCallsign = TextFileldCallsign.getText();
+ if (senderCallsign.length() < 6) {
+ for (int i = senderCallsign.length(); i < 6; i++) {
+ senderCallsign = senderCallsign + " ";
+ }
+ }
+ System.out.println("callsign :" + senderCallsign + "-" + senderCallsign.length());
+ AX25header headerDIgi =
+ new AX25header(destinationDigi.getBytes(), (byte) 2, senderCallsign.getBytes(), (byte) 1);
+ String headerHd = headerDIgi.tohex();
+ System.out.println("CMD_MAILBOX_GET_LAST_MSG");
+ CommandeMailboxGetLastMessage cmd =
+ new CommandeMailboxGetLastMessage(Commande.CMD_MAILBOX_GET_LAST_MSG, senderCallsign);
+ byte[] cmdConfig = hexStringToByteArray(headerHd + cmd.tohex());
+ socket.sendData(cmdConfig, cmdConfig.length);
+ }
+
+ @FXML
+ void handleGetAllMailbox(ActionEvent event) {
+
+ String destinationDigi = "SPINOD";
+ String senderCallsign = TextMailboxCallsign.getText();
+ if (senderCallsign.length() < 6) {
+ for (int i = senderCallsign.length(); i < 6; i++) {
+ senderCallsign = senderCallsign + " ";
+ }
+ }
+ System.out.println("callsign :" + senderCallsign + "-" + senderCallsign.length());
+ AX25header headerDIgi =
+ new AX25header(destinationDigi.getBytes(), (byte) 2, senderCallsign.getBytes(), (byte) 1);
+ String headerHd = headerDIgi.tohex();
+
+ System.out.println("MAILBOX GET ALL Mailbox ");
+ CommandeGeneric cmd = new CommandeGeneric(Commande.CMD_MAILBOX_GET_LIST_BOX);
+ byte[] cmdConfig = hexStringToByteArray(headerHd + cmd.tohex());
+ socket.sendData(cmdConfig, cmdConfig.length);
+ }
+
+ public void displayInformationMessage(InformationMessage informationMessage) {
+
+ System.out.println("Message " + informationMessage.getMessage());
+
+ observableListInfoMessage.remove(informationMessage.getIndex());
+ observableListInfoMessage.add(informationMessage.getIndex(), informationMessage);
+ }
+
+ @FXML
+ void HandleClearReceivedData(ActionEvent event) {
+ observableDigipeaterMessage.clear();
+ }
+
+ public void displayMailBox() {
+ Mailboxes bal = Mailboxes.getInstance();
+ System.out.print(" DISPLAY BAL ");
+ Enumeration listMailbox = bal.getListMailbox();
+ Date date = new Date();
+
+ TreeItem racine =
+ new TreeItem<>(new MessageInstance("Racine", 0, date.getTime(), ""));
+ while (listMailbox.hasMoreElements()) {
+ MailBoxInstance mailBoxInstance = bal.getMailboxInstance(listMailbox.nextElement());
+ System.out.println(mailBoxInstance.toString());
+ MessageInstance mes =
+ new MessageInstance(
+ mailBoxInstance.getCallsign(), mailBoxInstance.getNbMessages(), date.getTime(), "");
+ TreeItem mailboxTree = new TreeItem<>(mes);
+ racine.getChildren().add(mailboxTree);
+ Enumeration listMessage = mailBoxInstance.getListMessage();
+ while (listMessage.hasMoreElements()) {
+ Integer indexmes = listMessage.nextElement();
+ MessageInstance mess = mailBoxInstance.getMessage(indexmes);
+ // Message message2 =
+ // new Message(
+ // mess.getCallsign(),
+ // mess.getIndex(),
+ // mess.getTimestamp().toString(),
+ // mess.getMessage());
+ mailboxTree.getChildren().add(new TreeItem(mess));
+ }
+
+ System.out.print(" BAL " + mes.getCallsign());
+ }
+ // treeTableViewMailbox.
+ treeTableViewMailbox.setRoot(racine);
+ }
+}
diff --git a/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/SecondaryController.java b/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/SecondaryController.java
new file mode 100644
index 0000000000000000000000000000000000000000..ebc88d6a9fe63c33a4f9b23a51de9cf3c600791b
--- /dev/null
+++ b/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/SecondaryController.java
@@ -0,0 +1,12 @@
+package org.josast.ApplicationSpinoControlCenter;
+
+import java.io.IOException;
+import javafx.fxml.FXML;
+
+public class SecondaryController {
+
+ @FXML
+ private void switchToPrimary() throws IOException {
+ App.setRoot("primary");
+ }
+}
diff --git a/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/SpinoAnlayseData.java b/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/SpinoAnlayseData.java
new file mode 100644
index 0000000000000000000000000000000000000000..ed6a21df756ef129373cd27e662deff451935be6
--- /dev/null
+++ b/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/SpinoAnlayseData.java
@@ -0,0 +1,12 @@
+package org.josast.ApplicationSpinoControlCenter;
+
+import org.josast.spino.serial.SerialAnalyseData;
+
+public class SpinoAnlayseData implements SerialAnalyseData {
+
+ @Override
+ public void analyseData(byte[] data, int size) {
+ // TODO Auto-generated method stub
+ System.out.println("Analyse not implemented ");
+ }
+}
diff --git a/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/SpinoCommandHastable.java b/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/SpinoCommandHastable.java
new file mode 100644
index 0000000000000000000000000000000000000000..f372513f49df607c7d8e091dbd751ddf78965a02
--- /dev/null
+++ b/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/SpinoCommandHastable.java
@@ -0,0 +1,105 @@
+package org.josast.ApplicationSpinoControlCenter;
+
+import java.util.Hashtable;
+
+import org.josast.spino.commande.Command;
+import org.josast.spino.commande.CommandFileManager;
+
+import org.josast.spino.commande.CommandeGetValue;
+import org.josast.spino.commande.CommandeSetState;
+import org.josast.spino.commande.GenerateCommand;
+
+public class SpinoCommandHastable {
+ private static Hashtable htCommande; /* = new Hashtable();*/
+ private static final Hashtable htOptionGetSet = new Hashtable();
+ private static final Hashtable htOptionState = new Hashtable();
+ /** */
+ public SpinoCommandHastable() {
+ super();
+ initHtCommand();
+ initHtOptionGetSet();
+ }
+
+ /** @return the htCommande */
+ @SuppressWarnings("unchecked")
+ public final synchronized Hashtable getHtCommande() {
+ return (Hashtable) htCommande.clone();
+ }
+
+ /** @return the htOptionGetSet */
+ @SuppressWarnings("unchecked")
+ public final synchronized Hashtable getHtOptionGetSet() {
+ return (Hashtable) htOptionGetSet.clone();
+ }
+
+ private void initHtCommand() {
+
+ GenerateCommand gc = new GenerateCommand();
+ CommandFileManager cm = gc.getCommandManager();
+ htCommande = cm.gethtCommands();
+
+ /*
+ htCommande.put("RESET", Commande.RESET);
+ htCommande.put("SET_VALUE", Commande.SET_VALUE);
+ htCommande.put("GET_VALUE", Commande.GET_VALUE);
+ htCommande.put("GET_CONFIG", Commande.GET_CONGIG);
+ htCommande.put("GET_LAST_DROPED_MESSAGE", Commande.GET_LAST_DROPED_MESSAGE);
+ htCommande.put("GET_ALL_DROPED_MESSAGE", Commande.GET_ALL_DROPED_MESSAGE);
+ htCommande.put("GET_DROP", Commande.GET_DROP);
+ htCommande.put("GET_LAST_LOG", Commande.GET_LAST_LOG);
+ htCommande.put("GET_ALL_LOG", Commande.GET_ALL_LOG);
+ htCommande.put("GET_LOG", Commande.GET_LOG);
+ htCommande.put("SET_INFO_MESSAGE", Commande.SET_INFO_MESSAGE);
+ htCommande.put("DEL_INFO_MESSAGE", Commande.DEL_INFO_MESSAGE);
+ htCommande.put("SET_STATE", Commande.SET_STATE);
+ htCommande.put("CMD_PAYLOAD_READ_DATA", Commande.CMD_PAYLOAD_READ_DATA);
+ htCommande.put("CMD_PAYLOAD_LOAD_DATA", Commande.CMD_PAYLOAD_LOAD_DATA);
+ htCommande.put("CMD_MAILBOX_INIT ", Commande.CMD_MAILBOX_INIT);
+ htCommande.put("CMD_MAILBOX_ADD_MSG ", Commande.CMD_MAILBOX_ADD_MSG);
+ htCommande.put("MD_MAILBOX_DEL_MSG ", Commande.CMD_MAILBOX_DEL_MSG);
+ htCommande.put("CMD_MAILBOX_GET_LIST_BOX", Commande.CMD_MAILBOX_GET_LIST_BOX);
+ htCommande.put("CMD_MAILBOX_DELETTE_BOX", Commande.CMD_MAILBOX_DELETTE_BOX);
+ htCommande.put("CMD_MAILBOX_GET_LAST_MSG", Commande.CMD_MAILBOX_GET_LAST_MSG);
+ htCommande.put("CMD_MAILBOX_GET_MSG", Commande.CMD_MAILBOX_GET_MSG);
+ htCommande.put("CMD_MAILBOX_GET_ALL_MSG", Commande.CMD_MAILBOX_GET_ALL_MSG);
+ htCommande.put("CMD_MAILBOX_DUMP_MAILBOX", Commande.CMD_MAILBOX_DUMP_MAILBOX);
+ htCommande.put("CMD_LOAD_TLE_1", Commande.CMD_LOAD_TLE_1);
+ htCommande.put("CMD_LOAD_TLE_2", Commande.CMD_LOAD_TLE_2);
+ htCommande.put("CMD_DOWNLOAD_TLE", Commande.CMD_DOWNLOAD_TLE);
+ htCommande.put("CMD_DOWNLOAD_TLE_1", Commande.CMD_DOWNLOAD_TLE_1);
+ htCommande.put("CMD_DOWNLOAD_TLE_2", Commande.CMD_DOWNLOAD_TLE_2);
+ htCommande.put("CMD_EXP_ADD_DATA", Commande.CMD_EXP_ADD_DATA);
+ htCommande.put("CMD_EXPE_GET_LIST", Commande.CMD_EXPE_GET_LIST);
+ htCommande.put("CMD_EXPE_DELETTE_ALL", Commande.CMD_EXPE_DELETTE_ALL);
+ htCommande.put("CMD_EXPE_GET_ALL_DATA", Commande.CMD_EXPE_GET_ALL_DATA);
+ htCommande.put("CMD_EXPE_INIT", Commande.CMD_EXPE_INIT);
+ htCommande.put("CMD_SET_EXPE_BEACON_DELAY", Commande.CMD_SET_EXPE_BEACON_DELAY);
+ htCommande.put("CMD_BEACON", Commande.CMD_BEACON);
+ */
+
+ }
+
+ private void initHtOptionGetSet() {
+ htOptionGetSet.put("SPINO VERSION", (Byte) CommandeGetValue.VALUE_SPINO_VERSION);
+ htOptionGetSet.put("SPINO DELAY", (Byte) CommandeGetValue.VALUE_SPINO_DELAY);
+ htOptionGetSet.put("CALLSIGN SRC SPINO", (Byte) CommandeGetValue.VALUE_CALLSIGN_SRC_SPINO);
+ htOptionGetSet.put("CALLSIGN DES SPINO", (Byte) CommandeGetValue.VALUE_CALLSIGN_DES_SPINO);
+ htOptionGetSet.put(
+ "CALLSIGN PAYLOAD SPINO", (Byte) CommandeGetValue.VALUE_CALLSIGN_PAYLOAD_SPINO);
+ htOptionGetSet.put("TIMESTAMP", (Byte) CommandeGetValue.VALUE_TIMESTAMP);
+ htOptionGetSet.put("LOG LEVEL", (Byte) CommandeGetValue.VALUE_LOG_LEVEL);
+ htOptionGetSet.put("ACTIVE INFO MESSAGE", (Byte) CommandeGetValue.VALUE_ACTIVE_INFO_MESSAGE);
+ htOptionGetSet.put("DELAY INFO MESSAGE", (Byte) CommandeGetValue.VALUE_DELAY_INFO_MESSAGE);
+ }
+
+ public Hashtable getHtOptionState() {
+
+ htOptionState.put("INIT", (byte) CommandeSetState.STATE_INIT);
+ htOptionState.put("SURVEY", (byte) CommandeSetState.STATE_SURVEY);
+ htOptionState.put("MAILBOX", (byte) CommandeSetState.STATE_MAILBOX);
+ htOptionState.put("DIGIPEATER", (byte) CommandeSetState.STATE_DIGIPEATER);
+ htOptionState.put("EXPERIMETAL", (byte) CommandeSetState.STATE_EXPE_DATA);
+ htOptionState.put("PAYLOAD", (byte) CommandeSetState.STATE_MAIN_PAYLOAD);
+ return htOptionState;
+ }
+}
diff --git a/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/TaskManageReceivedData.java b/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/TaskManageReceivedData.java
new file mode 100644
index 0000000000000000000000000000000000000000..b193390371d097a26efb9784f6987c341e72b85f
--- /dev/null
+++ b/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/TaskManageReceivedData.java
@@ -0,0 +1,161 @@
+package org.josast.ApplicationSpinoControlCenter;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.concurrent.BlockingQueue;
+import java.util.logging.Logger;
+
+import org.josast.ApplicationSpinoControlCenter.connection.ReceivedData;
+import org.josast.digipeater.DigipeaterMessage;
+import org.josast.informationMessage.InformationMessage;
+import org.josast.spino.generated.Spino.Payload;
+import org.josast.spino.spi.DataAnalysis;
+import org.josast.telemetry.DataTelemetry;
+import org.josast.telemetry.api.AbstractAnalysisInterface;
+import org.josast.telemetry.api.InterfaceAnalyseData;
+import org.josast.telemetry.api.TelemetryDataInterface;
+
+import javafx.application.Platform;
+import javafx.concurrent.Task;
+
+public class TaskManageReceivedData extends Task {
+
+ private static Logger appLogger = Logger.getLogger("AmsatLogger");
+
+ private final SimpleDateFormat ISO8601DATEFORMAT =
+ new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
+
+ // private DisplayUVSQsat displayUVSQsat = new DisplayUVSQsat();
+
+ // setup provider
+
+ private BlockingQueue blockingQueue = null;
+
+ PrimaryController ctrl = null;
+
+ public TaskManageReceivedData(
+ BlockingQueue blockingQueueIn, PrimaryController 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() {}
+ });
+ }
+
+ @Override
+ protected String call() throws Exception {
+
+ displayLog("Message Treatment Lanched");
+
+ // display provider
+ Date lastFrameTime;
+ ReceivedData decodedData;
+ displayLog("Waiting Data !!!");
+ while (true) {
+
+ decodedData = null;
+ decodedData = blockingQueue.take();
+ System.out.println(" RECUE : " + blockingQueue.size());
+
+ // displayLog(" Data !!!");
+ InterfaceAnalyseData dataAnalyse = new DataAnalysis();
+ System.out.println(" dataanalysis");
+ TelemetryDataInterface dti = dataAnalyse.analyse(decodedData.getRawData());
+ System.out.println(" NAME : " + dti);
+ if (dti != null) {
+ System.out.println("Decode :" + dti.getDataList().toString());
+ displayTlm(dataAnalyse);
+ if (dataAnalyse.getDataType() == AbstractAnalysisInterface.DIGIPEATER_MESSAGE) {
+ displayDigipeater(dataAnalyse.getDigipeaterMessage());
+ } else if (dataAnalyse.getDataType() == AbstractAnalysisInterface.INFORMATION_MESSAGE) {
+ displayInformationMessage(dataAnalyse.getInformationMessage());
+ } else if (dataAnalyse.getDataType() == AbstractAnalysisInterface.MAILBOX_MESSAGE) {
+ displaymailBox();
+ }
+
+ } else {
+ System.out.println("Not decoded");
+ }
+ }
+ }
+
+ private void displaymailBox() {
+ Platform.runLater(
+ new Runnable() {
+
+ @Override
+ public void run() {
+
+ ctrl.displayMailBox();
+ }
+ });
+ }
+
+ private void displayInformationMessage(InformationMessage informationMessage) {
+ Platform.runLater(
+ new Runnable() {
+
+ @Override
+ public void run() {
+
+ ctrl.displayInformationMessage(informationMessage);
+ }
+ });
+ }
+
+ private void displayDigipeater(DigipeaterMessage digipeaterMessage) {
+ Platform.runLater(
+ new Runnable() {
+
+ @Override
+ public void run() {
+
+ ctrl.displayDigipeaterMessage(digipeaterMessage);
+ }
+ });
+ }
+
+ private void displayTlm(InterfaceAnalyseData data) {
+ Platform.runLater(
+ new Runnable() {
+
+ @Override
+ public void run() {
+
+ ctrl.displayTlm(data);
+ }
+ });
+ }
+}
diff --git a/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/connection/ReceivedData.java b/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/connection/ReceivedData.java
new file mode 100644
index 0000000000000000000000000000000000000000..e6732bb3f81decf343a2c1b4a3aa5166d0b3e1d2
--- /dev/null
+++ b/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/connection/ReceivedData.java
@@ -0,0 +1,59 @@
+/** */
+package org.josast.ApplicationSpinoControlCenter.connection;
+
+import java.util.Date;
+
+/** @author chris */
+public class ReceivedData {
+
+ Date date;
+ byte[] RawData;
+ int size;
+
+ /** */
+ public ReceivedData() {
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * @param date
+ * @param rawData
+ * @param size
+ */
+ public ReceivedData(Date date, byte[] rawData, int size) {
+ super();
+ this.date = date;
+ RawData = rawData;
+ this.size = size;
+ }
+
+ /** @return the date */
+ public final synchronized Date getDate() {
+ return date;
+ }
+
+ /** @param date the date to set */
+ public final synchronized void setDate(Date date) {
+ this.date = date;
+ }
+
+ /** @return the rawData */
+ public final synchronized byte[] getRawData() {
+ return RawData;
+ }
+
+ /** @param rawData the rawData to set */
+ public final synchronized void setRawData(byte[] rawData) {
+ RawData = rawData;
+ }
+
+ /** @return the size */
+ public final synchronized int getSize() {
+ return size;
+ }
+
+ /** @param size the size to set */
+ public final synchronized void setSize(int size) {
+ this.size = size;
+ }
+}
diff --git a/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/connection/tcpConnection.java b/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/connection/tcpConnection.java
new file mode 100644
index 0000000000000000000000000000000000000000..f535438cb340d552db469ffa25c0039eb09d6511
--- /dev/null
+++ b/ApplicationSpinoControlCenter/src/main/java/org/josast/ApplicationSpinoControlCenter/connection/tcpConnection.java
@@ -0,0 +1,112 @@
+package org.josast.ApplicationSpinoControlCenter.connection;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.Socket;
+import java.net.UnknownHostException;
+import java.util.Date;
+import java.util.Vector;
+import java.util.concurrent.BlockingQueue;
+import java.util.logging.Logger;
+
+import org.avmdti.josast.util.ManageDataFile;
+
+public class tcpConnection {
+
+ private Socket socket;
+ private OutputStream output;
+ private InputStream input;
+ private boolean connected;
+ private BlockingQueue blockingQueue = null;
+ private static Logger appLogger = Logger.getLogger("AmsatLogger");
+
+ ManageDataFile mdf = new ManageDataFile();
+
+ Vector listMessage = new Vector();
+
+ public void connect(String hostname, int port, BlockingQueue Queue) {
+ blockingQueue = Queue;
+ try {
+ socket = new Socket("localhost" /*host.getHostName()*/, 8888);
+ output = socket.getOutputStream();
+ input = socket.getInputStream();
+ (new Thread(new TcpListeningThread())).start();
+ connected = true;
+ } catch (UnknownHostException e) {
+ appLogger.severe(e.getMessage());
+ } catch (IOException e) {
+ appLogger.severe(e.getMessage());
+ }
+ }
+
+ public void sendData(byte data[], int size) {
+ try {
+ output.write(data, 0, size);
+ } catch (IOException e) {
+ appLogger.severe(e.getMessage());
+ }
+ }
+
+ public int receivedData(byte data[]) {
+ int size = 0;
+ if (listMessage.size() != 0) {
+ data = listMessage.firstElement();
+ listMessage.remove(0);
+ size = data.length;
+ }
+ return size;
+ }
+
+ private class TcpListeningThread implements Runnable {
+
+ int size;
+
+ public TcpListeningThread() {
+ // Nothing to do...
+ }
+
+ public void run() {
+ try {
+ while (true) {
+ byte data[] = new byte[512];
+ size = input.read(data);
+
+ blockingQueue.add(new ReceivedData(new Date(), data, size));
+ mdf.saveRawFile(data);
+ System.out.println("Recue : " + blockingQueue.size());
+
+ /**
+ * *************************
+ *
+ * Spino cube = new Spino(new ByteBufferKaitaiStream(data));
+ *
+ *
System.out.println( "Source" +
+ * cube.ax25Frame().ax25Header().srcCallsignRaw().srcCallsignRor().srcCallsign());
+ * System.out.println( "Destination" + cube.ax25Frame() .ax25Header() .destCallsignRaw()
+ * .destCallsignRor() .destCallsign());
+ *
+ *
switch (cube.ax25Frame().payloadvalue().responseType()) { case 64:
+ * System.out.print(" TELEMETRY "); break; case 128: System.out.print(" CMD RESPONSE ");
+ * break; case 65: System.out.print(" INFORMATION_MSG "); InformationMessage inf =
+ * (InformationMessage) cube.ax25Frame().payloadvalue().responsetype();
+ * System.out.println(inf.messagea()); break; case 32: System.out.print("
+ * RESULT_DROP_MESSAGE "); ResponseLastDrop repdrop = (ResponseLastDrop)
+ * cube.ax25Frame().payloadvalue().responsetype(); break; default: System.out.print( "
+ * RESPONSE TYPE : " + cube.ax25Frame().payloadvalue().responseType()); }
+ *
+ *
// System.out.print(" ERROR CODE : "+ cube.ax25Frame().payloadvalue().errorCode());
+ * if (cube.ax25Frame().payloadvalue().errorCode() == 0) { System.out.println(" SUCCESS !
+ * "); } else { System.out.println(" ERROR CODE : " +
+ * cube.ax25Frame().payloadvalue().errorCode()); }
+ *
+ *
// System.out.println("CMD ID : "+ cube.ax25Frame().payloadvalue();
+ */
+ }
+
+ } catch (IOException e) {
+ System.err.println("Connection problem");
+ }
+ }
+ }
+}
diff --git a/ApplicationSpinoControlCenter/src/main/resources/org/josast/ApplicationSpinoControlCenter/800px-Logo.svg.png b/ApplicationSpinoControlCenter/src/main/resources/org/josast/ApplicationSpinoControlCenter/800px-Logo.svg.png
new file mode 100644
index 0000000000000000000000000000000000000000..6529fa61dc604a50947b777c0d117e0fcb523278
Binary files /dev/null and b/ApplicationSpinoControlCenter/src/main/resources/org/josast/ApplicationSpinoControlCenter/800px-Logo.svg.png differ
diff --git a/ApplicationSpinoControlCenter/src/main/resources/org/josast/ApplicationSpinoControlCenter/logoAmsat.png b/ApplicationSpinoControlCenter/src/main/resources/org/josast/ApplicationSpinoControlCenter/logoAmsat.png
new file mode 100644
index 0000000000000000000000000000000000000000..0d040fba4b8e99ac74424b8e65bf4a9b05995fde
Binary files /dev/null and b/ApplicationSpinoControlCenter/src/main/resources/org/josast/ApplicationSpinoControlCenter/logoAmsat.png differ
diff --git a/ApplicationSpinoControlCenter/src/main/resources/org/josast/ApplicationSpinoControlCenter/primary.fxml b/ApplicationSpinoControlCenter/src/main/resources/org/josast/ApplicationSpinoControlCenter/primary.fxml
new file mode 100644
index 0000000000000000000000000000000000000000..eee01ffe292d174779fe9ad2769cc839c5972a33
--- /dev/null
+++ b/ApplicationSpinoControlCenter/src/main/resources/org/josast/ApplicationSpinoControlCenter/primary.fxml
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ApplicationSpinoControlCenter/src/main/resources/org/josast/ApplicationSpinoControlCenter/spino.fxml b/ApplicationSpinoControlCenter/src/main/resources/org/josast/ApplicationSpinoControlCenter/spino.fxml
new file mode 100644
index 0000000000000000000000000000000000000000..60364621671be6e5a7f2c886b608adfb1d98cf39
--- /dev/null
+++ b/ApplicationSpinoControlCenter/src/main/resources/org/josast/ApplicationSpinoControlCenter/spino.fxml
@@ -0,0 +1,549 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ApplicationUVSQsatDecoder/pom.xml b/ApplicationUVSQsatDecoder/pom.xml
index 0cb91bbcf7a7fee37f165e8466d55c8eea68e9d8..455a2730480421c1a928ffac3926184eda0145c8 100644
--- a/ApplicationUVSQsatDecoder/pom.xml
+++ b/ApplicationUVSQsatDecoder/pom.xml
@@ -22,13 +22,11 @@
${josast.version}
${josast.version}
${josast.version}
- 18-ea+10
+ 13
-
-
org.openjfx
javafx-controls
@@ -81,12 +79,12 @@
ModuleConfig
${ModuleConfig.version}
-
-
-
-
-
-
+
+
+
+
+
+
org.josast
ModuleUVSQsatTelemetry
0.0.2
@@ -110,7 +108,8 @@
maven-assembly-plugin
- make-assembly
+ make-assembly
package
single
@@ -132,13 +131,9 @@
-
-
-
-
\ No newline at end of file
diff --git a/ApplicationUVSQsatDecoder/src/main/java/org/josast/UVSQsatDecoder/Controler.java b/ApplicationUVSQsatDecoder/src/main/java/org/josast/UVSQsatDecoder/Controler.java
index 04d413aff4c8cf4ce3e05ee79d325802e1716049..29e889888ecf3498145554a94587df383a23d05f 100644
--- a/ApplicationUVSQsatDecoder/src/main/java/org/josast/UVSQsatDecoder/Controler.java
+++ b/ApplicationUVSQsatDecoder/src/main/java/org/josast/UVSQsatDecoder/Controler.java
@@ -42,7 +42,7 @@ import org.josast.SIDS.Station;
import org.josast.UVSQsatDecoder.util.LogFile;
import org.josast.javafx.AlertHelper;
import org.josast.propertyHttp.ConfigHttp;
-import org.josast.uvsqsat.Frame;
+import org.josast.uvsqsat.DataAnalysis;
import org.josast.uvsqsat.generated.Uvsqsat.AmsatAscii;
import org.josast.uvsqsat.generated.Uvsqsat.AntsHk;
import org.josast.uvsqsat.generated.Uvsqsat.Beacon;
@@ -415,7 +415,7 @@ public class Controler {
ax25display.setdata(decodedData);
if (ax25display.GetCallsignFrom().contains("LATMOS")) {
displayUVSQsat.setData(decodedData);
- Frame frame = displayUVSQsat.getFrame();
+ DataAnalysis frame = displayUVSQsat.getFrame();
if (frame != null) {
DecodedData.appendText(displayUVSQsat.getData());
} else {
@@ -474,8 +474,7 @@ public class Controler {
public void run() {
ReceivedData decodedData = receivedFrame.getLastReceivedData();
- try {
- ;
+ try {;
if (decodedData != null) {
@@ -486,7 +485,7 @@ public class Controler {
SendSids(decodedData);
displayUVSQsat.setData(decodedData);
- Frame frame = displayUVSQsat.getFrame();
+ DataAnalysis frame = displayUVSQsat.getFrame();
if (frame != null) {
String date =
displayUVSQsat.getFrame().getPacketSecondaryHeader().getTime();
diff --git a/ApplicationUVSQsatDecoder/src/main/java/org/josast/UVSQsatDecoder/DisplayUVSQsat.java b/ApplicationUVSQsatDecoder/src/main/java/org/josast/UVSQsatDecoder/DisplayUVSQsat.java
index 3e28f4bf138e06b7b76d86441aa89b0f4ee17283..ed380e933c439a590e65277718aa88683727321c 100644
--- a/ApplicationUVSQsatDecoder/src/main/java/org/josast/UVSQsatDecoder/DisplayUVSQsat.java
+++ b/ApplicationUVSQsatDecoder/src/main/java/org/josast/UVSQsatDecoder/DisplayUVSQsat.java
@@ -2,18 +2,18 @@ package org.josast.UVSQsatDecoder;
import io.kaitai.struct.ByteBufferKaitaiStream;
import java.util.logging.Logger;
-import org.josast.uvsqsat.Frame;
+import org.josast.uvsqsat.DataAnalysis;
import org.josast.uvsqsat.generated.Uvsqsat;
public class DisplayUVSQsat {
- Frame frame = null;
+ DataAnalysis frame = null;
private static Logger appLogger = Logger.getLogger("AmsatLogger");
public void setData(ReceivedData decodedData) {
try {
frame = null;
Uvsqsat cube = new Uvsqsat(new ByteBufferKaitaiStream(decodedData.getData()));
- frame = new Frame();
+ frame = new DataAnalysis();
frame.setUp(cube);
cube = null;
@@ -36,7 +36,7 @@ public class DisplayUVSQsat {
}
/** @return the frame */
- public Frame getFrame() {
+ public DataAnalysis getFrame() {
return frame;
}
}
diff --git a/Josast Application with JRE/.gitkeep b/Josast Application with JRE/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Josast Application with JRE/AMSAT-F_Josast_Application_WithJRE.zip b/Josast Application with JRE/AMSAT-F_Josast_Application_WithJRE.zip
new file mode 100644
index 0000000000000000000000000000000000000000..e9e2707107c45adbf3f53bb650daa5165dc49684
Binary files /dev/null and b/Josast Application with JRE/AMSAT-F_Josast_Application_WithJRE.zip differ
diff --git a/Josast Application with JRE/readme.md b/Josast Application with JRE/readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..9a2acd42e513606024e3eb6af4f662239bfc3cfc
--- /dev/null
+++ b/Josast Application with JRE/readme.md
@@ -0,0 +1,20 @@
+
+# Josast Project Applications
+
+The ZIP file contains a Java Runtime Environment (JRE) and applications from the Josast project. The applications included are `ApplicationKissTool` and `ApplicationSpinoControler`.
+
+To use the applications, follow these steps:
+
+1. **Download the ZIP file** containing the JRE and applications.
+2. **Extract the files** to a directory of your choice.
+3. **Navigate to the extracted directory** using your file manager.
+4. **Click on the `.bat` file** corresponding to the application you wish to launch.
+
+## Application Details
+
+- **ApplicationKissTool**: [Description of ApplicationKissTool]
+- **ApplicationSpinoControler**: [Description of ApplicationSpinoControler]
+
+## Notes
+
+- For further assistance or inquiries, refer to the project documentation or contact the development team.
diff --git a/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/Client.java b/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/Client.java
index df3791324b3bc8defc3c5aa00acdc2c17b2bb4e7..dac4b28f5e1219b01a496274503dd825dfed1ca9 100644
--- a/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/Client.java
+++ b/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/Client.java
@@ -33,7 +33,7 @@ public class Client {
*
* @param config
*/
- public Client(AprsIsConfiguration config) {
+ public Client(final AprsIsConfiguration config) {
configPrivate = config;
}
@@ -66,7 +66,9 @@ public class Client {
.getBytes(StandardCharsets.UTF_8));
socket
.getOutputStream()
- .write(("# filter " + configPrivate.getFilter() + "\r\n").getBytes(StandardCharsets.UTF_8));
+ .write(
+ ("# filter " + configPrivate.getFilter() + "\r\n")
+ .getBytes(StandardCharsets.UTF_8));
socket.getOutputStream().flush();
} catch (UnknownHostException ex) {
diff --git a/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/demo/DemoTreatment.java b/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/demo/DemoTreatment.java
index af884eb8fd84a813d689531ff4b4132679d9b259..09c02cdab7f465c38afcbd250ff50790f8fc2c72 100644
--- a/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/demo/DemoTreatment.java
+++ b/ModuleAPRSIS/src/main/java/org/avmdti/josast/aprsis/demo/DemoTreatment.java
@@ -26,18 +26,14 @@ public class DemoTreatment implements ICompute {
bytes = new byte[1000];
nbBytes = input.read(bytes);
- if(nbBytes >0 )
- {
- String buff = new String(bytes,StandardCharsets.UTF_8).trim();
- if (!buff.startsWith("#")) {
- System.out.println("+" + buff);
- }
+ if (nbBytes > 0) {
+ String buff = new String(bytes, StandardCharsets.UTF_8).trim();
+ if (!buff.startsWith("#")) {
+ System.out.println("+" + buff);
+ }
+ } else {
+ System.out.println("Error read byte" + nbBytes);
}
- else
- {
- System.out.println("Error read byte"+nbBytes);
- }
-
} catch (IOException e) {
logger.severe(e.getMessage());
diff --git a/ModuleAPRSIS/src/site/site.xml b/ModuleAPRSIS/src/site/site.xml
index 075020152cc7566ff4eb7a9ed1018f62af7b241f..57bc65f69b9dd2a1dc343f661f662ab93c1023d9 100644
--- a/ModuleAPRSIS/src/site/site.xml
+++ b/ModuleAPRSIS/src/site/site.xml
@@ -1,5 +1,8 @@
-
+
+
Module APRS-IS
http://maven.apache.org/images/apache-maven-project.png
@@ -14,16 +17,12 @@
-
-
-
-
- ${reports}
-
-
+
+
+
\n\n";
+ }
+
+ // fin du fichier de log
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.util.logging.Formatter#getTail(java.util.logging.Handler)
+ */
+ @Deprecated
+ public String getTail(Handler h) {
+ return "
\n\n