annotated version.
[IRC.git] / Robust / src / Benchmarks / SSJava / JavaNator / StrategyMgr.java
1 /*\r
2  * StragegyMgr.java\r
3  *\r
4  * Copyright (c) 1993-2002 Sun Microsystems, Inc. All Rights Reserved.\r
5  *\r
6  * This software is the confidential and proprietary information of Sun\r
7  * Microsystems, Inc. ("Confidential Information").  You shall not\r
8  * disclose such Confidential Information and shall use it only in\r
9  * accordance with the terms of the license agreement you entered into\r
10  * with Sun.\r
11  *\r
12  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF\r
13  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED\r
14  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r
15  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR\r
16  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR\r
17  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.\r
18  */\r
19 \r
20 /**\r
21  * StrategyMgr - an isolation class ment for programmers to modify and create\r
22  * thier own code for robot strategy.\r
23  * \r
24  * @author Michael Gesundheit\r
25  * @version 1.0\r
26  */\r
27 @LATTICE("C<V,V<T,V*")\r
28 @METHODDEFAULT("THIS<IN,IN*,THISLOC=THIS,GLOBALLOC=THIS")\r
29 public class StrategyMgr {\r
30 \r
31   @LOC("C")\r
32   private MotorControl mc;\r
33   private static final int zeroSpeed = 45;\r
34   @LOC("T")\r
35   private Random rand;\r
36   @LOC("T")\r
37   private boolean DEBUGL = true;\r
38   // private boolean DEBUGL = false;\r
39 \r
40   // private boolean DEBUG = true;\r
41   @LOC("T")\r
42   private boolean DEBUG = true;\r
43 \r
44   /**\r
45    * Constructor - Invoke communication to remote application thread\r
46    */\r
47   public StrategyMgr(@DELEGATE MotorControl motorControl) {\r
48     mc = motorControl;\r
49     rand = new Random();\r
50   }\r
51 \r
52   void processSonars(@LOC("IN") byte sonarSensors) {\r
53 \r
54     // 5 sensors. 1,2 are fromnt left and right.\r
55     // Sensor 3 is right side, 4 back and 5 is left side.\r
56     if ((sonarSensors & 0x1f) == 0) {\r
57       // No sensor data may mean dead area between sensors.\r
58       // Continue with the last gesture until any sensor\r
59       // provide data.\r
60       if (DEBUG) {\r
61         System.out.println("sonar: NO SONARS!!!!!!!!");\r
62       }\r
63     } else if ((sonarSensors & (RobotMain.LF_RT_FRONT)) == (RobotMain.LF_RT_FRONT)) {\r
64       if (DEBUG) {\r
65         System.out.println("sonar: straight");\r
66       }\r
67       straight();\r
68     } else if ((sonarSensors & RobotMain.LF_FRONT) == RobotMain.LF_FRONT) {\r
69       if (DEBUG) {\r
70         System.out.println("sonar: bearLeft");\r
71       }\r
72       bearLeft();\r
73     } else if ((sonarSensors & RobotMain.RT_FRONT) == RobotMain.RT_FRONT) {\r
74       if (DEBUG) {\r
75         System.out.println("sonar: bearRight");\r
76       }\r
77       bearRight();\r
78     } else if ((sonarSensors & RobotMain.RT_SIDE) == RobotMain.RT_SIDE) {\r
79       if (DEBUG) {\r
80         System.out.println("sonar: right");\r
81       }\r
82       spinRight();\r
83     } else if ((sonarSensors & RobotMain.LF_SIDE) == RobotMain.LF_SIDE) {\r
84       if (DEBUG) {\r
85         System.out.println("sonar: left");\r
86       }\r
87       spinLeft();\r
88     } else if ((sonarSensors & RobotMain.BK_SIDE) == RobotMain.BK_SIDE) {\r
89       if (DEBUG) {\r
90         System.out.println("sonar: spin180");\r
91       }\r
92       spin180();\r
93     }\r
94   }\r
95 \r
96   void processLineSensors(@LOC("IN") byte lineSensorsMask) {\r
97 \r
98     @LOC("IN") int count = 0;\r
99 \r
100     while ((lineSensorsMask & RobotMain.LS_ALL) != 0) {\r
101 \r
102       if (count > 100) {\r
103         // if the robot fail to get out of weird condition wihtin 100 steps,\r
104         // terminate while loop for stabilizing behavior.\r
105         stop();\r
106         break;\r
107       }\r
108       count++;\r
109 \r
110       if ((lineSensorsMask & RobotMain.LS_ALL) == RobotMain.LS_ALL) {\r
111         if (DEBUGL)\r
112           System.out.println("Line Sensors - ALL");\r
113         stop();\r
114       } else if ((lineSensorsMask & RobotMain.LS_LEFT_RIGHT) == RobotMain.LS_LEFT_RIGHT) {\r
115         if (DEBUGL)\r
116           System.out.println("Line Sensors - Left & Right");\r
117         back();\r
118         try {\r
119           // Thread.sleep(1000);\r
120         } catch (InterruptedException ie) {\r
121         }\r
122         spin180();\r
123         try {\r
124           // Thread.sleep(1000);\r
125         } catch (InterruptedException ie) {\r
126         }\r
127       } else if ((lineSensorsMask & RobotMain.LS_LEFT_REAR) == RobotMain.LS_LEFT_REAR) {\r
128         if (DEBUGL)\r
129           System.out.println("Line Sensors - Left & Rear");\r
130         bearRight();\r
131         try {\r
132           // Thread.sleep(1000);\r
133         } catch (InterruptedException ie) {\r
134         }\r
135       } else if ((lineSensorsMask & RobotMain.LS_RIGHT_REAR) == RobotMain.LS_RIGHT_REAR) {\r
136         if (DEBUGL)\r
137           System.out.println("Line Sensors - Right & Rear");\r
138         bearLeft();\r
139         try {\r
140           // Thread.sleep(1000);\r
141         } catch (InterruptedException ie) {\r
142         }\r
143       } else if ((lineSensorsMask & RobotMain.LS_LEFT) == RobotMain.LS_LEFT) {\r
144         if (DEBUGL)\r
145           System.out.println("Line Sensors - Left");\r
146         backBearRight();\r
147         try {\r
148           // Thread.sleep(1000);\r
149         } catch (InterruptedException ie) {\r
150         }\r
151       } else if ((lineSensorsMask & RobotMain.LS_RIGHT) == RobotMain.LS_RIGHT) {\r
152         if (DEBUGL)\r
153           System.out.println("Line Sensors - Right");\r
154         backBearLeft();\r
155         try {\r
156           // Thread.sleep(1000);\r
157         } catch (InterruptedException ie) {\r
158         }\r
159       } else if ((lineSensorsMask & RobotMain.LS_REAR) == RobotMain.LS_REAR) {\r
160         if (DEBUGL)\r
161           System.out.println("Line Sensors - Rear");\r
162         straight();\r
163         try {\r
164           // Thread.sleep(1000);\r
165         } catch (InterruptedException ie) {\r
166         }\r
167       }\r
168       lineSensorsMask = TestSensorInput.getCommand();\r
169     }// while loop\r
170   }\r
171 \r
172   public void stop() {\r
173     if (DEBUG)\r
174       System.out.println("StrageyMgr: stop....");\r
175     mc.setSpeedLeft(zeroSpeed);\r
176     mc.setSpeedRight(zeroSpeed);\r
177   }\r
178 \r
179   public void search() {\r
180     if (DEBUG)\r
181       System.out.println("StrategyMgr: search....");\r
182     mc.setSpeedLeft(70);\r
183     mc.setSpeedRight(50);\r
184   }\r
185 \r
186   public void straight() {\r
187     if (DEBUG)\r
188       System.out.println("StrategyMgr: strait....");\r
189     mc.setSpeedLeft(100);\r
190     mc.setSpeedRight(100);\r
191   }\r
192 \r
193   public void spinRight() {\r
194     if (DEBUG)\r
195       System.out.println("StrategyMgr: spinRight....");\r
196     mc.setSpeedSpinLeft(100);\r
197     mc.setSpeedSpinRight(0);\r
198   }\r
199 \r
200   public void spinLeft() {\r
201     if (DEBUG)\r
202       System.out.println("StrategyMgr: spinLeft....");\r
203     mc.setSpeedSpinLeft(0);\r
204     mc.setSpeedSpinRight(100);\r
205   }\r
206 \r
207   public void spin180() {\r
208     @LOC("THIS,StrategyMgr.V") int mod = (rand.nextInt() % 2);\r
209 \r
210     if (DEBUG)\r
211       System.out.println("StrategyMgr: spin180....");\r
212     if (mod == 1) {\r
213       mc.setSpeedSpinLeft(0);\r
214       mc.setSpeedSpinRight(100);\r
215     } else {\r
216       mc.setSpeedSpinLeft(100);\r
217       mc.setSpeedSpinRight(0);\r
218     }\r
219   }\r
220 \r
221   public void right() {\r
222     if (DEBUG)\r
223       System.out.println("StrategyMgr: right....");\r
224     mc.setSpeedTurnLeft(100);\r
225     mc.setSpeedRight(zeroSpeed);\r
226   }\r
227 \r
228   public void left() {\r
229     if (DEBUG)\r
230       System.out.println("StrategyMgr: left....");\r
231     mc.setSpeedLeft(zeroSpeed);\r
232     mc.setSpeedTurnRight(100);\r
233   }\r
234 \r
235   public void bearRight() {\r
236     if (DEBUG)\r
237       System.out.println("StrategyMgr: bearRight....");\r
238     mc.setSpeedTurnLeft(100);\r
239     mc.setSpeedTurnRight(60);\r
240   }\r
241 \r
242   public void bearLeft() {\r
243     if (DEBUG)\r
244       System.out.println("StrategyMgr: bearLeft....");\r
245     mc.setSpeedTurnLeft(60);\r
246     mc.setSpeedTurnRight(100);\r
247   }\r
248 \r
249   public void back() {\r
250     if (DEBUG)\r
251       System.out.println("StrategyMgr: back....");\r
252     mc.setSpeedLeft(0);\r
253     mc.setSpeedRight(0);\r
254   }\r
255 \r
256   public void backBearLeft() {\r
257     if (DEBUG)\r
258       System.out.println("StrategyMgr: backBearLeft....");\r
259     mc.setSpeedLeft(30);\r
260     mc.setSpeedRight(0);\r
261   }\r
262 \r
263   public void backBearRight() {\r
264     if (DEBUG)\r
265       System.out.println("StrategyMgr: backBearRight....");\r
266     mc.setSpeedLeft(0);\r
267     mc.setSpeedRight(30);\r
268   }\r
269 }\r