/*******************************************************************************
* Copyright (c) 2008, 2011 Thomas Holland (thomas@innot.de) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Thomas Holland - initial API and implementation
*******************************************************************************/
package de.innot.avreclipse.core.targets.tools;
import de.innot.avreclipse.core.targets.ClockValuesGenerator;
import de.innot.avreclipse.core.targets.HostInterface;
import de.innot.avreclipse.core.targets.IProgrammer;
import de.innot.avreclipse.core.targets.TargetInterface;
import de.innot.avreclipse.core.targets.ClockValuesGenerator.ClockValuesType;
/**
* Enumeration of all Programmers supported by avarice.
* <p>
* Unlike avrdude the avarice application has no command line argument to list all supported
* programmers, so this list is hard-coded on the assumption that avarice won't get support for new
* devices to often.
* </p>
* <p>
* This enumeration implements the {@link IProgrammer} interface, so that its members can be
* directly used by {@link AvariceTool}.
* </p>
*
* @author Thomas Holland
* @since 2.4
*
*/
public enum AvariceProgrammers implements IProgrammer {
dragon_jtag("Atmel AVR Dragon in JTAG mode") {
@Override
public HostInterface[] getHostInterfaces() {
return new HostInterface[] { HostInterface.USB };
}
@Override
public TargetInterface getTargetInterface() {
return TargetInterface.JTAG;
}
@Override
public int[] getTargetInterfaceClockFrequencies() {
return ClockValuesGenerator.getValues(ClockValuesType.JTAG2);
}
@Override
public boolean isDaisyChainCapable() {
return true;
}
@Override
public boolean hasParent() {
return false;
}
},
dragon_dw("Atmel AVR Dragon in debugWire mode") {
@Override
public HostInterface[] getHostInterfaces() {
return new HostInterface[] { HostInterface.USB };
}
@Override
public TargetInterface getTargetInterface() {
return TargetInterface.DW;
}
@Override
public int[] getTargetInterfaceClockFrequencies() {
return ClockValuesGenerator.getValues(ClockValuesType.JTAG2);
}
@Override
public boolean isDaisyChainCapable() {
return false;
}
@Override
public boolean hasParent() {
return false;
}
},
jtag1("Atmel JTAG ICE (mkI)") {
@Override
public HostInterface[] getHostInterfaces() {
// AVRDUDE 6.x says that this is a "serial" connection_type.
//return new HostInterface[] { HostInterface.SERIAL, HostInterface.USB };
return new HostInterface[] { HostInterface.SERIAL };
}
@Override
public TargetInterface getTargetInterface() {
return TargetInterface.JTAG;
}
@Override
public int[] getTargetInterfaceClockFrequencies() {
return ClockValuesGenerator.getValues(ClockValuesType.JTAG1);
}
@Override
public boolean isDaisyChainCapable() {
return true;
}
@Override
public boolean hasParent() {
return false;
}
},
jtag2("Atmel JTAG ICE mkII") {
@Override
public HostInterface[] getHostInterfaces() {
// AVRDUDE 6.x says that this is a "usb" connection_type.
//return new HostInterface[] { HostInterface.SERIAL, HostInterface.USB };
return new HostInterface[] { HostInterface.USB };
}
@Override
public TargetInterface getTargetInterface() {
return TargetInterface.JTAG;
}
@Override
public int[] getTargetInterfaceClockFrequencies() {
return ClockValuesGenerator.getValues(ClockValuesType.JTAG2);
}
@Override
public boolean isDaisyChainCapable() {
return true;
}
@Override
public boolean hasParent() {
return false;
}
},
jtag2dw("Atmel JTAG ICE mkII in debugWire mode") {
@Override
public HostInterface[] getHostInterfaces() {
// AVRDUDE 6.x says that this is a "usb" connection_type.
//return new HostInterface[] { HostInterface.SERIAL, HostInterface.USB };
return new HostInterface[] { HostInterface.USB };
}
@Override
public TargetInterface getTargetInterface() {
return TargetInterface.DW;
}
@Override
public int[] getTargetInterfaceClockFrequencies() {
return ClockValuesGenerator.getValues(ClockValuesType.JTAG2);
}
@Override
public boolean isDaisyChainCapable() {
return false;
}
@Override
public boolean hasParent() {
return false;
}
};
private String fDescription;
private AvariceProgrammers(String description) {
fDescription = description;
}
/*
* (non-Javadoc)
* @see de.innot.avreclipse.core.targets.IProgrammer#getId()
*/
public String getId() {
return this.name();
}
/*
* (non-Javadoc)
* @see de.innot.avreclipse.core.targets.IProgrammer#getDescription()
*/
public String getDescription() {
return fDescription;
}
/*
* (non-Javadoc)
* @see de.innot.avreclipse.core.targets.IProgrammer#getAdditionalInfo()
*/
public String getAdditionalInfo() {
// Avarice does not have any additional infos.
return "";
}
/*
* (non-Javadoc)
* @see de.innot.avreclipse.core.targets.IProgrammer#getHostInterfaces()
*/
public abstract HostInterface[] getHostInterfaces();
/*
* (non-Javadoc)
* @see de.innot.avreclipse.core.targets.IProgrammer#getTargetInterface()
*/
public abstract TargetInterface getTargetInterface();
/*
* (non-Javadoc)
* @see de.innot.avreclipse.core.targets.IProgrammer#getTargetInterfaceClockFrequencies()
*/
public abstract int[] getTargetInterfaceClockFrequencies();
/*
* (non-Javadoc)
* @see de.innot.avreclipse.core.targets.IProgrammer#isDaisyChainCapable()
*/
public abstract boolean isDaisyChainCapable();
}