Switches DigitalPWM to Handles (#121)

This commit is contained in:
Thad House
2016-06-30 23:43:00 -07:00
committed by Peter Johnson
parent f77a976fbb
commit 47694ef810
12 changed files with 169 additions and 137 deletions

View File

@@ -10,7 +10,6 @@ package edu.wpi.first.wpilibj;
import edu.wpi.first.wpilibj.communication.FRCNetworkCommunicationsLibrary.tResourceType;
import edu.wpi.first.wpilibj.communication.UsageReporting;
import edu.wpi.first.wpilibj.hal.DIOJNI;
import edu.wpi.first.wpilibj.hal.PWMJNI;
import edu.wpi.first.wpilibj.livewindow.LiveWindowSendable;
import edu.wpi.first.wpilibj.tables.ITable;
import edu.wpi.first.wpilibj.tables.ITableListener;
@@ -21,10 +20,9 @@ import edu.wpi.first.wpilibj.tables.ITableListener;
*/
public class DigitalOutput extends DigitalSource implements LiveWindowSendable {
private static final long invalidPwmGenerator = 0xffffffff;
private static final int invalidPwmGenerator = 0;
private int m_pwmGenerator = invalidPwmGenerator;
private long m_pwmGenerator = invalidPwmGenerator;
private int m_channel = 0;
private int m_handle = 0;
@@ -118,7 +116,7 @@ public class DigitalOutput extends DigitalSource implements LiveWindowSendable {
* @param rate The frequency to output all digital output PWM signals.
*/
public void setPWMRate(double rate) {
PWMJNI.setPWMRate(rate);
DIOJNI.setDigitalPWMRate(rate);
}
/**
@@ -137,9 +135,9 @@ public class DigitalOutput extends DigitalSource implements LiveWindowSendable {
if (m_pwmGenerator != invalidPwmGenerator) {
return;
}
m_pwmGenerator = PWMJNI.allocatePWM();
PWMJNI.setPWMDutyCycle(m_pwmGenerator, initialDutyCycle);
PWMJNI.setPWMOutputChannel(m_pwmGenerator, m_channel);
m_pwmGenerator = DIOJNI.allocateDigitalPWM();
DIOJNI.setDigitalPWMDutyCycle(m_pwmGenerator, initialDutyCycle);
DIOJNI.setDigitalPWMOutputChannel(m_pwmGenerator, m_channel);
}
/**
@@ -152,9 +150,9 @@ public class DigitalOutput extends DigitalSource implements LiveWindowSendable {
return;
}
// Disable the output by routing to a dead bit.
PWMJNI.setPWMOutputChannel(m_pwmGenerator, kDigitalChannels);
PWMJNI.freePWM(m_pwmGenerator);
m_pwmGenerator = 0;
DIOJNI.setDigitalPWMOutputChannel(m_pwmGenerator, kDigitalChannels);
DIOJNI.freeDigitalPWM(m_pwmGenerator);
m_pwmGenerator = invalidPwmGenerator;
}
/**
@@ -170,7 +168,7 @@ public class DigitalOutput extends DigitalSource implements LiveWindowSendable {
if (m_pwmGenerator == invalidPwmGenerator) {
return;
}
PWMJNI.setPWMDutyCycle(m_pwmGenerator, dutyCycle);
DIOJNI.setDigitalPWMDutyCycle(m_pwmGenerator, dutyCycle);
}
/**

View File

@@ -26,4 +26,14 @@ public class DIOJNI extends JNIWrapper {
public static native boolean isAnyPulsing();
public static native short getLoopTiming();
public static native int allocateDigitalPWM();
public static native void freeDigitalPWM(int pwmGenerator);
public static native void setDigitalPWMRate(double rate);
public static native void setDigitalPWMDutyCycle(int pwmGenerator, double dutyCycle);
public static native void setDigitalPWMOutputChannel(int pwmGenerator, int pin);
}

View File

@@ -20,14 +20,4 @@ public class PWMJNI extends DIOJNI {
public static native void latchPWMZero(int pwmPortHandle);
public static native void setPWMPeriodScale(int pwmPortHandle, int squelchMask);
public static native long allocatePWM();
public static native void freePWM(long pwmGenerator);
public static native void setPWMRate(double rate);
public static native void setPWMDutyCycle(long pwmGenerator, double dutyCycle);
public static native void setPWMOutputChannel(long pwmGenerator, int pin);
}