d194470246583d29f1df548d7d923f9cacfc4563
[IRC.git] / Robust / src / Benchmarks / SSJava / JavaNator / PWMManager.java
1 /*\r
2  * PWMManager.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  * PWMManager - Interface between robot strategy code and the various motors\r
22  * PWMControl classes. Agility is a number between 0 to 100 and represent the\r
23  * precentage of max speed to be applied to the turn side wheel. On left turn\r
24  * the left wheel will receive less speed as % of "speed" value represented by\r
25  * agility.\r
26  * \r
27  * @author Michael Gesundheit\r
28  * @version 1.0\r
29  */\r
30 \r
31 @LATTICE("V")\r
32 @METHODDEFAULT("OUT<THIS,THIS<V,V<IN,V*,THISLOC=THIS,RETURNLOC=OUT")\r
33 public class PWMManager {\r
34 \r
35   // private int GPIO_A_OER = 0x09002000;\r
36   // private int GPIO_A_OUT = GPIO_A_OER + 4;\r
37   // private int GPIO_E_OER = 0x09002400;\r
38   // private int GPIO_E_OUT = 0x09002404;\r
39   // private byte MOTOR_PORTID_6 = 6; // Bit 2 (...3,2,1,0)\r
40   // private byte MOTOR_PORTID_7 = 7; // Bit 3 (...3,2,1,0)\r
41   @LOC("V")\r
42   private int currentRegMask;\r
43   @LOC("V")\r
44   private boolean DEBUG = false;\r
45   // private PWMControl pwmControl;\r
46   @LOC("V")\r
47   private RCBridge rcb;\r
48   @LOC("V")\r
49   private int speedFactor;\r
50   @LOC("V")\r
51   private int agilityFactor;\r
52   @LOC("V")\r
53   private int zeroSpeed = 45;\r
54 \r
55   /**\r
56    * Constractor\r
57    */\r
58   public PWMManager(String pwmSelection) {\r
59     /*\r
60      * Instantiate PWM Makers one for each motor. motorPortId is 1 to 8 and is\r
61      * corresponding to 8 bits in a byte.\r
62      */\r
63     // if (pwmSelection.equals("rtsj"))\r
64     // pwmControl = new PWMRtsj(this, MOTOR_PORTID_6, MOTOR_PORTID_7);\r
65     // else {\r
66     // System.out.println("Selection PWMNative is activated");\r
67     // pwmControl = new PWMNative(this, MOTOR_PORTID_6, MOTOR_PORTID_7);\r
68     // System.out.println("Selection PWMNative is activated.... Return");\r
69     // }\r
70 \r
71     // rcb = new RCBridge(this);\r
72     rcb = new RCBridge();\r
73 \r
74     /* Enable input bits 0,1 Enable output for the rest */\r
75     // rawJEM.set(GPIO_E_OER, 0x00C0);\r
76   }\r
77 \r
78   public void setManualMode() {\r
79     if (DEBUG)\r
80       System.out.println("PWMManager: setManualMode....");\r
81     // pwmControl.setManualMode();\r
82     rcb.setManualMode();\r
83   }\r
84 \r
85   public void setAutomatedMode() {\r
86     if (DEBUG)\r
87       System.out.println("PWMManager: setAutomatedMode....");\r
88     // pwmControl.setAutomatedMode();\r
89     rcb.setAutomatedMode();\r
90   }\r
91 \r
92   // public PWMControl getPWMControl() {\r
93   // if (DEBUG)\r
94   // System.out.println("PWMManager: getPWMControl....");\r
95   // return pwmControl;\r
96   // }\r
97 \r
98   public synchronized void writeToPort(int myBit, int myValue) {\r
99     currentRegMask &= ~myBit; // e.g. 0x11110111\r
100     currentRegMask |= myValue;\r
101     /*\r
102      * // if (DEBUG){ // System.out.println("PWMM: writeToPort: myBit = 0x" +\r
103      * Integer.toHexString(myBit) + // " ~myBit = 0x" +\r
104      * Integer.toHexString(~myBit) + " myValue = 0x" + //\r
105      * Integer.toHexString(myValue) + " currentRegMask = 0x" + //\r
106      * Integer.toHexString(currentRegMask)); //}\r
107      */\r
108     // rawJEM.set(GPIO_E_OUT, currentRegMask);\r
109   }\r
110 \r
111   /*\r
112    * public void stop(){ if(DEBUG) System.out.println("PWMManager: stop....");\r
113    * pwmControl.setSpeedLeft(zeroSpeed); pwmControl.setSpeedRight(zeroSpeed); }\r
114    * \r
115    * public void search(){ if(DEBUG)\r
116    * System.out.println("PWMManager: search...."); pwmControl.setSpeedLeft(70);\r
117    * pwmControl.setSpeedRight(50); }\r
118    * \r
119    * public void straight(){ if(DEBUG)\r
120    * System.out.println("PWMManager: strait...."); pwmControl.setSpeedLeft(100);\r
121    * pwmControl.setSpeedRight(100); }\r
122    * \r
123    * public void spinRight(){ if(DEBUG)\r
124    * System.out.println("PWMManager: spinRight....");\r
125    * pwmControl.setSpeedSpinLeft(100); pwmControl.setSpeedSpinRight(0); }\r
126    * \r
127    * public void spinLeft(){ if(DEBUG)\r
128    * System.out.println("PWMManager: spinLeft....");\r
129    * pwmControl.setSpeedSpinLeft(0); pwmControl.setSpeedSpinRight(100); }\r
130    * \r
131    * public void spin180(){ int mod = (rand.nextInt() % 2);\r
132    * \r
133    * if(DEBUG) System.out.println("PWMManager: spin180...."); if(mod == 1){\r
134    * pwmControl.setSpeedSpinLeft(0); pwmControl.setSpeedSpinRight(100); }else{\r
135    * pwmControl.setSpeedSpinLeft(100); pwmControl.setSpeedSpinRight(0); } }\r
136    * \r
137    * public void right(){ if(DEBUG) System.out.println("PWMManager: right....");\r
138    * pwmControl.setSpeedTurnLeft(100); pwmControl.setSpeedRight(zeroSpeed); }\r
139    * \r
140    * public void left(){ if(DEBUG) System.out.println("PWMManager: left....");\r
141    * pwmControl.setSpeedLeft(zeroSpeed); pwmControl.setSpeedTurnRight(100); }\r
142    * \r
143    * public void bearRight(){ if(DEBUG)\r
144    * System.out.println("PWMManager: bearRight....");\r
145    * pwmControl.setSpeedTurnLeft(100); pwmControl.setSpeedTurnRight(60); }\r
146    * \r
147    * public void bearLeft(){ if(DEBUG)\r
148    * System.out.println("PWMManager: bearLeft....");\r
149    * pwmControl.setSpeedTurnLeft(60); pwmControl.setSpeedTurnRight(100); }\r
150    * \r
151    * public void back(){ if(DEBUG) System.out.println("PWMManager: back....");\r
152    * pwmControl.setSpeedLeft(0); pwmControl.setSpeedRight(0); }\r
153    * \r
154    * public void backBearLeft(){ if(DEBUG)\r
155    * System.out.println("PWMManager: backBearLeft....");\r
156    * pwmControl.setSpeedLeft(30); pwmControl.setSpeedRight(0); }\r
157    * \r
158    * public void backBearRight(){ if(DEBUG)\r
159    * System.out.println("PWMManager: backBearRight....");\r
160    * pwmControl.setSpeedLeft(0); pwmControl.setSpeedRight(30); }\r
161    */\r
162   public void resume() {\r
163     if (DEBUG)\r
164       System.out.println("PWMManager: Reasume...........");\r
165   }\r
166 \r
167   /**\r
168    * setSpeedFactor - set speed factor value\r
169    * \r
170    * @param speed\r
171    *          factor\r
172    */\r
173   public synchronized void setSpeedFactor(int speedFactor) {\r
174     if (DEBUG)\r
175       System.out.println("PWMManager: setSpeedFactor....");\r
176     this.speedFactor = speedFactor;\r
177     // pwmControl.setSpeedAgilityFactors(speedFactor, agilityFactor);\r
178   }\r
179 \r
180   /**\r
181    * setAgilityFactor\r
182    * \r
183    * @param agility\r
184    *          factor\r
185    */\r
186   public synchronized void setAgilityFactor(int agilityFactor) {\r
187     if (DEBUG)\r
188       System.out.println("PWMManager: setAgilityFactor....");\r
189     this.agilityFactor = agilityFactor;\r
190     // pwmControl.setSpeedAgilityFactors(speedFactor, agilityFactor);\r
191   }\r
192 \r
193   /**\r
194    * setSpeedAgilityFactors - set both speed and agility\r
195    * \r
196    * @param speed\r
197    * @param agility\r
198    */\r
199   public synchronized void setSpeedAgilityFactors(@LOC("IN") int speed, @LOC("IN") int agility) {\r
200     if (DEBUG)\r
201       System.out.println("PWMManager: setSpeedAgilityFactors....");\r
202     speedFactor = speed;\r
203     agilityFactor = agility;\r
204     // pwmControl.setSpeedAgilityFactors(speedFactor, agilityFactor);\r
205   }\r
206 \r
207   /**\r
208    * Control debug messaging. true - Activate debug messages false - deactivate\r
209    * debug messages\r
210    */\r
211   public void setDebug(boolean debug) {\r
212     DEBUG = debug;\r
213   }\r
214 }