001package com.pi4j.io.gpio; 002 003import com.pi4j.wiringpi.GpioInterruptListener; 004 005/* 006 * #%L 007 * ********************************************************************** 008 * ORGANIZATION : Pi4J 009 * PROJECT : Pi4J :: Java Library (Core) 010 * FILENAME : RaspiGpioProvider.java 011 * 012 * This file is part of the Pi4J project. More information about 013 * this project can be found here: https://www.pi4j.com/ 014 * ********************************************************************** 015 * %% 016 * Copyright (C) 2012 - 2021 Pi4J 017 * %% 018 * This program is free software: you can redistribute it and/or modify 019 * it under the terms of the GNU Lesser General Public License as 020 * published by the Free Software Foundation, either version 3 of the 021 * License, or (at your option) any later version. 022 * 023 * This program is distributed in the hope that it will be useful, 024 * but WITHOUT ANY WARRANTY; without even the implied warranty of 025 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 026 * GNU General Lesser Public License for more details. 027 * 028 * You should have received a copy of the GNU General Lesser Public 029 * License along with this program. If not, see 030 * <http://www.gnu.org/licenses/lgpl-3.0.html>. 031 * #L% 032 */ 033 034/** 035 * Raspberry PI {@link GpioProvider} implementation. 036 * 037 * @author Robert Savage (<a 038 * href="http://www.savagehomeautomation.com">http://www.savagehomeautomation.com</a>) 039 */ 040@SuppressWarnings("unused") 041public class RaspiGpioProvider extends WiringPiGpioProviderBase implements GpioProvider, GpioInterruptListener { 042 043 public static final String NAME = "RaspberryPi GPIO Provider"; 044 045 /** 046 * Default Constructor 047 */ 048 public RaspiGpioProvider() { 049 // set wiringPi interface for internal use 050 // we will use the (default) WiringPi pin number scheme with the wiringPi library 051 this(RaspiPinNumberingScheme.DEFAULT_PIN_NUMBERING); 052 } 053 054 /** 055 * Alternate Constructor allowing user to override default pin numbering scheme 056 * 057 * @param pinNumberingScheme 058 */ 059 public RaspiGpioProvider(RaspiPinNumberingScheme pinNumberingScheme) { 060 // set wiringPi interface for internal use 061 switch(pinNumberingScheme){ 062 case BROADCOM_PIN_NUMBERING: { 063 // we will use the raw/direct Broadcom GPIO pin number scheme with the wiringPi library 064 com.pi4j.wiringpi.Gpio.wiringPiSetupGpio(); 065 break; 066 } 067 case DEFAULT_PIN_NUMBERING: { 068 // we will use the WiringPi pin number scheme with the wiringPi library 069 com.pi4j.wiringpi.Gpio.wiringPiSetup(); 070 break; 071 } 072 default: { 073 throw new RuntimeException("Unsupported pin numbering scheme: " + pinNumberingScheme.name()); 074 } 075 } 076 } 077 078 @Override 079 public String getName() { 080 return NAME; 081 } 082}