mirror of
https://github.com/clockworkpi/WiringPi.git
synced 2026-03-21 19:32:40 +01:00
apply a06 patch
This commit is contained in:
12
gpio/CPi.h
Normal file
12
gpio/CPi.h
Normal file
@@ -0,0 +1,12 @@
|
||||
#ifndef _CPI_H_
|
||||
#define _CPI_H_
|
||||
|
||||
extern int wiringPiSetupRaw (void);
|
||||
extern void CPiBoardId (int *model, int *rev, int *mem, int *maker, int *warranty);
|
||||
extern int CPi_get_gpio_mode(int pin);
|
||||
extern int CPi_digitalRead(int pin);
|
||||
extern void CPi_digitalWrite(int pin, int value);
|
||||
extern void CPiReadAll(void);
|
||||
extern void CPiReadAllRaw(void);
|
||||
|
||||
#endif
|
||||
141
gpio/CPi_readall.c
Executable file
141
gpio/CPi_readall.c
Executable file
@@ -0,0 +1,141 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <wiringPi.h>
|
||||
#include "CPi.h"
|
||||
|
||||
#ifdef CONFIG_CLOCKWORKPI_A04
|
||||
|
||||
int bcmToGpioCPi[64] =
|
||||
{
|
||||
106, 107, // 0, 1
|
||||
104, 10, // 2, 3
|
||||
3, 9, // 4 5
|
||||
4, 90, // 6, 7
|
||||
92, 158, // 8, 9
|
||||
156, 105, //10,11
|
||||
146, 150, //12,13
|
||||
81, 80, //14,15
|
||||
|
||||
82, 83, //16,17
|
||||
131, 132, //18,19
|
||||
134, 135, //20,21
|
||||
89, 88, //22,23
|
||||
84, 85, //24,25
|
||||
86, 87, //26,27
|
||||
112, 113, //28,29
|
||||
109, 157, //30,31
|
||||
|
||||
148, 147, //32,33
|
||||
100, 101, //34,35
|
||||
102, 103, //36,37
|
||||
97, 98, //38,39
|
||||
99, 96, //40,41
|
||||
110, 111, //42,43
|
||||
64, 65, //44,45
|
||||
-1, -1, //46,47
|
||||
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,// ... 63
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CLOCKWORKPI_A06
|
||||
|
||||
int bcmToGpioCPi[64] =
|
||||
{
|
||||
106, 107, // 0, 1
|
||||
104, 10, // 2, 3
|
||||
3, 9, // 4 5
|
||||
4, 90, // 6, 7
|
||||
92, 158, // 8, 9
|
||||
156, 105, //10,11
|
||||
146, 150, //12,13
|
||||
81, 80, //14,15
|
||||
|
||||
82, 83, //16,17
|
||||
131, 132, //18,19
|
||||
134, 135, //20,21
|
||||
89, 88, //22,23
|
||||
84, 85, //24,25
|
||||
86, 87, //26,27
|
||||
112, 113, //28,29
|
||||
109, 157, //30,31
|
||||
|
||||
148, 147, //32,33
|
||||
100, 101, //34,35
|
||||
102, 103, //36,37
|
||||
97, 98, //38,39
|
||||
99, 96, //40,41
|
||||
110, 111, //42,43
|
||||
64, 65, //44,45
|
||||
-1, -1, //46,47
|
||||
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,// ... 63
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
static char *alts [] =
|
||||
{
|
||||
"IN", "OUT", "ALT2", "ALT3", "ALT4", "ALT5", "ALT6", "OFF"
|
||||
} ;
|
||||
|
||||
void CPiReadAll(void)
|
||||
{
|
||||
int pin, pin2;
|
||||
int tmp = wiringPiDebug;
|
||||
wiringPiDebug = FALSE;
|
||||
|
||||
printf (" +-----+------+------+---+-----+------+------+---+\n");
|
||||
printf (" | BCM | GPIO | Mode | V | BCM | GPIO | Mode | V |\n");
|
||||
printf (" +-----+------+------+---+-----+------+------+---+\n");
|
||||
|
||||
for (pin = 0 ; pin < 23; pin ++) {
|
||||
printf (" | %3d", pin);
|
||||
printf (" | %4d", bcmToGpioCPi[pin]);
|
||||
printf (" | %4s", alts [CPi_get_gpio_mode(bcmToGpioCPi[pin])]);
|
||||
printf (" | %d", CPi_digitalRead(bcmToGpioCPi[pin])) ;
|
||||
pin2 = pin + 23;
|
||||
printf (" | %3d", pin2);
|
||||
printf (" | %4d", bcmToGpioCPi[pin2]);
|
||||
printf (" | %4s", alts [CPi_get_gpio_mode(bcmToGpioCPi[pin2])]);
|
||||
printf (" | %d", CPi_digitalRead(bcmToGpioCPi[pin2])) ;
|
||||
printf (" |\n") ;
|
||||
}
|
||||
|
||||
printf (" +-----+------+------+---+-----+------+------+---+\n");
|
||||
printf (" | BCM | GPIO | Mode | V | BCM | GPIO | Mode | V |\n");
|
||||
printf (" +-----+------+------+---+-----+------+------+---+\n");
|
||||
|
||||
wiringPiDebug = tmp;
|
||||
}
|
||||
|
||||
void CPiReadAllRaw(void)
|
||||
{
|
||||
int pin, pin2, i;
|
||||
int tmp = wiringPiDebug;
|
||||
wiringPiDebug = FALSE;
|
||||
|
||||
printf (" +------+------+---+------+------+---+------+------+---+------+------+---+------+------+---+\n");
|
||||
printf (" | GPIO | Mode | V | GPIO | Mode | V | GPIO | Mode | V | GPIO | Mode | V | GPIO | Mode | V |\n");
|
||||
printf (" +------+------+---+------+------+---+------+------+---+------+------+---+------+------+---+\n");
|
||||
|
||||
for (pin = 0 ; pin < 32; pin++) {
|
||||
pin2 = pin;
|
||||
for(i = 0; i < 5; i++) {
|
||||
printf (" | %4d", pin2) ;
|
||||
printf (" | %4s", alts [CPi_get_gpio_mode(pin2)]) ;
|
||||
printf (" | %d", CPi_digitalRead(pin2)) ;
|
||||
pin2 += 32;
|
||||
}
|
||||
printf (" |\n") ;
|
||||
}
|
||||
|
||||
printf (" +------+------+---+------+------+---+------+------+---+------+------+---+------+------+---+\n");
|
||||
printf (" | GPIO | Mode | V | GPIO | Mode | V | GPIO | Mode | V | GPIO | Mode | V | GPIO | Mode | V |\n");
|
||||
printf (" +------+------+---+------+------+---+------+------+---+------+------+---+------+------+---+\n");
|
||||
|
||||
wiringPiDebug = tmp;
|
||||
}
|
||||
|
||||
@@ -39,10 +39,24 @@ CFLAGS = $(DEBUG) -Wall -Wextra $(INCLUDE) -Winline -pipe
|
||||
LDFLAGS = -L$(DESTDIR)$(PREFIX)/lib
|
||||
LIBS = -lwiringPi -lwiringPiDev -lpthread -lrt -lm -lcrypt
|
||||
|
||||
ifeq ($(BOARD),)
|
||||
BOARD = clockworkpi-a06-rk3399
|
||||
endif
|
||||
|
||||
ifeq ($(BOARD), clockworkpi-a04-h6)
|
||||
EXTRA_CFLAGS = -DCONFIG_CLOCKWORKPI_A04
|
||||
endif
|
||||
|
||||
ifeq ($(BOARD), clockworkpi-a06-rk3399)
|
||||
EXTRA_CFLAGS = -DCONFIG_CLOCKWORKPI_A06
|
||||
endif
|
||||
|
||||
EXTRA_CFLAGS += -DCONFIG_CLOCKWORKPI
|
||||
|
||||
# May not need to alter anything below this line
|
||||
###############################################################################
|
||||
|
||||
SRC = gpio.c readall.c
|
||||
SRC = gpio.c readall.c CPi_readall.c
|
||||
|
||||
OBJ = $(SRC:.c=.o)
|
||||
|
||||
@@ -57,7 +71,7 @@ gpio: $(OBJ)
|
||||
|
||||
.c.o:
|
||||
$Q echo [Compile] $<
|
||||
$Q $(CC) -c $(CFLAGS) $< -o $@
|
||||
$Q $(CC) -c $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
|
||||
128
gpio/gpio.c
128
gpio/gpio.c
@@ -42,6 +42,10 @@
|
||||
|
||||
#include "../version.h"
|
||||
|
||||
#ifdef CONFIG_CLOCKWORKPI
|
||||
#include "CPi.h"
|
||||
#endif
|
||||
|
||||
extern int wiringPiDebug ;
|
||||
|
||||
// External functions I can't be bothered creating a separate .h file for:
|
||||
@@ -742,7 +746,18 @@ void doMode (int argc, char *argv [])
|
||||
pin = atoi (argv [2]) ;
|
||||
|
||||
mode = argv [3] ;
|
||||
|
||||
#ifdef CONFIG_CLOCKWORKPI
|
||||
if (strcasecmp (mode, "in") == 0) pinMode (pin, INPUT) ;
|
||||
else if (strcasecmp (mode, "input") == 0) pinMode (pin, INPUT) ;
|
||||
else if (strcasecmp (mode, "out") == 0) pinMode (pin, OUTPUT) ;
|
||||
else if (strcasecmp (mode, "output") == 0) pinMode (pin, OUTPUT) ;
|
||||
else if (strcasecmp (mode, "alt2") == 0) pinModeAlt (pin, 0b010) ;
|
||||
else if (strcasecmp (mode, "alt3") == 0) pinModeAlt (pin, 0b011) ;
|
||||
else if (strcasecmp (mode, "alt4") == 0) pinModeAlt (pin, 0b100) ;
|
||||
else if (strcasecmp (mode, "alt5") == 0) pinModeAlt (pin, 0b101) ;
|
||||
else if (strcasecmp (mode, "alt6") == 0) pinModeAlt (pin, 0b110) ;
|
||||
else if (strcasecmp (mode, "alt7") == 0) pinModeAlt (pin, 0b111) ;
|
||||
#else
|
||||
/**/ if (strcasecmp (mode, "in") == 0) pinMode (pin, INPUT) ;
|
||||
else if (strcasecmp (mode, "input") == 0) pinMode (pin, INPUT) ;
|
||||
else if (strcasecmp (mode, "out") == 0) pinMode (pin, OUTPUT) ;
|
||||
@@ -760,6 +775,7 @@ void doMode (int argc, char *argv [])
|
||||
else if (strcasecmp (mode, "alt3") == 0) pinModeAlt (pin, 0b111) ;
|
||||
else if (strcasecmp (mode, "alt4") == 0) pinModeAlt (pin, 0b011) ;
|
||||
else if (strcasecmp (mode, "alt5") == 0) pinModeAlt (pin, 0b010) ;
|
||||
#endif
|
||||
else
|
||||
{
|
||||
fprintf (stderr, "%s: Invalid mode: %s. Should be in/out/pwm/clock/up/down/tri\n", argv [1], mode) ;
|
||||
@@ -1299,6 +1315,90 @@ static void doVersion (char *argv [])
|
||||
printf (" * Root or sudo required for GPIO access.\n") ;
|
||||
}
|
||||
|
||||
static void doReadRaw (int argc, char *argv [])
|
||||
{
|
||||
#ifdef CONFIG_CLOCKWORKPI
|
||||
int pin, val ;
|
||||
|
||||
if (argc != 3) {
|
||||
fprintf (stderr, "Usage: %s readraw pin\n", argv [0]) ;
|
||||
exit (1) ;
|
||||
}
|
||||
|
||||
pin = atoi (argv [2]) ;
|
||||
val = CPi_digitalRead(pin);
|
||||
|
||||
printf ("%s\n", val == 0 ? "0" : "1") ;
|
||||
#endif
|
||||
}
|
||||
|
||||
static void doWriteRaw (int argc, char *argv [])
|
||||
{
|
||||
#ifdef CONFIG_CLOCKWORKPI
|
||||
int pin, val ;
|
||||
|
||||
if (argc != 4) {
|
||||
fprintf (stderr, "Usage: %s writeraw pin value\n", argv [0]) ;
|
||||
exit (1) ;
|
||||
}
|
||||
|
||||
pin = atoi (argv [2]) ;
|
||||
|
||||
if ((strcasecmp (argv [3], "up") == 0) || (strcasecmp (argv [3], "on") == 0))
|
||||
val = 1 ;
|
||||
else if ((strcasecmp (argv [3], "down") == 0) || (strcasecmp (argv [3], "off") == 0))
|
||||
val = 0 ;
|
||||
else
|
||||
val = atoi (argv [3]) ;
|
||||
|
||||
if (val == 0)
|
||||
CPi_digitalWrite (pin, LOW) ;
|
||||
else
|
||||
CPi_digitalWrite (pin, HIGH) ;
|
||||
#endif
|
||||
}
|
||||
|
||||
static void doModeRaw (int argc, char *argv [])
|
||||
{
|
||||
#ifdef CONFIG_CLOCKWORKPI
|
||||
int pin ;
|
||||
char *mode ;
|
||||
|
||||
if (argc != 4)
|
||||
{
|
||||
fprintf (stderr, "Usage: %s mode pin mode\n", argv [0]) ;
|
||||
exit (1) ;
|
||||
}
|
||||
wiringPiSetupRaw();
|
||||
|
||||
pin = atoi (argv [2]) ;
|
||||
|
||||
mode = argv [3] ;
|
||||
|
||||
/**/ if (strcasecmp (mode, "in") == 0) pinMode (pin, INPUT) ;
|
||||
else if (strcasecmp (mode, "input") == 0) pinMode (pin, INPUT) ;
|
||||
else if (strcasecmp (mode, "out") == 0) pinMode (pin, OUTPUT) ;
|
||||
else if (strcasecmp (mode, "output") == 0) pinMode (pin, OUTPUT) ;
|
||||
else if (strcasecmp (mode, "pwm") == 0) pinMode (pin, PWM_OUTPUT) ;
|
||||
else if (strcasecmp (mode, "pwmTone") == 0) pinMode (pin, PWM_TONE_OUTPUT) ;
|
||||
else if (strcasecmp (mode, "clock") == 0) pinMode (pin, GPIO_CLOCK) ;
|
||||
else if (strcasecmp (mode, "up") == 0) pullUpDnControl (pin, PUD_UP) ;
|
||||
else if (strcasecmp (mode, "down") == 0) pullUpDnControl (pin, PUD_DOWN) ;
|
||||
else if (strcasecmp (mode, "tri") == 0) pullUpDnControl (pin, PUD_OFF) ;
|
||||
else if (strcasecmp (mode, "off") == 0) pullUpDnControl (pin, PUD_OFF) ;
|
||||
else if (strcasecmp (mode, "alt2") == 0) pinModeAlt (pin, 0b010) ;
|
||||
else if (strcasecmp (mode, "alt3") == 0) pinModeAlt (pin, 0b011) ;
|
||||
else if (strcasecmp (mode, "alt4") == 0) pinModeAlt (pin, 0b100) ;
|
||||
else if (strcasecmp (mode, "alt5") == 0) pinModeAlt (pin, 0b101) ;
|
||||
else if (strcasecmp (mode, "alt6") == 0) pinModeAlt (pin, 0b110) ;
|
||||
else if (strcasecmp (mode, "alt7") == 0) pinModeAlt (pin, 0b111) ;
|
||||
else
|
||||
{
|
||||
fprintf (stderr, "%s: Invalid mode: %s. Should be in/out/pwm/clock/up/down/tri\n", argv [1], mode) ;
|
||||
exit (1) ;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* main:
|
||||
@@ -1376,7 +1476,7 @@ int main (int argc, char *argv [])
|
||||
fprintf (stderr, "%s: Must be root to run. Program should be suid root. This is an error.\n", argv [0]) ;
|
||||
exit (EXIT_FAILURE) ;
|
||||
}
|
||||
|
||||
#ifndef CONFIG_CLOCKWORKPI
|
||||
// Initial test for /sys/class/gpio operations:
|
||||
|
||||
/**/ if (strcasecmp (argv [1], "exports" ) == 0) { doExports (argc, argv) ; return 0 ; }
|
||||
@@ -1398,7 +1498,7 @@ int main (int argc, char *argv [])
|
||||
|
||||
if (strcasecmp (argv [1], "gbr" ) == 0) { doGbr (argc, argv) ; return 0 ; }
|
||||
if (strcasecmp (argv [1], "gbw" ) == 0) { doGbw (argc, argv) ; return 0 ; }
|
||||
|
||||
#endif
|
||||
// Check for allreadall command, force Gpio mode
|
||||
|
||||
if (strcasecmp (argv [1], "allreadall") == 0)
|
||||
@@ -1453,7 +1553,16 @@ int main (int argc, char *argv [])
|
||||
--argc ;
|
||||
wpMode = WPI_MODE_UNINITIALISED ;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CLOCKWORKPI
|
||||
else if (strcasecmp (argv [1], "-r") == 0)
|
||||
{
|
||||
wiringPiSetupRaw();
|
||||
for (i = 2 ; i < argc ; ++i)
|
||||
argv [i - 1] = argv [i] ;
|
||||
--argc ;
|
||||
wpMode = WPI_MODE_GPIO ;
|
||||
}
|
||||
#endif
|
||||
// Default to wiringPi mode
|
||||
|
||||
else
|
||||
@@ -1494,6 +1603,16 @@ int main (int argc, char *argv [])
|
||||
exit (EXIT_FAILURE) ;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CLOCKWORKPI
|
||||
/**/ if (strcasecmp (argv [1], "mode" ) == 0) doMode (argc, argv) ;
|
||||
else if (strcasecmp (argv [1], "moderaw" ) == 0) doModeRaw (argc, argv) ;
|
||||
else if (strcasecmp (argv [1], "read" ) == 0) doRead (argc, argv) ;
|
||||
else if (strcasecmp (argv [1], "readraw" ) == 0) doReadRaw (argc, argv) ;
|
||||
else if (strcasecmp (argv [1], "write" ) == 0) doWrite (argc, argv) ;
|
||||
else if (strcasecmp (argv [1], "writeraw" ) == 0) doWriteRaw (argc, argv) ;
|
||||
else if (strcasecmp (argv [1], "readall" ) == 0) CPiReadAll () ;
|
||||
else if (strcasecmp (argv [1], "readallraw" ) == 0) CPiReadAllRaw () ;
|
||||
#else
|
||||
// Core wiringPi functions
|
||||
|
||||
/**/ if (strcasecmp (argv [1], "mode" ) == 0) doMode (argc, argv) ;
|
||||
@@ -1528,6 +1647,7 @@ int main (int argc, char *argv [])
|
||||
else if (strcasecmp (argv [1], "rbd" ) == 0) doReadByte (argc, argv, FALSE) ;
|
||||
else if (strcasecmp (argv [1], "clock" ) == 0) doClock (argc, argv) ;
|
||||
else if (strcasecmp (argv [1], "wfi" ) == 0) doWfi (argc, argv) ;
|
||||
#endif
|
||||
else
|
||||
{
|
||||
fprintf (stderr, "%s: Unknown command: %s.\n", argv [0], argv [1]) ;
|
||||
|
||||
@@ -35,6 +35,10 @@
|
||||
|
||||
#include <wiringPi.h>
|
||||
|
||||
#ifdef CONFIG_CLOCKWORKPI
|
||||
#include "CPi.h"
|
||||
#endif
|
||||
|
||||
extern int wpMode ;
|
||||
|
||||
#ifndef TRUE
|
||||
@@ -341,7 +345,9 @@ static void piPlusReadall (int model)
|
||||
void doReadall (void)
|
||||
{
|
||||
int model, rev, mem, maker, overVolted ;
|
||||
|
||||
#ifdef CONFIG_CLOCKWORKPI
|
||||
CPiReadAll();
|
||||
#else
|
||||
if (wiringPiNodes != NULL) // External readall
|
||||
{
|
||||
doReadallExternal () ;
|
||||
@@ -362,6 +368,7 @@ void doReadall (void)
|
||||
allReadall () ;
|
||||
else
|
||||
printf ("Oops - unable to determine board type... model: %d\n", model) ;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user