content: package org.flashtool.system;
  
  import java.util.Enumeration;
  import java.util.Properties;
  
  import org.flashtool.jna.adb.AdbUtility;
  import lombok.extern.slf4j.Slf4j;
  
  @Slf4j
  public class DeviceIdent {
  
  	private String pid="";
  	private String vid="";
  	private String devicepath="";
  	private Properties devid;
  	private int maxsize=0;
  	private String serial = "";
  	private String driverdesc = "";
  	private int drivermajor=0;
  	private int driverminor=0;
  	private int drivermili=0;
  	private int drivermicro=0;
  	
  	public DeviceIdent() {
  		pid="";
  		vid="";
  		devicepath="";
  		devid=new Properties();
  	}
  	
  	public DeviceIdent(DeviceIdent id) {
  		devid=new Properties();
  		Enumeration<Object> e = id.getIds().keys();
  		while (e.hasMoreElements()) {
  			String key = (String)e.nextElement();
  			addDevId(key);
  			devid.setProperty(key, id.getIds().getProperty(key));
  		}
  		addDevPath(id.getDevPath());
  	}
  
  	public void addDevPath(String path) {
  		if (path.length()>0)
  			devicepath=path;
  	}
  	
  	public String getDevPath() {
  		return devicepath;
  	}
  	
  	public void setDriver(String desc, int maj, int min,int mil, int mic) {
  		driverdesc = desc;
  		drivermajor=maj;
  		driverminor=min;
  		drivermili=mil;
  		drivermicro=mic;
  	}
  	
  	public String getDriverDescription() {
  		return driverdesc;
  	}
  	
  	public int getDriverMajor() {
  		return drivermajor;
  	}
  	
  	public int getDriverMinor() {
  		return driverminor;
  	}
  	
  	public int getDriverMili() {
  		return drivermili;
  	}
  
  	public int getDriverMicro() {
  		return drivermicro;
  	}
  	
  	public void addDevId(String device) {
  		if (device.length()>maxsize) maxsize=device.length();
  		vid=device.substring(device.indexOf("VID_")+4, device.indexOf("PID_")-1);
  		int begin = device.indexOf("PID_")+4;
  		pid=device.substring(begin,begin+4);
  		if (!device.contains("MI")) {
  			serial = device.substring(begin+5,device.length());
  		}
  		devid.setProperty(device, Boolean.toString(true));
  	}
  
  	public void addDevId(String vendor, String product, String ser) {
  		vid = vendor;
  		pid = product;
  		serial = ser;
  		devid.setProperty("VID_"+vendor+"&"+"PID_"+product+"\\", "true");
  	}
  	
  	public void setDriverOk(String device,boolean status) {
  		devid.setProperty(device, Boolean.toString(status));
  	}
  
  	public String getPid() {
  		return pid;
  	}
  
  	public String getVid() {
  		return vid;
  	}
  	
  	public String getSerial() {
  		return serial;
  	}
  
  	public boolean isDriverOk() {
  		Enumeration e = devid.elements();
  		while (e.hasMoreElements()) {
  			String value = (String)e.nextElement();
  			boolean b = Boolean.parseBoolean(value);
  			if (!b) return false;
  		}
  		return true;
  	}
  	
  	public String getDeviceId() {
  		Enumeration<Object> e = devid.keys();
  		while (e.hasMoreElements()) {
  			String value = (String)e.nextElement();
  			if (!value.contains("MI")) return value;
  		}
  		return "none";
  	}
  
  	public String getStatus() {
  		if (!getVid().equals("0FCE")) return "none";
  		if (!isDriverOk()) return "notinstalled";
  		if (getPid().equals("ADDE") || getPid().equals("B00B")) {
  			if (OS.getName().equals("windows")) {
  				if (drivermajor==3 && driverminor >=1)
  					return "flash";
  				if (drivermajor>3)
  					return "flash";
  				return "flash_obsolete";
  			}
  			else return "flash";
  		}
  		if (getPid().equals("0DDE")) return "fastboot";
  		return AdbUtility.getStatus();
  	}
  	
  	public Properties getIds() {
  		return devid;
  	}
  	
  	public int getMaxSize() {
  		return maxsize;
  	}
  }
  