OpenCores
URL https://opencores.org/ocsvn/adv_debug_sys/adv_debug_sys/trunk

Subversion Repositories adv_debug_sys

[/] [adv_debug_sys/] [trunk/] [Software/] [AdvancedWatchpointControl/] [src/] [advancedWatchpointControl/] [mainControl.java] - Blame information for rev 51

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 51 nyawn
package advancedWatchpointControl;
2
 
3
import java.io.IOException;
4
import java.util.LinkedList;
5
import java.util.List;
6
 
7
 
8
 
9
public class mainControl {
10
 
11
        public enum connectionStatus { NOT_CONNECTED, CONNECTING, CONNECTED, CONNECT_ERROR }
12
 
13
        private targetDebugRegisterSet regSet = null;
14
        private networkSystem netSys = null;
15
        private targetTransactor transactor = null;
16
        private rspCoder rsp = null;
17
        // Yes, there really need to have three different observer interfaces,
18
        // in case a single UI class wants to be more than one.
19
        private List<RegisterObserver> registerObserverList = null;
20
        private List<NetworkStatusObserver> networkStatusObserverList = null;
21
        private List<LogMessageObserver> logmsgObserverList = null;
22
        private String networkStatus = "";
23
        private String logMessage = "";
24
 
25
        public mainControl() {
26
                registerObserverList = new LinkedList<RegisterObserver>();
27
                networkStatusObserverList = new LinkedList<NetworkStatusObserver>();
28
                logmsgObserverList = new LinkedList<LogMessageObserver>();
29
                regSet = new targetDebugRegisterSet();  // Create the object to hold the debug registers
30
                netSys = new networkSystem(this);
31
                rsp = new rspCoder(netSys);
32
                transactor = new targetTransactor(rsp);
33
        }
34
 
35
        public void setNetworkSystem(networkSystem ns) {
36
                netSys = ns;
37
        }
38
 
39
        public void registerForRegsetUpdates(RegisterObserver obs) {
40
                registerObserverList.add(obs);
41
        }
42
 
43
        public void registerForNetworkStatusUpdates(NetworkStatusObserver obs) {
44
                networkStatusObserverList.add(obs);
45
        }
46
 
47
        public void registerForLogMessages(LogMessageObserver obs) {
48
                logmsgObserverList.add(obs);
49
        }
50
 
51
        public targetDebugRegisterSet getRegSet() {
52
                return regSet;
53
        }
54
 
55
        public void doNetworkConnect(String serverHostname, int port) {
56
                if(netSys != null) {
57
                        netSys.connect(serverHostname, port);
58
                }
59
        }
60
 
61
        public synchronized void doReadAllRegisters() {
62
                try {  // Any target interaction may throw an IOException.
63
 
64
                        if(transactor.isTargetRunning()) {
65
                                setLogMessage("Cannot read registers while target is running");
66
                                return;
67
                        }
68
 
69
                        // get all (debug) registers (we use) from the target
70
                        regSet.setDCR(0, transactor.readRegister(targetDebugRegisterSet.regType.DCR0));
71
                        regSet.setDCR(1, transactor.readRegister(targetDebugRegisterSet.regType.DCR1));
72
                        regSet.setDCR(2, transactor.readRegister(targetDebugRegisterSet.regType.DCR2));
73
                        regSet.setDCR(3, transactor.readRegister(targetDebugRegisterSet.regType.DCR3));
74
                        regSet.setDCR(4, transactor.readRegister(targetDebugRegisterSet.regType.DCR4));
75
                        regSet.setDCR(5, transactor.readRegister(targetDebugRegisterSet.regType.DCR5));
76
                        regSet.setDCR(6, transactor.readRegister(targetDebugRegisterSet.regType.DCR6));
77
                        regSet.setDCR(7, transactor.readRegister(targetDebugRegisterSet.regType.DCR7));
78
                        regSet.setDVR(0, transactor.readRegister(targetDebugRegisterSet.regType.DVR0));
79
                        regSet.setDVR(1, transactor.readRegister(targetDebugRegisterSet.regType.DVR1));
80
                        regSet.setDVR(2, transactor.readRegister(targetDebugRegisterSet.regType.DVR2));
81
                        regSet.setDVR(3, transactor.readRegister(targetDebugRegisterSet.regType.DVR3));
82
                        regSet.setDVR(4, transactor.readRegister(targetDebugRegisterSet.regType.DVR4));
83
                        regSet.setDVR(5, transactor.readRegister(targetDebugRegisterSet.regType.DVR5));
84
                        regSet.setDVR(6, transactor.readRegister(targetDebugRegisterSet.regType.DVR6));
85
                        regSet.setDVR(7, transactor.readRegister(targetDebugRegisterSet.regType.DVR7));
86
                        regSet.setDWCR0(transactor.readRegister(targetDebugRegisterSet.regType.DWCR0));
87
                        regSet.setDWCR1(transactor.readRegister(targetDebugRegisterSet.regType.DWCR1));
88
                        regSet.setDMR1(transactor.readRegister(targetDebugRegisterSet.regType.DMR1));
89
                        regSet.setDMR2(transactor.readRegister(targetDebugRegisterSet.regType.DMR2));
90
                } catch (IOException e) {
91
                        setLogMessage("Network error: " + e.getMessage());
92
                        // *** TODO Disconnect?? Retry?
93
                }
94
 
95
                // Notify observers to set GUI elements accordingly
96
                try {
97
                        for(RegisterObserver obs : registerObserverList) {
98
                                obs.notifyRegisterUpdate(RegisterObserver.updateDirection.REGS_TO_GUI);
99
                        }
100
                } catch(NumberFormatException e) {
101
                        // Since we're going long->String, this should never happen.
102
                        setLogMessage("Impossible exception while updating GUI!");
103
                }
104
        }
105
 
106
        public synchronized void doWriteAllRegisters() {
107
 
108
                try {
109
 
110
                        if(transactor.isTargetRunning()) {
111
                                setLogMessage("Cannot write registers while target is running");
112
                                return;
113
                        }
114
 
115
                        // Notify observers to set registers from GUI elements
116
                        try {
117
                                for(RegisterObserver obs : registerObserverList) {
118
                                        obs.notifyRegisterUpdate(RegisterObserver.updateDirection.GUI_TO_REGS);
119
                                }
120
                        } catch (NumberFormatException e) {
121
                                // DVRs must be converted from Strings.  This may fail and throw the exception.
122
                                setLogMessage("Illegal DVR value, registers not written");
123
                                return;
124
                        }
125
 
126
                        transactor.writeRegister(targetDebugRegisterSet.regType.DCR0, regSet.getDCR(0));
127
                        transactor.writeRegister(targetDebugRegisterSet.regType.DCR1, regSet.getDCR(1));
128
                        transactor.writeRegister(targetDebugRegisterSet.regType.DCR2, regSet.getDCR(2));
129
                        transactor.writeRegister(targetDebugRegisterSet.regType.DCR3, regSet.getDCR(3));
130
                        transactor.writeRegister(targetDebugRegisterSet.regType.DCR4, regSet.getDCR(4));
131
                        transactor.writeRegister(targetDebugRegisterSet.regType.DCR5, regSet.getDCR(5));
132
                        transactor.writeRegister(targetDebugRegisterSet.regType.DCR6, regSet.getDCR(6));
133
                        transactor.writeRegister(targetDebugRegisterSet.regType.DCR7, regSet.getDCR(7));
134
                        transactor.writeRegister(targetDebugRegisterSet.regType.DVR0, regSet.getDVR(0));
135
                        transactor.writeRegister(targetDebugRegisterSet.regType.DVR1, regSet.getDVR(1));
136
                        transactor.writeRegister(targetDebugRegisterSet.regType.DVR2, regSet.getDVR(2));
137
                        transactor.writeRegister(targetDebugRegisterSet.regType.DVR3, regSet.getDVR(3));
138
                        transactor.writeRegister(targetDebugRegisterSet.regType.DVR4, regSet.getDVR(4));
139
                        transactor.writeRegister(targetDebugRegisterSet.regType.DVR5, regSet.getDVR(5));
140
                        transactor.writeRegister(targetDebugRegisterSet.regType.DVR6, regSet.getDVR(6));
141
                        transactor.writeRegister(targetDebugRegisterSet.regType.DVR7, regSet.getDVR(7));
142
                        transactor.writeRegister(targetDebugRegisterSet.regType.DWCR0, regSet.getDWCR0());
143
                        transactor.writeRegister(targetDebugRegisterSet.regType.DWCR1, regSet.getDWCR1());
144
                        // Note that DMR2 must be written AFTER the DWCR registers.  If
145
                        // DMR2 is written first, then the trap condition will be cleared,
146
                        // but it will still exist because count still equals match val
147
                        // in the DWCR.
148
                        transactor.writeRegister(targetDebugRegisterSet.regType.DMR1, regSet.getDMR1());
149
                        transactor.writeRegister(targetDebugRegisterSet.regType.DMR2, regSet.getDMR2());
150
                } catch (IOException e) {
151
                        setLogMessage("Network error: " + e.getMessage());
152
                        // TODO *** Disconnect?  Retry??
153
                }
154
        }
155
 
156
 
157
        // This is thread-safe for the GUI.  It must be used by the network thread (receiveResponse()
158
        // and anything called from it) to log messages to the GUI.
159
        public void setLogMessage(final String msg) {
160
 
161
                logMessage = msg;
162
 
163
                // Tell the display(s) to fetch and show the status
164
                for(LogMessageObserver obs : logmsgObserverList) {
165
                        obs.notifyLogMessage();
166
                }
167
        }
168
 
169
        public String getLogMessage() {
170
                return logMessage;
171
        }
172
 
173
        // This just puts the status into a member variable,
174
        // for the network status observers to retrieve.
175
        public void setNetworkStatus(connectionStatus cStatus) {
176
                switch(cStatus) {
177
                case NOT_CONNECTED:
178
                        networkStatus = "Not Connected";
179
                        break;
180
                case CONNECTING:
181
                        networkStatus = "Connecting...";
182
                        break;
183
                case CONNECTED:
184
                        networkStatus = "Connected";
185
                        break;
186
                case CONNECT_ERROR:
187
                        networkStatus = "Error Connecting";
188
                        break;
189
                default:
190
                        networkStatus = "Unknown Error";
191
                }
192
 
193
                // Tell the display(s) to fetch and show the status
194
                for(NetworkStatusObserver obs : networkStatusObserverList) {
195
                        obs.notifyNetworkStatus();
196
                }
197
        }
198
 
199
        public String getNetworkStatus() {
200
                return networkStatus;
201
        }
202
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.