0b581307b1bbee4b41ffdfacaeb9e769a63a7c0b
[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     public ChipImpl() {
8         super();
9         doReset();
10     }
11
12     public void doReset() {
13         flush();
14
15         buffered(false);
16         flush();
17
18         dbangmode(dmask);
19         flush();
20
21         clk(false);
22         flush();
23
24         data(false);
25         flush();
26
27         con(false);
28         flush();
29
30         reset(false);
31         flush();
32         try { Thread.sleep(200); } catch (Exception e) { }
33
34         reset(true);
35         flush();
36         try { Thread.sleep(200); } catch (Exception e) { }
37
38         dmask &= ~(1<<7);
39         dbangmode(dmask);
40         flush();
41     }
42
43     int porte = 0;
44     public void porte(int pin, boolean b) {
45         porte = (~(1<<pin)) | (b ? (1<<pin) : 0);
46         if (pin==4) {
47             dbang(2, b);
48             flush();
49         }
50     }
51
52     public void config(boolean bit) { config(bit?1:0, 1); }
53     public void config(int dat) { config(dat, 8); }
54     public void config(int dat, int numbits) {
55         for(int i=(numbits-1); i>=0; i--) {
56             boolean bit = (dat & (1<<i)) != 0;
57             data(bit);
58             clk(true);
59             clk(false);
60         }
61     }
62
63     protected int dmask =
64         //(1<<0) |
65         (1<<1) |
66         (1<<2) |
67         //(1<<3) |
68         //(1<<4) |
69         (1<<5) |
70         (1<<6) |
71         (1<<7);
72
73     public void reset(boolean on) {
74         bits = on ? (1<<1) : 0;
75         uart();
76     }
77     public void avrrst(boolean on) { dbang(7, on); }
78     public void clk(boolean on)    { dbang(6, on); }
79     public void data(boolean on)   { dbang(5, on); }
80
81     public boolean initErr()       { flush(); return (readPins() & (1<<4))!=0; }
82     public boolean con() {
83         flush();
84         dmask &= ~(1<<0);
85         dbangmode(dmask);
86         return (readPins() & (1<<0)) != 0;
87     }
88     public void con(boolean on) {
89         flush();
90         dmask |= (1<<0);
91         dbangmode(dmask);
92         dbang(0, on);
93     }
94 }