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