package com.dreikraft.axbo;
/**
* Supported operating systems.
*
* @author jan.illetschko@3kraft.com
*/
public enum OS implements Arch {
/**
* Mac OS X.
*/
Mac("/dev/tty.SLAB_USBtoUART") {
/**
* All Mac OSX architecture variants are supported (ppc, x86, x86_64)
*/
@Override
public boolean isSupported() {
return true;
}
},
/**
* All Windows variants.
*/
Windows("COM1") {
/**
* The native rxtx libraries (2.2pre2) currently only support 32-bit
* libraries on windows.
*/
@Override
public boolean isSupported() {
return BITS.BITS_32.toString().equals(osBits);
}
},
/**
* Linux.
*/
Linux("/dev/ttyUSB0") {
/**
* The native rxtx libraries (2.2pre2) currently only support 32-bit
* libraries on linux.
*/
@Override
public boolean isSupported() {
return BITS.BITS_32.toString().equals(osBits);
}
},
/**
* Anything else.
*/
Unsupported("None") {
@Override
public boolean isSupported() {
return false;
}
};
/**
* 32- or 64-bit.
*/
enum BITS {
/**
* 32-bit.
*/
BITS_32("32"),
/**
* 64-bit.
*/
BITS_64("64"),
/**
* Bits unknown.
*/
BITS_UNKNOWN("unknown");
private String bits;
private BITS(final String bits) {
this.bits = bits;
}
/**
* {@inheritDoc}
*/
@Override
public String toString() {
return bits;
}
}
private static final String OS_NAME_PROPERTY = "os.name";
private static final String OS_BITS_PROPERTY = "sun.arch.data.model";
private static final String osName = System.getProperty(OS_NAME_PROPERTY);
private static final String osBits = System.getProperty(OS_BITS_PROPERTY);
private final String defaultPort;
private OS(final String defaultPort) {
this.defaultPort = defaultPort;
}
/**
* Returns the default serial port name for this operating system.
*
* @return
*/
public String getDefaultPort() {
return defaultPort;
}
/**
* Determines the current operating system.
*
* @return the current operating system or Unsupported.
*/
public static OS get() {
if (OS.Mac.isCurrent()) {
return Mac;
} else if (OS.Windows.isCurrent()) {
return Windows;
} else if (OS.Linux.isCurrent()) {
return Linux;
}
return Unsupported;
}
/**
* Checks if the current operating system matches this os instance.
*
* @return true if the OS matches the current operating system.
*/
public boolean isCurrent() {
return osName.startsWith(name());
}
}