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 PWMControl classes.
\r
22 * Agility is a number between 0 to 100 and represent the precentage of max speed to be applied to
\r
23 * the turn side wheel. On left turn the left wheel will receive less speed as % of "speed" value
\r
24 * represented by agility.
\r
26 * @author Michael Gesundheit
\r
32 public class PWMManager {
\r
34 // private int GPIO_A_OER = 0x09002000;
\r
35 // private int GPIO_A_OUT = GPIO_A_OER + 4;
\r
36 // private int GPIO_E_OER = 0x09002400;
\r
37 // private int GPIO_E_OUT = 0x09002404;
\r
38 // private byte MOTOR_PORTID_6 = 6; // Bit 2 (...3,2,1,0)
\r
39 // private byte MOTOR_PORTID_7 = 7; // Bit 3 (...3,2,1,0)
\r
41 private int currentRegMask;
\r
43 private boolean DEBUG = false;
\r
44 // private PWMControl pwmControl;
\r
46 private RCBridge rcb;
\r
48 private int speedFactor;
\r
50 private int agilityFactor;
\r
52 private int zeroSpeed = 45;
\r
57 public PWMManager(String pwmSelection) {
\r
59 * Instantiate PWM Makers one for each motor. motorPortId is 1 to 8 and is corresponding to 8
\r
62 // if (pwmSelection.equals("rtsj"))
\r
63 // pwmControl = new PWMRtsj(this, MOTOR_PORTID_6, MOTOR_PORTID_7);
\r
65 // System.out.println("Selection PWMNative is activated");
\r
66 // pwmControl = new PWMNative(this, MOTOR_PORTID_6, MOTOR_PORTID_7);
\r
67 // System.out.println("Selection PWMNative is activated.... Return");
\r
70 // rcb = new RCBridge(this);
\r
71 rcb = new RCBridge();
\r
73 /* Enable input bits 0,1 Enable output for the rest */
\r
74 // rawJEM.set(GPIO_E_OER, 0x00C0);
\r
77 public void setManualMode() {
\r
79 System.out.println("PWMManager: setManualMode....");
\r
80 // pwmControl.setManualMode();
\r
81 rcb.setManualMode();
\r
84 public void setAutomatedMode() {
\r
86 System.out.println("PWMManager: setAutomatedMode....");
\r
87 // pwmControl.setAutomatedMode();
\r
88 rcb.setAutomatedMode();
\r
91 // public PWMControl getPWMControl() {
\r
93 // System.out.println("PWMManager: getPWMControl....");
\r
94 // return pwmControl;
\r
97 public synchronized void writeToPort(int myBit, int myValue) {
\r
98 currentRegMask &= ~myBit; // e.g. 0x11110111
\r
99 currentRegMask |= myValue;
\r
101 * // if (DEBUG){ // System.out.println("PWMM: writeToPort: myBit = 0x" +
\r
102 * Integer.toHexString(myBit) + // " ~myBit = 0x" + Integer.toHexString(~myBit) +
\r
103 * " myValue = 0x" + // Integer.toHexString(myValue) + " currentRegMask = 0x" + //
\r
104 * Integer.toHexString(currentRegMask)); //}
\r
106 // rawJEM.set(GPIO_E_OUT, currentRegMask);
\r
110 * public void stop(){ if(DEBUG) System.out.println("PWMManager: stop....");
\r
111 * pwmControl.setSpeedLeft(zeroSpeed); pwmControl.setSpeedRight(zeroSpeed); }
\r
113 * public void search(){ if(DEBUG) System.out.println("PWMManager: search....");
\r
114 * pwmControl.setSpeedLeft(70); pwmControl.setSpeedRight(50); }
\r
116 * public void straight(){ if(DEBUG) System.out.println("PWMManager: strait....");
\r
117 * pwmControl.setSpeedLeft(100); pwmControl.setSpeedRight(100); }
\r
119 * public void spinRight(){ if(DEBUG) System.out.println("PWMManager: spinRight....");
\r
120 * pwmControl.setSpeedSpinLeft(100); pwmControl.setSpeedSpinRight(0); }
\r
122 * public void spinLeft(){ if(DEBUG) System.out.println("PWMManager: spinLeft....");
\r
123 * pwmControl.setSpeedSpinLeft(0); pwmControl.setSpeedSpinRight(100); }
\r
125 * public void spin180(){ int mod = (rand.nextInt() % 2);
\r
127 * if(DEBUG) System.out.println("PWMManager: spin180...."); if(mod == 1){
\r
128 * pwmControl.setSpeedSpinLeft(0); pwmControl.setSpeedSpinRight(100); }else{
\r
129 * pwmControl.setSpeedSpinLeft(100); pwmControl.setSpeedSpinRight(0); } }
\r
131 * public void right(){ if(DEBUG) System.out.println("PWMManager: right....");
\r
132 * pwmControl.setSpeedTurnLeft(100); pwmControl.setSpeedRight(zeroSpeed); }
\r
134 * public void left(){ if(DEBUG) System.out.println("PWMManager: left....");
\r
135 * pwmControl.setSpeedLeft(zeroSpeed); pwmControl.setSpeedTurnRight(100); }
\r
137 * public void bearRight(){ if(DEBUG) System.out.println("PWMManager: bearRight....");
\r
138 * pwmControl.setSpeedTurnLeft(100); pwmControl.setSpeedTurnRight(60); }
\r
140 * public void bearLeft(){ if(DEBUG) System.out.println("PWMManager: bearLeft....");
\r
141 * pwmControl.setSpeedTurnLeft(60); pwmControl.setSpeedTurnRight(100); }
\r
143 * public void back(){ if(DEBUG) System.out.println("PWMManager: back....");
\r
144 * pwmControl.setSpeedLeft(0); pwmControl.setSpeedRight(0); }
\r
146 * public void backBearLeft(){ if(DEBUG) System.out.println("PWMManager: backBearLeft....");
\r
147 * pwmControl.setSpeedLeft(30); pwmControl.setSpeedRight(0); }
\r
149 * public void backBearRight(){ if(DEBUG) System.out.println("PWMManager: backBearRight....");
\r
150 * pwmControl.setSpeedLeft(0); pwmControl.setSpeedRight(30); }
\r
152 public void resume() {
\r
154 System.out.println("PWMManager: Reasume...........");
\r
158 * setSpeedFactor - set speed factor value
\r
163 public synchronized void setSpeedFactor(int speedFactor) {
\r
165 System.out.println("PWMManager: setSpeedFactor....");
\r
166 this.speedFactor = speedFactor;
\r
167 // pwmControl.setSpeedAgilityFactors(speedFactor, agilityFactor);
\r
176 public synchronized void setAgilityFactor(int agilityFactor) {
\r
178 System.out.println("PWMManager: setAgilityFactor....");
\r
179 this.agilityFactor = agilityFactor;
\r
180 // pwmControl.setSpeedAgilityFactors(speedFactor, agilityFactor);
\r
184 * setSpeedAgilityFactors - set both speed and agility
\r
189 public synchronized void setSpeedAgilityFactors( int speed, int agility) {
\r
191 System.out.println("PWMManager: setSpeedAgilityFactors....");
\r
192 speedFactor = speed;
\r
193 agilityFactor = agility;
\r
194 // pwmControl.setSpeedAgilityFactors(speedFactor, agilityFactor);
\r
198 * Control debug messaging. true - Activate debug messages false - deactivate debug messages
\r
200 public void setDebug(boolean debug) {
\r