/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package project.latex.balloon.ssdv;
import com.pi4j.io.serial.Serial;
import com.pi4j.io.serial.SerialFactory;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.log4j.Logger;
/**
*
* @author will
*/
public class SerialSsdvDataWriter implements SsdvDataWriter {
private static final Logger logger = Logger.getLogger(SerialSsdvDataWriter.class);
private final int baudRate;
private Serial serial;
// This constructor is for testing only.
public SerialSsdvDataWriter(int baudRate, Serial serial) {
this.baudRate = baudRate;
this.serial = serial;
}
public SerialSsdvDataWriter(int baudRate) {
this(baudRate, SerialFactory.createInstance());
}
@Override
public void writePacket(String encodedImageFilePath, int packetToSend) {
if (serial.isClosed()) {
serial.open(Serial.DEFAULT_COM_PORT, baudRate);
}
runSendPacketScript(encodedImageFilePath, packetToSend);
serial.close();
}
// Runs a python script to send the encoded image packet.
private void runSendPacketScript(String encodedImageFilePath, int packetToSend) {
logger.info(String.format("Starting ssdvPacketTransmit.py for packet %d of image '%s'",
packetToSend, encodedImageFilePath));
Process imageSendScript;
try
{
// Run the encode script.
imageSendScript = Runtime.getRuntime().exec(
String.format("python scripts/ssdvPacketTransmit.py %s %d %d",
encodedImageFilePath, packetToSend, baudRate));
// Checks exit status of the script.
if (imageSendScript.waitFor() != 0)
{
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(imageSendScript.getErrorStream()));
String errorMessage = "";
String line;
logger.warn(String.format("Errorstream from imageTransmit.py"));
while ((line = bufferedReader.readLine()) != null) {
errorMessage += line + "\n";
}
logger.warn(errorMessage);
bufferedReader.close();
}
}
catch (IOException | InterruptedException e)
{
logger.error(String.format("Could not run imageTransmit.py"));
}
}
}