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();
      }
    }
  }