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