ec48f7bc4cccd5fba68bfa3b87449c6bcbc5d39d
[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     protected 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         flush();
25
26         dbangmode(dmask);
27         flush();
28
29         clk(false);
30         data(false);
31         con(false);
32         flush();
33
34         reset(false);
35         flush();
36         try { Thread.sleep(500); } catch (Exception e) { }
37
38         reset(true);
39         flush();
40         try { Thread.sleep(500); } catch (Exception e) { }
41
42         dbangmode(dmask);
43         flush();
44     }
45
46     int porte = 0;
47     public void porte(int pin, boolean b) {
48         porte = (~(1<<pin)) | (b ? (1<<pin) : 0);
49         if (pin==4) {
50             dbang(2, b);
51             flush();
52         }
53     }
54
55     public void config(boolean bit) { config(bit?1:0, 1); }
56     public void config(int dat) { config(dat, 8); }
57     public void config(int dat, int numbits) {
58         for(int i=(numbits-1); i>=0; i--) {
59             boolean bit = (dat & (1<<i)) != 0;
60             data(bit);
61             clk(true);
62             clk(false);
63         }
64     }
65
66     public void reset(boolean on) {
67         bits = on ? (1<<1) : 0;
68         uart();
69     }
70     public void avrrst(boolean on) { dbang(7, on); }
71     public void clk(boolean on)    { dbang(6, on); }
72     public void data(boolean on)   { dbang(5, on); }
73
74     public boolean initErr()       { flush(); return (readPins() & (1<<4))!=0; }
75     public boolean con() {
76         flush();
77         dmask &= ~(1<<0);
78         dbangmode(dmask);
79         return (readPins() & (1<<0)) != 0;
80     }
81     public void con(boolean on) {
82         flush();
83         dmask |= (1<<0);
84         dbangmode(dmask);
85         dbang(0, on);
86     }
87 }