001package com.pi4j.io.gpio;
002
003/*
004 * #%L
005 * **********************************************************************
006 * ORGANIZATION  :  Pi4J
007 * PROJECT       :  Pi4J :: Java Library (Core)
008 * FILENAME      :  OdroidC1Pin.java
009 *
010 * This file is part of the Pi4J project. More information about
011 * this project can be found here:  http://www.pi4j.com/
012 * **********************************************************************
013 * %%
014 * Copyright (C) 2012 - 2016 Pi4J
015 * %%
016 * This program is free software: you can redistribute it and/or modify
017 * it under the terms of the GNU Lesser General Public License as
018 * published by the Free Software Foundation, either version 3 of the
019 * License, or (at your option) any later version.
020 *
021 * This program is distributed in the hope that it will be useful,
022 * but WITHOUT ANY WARRANTY; without even the implied warranty of
023 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
024 * GNU General Lesser Public License for more details.
025 *
026 * You should have received a copy of the GNU General Lesser Public
027 * License along with this program.  If not, see
028 * <http://www.gnu.org/licenses/lgpl-3.0.html>.
029 * #L%
030 */
031
032
033import com.pi4j.io.gpio.impl.PinImpl;
034
035import java.util.EnumSet;
036
037/**
038 * Odroid-C1/C1+ pin definitions for (default) WiringPi pin numbering scheme.
039 *
040 * @link http://odroid.com/dokuwiki/doku.php?id=en:c1_hardware#expansion_connectors
041 *
042 * @author Robert Savage (<a
043 *         href="http://www.savagehomeautomation.com">http://www.savagehomeautomation.com</a>)
044 *
045 */
046public class OdroidC1Pin extends PinProvider {
047
048    // 11       GPIOY.BIT8      Export GPIO#88, Wiring Pi GPIO#0
049    public static final Pin GPIO_00 = createDigitalPin(0, "GPIO 0");
050
051    // 12       GPIOY.BIT7      Export GPIO#87, Wiring Pi GPIO#1
052    public static final Pin GPIO_01 = createDigitalPin(1, "GPIO 1");
053
054    // 13       GPIOX.BIT19     Export GPIO#116, Wiring Pi GPIO#2
055    public static final Pin GPIO_02 = createDigitalPin(2, "GPIO 2");
056
057    // 15       GPIOX.BIT18     Export GPIO#115, Wiring PI GPIO#3
058    public static final Pin GPIO_03 = createDigitalPin(3, "GPIO 3");
059
060    // 16       GPIOX.BIT7      Export GPIO#104, Wiring Pi GPIO#4
061    public static final Pin GPIO_04 = createDigitalPin(4, "GPIO 4");
062
063    // 18       GPIOX.BIT5      Export GPIO#102, Wiring Pi GPIO#5
064    public static final Pin GPIO_05 = createDigitalPin(5, "GPIO 5");
065
066    // 22       GPIOX.BIT6      Export GPIO#103, Wiring Pi GPIO#6
067    public static final Pin GPIO_06 = createDigitalPin(6, "GPIO 6");
068
069    // 7        GPIOY.BIT3      Export GPIO#83, Wiring Pi GPIO#7
070    public static final Pin GPIO_07 = createDigitalPin(7, "GPIO 7");
071
072    // 24       GPIOX.BIT20     Export GPIO#117, Wiring Pi GPIO#10
073    public static final Pin GPIO_10 = createDigitalPin(10, "GPIO 10");
074
075    // 26       GPIOX.BIT21     Export GPIO#118, Wiring Pi GPIO#11
076    public static final Pin GPIO_11 = createDigitalPin(11, "GPIO 11");
077
078    // 19   GPIOX.BIT10(MOSI)   Export GPIO#107, Wiring Pi GPIO#12, PWM1
079    // PWM not currently supported, see known issues: https://github.com/Pi4J/pi4j-v1/issues/229
080    public static final Pin GPIO_12 = createDigitalPin(12, "GPIO 12");
081
082    // 21       GPIOX.BIT9(MISO)        Export GPIO#106, Wiring Pi GPIO#13
083    public static final Pin GPIO_13 = createDigitalPin(13, "GPIO 13");
084
085    // 23       GPIOX.BIT8(SPI_SCLK)    Export GPIO#105, Wiring Pi GPIO#14
086    public static final Pin GPIO_14 = createDigitalPin(14, "GPIO 14");
087
088    // 29       GPIOX.BIT4      Export GPIO#101, Wiring Pi GPIO#21
089    public static final Pin GPIO_21 = createDigitalPin(21, "GPIO 21");
090
091    // 31       GPIOX.BIT3      Export GPIO#100, Wiring Pi GPIO#22
092    public static final Pin GPIO_22 = createDigitalPin(22, "GPIO 22");
093
094    // 33       GPIOX.BIT11     Export GPIO#108, Wiring Pi GPIO#23, PWM0
095    // PWM not currently supported, see known issues: https://github.com/Pi4J/pi4j-v1/issues/229
096    public static final Pin GPIO_23 = createDigitalPin(23, "GPIO 23");
097
098    // 35       GPIOX.BIT0      Export GPIO#97, Wiring Pi GPIO#24
099    public static final Pin GPIO_24 = createDigitalPin(24, "GPIO 24");
100
101    // 32       GPIOX.BIT2      Export GPIO#99, Wiring Pi#26
102    public static final Pin GPIO_26 = createDigitalPin(26, "GPIO 26");
103
104    // 36       GPIOX.BIT1      Wiring Pi GPIO#27
105    public static final Pin GPIO_27 = createDigitalPin(27, "GPIO 27");
106
107    // 40       ADC.AIN0  (!! 1.8 VDC MAX !!)
108    public static final Pin AIN0 = createAnalogInputPin(0 + OdroidGpioProvider.AIN_ADDRESS_OFFSET, "AIN0");
109
110    // 37       ADC.AIN1  (!! 1.8 VDC MAX !!)
111    public static final Pin AIN1 = createAnalogInputPin(1 + OdroidGpioProvider.AIN_ADDRESS_OFFSET, "AIN1");
112
113    private static Pin createAnalogInputPin(int address, String name) {
114        return createAnalogInputPin(OdroidGpioProvider.NAME, address, name);
115    }
116
117    protected static Pin createDigitalPin(int address, String name) {
118        return createDigitalPin(OdroidGpioProvider.NAME, address, name);
119    }
120
121    protected static Pin createDigitalAndPwmPin(int address, String name) {
122        return createDigitalAndPwmPin(OdroidGpioProvider.NAME, address, name);
123    }
124
125    // *override* static method from subclass
126    // (overriding a static method is not supported in Java
127    //  so this method definition will hide the subclass static method)
128    public static Pin getPinByName(String name) {
129        return PinProvider.getPinByName(name);
130    }
131
132    // *override* static method from subclass
133    // (overriding a static method is not supported in Java
134    //  so this method definition will hide the subclass static method)
135    public static Pin getPinByAddress(int address) {
136        return PinProvider.getPinByAddress(address);
137    }
138
139    // *override* static method from subclass
140    // (overriding a static method is not supported in Java
141    //  so this method definition will hide the subclass static method)
142    public static Pin[] allPins() { return PinProvider.allPins(); }
143
144    // *override* static method from subclass
145    // (overriding a static method is not supported in Java
146    //  so this method definition will hide the subclass static method)
147    public static Pin[] allPins(PinMode ... mode) { return PinProvider.allPins(mode); }
148}