diff --git a/Universal-Space-Operations-Center/src/main/java/com/ksatstuttgart/usoc/controller/communication/MailReceiver.java b/Universal-Space-Operations-Center/src/main/java/com/ksatstuttgart/usoc/controller/communication/MailReceiver.java index 7ce602d..0d2b197 100755 --- a/Universal-Space-Operations-Center/src/main/java/com/ksatstuttgart/usoc/controller/communication/MailReceiver.java +++ b/Universal-Space-Operations-Center/src/main/java/com/ksatstuttgart/usoc/controller/communication/MailReceiver.java @@ -144,6 +144,7 @@ public void run() { counter--; } if (counter < 0) { + error("Error: Couldn't connect to INBOX"); return; } diff --git a/Universal-Space-Operations-Center/src/main/java/com/ksatstuttgart/usoc/controller/communication/SerialComm.java b/Universal-Space-Operations-Center/src/main/java/com/ksatstuttgart/usoc/controller/communication/SerialComm.java index 33e8135..b0e83f1 100755 --- a/Universal-Space-Operations-Center/src/main/java/com/ksatstuttgart/usoc/controller/communication/SerialComm.java +++ b/Universal-Space-Operations-Center/src/main/java/com/ksatstuttgart/usoc/controller/communication/SerialComm.java @@ -27,6 +27,8 @@ import com.ksatstuttgart.usoc.data.SerialEvent; import java.awt.event.ActionEvent; import static java.lang.Thread.sleep; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -82,7 +84,7 @@ public void start(String sp, int baudrate) { } public void close() { - try { + try { serialPort.closePort(); } catch (SerialPortException ex) { error("Error: Couldn't close Serialport."); @@ -90,43 +92,22 @@ public void close() { } public void send(String msg) { + if(!isOpen()){ + error("Error: Serial port is not connected!"); + return; + } try { - //add a $ to the beginning and a # at the end - serialPort.writeBytes(("$" + msg + "#").getBytes()); + serialPort.writeBytes(msg.getBytes(StandardCharsets.US_ASCII)); } catch (SerialPortException ex) { error("Error: Couldn't send message: " + msg + "."); } } public static void sendAction(ActionEvent e) { + System.out.println(SerialCommand.valueOf(e.getActionCommand()).getCommand()+"0\n"); if (SerialComm.getInstance().isOpen()) { - switch (e.getActionCommand()) { - case "LaunchMacro": - new Thread() { - @Override - public void run() { - try { - SerialComm.getInstance().send("Cameras"); - sleep(3 * 1000); - SerialComm.getInstance().send("Prelaunch"); - sleep(20 * 1000); - SerialComm.getInstance().send("Active"); - sleep(5 * 1000); - SerialComm.getInstance().send("Cameras"); - sleep(2 * 1000); - SerialComm.getInstance().send("Cameras"); - sleep(2 * 1000); - SerialComm.getInstance().send("Prelaunch"); - } catch (InterruptedException ex) { - } - - } - }.start(); - break; - default: - SerialComm.getInstance().send(e.getActionCommand()); - break; - } + String command = SerialCommand.valueOf(e.getActionCommand()).getCommand()+"0\n"; + SerialComm.getInstance().send(command); } } @@ -141,16 +122,20 @@ public boolean isOpen() { } public List getAvailableCommands() { - return Arrays.asList(SerialComm.COMMANDS); + ArrayList commands = new ArrayList<>(); + for (SerialCommand command : SerialCommand.values()) { + commands.add(command.toString()); + } + return commands; } public List getAvailableBaudrates() { return Arrays.asList(SerialComm.BAUDRATES); } - /** - * This class reads chars from the serial port and reports new incoming data. - * Incoming data is detected by newLine characters. + /** + * This class reads chars from the serial port and reports new incoming + * data. Incoming data is detected by newLine characters. */ private class SerialPortReader implements SerialPortEventListener { @@ -166,9 +151,10 @@ public void serialEvent(SerialPortEvent event) { if (c == '\n') { messageReceived(new SerialEvent(buffer, event.getPortName(), System.currentTimeMillis(), DataSource.SERIAL)); + System.out.println(buffer); buffer = ""; } else { - buffer += c; + buffer += (char)c; } } } catch (SerialPortException ex) { diff --git a/Universal-Space-Operations-Center/src/main/java/com/ksatstuttgart/usoc/controller/communication/SerialCommand.java b/Universal-Space-Operations-Center/src/main/java/com/ksatstuttgart/usoc/controller/communication/SerialCommand.java new file mode 100644 index 0000000..ebe4397 --- /dev/null +++ b/Universal-Space-Operations-Center/src/main/java/com/ksatstuttgart/usoc/controller/communication/SerialCommand.java @@ -0,0 +1,49 @@ +/* + * The MIT License + * + * Copyright 2017 KSat Stuttgart e.V.. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.ksatstuttgart.usoc.controller.communication; + +/** + * + * @author valentinstarlinger + */ +public enum SerialCommand { + SendImage ("0"), + ActivateSimulation ("1"), + DeactivateSimulation ("2"), + ActivateAscend ("3"), + DeactivateAscend ("4"), + PerformSelfTest ("5"), + Reboot ("6"), + Shutdown ("7"); + + private String command; + + private SerialCommand (String command){ + this.command = command; + } + + public String getCommand(){ + return command; + } +} diff --git a/Universal-Space-Operations-Center/src/main/java/com/ksatstuttgart/usoc/controller/communication/SerialListener.java b/Universal-Space-Operations-Center/src/main/java/com/ksatstuttgart/usoc/controller/communication/SerialListener.java index 0aaccc3..b9f4d3f 100755 --- a/Universal-Space-Operations-Center/src/main/java/com/ksatstuttgart/usoc/controller/communication/SerialListener.java +++ b/Universal-Space-Operations-Center/src/main/java/com/ksatstuttgart/usoc/controller/communication/SerialListener.java @@ -26,7 +26,7 @@ import com.ksatstuttgart.usoc.data.SerialEvent; /** -*

MailUpdateListener

+*

SerialListener

* This interface enables classes to listen to events happening on an open serial * port via the SerialComm class. * diff --git a/Universal-Space-Operations-Center/src/main/java/com/ksatstuttgart/usoc/gui/MainFrame.java b/Universal-Space-Operations-Center/src/main/java/com/ksatstuttgart/usoc/gui/MainFrame.java index 48cd604..97bebb2 100755 --- a/Universal-Space-Operations-Center/src/main/java/com/ksatstuttgart/usoc/gui/MainFrame.java +++ b/Universal-Space-Operations-Center/src/main/java/com/ksatstuttgart/usoc/gui/MainFrame.java @@ -79,7 +79,7 @@ private void initialize(){ JTabbedPane bottomPanel = new JTabbedPane(); bottomPanel.addTab("Iridium", ip); - //bottomPanel.addTab("Serial", sp); + bottomPanel.addTab("Serial", sp); mainPanel.setLayout(new BorderLayout()); mainPanel.add(dataTabs, BorderLayout.WEST); diff --git a/Universal-Space-Operations-Center/src/main/java/com/ksatstuttgart/usoc/gui/SerialPanel.java b/Universal-Space-Operations-Center/src/main/java/com/ksatstuttgart/usoc/gui/SerialPanel.java index d01a068..292bab9 100755 --- a/Universal-Space-Operations-Center/src/main/java/com/ksatstuttgart/usoc/gui/SerialPanel.java +++ b/Universal-Space-Operations-Center/src/main/java/com/ksatstuttgart/usoc/gui/SerialPanel.java @@ -57,17 +57,15 @@ public class SerialPanel extends DataPanel { private final LogPanel lp; private final JComboBox ports, baudrate; - private static final String[] baudrates = {"38400", "57600"}; - private static final String[] commands = {"Ping", "Testing", "Camtest", "Cameras", "Abort", "Prelaunch", "Active", "Reset", "LaunchMacro"}; - + public SerialPanel() { super(); - commandBox = new JComboBox(commands); + commandBox = new JComboBox(SerialComm.getInstance().getAvailableCommands().toArray()); send = new JButton("Send Command"); send.addActionListener(new SendListener()); ports = new JComboBox(); - baudrate = new JComboBox(baudrates); + baudrate = new JComboBox(SerialComm.getInstance().getAvailableBaudrates().toArray()); connect = new JButton("Connect"); connect.addActionListener(new ConnectListener()); @@ -90,6 +88,7 @@ public SerialPanel() { this.add(lp, BorderLayout.CENTER); this.setPreferredSize(new java.awt.Dimension(0, 250)); + MainController.startPortThread(this); } @Override