1 package edu.berkeley.obits.device.atmel;
3 import edu.berkeley.obits.*;
4 import org.ibex.util.Log;
9 public class FtdiBoard extends Board {
12 System.load(new File("build/"+System.mapLibraryName("Ftdi")).getAbsolutePath());
15 private final ChipImpl chip;
16 private final InputStream in;
17 private final OutputStream out;
19 public InputStream getInputStream() { return in; }
20 public OutputStream getOutputStream() { return out; }
22 public FtdiBoard() throws Exception {
23 chip = new ChipImpl();
26 boot(new InputStreamReader(new FileInputStream("bitstreams/usbdrone.bst")));
27 System.out.println(" pins: " + pad(Integer.toString(chip.readPins()&0xff,2),8));
29 in = new BufferedInputStream(chip.getInputStream());
30 out = new BufferedOutputStream(chip.getOutputStream());
31 for(int i=0; i<255; i++) out.write(0);
39 public void boot(Reader r) throws Exception {
45 d.config(Integer.parseInt("10110111", 2), 8);
48 System.out.println("good preamble => " + pin + " " + (pin ? green("good") : red("BAD")));
53 d.config(Integer.parseInt("10110111", 2), 8);
56 System.out.println("bad preamble #2 => " + pin + " " + (pin ? red("BAD") : green("good")));
61 d.config(Integer.parseInt("11110111", 2), 8);
64 System.out.println("bad preamble #1 => " + pin + " " + (pin ? red("BAD") : green("good")));
71 //d.config(Integer.parseInt("10110111", 2));
74 BufferedReader br = new BufferedReader(r);
78 //System.out.println("cts="+""+" pins=" + pad(Integer.toString(d.readPins()&0xff,2),8));
80 String s = br.readLine();
82 int in = Integer.parseInt(s, 2);
84 for(int i=7; i>=0; i--) {
85 d.config((((in & 0xff) & (1<<i))!=0)?1:0, 1);
86 boolean init = true; // d.initErr()
87 if (bytes < 100 || (bytes % 1000)==0) {
90 System.out.print("wrote " + bytes + " bytes, init="+init+" \r");
93 throw new RuntimeException("initialization failed at byte " + bytes + ", bit " + i);
99 throw new RuntimeException("initialization failed at " + bytes);
100 //System.out.println("cts="+""+" pins=" + pad(Integer.toString(d.readPins()&0xff,2),8));
103 for(int i=0; i<100; i++) {
106 throw new RuntimeException("initialization failed at " + bytes);
107 try { Thread.sleep(20); } catch (Exception e) { }
108 System.out.print("cts="+""+" pins=" + pad(Integer.toString(d.readPins()&0xff,2),8)+" \r");
112 System.out.println();
113 System.out.println("avr reset => false");
115 try { Thread.sleep(500); } catch (Exception e) { }
116 //System.out.println("cts="+""+" pins=" + pad(Integer.toString(d.readPins()&0xff,2),8));
118 //((ChipImpl)d).avr();
120 //System.out.println("avr reset => true");
125 //try { Thread.sleep(500); } catch (Exception e) { }
126 //System.out.println("cts="+""+" pins=" + pad(Integer.toString(d.readPins()&0xff,2),8));
129 public static String pad(String s, int i) {
130 if (s.length() >= i) return s;
131 return "0"+pad(s, i-1);
133 public static String red(Object o) { return "\033[31m"+o+"\033[0m"; }
134 public static String green(Object o) { return "\033[32m"+o+"\033[0m"; }