public Command newInstance(byte[] b, int start, int len) throws CRCException {
		if(len<8) {
			return null;
		}
		if(b[start]!=AbstractCommand.CMD_START){
			return null;
		}
		switch (b[start+7]&0xff) {
			case Ping.CMD_PING:
				return new Ping(b,start,len);
			case Reset.CMD_RESET:
				return new Reset(b,start,len);
			case ResetAck.CMD_RESETACK:
				return new ResetAck(b,start,len);
			case AbstractAction.CMD_ACTION:
				return _factory.newInstance(b,start,len); 
			case WindowFull.CMD_WINDOWFULL:
				return new WindowFull(b,start,len);
			case SequenceError.CMD:
				return new SequenceError(b,start,len);
			default:
				return null;
		}
		
	}