/**
* KKMulticopterFlashTool, a avrdude GUI for flashing KK boards and other
* equipment.
* Copyright (C) 2011 Christian Moll
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.lazyzero.kkMulticopterFlashTool.utils;
import java.io.IOException;
import java.util.LinkedHashMap;
/**
* Should work for all ATmega 168 and 328 based Arduino
*
* @author Christian Moll
*
*/
public class ArduinoUSBLinker {
public static String D2 = "D2";
public static String D3 = "D3";
public static String D4 = "D4";
public static String D5 = "D5";
public static String D6 = "D6";
public static String D7 = "D7";
public static String D8 = "D8";
public static String D9 = "D9";
public static String D10 = "D10";
public static String D11 = "D11";
public static String D12 = "D12";
public static String D13 = "D13";
public static String A0 = "A0";
public static String A1 = "A1";
public static String A2 = "A2";
public static String A3 = "A3";
public static String A4 = "A4";
public static String A5 = "A5";
private static String command_base = "$M<";
private static String command_pin = command_base + "P";
private static String command_signalRate = command_base + "B";
private static String command_baudrate = command_base + "R";
private static String command_write2EEPROM = command_base + "W";
private int default_baud = 19200;
private int baud = default_baud;
private int default_signalrate = 32;
private int signalrate = default_signalrate;
private SerialWriter serialWriter;
public static LinkedHashMap<String, Integer> pins = new LinkedHashMap<String, Integer>();
public ArduinoUSBLinker() {
init();
initPins();
}
private void init() {
pins.put( D2, 18);
pins.put( D3, 19);
pins.put( D4, 20);
pins.put( D5, 21);
pins.put( D6, 22);
pins.put( D7, 23);
pins.put( D8, 0);
pins.put( D9, 1);
pins.put(D10, 2);
pins.put(D11, 3);
pins.put(D12, 4);
pins.put(D13, 5);
pins.put( A0, 8);
pins.put( A1, 9);
pins.put( A2, 10);
pins.put( A3, 11);
pins.put( A4, 12);
pins.put( A5, 13);
}
/**
* Function switch thru all pins to init them as programming pins. This will keep attached ESC in bootloader.
*/
private void initPins() {
for (Integer pin : pins.values()) {
try {
serialWriter.sendCommand(command_pin + pin);
serialWriter.sendCommand(command_write2EEPROM);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void setPin(String pin) throws IOException {
serialWriter.sendCommand(command_pin + pins.get(pin));
serialWriter.sendCommand(command_write2EEPROM);
}
public SerialWriter getSerialWriter() {
return serialWriter;
}
public void setSerialWriter(SerialWriter serialWriter) {
this.serialWriter = serialWriter;
}
public void setBaud(int baud) throws IOException {
serialWriter.sendCommand(command_baudrate + baud);
serialWriter.sendCommand(command_write2EEPROM);
this.baud = baud;
}
public int getBaud() {
return baud;
}
public void setSignalrate(int signalrate) throws IOException {
if (signalrate > 4 && signalrate < 136) {
serialWriter.sendCommand(command_signalRate + signalrate);
serialWriter.sendCommand(command_write2EEPROM);
this.signalrate = signalrate;
return;
}
this.signalrate = default_signalrate;
}
public int getSignalrate() {
return signalrate;
}
}