wiringPi: Refactor source codes including fixes for collisions that'd occur

Replace WiringPi header files to the ODROID specific files
 - Note: To avoid unforeseen errors when working with Python Wrapper.
   Python Wrapper doesn't recognize the ODROID specific header files and
   its introduced functions, declarations. So just thought that fixing
   Python Wrapper is much more complicated than replacing the header files
   and it seems more suitable for the later updates.
Fix messaging implicit declaration of core functions
Fix collisions of functions/declarations by header files
 - Note: In each ODROID sources, the prefix '_' have to be added to the
   core functions in order to avoid the collisions that non-static function
   follows static function. This is because of importing "wiringPi.h" header
   file that has extern core functions which names the same as listed in
   each ODROID source code file. So the core functions that exported from
   here must have that prefix, and only to be assigned its pointer to the
   "libodroid" structure.

Change-Id: Ia927c7946cfb6ca6ce3a02530936325e1acb0620
This commit is contained in:
joshua-yang
2019-02-21 12:05:24 +09:00
parent 1f53a9c5b9
commit 4b08e7ff71
26 changed files with 2225 additions and 4065 deletions

View File

@@ -30,9 +30,6 @@ ifneq ($V,1)
Q ?= @
endif
# BRAND_NAME = Pi
BRAND_NAME = Odroid
#DEBUG = -g -O0
DEBUG = -O2
CC = gcc
@@ -44,16 +41,8 @@ LIBS = -lwiringPi -lwiringPiDev -lpthread -lrt -lm -lcrypt
# May not need to alter anything below this line
###############################################################################
ifeq ($(BRAND_NAME), Odroid)
SRC = gpio_odroid.c readall_odroid.c pins.c
else
SRC = gpio.c readall.c pins.c
endif
OBJ = $(SRC:.c=.o)
all: gpio

1661
gpio/gpio.c Normal file → Executable file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

687
gpio/readall.c Normal file → Executable file
View File

@@ -20,8 +20,6 @@
* along with wiringPi. If not, see <http://www.gnu.org/licenses/>.
***********************************************************************
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
@@ -34,37 +32,377 @@
#include <sys/stat.h>
#include <wiringPi.h>
/*----------------------------------------------------------------------------*/
extern int wpMode ;
/*----------------------------------------------------------------------------*/
#ifndef TRUE
# define TRUE (1==1)
# define FALSE (1==2)
# define TRUE (1==1)
# define FALSE (1==2)
#endif
/*----------------------------------------------------------------------------*/
/*
* doReadallExternal:
* A relatively crude way to read the pins on an external device.
* We don't know the input/output mode of pins, but we can tell
* if it's an analog pin or a digital one...
*********************************************************************************
*/
/*----------------------------------------------------------------------------*/
static void doReadallExternal (void)
{
int pin ;
int pin ;
printf ("+------+---------+--------+\n") ;
printf ("| Pin | Digital | Analog |\n") ;
printf ("+------+---------+--------+\n") ;
printf ("+------+---------+--------+\n") ;
printf ("| Pin | Digital | Analog |\n") ;
printf ("+------+---------+--------+\n") ;
for (pin = wiringPiNodes->pinBase ; pin <= wiringPiNodes->pinMax ; ++pin)
printf ("| %4d | %4d | %4d |\n", pin, digitalRead (pin), analogRead (pin)) ;
for (pin = wiringPiNodes->pinBase ; pin <= wiringPiNodes->pinMax ; ++pin)
printf ("| %4d | %4d | %4d |\n", pin, digitalRead (pin), analogRead (pin)) ;
printf ("+------+---------+--------+\n") ;
printf ("+------+---------+--------+\n") ;
}
/*----------------------------------------------------------------------------*/
static const char *alts [] =
{
"IN", "OUT", "ALT1", "ALT2", "ALT3", "ALT4", "ALT5", "ALT6", "ALT7"
} ;
static const char *pupd [] =
{
"DSBLD", "P/U", "P/D"
} ;
/*----------------------------------------------------------------------------*/
static const int physToWpi [64] =
{
-1, // 0
-1, -1, // 1, 2
8, -1,
9, -1,
7, 15,
-1, 16,
0, 1,
2, -1,
3, 4,
-1, 5,
12, -1,
13, 6,
14, 10,
-1, 11, // 25, 26
30, 31, // Actually I2C, but not used
21, -1,
22, 26,
23, -1,
24, 27,
25, 28,
-1, 29,
-1, -1,
-1, -1,
-1, -1,
-1, -1,
-1, -1,
17, 18,
19, 20,
-1, -1, -1, -1, -1, -1, -1, -1, -1
} ;
/*----------------------------------------------------------------------------*/
static const char *physNamesOdroidC1 [64] =
{
NULL,
" 3.3V", "5V ",
" SDA.1", "5V ",
" SCL.1", "GND(0V) ",
"GPIO. 83", "TxD1 ",
" GND(0V)", "RxD1 ",
"GPIO. 88", "GPIO. 87",
"GPIO.116", "GND(0V) ",
"GPIO.115", "GPIO.104",
" 3.3V", "GPIO.102",
" MOSI", "GND(0V) ",
" MISO", "GPIO.103",
" SCLK", "CE0 ",
" GND(0V)", "GPIO.118",
" SDA.2", "SCL.2 ",
"GPIO.101", "GND(0V) ",
"GPIO.100", "GPIO. 99",
"GPIO.108", "GND(0V) ",
"GPIO.97 ", "GPIO. 98",
" AIN.1", "1V8 ",
" GND(0V)", "AIN.0 ",
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,
} ;
/*----------------------------------------------------------------------------*/
static const char *physNamesOdroidC2_Rev2 [64] =
{
NULL,
" 3.3V", "5V ",
" SDA.1", "5V ",
" SCL.1", "GND(0V) ",
"GPIO.249", "TxD1 ",
" GND(0V)", "RxD1 ",
"GPIO.247", "GPIO.238",
"GPIO.239", "GND(0V) ",
"GPIO.237", "GPIO.236",
" 3.3V", "GPIO.233",
"GPIO.235", "GND(0V) ",
"GPIO.232", "GPIO.231",
"GPIO.230", "GPIO.229",
" GND(0V)", "GPIO.225",
" SDA.2", "SCL.2 ",
"GPIO.228", "GND(0V) ",
"GPIO.219", "GPIO.224",
"GPIO.234", "GND(0V) ",
"GPIO.214", "GPIO.218",
" AIN.1", "1V8 ",
" GND(0V)", "AIN.0 ",
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,
} ;
/*----------------------------------------------------------------------------*/
static const char *physNamesOdroidC2_Rev1 [64] =
{
NULL,
" 3.3V", "5V ",
" SDA.1", "5V ",
" SCL.1", "GND(0V) ",
"GPIO.214", "--------",
" GND(0V)", "--------",
"GPIO.219", "GPIO.218",
"GPIO.247", "GND(0V) ",
"--------", "GPIO.235",
" 3.3V", "GPIO.233",
"GPIO.238", "GND(0V) ",
"GPIO.237", "GPIO.234",
"GPIO.236", "GPIO.248",
" GND(0V)", "GPIO.249",
" SDA.2", "SCL.2 ",
"GPIO.232", "GND(0V) ",
"GPIO.231", "GPIO.230",
"GPIO.239", "GND(0V) ",
"GPIO.228", "GPIO.229",
" AIN.1", "1V8 ",
" GND(0V)", "AIN.0 ",
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,
} ;
/*----------------------------------------------------------------------------*/
static const char *physNamesOdroidXU3 [64] =
{
NULL,
" 3.3V", "5V ",
"I2C1.SDA", "5V ",
"I2C1.SCL", "GND(0V) ",
"GPIO. 18", "UART0.TX",
" GND(0V)", "UART0.RX",
"GPIO.174", "GPIO.173",
"GPIO. 21", "GND(0V) ",
"GPIO. 22", "GPIO. 19",
" 3.3V", "GPIO. 23",
" MOSI", "GND(0V) ",
" MISO", "GPIO. 24",
" SCLK", "CE0 ",
" GND(0V)", "GPIO. 25",
"I2C5.SDA", "I2C5.SCL",
"GPIO. 28", "GND(0V) ",
"GPIO. 30", "GPIO. 29",
"GPIO. 31", "GND(0V) ",
"POWER ON", "GPIO. 33",
" AIN.0", "1V8 ",
" GND(0V)", "AIN.3 ",
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,
} ;
/*----------------------------------------------------------------------------*/
static const char *physNamesOdroidN1 [64] =
{
NULL,
" 3.0V", "5V ",
"I2C4_SDA", "5V ",
"I2C4_SCL", "GND(0V) ",
"GPIO1A.0", "UART0_TX",
" GND(0V)", "UART0_RX",
"GPIO1A.1", "GPIO1A.2",
"GPIO1A.3", "GND(0V) ",
"GPIO1A.4", "GPIO1B.5",
" 3.0V", "GPIO1C.2",
"SPI1_TXD", "GND(0V) ",
"SPI1_RXD", "GPIO1D.0",
"SPI1_CLK", "SPI1_CSN",
" GND(0V)", "GPIO1C.6",
"I2C8_SDA", "I2C8_SCL",
"SPDIF_TX", "GND(0V) ",
" PWM1", "GPIO4D.4",
"GPIO4D.0", "GND(0V) ",
"GPIO4D.5", "GPIO4D.6",
"ADC.AIN1", "1V8 ",
" GND(0V)", "ADC.AIN0",
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,
} ;
/*----------------------------------------------------------------------------*/
static const char *physNamesOdroidN2 [64] =
{
NULL,
" 3.3V", "5V ",
" SDA.2", "5V ",
" SCL.2", "GND(0V) ",
"GPIO.473", "TxD1 ",
" GND(0V)", "RxD1 ",
"GPIO.479", "GPIO.492",
"GPIO.480", "GND(0V) ",
"GPIO.483", "GPIO.476",
" 3.3V", "GPIO.477",
" MOSI", "GND(0V) ",
" MISO", "GPIO.478",
" SCLK", "CE0 ",
" GND(0V)", "GPIO.464",
" SDA.3", "SCL.3 ",
"GPIO.490", "GND(0V) ",
"GPIO.491", "GPIO.472",
"GPIO.481", "GND(0V) ",
"GPIO.482", "GPIO.495",
" AIN.3", "1V8 ",
" GND(0V)", "AIN.2 ",
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,
} ;
/*----------------------------------------------------------------------------*/
static void readallPhysOdroid (int model, int rev, int physPin, const char *physNames[])
{
int pin ;
// GPIO, wPi pin number
if ((physPinToGpio (physPin) == -1) && (physToWpi [physPin] == -1))
printf (" | | ") ;
else if (physPinToGpio (physPin) != -1)
printf (" | %3d | %3d", physPinToGpio (physPin), physToWpi [physPin]);
else
printf (" | | %3d", physToWpi [physPin]);
// GPIO pin name
printf (" | %s", physNames [physPin]) ;
// GPIO pin mode, value, drive strength, pupd
if ((physToWpi [physPin] == -1) || (physPinToGpio (physPin) == -1))
printf (" | | | | ") ;
else {
if (wpMode == MODE_GPIO)
pin = physPinToGpio (physPin);
else if (wpMode == MODE_PHYS)
pin = physPin ;
else
pin = physToWpi [physPin];
printf (" | %4s", alts [getAlt (pin)]) ;
printf (" | %d", digitalRead (pin)) ;
switch (model) {
case MODEL_ODROID_N1:
printf (" | | ");
break;
case MODEL_ODROID_C1:
case MODEL_ODROID_C2:
printf (" | | %5s", pupd[getPUPD(pin)]);
break;
case MODEL_ODROID_XU3:
case MODEL_ODROID_N2:
printf (" | %2d | %5s", getPadDrive(pin), pupd[getPUPD(pin)]);
break;
default:
break;
}
}
// Physical pin number
printf (" | %2d", physPin) ;
++physPin ;
printf (" || %-2d", physPin) ;
// GPIO pin mode, value, drive strength, pupd
if ((physToWpi [physPin] == -1) || (physPinToGpio (physPin) == -1))
printf (" | | | | ") ;
else {
if (wpMode == MODE_GPIO)
pin = physPinToGpio (physPin);
else if (wpMode == MODE_PHYS)
pin = physPin ;
else
pin = physToWpi [physPin];
switch (model) {
case MODEL_ODROID_N1:
printf (" | | ");
break;
case MODEL_ODROID_C1:
case MODEL_ODROID_C2:
printf (" | %-5s | ", pupd[getPUPD(pin)]);
break;
case MODEL_ODROID_XU3:
case MODEL_ODROID_N2:
printf (" | %-5s | %-2d", pupd[getPUPD(pin)], getPadDrive(pin));
break;
default:
break;
}
printf (" | %d", digitalRead (pin));
printf (" | %-4s", alts [getAlt (pin)]);
}
// GPIO pin name
printf (" | %-6s", physNames [physPin]);
// GPIO, wPi pin number
if ((physPinToGpio (physPin) == -1) && (physToWpi [physPin] == -1))
printf (" | | ") ;
else if (physPinToGpio (physPin) != -1)
printf (" | %-3d | %-3d", physToWpi [physPin], physPinToGpio (physPin));
else
printf (" | %-3d | ", physToWpi [physPin]);
printf (" |\n") ;
}
/*----------------------------------------------------------------------------*/
void ReadallOdroid (int model, int rev, const char *physNames[])
{
int pin ;
printf (" | GPIO | wPi | Name | Mode | V | DS | PU/PD | Physical | PU/PD | DS | V | Mode | Name | wPi | GPIO |\n") ;
printf (" +------+-----+----------+------+---+----+-------+----++----+-------+----+---+------+----------+-----+------+\n") ;
for (pin = 1 ; pin <= 40 ; pin += 2)
readallPhysOdroid (model, rev, pin, physNames) ;
printf (" +------+-----+----------+------+---+----+-------+----++----+-------+----+---+------+----------+-----+------+\n") ;
}
/*----------------------------------------------------------------------------*/
/*
* doReadall:
* Read all the GPIO pins
@@ -72,297 +410,62 @@ static void doReadallExternal (void)
* connected device, so we need to do some fiddling with the internal
* wiringPi node structures - since the gpio command can only use
* one external device at a time, we'll use that to our advantage...
*********************************************************************************
*/
static char *alts [] =
{
"IN", "OUT", "ALT5", "ALT4", "ALT0", "ALT1", "ALT2", "ALT3"
} ;
static int physToWpi [64] =
{
-1, // 0
-1, -1, // 1, 2
8, -1,
9, -1,
7, 15,
-1, 16,
0, 1,
2, -1,
3, 4,
-1, 5,
12, -1,
13, 6,
14, 10,
-1, 11, // 25, 26
30, 31, // Actually I2C, but not used
21, -1,
22, 26,
23, -1,
24, 27,
25, 28,
-1, 29,
-1, -1,
-1, -1,
-1, -1,
-1, -1,
-1, -1,
17, 18,
19, 20,
-1, -1, -1, -1, -1, -1, -1, -1, -1
} ;
static char *physNames [64] =
{
NULL,
" 3.3v", "5v ",
" SDA.1", "5v ",
" SCL.1", "0v ",
"GPIO. 7", "TxD ",
" 0v", "RxD ",
"GPIO. 0", "GPIO. 1",
"GPIO. 2", "0v ",
"GPIO. 3", "GPIO. 4",
" 3.3v", "GPIO. 5",
" MOSI", "0v ",
" MISO", "GPIO. 6",
" SCLK", "CE0 ",
" 0v", "CE1 ",
" SDA.0", "SCL.0 ",
"GPIO.21", "0v ",
"GPIO.22", "GPIO.26",
"GPIO.23", "0v ",
"GPIO.24", "GPIO.27",
"GPIO.25", "GPIO.28",
" 0v", "GPIO.29",
NULL, NULL,
NULL, NULL,
NULL, NULL,
NULL, NULL,
NULL, NULL,
"GPIO.17", "GPIO.18",
"GPIO.19", "GPIO.20",
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
} ;
/*
* readallPhys:
* Given a physical pin output the data on it and the next pin:
*| BCM | wPi | Name | Mode | Val| Physical |Val | Mode | Name | wPi | BCM |
*********************************************************************************
*/
static void readallPhys (int physPin)
{
int pin ;
if (physPinToGpio (physPin) == -1)
printf (" | | ") ;
else
printf (" | %3d | %3d", physPinToGpio (physPin), physToWpi [physPin]) ;
printf (" | %s", physNames [physPin]) ;
if (physToWpi [physPin] == -1)
printf (" | | ") ;
else
{
/**/ if (wpMode == WPI_MODE_GPIO)
pin = physPinToGpio (physPin) ;
else if (wpMode == WPI_MODE_PHYS)
pin = physPin ;
else
pin = physToWpi [physPin] ;
printf (" | %4s", alts [getAlt (pin)]) ;
printf (" | %d", digitalRead (pin)) ;
}
// Pin numbers:
printf (" | %2d", physPin) ;
++physPin ;
printf (" || %-2d", physPin) ;
// Same, reversed
if (physToWpi [physPin] == -1)
printf (" | | ") ;
else
{
/**/ if (wpMode == WPI_MODE_GPIO)
pin = physPinToGpio (physPin) ;
else if (wpMode == WPI_MODE_PHYS)
pin = physPin ;
else
pin = physToWpi [physPin] ;
printf (" | %d", digitalRead (pin)) ;
printf (" | %-4s", alts [getAlt (pin)]) ;
}
printf (" | %-5s", physNames [physPin]) ;
if (physToWpi [physPin] == -1)
printf (" | | ") ;
else
printf (" | %-3d | %-3d", physToWpi [physPin], physPinToGpio (physPin)) ;
printf (" |\n") ;
}
/*
* allReadall:
* Read all the pins regardless of the model. Primarily of use for
* the compute module, but handy for other fiddling...
*********************************************************************************
*/
static void allReadall (void)
{
int pin ;
printf ("+-----+------+-------+ +-----+------+-------+\n") ;
printf ("| Pin | Mode | Value | | Pin | Mode | Value |\n") ;
printf ("+-----+------+-------+ +-----+------+-------+\n") ;
for (pin = 0 ; pin < 27 ; ++pin)
{
printf ("| %3d ", pin) ;
printf ("| %-4s ", alts [getAlt (pin)]) ;
printf ("| %s ", digitalRead (pin) == HIGH ? "High" : "Low ") ;
printf ("| ") ;
printf ("| %3d ", pin + 27) ;
printf ("| %-4s ", alts [getAlt (pin + 27)]) ;
printf ("| %s ", digitalRead (pin + 27) == HIGH ? "High" : "Low ") ;
printf ("|\n") ;
}
printf ("+-----+------+-------+ +-----+------+-------+\n") ;
}
/*
* abReadall:
* Read all the pins on the model A or B.
*********************************************************************************
*/
void abReadall (int model, int rev)
{
int pin ;
char *type ;
if (model == PI_MODEL_A)
type = " A" ;
else
if (rev == PI_VERSION_2)
type = "B2" ;
else
type = "B1" ;
printf (" +-----+-----+---------+------+---+-Model %s-+---+------+---------+-----+-----+\n", type) ;
printf (" | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |\n") ;
printf (" +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+\n") ;
for (pin = 1 ; pin <= 26 ; pin += 2)
readallPhys (pin) ;
if (rev == PI_VERSION_2) // B version 2
{
printf (" +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+\n") ;
for (pin = 51 ; pin <= 54 ; pin += 2)
readallPhys (pin) ;
}
printf (" +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+\n") ;
printf (" | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |\n") ;
printf (" +-----+-----+---------+------+---+-Model %s-+---+------+---------+-----+-----+\n", type) ;
}
/*
* piPlusReadall:
* Read all the pins on the model A+ or the B+
*********************************************************************************
*/
static void plus2header (int model)
{
/**/ if (model == PI_MODEL_AP)
printf (" +-----+-----+---------+------+---+--A Plus--+---+------+---------+-----+-----+\n") ;
else if (model == PI_MODEL_BP)
printf (" +-----+-----+---------+------+---+--B Plus--+---+------+---------+-----+-----+\n") ;
else if (model == PI_MODEL_ZERO)
printf (" +-----+-----+---------+------+---+-Pi Zero--+---+------+---------+-----+-----+\n") ;
else if (model == PI_MODEL_ZERO_W)
printf (" +-----+-----+---------+------+---+-Pi ZeroW-+---+------+---------+-----+-----+\n") ;
else if (model == PI_MODEL_2)
printf (" +-----+-----+---------+------+---+---Pi 2---+---+------+---------+-----+-----+\n") ;
else if (model == PI_MODEL_3)
printf (" +-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+\n") ;
else
printf (" +-----+-----+---------+------+---+---Pi ?---+---+------+---------+-----+-----+\n") ;
}
static void piPlusReadall (int model)
{
int pin ;
plus2header (model) ;
printf (" | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |\n") ;
printf (" +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+\n") ;
for (pin = 1 ; pin <= 40 ; pin += 2)
readallPhys (pin) ;
printf (" +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+\n") ;
printf (" | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |\n") ;
plus2header (model) ;
}
/*
* doReadall:
* Generic read all pins called from main program. Works out the Pi type
* and calls the appropriate function.
*********************************************************************************
*/
/*----------------------------------------------------------------------------*/
void doReadall (void)
{
int model, rev, mem, maker, overVolted ;
int model, rev, mem, maker, overVolted;
const char (*physNames)[];
if (wiringPiNodes != NULL) // External readall
{
doReadallExternal () ;
return ;
}
// External readall
if (wiringPiNodes != NULL) {
doReadallExternal ();
return ;
}
piBoardId (&model, &rev, &mem, &maker, &overVolted) ;
piBoardId (&model, &rev, &mem, &maker, &overVolted) ;
/**/ if ((model == PI_MODEL_A) || (model == PI_MODEL_B))
abReadall (model, rev) ;
else if ((model == PI_MODEL_BP) || (model == PI_MODEL_AP) || (model == PI_MODEL_2) || (model == PI_MODEL_3) || (model == PI_MODEL_ZERO) || (model == PI_MODEL_ZERO_W))
piPlusReadall (model) ;
else if ((model == PI_MODEL_CM) || (model == PI_MODEL_CM3))
allReadall () ;
else
printf ("Oops - unable to determine board type... model: %d\n", model) ;
switch (model) {
case MODEL_ODROID_C1:
printf (" +------+-----+----------+------+---+----+---- Model ODROID-C1 ----+----+---+------+----------+-----+------+\n") ;
physNames = physNamesOdroidC1;
break;
case MODEL_ODROID_C2:
printf (" +------+-----+----------+------+---+----+---- Model ODROID-C2 ----+----+---+------+----------+-----+------+\n") ;
if (rev == 1)
physNames = physNamesOdroidC2_Rev1;
else
physNames = physNamesOdroidC2_Rev2;
break;
case MODEL_ODROID_XU3:
printf (" +------+-----+----------+------+---+----+--- Model ODROID-XU3/4 ---+----+---+------+----------+-----+------+\n") ;
physNames = physNamesOdroidXU3;
break;
case MODEL_ODROID_N1:
printf (" +------+-----+----------+------+---+----+---- Model ODROID-N1 ----+----+---+------+----------+-----+------+\n") ;
physNames = physNamesOdroidN1;
break;
case MODEL_ODROID_N2:
printf (" +------+-----+----------+------+---+----+---- Model ODROID-N2 ----+----+---+------+----------+-----+------+\n") ;
physNames = physNamesOdroidN2;
break;
default:
printf ("Oops - unable to determine board type... model: %d\n", model) ;
return;
}
ReadallOdroid(model, rev, physNames);
}
/*----------------------------------------------------------------------------*/
/*
* doAllReadall:
* Force reading of all pins regardless of Pi model
*********************************************************************************
*/
/*----------------------------------------------------------------------------*/
void doAllReadall (void)
{
allReadall () ;
doReadall();
}
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/

View File

@@ -1,471 +0,0 @@
/*
* readall.c:
* The readall functions - getting a bit big, so split them out.
* Copyright (c) 2012-2017 Gordon Henderson
***********************************************************************
* This file is part of wiringPi:
* https://projects.drogon.net/raspberry-pi/wiringpi/
*
* wiringPi is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* wiringPi is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with wiringPi. If not, see <http://www.gnu.org/licenses/>.
***********************************************************************
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <ctype.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <wiringPi.h>
/*----------------------------------------------------------------------------*/
extern int wpMode ;
/*----------------------------------------------------------------------------*/
#ifndef TRUE
# define TRUE (1==1)
# define FALSE (1==2)
#endif
/*----------------------------------------------------------------------------*/
/*
* doReadallExternal:
* A relatively crude way to read the pins on an external device.
* We don't know the input/output mode of pins, but we can tell
* if it's an analog pin or a digital one...
*/
/*----------------------------------------------------------------------------*/
static void doReadallExternal (void)
{
int pin ;
printf ("+------+---------+--------+\n") ;
printf ("| Pin | Digital | Analog |\n") ;
printf ("+------+---------+--------+\n") ;
for (pin = wiringPiNodes->pinBase ; pin <= wiringPiNodes->pinMax ; ++pin)
printf ("| %4d | %4d | %4d |\n", pin, digitalRead (pin), analogRead (pin)) ;
printf ("+------+---------+--------+\n") ;
}
/*----------------------------------------------------------------------------*/
static const char *alts [] =
{
"IN", "OUT", "ALT1", "ALT2", "ALT3", "ALT4", "ALT5", "ALT6", "ALT7"
} ;
static const char *pupd [] =
{
"DSBLD", "P/U", "P/D"
} ;
/*----------------------------------------------------------------------------*/
static const int physToWpi [64] =
{
-1, // 0
-1, -1, // 1, 2
8, -1,
9, -1,
7, 15,
-1, 16,
0, 1,
2, -1,
3, 4,
-1, 5,
12, -1,
13, 6,
14, 10,
-1, 11, // 25, 26
30, 31, // Actually I2C, but not used
21, -1,
22, 26,
23, -1,
24, 27,
25, 28,
-1, 29,
-1, -1,
-1, -1,
-1, -1,
-1, -1,
-1, -1,
17, 18,
19, 20,
-1, -1, -1, -1, -1, -1, -1, -1, -1
} ;
/*----------------------------------------------------------------------------*/
static const char *physNamesOdroidC1 [64] =
{
NULL,
" 3.3V", "5V ",
" SDA.1", "5V ",
" SCL.1", "GND(0V) ",
"GPIO. 83", "TxD1 ",
" GND(0V)", "RxD1 ",
"GPIO. 88", "GPIO. 87",
"GPIO.116", "GND(0V) ",
"GPIO.115", "GPIO.104",
" 3.3V", "GPIO.102",
" MOSI", "GND(0V) ",
" MISO", "GPIO.103",
" SCLK", "CE0 ",
" GND(0V)", "GPIO.118",
" SDA.2", "SCL.2 ",
"GPIO.101", "GND(0V) ",
"GPIO.100", "GPIO. 99",
"GPIO.108", "GND(0V) ",
"GPIO.97 ", "GPIO. 98",
" AIN.1", "1V8 ",
" GND(0V)", "AIN.0 ",
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,
} ;
/*----------------------------------------------------------------------------*/
static const char *physNamesOdroidC2_Rev2 [64] =
{
NULL,
" 3.3V", "5V ",
" SDA.1", "5V ",
" SCL.1", "GND(0V) ",
"GPIO.249", "TxD1 ",
" GND(0V)", "RxD1 ",
"GPIO.247", "GPIO.238",
"GPIO.239", "GND(0V) ",
"GPIO.237", "GPIO.236",
" 3.3V", "GPIO.233",
"GPIO.235", "GND(0V) ",
"GPIO.232", "GPIO.231",
"GPIO.230", "GPIO.229",
" GND(0V)", "GPIO.225",
" SDA.2", "SCL.2 ",
"GPIO.228", "GND(0V) ",
"GPIO.219", "GPIO.224",
"GPIO.234", "GND(0V) ",
"GPIO.214", "GPIO.218",
" AIN.1", "1V8 ",
" GND(0V)", "AIN.0 ",
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,
} ;
/*----------------------------------------------------------------------------*/
static const char *physNamesOdroidC2_Rev1 [64] =
{
NULL,
" 3.3V", "5V ",
" SDA.1", "5V ",
" SCL.1", "GND(0V) ",
"GPIO.214", "--------",
" GND(0V)", "--------",
"GPIO.219", "GPIO.218",
"GPIO.247", "GND(0V) ",
"--------", "GPIO.235",
" 3.3V", "GPIO.233",
"GPIO.238", "GND(0V) ",
"GPIO.237", "GPIO.234",
"GPIO.236", "GPIO.248",
" GND(0V)", "GPIO.249",
" SDA.2", "SCL.2 ",
"GPIO.232", "GND(0V) ",
"GPIO.231", "GPIO.230",
"GPIO.239", "GND(0V) ",
"GPIO.228", "GPIO.229",
" AIN.1", "1V8 ",
" GND(0V)", "AIN.0 ",
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,
} ;
/*----------------------------------------------------------------------------*/
static const char *physNamesOdroidXU3 [64] =
{
NULL,
" 3.3V", "5V ",
"I2C1.SDA", "5V ",
"I2C1.SCL", "GND(0V) ",
"GPIO. 18", "UART0.TX",
" GND(0V)", "UART0.RX",
"GPIO.174", "GPIO.173",
"GPIO. 21", "GND(0V) ",
"GPIO. 22", "GPIO. 19",
" 3.3V", "GPIO. 23",
" MOSI", "GND(0V) ",
" MISO", "GPIO. 24",
" SCLK", "CE0 ",
" GND(0V)", "GPIO. 25",
"I2C5.SDA", "I2C5.SCL",
"GPIO. 28", "GND(0V) ",
"GPIO. 30", "GPIO. 29",
"GPIO. 31", "GND(0V) ",
"POWER ON", "GPIO. 33",
" AIN.0", "1V8 ",
" GND(0V)", "AIN.3 ",
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,
} ;
/*----------------------------------------------------------------------------*/
static const char *physNamesOdroidN1 [64] =
{
NULL,
" 3.0V", "5V ",
"I2C4_SDA", "5V ",
"I2C4_SCL", "GND(0V) ",
"GPIO1A.0", "UART0_TX",
" GND(0V)", "UART0_RX",
"GPIO1A.1", "GPIO1A.2",
"GPIO1A.3", "GND(0V) ",
"GPIO1A.4", "GPIO1B.5",
" 3.0V", "GPIO1C.2",
"SPI1_TXD", "GND(0V) ",
"SPI1_RXD", "GPIO1D.0",
"SPI1_CLK", "SPI1_CSN",
" GND(0V)", "GPIO1C.6",
"I2C8_SDA", "I2C8_SCL",
"SPDIF_TX", "GND(0V) ",
" PWM1", "GPIO4D.4",
"GPIO4D.0", "GND(0V) ",
"GPIO4D.5", "GPIO4D.6",
"ADC.AIN1", "1V8 ",
" GND(0V)", "ADC.AIN0",
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,
} ;
/*----------------------------------------------------------------------------*/
static const char *physNamesOdroidN2 [64] =
{
NULL,
" 3.3V", "5V ",
" SDA.2", "5V ",
" SCL.2", "GND(0V) ",
"GPIO.473", "TxD1 ",
" GND(0V)", "RxD1 ",
"GPIO.479", "GPIO.492",
"GPIO.480", "GND(0V) ",
"GPIO.483", "GPIO.476",
" 3.3V", "GPIO.477",
" MOSI", "GND(0V) ",
" MISO", "GPIO.478",
" SCLK", "CE0 ",
" GND(0V)", "GPIO.464",
" SDA.3", "SCL.3 ",
"GPIO.490", "GND(0V) ",
"GPIO.491", "GPIO.472",
"GPIO.481", "GND(0V) ",
"GPIO.482", "GPIO.495",
" AIN.3", "1V8 ",
" GND(0V)", "AIN.2 ",
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,
} ;
/*----------------------------------------------------------------------------*/
static void readallPhysOdroid (int model, int rev, int physPin, const char *physNames[])
{
int pin ;
// GPIO, wPi pin number
if ((physPinToGpio (physPin) == -1) && (physToWpi [physPin] == -1))
printf (" | | ") ;
else if (physPinToGpio (physPin) != -1)
printf (" | %3d | %3d", physPinToGpio (physPin), physToWpi [physPin]);
else
printf (" | | %3d", physToWpi [physPin]);
// GPIO pin name
printf (" | %s", physNames [physPin]) ;
// GPIO pin mode, value, drive strength, pupd
if ((physToWpi [physPin] == -1) || (physPinToGpio (physPin) == -1))
printf (" | | | | ") ;
else {
if (wpMode == MODE_GPIO)
pin = physPinToGpio (physPin);
else if (wpMode == MODE_PHYS)
pin = physPin ;
else
pin = physToWpi [physPin];
printf (" | %4s", alts [getAlt (pin)]) ;
printf (" | %d", digitalRead (pin)) ;
switch (model) {
case MODEL_ODROID_N1:
printf (" | | ");
break;
case MODEL_ODROID_C1:
case MODEL_ODROID_C2:
printf (" | | %5s", pupd[getPUPD(pin)]);
break;
case MODEL_ODROID_XU3:
case MODEL_ODROID_N2:
printf (" | %2d | %5s", getPadDrive(pin), pupd[getPUPD(pin)]);
break;
default:
break;
}
}
// Physical pin number
printf (" | %2d", physPin) ;
++physPin ;
printf (" || %-2d", physPin) ;
// GPIO pin mode, value, drive strength, pupd
if ((physToWpi [physPin] == -1) || (physPinToGpio (physPin) == -1))
printf (" | | | | ") ;
else {
if (wpMode == MODE_GPIO)
pin = physPinToGpio (physPin);
else if (wpMode == MODE_PHYS)
pin = physPin ;
else
pin = physToWpi [physPin];
switch (model) {
case MODEL_ODROID_N1:
printf (" | | ");
break;
case MODEL_ODROID_C1:
case MODEL_ODROID_C2:
printf (" | %-5s | ", pupd[getPUPD(pin)]);
break;
case MODEL_ODROID_XU3:
case MODEL_ODROID_N2:
printf (" | %-5s | %-2d", pupd[getPUPD(pin)], getPadDrive(pin));
break;
default:
break;
}
printf (" | %d", digitalRead (pin));
printf (" | %-4s", alts [getAlt (pin)]);
}
// GPIO pin name
printf (" | %-6s", physNames [physPin]);
// GPIO, wPi pin number
if ((physPinToGpio (physPin) == -1) && (physToWpi [physPin] == -1))
printf (" | | ") ;
else if (physPinToGpio (physPin) != -1)
printf (" | %-3d | %-3d", physToWpi [physPin], physPinToGpio (physPin));
else
printf (" | %-3d | ", physToWpi [physPin]);
printf (" |\n") ;
}
/*----------------------------------------------------------------------------*/
void ReadallOdroid (int model, int rev, const char *physNames[])
{
int pin ;
printf (" | GPIO | wPi | Name | Mode | V | DS | PU/PD | Physical | PU/PD | DS | V | Mode | Name | wPi | GPIO |\n") ;
printf (" +------+-----+----------+------+---+----+-------+----++----+-------+----+---+------+----------+-----+------+\n") ;
for (pin = 1 ; pin <= 40 ; pin += 2)
readallPhysOdroid (model, rev, pin, physNames) ;
printf (" +------+-----+----------+------+---+----+-------+----++----+-------+----+---+------+----------+-----+------+\n") ;
}
/*----------------------------------------------------------------------------*/
/*
* doReadall:
* Read all the GPIO pins
* We also want to use this to read the state of pins on an externally
* connected device, so we need to do some fiddling with the internal
* wiringPi node structures - since the gpio command can only use
* one external device at a time, we'll use that to our advantage...
*/
/*----------------------------------------------------------------------------*/
void doReadall (void)
{
int model, rev, mem, maker, overVolted;
const char (*physNames)[];
// External readall
if (wiringPiNodes != NULL) {
doReadallExternal ();
return ;
}
piBoardId (&model, &rev, &mem, &maker, &overVolted) ;
switch (model) {
case MODEL_ODROID_C1:
printf (" +------+-----+----------+------+---+----+---- Model ODROID-C1 ----+----+---+------+----------+-----+------+\n") ;
physNames = physNamesOdroidC1;
break;
case MODEL_ODROID_C2:
printf (" +------+-----+----------+------+---+----+---- Model ODROID-C2 ----+----+---+------+----------+-----+------+\n") ;
if (rev == 1)
physNames = physNamesOdroidC2_Rev1;
else
physNames = physNamesOdroidC2_Rev2;
break;
case MODEL_ODROID_XU3:
printf (" +------+-----+----------+------+---+----+--- Model ODROID-XU3/4 ---+----+---+------+----------+-----+------+\n") ;
physNames = physNamesOdroidXU3;
break;
case MODEL_ODROID_N1:
printf (" +------+-----+----------+------+---+----+---- Model ODROID-N1 ----+----+---+------+----------+-----+------+\n") ;
physNames = physNamesOdroidN1;
break;
case MODEL_ODROID_N2:
printf (" +------+-----+----------+------+---+----+---- Model ODROID-N2 ----+----+---+------+----------+-----+------+\n") ;
physNames = physNamesOdroidN2;
break;
default:
printf ("Oops - unable to determine board type... model: %d\n", model) ;
return;
}
ReadallOdroid(model, rev, physNames);
}
/*----------------------------------------------------------------------------*/
/*
* doAllReadall:
* Force reading of all pins regardless of Pi model
*/
/*----------------------------------------------------------------------------*/
void doAllReadall (void)
{
doReadall();
}
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/

View File

@@ -27,9 +27,6 @@ PREFIX?=/local
LDCONFIG?=ldconfig
# BRAND_NAME = Pi
BRAND_NAME = Odroid
ifneq ($V,1)
Q ?= @
endif
@@ -48,11 +45,11 @@ LIBS = -lm -lpthread -lrt -lcrypt
###############################################################################
SRC = wiring${BRAND_NAME}.c \
SRC = wiringPi.c \
wiringSerial.c wiringShift.c \
piHiPri.c piThread.c \
wiring${BRAND_NAME}SPI.c \
wiring${BRAND_NAME}I2C.c \
wiringPiSPI.c \
wiringPiI2C.c \
softPwm.c softTone.c \
mcp23008.c mcp23016.c mcp23017.c \
mcp23s08.c mcp23s17.c \
@@ -64,15 +61,12 @@ SRC = wiring${BRAND_NAME}.c \
bmp180.c htu21d.c ds18b20.c \
drcSerial.c drcNet.c \
pseudoPins.c \
wpiExtensions.c
ifeq ($(BRAND_NAME), Odroid)
SRC += odroidc1.c \
odroidc2.c \
odroidxu3.c \
odroidn1.c \
odroidn2.c
endif
wpiExtensions.c \
odroidc1.c \
odroidc2.c \
odroidxu3.c \
odroidn1.c \
odroidn2.c
HEADERS = $(shell ls *.h)
@@ -152,17 +146,14 @@ depend:
# DO NOT DELETE
ifeq ($(BRAND_NAME), Odroid)
wiringOdroid.o: softPwm.h softTone.h wiringPi.h wiringOdroid.h ../version.h
odroidc1.c : wiringPi.h wiringOdroid.h odroidc1.h
odroidc2.c : wiringPi.h wiringOdroid.h odroidc2.h
odroidxu3.c : wiringPi.h wiringOdroid.h odroidxu3.h
odroidn1.c : wiringPi.h wiringOdroid.h odroidn1.h
odroidn2.c : wiringPi.h wiringOdroid.h odroidn2.h
else
wiringPi.o: softPwm.h softTone.h wiringPi.h ../version.h
endif
# ODROID Boards
odroidc1.o : wiringPi.h odroidc1.h
odroidc2.o : wiringPi.h odroidc2.h
odroidxu3.o : wiringPi.h odroidxu3.h
odroidn1.o : wiringPi.h odroidn1.h
odroidn2.o : wiringPi.h odroidn2.h
wiringPi.o: softPwm.h softTone.h wiringPi.h ../version.h
wiringSerial.o: wiringSerial.h
wiringShift.o: wiringPi.h wiringShift.h
piHiPri.o: wiringPi.h

View File

@@ -18,7 +18,11 @@
#include <sys/utsname.h>
/*----------------------------------------------------------------------------*/
#include "wiringOdroid.h"
#include "softPwm.h"
#include "softTone.h"
/*----------------------------------------------------------------------------*/
#include "wiringPi.h"
#include "odroid???.h"
/*----------------------------------------------------------------------------*/
@@ -101,17 +105,17 @@ static int gpioToShiftReg (int pin);
static int gpioToGPFSELReg (int pin);
/*----------------------------------------------------------------------------*/
// wiringPi core function
// wiringPi core function
/*----------------------------------------------------------------------------*/
static int getModeToGpio (int mode, int pin);
static void pinMode (int pin, int mode);
static int getAlt (int pin);
static void pullUpDnControl (int pin, int pud);
static int digitalRead (int pin);
static void digitalWrite (int pin, int value);
static int analogRead (int pin);
static void digitalWriteByte(const int value);
static unsigned int digitalReadByte (void);
static int _getModeToGpio (int mode, int pin);
static void _pinMode (int pin, int mode);
static int _getAlt (int pin);
static void _pullUpDnControl (int pin, int pud);
static int _digitalRead (int pin);
static void _digitalWrite (int pin, int value);
static int _analogRead (int pin);
static void _digitalWriteByte (const int value);
static unsigned int _digitalReadByte (void);
/*----------------------------------------------------------------------------*/
// board init function
@@ -182,50 +186,50 @@ static int gpioToGPFSELReg (int pin)
return -1;
}
/*----------------------------------------------------------------------------*/
static int getModeToGpio (int mode, int pin)
static int _getModeToGpio (int mode, int pin)
{
return -1;
}
/*----------------------------------------------------------------------------*/
static void pinMode (int pin, int mode)
static void _pinMode (int pin, int mode)
{
}
/*----------------------------------------------------------------------------*/
static int getAlt (int pin)
static int _getAlt (int pin)
{
return -1;
}
/*----------------------------------------------------------------------------*/
static void pullUpDnControl (int pin, int pud)
static void _pullUpDnControl (int pin, int pud)
{
}
/*----------------------------------------------------------------------------*/
static int digitalRead (int pin)
static int _digitalRead (int pin)
{
}
/*----------------------------------------------------------------------------*/
static void digitalWrite (int pin, int value)
static void _digitalWrite (int pin, int value)
{
}
/*----------------------------------------------------------------------------*/
static int analogRead (int pin)
static int _analogRead (int pin)
{
return -1;
}
/*----------------------------------------------------------------------------*/
static void digitalWriteByte (const int value)
static void _digitalWriteByte (const int value)
{
}
/*----------------------------------------------------------------------------*/
static unsigned int digitalReadByte (void)
static unsigned int _digitalReadByte (void)
{
return -1;
}
@@ -248,15 +252,15 @@ void init_odroid??? (struct libodroid *libwiring)
init_adc_fds();
/* wiringPi Core function initialize */
libwiring->getModeToGpio = getModeToGpio;
libwiring->pinMode = pinMode;
libwiring->getAlt = getAlt;
libwiring->pullUpDnControl = pullUpDnControl;
libwiring->digitalRead = digitalRead;
libwiring->digitalWrite = digitalWrite;
libwiring->analogRead = analogRead;
libwiring->digitalWriteByte = digitalWriteByte;
libwiring->digitalReadByte = digitalReadByte;
libwiring->getModeToGpio = _getModeToGpio;
libwiring->pinMode = _pinMode;
libwiring->getAlt = _getAlt;
libwiring->pullUpDnControl = _pullUpDnControl;
libwiring->digitalRead = _digitalRead;
libwiring->digitalWrite = _digitalWrite;
libwiring->analogRead = _analogRead;
libwiring->digitalWriteByte = _digitalWriteByte;
libwiring->digitalReadByte = _digitalReadByte;
/* global variable setup */
lib = libwiring;

View File

@@ -18,7 +18,11 @@
#include <sys/utsname.h>
/*----------------------------------------------------------------------------*/
#include "wiringOdroid.h"
#include "softPwm.h"
#include "softTone.h"
/*----------------------------------------------------------------------------*/
#include "wiringPi.h"
#include "odroidc1.h"
/*----------------------------------------------------------------------------*/
@@ -103,18 +107,18 @@ static int gpioToShiftReg (int pin);
static int gpioToGPFSELReg (int pin);
/*----------------------------------------------------------------------------*/
// wiringPi core function
// wiringPi core function
/*----------------------------------------------------------------------------*/
static int getModeToGpio (int mode, int pin);
static void pinMode (int pin, int mode);
static int getAlt (int pin);
static int getPUPD (int pin);
static void pullUpDnControl (int pin, int pud);
static int digitalRead (int pin);
static void digitalWrite (int pin, int value);
static int analogRead (int pin);
static void digitalWriteByte(const int value);
static unsigned int digitalReadByte (void);
static int _getModeToGpio (int mode, int pin);
static void _pinMode (int pin, int mode);
static int _getAlt (int pin);
static int _getPUPD (int pin);
static void _pullUpDnControl (int pin, int pud);
static int _digitalRead (int pin);
static void _digitalWrite (int pin, int value);
static int _analogRead (int pin);
static void _digitalWriteByte (const int value);
static unsigned int _digitalReadByte (void);
/*----------------------------------------------------------------------------*/
// board init function
@@ -132,12 +136,12 @@ static void init_adc_fds (void);
/*----------------------------------------------------------------------------*/
static int gpioToGPSETReg (int pin)
{
if (pin >= GPIOX_PIN_START && pin <= GPIOX_PIN_END)
return GPIOX_OUTP_REG_OFFSET;
if (pin >= GPIOY_PIN_START && pin <= GPIOY_PIN_END)
return GPIOY_OUTP_REG_OFFSET;
if (pin >= GPIODV_PIN_START && pin <= GPIODV_PIN_END)
return GPIODV_OUTP_REG_OFFSET;
if (pin >= C1_GPIOX_PIN_START && pin <= C1_GPIOX_PIN_END)
return C1_GPIOX_OUTP_REG_OFFSET;
if (pin >= C1_GPIOY_PIN_START && pin <= C1_GPIOY_PIN_END)
return C1_GPIOY_OUTP_REG_OFFSET;
if (pin >= C1_GPIODV_PIN_START && pin <= C1_GPIODV_PIN_END)
return C1_GPIODV_OUTP_REG_OFFSET;
return -1;
}
@@ -148,12 +152,12 @@ static int gpioToGPSETReg (int pin)
/*----------------------------------------------------------------------------*/
static int gpioToGPLEVReg (int pin)
{
if (pin >= GPIOX_PIN_START && pin <= GPIOX_PIN_END)
return GPIOX_INP_REG_OFFSET;
if (pin >= GPIOY_PIN_START && pin <= GPIOY_PIN_END)
return GPIOY_INP_REG_OFFSET;
if (pin >= GPIODV_PIN_START && pin <= GPIODV_PIN_END)
return GPIODV_INP_REG_OFFSET;
if (pin >= C1_GPIOX_PIN_START && pin <= C1_GPIOX_PIN_END)
return C1_GPIOX_INP_REG_OFFSET;
if (pin >= C1_GPIOY_PIN_START && pin <= C1_GPIOY_PIN_END)
return C1_GPIOY_INP_REG_OFFSET;
if (pin >= C1_GPIODV_PIN_START && pin <= C1_GPIODV_PIN_END)
return C1_GPIODV_INP_REG_OFFSET;
return -1;
}
@@ -164,12 +168,12 @@ static int gpioToGPLEVReg (int pin)
/*----------------------------------------------------------------------------*/
static int gpioToPUENReg (int pin)
{
if (pin >= GPIOX_PIN_START && pin <= GPIOX_PIN_END)
return GPIOX_PUEN_REG_OFFSET;
if (pin >= GPIOY_PIN_START && pin <= GPIOY_PIN_END)
return GPIOY_PUEN_REG_OFFSET;
if (pin >= GPIODV_PIN_START && pin <= GPIODV_PIN_END)
return GPIODV_PUEN_REG_OFFSET;
if (pin >= C1_GPIOX_PIN_START && pin <= C1_GPIOX_PIN_END)
return C1_GPIOX_PUEN_REG_OFFSET;
if (pin >= C1_GPIOY_PIN_START && pin <= C1_GPIOY_PIN_END)
return C1_GPIOY_PUEN_REG_OFFSET;
if (pin >= C1_GPIODV_PIN_START && pin <= C1_GPIODV_PIN_END)
return C1_GPIODV_PUEN_REG_OFFSET;
return -1;
}
@@ -180,12 +184,12 @@ static int gpioToPUENReg (int pin)
/*----------------------------------------------------------------------------*/
static int gpioToPUPDReg (int pin)
{
if (pin >= GPIOX_PIN_START && pin <= GPIOX_PIN_END)
return GPIOX_PUPD_REG_OFFSET;
if (pin >= GPIOY_PIN_START && pin <= GPIOY_PIN_END)
return GPIOY_PUPD_REG_OFFSET;
if (pin >= GPIODV_PIN_START && pin <= GPIODV_PIN_END)
return GPIODV_PUPD_REG_OFFSET;
if (pin >= C1_GPIOX_PIN_START && pin <= C1_GPIOX_PIN_END)
return C1_GPIOX_PUPD_REG_OFFSET;
if (pin >= C1_GPIOY_PIN_START && pin <= C1_GPIOY_PIN_END)
return C1_GPIOY_PUPD_REG_OFFSET;
if (pin >= C1_GPIODV_PIN_START && pin <= C1_GPIODV_PIN_END)
return C1_GPIODV_PUPD_REG_OFFSET;
return -1;
}
@@ -196,12 +200,12 @@ static int gpioToPUPDReg (int pin)
/*----------------------------------------------------------------------------*/
static int gpioToShiftReg (int pin)
{
if (pin >= GPIOX_PIN_START && pin <= GPIOX_PIN_END)
return pin - GPIOX_PIN_START;
if (pin >= GPIOY_PIN_START && pin <= GPIOY_PIN_END)
return pin - GPIOY_PIN_START;
if (pin >= GPIODV_PIN_START && pin <= GPIODV_PIN_END)
return pin - GPIODV_PIN_START;
if (pin >= C1_GPIOX_PIN_START && pin <= C1_GPIOX_PIN_END)
return pin - C1_GPIOX_PIN_START;
if (pin >= C1_GPIOY_PIN_START && pin <= C1_GPIOY_PIN_END)
return pin - C1_GPIOY_PIN_START;
if (pin >= C1_GPIODV_PIN_START && pin <= C1_GPIODV_PIN_END)
return pin - C1_GPIODV_PIN_START;
return -1;
}
@@ -212,17 +216,17 @@ static int gpioToShiftReg (int pin)
/*----------------------------------------------------------------------------*/
static int gpioToGPFSELReg (int pin)
{
if (pin >= GPIOX_PIN_START && pin <= GPIOX_PIN_END)
return GPIOX_FSEL_REG_OFFSET;
if (pin >= GPIOY_PIN_START && pin <= GPIOY_PIN_END)
return GPIOY_FSEL_REG_OFFSET;
if (pin >= GPIODV_PIN_START && pin <= GPIODV_PIN_END)
return GPIODV_FSEL_REG_OFFSET;
if (pin >= C1_GPIOX_PIN_START && pin <= C1_GPIOX_PIN_END)
return C1_GPIOX_FSEL_REG_OFFSET;
if (pin >= C1_GPIOY_PIN_START && pin <= C1_GPIOY_PIN_END)
return C1_GPIOY_FSEL_REG_OFFSET;
if (pin >= C1_GPIODV_PIN_START && pin <= C1_GPIODV_PIN_END)
return C1_GPIODV_FSEL_REG_OFFSET;
return -1;
}
/*----------------------------------------------------------------------------*/
static int getModeToGpio (int mode, int pin)
static int _getModeToGpio (int mode, int pin)
{
int retPin = -1;
@@ -258,14 +262,14 @@ static int getModeToGpio (int mode, int pin)
}
/*----------------------------------------------------------------------------*/
static void pinMode (int pin, int mode)
static void _pinMode (int pin, int mode)
{
int fsel, shift, origPin = pin;
if (lib->mode == MODE_GPIO_SYS)
return;
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return;
softPwmStop (origPin);
@@ -294,7 +298,7 @@ static void pinMode (int pin, int mode)
}
/*----------------------------------------------------------------------------*/
static int getAlt (int pin)
static int _getAlt (int pin)
{
int fsel, shift;
int mode = 0;
@@ -302,169 +306,169 @@ static int getAlt (int pin)
if (lib->mode == MODE_GPIO_SYS)
return 0;
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return 2;
fsel = gpioToGPFSELReg(pin);
shift = gpioToShiftReg(pin);
switch (pin) {
case GPIOX_PIN_START ...GPIOX_PIN_END:
case C1_GPIOX_PIN_START ...C1_GPIOX_PIN_END:
switch (shift) {
case 0:
if (*(gpio + MUX_REG_8_OFFSET) & (1 << 5)) mode = 1; break;
if (*(gpio + MUX_REG_5_OFFSET) & (1 << 14)) mode = 2; break;
if (*(gpio + C1_MUX_REG_8_OFFSET) & (1 << 5)) mode = 1; break;
if (*(gpio + C1_MUX_REG_5_OFFSET) & (1 << 14)) mode = 2; break;
break;
case 1:
if (*(gpio + MUX_REG_8_OFFSET) & (1 << 4)) mode = 1; break;
if (*(gpio + MUX_REG_5_OFFSET) & (1 << 13)) mode = 2; break;
if (*(gpio + C1_MUX_REG_8_OFFSET) & (1 << 4)) mode = 1; break;
if (*(gpio + C1_MUX_REG_5_OFFSET) & (1 << 13)) mode = 2; break;
break;
case 2:
if (*(gpio + MUX_REG_8_OFFSET) & (1 << 3)) mode = 1; break;
if (*(gpio + MUX_REG_5_OFFSET) & (1 << 13)) mode = 2; break;
if (*(gpio + C1_MUX_REG_8_OFFSET) & (1 << 3)) mode = 1; break;
if (*(gpio + C1_MUX_REG_5_OFFSET) & (1 << 13)) mode = 2; break;
break;
case 3:
if (*(gpio + MUX_REG_8_OFFSET) & (1 << 2)) mode = 1; break;
if (*(gpio + MUX_REG_5_OFFSET) & (1 << 13)) mode = 2; break;
if (*(gpio + C1_MUX_REG_8_OFFSET) & (1 << 2)) mode = 1; break;
if (*(gpio + C1_MUX_REG_5_OFFSET) & (1 << 13)) mode = 2; break;
break;
case 4:
if ((*(gpio + MUX_REG_5_OFFSET) & (1 << 29)) &&
(*(gpio + MUX_REG_5_OFFSET) & (1 << 12))) mode = 1; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 30)) mode = 2; break;
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 17)) mode = 3; break;
if ((*(gpio + C1_MUX_REG_5_OFFSET) & (1 << 29)) &&
(*(gpio + C1_MUX_REG_5_OFFSET) & (1 << 12))) mode = 1; break;
if (*(gpio + C1_MUX_REG_3_OFFSET) & (1 << 30)) mode = 2; break;
if (*(gpio + C1_MUX_REG_4_OFFSET) & (1 << 17)) mode = 3; break;
break;
case 5:
if ((*(gpio + MUX_REG_5_OFFSET) & (1 << 28)) &&
(*(gpio + MUX_REG_5_OFFSET) & (1 << 12))) mode = 1; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 29)) mode = 2; break;
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 16)) mode = 3; break;
if ((*(gpio + C1_MUX_REG_5_OFFSET) & (1 << 28)) &&
(*(gpio + C1_MUX_REG_5_OFFSET) & (1 << 12))) mode = 1; break;
if (*(gpio + C1_MUX_REG_3_OFFSET) & (1 << 29)) mode = 2; break;
if (*(gpio + C1_MUX_REG_4_OFFSET) & (1 << 16)) mode = 3; break;
break;
case 6:
if ((*(gpio + MUX_REG_5_OFFSET) & (1 << 28)) &&
(*(gpio + MUX_REG_5_OFFSET) & (1 << 12))) mode = 1; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 27)) mode = 2; break;
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 15)) mode = 3; break;
if (*(gpio + MUX_REG_5_OFFSET) & (1 << 9)) mode = 4; break;
if ((*(gpio + C1_MUX_REG_5_OFFSET) & (1 << 28)) &&
(*(gpio + C1_MUX_REG_5_OFFSET) & (1 << 12))) mode = 1; break;
if (*(gpio + C1_MUX_REG_3_OFFSET) & (1 << 27)) mode = 2; break;
if (*(gpio + C1_MUX_REG_4_OFFSET) & (1 << 15)) mode = 3; break;
if (*(gpio + C1_MUX_REG_5_OFFSET) & (1 << 9)) mode = 4; break;
break;
case 7:
if ((*(gpio + MUX_REG_5_OFFSET) & (1 << 28)) &&
(*(gpio + MUX_REG_5_OFFSET) & (1 << 12))) mode = 1; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 27)) mode = 2; break;
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 14)) mode = 3; break;
if (*(gpio + MUX_REG_5_OFFSET) & (1 << 8)) mode = 4; break;
if ((*(gpio + C1_MUX_REG_5_OFFSET) & (1 << 28)) &&
(*(gpio + C1_MUX_REG_5_OFFSET) & (1 << 12))) mode = 1; break;
if (*(gpio + C1_MUX_REG_3_OFFSET) & (1 << 27)) mode = 2; break;
if (*(gpio + C1_MUX_REG_4_OFFSET) & (1 << 14)) mode = 3; break;
if (*(gpio + C1_MUX_REG_5_OFFSET) & (1 << 8)) mode = 4; break;
break;
case 8:
if (*(gpio + MUX_REG_8_OFFSET) & (1 << 1)) mode = 1; break;
if (*(gpio + MUX_REG_5_OFFSET) & (1 << 11)) mode = 2; break;
if (*(gpio + MUX_REG_6_OFFSET) & (1 << 19)) mode = 3; break;
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 22)) mode = 4; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 6)) mode = 5; break;
if (*(gpio + C1_MUX_REG_8_OFFSET) & (1 << 1)) mode = 1; break;
if (*(gpio + C1_MUX_REG_5_OFFSET) & (1 << 11)) mode = 2; break;
if (*(gpio + C1_MUX_REG_6_OFFSET) & (1 << 19)) mode = 3; break;
if (*(gpio + C1_MUX_REG_4_OFFSET) & (1 << 22)) mode = 4; break;
if (*(gpio + C1_MUX_REG_3_OFFSET) & (1 << 6)) mode = 5; break;
break;
case 9:
if (*(gpio + MUX_REG_8_OFFSET) & (1 << 0)) mode = 1; break;
if (*(gpio + MUX_REG_5_OFFSET) & (1 << 10)) mode = 2; break;
if (*(gpio + MUX_REG_6_OFFSET) & (1 << 18)) mode = 3; break;
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 24)) mode = 4; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 6)) mode = 5; break;
if (*(gpio + C1_MUX_REG_8_OFFSET) & (1 << 0)) mode = 1; break;
if (*(gpio + C1_MUX_REG_5_OFFSET) & (1 << 10)) mode = 2; break;
if (*(gpio + C1_MUX_REG_6_OFFSET) & (1 << 18)) mode = 3; break;
if (*(gpio + C1_MUX_REG_4_OFFSET) & (1 << 24)) mode = 4; break;
if (*(gpio + C1_MUX_REG_3_OFFSET) & (1 << 6)) mode = 5; break;
break;
case 10:
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 22)) mode = 1; break;
if ((*(gpio + MUX_REG_7_OFFSET) & (1 << 31)) &&
(*(gpio + MUX_REG_9_OFFSET) & (1 << 19))) mode = 2; break;
if (*(gpio + MUX_REG_6_OFFSET) & (1 << 17)) mode = 3; break;
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 23)) mode = 4; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 8)) mode = 5; break;
if (*(gpio + C1_MUX_REG_3_OFFSET) & (1 << 22)) mode = 1; break;
if ((*(gpio + C1_MUX_REG_7_OFFSET) & (1 << 31)) &&
(*(gpio + C1_MUX_REG_9_OFFSET) & (1 << 19))) mode = 2; break;
if (*(gpio + C1_MUX_REG_6_OFFSET) & (1 << 17)) mode = 3; break;
if (*(gpio + C1_MUX_REG_4_OFFSET) & (1 << 23)) mode = 4; break;
if (*(gpio + C1_MUX_REG_3_OFFSET) & (1 << 8)) mode = 5; break;
break;
case 11:
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 20)) mode = 1; break;
if (*(gpio + MUX_REG_7_OFFSET) & (1 << 30)) mode = 2; break;
if (*(gpio + MUX_REG_2_OFFSET) & (1 << 3)) mode = 5; break;
if (*(gpio + C1_MUX_REG_3_OFFSET) & (1 << 20)) mode = 1; break;
if (*(gpio + C1_MUX_REG_7_OFFSET) & (1 << 30)) mode = 2; break;
if (*(gpio + C1_MUX_REG_2_OFFSET) & (1 << 3)) mode = 5; break;
break;
case 16:
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 9)) mode = 1; break;
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 21)) mode = 4; break;
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 5)) mode = 5; break;
if (*(gpio + C1_MUX_REG_4_OFFSET) & (1 << 9)) mode = 1; break;
if (*(gpio + C1_MUX_REG_4_OFFSET) & (1 << 21)) mode = 4; break;
if (*(gpio + C1_MUX_REG_4_OFFSET) & (1 << 5)) mode = 5; break;
break;
case 17:
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 8)) mode = 1; break;
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 20)) mode = 4; break;
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 4)) mode = 5; break;
if (*(gpio + C1_MUX_REG_4_OFFSET) & (1 << 8)) mode = 1; break;
if (*(gpio + C1_MUX_REG_4_OFFSET) & (1 << 20)) mode = 4; break;
if (*(gpio + C1_MUX_REG_4_OFFSET) & (1 << 4)) mode = 5; break;
break;
case 18:
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 7)) mode = 1; break;
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 19)) mode = 4; break;
if (*(gpio + C1_MUX_REG_4_OFFSET) & (1 << 7)) mode = 1; break;
if (*(gpio + C1_MUX_REG_4_OFFSET) & (1 << 19)) mode = 4; break;
break;
case 19:
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 6)) mode = 1; break;
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 18)) mode = 4; break;
if (*(gpio + C1_MUX_REG_4_OFFSET) & (1 << 6)) mode = 1; break;
if (*(gpio + C1_MUX_REG_4_OFFSET) & (1 << 18)) mode = 4; break;
break;
case 20:
if (*(gpio + MUX_REG_6_OFFSET) & (1 << 16)) mode = 3; break;
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 25)) mode = 4; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 9)) mode = 5; break;
if (*(gpio + C1_MUX_REG_6_OFFSET) & (1 << 16)) mode = 3; break;
if (*(gpio + C1_MUX_REG_4_OFFSET) & (1 << 25)) mode = 4; break;
if (*(gpio + C1_MUX_REG_3_OFFSET) & (1 << 9)) mode = 5; break;
break;
}
break;
case GPIOY_PIN_START ...GPIOY_PIN_END:
case C1_GPIOY_PIN_START ...C1_GPIOY_PIN_END:
switch (shift) {
case 0:
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 2)) mode = 1; break;
if (*(gpio + C1_MUX_REG_3_OFFSET) & (1 << 2)) mode = 1; break;
break;
case 1:
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 1)) mode = 1; break;
if (*(gpio + C1_MUX_REG_3_OFFSET) & (1 << 1)) mode = 1; break;
break;
case 3:
if (*(gpio + MUX_REG_1_OFFSET) & (1 << 7)) mode = 2; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 18)) mode = 3; break;
if (*(gpio + C1_MUX_REG_1_OFFSET) & (1 << 7)) mode = 2; break;
if (*(gpio + C1_MUX_REG_3_OFFSET) & (1 << 18)) mode = 3; break;
break;
case 6:
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 5)) mode = 1; break;
if (*(gpio + C1_MUX_REG_3_OFFSET) & (1 << 5)) mode = 1; break;
break;
case 7:
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 5)) mode = 1; break;
if (*(gpio + C1_MUX_REG_3_OFFSET) & (1 << 5)) mode = 1; break;
break;
case 8:
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 0)) mode = 1; break;
if (*(gpio + C1_MUX_REG_3_OFFSET) & (1 << 0)) mode = 1; break;
break;
case 9:
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 4)) mode = 1; break;
if (*(gpio + C1_MUX_REG_3_OFFSET) & (1 << 4)) mode = 1; break;
break;
case 10:
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 5)) mode = 1; break;
if (*(gpio + C1_MUX_REG_3_OFFSET) & (1 << 5)) mode = 1; break;
break;
case 11:
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 5)) mode = 1; break;
if (*(gpio + C1_MUX_REG_3_OFFSET) & (1 << 5)) mode = 1; break;
break;
case 12:
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 5)) mode = 1; break;
if (*(gpio + C1_MUX_REG_3_OFFSET) & (1 << 5)) mode = 1; break;
break;
case 13:
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 5)) mode = 1; break;
if (*(gpio + MUX_REG_5_OFFSET) & (1 << 7)) mode = 3; break;
if (*(gpio + C1_MUX_REG_3_OFFSET) & (1 << 5)) mode = 1; break;
if (*(gpio + C1_MUX_REG_5_OFFSET) & (1 << 7)) mode = 3; break;
break;
case 14:
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 5)) mode = 1; break;
if (*(gpio + MUX_REG_5_OFFSET) & (1 << 6)) mode = 3; break;
if (*(gpio + C1_MUX_REG_3_OFFSET) & (1 << 5)) mode = 1; break;
if (*(gpio + C1_MUX_REG_5_OFFSET) & (1 << 6)) mode = 3; break;
break;
}
break;
case GPIODV_PIN_START...GPIODV_PIN_END:
case C1_GPIODV_PIN_START...C1_GPIODV_PIN_END:
switch (shift) {
case 24:
if (*(gpio + MUX_REG_6_OFFSET) & (1 << 23)) mode = 4; break;
if (*(gpio + MUX_REG_9_OFFSET) & (1 << 31)) mode = 5; break;
if (*(gpio + C1_MUX_REG_6_OFFSET) & (1 << 23)) mode = 4; break;
if (*(gpio + C1_MUX_REG_9_OFFSET) & (1 << 31)) mode = 5; break;
break;
case 25:
if (*(gpio + MUX_REG_6_OFFSET) & (1 << 22)) mode = 4; break;
if (*(gpio + MUX_REG_9_OFFSET) & (1 << 30)) mode = 5; break;
if (*(gpio + C1_MUX_REG_6_OFFSET) & (1 << 22)) mode = 4; break;
if (*(gpio + C1_MUX_REG_9_OFFSET) & (1 << 30)) mode = 5; break;
break;
case 26:
if (*(gpio + MUX_REG_6_OFFSET) & (1 << 21)) mode = 4; break;
if (*(gpio + MUX_REG_9_OFFSET) & (1 << 29)) mode = 5; break;
if (*(gpio + C1_MUX_REG_6_OFFSET) & (1 << 21)) mode = 4; break;
if (*(gpio + C1_MUX_REG_9_OFFSET) & (1 << 29)) mode = 5; break;
break;
case 27:
if (*(gpio + MUX_REG_6_OFFSET) & (1 << 20)) mode = 4; break;
if (*(gpio + MUX_REG_9_OFFSET) & (1 << 28)) mode = 5; break;
if (*(gpio + C1_MUX_REG_6_OFFSET) & (1 << 20)) mode = 4; break;
if (*(gpio + C1_MUX_REG_9_OFFSET) & (1 << 28)) mode = 5; break;
break;
}
break;
@@ -476,14 +480,14 @@ static int getAlt (int pin)
}
/*----------------------------------------------------------------------------*/
static int getPUPD (int pin)
static int _getPUPD (int pin)
{
int puen, pupd, shift;
if (lib->mode == MODE_GPIO_SYS)
return;
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return;
puen = gpioToPUENReg(pin);
@@ -497,14 +501,14 @@ static int getPUPD (int pin)
}
/*----------------------------------------------------------------------------*/
static void pullUpDnControl (int pin, int pud)
static void _pullUpDnControl (int pin, int pud)
{
int shift = 0;
if (lib->mode == MODE_GPIO_SYS)
return;
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return;
shift = gpioToShiftReg(pin);
@@ -526,7 +530,7 @@ static void pullUpDnControl (int pin, int pud)
}
/*----------------------------------------------------------------------------*/
static int digitalRead (int pin)
static int _digitalRead (int pin)
{
char c ;
@@ -540,7 +544,7 @@ static int digitalRead (int pin)
return (c == '0') ? LOW : HIGH;
}
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return 0;
if ((*(gpio + gpioToGPLEVReg(pin)) & (1 << gpioToShiftReg(pin))) != 0)
@@ -550,7 +554,7 @@ static int digitalRead (int pin)
}
/*----------------------------------------------------------------------------*/
static void digitalWrite (int pin, int value)
static void _digitalWrite (int pin, int value)
{
if (lib->mode == MODE_GPIO_SYS) {
if (lib->sysFds[pin] != -1) {
@@ -562,7 +566,7 @@ static void digitalWrite (int pin, int value)
return;
}
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return;
if (value == LOW)
@@ -572,7 +576,7 @@ static void digitalWrite (int pin, int value)
}
/*----------------------------------------------------------------------------*/
static int analogRead (int pin)
static int _analogRead (int pin)
{
unsigned char value[5] = {0,};
@@ -600,12 +604,12 @@ static int analogRead (int pin)
}
/*----------------------------------------------------------------------------*/
static void digitalWriteByte (const int value)
static void _digitalWriteByte (const int value)
{
union reg_bitfield gpiox, gpioy;
gpiox.wvalue = *(gpio + GPIOX_INP_REG_OFFSET);
gpioy.wvalue = *(gpio + GPIOY_INP_REG_OFFSET);
gpiox.wvalue = *(gpio + C1_GPIOX_INP_REG_OFFSET);
gpioy.wvalue = *(gpio + C1_GPIOY_INP_REG_OFFSET);
/* Wiring PI GPIO0 = C1 GPIOY.8 */
gpioy.bits.bit8 = (value & 0x01);
@@ -624,18 +628,18 @@ static void digitalWriteByte (const int value)
/* Wiring PI GPIO7 = C1 GPIOY.3 */
gpioy.bits.bit3 = (value & 0x80);
*(gpio + GPIOX_OUTP_REG_OFFSET) = gpiox.wvalue;
*(gpio + GPIOY_OUTP_REG_OFFSET) = gpioy.wvalue;
*(gpio + C1_GPIOX_OUTP_REG_OFFSET) = gpiox.wvalue;
*(gpio + C1_GPIOY_OUTP_REG_OFFSET) = gpioy.wvalue;
}
/*----------------------------------------------------------------------------*/
static unsigned int digitalReadByte (void)
static unsigned int _digitalReadByte (void)
{
union reg_bitfield gpiox, gpioy;
unsigned int value = 0;
gpiox.wvalue = *(gpio + GPIOX_INP_REG_OFFSET);
gpioy.wvalue = *(gpio + GPIOY_INP_REG_OFFSET);
gpiox.wvalue = *(gpio + C1_GPIOX_INP_REG_OFFSET);
gpioy.wvalue = *(gpio + C1_GPIOY_INP_REG_OFFSET);
/* Wiring PI GPIO0 = C1 GPIOY.8 */
if (gpioy.bits.bit8)
@@ -686,9 +690,9 @@ static void init_gpio_mmap (void)
"wiringPiSetup: Unable to open /dev/mem: %s\n",
strerror (errno)) ;
}
//#define ODROIDXU_GPX_BASE 0xC1108000
// #define C1_GPIO_BASE 0xC1108000
gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, ODROIDC1_GPIO_BASE) ;
MAP_SHARED, fd, C1_GPIO_BASE) ;
if ((int32_t)gpio == -1)
return msg (MSG_ERR,
@@ -717,19 +721,19 @@ void init_odroidc1 (struct libodroid *libwiring)
init_adc_fds();
/* wiringPi Core function initialize */
libwiring->getModeToGpio = getModeToGpio;
libwiring->pinMode = pinMode;
libwiring->getAlt = getAlt;
libwiring->getPUPD = getPUPD;
libwiring->pullUpDnControl = pullUpDnControl;
libwiring->digitalRead = digitalRead;
libwiring->digitalWrite = digitalWrite;
libwiring->analogRead = analogRead;
libwiring->digitalWriteByte = digitalWriteByte;
libwiring->digitalReadByte = digitalReadByte;
libwiring->getModeToGpio = _getModeToGpio;
libwiring->pinMode = _pinMode;
libwiring->getAlt = _getAlt;
libwiring->getPUPD = _getPUPD;
libwiring->pullUpDnControl = _pullUpDnControl;
libwiring->digitalRead = _digitalRead;
libwiring->digitalWrite = _digitalWrite;
libwiring->analogRead = _analogRead;
libwiring->digitalWriteByte = _digitalWriteByte;
libwiring->digitalReadByte = _digitalReadByte;
/* specify pin base number */
libwiring->pinBase = GPIO_PIN_BASE;
libwiring->pinBase = C1_GPIO_PIN_BASE;
/* global variable setup */
lib = libwiring;

View File

@@ -9,45 +9,45 @@
#define __ODROID_C1_H__
/*----------------------------------------------------------------------------*/
#define ODROIDC_GPIO_MASK (0xFFFFFF80)
#define ODROIDC1_GPIO_BASE 0xC1108000
#define C1_GPIO_MASK (0xFFFFFF80)
#define C1_GPIO_BASE 0xC1108000
#define GPIO_PIN_BASE 0
#define C1_GPIO_PIN_BASE 0
#define GPIODV_PIN_START 50
#define GPIODV_PIN_END 79
#define GPIOY_PIN_START 80
#define GPIOY_PIN_END 96
#define GPIOX_PIN_START 97
#define GPIOX_PIN_END 118
#define C1_GPIODV_PIN_START 50
#define C1_GPIODV_PIN_END 79
#define C1_GPIOY_PIN_START 80
#define C1_GPIOY_PIN_END 96
#define C1_GPIOX_PIN_START 97
#define C1_GPIOX_PIN_END 118
#define GPIOX_FSEL_REG_OFFSET 0x0C
#define GPIOX_OUTP_REG_OFFSET 0x0D
#define GPIOX_INP_REG_OFFSET 0x0E
#define GPIOX_PUPD_REG_OFFSET 0x3E
#define GPIOX_PUEN_REG_OFFSET 0x4C
#define C1_GPIOX_FSEL_REG_OFFSET 0x0C
#define C1_GPIOX_OUTP_REG_OFFSET 0x0D
#define C1_GPIOX_INP_REG_OFFSET 0x0E
#define C1_GPIOX_PUPD_REG_OFFSET 0x3E
#define C1_GPIOX_PUEN_REG_OFFSET 0x4C
#define GPIOY_FSEL_REG_OFFSET 0x0F
#define GPIOY_OUTP_REG_OFFSET 0x10
#define GPIOY_INP_REG_OFFSET 0x11
#define GPIOY_PUPD_REG_OFFSET 0x3D
#define GPIOY_PUEN_REG_OFFSET 0x4B
#define C1_GPIOY_FSEL_REG_OFFSET 0x0F
#define C1_GPIOY_OUTP_REG_OFFSET 0x10
#define C1_GPIOY_INP_REG_OFFSET 0x11
#define C1_GPIOY_PUPD_REG_OFFSET 0x3D
#define C1_GPIOY_PUEN_REG_OFFSET 0x4B
#define GPIODV_FSEL_REG_OFFSET 0x12
#define GPIODV_OUTP_REG_OFFSET 0x13
#define GPIODV_INP_REG_OFFSET 0x14
#define GPIODV_PUPD_REG_OFFSET 0x3A
#define GPIODV_PUEN_REG_OFFSET 0x48
#define C1_GPIODV_FSEL_REG_OFFSET 0x12
#define C1_GPIODV_OUTP_REG_OFFSET 0x13
#define C1_GPIODV_INP_REG_OFFSET 0x14
#define C1_GPIODV_PUPD_REG_OFFSET 0x3A
#define C1_GPIODV_PUEN_REG_OFFSET 0x48
#define MUX_REG_1_OFFSET 0x2D
#define MUX_REG_2_OFFSET 0x2E
#define MUX_REG_3_OFFSET 0x2F
#define MUX_REG_4_OFFSET 0x30
#define MUX_REG_5_OFFSET 0x31
#define MUX_REG_6_OFFSET 0x32
#define MUX_REG_7_OFFSET 0x33
#define MUX_REG_8_OFFSET 0x34
#define MUX_REG_9_OFFSET 0x35
#define C1_MUX_REG_1_OFFSET 0x2D
#define C1_MUX_REG_2_OFFSET 0x2E
#define C1_MUX_REG_3_OFFSET 0x2F
#define C1_MUX_REG_4_OFFSET 0x30
#define C1_MUX_REG_5_OFFSET 0x31
#define C1_MUX_REG_6_OFFSET 0x32
#define C1_MUX_REG_7_OFFSET 0x33
#define C1_MUX_REG_8_OFFSET 0x34
#define C1_MUX_REG_9_OFFSET 0x35
#ifdef __cplusplus
extern "C" {

View File

@@ -18,7 +18,11 @@
#include <sys/utsname.h>
/*----------------------------------------------------------------------------*/
#include "wiringOdroid.h"
#include "softPwm.h"
#include "softTone.h"
/*----------------------------------------------------------------------------*/
#include "wiringPi.h"
#include "odroidc2.h"
/*----------------------------------------------------------------------------*/
@@ -158,18 +162,18 @@ static int gpioToShiftReg (int pin);
static int gpioToGPFSELReg (int pin);
/*----------------------------------------------------------------------------*/
// wiringPi core function
// wiringPi core function
/*----------------------------------------------------------------------------*/
static int getModeToGpio (int mode, int pin);
static void pinMode (int pin, int mode);
static int getAlt (int pin);
static int getPUPD (int pin);
static void pullUpDnControl (int pin, int pud);
static int digitalRead (int pin);
static void digitalWrite (int pin, int value);
static int analogRead (int pin);
static void digitalWriteByte(const int value);
static unsigned int digitalReadByte (void);
static int _getModeToGpio (int mode, int pin);
static void _pinMode (int pin, int mode);
static int _getAlt (int pin);
static int _getPUPD (int pin);
static void _pullUpDnControl (int pin, int pud);
static int _digitalRead (int pin);
static void _digitalWrite (int pin, int value);
static int _analogRead (int pin);
static void _digitalWriteByte (const int value);
static unsigned int _digitalReadByte (void);
/*----------------------------------------------------------------------------*/
// board init function
@@ -276,7 +280,7 @@ static int gpioToGPFSELReg (int pin)
return -1;
}
/*----------------------------------------------------------------------------*/
static int getModeToGpio (int mode, int pin)
static int _getModeToGpio (int mode, int pin)
{
int retPin = -1;
@@ -312,14 +316,14 @@ static int getModeToGpio (int mode, int pin)
}
/*----------------------------------------------------------------------------*/
static void pinMode (int pin, int mode)
static void _pinMode (int pin, int mode)
{
int fsel, shift, origPin = pin;
if (lib->mode == MODE_GPIO_SYS)
return;
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return;
softPwmStop (origPin);
@@ -348,7 +352,7 @@ static void pinMode (int pin, int mode)
}
/*----------------------------------------------------------------------------*/
static int getAlt (int pin)
static int _getAlt (int pin)
{
int fsel, shift;
int mode = 0;
@@ -356,7 +360,7 @@ static int getAlt (int pin)
if (lib->mode == MODE_GPIO_SYS)
return 0;
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return 2;
fsel = gpioToGPFSELReg(pin);
@@ -366,191 +370,191 @@ static int getAlt (int pin)
case C2_GPIOX_PIN_START ...C2_GPIOX_PIN_END:
switch (shift) {
case 0:
if (*(gpio + MUX_REG_8_OFFSET) & (1 << 5)) mode = 1; break;
if (*(gpio + C2_MUX_REG_8_OFFSET) & (1 << 5)) mode = 1; break;
break;
case 1:
if (*(gpio + MUX_REG_8_OFFSET) & (1 << 4)) mode = 1; break;
if (*(gpio + C2_MUX_REG_8_OFFSET) & (1 << 4)) mode = 1; break;
break;
case 2:
if (*(gpio + MUX_REG_8_OFFSET) & (1 << 3)) mode = 1; break;
if (*(gpio + C2_MUX_REG_8_OFFSET) & (1 << 3)) mode = 1; break;
break;
case 3:
if (*(gpio + MUX_REG_8_OFFSET) & (1 << 2)) mode = 1; break;
if (*(gpio + C2_MUX_REG_8_OFFSET) & (1 << 2)) mode = 1; break;
break;
case 4:
if (*(gpio + MUX_REG_8_OFFSET) & (1 << 1)) mode = 1; break;
if (*(gpio + C2_MUX_REG_8_OFFSET) & (1 << 1)) mode = 1; break;
break;
case 5:
if (*(gpio + MUX_REG_8_OFFSET) & (1 << 0)) mode = 1; break;
if (*(gpio + C2_MUX_REG_8_OFFSET) & (1 << 0)) mode = 1; break;
break;
case 6:
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 9)) mode = 4; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 17)) mode = 5; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 9)) mode = 4; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 17)) mode = 5; break;
break;
case 7:
if (*(gpio + MUX_REG_8_OFFSET) & (1 << 11)) mode = 1; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 8)) mode = 4; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 18)) mode = 5; break;
if (*(gpio + C2_MUX_REG_8_OFFSET) & (1 << 11)) mode = 1; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 8)) mode = 4; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 18)) mode = 5; break;
break;
case 8:
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 7)) mode = 1; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 30)) mode = 3; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 10)) mode = 4; break;
if (*(gpio + C2_MUX_REG_4_OFFSET) & (1 << 7)) mode = 1; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 30)) mode = 3; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 10)) mode = 4; break;
break;
case 9:
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 6)) mode = 1; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 29)) mode = 3; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 7)) mode = 4; break;
if (*(gpio + C2_MUX_REG_4_OFFSET) & (1 << 6)) mode = 1; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 29)) mode = 3; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 7)) mode = 4; break;
break;
case 10:
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 28)) mode = 3; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 28)) mode = 3; break;
break;
case 11:
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 27)) mode = 3; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 27)) mode = 3; break;
break;
case 12:
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 13)) mode = 2; break;
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 17)) mode = 3; break;
if (*(gpio + C2_MUX_REG_4_OFFSET) & (1 << 13)) mode = 2; break;
if (*(gpio + C2_MUX_REG_4_OFFSET) & (1 << 17)) mode = 3; break;
break;
case 13:
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 12)) mode = 2; break;
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 16)) mode = 3; break;
if (*(gpio + C2_MUX_REG_4_OFFSET) & (1 << 12)) mode = 2; break;
if (*(gpio + C2_MUX_REG_4_OFFSET) & (1 << 16)) mode = 3; break;
break;
case 14:
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 11)) mode = 2; break;
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 15)) mode = 3; break;
if (*(gpio + C2_MUX_REG_4_OFFSET) & (1 << 11)) mode = 2; break;
if (*(gpio + C2_MUX_REG_4_OFFSET) & (1 << 15)) mode = 3; break;
break;
case 15:
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 10)) mode = 2; break;
if (*(gpio + MUX_REG_4_OFFSET) & (1 << 14)) mode = 3; break;
if (*(gpio + C2_MUX_REG_4_OFFSET) & (1 << 10)) mode = 2; break;
if (*(gpio + C2_MUX_REG_4_OFFSET) & (1 << 14)) mode = 3; break;
break;
case 19:
if (*(gpio + MUX_REG_2_OFFSET) & (1 << 22)) mode = 2; break;
if (*(gpio + MUX_REG_2_OFFSET) & (1 << 30)) mode = 5; break;
if (*(gpio + C2_MUX_REG_2_OFFSET) & (1 << 22)) mode = 2; break;
if (*(gpio + C2_MUX_REG_2_OFFSET) & (1 << 30)) mode = 5; break;
break;
}
break;
case C2_GPIOY_PIN_START ...C2_GPIOY_PIN_END:
switch (shift) {
case 0:
if (*(gpio + MUX_REG_2_OFFSET) & (1 << 19)) mode = 1; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 2)) mode = 2; break;
if (*(gpio + MUX_REG_1_OFFSET) & (1 << 0)) mode = 5; break;
if (*(gpio + C2_MUX_REG_2_OFFSET) & (1 << 19)) mode = 1; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 2)) mode = 2; break;
if (*(gpio + C2_MUX_REG_1_OFFSET) & (1 << 0)) mode = 5; break;
break;
case 1:
if (*(gpio + MUX_REG_2_OFFSET) & (1 << 18)) mode = 1; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 1)) mode = 2; break;
if (*(gpio + MUX_REG_1_OFFSET) & (1 << 1)) mode = 5; break;
if (*(gpio + C2_MUX_REG_2_OFFSET) & (1 << 18)) mode = 1; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 1)) mode = 2; break;
if (*(gpio + C2_MUX_REG_1_OFFSET) & (1 << 1)) mode = 5; break;
break;
case 2:
if (*(gpio + MUX_REG_2_OFFSET) & (1 << 17)) mode = 1; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 0)) mode = 2; break;
if (*(gpio + C2_MUX_REG_2_OFFSET) & (1 << 17)) mode = 1; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 0)) mode = 2; break;
break;
case 3:
if (*(gpio + MUX_REG_2_OFFSET) & (1 << 16)) mode = 1; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 4)) mode = 2; break;
if (*(gpio + MUX_REG_1_OFFSET) & (1 << 2)) mode = 5; break;
if (*(gpio + C2_MUX_REG_2_OFFSET) & (1 << 16)) mode = 1; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 4)) mode = 2; break;
if (*(gpio + C2_MUX_REG_1_OFFSET) & (1 << 2)) mode = 5; break;
break;
case 4:
if (*(gpio + MUX_REG_2_OFFSET) & (1 << 16)) mode = 1; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 5)) mode = 2; break;
if (*(gpio + MUX_REG_1_OFFSET) & (1 << 12)) mode = 4; break;
if (*(gpio + C2_MUX_REG_2_OFFSET) & (1 << 16)) mode = 1; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 5)) mode = 2; break;
if (*(gpio + C2_MUX_REG_1_OFFSET) & (1 << 12)) mode = 4; break;
break;
case 5:
if (*(gpio + MUX_REG_2_OFFSET) & (1 << 16)) mode = 1; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 5)) mode = 2; break;
if (*(gpio + MUX_REG_1_OFFSET) & (1 << 13)) mode = 4; break;
if (*(gpio + C2_MUX_REG_2_OFFSET) & (1 << 16)) mode = 1; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 5)) mode = 2; break;
if (*(gpio + C2_MUX_REG_1_OFFSET) & (1 << 13)) mode = 4; break;
break;
case 6:
if (*(gpio + MUX_REG_2_OFFSET) & (1 << 16)) mode = 1; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 5)) mode = 2; break;
if (*(gpio + MUX_REG_1_OFFSET) & (1 << 3)) mode = 5; break;
if (*(gpio + C2_MUX_REG_2_OFFSET) & (1 << 16)) mode = 1; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 5)) mode = 2; break;
if (*(gpio + C2_MUX_REG_1_OFFSET) & (1 << 3)) mode = 5; break;
break;
case 7:
if (*(gpio + MUX_REG_2_OFFSET) & (1 << 16)) mode = 1; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 5)) mode = 2; break;
if (*(gpio + MUX_REG_1_OFFSET) & (1 << 4)) mode = 5; break;
if (*(gpio + C2_MUX_REG_2_OFFSET) & (1 << 16)) mode = 1; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 5)) mode = 2; break;
if (*(gpio + C2_MUX_REG_1_OFFSET) & (1 << 4)) mode = 5; break;
break;
case 8:
if (*(gpio + MUX_REG_2_OFFSET) & (1 << 16)) mode = 1; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 5)) mode = 2; break;
if (*(gpio + MUX_REG_1_OFFSET) & (1 << 5)) mode = 5; break;
if (*(gpio + C2_MUX_REG_2_OFFSET) & (1 << 16)) mode = 1; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 5)) mode = 2; break;
if (*(gpio + C2_MUX_REG_1_OFFSET) & (1 << 5)) mode = 5; break;
break;
case 9:
if (*(gpio + MUX_REG_2_OFFSET) & (1 << 16)) mode = 1; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 5)) mode = 2; break;
if (*(gpio + MUX_REG_1_OFFSET) & (1 << 6)) mode = 5; break;
if (*(gpio + C2_MUX_REG_2_OFFSET) & (1 << 16)) mode = 1; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 5)) mode = 2; break;
if (*(gpio + C2_MUX_REG_1_OFFSET) & (1 << 6)) mode = 5; break;
break;
case 10:
if (*(gpio + MUX_REG_2_OFFSET) & (1 << 16)) mode = 1; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 5)) mode = 2; break;
if (*(gpio + MUX_REG_1_OFFSET) & (1 << 7)) mode = 5; break;
if (*(gpio + C2_MUX_REG_2_OFFSET) & (1 << 16)) mode = 1; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 5)) mode = 2; break;
if (*(gpio + C2_MUX_REG_1_OFFSET) & (1 << 7)) mode = 5; break;
break;
case 11:
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 3)) mode = 2; break;
if (*(gpio + MUX_REG_1_OFFSET) & (1 << 19)) mode = 3; break;
if (*(gpio + MUX_REG_1_OFFSET) & (1 << 8)) mode = 5; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 3)) mode = 2; break;
if (*(gpio + C2_MUX_REG_1_OFFSET) & (1 << 19)) mode = 3; break;
if (*(gpio + C2_MUX_REG_1_OFFSET) & (1 << 8)) mode = 5; break;
break;
case 12:
if (*(gpio + MUX_REG_1_OFFSET) & (1 << 18)) mode = 3; break;
if (*(gpio + MUX_REG_1_OFFSET) & (1 << 9)) mode = 5; break;
if (*(gpio + C2_MUX_REG_1_OFFSET) & (1 << 18)) mode = 3; break;
if (*(gpio + C2_MUX_REG_1_OFFSET) & (1 << 9)) mode = 5; break;
break;
case 13:
if (*(gpio + MUX_REG_1_OFFSET) & (1 << 17)) mode = 3; break;
if (*(gpio + MUX_REG_1_OFFSET) & (1 << 10)) mode = 5; break;
if (*(gpio + C2_MUX_REG_1_OFFSET) & (1 << 17)) mode = 3; break;
if (*(gpio + C2_MUX_REG_1_OFFSET) & (1 << 10)) mode = 5; break;
break;
case 14:
if (*(gpio + MUX_REG_1_OFFSET) & (1 << 16)) mode = 3; break;
if (*(gpio + MUX_REG_1_OFFSET) & (1 << 11)) mode = 5; break;
if (*(gpio + C2_MUX_REG_1_OFFSET) & (1 << 16)) mode = 3; break;
if (*(gpio + C2_MUX_REG_1_OFFSET) & (1 << 11)) mode = 5; break;
break;
case 15:
if (*(gpio + MUX_REG_2_OFFSET) & (1 << 20)) mode = 1; break;
if (*(gpio + MUX_REG_1_OFFSET) & (1 << 20)) mode = 4; break;
if (*(gpio + MUX_REG_1_OFFSET) & (1 << 22)) mode = 5; break;
if (*(gpio + C2_MUX_REG_2_OFFSET) & (1 << 20)) mode = 1; break;
if (*(gpio + C2_MUX_REG_1_OFFSET) & (1 << 20)) mode = 4; break;
if (*(gpio + C2_MUX_REG_1_OFFSET) & (1 << 22)) mode = 5; break;
break;
case 16:
if (*(gpio + MUX_REG_2_OFFSET) & (1 << 21)) mode = 1; break;
if (*(gpio + MUX_REG_1_OFFSET) & (1 << 21)) mode = 4; break;
if (*(gpio + C2_MUX_REG_2_OFFSET) & (1 << 21)) mode = 1; break;
if (*(gpio + C2_MUX_REG_1_OFFSET) & (1 << 21)) mode = 4; break;
break;
}
break;
case C2_GPIODV_PIN_START...C2_GPIODV_PIN_END:
switch (shift) {
case 24:
if (*(gpio + MUX_REG_0_OFFSET) & (1 << 7)) mode = 1; break;
if (*(gpio + MUX_REG_0_OFFSET) & (1 << 12)) mode = 2; break;
if (*(gpio + MUX_REG_5_OFFSET) & (1 << 12)) mode = 3; break;
if (*(gpio + MUX_REG_2_OFFSET) & (1 << 29)) mode = 5; break;
if (*(gpio + MUX_REG_7_OFFSET) & (1 << 26)) mode = 6; break;
if (*(gpio + C2_MUX_REG_0_OFFSET) & (1 << 7)) mode = 1; break;
if (*(gpio + C2_MUX_REG_0_OFFSET) & (1 << 12)) mode = 2; break;
if (*(gpio + C2_MUX_REG_5_OFFSET) & (1 << 12)) mode = 3; break;
if (*(gpio + C2_MUX_REG_2_OFFSET) & (1 << 29)) mode = 5; break;
if (*(gpio + C2_MUX_REG_7_OFFSET) & (1 << 26)) mode = 6; break;
break;
case 25:
if (*(gpio + MUX_REG_0_OFFSET) & (1 << 6)) mode = 1; break;
if (*(gpio + MUX_REG_0_OFFSET) & (1 << 11)) mode = 2; break;
if (*(gpio + MUX_REG_5_OFFSET) & (1 << 11)) mode = 3; break;
if (*(gpio + MUX_REG_2_OFFSET) & (1 << 28)) mode = 5; break;
if (*(gpio + MUX_REG_7_OFFSET) & (1 << 27)) mode = 6; break;
if (*(gpio + C2_MUX_REG_0_OFFSET) & (1 << 6)) mode = 1; break;
if (*(gpio + C2_MUX_REG_0_OFFSET) & (1 << 11)) mode = 2; break;
if (*(gpio + C2_MUX_REG_5_OFFSET) & (1 << 11)) mode = 3; break;
if (*(gpio + C2_MUX_REG_2_OFFSET) & (1 << 28)) mode = 5; break;
if (*(gpio + C2_MUX_REG_7_OFFSET) & (1 << 27)) mode = 6; break;
break;
case 26:
if (*(gpio + MUX_REG_0_OFFSET) & (1 << 10)) mode = 2; break;
if (*(gpio + MUX_REG_5_OFFSET) & (1 << 10)) mode = 3; break;
if (*(gpio + MUX_REG_2_OFFSET) & (1 << 27)) mode = 5; break;
if (*(gpio + MUX_REG_7_OFFSET) & (1 << 24)) mode = 6; break;
if (*(gpio + C2_MUX_REG_0_OFFSET) & (1 << 10)) mode = 2; break;
if (*(gpio + C2_MUX_REG_5_OFFSET) & (1 << 10)) mode = 3; break;
if (*(gpio + C2_MUX_REG_2_OFFSET) & (1 << 27)) mode = 5; break;
if (*(gpio + C2_MUX_REG_7_OFFSET) & (1 << 24)) mode = 6; break;
break;
case 27:
if (*(gpio + MUX_REG_0_OFFSET) & (1 << 9)) mode = 2; break;
if (*(gpio + MUX_REG_5_OFFSET) & (1 << 9)) mode = 3; break;
if (*(gpio + MUX_REG_5_OFFSET) & (1 << 8)) mode = 4; break;
if (*(gpio + MUX_REG_2_OFFSET) & (1 << 26)) mode = 5; break;
if (*(gpio + MUX_REG_7_OFFSET) & (1 << 25)) mode = 6; break;
if (*(gpio + C2_MUX_REG_0_OFFSET) & (1 << 9)) mode = 2; break;
if (*(gpio + C2_MUX_REG_5_OFFSET) & (1 << 9)) mode = 3; break;
if (*(gpio + C2_MUX_REG_5_OFFSET) & (1 << 8)) mode = 4; break;
if (*(gpio + C2_MUX_REG_2_OFFSET) & (1 << 26)) mode = 5; break;
if (*(gpio + C2_MUX_REG_7_OFFSET) & (1 << 25)) mode = 6; break;
break;
case 28:
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 20)) mode = 5; break;
if (*(gpio + MUX_REG_7_OFFSET) & (1 << 22)) mode = 6; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 20)) mode = 5; break;
if (*(gpio + C2_MUX_REG_7_OFFSET) & (1 << 22)) mode = 6; break;
break;
case 29:
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 22)) mode = 4; break;
if (*(gpio + MUX_REG_3_OFFSET) & (1 << 21)) mode = 5; break;
if (*(gpio + MUX_REG_7_OFFSET) & (1 << 23)) mode = 6; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 22)) mode = 4; break;
if (*(gpio + C2_MUX_REG_3_OFFSET) & (1 << 21)) mode = 5; break;
if (*(gpio + C2_MUX_REG_7_OFFSET) & (1 << 23)) mode = 6; break;
break;
}
break;
@@ -562,14 +566,14 @@ static int getAlt (int pin)
}
/*----------------------------------------------------------------------------*/
static int getPUPD (int pin)
static int _getPUPD (int pin)
{
int puen, pupd, shift;
if (lib->mode == MODE_GPIO_SYS)
return;
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return;
puen = gpioToPUENReg(pin);
@@ -583,14 +587,14 @@ static int getPUPD (int pin)
}
/*----------------------------------------------------------------------------*/
static void pullUpDnControl (int pin, int pud)
static void _pullUpDnControl (int pin, int pud)
{
int shift = 0;
if (lib->mode == MODE_GPIO_SYS)
return;
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return;
shift = gpioToShiftReg(pin);
@@ -612,7 +616,7 @@ static void pullUpDnControl (int pin, int pud)
}
/*----------------------------------------------------------------------------*/
static int digitalRead (int pin)
static int _digitalRead (int pin)
{
char c ;
@@ -626,7 +630,7 @@ static int digitalRead (int pin)
return (c == '0') ? LOW : HIGH;
}
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return 0;
if ((*(gpio + gpioToGPLEVReg(pin)) & (1 << gpioToShiftReg(pin))) != 0)
@@ -636,7 +640,7 @@ static int digitalRead (int pin)
}
/*----------------------------------------------------------------------------*/
static void digitalWrite (int pin, int value)
static void _digitalWrite (int pin, int value)
{
if (lib->mode == MODE_GPIO_SYS) {
if (lib->sysFds[pin] != -1) {
@@ -648,7 +652,7 @@ static void digitalWrite (int pin, int value)
return;
}
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return;
if (value == LOW)
@@ -658,7 +662,7 @@ static void digitalWrite (int pin, int value)
}
/*----------------------------------------------------------------------------*/
static int analogRead (int pin)
static int _analogRead (int pin)
{
unsigned char value[5] = {0,};
@@ -686,7 +690,7 @@ static int analogRead (int pin)
}
/*----------------------------------------------------------------------------*/
static void digitalWriteByte (const int value)
static void _digitalWriteByte (const int value)
{
union reg_bitfield gpiox;
@@ -713,7 +717,7 @@ static void digitalWriteByte (const int value)
}
/*----------------------------------------------------------------------------*/
static unsigned int digitalReadByte (void)
static unsigned int _digitalReadByte (void)
{
return -1;
}
@@ -739,9 +743,9 @@ static void init_gpio_mmap (void)
"wiringPiSetup: Unable to open /dev/mem: %s\n",
strerror (errno)) ;
}
//#define ODROIDC2_GPIO_BASE 0xC8834000
//#define C2_GPIO_BASE 0xC8834000
gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, ODROIDC2_GPIO_BASE) ;
MAP_SHARED, fd, C2_GPIO_BASE) ;
if ((int32_t)gpio == -1)
return msg (MSG_ERR,
@@ -778,19 +782,19 @@ void init_odroidc2 (struct libodroid *libwiring)
}
/* wiringPi Core function initialize */
libwiring->getModeToGpio = getModeToGpio;
libwiring->pinMode = pinMode;
libwiring->getAlt = getAlt;
libwiring->getPUPD = getPUPD;
libwiring->pullUpDnControl = pullUpDnControl;
libwiring->digitalRead = digitalRead;
libwiring->digitalWrite = digitalWrite;
libwiring->analogRead = analogRead;
libwiring->digitalWriteByte = digitalWriteByte;
libwiring->digitalReadByte = digitalReadByte;
libwiring->getModeToGpio = _getModeToGpio;
libwiring->pinMode = _pinMode;
libwiring->getAlt = _getAlt;
libwiring->getPUPD = _getPUPD;
libwiring->pullUpDnControl = _pullUpDnControl;
libwiring->digitalRead = _digitalRead;
libwiring->digitalWrite = _digitalWrite;
libwiring->analogRead = _analogRead;
libwiring->digitalWriteByte = _digitalWriteByte;
libwiring->digitalReadByte = _digitalReadByte;
/* specify pin base number */
libwiring->pinBase = GPIO_PIN_BASE;
libwiring->pinBase = C2_GPIO_PIN_BASE;
/* global variable setup */
lib = libwiring;

View File

@@ -9,17 +9,17 @@
#define __ODROID_C2_H__
/*----------------------------------------------------------------------------*/
#define ODROIDC2_GPIO_MASK (0xFFFFFF00)
#define ODROIDC2_GPIO_BASE 0xC8834000
#define C2_GPIO_MASK (0xFFFFFF00)
#define C2_GPIO_BASE 0xC8834000
#define GPIO_PIN_BASE 136
#define C2_GPIO_PIN_BASE 136
#define C2_GPIODV_PIN_START (GPIO_PIN_BASE + 45)
#define C2_GPIODV_PIN_END (GPIO_PIN_BASE + 74)
#define C2_GPIOY_PIN_START (GPIO_PIN_BASE + 75)
#define C2_GPIOY_PIN_END (GPIO_PIN_BASE + 91)
#define C2_GPIOX_PIN_START (GPIO_PIN_BASE + 92)
#define C2_GPIOX_PIN_END (GPIO_PIN_BASE + 114)
#define C2_GPIODV_PIN_START (C2_GPIO_PIN_BASE + 45)
#define C2_GPIODV_PIN_END (C2_GPIO_PIN_BASE + 74)
#define C2_GPIOY_PIN_START (C2_GPIO_PIN_BASE + 75)
#define C2_GPIOY_PIN_END (C2_GPIO_PIN_BASE + 91)
#define C2_GPIOX_PIN_START (C2_GPIO_PIN_BASE + 92)
#define C2_GPIOX_PIN_END (C2_GPIO_PIN_BASE + 114)
#define C2_GPIOX_FSEL_REG_OFFSET 0x118
#define C2_GPIOX_OUTP_REG_OFFSET 0x119
@@ -39,14 +39,14 @@
#define C2_GPIODV_PUPD_REG_OFFSET 0x148
#define C2_GPIODV_PUEN_REG_OFFSET 0x13A
#define MUX_REG_0_OFFSET 0x12C
#define MUX_REG_1_OFFSET 0x12D
#define MUX_REG_2_OFFSET 0x12E
#define MUX_REG_3_OFFSET 0x12F
#define MUX_REG_4_OFFSET 0x130
#define MUX_REG_5_OFFSET 0x131
#define MUX_REG_7_OFFSET 0x133
#define MUX_REG_8_OFFSET 0x134
#define C2_MUX_REG_0_OFFSET 0x12C
#define C2_MUX_REG_1_OFFSET 0x12D
#define C2_MUX_REG_2_OFFSET 0x12E
#define C2_MUX_REG_3_OFFSET 0x12F
#define C2_MUX_REG_4_OFFSET 0x130
#define C2_MUX_REG_5_OFFSET 0x131
#define C2_MUX_REG_7_OFFSET 0x133
#define C2_MUX_REG_8_OFFSET 0x134
#ifdef __cplusplus
extern "C" {

View File

@@ -18,7 +18,11 @@
#include <sys/utsname.h>
/*----------------------------------------------------------------------------*/
#include "wiringOdroid.h"
#include "softPwm.h"
#include "softTone.h"
/*----------------------------------------------------------------------------*/
#include "wiringPi.h"
#include "odroidn1.h"
/*----------------------------------------------------------------------------*/
@@ -107,17 +111,17 @@ static void setClkState (int pin, int state);
static void setIomuxMode (int pin, int mode);
/*----------------------------------------------------------------------------*/
// wiringPi core function
// wiringPi core function
/*----------------------------------------------------------------------------*/
static int getModeToGpio (int mode, int pin);
static void pinMode (int pin, int mode);
static int getAlt (int pin);
static void pullUpDnControl (int pin, int pud);
static int digitalRead (int pin);
static void digitalWrite (int pin, int value);
static int analogRead (int pin);
static void digitalWriteByte(const int value);
static unsigned int digitalReadByte (void);
static int _getModeToGpio (int mode, int pin);
static void _pinMode (int pin, int mode);
static int _getAlt (int pin);
static void _pullUpDnControl (int pin, int pud);
static int _digitalRead (int pin);
static void _digitalWrite (int pin, int value);
static int _analogRead (int pin);
static void _digitalWriteByte (const int value);
static unsigned int _digitalReadByte (void);
/*----------------------------------------------------------------------------*/
// board init function
@@ -149,7 +153,7 @@ static int gpioToShiftGReg (int pin)
}
/*----------------------------------------------------------------------------*/
static int getModeToGpio (int mode, int pin)
static int _getModeToGpio (int mode, int pin)
{
if (pin > 255)
return msg(MSG_ERR, "%s : Invalid pin number %d\n", __func__, pin);
@@ -187,26 +191,26 @@ static void setClkState (int pin, int state)
target |= (1 << (shift + 16));
switch (state) {
case CLK_ENABLE:
case N1_CLK_ENABLE:
if (bank < 2) {
target |= *(cru[0] + (PMUCRU_GPIO_CLK_OFFSET >> 2));
target |= *(cru[0] + (N1_PMUCRU_GPIO_CLK_OFFSET >> 2));
target &= ~(1 << shift);
*(cru[0] + (PMUCRU_GPIO_CLK_OFFSET >> 2)) = target;
*(cru[0] + (N1_PMUCRU_GPIO_CLK_OFFSET >> 2)) = target;
} else {
target |= *(cru[1] + (CRU_GPIO_CLK_OFFSET >> 2));
target |= *(cru[1] + (N1_CRU_GPIO_CLK_OFFSET >> 2));
target &= ~(1 << shift);
*(cru[1] + (CRU_GPIO_CLK_OFFSET >> 2)) = target;
*(cru[1] + (N1_CRU_GPIO_CLK_OFFSET >> 2)) = target;
}
break;
case CLK_DISABLE:
case N1_CLK_DISABLE:
if (bank < 2) {
target |= *(cru[0] + (PMUCRU_GPIO_CLK_OFFSET >> 2));
target |= *(cru[0] + (N1_PMUCRU_GPIO_CLK_OFFSET >> 2));
target |= (1 << shift);
*(cru[0] + (PMUCRU_GPIO_CLK_OFFSET >> 2)) = target;
*(cru[0] + (N1_PMUCRU_GPIO_CLK_OFFSET >> 2)) = target;
} else {
target |= *(cru[1] + (CRU_GPIO_CLK_OFFSET >> 2));
target |= *(cru[1] + (N1_CRU_GPIO_CLK_OFFSET >> 2));
target |= (1 << shift);
*(cru[1] + (CRU_GPIO_CLK_OFFSET >> 2)) = target;
*(cru[1] + (N1_CRU_GPIO_CLK_OFFSET >> 2)) = target;
}
break;
default:
@@ -233,10 +237,10 @@ static void setIomuxMode (int pin, int mode)
target |= (1 << (gpioToShiftGReg(pin) * 2 + 16));
switch (mode) {
case FUNC_GPIO:
case N1_FUNC_GPIO:
// Common IOMUX Funtion 1 : GPIO (0b00)
if (bank < 2) {
offset += PMUGRF_IOMUX_OFFSET;
offset += N1_PMUGRF_IOMUX_OFFSET;
target |= *(grf[0] + (offset >> 2));
target &= ~(1 << (gpioToShiftGReg(pin) * 2 + 1));
@@ -244,7 +248,7 @@ static void setIomuxMode (int pin, int mode)
*(grf[0] + (offset >> 2)) = target;
} else {
offset += GRF_IOMUX_OFFSET;
offset += N1_GRF_IOMUX_OFFSET;
target |= *(grf[1] + (offset >> 2));
target &= ~(1 << (gpioToShiftGReg(pin) * 2 + 1));
@@ -259,7 +263,7 @@ static void setIomuxMode (int pin, int mode)
}
/*----------------------------------------------------------------------------*/
static void pinMode (int pin, int mode)
static void _pinMode (int pin, int mode)
{
int origPin, bank;
unsigned long flags;
@@ -267,7 +271,7 @@ static void pinMode (int pin, int mode)
if (lib->mode == MODE_GPIO_SYS)
return;
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return;
origPin = pin;
@@ -276,15 +280,15 @@ static void pinMode (int pin, int mode)
softPwmStop (origPin);
softToneStop(origPin);
setClkState (pin, CLK_ENABLE);
setIomuxMode(pin, FUNC_GPIO);
setClkState (pin, N1_CLK_ENABLE);
setIomuxMode(pin, N1_FUNC_GPIO);
switch (mode) {
case INPUT:
*(gpio[bank] + (GPIO_CON_OFFSET >> 2)) &= ~(1 << gpioToShiftReg(pin));
*(gpio[bank] + (N1_GPIO_CON_OFFSET >> 2)) &= ~(1 << gpioToShiftReg(pin));
break;
case OUTPUT:
*(gpio[bank] + (GPIO_CON_OFFSET >> 2)) |= (1 << gpioToShiftReg(pin));
*(gpio[bank] + (N1_GPIO_CON_OFFSET >> 2)) |= (1 << gpioToShiftReg(pin));
break;
case SOFT_PWM_OUTPUT:
softPwmCreate (pin, 0, 100);
@@ -297,11 +301,11 @@ static void pinMode (int pin, int mode)
break;
}
setClkState (pin, CLK_DISABLE);
setClkState (pin, N1_CLK_DISABLE);
}
/*----------------------------------------------------------------------------*/
static int getAlt (int pin)
static int _getAlt (int pin)
{
uint32_t offset;
uint8_t bank, group, shift;
@@ -310,7 +314,7 @@ static int getAlt (int pin)
if (lib->mode == MODE_GPIO_SYS)
return 0;
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return 2;
bank = pin / 32;
@@ -318,32 +322,32 @@ static int getAlt (int pin)
offset = 0x10 * (bank > 1 ? bank - 2 : bank) + 0x4 * group;
shift = gpioToShiftGReg(pin) << 1;
setClkState(pin, CLK_ENABLE);
setClkState(pin, N1_CLK_ENABLE);
// Check if the pin is GPIO mode on GRF register
if (bank < 2) {
offset += PMUGRF_IOMUX_OFFSET;
offset += N1_PMUGRF_IOMUX_OFFSET;
ret = (*(grf[0] + (offset >> 2)) >> shift) & 0b11;
} else {
offset += GRF_IOMUX_OFFSET;
offset += N1_GRF_IOMUX_OFFSET;
ret = (*(grf[1] + (offset >> 2)) >> shift) & 0b11;
}
// If it is GPIO mode, check it's direction
if (ret == 0)
ret = *(gpio[bank] + (GPIO_CON_OFFSET >> 2)) & (1 << gpioToShiftReg(pin)) ? 1 : 0;
ret = *(gpio[bank] + (N1_GPIO_CON_OFFSET >> 2)) & (1 << gpioToShiftReg(pin)) ? 1 : 0;
else {
// ALT1 is GPIO mode(0b00) on this SoC
ret++;
}
setClkState(pin, CLK_DISABLE);
setClkState(pin, N1_CLK_DISABLE);
return ret;
}
/*----------------------------------------------------------------------------*/
static void pullUpDnControl (int pin, int pud)
static void _pullUpDnControl (int pin, int pud)
{
uint32_t offset, target;
uint8_t bank, group;
@@ -351,7 +355,7 @@ static void pullUpDnControl (int pin, int pud)
if (lib->mode == MODE_GPIO_SYS)
return 0;
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return 2;
bank = pin / 32;
@@ -362,12 +366,12 @@ static void pullUpDnControl (int pin, int pud)
target |= (1 << (gpioToShiftGReg(pin) * 2 + 17));
target |= (1 << (gpioToShiftGReg(pin) * 2 + 16));
setClkState(pin, CLK_ENABLE);
setClkState(pin, N1_CLK_ENABLE);
switch (pud) {
case PUD_UP:
if (bank < 2) {
offset += PMUGRF_PUPD_OFFSET;
offset += N1_PMUGRF_PUPD_OFFSET;
target |= *(grf[0] + (offset >> 2));
target &= ~(1 << (gpioToShiftGReg(pin) * 2 + 1));
@@ -375,7 +379,7 @@ static void pullUpDnControl (int pin, int pud)
*(grf[0] + (offset >> 2)) = target;
} else {
offset += GRF_PUPD_OFFSET;
offset += N1_GRF_PUPD_OFFSET;
target |= *(grf[1] + (offset >> 2));
if (bank == 2 && group >= 2) {
@@ -391,7 +395,7 @@ static void pullUpDnControl (int pin, int pud)
break;
case PUD_DOWN:
if (bank < 2) {
offset += PMUGRF_PUPD_OFFSET;
offset += N1_PMUGRF_PUPD_OFFSET;
target |= *(grf[0] + (offset >> 2));
target |= (1 << (gpioToShiftGReg(pin) * 2 + 1));
@@ -399,7 +403,7 @@ static void pullUpDnControl (int pin, int pud)
*(grf[0] + (offset >> 2)) = target;
} else {
offset += GRF_PUPD_OFFSET;
offset += N1_GRF_PUPD_OFFSET;
target |= *(grf[1] + (offset >> 2));
if (bank == 2 && group >= 2) {
@@ -415,7 +419,7 @@ static void pullUpDnControl (int pin, int pud)
break;
case PUD_OFF:
if (bank < 2) {
offset += PMUGRF_PUPD_OFFSET;
offset += N1_PMUGRF_PUPD_OFFSET;
target |= *(grf[0] + (offset >> 2));
target &= ~(1 << (gpioToShiftGReg(pin) * 2 + 1));
@@ -423,7 +427,7 @@ static void pullUpDnControl (int pin, int pud)
*(grf[0] + (offset >> 2)) = target;
} else {
offset += GRF_PUPD_OFFSET;
offset += N1_GRF_PUPD_OFFSET;
target |= *(grf[1] + (offset >> 2));
target &= ~(1 << (gpioToShiftGReg(pin) * 2 + 1));
@@ -436,11 +440,11 @@ static void pullUpDnControl (int pin, int pud)
break;
}
setClkState(pin, CLK_DISABLE);
setClkState(pin, N1_CLK_DISABLE);
}
/*----------------------------------------------------------------------------*/
static int digitalRead (int pin)
static int _digitalRead (int pin)
{
int bank, ret;
char c;
@@ -455,20 +459,20 @@ static int digitalRead (int pin)
return (c == '0') ? LOW : HIGH;
}
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return 0;
bank = pin / 32;
setClkState(pin, CLK_ENABLE);
setClkState(pin, N1_CLK_ENABLE);
ret = *(gpio[bank] + (GPIO_GET_OFFSET >> 2)) & (1 << gpioToShiftReg(pin)) ? HIGH : LOW;
ret = *(gpio[bank] + (N1_GPIO_GET_OFFSET >> 2)) & (1 << gpioToShiftReg(pin)) ? HIGH : LOW;
setClkState(pin, CLK_DISABLE);
setClkState(pin, N1_CLK_DISABLE);
return ret;
}
/*----------------------------------------------------------------------------*/
static void digitalWrite (int pin, int value)
static void _digitalWrite (int pin, int value)
{
int bank;
@@ -478,39 +482,39 @@ static void digitalWrite (int pin, int value)
if (write (lib->sysFds[pin], "0\n", 2) < 0)
msg(MSG_ERR,
"%s : %s\nEdit direction file to output mode for\n\t/sys/class/gpio/gpio%d/direction\n",
__func__, strerror(errno), pin + GPIO_PIN_BASE);
__func__, strerror(errno), pin + N1_GPIO_PIN_BASE);
} else {
if (write (lib->sysFds[pin], "1\n", 2) < 0)
msg(MSG_ERR,
"%s : %s\nEdit direction file to output mode for\n\t/sys/class/gpio/gpio%d/direction\n",
__func__, strerror(errno), pin + GPIO_PIN_BASE);
__func__, strerror(errno), pin + N1_GPIO_PIN_BASE);
}
}
return;
}
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return;
bank = pin / 32;
setClkState(pin, CLK_ENABLE);
setClkState(pin, N1_CLK_ENABLE);
switch (value) {
case LOW:
*(gpio[bank] + (GPIO_SET_OFFSET >> 2)) &= ~(1 << gpioToShiftReg(pin));
*(gpio[bank] + (N1_GPIO_SET_OFFSET >> 2)) &= ~(1 << gpioToShiftReg(pin));
break;
case HIGH:
*(gpio[bank] + (GPIO_SET_OFFSET >> 2)) |= (1 << gpioToShiftReg(pin));
*(gpio[bank] + (N1_GPIO_SET_OFFSET >> 2)) |= (1 << gpioToShiftReg(pin));
break;
default:
break;
}
setClkState(pin, CLK_DISABLE);
setClkState(pin, N1_CLK_DISABLE);
}
/*----------------------------------------------------------------------------*/
static int analogRead (int pin)
static int _analogRead (int pin)
{
unsigned char value[5] = {0,};
@@ -538,7 +542,7 @@ static int analogRead (int pin)
}
/*----------------------------------------------------------------------------*/
static void digitalWriteByte (const int value)
static void _digitalWriteByte (const int value)
{
union reg_bitfield gpioBits1;
@@ -547,10 +551,10 @@ static void digitalWriteByte (const int value)
}
// Enable clock for GPIO 1 bank
setClkState(32, CLK_ENABLE);
setClkState(32, N1_CLK_ENABLE);
/* Read data register */
gpioBits1.wvalue = *(gpio[1] + (GPIO_GET_OFFSET >> 2));
gpioBits1.wvalue = *(gpio[1] + (N1_GPIO_GET_OFFSET >> 2));
/* Wiring PI GPIO0 = N1 GPIO1_A.1 */
gpioBits1.bits.bit1 = (value & 0x01);
@@ -570,13 +574,13 @@ static void digitalWriteByte (const int value)
gpioBits1.bits.bit0 = (value & 0x80);
/* Update data register */
*(gpio[1] + (GPIO_SET_OFFSET >> 2)) = gpioBits1.wvalue;
*(gpio[1] + (N1_GPIO_SET_OFFSET >> 2)) = gpioBits1.wvalue;
setClkState(32, CLK_DISABLE);
setClkState(32, N1_CLK_DISABLE);
}
/*----------------------------------------------------------------------------*/
static unsigned int digitalReadByte (void)
static unsigned int _digitalReadByte (void)
{
union reg_bitfield gpioBits1;
unsigned int value = 0;
@@ -586,12 +590,12 @@ static unsigned int digitalReadByte (void)
}
// Enable clock for GPIO 1 bank
setClkState(32, CLK_ENABLE);
setClkState(32, N1_CLK_ENABLE);
/* Read data register */
gpioBits1.wvalue = *(gpio[1] + (GPIO_GET_OFFSET >> 2));
gpioBits1.wvalue = *(gpio[1] + (N1_GPIO_GET_OFFSET >> 2));
setClkState(32, CLK_DISABLE);
setClkState(32, N1_CLK_DISABLE);
/* Wiring PI GPIO0 = N1 GPIO1_A.1 */
if (gpioBits1.bits.bit1)
@@ -645,22 +649,22 @@ static void init_gpio_mmap (void)
// GPIO{0, 1}
//#define ODROIDN1_PMUCRU_BASE 0xFF750000
cru[0] = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, PMUCRU_BASE) ;
MAP_SHARED, fd, N1_PMUCRU_BASE) ;
// GPIO{2, 3, 4}
//#define ODROIDN1_CRU_BASE 0xFF760000
cru[1] = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, CRU_BASE) ;
MAP_SHARED, fd, N1_CRU_BASE) ;
// GPIO{0, 1}
//#define ODROIDN1_PMU_BASE 0xFF320000
grf[0] = (uint32_t *)mmap(0, GRF_BLOCK_SIZE, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, PMUGRF_BASE) ;
grf[0] = (uint32_t *)mmap(0, N1_GRF_BLOCK_SIZE, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, N1_PMUGRF_BASE) ;
// GPIO{2, 3, 4}
//#define ODROIDN1_GRF_BASE 0xFF770000
grf[1] = (uint32_t *)mmap(0, GRF_BLOCK_SIZE, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, GRF_BASE) ;
grf[1] = (uint32_t *)mmap(0, N1_GRF_BLOCK_SIZE, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, N1_GRF_BASE) ;
// GPIO1_A. 0,1,2,3,4,7
// GPIO1_B. 0,1,2,3,4,5
@@ -668,24 +672,24 @@ static void init_gpio_mmap (void)
// GPIO1_D. 0
//#define ODROIDN1_GPIO1_BASE 0xFF730000
gpio[1] = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, GPIO_1_BASE) ;
MAP_SHARED, fd, N1_GPIO_1_BASE) ;
// GPIO2_C. 0_B,1_B
//#define ODROIDN1_GPIO2_BASE 0xFF780000
gpio[2] = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, GPIO_2_BASE) ;
MAP_SHARED, fd, N1_GPIO_2_BASE) ;
// GPIO4_C. 5,6
// GPIO4_D. 0,4,5,6
//#define ODROIDN1_GPIO4_BASE 0xFF790000
gpio[4] = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, GPIO_4_BASE) ;
MAP_SHARED, fd, N1_GPIO_4_BASE) ;
// Reserved
gpio[0] = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, GPIO_0_BASE) ;
MAP_SHARED, fd, N1_GPIO_0_BASE) ;
gpio[3] = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, GPIO_3_BASE) ;
MAP_SHARED, fd, N1_GPIO_3_BASE) ;
if (((int32_t)cru[0] == -1) || ((int32_t)cru[1] == -1)) {
return msg (MSG_ERR,
@@ -734,18 +738,18 @@ void init_odroidn1 (struct libodroid *libwiring)
init_adc_fds();
/* wiringPi Core function initialize */
libwiring->getModeToGpio = getModeToGpio;
libwiring->pinMode = pinMode;
libwiring->getAlt = getAlt;
libwiring->pullUpDnControl = pullUpDnControl;
libwiring->digitalRead = digitalRead;
libwiring->digitalWrite = digitalWrite;
libwiring->analogRead = analogRead;
libwiring->digitalWriteByte = digitalWriteByte;
libwiring->digitalReadByte = digitalReadByte;
libwiring->getModeToGpio = _getModeToGpio;
libwiring->pinMode = _pinMode;
libwiring->getAlt = _getAlt;
libwiring->pullUpDnControl = _pullUpDnControl;
libwiring->digitalRead = _digitalRead;
libwiring->digitalWrite = _digitalWrite;
libwiring->analogRead = _analogRead;
libwiring->digitalWriteByte = _digitalWriteByte;
libwiring->digitalReadByte = _digitalReadByte;
/* specify pin base number */
libwiring->pinBase = GPIO_PIN_BASE;
libwiring->pinBase = N1_GPIO_PIN_BASE;
/* global variable setup */
lib = libwiring;

View File

@@ -10,56 +10,56 @@
/*----------------------------------------------------------------------------*/
// Common mmap block size for ODROID-N1 GRF register
#define GRF_BLOCK_SIZE 0xF000
#define N1_GRF_BLOCK_SIZE 0xF000
// Common offset for GPIO registers from each GPIO bank's base address
#define GPIO_CON_OFFSET 0x04 // GPIO_SWPORTA_DDR
#define GPIO_SET_OFFSET 0x00 // GPIO_SWPORTA_DR
#define GPIO_GET_OFFSET 0x50 // GPIO_EXT_PORTA
#define N1_GPIO_CON_OFFSET 0x04 // GPIO_SWPORTA_DDR
#define N1_GPIO_SET_OFFSET 0x00 // GPIO_SWPORTA_DR
#define N1_GPIO_GET_OFFSET 0x50 // GPIO_EXT_PORTA
#define FUNC_GPIO 0b00 // Bit for IOMUX GPIO mode
#define N1_FUNC_GPIO 0b00 // Bit for IOMUX GPIO mode
// GPIO{0, 1}
#define PMUGRF_BASE 0xFF320000
#define PMUGRF_IOMUX_OFFSET 0x0000 // GRF_GPIO0A_IOMUX
#define PMUGRF_PUPD_OFFSET 0x0040 // PMUGRF_GPIO0A_P
#define N1_PMUGRF_BASE 0xFF320000
#define N1_PMUGRF_IOMUX_OFFSET 0x0000 // GRF_GPIO0A_IOMUX
#define N1_PMUGRF_PUPD_OFFSET 0x0040 // PMUGRF_GPIO0A_P
// GPIO{2, 3, 4}
#define GRF_BASE 0xFF770000
#define GRF_IOMUX_OFFSET 0xE000 // GRF_GPIO2A_IOMUX
#define GRF_PUPD_OFFSET 0xE040 // GRF_GPIO2A_P
#define N1_GRF_BASE 0xFF770000
#define N1_GRF_IOMUX_OFFSET 0xE000 // GRF_GPIO2A_IOMUX
#define N1_GRF_PUPD_OFFSET 0xE040 // GRF_GPIO2A_P
// Offset to control GPIO clock
// Make 31:16 bit HIGH to enable the writing corresponding bit
#define PMUCRU_BASE 0xFF750000
#define PMUCRU_GPIO_CLK_OFFSET 0x0104 // PMUCRU_CLKGATE_CON1
#define N1_PMUCRU_BASE 0xFF750000
#define N1_PMUCRU_GPIO_CLK_OFFSET 0x0104 // PMUCRU_CLKGATE_CON1
#define CRU_BASE 0xFF760000
#define CRU_GPIO_CLK_OFFSET 0x037C // CRU_CLKGATE_CON31
#define N1_CRU_BASE 0xFF760000
#define N1_CRU_GPIO_CLK_OFFSET 0x037C // CRU_CLKGATE_CON31
#define CLK_ENABLE 0b0
#define CLK_DISABLE 0b1
#define N1_CLK_ENABLE 0b0
#define N1_CLK_DISABLE 0b1
// Only for Linux kernel for now. Edit to 0 for Android
#define GPIO_PIN_BASE 1000
#define N1_GPIO_PIN_BASE 1000
// GPIO1_A. 0,1,2,3,4,7
// GPIO1_B. 0,1,2,3,4,5
// GPIO1_C. 2,4,5,6
// GPIO1_D. 0
#define GPIO_1_BASE 0xFF730000
#define N1_GPIO_1_BASE 0xFF730000
// GPIO2_C. 0_B,1_B
#define GPIO_2_BASE 0xFF780000
#define N1_GPIO_2_BASE 0xFF780000
// GPIO4_C. 5,6
// GPIO4_D. 0,4,5,6
#define GPIO_4_BASE 0xFF790000
#define N1_GPIO_4_BASE 0xFF790000
// Reserved
// GPIO{0, 3}
#define GPIO_0_BASE 0xFF720000
#define GPIO_3_BASE 0xFF788000
#define N1_GPIO_0_BASE 0xFF720000
#define N1_GPIO_3_BASE 0xFF788000
#ifdef __cplusplus
extern "C" {

View File

@@ -21,7 +21,11 @@
#include "softTone.h"
/*----------------------------------------------------------------------------*/
#include "wiringOdroid.h"
#include "softPwm.h"
#include "softTone.h"
/*----------------------------------------------------------------------------*/
#include "wiringPi.h"
#include "odroidn2.h"
/*----------------------------------------------------------------------------*/
@@ -112,18 +116,18 @@ static int gpioToMuxReg (int pin);
/*----------------------------------------------------------------------------*/
// wiringPi core function
/*----------------------------------------------------------------------------*/
static int getModeToGpio (int mode, int pin);
static void setPadDrive (int pin, int value);
static int getPadDrive (int pin);
static void pinMode (int pin, int mode);
static int getAlt (int pin);
static int getPUPD (int pin);
static void pullUpDnControl (int pin, int pud);
static int digitalRead (int pin);
static void digitalWrite (int pin, int value);
static int analogRead (int pin);
static void digitalWriteByte(const int value);
static unsigned int digitalReadByte (void);
static int _getModeToGpio (int mode, int pin);
static void _setPadDrive (int pin, int value);
static int _getPadDrive (int pin);
static void _pinMode (int pin, int mode);
static int _getAlt (int pin);
static int _getPUPD (int pin);
static void _pullUpDnControl (int pin, int pud);
static int _digitalRead (int pin);
static void _digitalWrite (int pin, int value);
static int _analogRead (int pin);
static void _digitalWriteByte (const int value);
static unsigned int _digitalReadByte (void);
/*----------------------------------------------------------------------------*/
// board init function
@@ -258,7 +262,7 @@ static int gpioToMuxReg (int pin)
}
/*----------------------------------------------------------------------------*/
static int getModeToGpio (int mode, int pin)
static int _getModeToGpio (int mode, int pin)
{
int retPin = -1;
@@ -288,14 +292,14 @@ static int getModeToGpio (int mode, int pin)
}
/*----------------------------------------------------------------------------*/
static void setPadDrive (int pin, int value)
static void _setPadDrive (int pin, int value)
{
int ds, shift;
if (lib->mode == MODE_GPIO_SYS)
return;
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return;
if (value < 0 || value > 3) {
@@ -312,14 +316,14 @@ static void setPadDrive (int pin, int value)
}
/*----------------------------------------------------------------------------*/
static int getPadDrive (int pin)
static int _getPadDrive (int pin)
{
int ds, shift;
if (lib->mode == MODE_GPIO_SYS)
return;
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return;
ds = gpioToDSReg(pin);
@@ -330,14 +334,14 @@ static int getPadDrive (int pin)
}
/*----------------------------------------------------------------------------*/
static void pinMode (int pin, int mode)
static void _pinMode (int pin, int mode)
{
int fsel, shift, origPin = pin;
if (lib->mode == MODE_GPIO_SYS)
return;
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return;
softPwmStop (origPin);
@@ -366,14 +370,14 @@ static void pinMode (int pin, int mode)
}
/*----------------------------------------------------------------------------*/
static int getAlt (int pin)
static int _getAlt (int pin)
{
int fsel, mux, shift, target, mode;
if (lib->mode == MODE_GPIO_SYS)
return 0;
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return 2;
fsel = gpioToGPFSELReg(pin);
@@ -389,14 +393,14 @@ static int getAlt (int pin)
}
/*----------------------------------------------------------------------------*/
static int getPUPD (int pin)
static int _getPUPD (int pin)
{
int puen, pupd, shift;
if (lib->mode == MODE_GPIO_SYS)
return;
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return;
puen = gpioToPUENReg(pin);
@@ -410,14 +414,14 @@ static int getPUPD (int pin)
}
/*----------------------------------------------------------------------------*/
static void pullUpDnControl (int pin, int pud)
static void _pullUpDnControl (int pin, int pud)
{
int shift = 0;
if (lib->mode == MODE_GPIO_SYS)
return;
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return;
shift = gpioToShiftReg(pin);
@@ -439,7 +443,7 @@ static void pullUpDnControl (int pin, int pud)
}
/*----------------------------------------------------------------------------*/
static int digitalRead (int pin)
static int _digitalRead (int pin)
{
char c ;
@@ -453,7 +457,7 @@ static int digitalRead (int pin)
return (c == '0') ? LOW : HIGH;
}
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return 0;
if ((*(gpio + gpioToGPLEVReg(pin)) & (1 << gpioToShiftReg(pin))) != 0)
@@ -463,7 +467,7 @@ static int digitalRead (int pin)
}
/*----------------------------------------------------------------------------*/
static void digitalWrite (int pin, int value)
static void _digitalWrite (int pin, int value)
{
if (lib->mode == MODE_GPIO_SYS) {
if (lib->sysFds[pin] != -1) {
@@ -475,7 +479,7 @@ static void digitalWrite (int pin, int value)
return;
}
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return;
if (value == LOW)
@@ -485,7 +489,7 @@ static void digitalWrite (int pin, int value)
}
/*----------------------------------------------------------------------------*/
static int analogRead (int pin)
static int _analogRead (int pin)
{
unsigned char value[5] = {0,};
@@ -513,7 +517,7 @@ static int analogRead (int pin)
}
/*----------------------------------------------------------------------------*/
static void digitalWriteByte (const int value)
static void _digitalWriteByte (const int value)
{
union reg_bitfield gpiox;
union reg_bitfield gpioa;
@@ -543,7 +547,7 @@ static void digitalWriteByte (const int value)
}
/*----------------------------------------------------------------------------*/
static unsigned int digitalReadByte (void)
static unsigned int _digitalReadByte (void)
{
return -1;
}
@@ -569,9 +573,9 @@ static void init_gpio_mmap (void)
"wiringPiSetup: Unable to open /dev/mem: %s\n",
strerror (errno)) ;
}
//#define ODROIDN2_GPIO_BASE 0xff634000
//#define N2_GPIO_BASE 0xff634000
gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, ODROIDN2_GPIO_BASE) ;
MAP_SHARED, fd, N2_GPIO_BASE) ;
if ((int32_t)gpio == -1)
return msg (MSG_ERR,
@@ -603,21 +607,21 @@ void init_odroidn2 (struct libodroid *libwiring)
phyToGpio = phyToGpio_rev1;
/* wiringPi Core function initialize */
libwiring->getModeToGpio = getModeToGpio;
libwiring->setPadDrive = setPadDrive;
libwiring->getPadDrive = getPadDrive;
libwiring->pinMode = pinMode;
libwiring->getAlt = getAlt;
libwiring->getPUPD = getPUPD;
libwiring->pullUpDnControl = pullUpDnControl;
libwiring->digitalRead = digitalRead;
libwiring->digitalWrite = digitalWrite;
libwiring->analogRead = analogRead;
libwiring->digitalWriteByte = digitalWriteByte;
libwiring->digitalReadByte = digitalReadByte;
libwiring->getModeToGpio = _getModeToGpio;
libwiring->setPadDrive = _setPadDrive;
libwiring->getPadDrive = _getPadDrive;
libwiring->pinMode = _pinMode;
libwiring->getAlt = _getAlt;
libwiring->getPUPD = _getPUPD;
libwiring->pullUpDnControl = _pullUpDnControl;
libwiring->digitalRead = _digitalRead;
libwiring->digitalWrite = _digitalWrite;
libwiring->analogRead = _analogRead;
libwiring->digitalWriteByte = _digitalWriteByte;
libwiring->digitalReadByte = _digitalReadByte;
/* specify pin base number */
libwiring->pinBase = GPIO_PIN_BASE;
libwiring->pinBase = N2_GPIO_PIN_BASE;
/* global variable setup */
lib = libwiring;

View File

@@ -9,16 +9,16 @@
#define __ODROID_N2_H__
/*----------------------------------------------------------------------------*/
#define ODROIDN2_GPIO_MASK (0xFFFFFF00)
#define ODROIDN2_GPIO_BASE 0xff634000
#define N2_GPIO_MASK (0xFFFFFF00)
#define N2_GPIO_BASE 0xff634000
#define GPIO_PIN_BASE 410
#define N2_GPIO_PIN_BASE 410
#define N2_GPIOA_PIN_START (GPIO_PIN_BASE + 50) // GPIOA_0
#define N2_GPIOA_PIN_END (GPIO_PIN_BASE + 65) // GPIOA_15
#define N2_GPIOX_PIN_START (GPIO_PIN_BASE + 66) // GPIOX_0
#define N2_GPIOX_PIN_MID (GPIO_PIN_BASE + 81) // GPIOX_15
#define N2_GPIOX_PIN_END (GPIO_PIN_BASE + 85) // GPIOX_19
#define N2_GPIOA_PIN_START (N2_GPIO_PIN_BASE + 50) // GPIOA_0
#define N2_GPIOA_PIN_END (N2_GPIO_PIN_BASE + 65) // GPIOA_15
#define N2_GPIOX_PIN_START (N2_GPIO_PIN_BASE + 66) // GPIOX_0
#define N2_GPIOX_PIN_MID (N2_GPIO_PIN_BASE + 81) // GPIOX_15
#define N2_GPIOX_PIN_END (N2_GPIO_PIN_BASE + 85) // GPIOX_19
#define N2_GPIOX_FSEL_REG_OFFSET 0x116
#define N2_GPIOX_OUTP_REG_OFFSET 0x117

View File

@@ -18,7 +18,11 @@
#include <sys/utsname.h>
/*----------------------------------------------------------------------------*/
#include "wiringOdroid.h"
#include "softPwm.h"
#include "softTone.h"
/*----------------------------------------------------------------------------*/
#include "wiringPi.h"
#include "odroidxu3.h"
/*----------------------------------------------------------------------------*/
@@ -103,20 +107,20 @@ static int gpioToGPFSELReg (int pin);
static int gpioToDSReg (int pin);
/*----------------------------------------------------------------------------*/
// wiringPi core function
// wiringPi core function
/*----------------------------------------------------------------------------*/
static int getModeToGpio (int mode, int pin);
static void setPadDrive (int pin, int value);
static int getPadDrive (int pin);
static void pinMode (int pin, int mode);
static int getAlt (int pin);
static int getPUPD (int pin);
static void pullUpDnControl (int pin, int pud);
static int digitalRead (int pin);
static void digitalWrite (int pin, int value);
static int analogRead (int pin);
static void digitalWriteByte(const int value);
static unsigned int digitalReadByte (void);
static int _getModeToGpio (int mode, int pin);
static void _setPadDrive (int pin, int value);
static int _getPadDrive (int pin);
static void _pinMode (int pin, int mode);
static int _getAlt (int pin);
static int _getPUPD (int pin);
static void _pullUpDnControl (int pin, int pud);
static int _digitalRead (int pin);
static void _digitalWrite (int pin, int value);
static int _analogRead (int pin);
static void _digitalWriteByte (const int value);
static unsigned int _digitalReadByte (void);
/*----------------------------------------------------------------------------*/
// board init function
@@ -134,18 +138,18 @@ static void init_adc_fds (void);
static int gpioToGPSETReg (int pin)
{
switch (pin) {
case GPIO_X1_START...GPIO_X1_END:
return (GPIO_X1_DAT_OFFSET >> 2);
case GPIO_X2_START...GPIO_X2_END:
return (GPIO_X2_DAT_OFFSET >> 2);
case GPIO_X3_START...GPIO_X3_END:
return (GPIO_X3_DAT_OFFSET >> 2);
case GPIO_A0_START...GPIO_A0_END:
return (GPIO_A0_DAT_OFFSET >> 2);
case GPIO_A2_START...GPIO_A2_END:
return (GPIO_A2_DAT_OFFSET >> 2);
case GPIO_B3_START...GPIO_B3_END:
return (GPIO_B3_DAT_OFFSET >> 2);
case XU3_GPIO_X1_START...XU3_GPIO_X1_END:
return (XU3_GPIO_X1_DAT_OFFSET >> 2);
case XU3_GPIO_X2_START...XU3_GPIO_X2_END:
return (XU3_GPIO_X2_DAT_OFFSET >> 2);
case XU3_GPIO_X3_START...XU3_GPIO_X3_END:
return (XU3_GPIO_X3_DAT_OFFSET >> 2);
case XU3_GPIO_A0_START...XU3_GPIO_A0_END:
return (XU3_GPIO_A0_DAT_OFFSET >> 2);
case XU3_GPIO_A2_START...XU3_GPIO_A2_END:
return (XU3_GPIO_A2_DAT_OFFSET >> 2);
case XU3_GPIO_B3_START...XU3_GPIO_B3_END:
return (XU3_GPIO_B3_DAT_OFFSET >> 2);
default:
break;
}
@@ -160,18 +164,18 @@ static int gpioToGPSETReg (int pin)
static int gpioToGPLEVReg (int pin)
{
switch (pin) {
case GPIO_X1_START...GPIO_X1_END:
return (GPIO_X1_DAT_OFFSET >> 2);
case GPIO_X2_START...GPIO_X2_END:
return (GPIO_X2_DAT_OFFSET >> 2);
case GPIO_X3_START...GPIO_X3_END:
return (GPIO_X3_DAT_OFFSET >> 2);
case GPIO_A0_START...GPIO_A0_END:
return (GPIO_A0_DAT_OFFSET >> 2);
case GPIO_A2_START...GPIO_A2_END:
return (GPIO_A2_DAT_OFFSET >> 2);
case GPIO_B3_START...GPIO_B3_END:
return (GPIO_B3_DAT_OFFSET >> 2);
case XU3_GPIO_X1_START...XU3_GPIO_X1_END:
return (XU3_GPIO_X1_DAT_OFFSET >> 2);
case XU3_GPIO_X2_START...XU3_GPIO_X2_END:
return (XU3_GPIO_X2_DAT_OFFSET >> 2);
case XU3_GPIO_X3_START...XU3_GPIO_X3_END:
return (XU3_GPIO_X3_DAT_OFFSET >> 2);
case XU3_GPIO_A0_START...XU3_GPIO_A0_END:
return (XU3_GPIO_A0_DAT_OFFSET >> 2);
case XU3_GPIO_A2_START...XU3_GPIO_A2_END:
return (XU3_GPIO_A2_DAT_OFFSET >> 2);
case XU3_GPIO_B3_START...XU3_GPIO_B3_END:
return (XU3_GPIO_B3_DAT_OFFSET >> 2);
default:
break;
}
@@ -186,18 +190,18 @@ static int gpioToGPLEVReg (int pin)
static int gpioToPUPDReg (int pin)
{
switch (pin) {
case GPIO_X1_START...GPIO_X1_END:
return (GPIO_X1_PUD_OFFSET >> 2);
case GPIO_X2_START...GPIO_X2_END:
return (GPIO_X2_PUD_OFFSET >> 2);
case GPIO_X3_START...GPIO_X3_END:
return (GPIO_X3_PUD_OFFSET >> 2);
case GPIO_A0_START...GPIO_A0_END:
return (GPIO_A0_PUD_OFFSET >> 2);
case GPIO_A2_START...GPIO_A2_END:
return (GPIO_A2_PUD_OFFSET >> 2);
case GPIO_B3_START...GPIO_B3_END:
return (GPIO_B3_PUD_OFFSET >> 2);
case XU3_GPIO_X1_START...XU3_GPIO_X1_END:
return (XU3_GPIO_X1_PUD_OFFSET >> 2);
case XU3_GPIO_X2_START...XU3_GPIO_X2_END:
return (XU3_GPIO_X2_PUD_OFFSET >> 2);
case XU3_GPIO_X3_START...XU3_GPIO_X3_END:
return (XU3_GPIO_X3_PUD_OFFSET >> 2);
case XU3_GPIO_A0_START...XU3_GPIO_A0_END:
return (XU3_GPIO_A0_PUD_OFFSET >> 2);
case XU3_GPIO_A2_START...XU3_GPIO_A2_END:
return (XU3_GPIO_A2_PUD_OFFSET >> 2);
case XU3_GPIO_B3_START...XU3_GPIO_B3_END:
return (XU3_GPIO_B3_PUD_OFFSET >> 2);
default:
break;
}
@@ -212,18 +216,18 @@ static int gpioToPUPDReg (int pin)
static int gpioToShiftReg (int pin)
{
switch (pin) {
case GPIO_X1_START...GPIO_X1_END:
return (pin - GPIO_X1_START);
case GPIO_X2_START...GPIO_X2_END:
return (pin - GPIO_X2_START);
case GPIO_X3_START...GPIO_X3_END:
return (pin - GPIO_X3_START);
case GPIO_A0_START...GPIO_A0_END:
return (pin - GPIO_A0_START);
case GPIO_A2_START...GPIO_A2_END:
return (pin - GPIO_A2_START);
case GPIO_B3_START...GPIO_B3_END:
return (pin - GPIO_B3_START);
case XU3_GPIO_X1_START...XU3_GPIO_X1_END:
return (pin - XU3_GPIO_X1_START);
case XU3_GPIO_X2_START...XU3_GPIO_X2_END:
return (pin - XU3_GPIO_X2_START);
case XU3_GPIO_X3_START...XU3_GPIO_X3_END:
return (pin - XU3_GPIO_X3_START);
case XU3_GPIO_A0_START...XU3_GPIO_A0_END:
return (pin - XU3_GPIO_A0_START);
case XU3_GPIO_A2_START...XU3_GPIO_A2_END:
return (pin - XU3_GPIO_A2_START);
case XU3_GPIO_B3_START...XU3_GPIO_B3_END:
return (pin - XU3_GPIO_B3_START);
default:
break;
}
@@ -238,18 +242,18 @@ static int gpioToShiftReg (int pin)
static int gpioToGPFSELReg (int pin)
{
switch (pin) {
case GPIO_X1_START...GPIO_X1_END:
return (GPIO_X1_CON_OFFSET >> 2);
case GPIO_X2_START...GPIO_X2_END:
return (GPIO_X2_CON_OFFSET >> 2);
case GPIO_X3_START...GPIO_X3_END:
return (GPIO_X3_CON_OFFSET >> 2);
case GPIO_A0_START...GPIO_A0_END:
return (GPIO_A0_CON_OFFSET >> 2);
case GPIO_A2_START...GPIO_A2_END:
return (GPIO_A2_CON_OFFSET >> 2);
case GPIO_B3_START...GPIO_B3_END:
return (GPIO_B3_CON_OFFSET >> 2);
case XU3_GPIO_X1_START...XU3_GPIO_X1_END:
return (XU3_GPIO_X1_CON_OFFSET >> 2);
case XU3_GPIO_X2_START...XU3_GPIO_X2_END:
return (XU3_GPIO_X2_CON_OFFSET >> 2);
case XU3_GPIO_X3_START...XU3_GPIO_X3_END:
return (XU3_GPIO_X3_CON_OFFSET >> 2);
case XU3_GPIO_A0_START...XU3_GPIO_A0_END:
return (XU3_GPIO_A0_CON_OFFSET >> 2);
case XU3_GPIO_A2_START...XU3_GPIO_A2_END:
return (XU3_GPIO_A2_CON_OFFSET >> 2);
case XU3_GPIO_B3_START...XU3_GPIO_B3_END:
return (XU3_GPIO_B3_CON_OFFSET >> 2);
default:
break;
}
@@ -264,18 +268,18 @@ static int gpioToGPFSELReg (int pin)
static int gpioToDSReg (int pin)
{
switch (pin) {
case GPIO_X1_START...GPIO_X1_END:
return (GPIO_X1_DRV_OFFSET >> 2);
case GPIO_X2_START...GPIO_X2_END:
return (GPIO_X2_DRV_OFFSET >> 2);
case GPIO_X3_START...GPIO_X3_END:
return (GPIO_X3_DRV_OFFSET >> 2);
case GPIO_A0_START...GPIO_A0_END:
return (GPIO_A0_DRV_OFFSET >> 2);
case GPIO_A2_START...GPIO_A2_END:
return (GPIO_A2_DRV_OFFSET >> 2);
case GPIO_B3_START...GPIO_B3_END:
return (GPIO_B3_DRV_OFFSET >> 2);
case XU3_GPIO_X1_START...XU3_GPIO_X1_END:
return (XU3_GPIO_X1_DRV_OFFSET >> 2);
case XU3_GPIO_X2_START...XU3_GPIO_X2_END:
return (XU3_GPIO_X2_DRV_OFFSET >> 2);
case XU3_GPIO_X3_START...XU3_GPIO_X3_END:
return (XU3_GPIO_X3_DRV_OFFSET >> 2);
case XU3_GPIO_A0_START...XU3_GPIO_A0_END:
return (XU3_GPIO_A0_DRV_OFFSET >> 2);
case XU3_GPIO_A2_START...XU3_GPIO_A2_END:
return (XU3_GPIO_A2_DRV_OFFSET >> 2);
case XU3_GPIO_B3_START...XU3_GPIO_B3_END:
return (XU3_GPIO_B3_DRV_OFFSET >> 2);
default:
break;
}
@@ -283,7 +287,7 @@ static int gpioToDSReg (int pin)
}
/*----------------------------------------------------------------------------*/
static int getModeToGpio (int mode, int pin)
static int _getModeToGpio (int mode, int pin)
{
switch (mode) {
/* Native gpio number */
@@ -306,14 +310,14 @@ static int getModeToGpio (int mode, int pin)
}
/*----------------------------------------------------------------------------*/
static void setPadDrive (int pin, int value)
static void _setPadDrive (int pin, int value)
{
int ds, shift;
if (lib->mode == MODE_GPIO_SYS)
return;
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return;
if (value < 0 || value > 3) {
@@ -334,14 +338,14 @@ static void setPadDrive (int pin, int value)
}
/*----------------------------------------------------------------------------*/
static int getPadDrive (int pin)
static int _getPadDrive (int pin)
{
int ds, shift;
if (lib->mode == MODE_GPIO_SYS)
return;
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return;
ds = gpioToDSReg(pin);
@@ -354,14 +358,14 @@ static int getPadDrive (int pin)
}
/*----------------------------------------------------------------------------*/
static void pinMode (int pin, int mode)
static void _pinMode (int pin, int mode)
{
int fsel, shift, origPin = pin;
if (lib->mode == MODE_GPIO_SYS)
return;
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return;
softPwmStop (origPin);
@@ -399,14 +403,14 @@ static void pinMode (int pin, int mode)
}
/*----------------------------------------------------------------------------*/
static int getAlt (int pin)
static int _getAlt (int pin)
{
int fsel, shift, mode;
if (lib->mode == MODE_GPIO_SYS)
return 0;
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return 2;
fsel = gpioToGPFSELReg(pin);
@@ -422,14 +426,14 @@ static int getAlt (int pin)
}
/*----------------------------------------------------------------------------*/
static int getPUPD (int pin)
static int _getPUPD (int pin)
{
int pupd, shift, pull;
if (lib->mode == MODE_GPIO_SYS)
return;
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return;
pupd = gpioToPUPDReg(pin);
@@ -445,14 +449,14 @@ static int getPUPD (int pin)
}
/*----------------------------------------------------------------------------*/
static void pullUpDnControl (int pin, int pud)
static void _pullUpDnControl (int pin, int pud)
{
int shift = 0;
if (lib->mode == MODE_GPIO_SYS)
return;
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return;
shift = gpioToShiftReg(pin) << 1;
@@ -481,7 +485,7 @@ static void pullUpDnControl (int pin, int pud)
}
/*----------------------------------------------------------------------------*/
static int digitalRead (int pin)
static int _digitalRead (int pin)
{
char c ;
@@ -495,7 +499,7 @@ static int digitalRead (int pin)
return (c == '0') ? LOW : HIGH;
}
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return 0;
if (pin < 100)
@@ -505,7 +509,7 @@ static int digitalRead (int pin)
}
/*----------------------------------------------------------------------------*/
static void digitalWrite (int pin, int value)
static void _digitalWrite (int pin, int value)
{
if (lib->mode == MODE_GPIO_SYS) {
if (lib->sysFds[pin] != -1) {
@@ -517,7 +521,7 @@ static void digitalWrite (int pin, int value)
return;
}
if ((pin = getModeToGpio(lib->mode, pin)) < 0)
if ((pin = _getModeToGpio(lib->mode, pin)) < 0)
return;
if (pin < 100) {
@@ -534,7 +538,7 @@ static void digitalWrite (int pin, int value)
}
/*----------------------------------------------------------------------------*/
static int analogRead (int pin)
static int _analogRead (int pin)
{
unsigned char value[5] = {0,};
@@ -562,7 +566,7 @@ static int analogRead (int pin)
}
/*----------------------------------------------------------------------------*/
static void digitalWriteByte (const int value)
static void _digitalWriteByte (const int value)
{
union reg_bitfield gpx1, gpx2, gpa0;
@@ -570,9 +574,9 @@ static void digitalWriteByte (const int value)
return;
}
/* Read data register */
gpx1.wvalue = *(gpio + (GPIO_X1_DAT_OFFSET >> 2));
gpx2.wvalue = *(gpio + (GPIO_X2_DAT_OFFSET >> 2));
gpa0.wvalue = *(gpio1 + (GPIO_A0_DAT_OFFSET >> 2));
gpx1.wvalue = *(gpio + (XU3_GPIO_X1_DAT_OFFSET >> 2));
gpx2.wvalue = *(gpio + (XU3_GPIO_X2_DAT_OFFSET >> 2));
gpa0.wvalue = *(gpio1 + (XU3_GPIO_A0_DAT_OFFSET >> 2));
/* Wiring PI GPIO0 = XU3/4 GPA0.3 */
gpa0.bits.bit3 = (value & 0x01);
@@ -592,13 +596,13 @@ static void digitalWriteByte (const int value)
gpx1.bits.bit2 = (value & 0x80);
/* update data register */
*(gpio + (GPIO_X1_DAT_OFFSET >> 2)) = gpx1.wvalue;
*(gpio + (GPIO_X2_DAT_OFFSET >> 2)) = gpx2.wvalue;
*(gpio1 + (GPIO_A0_DAT_OFFSET >> 2)) = gpa0.wvalue;
*(gpio + (XU3_GPIO_X1_DAT_OFFSET >> 2)) = gpx1.wvalue;
*(gpio + (XU3_GPIO_X2_DAT_OFFSET >> 2)) = gpx2.wvalue;
*(gpio1 + (XU3_GPIO_A0_DAT_OFFSET >> 2)) = gpa0.wvalue;
}
/*----------------------------------------------------------------------------*/
static unsigned int digitalReadByte (void)
static unsigned int _digitalReadByte (void)
{
union reg_bitfield gpx1, gpx2, gpa0;
unsigned int value = 0;
@@ -607,9 +611,9 @@ static unsigned int digitalReadByte (void)
return -1;
}
/* Read data register */
gpx1.wvalue = *(gpio + (GPIO_X1_DAT_OFFSET >> 2));
gpx2.wvalue = *(gpio + (GPIO_X2_DAT_OFFSET >> 2));
gpa0.wvalue = *(gpio1 + (GPIO_A0_DAT_OFFSET >> 2));
gpx1.wvalue = *(gpio + (XU3_GPIO_X1_DAT_OFFSET >> 2));
gpx2.wvalue = *(gpio + (XU3_GPIO_X2_DAT_OFFSET >> 2));
gpa0.wvalue = *(gpio1 + (XU3_GPIO_A0_DAT_OFFSET >> 2));
/* Wiring PI GPIO0 = XU3/4 GPA0.3 */
if (gpa0.bits.bit3)
@@ -662,10 +666,10 @@ static void init_gpio_mmap (void)
}
//#define ODROIDXU_GPX_BASE 0x13400000 // GPX0,1,2,3
gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, ODROIDXU3_GPX_BASE) ;
MAP_SHARED, fd, XU3_GPX_BASE) ;
//#define ODROIDXU_GPA_BASE 0x14010000 // GPA0,1,2, GPB0,1,2,3,4
gpio1 = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, ODROIDXU3_GPA_BASE) ;
MAP_SHARED, fd, XU3_GPA_BASE) ;
if (((int32_t)gpio == -1) || ((int32_t)gpio1 == -1))
return msg (MSG_ERR,
"wiringPiSetup: mmap (GPIO) failed: %s\n",
@@ -702,21 +706,21 @@ void init_odroidxu3 (struct libodroid *libwiring)
init_adc_fds();
/* wiringPi Core function initialize */
libwiring->getModeToGpio = getModeToGpio;
libwiring->setPadDrive = setPadDrive;
libwiring->getPadDrive = getPadDrive;
libwiring->pinMode = pinMode;
libwiring->getAlt = getAlt;
libwiring->getPUPD = getPUPD;
libwiring->pullUpDnControl = pullUpDnControl;
libwiring->digitalRead = digitalRead;
libwiring->digitalWrite = digitalWrite;
libwiring->analogRead = analogRead;
libwiring->digitalWriteByte = digitalWriteByte;
libwiring->digitalReadByte = digitalReadByte;
libwiring->getModeToGpio = _getModeToGpio;
libwiring->setPadDrive = _setPadDrive;
libwiring->getPadDrive = _getPadDrive;
libwiring->pinMode = _pinMode;
libwiring->getAlt = _getAlt;
libwiring->getPUPD = _getPUPD;
libwiring->pullUpDnControl = _pullUpDnControl;
libwiring->digitalRead = _digitalRead;
libwiring->digitalWrite = _digitalWrite;
libwiring->analogRead = _analogRead;
libwiring->digitalWriteByte = _digitalWriteByte;
libwiring->digitalReadByte = _digitalReadByte;
/* specify pin base number */
libwiring->pinBase = GPIO_PIN_BASE;
libwiring->pinBase = XU3_GPIO_PIN_BASE;
/* global variable setup */
lib = libwiring;

View File

@@ -9,57 +9,57 @@
#define __ODROID_XU3_H__
/*----------------------------------------------------------------------------*/
#define ODROIDXU3_GPIO_MASK (0xFFFFFF00)
#define XU3_GPIO_MASK (0xFFFFFF00)
#define GPIO_PIN_BASE 0
#define XU3_GPIO_PIN_BASE 0
// GPX0,1,2,3
#define ODROIDXU3_GPX_BASE 0x13400000
#define XU3_GPX_BASE 0x13400000
#define GPIO_X1_START 16
#define GPIO_X1_CON_OFFSET 0x0C20
#define GPIO_X1_DAT_OFFSET 0x0C24
#define GPIO_X1_PUD_OFFSET 0x0C28
#define GPIO_X1_DRV_OFFSET 0x0C2C
#define GPIO_X1_END 23
#define XU3_GPIO_X1_START 16
#define XU3_GPIO_X1_CON_OFFSET 0x0C20
#define XU3_GPIO_X1_DAT_OFFSET 0x0C24
#define XU3_GPIO_X1_PUD_OFFSET 0x0C28
#define XU3_GPIO_X1_DRV_OFFSET 0x0C2C
#define XU3_GPIO_X1_END 23
#define GPIO_X2_START 24
#define GPIO_X2_CON_OFFSET 0x0C40
#define GPIO_X2_DAT_OFFSET 0x0C44
#define GPIO_X2_PUD_OFFSET 0x0C48
#define GPIO_X2_DRV_OFFSET 0x0C4C
#define GPIO_X2_END 31
#define XU3_GPIO_X2_START 24
#define XU3_GPIO_X2_CON_OFFSET 0x0C40
#define XU3_GPIO_X2_DAT_OFFSET 0x0C44
#define XU3_GPIO_X2_PUD_OFFSET 0x0C48
#define XU3_GPIO_X2_DRV_OFFSET 0x0C4C
#define XU3_GPIO_X2_END 31
#define GPIO_X3_START 32
#define GPIO_X3_CON_OFFSET 0x0C60
#define GPIO_X3_DAT_OFFSET 0x0C64
#define GPIO_X3_PUD_OFFSET 0x0C68
#define GPIO_X3_DRV_OFFSET 0x0C6C
#define GPIO_X3_END 39
#define XU3_GPIO_X3_START 32
#define XU3_GPIO_X3_CON_OFFSET 0x0C60
#define XU3_GPIO_X3_DAT_OFFSET 0x0C64
#define XU3_GPIO_X3_PUD_OFFSET 0x0C68
#define XU3_GPIO_X3_DRV_OFFSET 0x0C6C
#define XU3_GPIO_X3_END 39
// GPA0,1,2, GPB0,1,2,3,4
#define ODROIDXU3_GPA_BASE 0x14010000
#define XU3_GPA_BASE 0x14010000
#define GPIO_A0_START 171
#define GPIO_A0_CON_OFFSET 0x0000
#define GPIO_A0_DAT_OFFSET 0x0004
#define GPIO_A0_PUD_OFFSET 0x0008
#define GPIO_A0_DRV_OFFSET 0x000C
#define GPIO_A0_END 178
#define XU3_GPIO_A0_START 171
#define XU3_GPIO_A0_CON_OFFSET 0x0000
#define XU3_GPIO_A0_DAT_OFFSET 0x0004
#define XU3_GPIO_A0_PUD_OFFSET 0x0008
#define XU3_GPIO_A0_DRV_OFFSET 0x000C
#define XU3_GPIO_A0_END 178
#define GPIO_A2_START 185
#define GPIO_A2_CON_OFFSET 0x0040
#define GPIO_A2_DAT_OFFSET 0x0044
#define GPIO_A2_PUD_OFFSET 0x0048
#define GPIO_A2_DRV_OFFSET 0x004C
#define GPIO_A2_END 192
#define XU3_GPIO_A2_START 185
#define XU3_GPIO_A2_CON_OFFSET 0x0040
#define XU3_GPIO_A2_DAT_OFFSET 0x0044
#define XU3_GPIO_A2_PUD_OFFSET 0x0048
#define XU3_GPIO_A2_DRV_OFFSET 0x004C
#define XU3_GPIO_A2_END 192
#define GPIO_B3_START 207
#define GPIO_B3_CON_OFFSET 0x00C0
#define GPIO_B3_DAT_OFFSET 0x00C4
#define GPIO_B3_PUD_OFFSET 0x00C8
#define GPIO_B3_DRV_OFFSET 0x00CC
#define GPIO_B3_END 214
#define XU3_GPIO_B3_START 207
#define XU3_GPIO_B3_CON_OFFSET 0x00C0
#define XU3_GPIO_B3_DAT_OFFSET 0x00C4
#define XU3_GPIO_B3_PUD_OFFSET 0x00C8
#define XU3_GPIO_B3_DRV_OFFSET 0x00CC
#define XU3_GPIO_B3_END 214
#ifdef __cplusplus
extern "C" {

View File

@@ -1,246 +0,0 @@
/*
* wiringPi.h:
* Arduino like Wiring library for the Raspberry Pi.
* Copyright (c) 2012-2017 Gordon Henderson
***********************************************************************
* This file is part of wiringPi:
* https://projects.drogon.net/raspberry-pi/wiringpi/
*
* wiringPi is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* wiringPi is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with wiringPi. If not, see <http://www.gnu.org/licenses/>.
***********************************************************************
*/
/*----------------------------------------------------------------------------*/
#ifndef __WIRING_ODROID_H__
#define __WIRING_ODROID_H__
/*----------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdarg.h>
#include <stdint.h>
#include <stdlib.h>
/*----------------------------------------------------------------------------*/
#ifndef TRUE
#define TRUE (1==1)
#define FALSE (!TRUE)
#endif
#define PIN_NUM_CALC_SYSFD(X) (X > 255 ? X - libwiring.pinBase : X)
#define UNU __attribute__((unused))
#define ENV_DEBUG "WIRINGPI_DEBUG"
#define ENV_CODES "WIRINGPI_CODES"
#define ENV_GPIOMEM "WIRINGPI_GPIOMEM"
#define MODEL_UNKNOWN 0
#define MODEL_ODROID_C1 1
#define MODEL_ODROID_C2 2
#define MODEL_ODROID_XU3 3
#define MODEL_ODROID_N1 4
#define MODEL_ODROID_N2 5
#define MAKER_UNKNOWN 0
#define MAKER_AMLOGIC 1
#define MAKER_SAMSUNG 2
#define MAKER_ROCKCHIP 3
#define MODE_PINS 0
#define MODE_GPIO 1
#define MODE_GPIO_SYS 2
#define MODE_PHYS 3
#define MODE_PIFACE 4
#define MODE_UNINITIALISED -1
// Pin modes
#define INPUT 0
#define OUTPUT 1
#define PWM_OUTPUT 2
#define GPIO_CLOCK 3
#define SOFT_PWM_OUTPUT 4
#define SOFT_TONE_OUTPUT 5
#define PWM_TONE_OUTPUT 6
#define LOW 0
#define HIGH 1
// Pull up/down/none
#define PUD_OFF 0
#define PUD_DOWN 1
#define PUD_UP 2
// Interrupt levels
#define INT_EDGE_SETUP 0
#define INT_EDGE_FALLING 1
#define INT_EDGE_RISING 2
#define INT_EDGE_BOTH 3
// Module names
#define AML_MODULE_I2C "aml_i2c"
// Threads
#define PI_THREAD(X) void *X (UNU void *dummy)
// Failure modes
#define WPI_FATAL (1==1)
#define WPI_ALMOST (1==2)
extern const char *piModelNames [16];
extern const char *piRevisionNames [16];
extern const char *piMakerNames [16];
extern const int piMemorySize [ 8];
/*----------------------------------------------------------------------------*/
#define PAGE_SIZE (4*1024)
#define BLOCK_SIZE (4*1024)
/*----------------------------------------------------------------------------*/
/* Debug message display function */
/*----------------------------------------------------------------------------*/
#define MSG_ERR -1
#define MSG_WARN -2
/*----------------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/*----------------------------------------------------------------------------*/
// Export function define
/*----------------------------------------------------------------------------*/
extern int msg (int type, const char *message, ...);
extern int moduleLoaded(char *);
#ifdef __cplusplus
}
#endif
/*----------------------------------------------------------------------------*/
// wiringPiNodeStruct:
// This describes additional device nodes in the extended wiringPi
// 2.0 scheme of things.
// It's a simple linked list for now, but will hopefully migrate to
// a binary tree for efficiency reasons - but then again, the chances
// of more than 1 or 2 devices being added are fairly slim, so who
// knows....
/*----------------------------------------------------------------------------*/
struct wiringPiNodeStruct
{
int pinBase;
int pinMax;
int fd; // Node specific
unsigned int data0; // ditto
unsigned int data1; // ditto
unsigned int data2; // ditto
unsigned int data3; // ditto
void (*pinMode) (struct wiringPiNodeStruct *node, int pin, int mode);
void (*pullUpDnControl) (struct wiringPiNodeStruct *node, int pin, int mode);
int (*digitalRead) (struct wiringPiNodeStruct *node, int pin);
// unsigned int (*digitalRead8) (struct wiringPiNodeStruct *node, int pin);
void (*digitalWrite) (struct wiringPiNodeStruct *node, int pin, int value);
// void (*digitalWrite8) (struct wiringPiNodeStruct *node, int pin, int value);
void (*pwmWrite) (struct wiringPiNodeStruct *node, int pin, int value);
int (*analogRead) (struct wiringPiNodeStruct *node, int pin);
void (*analogWrite) (struct wiringPiNodeStruct *node, int pin, int value);
struct wiringPiNodeStruct *next;
};
extern struct wiringPiNodeStruct *wiringPiNodes;
extern struct wiringPiNodeStruct *wiringPiFindNode (int pin);
extern struct wiringPiNodeStruct *wiringPiNewNode (int pinBase, int numPins);
extern int wiringPiFailure (int fatal, const char *message, ...) ;
/*----------------------------------------------------------------------------*/
struct libodroid
{
/* H/W model info */
int model, rev, mem, maker;
/* wiringPi init Mode */
int mode;
/* wiringPi core func */
int (*getModeToGpio) (int mode, int pin);
void (*setPadDrive) (int pin, int value);
int (*getPadDrive) (int pin);
void (*pinMode) (int pin, int mode);
int (*getAlt) (int pin);
int (*getPUPD) (int pin);
void (*pullUpDnControl) (int pin, int pud);
int (*digitalRead) (int pin);
void (*digitalWrite) (int pin, int value);
int (*analogRead) (int pin);
void (*digitalWriteByte) (const int value);
unsigned int (*digitalReadByte) (void);
/* ISR Function pointer */
void (*isrFunctions[256])(void);
/* GPIO sysfs file discripter */
int sysFds[256];
/* GPIO pin base number */
int pinBase;
// Time for easy calculations
uint64_t epochMilli, epochMicro ;
};
union reg_bitfield {
unsigned int wvalue;
struct {
unsigned int bit0 : 1;
unsigned int bit1 : 1;
unsigned int bit2 : 1;
unsigned int bit3 : 1;
unsigned int bit4 : 1;
unsigned int bit5 : 1;
unsigned int bit6 : 1;
unsigned int bit7 : 1;
unsigned int bit8 : 1;
unsigned int bit9 : 1;
unsigned int bit10 : 1;
unsigned int bit11 : 1;
unsigned int bit12 : 1;
unsigned int bit13 : 1;
unsigned int bit14 : 1;
unsigned int bit15 : 1;
unsigned int bit16 : 1;
unsigned int bit17 : 1;
unsigned int bit18 : 1;
unsigned int bit19 : 1;
unsigned int bit20 : 1;
unsigned int bit21 : 1;
unsigned int bit22 : 1;
unsigned int bit23 : 1;
unsigned int bit24 : 1;
unsigned int bit25 : 1;
unsigned int bit26 : 1;
unsigned int bit27 : 1;
unsigned int bit28 : 1;
unsigned int bit29 : 1;
unsigned int bit30 : 1;
unsigned int bit31 : 1;
} bits;
};
/*----------------------------------------------------------------------------*/
#endif /* __WIRING_ODROID_H__ */
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/

View File

@@ -1,42 +0,0 @@
/*
* wiringPiI2C.h:
* Simplified I2C access routines
* Copyright (c) 2013 Gordon Henderson
***********************************************************************
* This file is part of wiringPi:
* https://projects.drogon.net/raspberry-pi/wiringpi/
*
* wiringPi is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* wiringPi is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with wiringPi.
* If not, see <http://www.gnu.org/licenses/>.
***********************************************************************
*/
#ifdef __cplusplus
extern "C" {
#endif
extern int wiringPiI2CRead (int fd) ;
extern int wiringPiI2CReadReg8 (int fd, int reg) ;
extern int wiringPiI2CReadReg16 (int fd, int reg) ;
extern int wiringPiI2CWrite (int fd, int data) ;
extern int wiringPiI2CWriteReg8 (int fd, int reg, int data) ;
extern int wiringPiI2CWriteReg16 (int fd, int reg, int data) ;
extern int wiringPiI2CSetupInterface (const char *device, int devId) ;
extern int wiringPiI2CSetup (const int devId) ;
#ifdef __cplusplus
}
#endif

View File

@@ -1,36 +0,0 @@
/*
* wiringPiSPI.h:
* Simplified SPI access routines
* Copyright (c) 2012-2015 Gordon Henderson
***********************************************************************
* This file is part of wiringPi:
* https://projects.drogon.net/raspberry-pi/wiringpi/
*
* wiringPi is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* wiringPi is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with wiringPi.
* If not, see <http://www.gnu.org/licenses/>.
***********************************************************************
*/
#ifdef __cplusplus
extern "C" {
#endif
int wiringPiSPIGetFd (int channel) ;
int wiringPiSPIDataRW (int channel, unsigned char *data, int len) ;
int wiringPiSPISetupMode (int channel, int speed, int mode) ;
int wiringPiSPISetup (int channel, int speed) ;
#ifdef __cplusplus
}
#endif

View File

@@ -29,7 +29,7 @@
#include "softTone.h"
/*----------------------------------------------------------------------------*/
#include "wiringOdroid.h"
#include "wiringPi.h"
#include "../version.h"
#include "odroidc1.h"

View File

@@ -1 +0,0 @@
wiringOdroid.h

307
wiringPi/wiringPi.h Executable file
View File

@@ -0,0 +1,307 @@
/*
* wiringPi.h:
* Arduino like Wiring library for the Raspberry Pi.
* Copyright (c) 2012-2017 Gordon Henderson
***********************************************************************
* This file is part of wiringPi:
* https://projects.drogon.net/raspberry-pi/wiringpi/
*
* wiringPi is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* wiringPi is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with wiringPi. If not, see <http://www.gnu.org/licenses/>.
***********************************************************************
*/
/*----------------------------------------------------------------------------*/
#ifndef __WIRING_H__
#define __WIRING_H__
/*----------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdarg.h>
#include <stdint.h>
#include <stdlib.h>
/*----------------------------------------------------------------------------*/
#ifndef TRUE
#define TRUE (1==1)
#define FALSE (!TRUE)
#endif
#define PIN_NUM_CALC_SYSFD(X) (X > 255 ? X - libwiring.pinBase : X)
#define UNU __attribute__((unused))
#define ENV_DEBUG "WIRINGPI_DEBUG"
#define ENV_CODES "WIRINGPI_CODES"
#define ENV_GPIOMEM "WIRINGPI_GPIOMEM"
#define MODEL_UNKNOWN 0
#define MODEL_ODROID_C1 1
#define MODEL_ODROID_C2 2
#define MODEL_ODROID_XU3 3
#define MODEL_ODROID_N1 4
#define MODEL_ODROID_N2 5
#define MAKER_UNKNOWN 0
#define MAKER_AMLOGIC 1
#define MAKER_SAMSUNG 2
#define MAKER_ROCKCHIP 3
#define MODE_PINS 0
#define MODE_GPIO 1
#define MODE_GPIO_SYS 2
#define MODE_PHYS 3
#define MODE_PIFACE 4
#define MODE_UNINITIALISED -1
// Pin modes
#define INPUT 0
#define OUTPUT 1
#define PWM_OUTPUT 2
#define GPIO_CLOCK 3
#define SOFT_PWM_OUTPUT 4
#define SOFT_TONE_OUTPUT 5
#define PWM_TONE_OUTPUT 6
#define LOW 0
#define HIGH 1
// Pull up/down/none
#define PUD_OFF 0
#define PUD_DOWN 1
#define PUD_UP 2
// Interrupt levels
#define INT_EDGE_SETUP 0
#define INT_EDGE_FALLING 1
#define INT_EDGE_RISING 2
#define INT_EDGE_BOTH 3
// Module names
#define AML_MODULE_I2C "aml_i2c"
// Threads
#define PI_THREAD(X) void *X (UNU void *dummy)
// Failure modes
#define WPI_FATAL (1==1)
#define WPI_ALMOST (1==2)
extern const char *piModelNames [16];
extern const char *piRevisionNames [16];
extern const char *piMakerNames [16];
extern const int piMemorySize [ 8];
/*----------------------------------------------------------------------------*/
#define PAGE_SIZE (4*1024)
#define BLOCK_SIZE (4*1024)
/*----------------------------------------------------------------------------*/
/* Debug message display function */
/*----------------------------------------------------------------------------*/
#define MSG_ERR -1
#define MSG_WARN -2
/*----------------------------------------------------------------------------*/
struct libodroid
{
/* H/W model info */
int model, rev, mem, maker;
/* wiringPi init Mode */
int mode;
/* wiringPi core func */
int (*getModeToGpio) (int mode, int pin);
void (*setPadDrive) (int pin, int value);
int (*getPadDrive) (int pin);
void (*pinMode) (int pin, int mode);
int (*getAlt) (int pin);
int (*getPUPD) (int pin);
void (*pullUpDnControl) (int pin, int pud);
int (*digitalRead) (int pin);
void (*digitalWrite) (int pin, int value);
int (*analogRead) (int pin);
void (*digitalWriteByte) (const int value);
unsigned int (*digitalReadByte) (void);
/* ISR Function pointer */
void (*isrFunctions[256])(void);
/* GPIO sysfs file discripter */
int sysFds[256];
/* GPIO pin base number */
int pinBase;
// Time for easy calculations
uint64_t epochMilli, epochMicro ;
};
union reg_bitfield {
unsigned int wvalue;
struct {
unsigned int bit0 : 1;
unsigned int bit1 : 1;
unsigned int bit2 : 1;
unsigned int bit3 : 1;
unsigned int bit4 : 1;
unsigned int bit5 : 1;
unsigned int bit6 : 1;
unsigned int bit7 : 1;
unsigned int bit8 : 1;
unsigned int bit9 : 1;
unsigned int bit10 : 1;
unsigned int bit11 : 1;
unsigned int bit12 : 1;
unsigned int bit13 : 1;
unsigned int bit14 : 1;
unsigned int bit15 : 1;
unsigned int bit16 : 1;
unsigned int bit17 : 1;
unsigned int bit18 : 1;
unsigned int bit19 : 1;
unsigned int bit20 : 1;
unsigned int bit21 : 1;
unsigned int bit22 : 1;
unsigned int bit23 : 1;
unsigned int bit24 : 1;
unsigned int bit25 : 1;
unsigned int bit26 : 1;
unsigned int bit27 : 1;
unsigned int bit28 : 1;
unsigned int bit29 : 1;
unsigned int bit30 : 1;
unsigned int bit31 : 1;
} bits;
};
/*----------------------------------------------------------------------------*/
// wiringPiNodeStruct:
// This describes additional device nodes in the extended wiringPi
// 2.0 scheme of things.
// It's a simple linked list for now, but will hopefully migrate to
// a binary tree for efficiency reasons - but then again, the chances
// of more than 1 or 2 devices being added are fairly slim, so who
// knows....
/*----------------------------------------------------------------------------*/
struct wiringPiNodeStruct
{
int pinBase;
int pinMax;
int fd; // Node specific
unsigned int data0; // ditto
unsigned int data1; // ditto
unsigned int data2; // ditto
unsigned int data3; // ditto
void (*pinMode) (struct wiringPiNodeStruct *node, int pin, int mode);
void (*pullUpDnControl) (struct wiringPiNodeStruct *node, int pin, int mode);
int (*digitalRead) (struct wiringPiNodeStruct *node, int pin);
// unsigned int (*digitalRead8) (struct wiringPiNodeStruct *node, int pin);
void (*digitalWrite) (struct wiringPiNodeStruct *node, int pin, int value);
// void (*digitalWrite8) (struct wiringPiNodeStruct *node, int pin, int value);
void (*pwmWrite) (struct wiringPiNodeStruct *node, int pin, int value);
int (*analogRead) (struct wiringPiNodeStruct *node, int pin);
void (*analogWrite) (struct wiringPiNodeStruct *node, int pin, int value);
struct wiringPiNodeStruct *next;
};
extern struct wiringPiNodeStruct *wiringPiNodes;
/*----------------------------------------------------------------------------*/
// Function prototypes
// c++ wrappers thanks to a comment by Nick Lott
// (and others on the Raspberry Pi forums)
/*----------------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
extern struct wiringPiNodeStruct *wiringPiFindNode (int pin);
extern struct wiringPiNodeStruct *wiringPiNewNode (int pinBase, int numPins);
// Internal WiringPi functions
extern int wiringPiFailure (int fatal, const char *message, ...);
extern int msg (int type, const char *message, ...);
extern int moduleLoaded (char *);
// Core WiringPi functions
extern void wiringPiVersion (int *major, int *minor);
extern int wiringPiSetup (void);
extern int wiringPiSetupSys (void);
extern int wiringPiSetupGpio (void);
extern int wiringPiSetupPhys (void);
extern int getModeToGpio (int wpiPin);
extern void setPadDrive (int pin, int value);
extern int getPadDrive (int pin);
extern int getAlt (int pin);
extern int getPUPD (int pin);
extern void pinMode (int pin, int mode);
extern void pullUpDnControl (int pin, int pud);
extern int digitalRead (int pin);
extern void digitalWrite (int pin, int value);
extern unsigned int digitalReadByte (void);
extern void digitalWriteByte (const int value);
extern void pwmWrite (int pin, int value);
extern int analogRead (int pin);
// Hardware specific stuffs
extern int piGpioLayout (void);
extern int piBoardRev (void); // Deprecated
extern void piBoardId (int *model, int *rev, int *mem, int *maker, int *warranty);
extern int wpiPinToGpio (int wpiPin);
extern int physPinToGpio (int physPin);
// Unsupported
extern void pinModeAlt (int pin, int mode);
extern void analogWrite (int pin, int value);
extern void pwmToneWrite (int pin, int freq);
extern void pwmSetMode (int mode);
extern void pwmSetRange (unsigned int range);
extern void pwmSetClock (int divisor);
extern void gpioClockSet (int pin, int freq);
extern unsigned int digitalReadByte (void);
extern unsigned int digitalReadByte2 (void);
extern void digitalWriteByte (int value);
extern void digitalWriteByte2 (int value);
// Interrupt
extern int waitForInterrupt (int pin, int mS);
extern int wiringPiISR (int pin, int mode, void (*function)(void));
// Threads
extern int piThreadCreate (void *(*fn)(void *));
extern void piLock (int key);
extern void piUnlock (int key);
// Schedulling priority
extern int piHiPri (const int pri);
// From Arduino land
extern void delay (unsigned int howLong);
extern void delayMicroseconds (unsigned int howLong);
extern unsigned int millis (void);
extern unsigned int micros (void);
#ifdef __cplusplus
}
#endif
/*----------------------------------------------------------------------------*/
#endif /* __WIRING_H__ */
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/

View File

@@ -1 +0,0 @@
wiringOdroidI2C.h

42
wiringPi/wiringPiI2C.h Normal file
View File

@@ -0,0 +1,42 @@
/*
* wiringPiI2C.h:
* Simplified I2C access routines
* Copyright (c) 2013 Gordon Henderson
***********************************************************************
* This file is part of wiringPi:
* https://projects.drogon.net/raspberry-pi/wiringpi/
*
* wiringPi is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* wiringPi is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with wiringPi.
* If not, see <http://www.gnu.org/licenses/>.
***********************************************************************
*/
#ifdef __cplusplus
extern "C" {
#endif
extern int wiringPiI2CRead (int fd) ;
extern int wiringPiI2CReadReg8 (int fd, int reg) ;
extern int wiringPiI2CReadReg16 (int fd, int reg) ;
extern int wiringPiI2CWrite (int fd, int data) ;
extern int wiringPiI2CWriteReg8 (int fd, int reg, int data) ;
extern int wiringPiI2CWriteReg16 (int fd, int reg, int data) ;
extern int wiringPiI2CSetupInterface (const char *device, int devId) ;
extern int wiringPiI2CSetup (const int devId) ;
#ifdef __cplusplus
}
#endif

View File

@@ -1 +0,0 @@
wiringOdroidSPI.h

36
wiringPi/wiringPiSPI.h Normal file
View File

@@ -0,0 +1,36 @@
/*
* wiringPiSPI.h:
* Simplified SPI access routines
* Copyright (c) 2012-2015 Gordon Henderson
***********************************************************************
* This file is part of wiringPi:
* https://projects.drogon.net/raspberry-pi/wiringpi/
*
* wiringPi is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* wiringPi is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with wiringPi.
* If not, see <http://www.gnu.org/licenses/>.
***********************************************************************
*/
#ifdef __cplusplus
extern "C" {
#endif
int wiringPiSPIGetFd (int channel) ;
int wiringPiSPIDataRW (int channel, unsigned char *data, int len) ;
int wiringPiSPISetupMode (int channel, int speed, int mode) ;
int wiringPiSPISetup (int channel, int speed) ;
#ifdef __cplusplus
}
#endif