/** * 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.EEprom; import java.io.DataInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.LinkedHashMap; import java.util.Vector; import java.util.logging.Logger; import de.lazyzero.kkMulticopterFlashTool.KKMulticopterFlashTool; public class EEprom { static boolean DEBUG = false; Logger logger = KKMulticopterFlashTool.getLogger(); private Vector<Short> eeprom = new Vector<Short>(); private String ifileName = KKMulticopterFlashTool.getTempFolder() + "tmp_i_eeprom.txt"; private String ofileName = KKMulticopterFlashTool.getTempFolder() + "tmp_o_eeprom.txt"; public EEprom() { readEEprom(this.ifileName); } public EEprom(String ifileName) { this.ifileName = ifileName; readEEprom(this.ifileName); } public EEprom(int size) { for (int i = 0; i < size; i++) { short s = Short.decode("0xff"); eeprom.add(s); if (DEBUG) System.out.println(i + " : " + s + " : " + String.format("0x%02x", s)); } } private void readEEprom(String ifileName) { String rom = new String(); try { FileInputStream fs = new FileInputStream(ifileName); DataInputStream in = new DataInputStream(fs); // BufferedReader br = new BufferedReader(new InputStreamReader(in)); int s; while ((s = in.read()) != -1) { if (DEBUG) System.out.println(s); rom = rom.concat(s + ","); } in.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } decodeRawEEprom(rom); } /** * writes the eeprom content to the default eeprom file in temp folder as RAW */ public void writeRawEEprom() { writeRawEEprom(ofileName); } /** * writes the eeprom content to the default eeprom file in temp folder as HEX */ public void writeEEprom() { writeEEprom(ofileName); } private void writeEEprom(String ofileName) { try { FileOutputStream fos = new FileOutputStream(ofileName); String cells = encodeEEprom(); fos.write(cells.getBytes()); fos.write(System.getProperty("line.separator").getBytes()); fos.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void writeRawEEprom(String ofileName) { try { FileOutputStream fos = new FileOutputStream(ofileName); byte[] cells = encodeRawEEprom(); fos.write(cells); fos.write(System.getProperty("line.separator").getBytes()); fos.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void decodeRawEEprom(String rom) { logger.info("decode raw eeprom"); eeprom = new Vector<Short>(); String[] cells = rom.split(","); System.out.println("cells: " + cells.length); for (int i = 0; i < cells.length; i++) { short s = Short.decode(cells[i]); eeprom.add(s); if (DEBUG) System.out.println(i + " : " + s + " : " + String.format("0x%02x", s)); } System.out.println(); } private void decodeEEprom(String rom) { eeprom = new Vector<Short>(); String[] cells = rom.split(","); for (int i = 0; i < cells.length; i++) { short s = Short.decode(cells[i]); eeprom.add(s); if (DEBUG) System.out.println(i + " : " + s + " : " + String.format("0x%02x", s)); } } private byte[] encodeRawEEprom() { byte[] cells = new byte[eeprom.size()]; for (int i = 0; i < eeprom.size(); i++) { cells[i] =(byte)(eeprom.get(i) & 0xff); } return cells; } private String encodeEEprom() { String cells = ""; for (int i = 0; i < eeprom.size(); i++) { cells = cells.concat(String.format("0x%02x", eeprom.get(i))); if (i < eeprom.size()-1) { cells = cells.concat(","); } } return cells; } public Short[] getCells(int startAddress, int length) { Short[] s = new Short[length]; for (int i = 0; i < length; i++) { s[i] = eeprom.get(i+startAddress); } return s; } /** * @param args */ public static void main(String[] args) { DEBUG = true; EEprom eeprom = new EEprom(); // EEprom eeprom = new EEprom("./eeprom_readout/eeprom.txt"); // eeprom.readEEprom("./eeprom_readout/eeprom.txt"); // System.out.println(eeprom.encodeEEprom()); // // System.out.println(eeprom.eeprom.size()); // eeprom.writeEEprom("./eeprom_readout/o_eeprom.txt"); LinkedHashMap<Short, String> dataMapping = new LinkedHashMap<Short, String>(); dataMapping.put((short) 127, "true"); dataMapping.put((short) 255, "false"); EEpromBooleanItem eeDataItem = new EEpromBooleanItem(eeprom, "Yaw gyro", 0, 1, EEpromBooleanItem.BOOLEAN, dataMapping , "invert"); try { System.out.println(eeDataItem.getValue()); } catch (EEpromValueException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public String getOutputFile() { return ofileName; } public static String getDefaultInputFile() { return KKMulticopterFlashTool.getTempFolder() + "tmp_i_eeprom.txt"; } public void setCell(int index, Short value) { eeprom.set(index, value); } public static String getDefaultOutputFile() { return KKMulticopterFlashTool.getTempFolder() + "tmp_o_eeprom.txt"; } }