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
31 public class PWMManager {
\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
55 public PWMManager(String pwmSelection) {
\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
60 if (pwmSelection.equals("rtsj"))
\r
61 pwmControl = new PWMRtsj(this, MOTOR_PORTID_6, MOTOR_PORTID_7);
\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
68 // rcb = new RCBridge(this);
\r
69 rcb = new RCBridge();
\r
71 /* Enable input bits 0,1 Enable output for the rest */
\r
72 // rawJEM.set(GPIO_E_OER, 0x00C0);
\r
75 public void setManualMode() {
\r
77 System.out.println("PWMManager: setManualMode....");
\r
78 pwmControl.setManualMode();
\r
79 rcb.setManualMode();
\r
82 public void setAutomatedMode() {
\r
84 System.out.println("PWMManager: setAutomatedMode....");
\r
85 pwmControl.setAutomatedMode();
\r
86 rcb.setAutomatedMode();
\r
89 public PWMControl getPWMControl() {
\r
91 System.out.println("PWMManager: getPWMControl....");
\r
95 public synchronized void writeToPort(int myBit, int myValue) {
\r
96 currentRegMask &= ~myBit; // e.g. 0x11110111
\r
97 currentRegMask |= myValue;
\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
105 // rawJEM.set(GPIO_E_OUT, currentRegMask);
\r
109 * public void stop(){ if(DEBUG) System.out.println("PWMManager: stop....");
\r
110 * pwmControl.setSpeedLeft(zeroSpeed); pwmControl.setSpeedRight(zeroSpeed); }
\r
112 * public void search(){ if(DEBUG)
\r
113 * System.out.println("PWMManager: search...."); pwmControl.setSpeedLeft(70);
\r
114 * pwmControl.setSpeedRight(50); }
\r
116 * public void straight(){ if(DEBUG)
\r
117 * System.out.println("PWMManager: strait...."); pwmControl.setSpeedLeft(100);
\r
118 * pwmControl.setSpeedRight(100); }
\r
120 * public void spinRight(){ if(DEBUG)
\r
121 * System.out.println("PWMManager: spinRight....");
\r
122 * pwmControl.setSpeedSpinLeft(100); pwmControl.setSpeedSpinRight(0); }
\r
124 * public void spinLeft(){ if(DEBUG)
\r
125 * System.out.println("PWMManager: spinLeft....");
\r
126 * pwmControl.setSpeedSpinLeft(0); pwmControl.setSpeedSpinRight(100); }
\r
128 * public void spin180(){ int mod = (rand.nextInt() % 2);
\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
134 * public void right(){ if(DEBUG) System.out.println("PWMManager: right....");
\r
135 * pwmControl.setSpeedTurnLeft(100); pwmControl.setSpeedRight(zeroSpeed); }
\r
137 * public void left(){ if(DEBUG) System.out.println("PWMManager: left....");
\r
138 * pwmControl.setSpeedLeft(zeroSpeed); pwmControl.setSpeedTurnRight(100); }
\r
140 * public void bearRight(){ if(DEBUG)
\r
141 * System.out.println("PWMManager: bearRight....");
\r
142 * pwmControl.setSpeedTurnLeft(100); pwmControl.setSpeedTurnRight(60); }
\r
144 * public void bearLeft(){ if(DEBUG)
\r
145 * System.out.println("PWMManager: bearLeft....");
\r
146 * pwmControl.setSpeedTurnLeft(60); pwmControl.setSpeedTurnRight(100); }
\r
148 * public void back(){ if(DEBUG) System.out.println("PWMManager: back....");
\r
149 * pwmControl.setSpeedLeft(0); pwmControl.setSpeedRight(0); }
\r
151 * public void backBearLeft(){ if(DEBUG)
\r
152 * System.out.println("PWMManager: backBearLeft....");
\r
153 * pwmControl.setSpeedLeft(30); pwmControl.setSpeedRight(0); }
\r
155 * public void backBearRight(){ if(DEBUG)
\r
156 * System.out.println("PWMManager: backBearRight....");
\r
157 * pwmControl.setSpeedLeft(0); pwmControl.setSpeedRight(30); }
\r
159 public void resume() {
\r
161 System.out.println("PWMManager: Reasume...........");
\r
165 * setSpeedFactor - set speed factor value
\r
170 public synchronized void setSpeedFactor(int speedFactor) {
\r
172 System.out.println("PWMManager: setSpeedFactor....");
\r
173 this.speedFactor = speedFactor;
\r
174 pwmControl.setSpeedAgilityFactors(speedFactor, agilityFactor);
\r
183 public synchronized void setAgilityFactor(int agilityFactor) {
\r
185 System.out.println("PWMManager: setAgilityFactor....");
\r
186 this.agilityFactor = agilityFactor;
\r
187 pwmControl.setSpeedAgilityFactors(speedFactor, agilityFactor);
\r
191 * setSpeedAgilityFactors - set both speed and agility
\r
196 public synchronized void setSpeedAgilityFactors(int speed, int agility) {
\r
198 System.out.println("PWMManager: setSpeedAgilityFactors....");
\r
199 speedFactor = speed;
\r
200 agilityFactor = agility;
\r
201 pwmControl.setSpeedAgilityFactors(speedFactor, agilityFactor);
\r
205 * Control debug messaging. true - Activate debug messages false - deactivate
\r
208 public void setDebug(boolean debug) {
\r