public boolean writeBytes(byte[] bytes) { try { if (DEBUG_SERIAL) { System.out.println( "Network Sending: " + ByteArrayHelpers.getByteArrayString(bytes, ByteArrayMode.BYTE_ARRAY_MODE_HEX)); } return serialPort.writeBytes(bytes); } catch (SerialPortException e) { if (DEBUG_MSGS) { e.printStackTrace(); } return false; } }
@Override public void serialEvent(SerialPortEvent serialPortEvent) { int val = serialPortEvent.getEventValue(); if (serialPortEvent.isRXCHAR() && val > 0) { if (SerialConnection.DEBUG_SERIAL) { System.out.println("Received " + val + " bytes"); } try { byte[] preambleData = new byte[0]; byte[] payloadData = new byte[0]; preambleData = mPort.readBytes(PREAMBLE_SIZE, 500); if (SerialConnection.DEBUG_SERIAL) { System.out.println( "Preamble: " + ByteArrayHelpers.getByteArrayString(preambleData) + "(" + new String(preambleData) + ")"); } if (preambleData.length == PREAMBLE_SIZE) { dataSize = preambleData[2]; if (dataSize > 0) { payloadData = mPort.readBytes(dataSize, 500); if (SerialConnection.DEBUG_SERIAL) { System.out.println( "Data: " + ByteArrayHelpers.getByteArrayString(payloadData) + "(" + new String(payloadData) + ")"); } networkDelegate.handlePacket(ByteArrayHelpers.concat(preambleData, payloadData)); } else if (0 == dataSize) { networkDelegate.handlePacket(preambleData); } } else { if (SerialConnection.DEBUG_MSGS) { System.out.println( "preamble data length: " + preambleData.length + " does not match correct size: " + PREAMBLE_SIZE); } } // switch (state) { // case PREAMBLE: // preambleData = mPort.readBytes(PREAMBLE_SIZE); // // if (SerialConnection.DEBUG_SERIAL) { // System.out.println("Preamble: " + ByteArrayHelpers.getByteArrayString(preambleData) // + "(" + new String(payloadData) + ")"); // } // // if (preambleData.length == PREAMBLE_SIZE) // { // dataSize = preambleData[PREAMBLE_SIZE - 1]; // if (dataSize > 0) // { // state = ListenerState.DATA; // payloadData = mPort.readBytes(dataSize, 50); // // if (SerialConnection.DEBUG_SERIAL) { // System.out.println("Data: " + ByteArrayHelpers.getByteArrayString(payloadData) + // "(" + new String(payloadData) + ")"); // } // state = ListenerState.PREAMBLE; // // } else if (0 == dataSize) // { // networkDelegate.handlePacket(preambleData); // } // } else // { // if (SerialConnection.DEBUG_MSGS) // { // System.out.println("preamble data length: " + preambleData.length + " does not // match correct size: " + PREAMBLE_SIZE); // } // } // break; // // case DATA: // payloadData = mPort.readBytes(dataSize); // // if (SerialConnection.DEBUG_SERIAL) { // System.out.println("Data: " + ByteArrayHelpers.getByteArrayString(payloadData)); // } // // if (dataSize == payloadData.length) // { // byte[] concatData = ByteArrayHelpers.concat(preambleData, payloadData); // networkDelegate.handlePacket(concatData); // } // state = ListenerState.PREAMBLE; // break; // // default: // break; // } } catch (SerialPortException e) { if (SerialConnection.DEBUG_MSGS) { e.printStackTrace(); } } catch (SerialPortTimeoutException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }