All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.diozero.api.PinInfo Maven / Gradle / Ivy

There is a newer version: 1.4.0
Show newest version
package com.diozero.api;

/*
 * #%L
 * Organisation: diozero
 * Project:      diozero - Core
 * Filename:     PinInfo.java
 * 
 * This file is part of the diozero project. More information about this project
 * can be found at https://www.diozero.com/.
 * %%
 * Copyright (C) 2016 - 2021 diozero
 * %%
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 * #L%
 */

import java.util.Collection;
import java.util.EnumSet;

/**
 * 

* Describe the various attributes of an individual General-Purpose Input/Output * (GPIO) pin. GPIO pin functions include Digital Input / Output, PWM Output and * Analog Input / Output. *

* *

* Always access instances of this class via the * {@link com.diozero.sbc.BoardPinInfo BoardPinInfo} accessor methods rather * than constructing instances yourself. For example, * {@link com.diozero.sbc.BoardPinInfo#getByGpioNumber(int) * BoardPinInfo.getByGpioNumber(gpio)} and * {@link com.diozero.sbc.BoardPinInfo#getByChipAndLineOffset(int, int) * BoardPinInfo.getByChipAndLineOffset(chip, lineOffset)}. *

* *

* A board has a number of headers, each header has a number of physical pins * connected to it. For example, the Raspberry Pi model B has the main 40-pin J8 * header as well as the 8-pin P5 header (that doesn't have header pins soldered * by default). Non-GPIO pins such as Vcc and GND are also included for * information purposes only. *

* *

* A pin has the following attributes: *

*
*
keyPrefix
*
internal only attribute used by * {@link com.diozero.internal.spi.AbstractDeviceFactory AbstractDeviceFactory} * when provisioning GPIO devices
*
header
*
the name of the board header to which this pin is attached
*
physicalPin
*
the physical header pin number
*
deviceNumber
*
the logical device GPIO number
*
sysFsNumber
*
typically the same as the GPIO / device number; can be different for PWM * pins that are controlled via Linux sysfs
*
chip
*
the Linux GPIO chip number for this GPIO as defined by the Linux GPIO * character device; see /sys/gpiochip<n>, run gpiodetect to * list
*
lineOffset
*
the line number offset for this GPIO on the GPIO chip - Linux GPIO * character device; run gpioinfo <n> to list
*
name
*
the name of this pin
*
modes
*
the set of valid {@link DeviceMode modes} for this pin
*
*/ public class PinInfo { public static final EnumSet DIGITAL_IN = EnumSet.of(DeviceMode.DIGITAL_INPUT); public static final EnumSet DIGITAL_OUT = EnumSet.of(DeviceMode.DIGITAL_OUTPUT); public static final EnumSet DIGITAL_IN_OUT = EnumSet.of(DeviceMode.DIGITAL_INPUT, DeviceMode.DIGITAL_OUTPUT); public static final EnumSet DIGITAL_IN_OUT_PWM = EnumSet.of(DeviceMode.DIGITAL_INPUT, DeviceMode.DIGITAL_OUTPUT, DeviceMode.PWM_OUTPUT); public static final EnumSet PWM_OUTPUT = EnumSet.of(DeviceMode.PWM_OUTPUT); public static final EnumSet DIGITAL_PWM_OUTPUT = EnumSet.of(DeviceMode.DIGITAL_OUTPUT, DeviceMode.PWM_OUTPUT); public static final EnumSet DIGITAL_ANALOG_INPUT = EnumSet.of(DeviceMode.DIGITAL_INPUT, DeviceMode.ANALOG_INPUT); public static final EnumSet ANALOG_INPUT = EnumSet.of(DeviceMode.ANALOG_INPUT); public static final EnumSet ANALOG_OUTPUT = EnumSet.of(DeviceMode.ANALOG_OUTPUT); public static final int NOT_DEFINED = -1; public static final String DEFAULT_HEADER = "DEFAULT"; public static final String GROUND = "GND"; public static final String VCC_5V = "5v"; public static final String VCC_3V3 = "3v3"; private String keyPrefix; private String header; private int physicalPin; /** e.g. gpioNumber */ private int deviceNumber; private int sysFsNumber; private int chip; private int lineOffset; private String name; private Collection modes; private int pwmChip; private int pwmNum; public PinInfo(String keyPrefix, String header, int deviceNumber, int physicalPin, String name, Collection modes) { this(keyPrefix, header, deviceNumber, physicalPin, NOT_DEFINED, NOT_DEFINED, name, modes, deviceNumber, NOT_DEFINED, NOT_DEFINED); } public PinInfo(String keyPrefix, String header, int deviceNumber, int physicalPin, String name, Collection modes, int sysFsNumber, int chip, int line) { this(keyPrefix, header, deviceNumber, physicalPin, NOT_DEFINED, NOT_DEFINED, name, modes, sysFsNumber, chip, line); } public PinInfo(String keyPrefix, String header, int deviceNumber, int physicalPin, int pwmChip, int pwmNum, String name, Collection modes, int sysFsNumber, int chip, int line) { this.keyPrefix = keyPrefix; this.header = header; this.physicalPin = physicalPin; this.deviceNumber = deviceNumber; this.pwmChip = pwmChip; this.pwmNum = pwmNum; this.name = name; this.modes = modes; this.sysFsNumber = sysFsNumber; this.chip = chip; this.lineOffset = line; } /** * Internal only attribute used by * {@link com.diozero.internal.spi.AbstractDeviceFactory AbstractDeviceFactory} * when provisioning GPIO devices * * @return the key prefix for this pin */ public String getKeyPrefix() { return keyPrefix; } /** * Get the name of the board header to which this pin is attached * * @return the header name to which this pin is attached */ public String getHeader() { return header; } /** * Get the physical header pin number * * @return the physical header pin number */ public int getPhysicalPin() { return physicalPin; } /** * Get the logical device GPIO number * * @return the logical device GPIO number */ public int getDeviceNumber() { return deviceNumber; } /** * Get sysfs number for this pin. This is typically the same as the GPIO / * device number; can be different for PWM pins that are controlled via Linux * sysfs * * @return the sysfs number for this pin */ public int getSysFsNumber() { return sysFsNumber; } /** * the Linux GPIO chip number for this GPIO as defined by the Linux GPIO * character device; see /sys/gpiochip<n>, run gpiodetect to * list * * @return the GPIO chip number for this pin */ public int getChip() { return chip; } /** * Internal method - do not call * * @param chip the GPIO chip number for this pin */ public void setChip(int chip) { this.chip = chip; } /** * Get the line number offset for this GPIO on the GPIO chip - Linux GPIO * character device; run gpioinfo <n> to list * * @return the GPIO line offset */ public int getLineOffset() { return lineOffset; } /** * Internal method - do not call * * @param lineOffset the GPIO chip line offset number for this pin */ public void setLineOffset(int lineOffset) { this.lineOffset = lineOffset; } /** * Get the name of this pin * * @return the name of this pin */ public String getName() { return name; } /** * Get the set of valid {@link DeviceMode modes} for this pin * * @return the set of valid {@link DeviceMode modes} for this pin */ public Collection getModes() { return modes; } /** * Check if the specified {@link DeviceMode mode} is supported by this pin * * @param mode the {@link DeviceMode device mode} to check * @return true if the device mode is supported */ public boolean isSupported(DeviceMode mode) { return modes.contains(mode); } public boolean isDigitalInputSupported() { return modes.contains(DeviceMode.DIGITAL_INPUT); } public boolean isDigitalOutputSupported() { return modes.contains(DeviceMode.DIGITAL_OUTPUT); } public boolean isPwmOutputSupported() { return modes.contains(DeviceMode.PWM_OUTPUT); } public boolean isAnalogInputSupported() { return modes.contains(DeviceMode.ANALOG_INPUT); } public boolean isAnalogOutputSupported() { return modes.contains(DeviceMode.ANALOG_OUTPUT); } public int getPwmChip() { return pwmChip; } public int getPwmNum() { return pwmNum; } @Override public String toString() { return "PinInfo [keyPrefix=" + keyPrefix + ", header=" + header + ", deviceNumber=" + deviceNumber + ", physicalPin=" + physicalPin + ", name=" + name + ", chip=" + chip + ", lineOffset=" + lineOffset + ", modes=" + modes + "]"; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy