4 * Copyright (c) 1993-2002 Sun Microsystems, Inc. All Rights Reserved.
\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
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
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
27 * @author Michael Gesundheit
\r
33 public class PWMManager {
\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
42 private int currentRegMask;
\r
44 private boolean DEBUG = false;
\r
45 // private PWMControl pwmControl;
\r
47 private RCBridge rcb;
\r
49 private int speedFactor;
\r
51 private int agilityFactor;
\r
53 private int zeroSpeed = 45;
\r
58 public PWMManager(String pwmSelection) {
\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
63 // if (pwmSelection.equals("rtsj"))
\r
64 // pwmControl = new PWMRtsj(this, MOTOR_PORTID_6, MOTOR_PORTID_7);
\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
71 // rcb = new RCBridge(this);
\r
72 rcb = new RCBridge();
\r
74 /* Enable input bits 0,1 Enable output for the rest */
\r
75 // rawJEM.set(GPIO_E_OER, 0x00C0);
\r
78 public void setManualMode() {
\r
80 System.out.println("PWMManager: setManualMode....");
\r
81 // pwmControl.setManualMode();
\r
82 rcb.setManualMode();
\r
85 public void setAutomatedMode() {
\r
87 System.out.println("PWMManager: setAutomatedMode....");
\r
88 // pwmControl.setAutomatedMode();
\r
89 rcb.setAutomatedMode();
\r
92 // public PWMControl getPWMControl() {
\r
94 // System.out.println("PWMManager: getPWMControl....");
\r
95 // return pwmControl;
\r
98 public synchronized void writeToPort(int myBit, int myValue) {
\r
99 currentRegMask &= ~myBit; // e.g. 0x11110111
\r
100 currentRegMask |= myValue;
\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
108 // rawJEM.set(GPIO_E_OUT, currentRegMask);
\r
112 * public void stop(){ if(DEBUG) System.out.println("PWMManager: stop....");
\r
113 * pwmControl.setSpeedLeft(zeroSpeed); pwmControl.setSpeedRight(zeroSpeed); }
\r
115 * public void search(){ if(DEBUG)
\r
116 * System.out.println("PWMManager: search...."); pwmControl.setSpeedLeft(70);
\r
117 * pwmControl.setSpeedRight(50); }
\r
119 * public void straight(){ if(DEBUG)
\r
120 * System.out.println("PWMManager: strait...."); pwmControl.setSpeedLeft(100);
\r
121 * pwmControl.setSpeedRight(100); }
\r
123 * public void spinRight(){ if(DEBUG)
\r
124 * System.out.println("PWMManager: spinRight....");
\r
125 * pwmControl.setSpeedSpinLeft(100); pwmControl.setSpeedSpinRight(0); }
\r
127 * public void spinLeft(){ if(DEBUG)
\r
128 * System.out.println("PWMManager: spinLeft....");
\r
129 * pwmControl.setSpeedSpinLeft(0); pwmControl.setSpeedSpinRight(100); }
\r
131 * public void spin180(){ int mod = (rand.nextInt() % 2);
\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
137 * public void right(){ if(DEBUG) System.out.println("PWMManager: right....");
\r
138 * pwmControl.setSpeedTurnLeft(100); pwmControl.setSpeedRight(zeroSpeed); }
\r
140 * public void left(){ if(DEBUG) System.out.println("PWMManager: left....");
\r
141 * pwmControl.setSpeedLeft(zeroSpeed); pwmControl.setSpeedTurnRight(100); }
\r
143 * public void bearRight(){ if(DEBUG)
\r
144 * System.out.println("PWMManager: bearRight....");
\r
145 * pwmControl.setSpeedTurnLeft(100); pwmControl.setSpeedTurnRight(60); }
\r
147 * public void bearLeft(){ if(DEBUG)
\r
148 * System.out.println("PWMManager: bearLeft....");
\r
149 * pwmControl.setSpeedTurnLeft(60); pwmControl.setSpeedTurnRight(100); }
\r
151 * public void back(){ if(DEBUG) System.out.println("PWMManager: back....");
\r
152 * pwmControl.setSpeedLeft(0); pwmControl.setSpeedRight(0); }
\r
154 * public void backBearLeft(){ if(DEBUG)
\r
155 * System.out.println("PWMManager: backBearLeft....");
\r
156 * pwmControl.setSpeedLeft(30); pwmControl.setSpeedRight(0); }
\r
158 * public void backBearRight(){ if(DEBUG)
\r
159 * System.out.println("PWMManager: backBearRight....");
\r
160 * pwmControl.setSpeedLeft(0); pwmControl.setSpeedRight(30); }
\r
162 public void resume() {
\r
164 System.out.println("PWMManager: Reasume...........");
\r
168 * setSpeedFactor - set speed factor value
\r
173 public synchronized void setSpeedFactor(int speedFactor) {
\r
175 System.out.println("PWMManager: setSpeedFactor....");
\r
176 this.speedFactor = speedFactor;
\r
177 // pwmControl.setSpeedAgilityFactors(speedFactor, agilityFactor);
\r
186 public synchronized void setAgilityFactor(int agilityFactor) {
\r
188 System.out.println("PWMManager: setAgilityFactor....");
\r
189 this.agilityFactor = agilityFactor;
\r
190 // pwmControl.setSpeedAgilityFactors(speedFactor, agilityFactor);
\r
194 * setSpeedAgilityFactors - set both speed and agility
\r
199 public synchronized void setSpeedAgilityFactors( int speed, int agility) {
\r
201 System.out.println("PWMManager: setSpeedAgilityFactors....");
\r
202 speedFactor = speed;
\r
203 agilityFactor = agility;
\r
204 // pwmControl.setSpeedAgilityFactors(speedFactor, agilityFactor);
\r
208 * Control debug messaging. true - Activate debug messages false - deactivate
\r
211 public void setDebug(boolean debug) {
\r