@Override
	public void startTask(RXTXPort port) throws TooManyListenersException
	{
		progress.setVisible(true);
		super.startTask(port);
		
		OutputStream out = port.getOutputStream();
		InputStream in = port.getInputStream();
		
		
		try
		{
			port.enableReceiveThreshold(3);
			port.enableReceiveTimeout(500);
			byte[] buf = new byte[3];
			boolean statusOK = false;
			int retries = 5;
			String received;
			while((!statusOK) && retries > 0)
			{
				//send erase signal
				out.write(ProtocolConstants.MARK_ERASE);
				out.write(ProtocolConstants.CMD_ERASE.getBytes());
				logger.log("Командата за изтриване е изпратена", LogLevel.DEBUG);
				
				//give it some time to make sure it is read. May be just a time loss?
				Thread.sleep(100);
				
				//wait for acknowledge or unknown
				in.read(buf);
				received = new String(buf).toUpperCase();
				if(!received.equals(ProtocolConstants.CMD_ACKNOWLEDGE.toUpperCase()))
					logger.log("Командата за изтриване не е разбрана. Повтаряне", LogLevel.DEBUG);
				else
				{
					statusOK = true;
					logger.log("Командата за изтриване е приета", LogLevel.DEBUG);
				}
				retries--;
			}
			if(!statusOK)
			{
				logger.log("Прекратяване след 5 неуспешни опита", LogLevel.ERRORS);
				taskComplete();
				return;
			}
			progress.setProgressText("Установяване на резултата от изтриването (3 s timeout)");
			//wait for success, error or timeout
			port.enableReceiveTimeout(3000);
			int read = in.read(buf);
			received = new String(buf).toUpperCase();
			if(read <= 0)
				logger.log("Командата за изтриване е приета, но крайния резултат е неясен. Проверете", LogLevel.ERRORS);
			else if(received.equals(ProtocolConstants.CMD_SUCCESS))
				logger.log("Паметта на устройството е успешно изтрита", LogLevel.SUCCESS);
			else if(received.equals(ProtocolConstants.CMD_ERROR))
				logger.log("Командата за изтриване е приета, но възникна грешка при изтриването", LogLevel.ERRORS);
			else
				logger.log("Командата за изтриване е приета. Вместо статус съобщение се получи " + received, LogLevel.ERRORS);
		} catch (IOException e)
		{
			logger.log("Възникна грешка при комуникацията относно изтриване на ROM памет", LogLevel.ERRORS);
			logger.log(e.getMessage(), LogLevel.DEBUG);
			e.printStackTrace();
		} catch (InterruptedException e) {}
		finally
		{
			taskComplete();
		}
	}