Skip to content
Snippets Groups Projects
Commit 4dd05c99 authored by Urs Graf's avatar Urs Graf
Browse files

No commit message

No commit message
parent 5859717a
No related branches found
No related tags found
No related merge requests found
Showing with 0 additions and 978 deletions
package ch.ntb.inf.sea14.test.Comm;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import ch.ntb.inf.sea14.test.controll.MainController;
import ch.ntb.inf.sea14.test.logger.Logger;
import jssc.SerialPort;
import jssc.SerialPortEvent;
import jssc.SerialPortEventListener;
import jssc.SerialPortException;
import jssc.SerialPortList;
public class Device {
private SerialPort serialPort;
private Queue<Byte> inBuffer;
private static Device dev = null;
private MainController mc;
volatile int z2;
private volatile boolean portwechsel = false;
private Device(){
mc = MainController.getInstance();
inBuffer = new LinkedList<Byte>();
}
public static Device getInstance(){
if (dev==null){
dev = new Device();
}
return dev;
}
private boolean open() throws SerialPortException {
if (portExists(mc.getComPort())){
serialPort = new SerialPort(mc.getComPort());
serialPort.openPort();
serialPort.setParams(mc.getComBaudrate(), SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
serialPort.setEventsMask(SerialPort.MASK_RXCHAR);
serialPort.addEventListener(new SerialPortReader());
return true;
}else{
mc.setError("Connection Error --> Port not available");
serialPort = null;
return false;
}
}
private boolean portExists(String port){
ArrayList<String> s = new ArrayList<String>();
String[] sArr = SerialPortList.getPortNames();
for (String string : sArr) {
s.add(string);
}
return s.contains(port);
}
public boolean isOpen(){
if (serialPort!=null){
return serialPort.isOpened();
}else{
return false;
}
}
public void close(){
if (serialPort!=null){
if (serialPort.isOpened()){
try {
serialPort.closePort();
serialPort = null;
} catch (SerialPortException e) {
serialPort = null;
}
}
}
}
public boolean startComm(){
byte[] buff = null;
byte[] startComm = {'p','1','\r','\n'};
byte[] returnAus = {'e','0','\r','\n'};
byte[] timeOut = {'t','1','0','0','\r','\n'};
buff = writeData(startComm);
buff = writeData(returnAus);
buff = writeData(timeOut);
if (isError(buff)){
if (mc.isConectionReady()){
mc.setError("No device connected");
}
return false;
}else{
mc.setError("");
mc.setStatus("Connected!");
return true;
}
}
private boolean isError(byte[] buff) {
if (buff==null){
return true;
}
if (buff.length<1){
return true;
}else{
if (buff[0]=='e'){
if (buff[2]=='3'){
//mc.setError("Fehlermeldung erhalten: e 3 unexpected arguments");
Logger.error(this, "e3 Fehler");
return true;
}
if (buff[2]=='2'){
//mc.setError("Fehlermeldung erhalten: e 2 invalid value");
Logger.error(this, "e2 Fehler");
return true;
}
if (buff[2]=='1'){
//mc.setError("Fehlermeldung erhalten: e 1");
Logger.error(this, "e1 Fehler");
return true;
}
}
if (buff[0]=='p'){
return true;
}
if (buff[0]=='r'){
return false;
}
}
return true;
}
public byte[] writeData(byte[] data) {
byte[] buff = null;
synchronized (this) {
try {
if (portwechsel){
portwechsel = false;
close();
}
if (!isOpen()){
if (!open()){
return buff;
}
}
buff = sendBefehl(data);
MainController.getInstance().setError(null);
} catch (SerialPortException e) {
mc.setError("Unable to connect "+e.getExceptionType());
}
}
if (data.length>0){
if (data[0]!='u'){
if (isError(buff)){
if (mc.isConectionReady()){
mc.setError("Communication error --> reconnect");
}
}
}
}
return buff;
}
/**
* Sendet den Befehl und wartet auf eine Antwort.
*
* @param bf Daten die zu senden sind.
* @return
* @throws SerialPortException
*/
private byte[] sendBefehl(byte[] bf) throws SerialPortException{
if (inBuffer==null){
inBuffer = new LinkedList<Byte>();
}else{
inBuffer.clear();
}
if (serialPort != null){
for (byte b : bf) {
serialPort.writeByte(b);
try {
Thread.sleep(1);
} catch (InterruptedException e) {
}
}
}
long startTime = System.currentTimeMillis();
int z = 0;
int waitTime = 200;
do {
z2 = inBuffer.size();
if (z2!=z){
if (inBuffer.contains((byte)'\n')||inBuffer.contains((byte)'\r')){
waitTime =5;
}
startTime = System.currentTimeMillis();
z = z2;
}
} while ((System.currentTimeMillis()<(startTime+waitTime)));
// String comInPut = "Com Antwort: ";
// for (Iterator<Byte> iterator = inBuffer.iterator(); iterator.hasNext();) {
// Byte byte1 = (Byte) iterator.next();
// comInPut += (char)byte1.byteValue();
// }
// System.out.print(comInPut);
return makePrimitivByte(inBuffer.toArray(new Byte[inBuffer.size()]));
}
public byte[] makePrimitivByte(Byte[] buff) {
Queue<Byte> b = new LinkedList<Byte>();
for (int i = 0; i < buff.length; i++) {
if ((buff[i]!=32)&&(buff[i]!=12)&&(buff[i]!=15)){
b.add(buff[i]);
}
}
byte[] bRet = new byte[b.size()];
for (int i = 0; i < bRet.length; i++) {
bRet[i] = b.poll();
}
return bRet;
}
private class SerialPortReader implements SerialPortEventListener {
@Override
public void serialEvent(SerialPortEvent event) {
if(event.isRXCHAR()){//If data is available
if(event.getEventValue() > 0){//Check bytes count in the input buffer
byte buffer[];
try {
buffer = serialPort.readBytes();
for (byte b : buffer) {
inBuffer.add(b);
}
} catch (SerialPortException e) {
Logger.error(this, e.getMessage());
}
}
}
}
}
// public void initCom(){
// byte[] bf = (""+System.currentTimeMillis()+"\r\n").getBytes();
// SerialPort serialPort;
// serialPort = new SerialPort(mc.getComPort());
// try {
// serialPort.openPort();
// serialPort.writeBytes(bf);
// serialPort.setParams(mc.getComBaudrate(), 8, 1, 0);
// serialPort.closePort();
// } catch (SerialPortException e) {
//
// }//Open serial port
// }
public void setPortwechsel(boolean portwechsel) {
this.portwechsel = portwechsel;
}
}
package ch.ntb.inf.sea14.test.controll;
import java.util.Observable;
import java.util.Observer;
import ch.ntb.inf.sea14.test.ui.BoardTyps;
import ch.ntb.inf.sea14.test.ui.Updater;
public class MainController extends Observable{
private String comPort;
private int comBaudrate;
private static MainController mc = null;
private String status = "Connected!";
private String error = "Try to Connect";
private static Thread updater;
private BoardTyps bt;
private Observer statusbar = null;
private MainController() {
super();
}
public static MainController getInstance() {
if (mc==null){
mc = new MainController();
updater = new Updater(mc);
updater.start();
}
return mc;
}
public String getComPort() {
return comPort;
}
public void setComPort(String comPort) {
this.comPort = comPort;
}
public int getComBaudrate() {
return comBaudrate;
}
public void setComBaudrate(int comBaudrate) {
this.comBaudrate = comBaudrate;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getError() {
return error;
}
public void setError(String error) {
this.error = error;
}
public boolean isConectionReady() {
if ((error==null)||(error=="")){
return true;
}else{
return false;
}
}
public Thread getUpdater() {
return updater;
}
public void setUpdater(Thread updater) {
MainController.updater = updater;
}
public void notifyAllObservers(boolean runNormal) {
this.setChanged();
this.notifyObservers(runNormal);
}
public boolean shutdown(){
// updater.interrupt();
setError("Schliessen der Verbindung");
Updater.ende = true;
statusbar.update(this, true);
Updater.ende = true;
return true;
}
public Observer getStatusbar() {
return statusbar;
}
public void setStatusbar(Observer statusbar) {
this.statusbar = statusbar;
}
public BoardTyps getBt() {
return bt;
}
public void setBt(BoardTyps bt) {
this.bt = bt;
}
}
package ch.ntb.inf.sea14.test.hardware;
import ch.ntb.inf.sea14.test.Comm.Device;
import ch.ntb.inf.sea14.test.controll.MainController;
public class Buttons {
private Device dev;
private MainController mc;
public Buttons() {
dev = Device.getInstance();
mc = MainController.getInstance();
}
public boolean isButtonPressed(int channel) {
if (mc.isConectionReady()){
String data = "gi"+channel+"\r\n";
byte[] buff = dev.writeData(data.getBytes());
if (buff==null){
return false;
}
if (buff.length>=2){
if (buff[0]=='r'){
return (buff[1]=='1');
}
}
}
return false;
}
}
package ch.ntb.inf.sea14.test.ui;
import java.util.Observable;
import java.util.Observer;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.border.TitledBorder;
import ch.ntb.inf.sea14.test.controll.MainController;
import ch.ntb.inf.sea14.test.hardware.Buttons;
public class ButtonsView extends JPanel implements Observer {
/**
*
*/
private MainController mc;
private int offsetTasterName = 0;
private int anzButtons = 4;
private static final long serialVersionUID = 5230896578149494349L;
JRadioButton[] rButtons;
public ButtonsView() {
mc = MainController.getInstance();
switch (mc.getBt()) {
case SEA14:
offsetTasterName = 1;
anzButtons = 4;
break;
case COMBI:
offsetTasterName = 2;
anzButtons = 4;
break;
case CLASSIC:
offsetTasterName = 3;
anzButtons = 6;
break;
default:
break;
}
initView();
mc.addObserver(this);
}
private void initView() {
rButtons = new JRadioButton[anzButtons];
for (int i = 0; i < rButtons.length; i++) {
rButtons[i] = new JRadioButton("S" + (i+offsetTasterName));
this.add(rButtons[i]);
}
this.setBorder(new TitledBorder("Buttons"));
}
@Override
public void update(Observable o, Object arg) {
Buttons b = new Buttons();
for (int i = 0; i < rButtons.length; i++) {
rButtons[i].setSelected(b.isButtonPressed(i));
}
}
}
package ch.ntb.inf.sea14.test.ui;
import java.awt.Font;
import java.awt.Insets;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Observable;
import java.util.Observer;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
public class DisplayView extends JPanel implements Observer {
/**
*
*/
private static final long serialVersionUID = 360240203844870438L;
private TextDisplay textDisplay;
private JButton timeButton;
private boolean buttonPushed = false;
private boolean error = false;
private String lastValue = "";
public DisplayView() {
initView();
}
private void initView() {
timeButton=new JButton("Show Time");
timeButton.addMouseListener(new MouseListener() {
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
buttonPushed = true;
}
public void mousePressed(MouseEvent e) {
}
});
this.add(timeButton);
textDisplay=new TextDisplay("*************AVR Expboard***********",3,12);
textDisplay.setMargin(new Insets(3,12,3,12));
textDisplay.setFont(new Font("Courier", Font.PLAIN,13));
this.add(textDisplay);
this.setBorder(new TitledBorder("Display"));
}
@Override
public void update(Observable o, Object arg) {
if ((boolean)arg){
String text =" ";
if(buttonPushed){
if(!error){
DateFormat dateFormat = new SimpleDateFormat(" dd.MM.yyyy \n HH:mm:ss \n ");
Date date = new Date();
text= dateFormat.format(date);
textDisplay.setText(text);
//textDisplay.insert(text, 0);
textDisplay.replaceRange(text, 0, textDisplay.rows * textDisplay.columns + textDisplay.rows-1);
}
buttonPushed = false;
}else{
text = textDisplay.getText();
}
if (!text.equals(lastValue)) {
if(!error){
}
lastValue = text;
}
if(error){
textDisplay.setText("");
text = " Display \n Error \n ";
textDisplay.replaceRange(text, 0,text.length());
error = false;
}
}
}
}
package ch.ntb.inf.sea14.test.ui;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Observable;
import java.util.Observer;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import jssc.SerialPort;
import jssc.SerialPortList;
import ch.ntb.inf.sea14.test.Comm.Device;
import ch.ntb.inf.sea14.test.controll.MainController;
public class JPSerial extends JPanel implements ActionListener,Observer{
/**
*
*/
private static final long serialVersionUID = 4306596272133797673L;
private JComboBox<String> comboSerial;
private JComboBox<Integer> comboBaud;
private JLabel labelSerial;
private JLabel labelBaud;
private String[] comboListePort;
private MainController mc;
public JPSerial() {
// super(new FlowLayout(FlowLayout.CENTER, 50, 20));
super(new GridLayout(1, 4, 5, 5));
this.mc = MainController.getInstance();
// init Components
comboListePort = SerialPortList.getPortNames();
comboSerial = new JComboBox<String>(comboListePort);
comboSerial.setSelectedItem(mc.getComPort());
Integer[] comboListeSpeed = {SerialPort.BAUDRATE_38400};
comboBaud = new JComboBox<Integer>(comboListeSpeed);
comboBaud.setSelectedItem(new Integer(mc.getComBaudrate()));
labelSerial = new JLabel("Serial Port:");
labelSerial.setHorizontalAlignment(JLabel.RIGHT);
labelBaud = new JLabel("Baudrate:");
labelBaud.setHorizontalAlignment(JLabel.RIGHT);
// add Components to Panel
this.add(labelSerial);
this.add(comboSerial);
this.add(labelBaud);
this.add(comboBaud);
this.add(new JLabel());
// fill Components
comboSerial.addPopupMenuListener(new PopupMenuListener() {
@Override
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
String selected = (String) comboSerial.getSelectedItem();
String[] portListe = SerialPortList.getPortNames();
if (!sameArray(comboListePort, portListe)){
comboSerial.removeAllItems();
for (String string : portListe) {
comboSerial.addItem(string);
}
comboSerial.setSelectedItem(selected);
comboListePort = portListe;
}
}
@Override
public void popupMenuCanceled(PopupMenuEvent arg0) {}
@Override
public void popupMenuWillBecomeInvisible(PopupMenuEvent arg0) {}
});
//settings
this.setBorder(new TitledBorder("Serial Connection"));
comboSerial.addActionListener(this);
comboBaud.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(comboSerial)){
if (e.getActionCommand().equals("comboBoxChanged")){
mc.setComPort((String) comboSerial.getSelectedItem());
Device.getInstance().setPortwechsel(true);
}
}
if (e.getSource().equals(comboBaud)){
if (e.getActionCommand().equals("comboBoxChanged")){
mc.setComBaudrate((int) (comboBaud.getSelectedItem()));
Device.getInstance().setPortwechsel(true);
}
}
}
@Override
public void update(Observable o, Object arg) {
}
private boolean sameArray(Object[] o1, Object[] o2){
if (o1.equals(o2)){
return true;
}
if ((o1!=null)&&(o2!=null)){
if (o1.length!=o2.length){
return false;
}else{
for (int i = 0;i<o1.length;i++){
if (!o1[i].equals(o2[i])){
return false;
}
}
}
}else{
return false;
}
return true;
}
}
package ch.ntb.inf.sea14.test.ui;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Observable;
import java.util.Observer;
import javax.swing.JCheckBox;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
import ch.ntb.inf.sea14.test.controll.MainController;
import ch.ntb.inf.sea14.test.hardware.LED;
public class LedView extends JPanel implements Observer {
/**
*
*/
private static final long serialVersionUID = -5098924113512849374L;
private JCheckBox[] ledChkBoxes;
private JCheckBox allLedsChkBox;
private static final int N_OF_LEDS = 4;
public LedView() {
initView();
MainController.getInstance().addObserver(this);
}
private void initView() {
this.setAlignmentY(JPanel.BOTTOM_ALIGNMENT);
ledChkBoxes = new JCheckBox[N_OF_LEDS];
for (int i = 0; i < N_OF_LEDS; i++) {
ledChkBoxes[i] = new JCheckBox("D" + (i+1));
ledChkBoxes[i].addMouseListener(new MouseListener(){
public void mouseClicked(MouseEvent e){
int ctr=0;
for(int i=0; i<ledChkBoxes.length; i++){
if(ledChkBoxes[i].isSelected())ctr++;
}
if(ctr==ledChkBoxes.length) allLedsChkBox.setSelected(true);
else allLedsChkBox.setSelected(false);
}
public void mouseEntered(MouseEvent e){ }
public void mouseReleased(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mousePressed(MouseEvent e){}
});
this.add(ledChkBoxes[i]);
}
allLedsChkBox = new JCheckBox("All");
allLedsChkBox.addMouseListener(new MouseListener(){
public void mouseClicked(MouseEvent e){
boolean isSelected= allLedsChkBox.isSelected();
for(int i=0; i<ledChkBoxes.length;i++){
ledChkBoxes[i].setSelected(isSelected);
}
}
public void mouseEntered(MouseEvent e){ }
public void mouseReleased(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mousePressed(MouseEvent e){}
});
this.add(allLedsChkBox);
this.setBorder(new TitledBorder("LEDs"));
}
@Override
public void update(Observable o, Object arg) {
if ((boolean)arg){
LED led = new LED();
for (int i = 0; i < ledChkBoxes.length; i++) {
led.setLED(i,ledChkBoxes[i].isSelected());
}
}else{
for (int i = 0; i < ledChkBoxes.length; i++) {
ledChkBoxes[i].setSelected(false);
}
allLedsChkBox.setSelected(false);
}
}
}
package ch.ntb.inf.sea14.test.ui;
import java.awt.GridLayout;
import java.util.Hashtable;
import java.util.Observable;
import java.util.Observer;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.border.TitledBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import ch.ntb.inf.sea14.test.controll.MainController;
import ch.ntb.inf.sea14.test.hardware.PWM;
public class PWMView extends JPanel implements Observer {
/**
*
*/
private static final long serialVersionUID = -5321133062487515869L;
private final int MAXIMUM = 3;
private final int MINIMUM = 0;
short j3p3CV = 0;
short j3p4CV = 0;
short j3p3LastCV;
short j3p4LastCV;
boolean isInitiated = false;
JSlider j3p3js, j3p4js;
public PWMView(){
initView();
MainController.getInstance().addObserver(this);
}
private void initView(){
this.setLayout(new GridLayout(2, 2));
//Create the label table
Hashtable<Integer, JLabel> labelTable = new Hashtable<Integer, JLabel>();
labelTable.put( new Integer( 0 ), new JLabel("0%") );
labelTable.put( new Integer( 1 ), new JLabel("25%") );
labelTable.put( new Integer( 2 ), new JLabel("50%") );
labelTable.put( new Integer( 3 ), new JLabel("100%") );
this.add(new JLabel("PWM A"));
j3p3js = new JSlider(JSlider.HORIZONTAL, MINIMUM, MAXIMUM, MINIMUM);
j3p3js.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
JSlider source = (JSlider)e.getSource();
if (!source.getValueIsAdjusting()) {
int fps = (int)source.getValue();
switch(fps) {
case 1:// Slow
j3p3CV = 256;
break;
case 2:// Middle
j3p3CV = 512;
break;
case 3:// Fast
j3p3CV = 1023;
break;
default://Stop PWM
j3p3CV = 0;
break;
}
}
}
});
j3p3js.setMajorTickSpacing(1);
j3p3js.setPaintTicks(true);
j3p3js.setLabelTable( labelTable );
j3p3js.setPaintLabels(true);
this.add(j3p3js);
this.add(new JLabel("PWM B"));
j3p4js = new JSlider(JSlider.HORIZONTAL, MINIMUM, MAXIMUM, MINIMUM);
j3p4js.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
JSlider source = (JSlider)e.getSource();
if (!source.getValueIsAdjusting()) {
int fps = (int)source.getValue();
switch(fps) {
case 1:// Slow
j3p4CV = 256;
break;
case 2:// Middle
j3p4CV = 512;
break;
case 3:// Fast
j3p4CV = 1023;
break;
default://Stop PWM
j3p4CV = 0;
break;
}
}
}
});
j3p4js.setMajorTickSpacing(1);
j3p4js.setPaintTicks(true);
j3p4js.setLabelTable( labelTable );
j3p4js.setPaintLabels(true);
this.add(j3p4js);
this.setBorder(new TitledBorder("PWM"));
}
@Override
public void update(Observable o, Object arg) {
if ((boolean)arg){
PWM pwm = new PWM();
pwm.setPWM(0,j3p3CV);
pwm.setPWM(1,j3p4CV);
}else{
j3p4js.setValue(MINIMUM);
j3p3js.setValue(MINIMUM);
}
}
}
package ch.ntb.inf.sea14.test.ui;
import java.util.Observer;
import ch.ntb.inf.sea14.test.Comm.Device;
import ch.ntb.inf.sea14.test.controll.MainController;
public class Updater extends Thread {
private MainController mc;
private Device dev;
private int ctr = 0;
public static boolean ende = false;
public Updater(MainController mc) {
super();
this.mc = mc;
dev = Device.getInstance();
}
public void run() {
do {
if (mc.isConectionReady()){
mc.notifyAllObservers(true);
ctr = 0;
}else{
// mc.notifyAllObservers(false);
Observer o = mc.getStatusbar();
if (o!=null){
o.update(mc, null);
}
ctr++;
if (ctr>500){
ctr = 0;
dev.close();
Device.getInstance().startComm();
}
}
try {
Thread.sleep(1);
} catch (InterruptedException e) {
interrupt();
}
}while((!isInterrupted())&&(!ende));
dev.close();
ende = false;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment