754b5c8bd165e351154cacd772e7157f435694d9
[slipway.git] / src / edu / berkeley / obits / device / atmel / ChipImpl.java
1 package edu.berkeley.obits.device.atmel;
2 import com.ftdi.usb.*;
3 import java.io.*;
4
5 public class ChipImpl extends FtdiChip implements Chip {
6
7     private int dmask =
8         //(1<<0) |
9         (1<<1) |
10         (1<<2) |
11         //(1<<3) |
12         //(1<<4) |
13         (1<<5) |
14         (1<<6) |
15         (1<<7);
16
17     public ChipImpl() {
18         super();
19         doReset();
20     }
21
22     public void doReset() {
23         /*
24 dmask =
25         (1<<0) |
26         (1<<1) |
27         (1<<2) |
28         //(1<<3) |
29         //(1<<4) |
30         (1<<5) |
31         (1<<6) |
32         (1<<7);
33         */
34
35         flush();
36         //purge();
37
38         dbangmode(dmask);
39         flush();
40
41         clk(false);
42         data(false);
43         con(false);
44         flush();
45         //try { Thread.sleep(500); } catch (Exception e) { }
46
47         reset(false);
48         flush();
49         try { Thread.sleep(500); } catch (Exception e) { }
50
51         reset(true);
52         flush();
53         try { Thread.sleep(500); } catch (Exception e) { }
54         
55         purge();
56         dbangmode(dmask);
57         flush();
58     }
59
60     int porte = 0;
61     public void porte(int pin, boolean b) {
62         porte = (~(1<<pin)) | (b ? (1<<pin) : 0);
63         if (pin==4) {
64             dbang(2, b);
65             flush();
66         }
67     }
68
69     public void config(boolean bit) { config(bit?1:0, 1); }
70     public void config(int dat) { config(dat, 8); }
71     public void config(int dat, int numbits) {
72         for(int i=(numbits-1); i>=0; i--) {
73             boolean bit = (dat & (1<<i)) != 0;
74             data(bit);
75             clk(true);
76             clk(false);
77         }
78     }
79
80     public void reset(boolean on) {
81         bits = on ? (1<<1) : 0;
82         uart();
83     }
84     public void avrrst(boolean on) { dbang(7, on); }
85     public void clk(boolean on)    { dbang(6, on); }
86     public void data(boolean on)   { dbang(5, on); }
87
88     public boolean initErr()       { flush(); return (readPins() & (1<<4))!=0; }
89     public boolean con() {
90         flush();
91         dmask &= ~(1<<0);
92         dbangmode(dmask);
93         return (readPins() & (1<<0)) != 0;
94     }
95     public void con(boolean on) {
96         flush();
97         dmask |= (1<<0);
98         dbangmode(dmask);
99         dbang(0, on);
100     }
101 }