From 071cbf4619ab0d7c9d9062e66a2c80c393226d52 Mon Sep 17 00:00:00 2001 From: opetany Date: Wed, 27 Dec 2017 13:45:31 +0100 Subject: [PATCH] More cleaner code --- .idea/misc.xml | 2 +- src/mainwindow/PortController.java | 6 +- src/port/CRC16.java | 19 +++++- src/port/PortReader.java | 103 ++++++++++++++--------------- 4 files changed, 73 insertions(+), 57 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index bdc94d8..27321b1 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/src/mainwindow/PortController.java b/src/mainwindow/PortController.java index 23f91ee..9a704c6 100644 --- a/src/mainwindow/PortController.java +++ b/src/mainwindow/PortController.java @@ -26,7 +26,7 @@ public class PortController implements Initializable @Override public void initialize(URL location, ResourceBundle resources) { - getAndSetAvailablePortsInComboBox(); + setAvailablePortsInComboBox(); if(!selectPortComboBox.getItems().isEmpty()) { @@ -75,7 +75,7 @@ public void onActionPortComboBox() public void onMouseClickedSelectPort() { selectPortComboBox.getItems().clear(); - getAndSetAvailablePortsInComboBox(); + setAvailablePortsInComboBox(); } public void onActionSelectBaudrate() @@ -130,7 +130,7 @@ public void onActionConnectButton() } } - private void getAndSetAvailablePortsInComboBox() + private void setAvailablePortsInComboBox() { Enumeration ports = CommPortIdentifier.getPortIdentifiers(); diff --git a/src/port/CRC16.java b/src/port/CRC16.java index e81dc77..3e23ad6 100644 --- a/src/port/CRC16.java +++ b/src/port/CRC16.java @@ -46,7 +46,7 @@ public class CRC16 } // ============================================================================================================================ - public int generateCRC16CCITT(ArrayList buff) + private static int generateCRC16CCITT(ArrayList buff) { int crc = 0; int data; @@ -59,4 +59,21 @@ public int generateCRC16CCITT(ArrayList buff) return crc; } + + public static boolean checksumIsAgree(ArrayList buffer) + { + int receivedChecksum = getChecksumFromBuffer(buffer); + + return generateCRC16CCITT(buffer) == receivedChecksum; + } + + private static int getChecksumFromBuffer(ArrayList buffer) + { + int receivedChecksum = ((buffer.get(buffer.size()-2) & 0xFF) << 8) | buffer.get(buffer.size()-1) & 0xFF; + + buffer.remove(buffer.size()-1); // remove received checksum from buffer + buffer.remove(buffer.size()-1); + + return receivedChecksum; + } } diff --git a/src/port/PortReader.java b/src/port/PortReader.java index 06ba5b7..fa86e85 100644 --- a/src/port/PortReader.java +++ b/src/port/PortReader.java @@ -53,11 +53,6 @@ private Frame readFrame() Frame frame = null; - if(!bufferIn.isEmpty()) - { - bufferIn.clear(); - } - while (listening) { data = readByte(); @@ -67,65 +62,70 @@ private Frame readFrame() break; } - if (STOP_BYTE == data) // if element == STOP byte then decode received frame + switch(data) { - if (!bufferIn.isEmpty()) + case START_BYTE: //if element == START byte then start listening again { - bufferIn = decodePayload(bufferIn); - - int receivedChecksum = ((bufferIn.get(bufferIn.size()-2) & 0xFF) << 8) | bufferIn.get(bufferIn.size()-1) & 0xFF; + wasStarted = true; + bufferIn.clear(); - bufferIn.remove(bufferIn.size()-1); // remove received checksum from buffer - bufferIn.remove(bufferIn.size()-1); + break; + } - if ( new CRC16().generateCRC16CCITT(bufferIn) == receivedChecksum) + case STOP_BYTE: // if element == STOP byte then decode received frame + { + if (!bufferIn.isEmpty()) { - System.out.println("The checksums agrees."); + bufferIn = decodePayload(bufferIn); - try + if ( CRC16.checksumIsAgree(bufferIn) ) { - frame = mapToFrame(bufferIn); - - System.out.println("Buffer is mapped to object of Frame type."); - - listening = false; + System.out.println("The checksums agrees."); + + try + { + frame = mapBufferToFrame(bufferIn); + System.out.println("Buffer is mapped to object of Frame type."); + listening = false; + } + catch (Exception e) + { + e.printStackTrace(); + wasStarted = false; + bufferIn.clear(); + cntBytes = 0; + } } - catch (Exception e) + else { - e.printStackTrace(); - wasStarted = false; - bufferIn.clear(); - cntBytes = 0; + Log.getInstance().log("The checksums doesn't agrees."); + listening = false; } } else { - Log.getInstance().log("Received frame is wrong."); - listening = false; + wasStarted = false; } + + break; } - else - { - wasStarted = false; - } - } - else if (START_BYTE == data) //if element == START byte then start listening again - { - wasStarted = true; - bufferIn.clear(); - } - else if(wasStarted) //else save element in buffer - { - if (cntBytes < MAX_FRAME_SIZE) - { - bufferIn.add((byte)data); - cntBytes++; - } - else + + default: { - bufferIn.clear(); - cntBytes = 0; - wasStarted = false; + if(wasStarted) //else save element in buffer + { + if (cntBytes < MAX_FRAME_SIZE) + { + bufferIn.add((byte)data); + cntBytes++; + } + else + { + bufferIn.clear(); + cntBytes = 0; + wasStarted = false; + } + } } } } @@ -153,7 +153,7 @@ private ArrayList decodePayload(ArrayList bufferIn) return data; } - private Frame mapToFrame(ArrayList bytes) throws Exception + private Frame mapBufferToFrame(ArrayList bytes) throws Exception { ArrayList mappedValues = new ArrayList<>(); @@ -161,7 +161,7 @@ private Frame mapToFrame(ArrayList bytes) throws Exception if ( (bytes.size() - 1) < numberOfChannels * 4 ) { - throw new Exception("Number of channels in frame was wrong."); + throw new Exception("Number of channels in frame is wrong."); } for (int i = 0, k = 0; i < numberOfChannels; i++) @@ -188,7 +188,7 @@ public void startReading() if ( null != frame ) { frameBuffer.put(frame); - System.out.println("New frame is added."); + System.out.println("New frame is added to the queue."); } else { @@ -211,5 +211,4 @@ public LinkedBlockingQueue getFrameBuffer() { return frameBuffer; } - }