@Override
	public void startTask(RXTXPort port) throws TooManyListenersException
	{
		super.startTask(port);
		port.enableReceiveTimeout(500);
		port.enableReceiveThreshold(14);
		
		OutputStream out = port.getOutputStream();
		InputStream in = port.getInputStream();
		
		boolean statusOK = false;
		int retries = 5;
		while((!statusOK) && retries > 0)
		{
			try
			{
				logger.log("Изпращане на команда за извличане на единичен запис", LogLevel.DEBUG);
				out.write(ProtocolConstants.MARK_DEBUG);
				out.write(ProtocolConstants.CMD_DEBUG_DUMP.getBytes());
				
				Thread.sleep(100); // waste some time
				in.read(); // the record mark
				int len = in.read();
				int calcCheck = len;
				int buf = in.read();
				int address = buf << 8;
				calcCheck += buf;
				buf = in.read();
				address += buf;
				calcCheck += buf;
				int type = in.read();
				calcCheck += type;
				byte[] data = new byte[len];
				if(type == Type.DATA.getCode())
				{
					for(int i = 0; i < len; i++)
					{
						data[i] = (byte) in.read();
						calcCheck += data[i];
					}
				}
				int chkSum = in.read();
				calcCheck = (0x100 - (0xFF & calcCheck)) & 0xFF;
				if(chkSum != calcCheck)
					logger.log("Чексумите не съвпадат. Повторно извикване.", LogLevel.DEBUG);
				else
				{
					statusOK = true;
					if(type == Type.DATA.getCode())
						logger.log("В паметта на микроконтролера е записано " + new DataRecord(address, data, (byte) chkSum).toHEXString(), LogLevel.SUCCESS);
					else
						logger.log("В паметта на микроконтролера е записано " + new EndOfFileRecord().toHEXString(), LogLevel.SUCCESS);
				}
				retries--;
				
			} catch (IOException e)
			{
				logger.log("Възникна грешка при извличането на записа", LogLevel.ERRORS);
				logger.log(e.getMessage(), LogLevel.DEBUG);
				e.printStackTrace();
			} catch (InterruptedException e){}
		}
		if(!statusOK)
			logger.log("Отказ след 5 последователни неуспешни опита", LogLevel.ERRORS);
		taskComplete();
	}