/* * 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.writer; import com.pi4j.io.serial.Serial; import com.pi4j.io.serial.SerialDataEvent; import com.pi4j.io.serial.SerialDataListener; import com.pi4j.io.serial.SerialFactory; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import project.latex.balloon.TransmittedDataKeysResource; /** * * @author Dan */ public class SerialDataWriter implements DataWriter { private static final Logger logger = Logger.getLogger(SerialDataWriter.class); private final DataModelConverter converter; private final List<String> dataKeys; private final Serial serial; public SerialDataWriter(TransmittedDataKeysResource transmittedDataKeysResource, DataModelConverter converter, Serial serial, int baudRate) { this.converter = converter; this.serial = serial; this.dataKeys = transmittedDataKeysResource.getTransmittedDataKeys(); // open the default serial port provided on the GPIO header serial.open(Serial.DEFAULT_COM_PORT, baudRate); // Add a serial data listener to allow us to echo out any data written serial.addListener(new SerialDataListener() { @Override public void dataReceived(SerialDataEvent event) { logger.info("Serial data received: " + event.getData()); } }); } public SerialDataWriter(TransmittedDataKeysResource transmittedDataKeysResource, DataModelConverter converter, int baudRate) { this(transmittedDataKeysResource, converter, SerialFactory.createInstance(), baudRate); } @Override public void writeData(Map<String, Object> dataModel) { String csvString = convertDataToCsvString(dataModel); serial.writeln(csvString); } public String convertDataToCsvString(Map<String, Object> dataModel) { if (dataModel == null) { throw new IllegalArgumentException("Cannot write null data object"); } return this.converter.convertDataToCsvString(dataKeys, dataModel); } public void writeString(String data) { serial.write(data); } }