@Override public boolean isInitialized(IByteQueue byteQueue) { if (byteQueue.size() < 1) return false; byte firstByteInQueue = byteQueue.deque(); return firstByteInQueue == ACK; }
@Override public IByteQueue getByteQueueForReset() { IByteQueue byteQueueForReset = new ByteQueue(); byteQueueForReset.enque(0x04); return byteQueueForReset; }
@Override public boolean isReseted(IByteQueue byteQueue) { if (byteQueue.size() < 2) return false; byte firstByteInQueue = byteQueue.deque(); byte secondByteInQueue = byteQueue.deque(); return firstByteInQueue == ACK && secondByteInQueue == HEALTH_PING; }
@Override public IByteQueue getByteQueueForInit() { IByteQueue byteQueueForInit = new ByteQueue(); byteQueueForInit.enque(0x16); byteQueueForInit.enque(0x00); byteQueueForInit.enque(0x00); return byteQueueForInit; }
private void ensureNextByteIs(byte expected) { byte nextByte = byteQueueToParse.deque(); if (nextByte != expected) { throw new RuntimeException( String.format("Parse error. Expected: %02X, Found: %02X", expected, nextByte)); } }
private byte[] parseDataBytes(int dataSize) { byte[] dataBytes = new byte[dataSize]; for (int pos = 0; pos < dataSize; pos++) { dataBytes[pos] = byteQueueToParse.deque(); } return dataBytes; }
private byte getChecksumOf(IByteQueue byteQueue) { Byte result = 0x00; byte[] bytes = byteQueue.toByteArray(); for (int pos = 0; pos < bytes.length; pos++) { if (pos > 0) { result = (byte) (result + bytes[pos]); } } return result; }
private void addCommandRequestTo(IByteQueue byteQueue, byte command, IByteQueue parameterBytes) { byteQueue.enque(START_BYTE); byteQueue.enque(getRequestSize(parameterBytes)); byteQueue.enque(REQUEST_TELEGRAM_TYPE); byteQueue.enque(command); byteQueue.enqueAll(parameterBytes); byteQueue.enque(getChecksumOf(byteQueue)); }
private byte expectedLength() { return (byte) (byteQueueToParse.size() - 2); }
private int parseAddress() { byte highByte = byteQueueToParse.deque(); byte lowByte = byteQueueToParse.deque(); return getAddressFrom(highByte, lowByte); }
private int parseDataSize() { return byteQueueToParse.deque(); }
private IByteQueue getByteQueueForCalcCheckSum() { byte[] allBytesFromQueue = byteQueueToParse.toByteArray(); return new ByteQueue(getPartOfArray(allBytesFromQueue, 1, allBytesFromQueue.length - 1)); }
private byte getRequestSize(IByteQueue parameterBytes) { return (byte) (parameterBytes.size() + 2); }