Replace JPigpio, add hardware PWM support (#127)

* Send brightness properly to clients

* Refactor GPIO, add custom Pigpio socket wrapper

* Replace PiGPIO with PigpioPin, fix hardwarePWM

* Remove Jpigpio dependency

* Apply Spotless

* Warn user of Pigpio pin incapable of hardware PWM

* Begin rework of blinking and brightness control for vision leds

* Fixed blink, fixed brightness persistence, added bootup blink

* Cleanup HardwareManager access of config

* Apply spotless

* Skip hardware test on non-Pi

Co-authored-by: Matt <matthew.morley.ca@gmail.com>
This commit is contained in:
Banks T
2020-10-16 19:06:40 -04:00
committed by GitHub
parent 23f3c0e6e1
commit e37fcdea98
19 changed files with 1172 additions and 328 deletions

View File

@@ -40,10 +40,6 @@ public class HardwareConfigTest {
assertEquals(config.supportURL, "https://support.photonvision.com");
Assertions.assertArrayEquals(
config.ledPins.stream().mapToInt(i -> i).toArray(), new int[] {2, 13});
Assertions.assertArrayEquals(
config.ledPWMRange.stream().mapToInt(i -> i).toArray(), new int[] {0, 100});
Assertions.assertEquals(config.ledPWMFrequency, 800);
CustomGPIO.setConfig(config);
} catch (IOException e) {

View File

@@ -17,30 +17,34 @@
package org.photonvision.hardware;
import java.io.IOException;
import org.junit.jupiter.api.Assumptions;
import org.junit.jupiter.api.Test;
import org.photonvision.common.hardware.GPIO.pi.PigpioException;
import org.photonvision.common.hardware.GPIO.pi.PigpioSocket;
import org.photonvision.common.hardware.HardwareManager;
import org.photonvision.common.hardware.Platform;
import org.photonvision.common.logging.LogGroup;
import org.photonvision.common.logging.Logger;
public class HardwareManagerTest {
public static final Logger logger = new Logger(HardwareManager.class, LogGroup.General);
@Test
public void managementTest() throws IOException {
// var config =
// new ObjectMapper().readValue(TestUtils.getHardwareConfigJson(),
// HardwareConfig.class);
//
// var instance = HardwareManager.getInstance();
// TODO: fix
// instance.getGPIO(13).setPwmRange(List.of(0, 100));
// Assertions.assertEquals(instance.getGPIO(13).getPwmRange().get(0), 0);
// Assertions.assertEquals(instance.getGPIO(13).getPwmRange().get(1), 100);
// instance.getGPIO(13).blink(250, 5);
// for (int i = 0; i < 101; i++) {
// instance.getGPIO(13).setBrightness(i);
// }
// Assertions.assertEquals(config.statusRGBPins.get(0), -1);
// Assertions.assertEquals(config.statusRGBPins.get(1), -1);
// Assertions.assertEquals(config.statusRGBPins.get(2), -1);
public void managementTest() throws InterruptedException {
Assumptions.assumeTrue(Platform.isRaspberryPi());
var socket = new PigpioSocket();
try {
socket.gpioWrite(18, false);
socket.gpioWrite(13, false);
Thread.sleep(500);
for (int i = 0; i < 1000000; i++) {
int duty = 1000000 - i;
socket.hardwarePWM(18, 1000000, duty);
Thread.sleep(0, 25);
}
} catch (PigpioException e) {
logger.error("error", e);
}
}
}

View File

@@ -22,7 +22,7 @@ import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import org.photonvision.common.hardware.GPIO.CustomGPIO;
import org.photonvision.common.hardware.GPIO.GPIOBase;
import org.photonvision.common.hardware.GPIO.PiGPIO;
import org.photonvision.common.hardware.GPIO.pi.PigpioPin;
import org.photonvision.common.hardware.Platform;
import org.photonvision.common.hardware.metrics.CPUMetrics;
import org.photonvision.common.hardware.metrics.GPUMetrics;
@@ -56,7 +56,7 @@ public class HardwareTest {
public void testGPIO() {
GPIOBase gpio;
if (Platform.isRaspberryPi()) {
gpio = new PiGPIO(18, 0, 100);
gpio = new PigpioPin(18);
} else {
gpio = new CustomGPIO(18);
}
@@ -86,7 +86,7 @@ public class HardwareTest {
@Test
public void testBlink() {
if (!Platform.isRaspberryPi()) return;
GPIOBase pwm = new PiGPIO(18, 0, 100);
GPIOBase pwm = new PigpioPin(18);
pwm.blink(125, 3);
var startms = System.currentTimeMillis();
while (true) {