add support for NanoPi-Duo2
This commit is contained in:
parent
6a608ee8ab
commit
9a6860b4bd
|
@ -1,4 +1,5 @@
|
||||||
*.o
|
*.o
|
||||||
|
/gpio/gpio
|
||||||
libwiringPiDev.so.2.0
|
libwiringPiDev.so.2.0
|
||||||
libwiringPi.so.2.0
|
libwiringPi.so.2.0
|
||||||
/test/
|
/test/
|
||||||
|
|
|
@ -5,6 +5,7 @@ Currently supported boards:
|
||||||
NanoPi Neo
|
NanoPi Neo
|
||||||
NanoPi Neo Air
|
NanoPi Neo Air
|
||||||
NanoPi Duo
|
NanoPi Duo
|
||||||
|
NanoPi Duo2
|
||||||
NanoPi NEO2
|
NanoPi NEO2
|
||||||
NanoPi NEO Plus2
|
NanoPi NEO Plus2
|
||||||
NanoPi M1
|
NanoPi M1
|
||||||
|
|
|
@ -1130,11 +1130,10 @@ int main (int argc, char *argv [])
|
||||||
printf ("\n") ;
|
printf ("\n") ;
|
||||||
|
|
||||||
BoardHardwareInfo* retBoardInfo;
|
BoardHardwareInfo* retBoardInfo;
|
||||||
int boardId;
|
int ret = getBoardType(&retBoardInfo);
|
||||||
boardId = getBoardType(&retBoardInfo);
|
if (ret >= 0) {
|
||||||
if (boardId >= 0) {
|
if (retBoardInfo->boardTypeId > ALLWINNER_BASE && retBoardInfo->boardTypeId <= ALLWINNER_MAX
|
||||||
if (boardId > ALLWINNER_BASE && boardId <= ALLWINNER_MAX
|
&& retBoardInfo->boardTypeId != NanoPi_A64) {
|
||||||
&& boardId != NanoPi_A64) {
|
|
||||||
printf ("NanoPi Details:\n") ;
|
printf ("NanoPi Details:\n") ;
|
||||||
printf (" Type: %s, Revision: %d, Maker: FriednlyELEC\n\n",
|
printf (" Type: %s, Revision: %d, Maker: FriednlyELEC\n\n",
|
||||||
retBoardInfo->boardDisplayName, retBoardInfo->kernelRevision) ;
|
retBoardInfo->boardDisplayName, retBoardInfo->kernelRevision) ;
|
||||||
|
|
259
gpio/readall.c
259
gpio/readall.c
|
@ -42,6 +42,8 @@ extern int wpMode ;
|
||||||
# define FALSE (1==2)
|
# define FALSE (1==2)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define DEBUG_READALL 0
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* doReadallExternal:
|
* doReadallExternal:
|
||||||
* A relatively crude way to read the pins on an external device.
|
* A relatively crude way to read the pins on an external device.
|
||||||
|
@ -252,7 +254,7 @@ static int physToWpi_duo [MAX_PIN_COUNT] =
|
||||||
0, -1, //17, 18
|
0, -1, //17, 18
|
||||||
2, -1, //19, 20
|
2, -1, //19, 20
|
||||||
3, 16, //21, 22
|
3, 16, //21, 22
|
||||||
12, -1, //23, 24
|
12, 18, //23, 24
|
||||||
|
|
||||||
13, -1, //25, 26
|
13, -1, //25, 26
|
||||||
-1, -1, //27, 28
|
-1, -1, //27, 28
|
||||||
|
@ -287,7 +289,7 @@ static char *physNames_duo [MAX_PIN_COUNT] =
|
||||||
" GPIOA16", "USB-DP3 ",
|
" GPIOA16", "USB-DP3 ",
|
||||||
" GPIOA14", "USB-DM3 ",
|
" GPIOA14", "USB-DM3 ",
|
||||||
" GPIOA13", "GPIOG11 ",
|
" GPIOA13", "GPIOG11 ",
|
||||||
" GPIOA12", "IR-RX ",
|
" GPIOA12", "GPIOL11 ",
|
||||||
" GPIOA11", "0v ", //25, 26
|
" GPIOA11", "0v ", //25, 26
|
||||||
" 0v", "3.3v ",
|
" 0v", "3.3v ",
|
||||||
" GPIOA4", "5v ",
|
" GPIOA4", "5v ",
|
||||||
|
@ -320,6 +322,91 @@ static char *physNames_duo [MAX_PIN_COUNT] =
|
||||||
NULL //73
|
NULL //73
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
static int physToWpi_duo2 [MAX_PIN_COUNT] =
|
||||||
|
{
|
||||||
|
-1, // 0
|
||||||
|
-1, 15, // 1, 2
|
||||||
|
-1, 14, // 3, 4
|
||||||
|
-1, -1, // 5, 6
|
||||||
|
-1, 13, // 7, 8
|
||||||
|
|
||||||
|
18, 12, // 9, 10
|
||||||
|
16, 3, //11, 12
|
||||||
|
-1, 2, //13, 14
|
||||||
|
-1, 0, //15, 16
|
||||||
|
-1, 7, //17, 18
|
||||||
|
-1, 9, //19, 20
|
||||||
|
-1, 8, //21, 22
|
||||||
|
-1, -1, //23, 24
|
||||||
|
|
||||||
|
-1, -1, //25, 26
|
||||||
|
-1, -1, //27, 28
|
||||||
|
-1, -1, //29, 30
|
||||||
|
-1, -1, //31, 32
|
||||||
|
|
||||||
|
|
||||||
|
/* ---------nanopi duo end----------- */
|
||||||
|
-1, -1, //33, 34
|
||||||
|
-1, -1, //35, 36
|
||||||
|
|
||||||
|
-1, -1, //37, 38
|
||||||
|
|
||||||
|
/* 39~63 */
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
|
||||||
|
/* 64~73 */
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
} ;
|
||||||
|
|
||||||
|
static char *physNames_duo2 [MAX_PIN_COUNT] =
|
||||||
|
{
|
||||||
|
NULL,
|
||||||
|
// 32 Pin
|
||||||
|
" 5v", "GPIOA5 ",
|
||||||
|
" 5v", "GPIOA4 ",
|
||||||
|
" 3.3v", "0v ",
|
||||||
|
" 0v", "GPIOA11 ",
|
||||||
|
" GPIOL11", "GPIOA12 ",
|
||||||
|
" GPIOG11", "GPIOA13 ",
|
||||||
|
" USB-DM3", "GPIOA14 ", //13, 14
|
||||||
|
" USB-DP3", "GPIOA16 ",
|
||||||
|
" USB-DM2", "GPIOA15 ",
|
||||||
|
" USB-DP2", "GPIOG7 ",
|
||||||
|
" EPhyRXN", "GPIOG6 ",
|
||||||
|
" EPhyRXP", "CVBS ",
|
||||||
|
" EPhyTXN", "LineOutL", //25, 26
|
||||||
|
" EPhyTXP", "LineOutR",
|
||||||
|
"EPhyLinK", "MIC_P ",
|
||||||
|
" EPhySPD", "MIC_N ",
|
||||||
|
|
||||||
|
/* ---------nanopi duo end----------- */
|
||||||
|
NULL, NULL,
|
||||||
|
NULL, NULL,
|
||||||
|
|
||||||
|
/* UART0, tx, rx */
|
||||||
|
NULL, NULL,
|
||||||
|
|
||||||
|
NULL, NULL, //39, 40
|
||||||
|
NULL, NULL,
|
||||||
|
NULL, NULL,
|
||||||
|
NULL, NULL,
|
||||||
|
NULL, NULL,
|
||||||
|
NULL, NULL, //49, 50
|
||||||
|
NULL, NULL,
|
||||||
|
NULL, NULL,
|
||||||
|
NULL, NULL,
|
||||||
|
NULL, NULL,
|
||||||
|
NULL, NULL, //59, 60
|
||||||
|
NULL, NULL,
|
||||||
|
NULL, NULL,
|
||||||
|
NULL, NULL,
|
||||||
|
NULL, NULL,
|
||||||
|
NULL, NULL,
|
||||||
|
NULL, NULL, //71, 72
|
||||||
|
NULL //73
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
static int physToWpi_neocore [MAX_PIN_COUNT] =
|
static int physToWpi_neocore [MAX_PIN_COUNT] =
|
||||||
{
|
{
|
||||||
|
@ -425,22 +512,25 @@ static char *physNames_neocore [MAX_PIN_COUNT] =
|
||||||
*********************************************************************************
|
*********************************************************************************
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void readallPhys (int boardId, int physPin, int pair)
|
static void readallPhys (int faBoardId, int physPin, int pair)
|
||||||
{
|
{
|
||||||
int pin ;
|
int pin ;
|
||||||
int *physToWpi;
|
int *physToWpi;
|
||||||
char **physNames;
|
char **physNames;
|
||||||
|
|
||||||
if (boardId == NanoPi_M1 || boardId == NanoPi_K1_Plus || boardId == NanoPi_M1_Plus || boardId == NanoPi_M1_Plus2) {
|
if (faBoardId == NanoPi_M1 || faBoardId == NanoPi_K1_Plus || faBoardId == NanoPi_M1_Plus || faBoardId == NanoPi_M1_Plus2) {
|
||||||
physToWpi = physToWpi_m1;
|
physToWpi = physToWpi_m1;
|
||||||
physNames = physNames_m1;
|
physNames = physNames_m1;
|
||||||
} else if (boardId == NanoPi_NEO || boardId == NanoPi_NEO_Air || boardId == NanoPi_NEO2 || boardId == NanoPi_NEO_Plus2) {
|
} else if (faBoardId == NanoPi_NEO || faBoardId == NanoPi_NEO_Air || faBoardId == NanoPi_NEO2 || faBoardId == NanoPi_NEO_Plus2) {
|
||||||
physToWpi = physToWpi_neo;
|
physToWpi = physToWpi_neo;
|
||||||
physNames = physNames_neo;
|
physNames = physNames_neo;
|
||||||
} else if (boardId == NanoPi_Duo) {
|
} else if (faBoardId == NanoPi_Duo) {
|
||||||
physToWpi = physToWpi_duo;
|
physToWpi = physToWpi_duo;
|
||||||
physNames = physNames_duo;
|
physNames = physNames_duo;
|
||||||
} else if (boardId == NanoPi_NEO_Core || boardId == NanoPi_NEO_Core2) {
|
} else if (faBoardId == NanoPi_Duo2) {
|
||||||
|
physToWpi = physToWpi_duo2;
|
||||||
|
physNames = physNames_duo2;
|
||||||
|
} else if (faBoardId == NanoPi_NEO_Core || faBoardId == NanoPi_NEO_Core2) {
|
||||||
physToWpi = physToWpi_neocore;
|
physToWpi = physToWpi_neocore;
|
||||||
physNames = physNames_neocore;
|
physNames = physNames_neocore;
|
||||||
} else {
|
} else {
|
||||||
|
@ -469,8 +559,14 @@ static void readallPhys (int boardId, int physPin, int pair)
|
||||||
pin = physToWpi [physPin] ;
|
pin = physToWpi [physPin] ;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf (" | %4s", alts [getAlt (pin)]) ;
|
int alt = getAltSilence (pin);
|
||||||
printf (" | %d", digitalRead (pin)) ;
|
if (alt >= 0) {
|
||||||
|
printf (" | %4s", alts [alt]) ;
|
||||||
|
} else {
|
||||||
|
printf (" | ") ;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf (" | %d", digitalReadSilence (pin)) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pin numbers:
|
// Pin numbers:
|
||||||
|
@ -502,8 +598,13 @@ static void readallPhys (int boardId, int physPin, int pair)
|
||||||
pin = physToWpi [physPin] ;
|
pin = physToWpi [physPin] ;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf (" | %d", digitalRead (pin)) ;
|
printf (" | %d", digitalReadSilence (pin)) ;
|
||||||
printf (" | %-4s", alts [getAlt (pin)]) ;
|
int alt = getAltSilence (pin);
|
||||||
|
if (alt >= 0) {
|
||||||
|
printf (" | %4s", alts [alt]) ;
|
||||||
|
} else {
|
||||||
|
printf (" | ") ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
printf (" | %-5s", physNames [physPin]) ;
|
printf (" | %-5s", physNames [physPin]) ;
|
||||||
|
@ -516,18 +617,68 @@ static void readallPhys (int boardId, int physPin, int pair)
|
||||||
printf (" |\n") ;
|
printf (" |\n") ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void debugReadallPhys (int faBoardId, int physPin)
|
||||||
|
{
|
||||||
|
int pin ;
|
||||||
|
int *physToWpi;
|
||||||
|
char **physNames;
|
||||||
|
|
||||||
|
if (faBoardId == NanoPi_M1 || faBoardId == NanoPi_K1_Plus || faBoardId == NanoPi_M1_Plus || faBoardId == NanoPi_M1_Plus2) {
|
||||||
|
physToWpi = physToWpi_m1;
|
||||||
|
physNames = physNames_m1;
|
||||||
|
} else if (faBoardId == NanoPi_NEO || faBoardId == NanoPi_NEO_Air || faBoardId == NanoPi_NEO2 || faBoardId == NanoPi_NEO_Plus2) {
|
||||||
|
physToWpi = physToWpi_neo;
|
||||||
|
physNames = physNames_neo;
|
||||||
|
} else if (faBoardId == NanoPi_Duo) {
|
||||||
|
physToWpi = physToWpi_duo;
|
||||||
|
physNames = physNames_duo;
|
||||||
|
} else if (faBoardId == NanoPi_Duo2) {
|
||||||
|
physToWpi = physToWpi_duo2;
|
||||||
|
physNames = physNames_duo2;
|
||||||
|
} else if (faBoardId == NanoPi_NEO_Core || faBoardId == NanoPi_NEO_Core2) {
|
||||||
|
physToWpi = physToWpi_neocore;
|
||||||
|
physNames = physNames_neocore;
|
||||||
|
} else {
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("## physPin: %d, %s\n", physPin, physNames [physPin]);
|
||||||
|
if (physPinToGpio (physPin) == -1)
|
||||||
|
printf("\tnot gpio\n");
|
||||||
|
else
|
||||||
|
printf("\tphysPinToGpio=%d, physToWpi=%d\n", physPinToGpio (physPin), physToWpi [physPin]);
|
||||||
|
|
||||||
|
if (physToWpi [physPin] == -1) {
|
||||||
|
printf("\t\tnot Wpi pin\n");
|
||||||
|
} else {
|
||||||
|
if (wpMode == WPI_MODE_GPIO) {
|
||||||
|
pin = physPinToGpio (physPin) ;
|
||||||
|
printf("\t\tWPI_MODE_GPIO, physPinToGpio (physPin) = %d\n", pin);
|
||||||
|
} else if (wpMode == WPI_MODE_PHYS) {
|
||||||
|
pin = physPin ;
|
||||||
|
printf("\t\tWPI_MODE_PHYS, pin = physPin = %d\n", pin);
|
||||||
|
} else {
|
||||||
|
printf("\t\tUnknow Mode, physPin=%d, physToWpi [physPin] =%d\n", physPin, physToWpi [physPin]);
|
||||||
|
pin = physToWpi [physPin] ;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf ("\t\t\talts = %4s\n", alts [getAltSilence (pin)]) ;
|
||||||
|
printf ("\t\t\tdigitalRead = %d\n", digitalReadSilence (pin)) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void NanoPiReadAll()
|
void NanoPiReadAll()
|
||||||
{
|
{
|
||||||
int pin ;
|
int pin ;
|
||||||
BoardHardwareInfo* retBoardInfo;
|
BoardHardwareInfo* retBoardInfo;
|
||||||
int boardId;
|
int ret = getBoardType(&retBoardInfo);
|
||||||
boardId = getBoardType(&retBoardInfo);
|
if (ret >= 0) {
|
||||||
if (boardId >= 0) {
|
if (retBoardInfo->boardTypeId > ALLWINNER_BASE
|
||||||
if (boardId > ALLWINNER_BASE && boardId <= ALLWINNER_MAX
|
&& retBoardInfo->boardTypeId <= ALLWINNER_MAX
|
||||||
&& boardId != NanoPi_A64) {
|
&& retBoardInfo->boardTypeId != NanoPi_A64) {
|
||||||
// nothing to do.
|
// nothing to do.
|
||||||
} else {
|
} else {
|
||||||
printf ("This NanoPi model is currently not supported. ") ;
|
printf ("This NanoPi model is currently not supported. \n") ;
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -538,19 +689,32 @@ void NanoPiReadAll()
|
||||||
}
|
}
|
||||||
|
|
||||||
int pinCount;
|
int pinCount;
|
||||||
if (boardId == NanoPi_M1 || boardId == NanoPi_K1_Plus || boardId == NanoPi_M1_Plus || boardId == NanoPi_M1_Plus2) {
|
if (retBoardInfo->boardTypeId == NanoPi_M1
|
||||||
|
|| retBoardInfo->boardTypeId == NanoPi_K1_Plus
|
||||||
|
|| retBoardInfo->boardTypeId == NanoPi_M1_Plus
|
||||||
|
|| retBoardInfo->boardTypeId == NanoPi_M1_Plus2) {
|
||||||
pinCount = 40;
|
pinCount = 40;
|
||||||
} else if (boardId == NanoPi_NEO
|
} else if (retBoardInfo->boardTypeId == NanoPi_NEO
|
||||||
|| boardId == NanoPi_NEO_Air
|
|| retBoardInfo->boardTypeId == NanoPi_NEO_Air
|
||||||
|| boardId == NanoPi_NEO2
|
|| retBoardInfo->boardTypeId == NanoPi_NEO2
|
||||||
|| boardId == NanoPi_NEO_Plus2
|
|| retBoardInfo->boardTypeId == NanoPi_NEO_Plus2
|
||||||
|| boardId == NanoPi_NEO_Core
|
|| retBoardInfo->boardTypeId == NanoPi_NEO_Core
|
||||||
|| boardId == NanoPi_NEO_Core2
|
|| retBoardInfo->boardTypeId == NanoPi_NEO_Core2
|
||||||
) {
|
) {
|
||||||
pinCount = 24;
|
pinCount = 24;
|
||||||
} else if (boardId == NanoPi_Duo) {
|
} else if (retBoardInfo->boardTypeId == NanoPi_Duo
|
||||||
|
|| retBoardInfo->boardTypeId == NanoPi_Duo2) {
|
||||||
pinCount = 32;
|
pinCount = 32;
|
||||||
} else {
|
} else {
|
||||||
|
printf ("This NanoPi model(id: %d) is currently not supported. \n", retBoardInfo->boardTypeId) ;
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DEBUG_READALL) {
|
||||||
|
printf (" +-----+-----+----------+------+---+-%s--+------+----------+-----+-----+\n", retBoardInfo->boardDisplayName) ;
|
||||||
|
for (pin = 1 ; pin <= pinCount ; pin++) {
|
||||||
|
debugReadallPhys (retBoardInfo->boardTypeId, pin) ;
|
||||||
|
}
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -559,34 +723,44 @@ void NanoPiReadAll()
|
||||||
printf (" | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |\n") ;
|
printf (" | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |\n") ;
|
||||||
printf (" +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+\n") ;
|
printf (" +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+\n") ;
|
||||||
for (pin = 1 ; pin <= pinCount ; pin += 2)
|
for (pin = 1 ; pin <= pinCount ; pin += 2)
|
||||||
readallPhys (boardId, pin, 1) ;
|
readallPhys (retBoardInfo->boardTypeId, pin, 1) ;
|
||||||
printf (" +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+\n") ;
|
printf (" +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+\n") ;
|
||||||
printf (" | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |\n") ;
|
printf (" | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |\n") ;
|
||||||
printf (" +-----+-----+----------+------+---+-%s--+------+----------+-----+-----+\n", retBoardInfo->boardDisplayName) ;
|
printf (" +-----+-----+----------+------+---+-%s--+------+----------+-----+-----+\n", retBoardInfo->boardDisplayName) ;
|
||||||
printf ("\n");
|
printf ("\n");
|
||||||
|
|
||||||
/* Print Second 1 ~ 12/24 pins */
|
/* Print Second 1 ~ 12/24 pins */
|
||||||
if (boardId == NanoPi_M1 || boardId == NanoPi_K1_Plus || boardId == NanoPi_M1_Plus || boardId == NanoPi_M1_Plus2) {
|
if (retBoardInfo->boardTypeId == NanoPi_M1
|
||||||
|
|| retBoardInfo->boardTypeId == NanoPi_K1_Plus
|
||||||
|
|| retBoardInfo->boardTypeId == NanoPi_M1_Plus
|
||||||
|
|| retBoardInfo->boardTypeId == NanoPi_M1_Plus2) {
|
||||||
// nothing to do.
|
// nothing to do.
|
||||||
} else if (boardId == NanoPi_NEO || boardId == NanoPi_NEO_Air || boardId == NanoPi_NEO2 || boardId == NanoPi_NEO_Plus2) {
|
} else if (retBoardInfo->boardTypeId == NanoPi_NEO
|
||||||
|
|| retBoardInfo->boardTypeId == NanoPi_NEO_Air
|
||||||
|
|| retBoardInfo->boardTypeId == NanoPi_NEO2
|
||||||
|
|| retBoardInfo->boardTypeId == NanoPi_NEO_Plus2) {
|
||||||
printf (" +-----+----%s USB/Audio-+----+\n", retBoardInfo->boardDisplayName) ;
|
printf (" +-----+----%s USB/Audio-+----+\n", retBoardInfo->boardDisplayName) ;
|
||||||
printf (" | BCM | wPi | Name | Mode | V | Ph |\n") ;
|
printf (" | BCM | wPi | Name | Mode | V | Ph |\n") ;
|
||||||
printf (" +-----+-----+----------+------+---+----+\n") ;
|
printf (" +-----+-----+----------+------+---+----+\n") ;
|
||||||
for (pin = 25 ; pin <= 36 ; pin++) {
|
for (pin = 25 ; pin <= 36 ; pin++) {
|
||||||
readallPhys (boardId, pin, 0) ;
|
readallPhys (retBoardInfo->boardTypeId, pin, 0) ;
|
||||||
}
|
}
|
||||||
printf (" +-----+-----+----------+------+---+----+\n") ;
|
printf (" +-----+-----+----------+------+---+----+\n") ;
|
||||||
printf ("\n");
|
printf ("\n");
|
||||||
} else if (boardId == NanoPi_Duo || boardId == NanoPi_NEO_Core || boardId == NanoPi_NEO_Core2) {
|
} else if (retBoardInfo->boardTypeId == NanoPi_Duo
|
||||||
|
|| retBoardInfo->boardTypeId == NanoPi_Duo2
|
||||||
|
|| retBoardInfo->boardTypeId == NanoPi_NEO_Core
|
||||||
|
|| retBoardInfo->boardTypeId == NanoPi_NEO_Core2) {
|
||||||
// nothing to do.
|
// nothing to do.
|
||||||
}
|
}
|
||||||
|
|
||||||
if (boardId == NanoPi_NEO_Core || boardId == NanoPi_NEO_Core2) {
|
if (retBoardInfo->boardTypeId == NanoPi_NEO_Core
|
||||||
|
|| retBoardInfo->boardTypeId == NanoPi_NEO_Core2) {
|
||||||
printf (" +-----+-----+----------+---- %s USB/Audio ----+----------+-----+-----+\n", retBoardInfo->boardDisplayName) ;
|
printf (" +-----+-----+----------+---- %s USB/Audio ----+----------+-----+-----+\n", retBoardInfo->boardDisplayName) ;
|
||||||
printf (" | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |\n") ;
|
printf (" | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |\n") ;
|
||||||
printf (" +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+\n") ;
|
printf (" +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+\n") ;
|
||||||
for (pin = 25 ; pin <= 48 ; pin += 2)
|
for (pin = 25 ; pin <= 48 ; pin += 2)
|
||||||
readallPhys (boardId, pin, 1) ;
|
readallPhys (retBoardInfo->boardTypeId, pin, 1) ;
|
||||||
printf (" +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+\n") ;
|
printf (" +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+\n") ;
|
||||||
printf (" | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |\n") ;
|
printf (" | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |\n") ;
|
||||||
printf (" +-----+-----+----------+------+---+-%s--+------+----------+-----+-----+\n", retBoardInfo->boardDisplayName) ;
|
printf (" +-----+-----+----------+------+---+-%s--+------+----------+-----+-----+\n", retBoardInfo->boardDisplayName) ;
|
||||||
|
@ -596,32 +770,41 @@ void NanoPiReadAll()
|
||||||
printf (" | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |\n") ;
|
printf (" | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |\n") ;
|
||||||
printf (" +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+\n") ;
|
printf (" +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+\n") ;
|
||||||
for (pin = 49 ; pin <= 68 ; pin += 2)
|
for (pin = 49 ; pin <= 68 ; pin += 2)
|
||||||
readallPhys (boardId, pin, 1) ;
|
readallPhys (retBoardInfo->boardTypeId, pin, 1) ;
|
||||||
printf (" +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+\n") ;
|
printf (" +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+\n") ;
|
||||||
printf (" | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |\n") ;
|
printf (" | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |\n") ;
|
||||||
printf (" +-----+-----+----------+------+---+-%s--+------+----------+-----+-----+\n", retBoardInfo->boardDisplayName) ;
|
printf (" +-----+-----+----------+------+---+-%s--+------+----------+-----+-----+\n", retBoardInfo->boardDisplayName) ;
|
||||||
printf ("\n");
|
printf ("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (boardId == NanoPi_M1 || boardId == NanoPi_K1_Plus || boardId == NanoPi_M1_Plus || boardId == NanoPi_M1_Plus2) {
|
if (retBoardInfo->boardTypeId == NanoPi_M1
|
||||||
|
|| retBoardInfo->boardTypeId == NanoPi_K1_Plus
|
||||||
|
|| retBoardInfo->boardTypeId == NanoPi_M1_Plus
|
||||||
|
|| retBoardInfo->boardTypeId == NanoPi_M1_Plus2) {
|
||||||
printf (" +-----+----%s Debug UART-+----+\n", retBoardInfo->boardDisplayName) ;
|
printf (" +-----+----%s Debug UART-+----+\n", retBoardInfo->boardDisplayName) ;
|
||||||
printf (" | BCM | wPi | Name | Mode | V | Ph |\n") ;
|
printf (" | BCM | wPi | Name | Mode | V | Ph |\n") ;
|
||||||
printf (" +-----+-----+----------+------+---+----+\n") ;
|
printf (" +-----+-----+----------+------+---+----+\n") ;
|
||||||
for (pin = 41 ; pin < 45 ; pin++) {
|
for (pin = 41 ; pin < 45 ; pin++) {
|
||||||
readallPhys (boardId, pin, 0) ;
|
readallPhys (retBoardInfo->boardTypeId, pin, 0) ;
|
||||||
}
|
}
|
||||||
printf (" +-----+-----+----------+------+---+----+\n") ;
|
printf (" +-----+-----+----------+------+---+----+\n") ;
|
||||||
printf ("\n");
|
printf ("\n");
|
||||||
} else if (boardId == NanoPi_NEO || boardId == NanoPi_NEO_Air || boardId == NanoPi_NEO2 || boardId == NanoPi_NEO_Plus2) {
|
} else if (retBoardInfo->boardTypeId == NanoPi_NEO
|
||||||
|
|| retBoardInfo->boardTypeId == NanoPi_NEO_Air
|
||||||
|
|| retBoardInfo->boardTypeId == NanoPi_NEO2
|
||||||
|
|| retBoardInfo->boardTypeId == NanoPi_NEO_Plus2) {
|
||||||
printf (" +-----+----%s Debug UART-+----+\n", retBoardInfo->boardDisplayName) ;
|
printf (" +-----+----%s Debug UART-+----+\n", retBoardInfo->boardDisplayName) ;
|
||||||
printf (" | BCM | wPi | Name | Mode | V | Ph |\n") ;
|
printf (" | BCM | wPi | Name | Mode | V | Ph |\n") ;
|
||||||
printf (" +-----+-----+----------+------+---+----+\n") ;
|
printf (" +-----+-----+----------+------+---+----+\n") ;
|
||||||
for (pin = 37 ; pin <= 38 ; pin++) {
|
for (pin = 37 ; pin <= 38 ; pin++) {
|
||||||
readallPhys (boardId, pin, 0) ;
|
readallPhys (retBoardInfo->boardTypeId, pin, 0) ;
|
||||||
}
|
}
|
||||||
printf (" +-----+-----+----------+------+---+----+\n") ;
|
printf (" +-----+-----+----------+------+---+----+\n") ;
|
||||||
printf ("\n");
|
printf ("\n");
|
||||||
} else if (boardId == NanoPi_Duo || boardId == NanoPi_NEO_Core || boardId == NanoPi_NEO_Core2) {
|
} else if (retBoardInfo->boardTypeId == NanoPi_Duo
|
||||||
|
|| retBoardInfo->boardTypeId == NanoPi_Duo2
|
||||||
|
|| retBoardInfo->boardTypeId == NanoPi_NEO_Core
|
||||||
|
|| retBoardInfo->boardTypeId == NanoPi_NEO_Core2) {
|
||||||
// nothing to do.
|
// nothing to do.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,159 +9,173 @@ const char* allwinner_tempfile = "/sys/class/thermal/thermal_zone0/temp";
|
||||||
#define LOGE printf
|
#define LOGE printf
|
||||||
|
|
||||||
BoardHardwareInfo gAllBoardHardwareInfo[] = {
|
BoardHardwareInfo gAllBoardHardwareInfo[] = {
|
||||||
{"MINI6410", -1, S3C6410_COMMON, "S3C6410_Board",""},
|
{"MINI6410", -1, S3C6410_COMMON, "S3C6410_Board",""},
|
||||||
{"MINI210", -1, S5PV210_COMMON, "S5PV210_Board",""},
|
{"MINI210", -1, S5PV210_COMMON, "S5PV210_Board",""},
|
||||||
{"TINY4412", -1, S5P4412_COMMON, "S5P4412_Board",""},
|
{"TINY4412", -1, S5P4412_COMMON, "S5P4412_Board",""},
|
||||||
{"mini2451", 0, S3C2451_COMMON, "S3C2451_Board", ""},
|
{"mini2451", 0, S3C2451_COMMON, "S3C2451_Board", ""},
|
||||||
|
|
||||||
//s5p4418
|
//s5p4418
|
||||||
{"nanopi2", 0, NanoPi2, "NanoPi2",""},
|
{"nanopi2", 0, NanoPi2, "NanoPi2",""},
|
||||||
{"nanopi2", 1, NanoPC_T2, "NanoPC-T2",""},
|
{"nanopi2", 1, NanoPC_T2, "NanoPC-T2",""},
|
||||||
{"nanopi2", 2, NanoPi_S2, "NanoPi-S2",""},
|
{"nanopi2", 2, NanoPi_S2, "NanoPi-S2",""},
|
||||||
{"nanopi2", 3, Smart4418, "Smart4418",""},
|
{"nanopi2", 3, Smart4418, "Smart4418",""},
|
||||||
{"nanopi2", 4, NanoPi2_Fire, "NanoPi2-Fire",""},
|
{"nanopi2", 4, NanoPi2_Fire, "NanoPi2-Fire",""},
|
||||||
{"nanopi2", 5, NanoPi_M2, "NanoPi-M2",""},
|
{"nanopi2", 5, NanoPi_M2, "NanoPi-M2",""},
|
||||||
{"nanopi2", 7, NanoPi_M2A, "NanoPi-M2A",""},
|
{"nanopi2", 7, NanoPi_M2A, "NanoPi-M2A",""},
|
||||||
{"nanopi2", 0x103, Smart4418SDK, "Smart4418SDK",""},
|
{"nanopi2", 0x103, Smart4418SDK, "Smart4418SDK",""},
|
||||||
|
|
||||||
//s5p6818
|
//s5p6818
|
||||||
{"nanopi3", 1, NanoPC_T3, "NanoPC-T3",""},
|
{"nanopi3", 1, NanoPC_T3, "NanoPC-T3",""},
|
||||||
{"nanopi3", 4, NanoPC_T3T, "NanoPC-T3T",""},
|
{"nanopi3", 2, NanoPi_M3B, "NanoPi-M3B",""},
|
||||||
{"nanopi3", 5, NanoPi_Fire3, "NanoPi-Fire3",""},
|
{"nanopi3", 3, Smart6818, "Smart6818",""},
|
||||||
{"nanopi3", 7, NanoPi_M3, "NanoPi-M3",""},
|
{"nanopi3", 4, NanoPC_T3T, "NanoPC-T3T",""},
|
||||||
|
{"nanopi3", 5, NanoPi_Fire3, "NanoPi-Fire3",""},
|
||||||
|
{"nanopi3", 7, NanoPi_M3, "NanoPi-M3",""},
|
||||||
|
|
||||||
//allwinner h3
|
//allwinner h3
|
||||||
// kernel 3.x
|
// kernel 3.x
|
||||||
{"sun8i", 0, NanoPi_M1, "NanoPi-M1", "0(0)"},
|
{"sun8i", 0, NanoPi_M1, "NanoPi-M1", "0(0)"},
|
||||||
{"sun8i", 0, NanoPi_NEO, "NanoPi-NEO", "1(0)"},
|
{"sun8i", 0, NanoPi_NEO, "NanoPi-NEO", "1(0)"},
|
||||||
{"sun8i", 0, NanoPi_NEO_Air, "NanoPi-NEO-Air", "2(0)"},
|
{"sun8i", 0, NanoPi_NEO_Air, "NanoPi-NEO-Air", "2(0)"},
|
||||||
{"sun8i", 0, NanoPi_M1_Plus, "NanoPi-M1-Plus", "3(0)"},
|
{"sun8i", 0, NanoPi_M1_Plus, "NanoPi-M1-Plus", "3(0)"},
|
||||||
{"sun8i", 0, NanoPi_Duo, "NanoPi-Duo", "4(0)"},
|
{"sun8i", 0, NanoPi_Duo, "NanoPi-Duo", "4(0)"},
|
||||||
{"sun8i", 0, NanoPi_NEO_Core, "NanoPi-NEO-Core", "5(0)"},
|
{"sun8i", 0, NanoPi_NEO_Core, "NanoPi-NEO-Core", "5(0)"},
|
||||||
{"sun8i", 0, NanoPi_K1, "NanoPi-K1", "6(0)"},
|
{"sun8i", 0, NanoPi_K1, "NanoPi-K1", "6(0)"},
|
||||||
// kernel 4.x
|
{"sun8i", 0, NanoPi_Hero, "NanoPi-Hero", "7(0)"},
|
||||||
{"Allwinnersun8iFamily", 0, NanoPi_M1, "NanoPi-M1", "0(0)"},
|
{"sun8i", 0, NanoPi_Duo2, "NanoPi-Duo2", "8(0)"},
|
||||||
{"Allwinnersun8iFamily", 0, NanoPi_NEO, "NanoPi-NEO", "1(0)"},
|
{"sun8i", 0, NanoPi_R1, "NanoPi-R1", "9(0)"},
|
||||||
{"Allwinnersun8iFamily", 0, NanoPi_NEO_Air, "NanoPi-NEO-Air", "2(0)"},
|
|
||||||
{"Allwinnersun8iFamily", 0, NanoPi_M1_Plus, "NanoPi-M1-Plus", "3(0)"},
|
|
||||||
{"Allwinnersun8iFamily", 0, NanoPi_Duo, "NanoPi-Duo", "4(0)"},
|
|
||||||
{"Allwinnersun8iFamily", 0, NanoPi_NEO_Core, "NanoPi-NEO-Core", "5(0)"},
|
|
||||||
{"Allwinnersun8iFamily", 0, NanoPi_K1, "NanoPi-K1", "6(0)"},
|
|
||||||
|
|
||||||
|
// kernel 4.x
|
||||||
|
{"Allwinnersun8iFamily", 0, NanoPi_M1, "NanoPi-M1", "0(0)"},
|
||||||
|
{"Allwinnersun8iFamily", 0, NanoPi_NEO, "NanoPi-NEO", "1(0)"},
|
||||||
|
{"Allwinnersun8iFamily", 0, NanoPi_NEO_Air, "NanoPi-NEO-Air", "2(0)"},
|
||||||
|
{"Allwinnersun8iFamily", 0, NanoPi_M1_Plus, "NanoPi-M1-Plus", "3(0)"},
|
||||||
|
{"Allwinnersun8iFamily", 0, NanoPi_Duo, "NanoPi-Duo", "4(0)"},
|
||||||
|
{"Allwinnersun8iFamily", 0, NanoPi_NEO_Core, "NanoPi-NEO-Core", "5(0)"},
|
||||||
|
{"Allwinnersun8iFamily", 0, NanoPi_K1, "NanoPi-K1", "6(0)"},
|
||||||
|
{"Allwinnersun8iFamily", 0, NanoPi_Hero, "NanoPi-Hero", "7(0)"},
|
||||||
|
{"Allwinnersun8iFamily", 0, NanoPi_Duo2, "NanoPi-Duo2", "8(0)"},
|
||||||
|
{"Allwinnersun8iFamily", 0, NanoPi_R1, "NanoPi-R1", "9(0)"},
|
||||||
|
|
||||||
// a64
|
// a64
|
||||||
{"sun50iw1p1", 0, NanoPi_A64, "NanoPi-A64", "0"},
|
{"sun50iw1p1", 0, NanoPi_A64, "NanoPi-A64", "0"},
|
||||||
|
|
||||||
//allwinner h5
|
//allwinner h5
|
||||||
// kernel 3.x
|
// kernel 3.x
|
||||||
{"sun50iw2", 4, NanoPi_NEO2, "NanoPi-NEO2", "1(0)"},
|
{"sun50iw2", 4, NanoPi_NEO2, "NanoPi-NEO2", "1(0)"},
|
||||||
{"sun50iw2", 4, NanoPi_M1_Plus2, "NanoPi-M1-Plus2", "3(0)"},
|
{"sun50iw2", 4, NanoPi_M1_Plus2, "NanoPi-M1-Plus2", "3(0)"},
|
||||||
{"sun50iw2", 4, NanoPi_NEO_Plus2, "NanoPi-NEO-Plus2", "2(0)"},
|
{"sun50iw2", 4, NanoPi_NEO_Plus2, "NanoPi-NEO-Plus2", "2(0)"},
|
||||||
{"sun50iw2", 4, NanoPi_NEO_Core2, "NanoPi-NEO-Core2", "0(0)"},
|
{"sun50iw2", 4, NanoPi_NEO_Core2, "NanoPi-NEO-Core2", "0(0)"},
|
||||||
{"sun50iw2", 4, NanoPi_K1_Plus, "NanoPi-K1-Plus", "4(0)"},
|
{"sun50iw2", 4, NanoPi_K1_Plus, "NanoPi-K1-Plus", "4(0)"},
|
||||||
|
|
||||||
// kernel 4.x
|
// kernel 4.x
|
||||||
{"Allwinnersun50iw2Family", 4, NanoPi_NEO2, "NanoPi-NEO2", "1(0)"},
|
{"Allwinnersun50iw2Family", 4, NanoPi_NEO2, "NanoPi-NEO2", "1(0)"},
|
||||||
{"Allwinnersun50iw2Family", 4, NanoPi_M1_Plus2, "NanoPi-M1-Plus2", "3(0)"},
|
{"Allwinnersun50iw2Family", 4, NanoPi_M1_Plus2, "NanoPi-M1-Plus2", "3(0)"},
|
||||||
{"Allwinnersun50iw2Family", 4, NanoPi_NEO_Plus2, "NanoPi-NEO-Plus2", "2(0)"},
|
{"Allwinnersun50iw2Family", 4, NanoPi_NEO_Plus2, "NanoPi-NEO-Plus2", "2(0)"},
|
||||||
{"Allwinnersun50iw2Family", 4, NanoPi_NEO_Core2, "NanoPi-NEO-Core2", "0(0)"},
|
{"Allwinnersun50iw2Family", 4, NanoPi_NEO_Core2, "NanoPi-NEO-Core2", "0(0)"},
|
||||||
{"Allwinnersun50iw2Family", 4, NanoPi_K1_Plus, "NanoPi-K1-Plus", "4(0)"},
|
{"Allwinnersun50iw2Family", 4, NanoPi_K1_Plus, "NanoPi-K1-Plus", "4(0)"},
|
||||||
|
|
||||||
//k2
|
//k2
|
||||||
{"Amlogic", 0, NanoPi_K2, "NanoPi-K2", ""},
|
{"Amlogic", 0, NanoPi_K2, "NanoPi-K2", ""},
|
||||||
|
|
||||||
|
//t4
|
||||||
|
{"nanopi4", 0, NanoPC_T4, "NanoPC-T4",""},
|
||||||
|
{"nanopi4", 1, NanoPi_M4, "NanoPi-M4",""},
|
||||||
|
{"nanopi4", 2, NanoPC_T4, "NanoPC-T4",""},
|
||||||
|
{"nanopi4", 4, NanoPi_NEO4, "NanoPi-NEO4",""},
|
||||||
};
|
};
|
||||||
|
|
||||||
static int getFieldValueInCpuInfo(char* hardware, int hardwareMaxLen, char* revision, int revisionMaxLen )
|
static int getFieldValueInCpuInfo(char* hardware, int hardwareMaxLen, char* revision, int revisionMaxLen )
|
||||||
{
|
{
|
||||||
int n,i,j;
|
int n,i,j;
|
||||||
char lineUntrim[1024], line[1024],line2[1024],*p,*p2;
|
char lineUntrim[1024], line[1024],line2[1024],*p,*p2;
|
||||||
FILE *f;
|
FILE *f;
|
||||||
int isGotHardware = 0;
|
int isGotHardware = 0;
|
||||||
int isGotRevision = 0;
|
int isGotRevision = 0;
|
||||||
|
|
||||||
if (!(f = fopen("/sys/devices/platform/board/info", "r"))) {
|
if (!(f = fopen("/sys/devices/platform/board/info", "r"))) {
|
||||||
if (!(f = fopen("/proc/cpuinfo", "r"))) {
|
if (!(f = fopen("/proc/cpuinfo", "r"))) {
|
||||||
LOGE("open /proc/cpuinfo failed.");
|
LOGE("open /proc/cpuinfo failed.");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!feof(f)) {
|
while (!feof(f)) {
|
||||||
if(!fgets(lineUntrim, sizeof(lineUntrim), f)) {
|
if(!fgets(lineUntrim, sizeof(lineUntrim), f)) {
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
j=0;
|
j=0;
|
||||||
for(i=0; i<strlen(lineUntrim);i++) {
|
for(i=0; i<strlen(lineUntrim);i++) {
|
||||||
if (lineUntrim[i] == ' ' || lineUntrim[i] == '\t' || lineUntrim[i] == '\r' || lineUntrim[i] == '\n') {
|
if (lineUntrim[i] == ' ' || lineUntrim[i] == '\t' || lineUntrim[i] == '\r' || lineUntrim[i] == '\n') {
|
||||||
} else {
|
} else {
|
||||||
line[j++]=lineUntrim[i];
|
line[j++]=lineUntrim[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
line[j] = 0x00;
|
line[j] = 0x00;
|
||||||
n = strlen(line);
|
n = strlen(line);
|
||||||
if (n>0) {
|
if (n>0) {
|
||||||
//LOGD("LINE: %s\n", line);
|
//LOGD("LINE: %s\n", line);
|
||||||
#define GetKeyValue(isGot,valP,keyName,buff,buffLen) \
|
#define GetKeyValue(isGot,valP,keyName,buff,buffLen) \
|
||||||
if (isGot==0) { \
|
if (isGot==0) { \
|
||||||
strcpy(line2, line); \
|
strcpy(line2, line); \
|
||||||
if (valP=strtok(line2, ":")) { \
|
if (valP=strtok(line2, ":")) { \
|
||||||
if (strncasecmp(valP,keyName,strlen(keyName))==0) { \
|
if (strncasecmp(valP,keyName,strlen(keyName))==0) { \
|
||||||
if (valP=strtok(0, ":")) { \
|
if (valP=strtok(0, ":")) { \
|
||||||
memset(buff,0,buffLen); \
|
memset(buff,0,buffLen); \
|
||||||
strncpy(buff,valP,buffLen-1); \
|
strncpy(buff,valP,buffLen-1); \
|
||||||
isGot=1; \
|
isGot=1; \
|
||||||
} \
|
} \
|
||||||
continue; \
|
continue; \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
GetKeyValue(isGotHardware,p,"Hardware",hardware,hardwareMaxLen);
|
GetKeyValue(isGotHardware,p,"Hardware",hardware,hardwareMaxLen);
|
||||||
GetKeyValue(isGotRevision,p2,"Revision",revision,revisionMaxLen);
|
GetKeyValue(isGotRevision,p2,"Revision",revision,revisionMaxLen);
|
||||||
|
|
||||||
if (isGotHardware == 1 && isGotRevision == 1) {
|
if (isGotHardware == 1 && isGotRevision == 1) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fclose(f);
|
fclose(f);
|
||||||
return isGotHardware + isGotRevision;
|
return isGotHardware + isGotRevision;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int getAllwinnerBoardID(char* boardId, int boardIdMaxLen )
|
static int getAllwinnerBoardID(char* boardId, int boardIdMaxLen )
|
||||||
{
|
{
|
||||||
int n,i,j;
|
int n,i,j;
|
||||||
char lineUntrim[1024], line[1024],*p;
|
char lineUntrim[1024], line[1024],*p;
|
||||||
const char* sunxi_board_id_fieldname = "sunxi_board_id";
|
const char* sunxi_board_id_fieldname = "sunxi_board_id";
|
||||||
FILE *f;
|
FILE *f;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
if (!(f = fopen("/sys/class/sunxi_info/sys_info", "r"))) {
|
if (!(f = fopen("/sys/class/sunxi_info/sys_info", "r"))) {
|
||||||
LOGE("open /sys/class/sunxi_info/sys_info failed.");
|
LOGE("open /sys/class/sunxi_info/sys_info failed.");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!feof(f)) {
|
while (!feof(f)) {
|
||||||
if(!fgets(lineUntrim, sizeof(lineUntrim), f)) {
|
if(!fgets(lineUntrim, sizeof(lineUntrim), f)) {
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
j=0;
|
j=0;
|
||||||
for(i=0; i<strlen(lineUntrim);i++) {
|
for(i=0; i<strlen(lineUntrim);i++) {
|
||||||
if (lineUntrim[i] == ' ' || lineUntrim[i] == '\t' || lineUntrim[i] == '\r' || lineUntrim[i] == '\n') {
|
if (lineUntrim[i] == ' ' || lineUntrim[i] == '\t' || lineUntrim[i] == '\r' || lineUntrim[i] == '\n') {
|
||||||
} else {
|
} else {
|
||||||
line[j++]=lineUntrim[i];
|
line[j++]=lineUntrim[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
line[j] = 0x00;
|
line[j] = 0x00;
|
||||||
n = strlen(line);
|
n = strlen(line);
|
||||||
if (n>0) {
|
if (n>0) {
|
||||||
//LOGD("LINE: %s\n", line);
|
//LOGD("LINE: %s\n", line);
|
||||||
if (p = strtok(line, ":")) {
|
if (p = strtok(line, ":")) {
|
||||||
if (strncasecmp(p, sunxi_board_id_fieldname, strlen(sunxi_board_id_fieldname)) == 0) {
|
if (strncasecmp(p, sunxi_board_id_fieldname, strlen(sunxi_board_id_fieldname)) == 0) {
|
||||||
//LOGD("\t\tkey=\"%s\"\n", p);
|
//LOGD("\t\tkey=\"%s\"\n", p);
|
||||||
if (p = strtok(0, ":")) {
|
if (p = strtok(0, ":")) {
|
||||||
//LOGD("\t\tv=\"%s\"\n", p);
|
//LOGD("\t\tv=\"%s\"\n", p);
|
||||||
memset(boardId,0,boardIdMaxLen);
|
memset(boardId,0,boardIdMaxLen);
|
||||||
strncpy(boardId, p, boardIdMaxLen-1);
|
strncpy(boardId, p, boardIdMaxLen-1);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
@ -177,86 +191,92 @@ static int getAllwinnerBoardID(char* boardId, int boardIdMaxLen )
|
||||||
}
|
}
|
||||||
|
|
||||||
int getBoardType(BoardHardwareInfo** retBoardInfo) {
|
int getBoardType(BoardHardwareInfo** retBoardInfo) {
|
||||||
char hardware[255];
|
char hardware[255];
|
||||||
char revision[255];
|
char revision[255];
|
||||||
char allwinnerBoardID[255];
|
char allwinnerBoardID[255];
|
||||||
int ret;
|
int ret;
|
||||||
int i;
|
int i;
|
||||||
memset(hardware, 0, sizeof(hardware));
|
memset(hardware, 0, sizeof(hardware));
|
||||||
memset(revision, 0, sizeof(revision));
|
memset(revision, 0, sizeof(revision));
|
||||||
if ((ret = getFieldValueInCpuInfo(hardware, sizeof(hardware), revision, sizeof(revision))) > 0) {
|
if ((ret = getFieldValueInCpuInfo(hardware, sizeof(hardware), revision, sizeof(revision))) > 0) {
|
||||||
//LOGD("hardware:%s,revision:%s\n", hardware, revision);
|
//LOGD("hardware:%s,revision:%s\n", hardware, revision);
|
||||||
} else {
|
} else {
|
||||||
//LOGD("%s, ret:%d\n", "getFieldValueInCpuInfo failed", ret);
|
//LOGD("%s, ret:%d\n", "getFieldValueInCpuInfo failed", ret);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* a64 = "sun50iw1p1";
|
const char* a64 = "sun50iw1p1";
|
||||||
const char* amlogic = "Amlogic";
|
const char* amlogic = "Amlogic";
|
||||||
const char* h3 = "sun8i";
|
const char* h3 = "sun8i";
|
||||||
const char* h5 = "sun50iw2";
|
const char* h5 = "sun50iw2";
|
||||||
const char* h3_kernel4 = "Allwinnersun8iFamily";
|
const char* h3_kernel4 = "Allwinnersun8iFamily";
|
||||||
const char* h5_kernel4 = "Allwinnersun50iw2Family";
|
const char* h5_kernel4 = "Allwinnersun50iw2Family";
|
||||||
|
|
||||||
//a64 and amlogic, only check hardware
|
//a64 and amlogic, only check hardware
|
||||||
if (strncasecmp(hardware, a64, strlen(a64)) == 0 || strncasecmp(hardware, amlogic, strlen(amlogic)) == 0) {
|
if (strncasecmp(hardware, a64, strlen(a64)) == 0 || strncasecmp(hardware, amlogic, strlen(amlogic)) == 0) {
|
||||||
for (i=0; i<(sizeof(gAllBoardHardwareInfo)/sizeof(BoardHardwareInfo)); i++) {
|
for (i=0; i<(sizeof(gAllBoardHardwareInfo)/sizeof(BoardHardwareInfo)); i++) {
|
||||||
if (strncasecmp(gAllBoardHardwareInfo[i].kernelHardware, hardware, strlen(gAllBoardHardwareInfo[i].kernelHardware)) == 0) {
|
if (strncasecmp(gAllBoardHardwareInfo[i].kernelHardware, hardware, strlen(gAllBoardHardwareInfo[i].kernelHardware)) == 0) {
|
||||||
if (retBoardInfo != 0) {
|
if (retBoardInfo != 0) {
|
||||||
*retBoardInfo = &gAllBoardHardwareInfo[i];
|
*retBoardInfo = &gAllBoardHardwareInfo[i];
|
||||||
}
|
}
|
||||||
return gAllBoardHardwareInfo[i].boardTypeId;
|
return gAllBoardHardwareInfo[i].boardTypeId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// h3 and h5, check hardware and boardid
|
// h3 and h5, check hardware and boardid
|
||||||
if (strncasecmp(hardware, h3, strlen(h3)) == 0 || strncasecmp(hardware, h5, strlen(h5)) == 0
|
if (strncasecmp(hardware, h3, strlen(h3)) == 0 || strncasecmp(hardware, h5, strlen(h5)) == 0
|
||||||
|| strncasecmp(hardware, h3_kernel4, strlen(h3_kernel4)) == 0 || strncasecmp(hardware, h5_kernel4, strlen(h5_kernel4)) == 0) {
|
|| strncasecmp(hardware, h3_kernel4, strlen(h3_kernel4)) == 0 || strncasecmp(hardware, h5_kernel4, strlen(h5_kernel4)) == 0) {
|
||||||
int ret = getAllwinnerBoardID(allwinnerBoardID, sizeof(allwinnerBoardID));
|
int ret = getAllwinnerBoardID(allwinnerBoardID, sizeof(allwinnerBoardID));
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
//LOGD("got boardid: %s\n", allwinnerBoardID);
|
//LOGD("got boardid: %s\n", allwinnerBoardID);
|
||||||
for (i=0; i<(sizeof(gAllBoardHardwareInfo)/sizeof(BoardHardwareInfo)); i++) {
|
for (i=0; i<(sizeof(gAllBoardHardwareInfo)/sizeof(BoardHardwareInfo)); i++) {
|
||||||
//LOGD("\t\t enum, start compare[%d]: %s <--> %s\n", i, gAllBoardHardwareInfo[i].kernelHardware, hardware);
|
//LOGD("\t{{ enum, start compare[%d]: %s <--> %s\n", i, gAllBoardHardwareInfo[i].kernelHardware, hardware);
|
||||||
if (strncasecmp(gAllBoardHardwareInfo[i].kernelHardware, hardware, strlen(gAllBoardHardwareInfo[i].kernelHardware)) == 0) {
|
if (strncasecmp(gAllBoardHardwareInfo[i].kernelHardware, hardware, strlen(gAllBoardHardwareInfo[i].kernelHardware)) == 0) {
|
||||||
if (strncasecmp(gAllBoardHardwareInfo[i].allwinnerBoardID, allwinnerBoardID, strlen(gAllBoardHardwareInfo[i].allwinnerBoardID)) == 0) {
|
//LOGD("\t\tMATCH %s\n", hardware);
|
||||||
if (retBoardInfo != 0) {
|
if (strncasecmp(gAllBoardHardwareInfo[i].allwinnerBoardID, allwinnerBoardID, strlen(gAllBoardHardwareInfo[i].allwinnerBoardID)) == 0) {
|
||||||
*retBoardInfo = &gAllBoardHardwareInfo[i];
|
if (retBoardInfo != 0) {
|
||||||
}
|
*retBoardInfo = &gAllBoardHardwareInfo[i];
|
||||||
return gAllBoardHardwareInfo[i].boardTypeId;
|
}
|
||||||
}
|
//LOGD("\t\t\tMATCH board id: %s\n", allwinnerBoardID);
|
||||||
}
|
return gAllBoardHardwareInfo[i].boardTypeId;
|
||||||
//LOGD("\t\t enum, end compare[%d]\n", i);
|
} else {
|
||||||
}
|
//LOGD("\t\t\tnot match board id: %s\n", allwinnerBoardID);
|
||||||
}
|
}
|
||||||
return -1;
|
} else {
|
||||||
}
|
//LOGD("\t\tnot match %s\n", hardware);
|
||||||
|
}
|
||||||
|
//LOGD("\t}} enum, end compare[%d]\n", i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (strlen(revision) == 0) {
|
if (strlen(revision) == 0) {
|
||||||
//LOGD("failed, revision is empty.");
|
//LOGD("failed, revision is empty.");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
char revision2[255];
|
char revision2[255];
|
||||||
sprintf(revision2, "0x%s", revision);
|
sprintf(revision2, "0x%s", revision);
|
||||||
int iRev;
|
int iRev;
|
||||||
iRev = strtol(revision2, NULL, 16);
|
iRev = strtol(revision2, NULL, 16);
|
||||||
|
|
||||||
// other, check hardware and revision
|
// other, check hardware and revision
|
||||||
for (i=0; i<(sizeof(gAllBoardHardwareInfo)/sizeof(BoardHardwareInfo)); i++) {
|
for (i=0; i<(sizeof(gAllBoardHardwareInfo)/sizeof(BoardHardwareInfo)); i++) {
|
||||||
if (strncasecmp(gAllBoardHardwareInfo[i].kernelHardware, hardware, strlen(gAllBoardHardwareInfo[i].kernelHardware)) == 0) {
|
if (strncasecmp(gAllBoardHardwareInfo[i].kernelHardware, hardware, strlen(gAllBoardHardwareInfo[i].kernelHardware)) == 0) {
|
||||||
if (gAllBoardHardwareInfo[i].kernelRevision == -1
|
if (gAllBoardHardwareInfo[i].kernelRevision == -1
|
||||||
|| gAllBoardHardwareInfo[i].kernelRevision == iRev
|
|| gAllBoardHardwareInfo[i].kernelRevision == iRev
|
||||||
) {
|
) {
|
||||||
if (retBoardInfo != 0) {
|
if (retBoardInfo != 0) {
|
||||||
*retBoardInfo = &gAllBoardHardwareInfo[i];
|
*retBoardInfo = &gAllBoardHardwareInfo[i];
|
||||||
}
|
}
|
||||||
return gAllBoardHardwareInfo[i].boardTypeId;
|
return gAllBoardHardwareInfo[i].boardTypeId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -39,6 +39,8 @@ typedef struct {
|
||||||
//s5p6818
|
//s5p6818
|
||||||
#define S5P6818_BASE (6818)
|
#define S5P6818_BASE (6818)
|
||||||
#define NanoPC_T3 (S5P6818_BASE+1)
|
#define NanoPC_T3 (S5P6818_BASE+1)
|
||||||
|
#define NanoPi_M3B (S5P6818_BASE+2)
|
||||||
|
#define Smart6818 (S5P6818_BASE+3)
|
||||||
#define NanoPC_T3T (S5P6818_BASE+4)
|
#define NanoPC_T3T (S5P6818_BASE+4)
|
||||||
#define NanoPi_Fire3 (S5P6818_BASE+5)
|
#define NanoPi_Fire3 (S5P6818_BASE+5)
|
||||||
#define NanoPi_M3 (S5P6818_BASE+7)
|
#define NanoPi_M3 (S5P6818_BASE+7)
|
||||||
|
@ -64,12 +66,21 @@ typedef struct {
|
||||||
#define NanoPi_NEO_Core2 (ALLWINNER_BASE+11)
|
#define NanoPi_NEO_Core2 (ALLWINNER_BASE+11)
|
||||||
#define NanoPi_K1 (ALLWINNER_BASE+12)
|
#define NanoPi_K1 (ALLWINNER_BASE+12)
|
||||||
#define NanoPi_K1_Plus (ALLWINNER_BASE+13)
|
#define NanoPi_K1_Plus (ALLWINNER_BASE+13)
|
||||||
#define ALLWINNER_MAX NanoPi_K1_Plus
|
#define NanoPi_Hero (ALLWINNER_BASE+14)
|
||||||
|
#define NanoPi_Duo2 (ALLWINNER_BASE+15)
|
||||||
|
#define NanoPi_R1 (ALLWINNER_BASE+16)
|
||||||
|
#define ALLWINNER_MAX NanoPi_R1
|
||||||
|
|
||||||
//amlogic
|
//amlogic
|
||||||
#define AMLOGIC_BASE (8000)
|
#define AMLOGIC_BASE (8000)
|
||||||
#define NanoPi_K2 (AMLOGIC_BASE+1)
|
#define NanoPi_K2 (AMLOGIC_BASE+1)
|
||||||
|
|
||||||
|
//rk3399
|
||||||
|
#define RK3399_BASE (9000)
|
||||||
|
#define NanoPC_T4 (RK3399_BASE+1)
|
||||||
|
#define NanoPi_M4 (RK3399_BASE+2)
|
||||||
|
#define NanoPi_NEO4 (RK3399_BASE+3)
|
||||||
|
|
||||||
extern int getBoardType(BoardHardwareInfo** retBoardInfo);
|
extern int getBoardType(BoardHardwareInfo** retBoardInfo);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -382,7 +382,7 @@ static int pinToGpio_duo [MAX_PIN_COUNT] ={
|
||||||
-1, 12, //11, 12
|
-1, 12, //11, 12
|
||||||
11, 4, //13, 14
|
11, 4, //13, 14
|
||||||
5, 203, //15, 16
|
5, 203, //15, 16
|
||||||
-1, -1, //17, 18
|
-1,363, //17, 18
|
||||||
-1, -1, //19, 20
|
-1, -1, //19, 20
|
||||||
-1, -1, //21, 22
|
-1, -1, //21, 22
|
||||||
-1, -1, //23, 24
|
-1, -1, //23, 24
|
||||||
|
@ -406,7 +406,41 @@ static int pinToGpio_duo [MAX_PIN_COUNT] ={
|
||||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// wPi number to /sys/gpio number
|
||||||
|
static int pinToGpio_duo2 [MAX_PIN_COUNT] ={
|
||||||
|
16, //0
|
||||||
|
/* 32 Pin */
|
||||||
|
-1, 14, //1, 2
|
||||||
|
13, -1, //3, 4
|
||||||
|
-1, -1, //5, 6
|
||||||
|
15,198, //7, 8
|
||||||
|
-1,199, //9, 10
|
||||||
|
-1, 12, //11, 12
|
||||||
|
11, 4, //13, 14
|
||||||
|
5,203, //15, 16
|
||||||
|
-1,363, //17, 18
|
||||||
|
-1, -1, //19, 20
|
||||||
|
-1, -1, //21, 22
|
||||||
|
-1, -1, //23, 24
|
||||||
|
-1, -1, //25, 26
|
||||||
|
-1, -1, //27, 28
|
||||||
|
-1, -1, //29, 30
|
||||||
|
-1, -1, //31, 32
|
||||||
|
/* ---------nanopi duo end----------- */
|
||||||
|
|
||||||
|
-1, -1, //33, 34
|
||||||
|
-1, -1, //35, 36
|
||||||
|
|
||||||
|
/* UART0 Tx,Rx */
|
||||||
|
-1, -1, //37, 38
|
||||||
|
|
||||||
|
/* 39~63 */
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
|
||||||
|
/* 64~73 */
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
};
|
||||||
|
|
||||||
// wPi number to /sys/gpio number
|
// wPi number to /sys/gpio number
|
||||||
static int pinToGpio_neocore [MAX_PIN_COUNT] ={
|
static int pinToGpio_neocore [MAX_PIN_COUNT] ={
|
||||||
|
@ -440,9 +474,6 @@ static int pinToGpio_neocore [MAX_PIN_COUNT] ={
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
static int pinTobcm [64] ={
|
static int pinTobcm [64] ={
|
||||||
19, 18, //map to BCM GPIO0,1
|
19, 18, //map to BCM GPIO0,1
|
||||||
|
@ -555,8 +586,6 @@ static int physToGpio_neocore [MAX_PIN_COUNT] ={
|
||||||
-1, //73
|
-1, //73
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int physToGpio_m1 [MAX_PIN_COUNT] ={
|
static int physToGpio_m1 [MAX_PIN_COUNT] ={
|
||||||
-1, // 0
|
-1, // 0
|
||||||
-1, -1, // 1, 2
|
-1, -1, // 1, 2
|
||||||
|
@ -586,7 +615,6 @@ static int physToGpio_m1 [MAX_PIN_COUNT] ={
|
||||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// phys pin number to /sys/gpio number
|
// phys pin number to /sys/gpio number
|
||||||
static int physToGpio_duo [MAX_PIN_COUNT] ={
|
static int physToGpio_duo [MAX_PIN_COUNT] ={
|
||||||
-1, //0
|
-1, //0
|
||||||
|
@ -596,7 +624,7 @@ static int physToGpio_duo [MAX_PIN_COUNT] ={
|
||||||
-1, -1, //5, 6
|
-1, -1, //5, 6
|
||||||
-1, -1, //7, 8
|
-1, -1, //7, 8
|
||||||
-1, -1, //9, 10
|
-1, -1, //9, 10
|
||||||
198,-1, //11, 12
|
198,363, //11, 12
|
||||||
199,-1, //13, 14
|
199,-1, //13, 14
|
||||||
15, -1, //15, 16
|
15, -1, //15, 16
|
||||||
16, -1, //17, 18
|
16, -1, //17, 18
|
||||||
|
@ -622,6 +650,44 @@ static int physToGpio_duo [MAX_PIN_COUNT] ={
|
||||||
/* 64~73 */
|
/* 64~73 */
|
||||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// phys pin number to /sys/gpio number
|
||||||
|
static int physToGpio_duo2 [MAX_PIN_COUNT] ={
|
||||||
|
-1, //0
|
||||||
|
/* 32 Pin */
|
||||||
|
-1, 5, //1, 2
|
||||||
|
-1, 4, //3, 4
|
||||||
|
-1, -1, //5, 6
|
||||||
|
-1, 11, //7, 8
|
||||||
|
363, 12, //9, 10
|
||||||
|
203, 13, //11, 12
|
||||||
|
-1, 14, //13, 14
|
||||||
|
-1, 16, //15, 16
|
||||||
|
-1, 15, //17, 18
|
||||||
|
-1, 199, //19, 20
|
||||||
|
-1, 198, //21, 22
|
||||||
|
-1, -1, //23, 24
|
||||||
|
-1, -1, //25, 26
|
||||||
|
-1, -1, //27, 28
|
||||||
|
-1, -1, //29, 30
|
||||||
|
-1, -1, //31, 32
|
||||||
|
/* ---------nanopi duo end----------- */
|
||||||
|
|
||||||
|
-1, -1, //33, 34
|
||||||
|
-1, -1, //35, 36
|
||||||
|
|
||||||
|
/* UART0 Tx,Rx */
|
||||||
|
-1, -1, //37, 38
|
||||||
|
|
||||||
|
/* 39~63 */
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
|
||||||
|
/* 64~73 */
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
||||||
static int syspin_neo [MAX_PIN_COUNT] ={
|
static int syspin_neo [MAX_PIN_COUNT] ={
|
||||||
|
@ -673,6 +739,17 @@ static int syspin_duo [MAX_PIN_COUNT] ={
|
||||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int syspin_duo2 [MAX_PIN_COUNT] ={
|
||||||
|
-1, -1, 2, 3, 4, 5, 6, 7,
|
||||||
|
8, 9, 10, 11, 12, 13, 14, 15,
|
||||||
|
16, 17, 18, 19, 20, 21, 22, 23,
|
||||||
|
24, 25, 26, 27, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
|
||||||
|
/* 64~73 */
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
};
|
||||||
|
|
||||||
/*static int edge [MAX_PIN_COUNT] ={
|
/*static int edge [MAX_PIN_COUNT] ={
|
||||||
-1, -1, -1, -1, 4, -1, -1, 7, //support the INT
|
-1, -1, -1, -1, 4, -1, -1, 7, //support the INT
|
||||||
|
@ -817,7 +894,6 @@ static int physToPin_duo [MAX_PIN_COUNT] = //return wiringPI pin //note: same as
|
||||||
2, -1, //19, 20
|
2, -1, //19, 20
|
||||||
3, 16, //21, 22
|
3, 16, //21, 22
|
||||||
12, -1, //23, 24
|
12, -1, //23, 24
|
||||||
|
|
||||||
13, -1, //25, 26
|
13, -1, //25, 26
|
||||||
-1, -1, //27, 28
|
-1, -1, //27, 28
|
||||||
14, -1, //29, 30
|
14, -1, //29, 30
|
||||||
|
@ -836,6 +912,39 @@ static int physToPin_duo [MAX_PIN_COUNT] = //return wiringPI pin //note: same as
|
||||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int physToPin_duo2 [MAX_PIN_COUNT] = //return wiringPI pin //note: same as physToWpi
|
||||||
|
{
|
||||||
|
-1, // 0
|
||||||
|
-1, 15, // 1, 2
|
||||||
|
-1, 14, // 3, 4
|
||||||
|
-1, -1, // 5, 6
|
||||||
|
-1, 13, // 7, 8
|
||||||
|
-1, 12, // 9, 10
|
||||||
|
16, 3, //11, 12
|
||||||
|
-1, 2, //13, 14
|
||||||
|
-1, 0, //15, 16
|
||||||
|
-1, 7, //17, 18
|
||||||
|
-1, 9, //19, 20
|
||||||
|
-1, 8, //21, 22
|
||||||
|
-1, -1, //23, 24
|
||||||
|
-1, -1, //25, 26
|
||||||
|
-1, -1, //27, 28
|
||||||
|
-1, -1, //29, 30
|
||||||
|
-1, -1, //31, 32
|
||||||
|
/* ---------nanopi duo end----------- */
|
||||||
|
-1, -1, //33, 34
|
||||||
|
-1, -1, //35, 36
|
||||||
|
|
||||||
|
-1, -1, //37, 38
|
||||||
|
|
||||||
|
/* 39~63 */
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
|
||||||
|
/* 64~73 */
|
||||||
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||||
|
};
|
||||||
|
|
||||||
// pins available on pin out by banks
|
// pins available on pin out by banks
|
||||||
static int BP_PIN_MASK[9][32] = //[BANK] [INDEX]
|
static int BP_PIN_MASK[9][32] = //[BANK] [INDEX]
|
||||||
{
|
{
|
||||||
|
@ -1285,11 +1394,10 @@ int isA20(void) {
|
||||||
|
|
||||||
int piBoardRev(void) {
|
int piBoardRev(void) {
|
||||||
BoardHardwareInfo* retBoardInfo;
|
BoardHardwareInfo* retBoardInfo;
|
||||||
int boardId;
|
int ret = getBoardType(&retBoardInfo);
|
||||||
boardId = getBoardType(&retBoardInfo);
|
if (ret >= 0) {
|
||||||
if (boardId >= 0) {
|
if (retBoardInfo->boardTypeId > ALLWINNER_BASE && retBoardInfo->boardTypeId <= ALLWINNER_MAX
|
||||||
if (boardId > ALLWINNER_BASE && boardId <= ALLWINNER_MAX
|
&& retBoardInfo->boardTypeId != NanoPi_A64) {
|
||||||
&& boardId != NanoPi_A64) {
|
|
||||||
version = BPRVER;
|
version = BPRVER;
|
||||||
if (wiringPiDebug)
|
if (wiringPiDebug)
|
||||||
printf("piBoardRev: %d\n", version);
|
printf("piBoardRev: %d\n", version);
|
||||||
|
@ -1313,19 +1421,14 @@ int piBoardRev(void) {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void piBoardId(int *model, int *rev, int *mem, int *maker, int *overVolted) {
|
void piBoardId(int *model, int *rev, int *mem, int *maker, int *overVolted) {
|
||||||
FILE *cpuFd;
|
|
||||||
char line [120];
|
|
||||||
char *c;
|
|
||||||
|
|
||||||
(void) piBoardRev(); // Call this first to make sure all's OK. Don't care about the result.
|
(void) piBoardRev(); // Call this first to make sure all's OK. Don't care about the result.
|
||||||
|
|
||||||
BoardHardwareInfo* retBoardInfo;
|
BoardHardwareInfo* retBoardInfo;
|
||||||
int boardId;
|
int ret = getBoardType(&retBoardInfo);
|
||||||
boardId = getBoardType(&retBoardInfo);
|
if (ret >= 0) {
|
||||||
if (boardId >= 0) {
|
if (retBoardInfo->boardTypeId > ALLWINNER_BASE && retBoardInfo->boardTypeId <= ALLWINNER_MAX
|
||||||
if (boardId > ALLWINNER_BASE && boardId <= ALLWINNER_MAX
|
&& retBoardInfo->boardTypeId != NanoPi_A64) {
|
||||||
&& boardId != NanoPi_A64) {
|
*model = retBoardInfo->boardTypeId;
|
||||||
*model = boardId;
|
|
||||||
*rev = PI_VERSION_1_2;
|
*rev = PI_VERSION_1_2;
|
||||||
*mem = 1024;
|
*mem = 1024;
|
||||||
*maker = PI_MAKER_FRIENDLYELEC;
|
*maker = PI_MAKER_FRIENDLYELEC;
|
||||||
|
@ -1448,6 +1551,33 @@ int getAlt(int pin) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int getAltSilence(int pin) {
|
||||||
|
int alt;
|
||||||
|
|
||||||
|
if (pin >= MAX_PIN_COUNT || pin < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pinToGpio == 0 || physToGpio == 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//printf("[%s:L%d] the pin:%d mode: %d is invaild,please check it over!\n", __func__, __LINE__, pin, wiringPiMode);
|
||||||
|
if (wiringPiMode == WPI_MODE_PINS)
|
||||||
|
pin = pinToGpio [pin];
|
||||||
|
else if (wiringPiMode == WPI_MODE_PHYS)
|
||||||
|
pin = physToGpio[pin];
|
||||||
|
else if (wiringPiMode == WPI_MODE_GPIO) //pin = pinTobcm[pin];
|
||||||
|
pin = pin;
|
||||||
|
else return 0;
|
||||||
|
|
||||||
|
if (-1 == pin) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
alt = sunxi_get_gpio_mode(pin);
|
||||||
|
return alt;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* pwmSetMode:
|
* pwmSetMode:
|
||||||
* Select the native "balanced" mode, or standard mark:space mode
|
* Select the native "balanced" mode, or standard mark:space mode
|
||||||
|
@ -1611,7 +1741,7 @@ void pinMode(int pin, int mode) {
|
||||||
|
|
||||||
if (pinToGpio == 0 || physToGpio == 0) {
|
if (pinToGpio == 0 || physToGpio == 0) {
|
||||||
printf("please call wiringPiSetup first.\n");
|
printf("please call wiringPiSetup first.\n");
|
||||||
return -1;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// On-board pin
|
// On-board pin
|
||||||
|
@ -1736,9 +1866,12 @@ int digitalRead(int pin) {
|
||||||
struct wiringPiNodeStruct *node = wiringPiNodes;
|
struct wiringPiNodeStruct *node = wiringPiNodes;
|
||||||
int oldPin = pin;
|
int oldPin = pin;
|
||||||
|
|
||||||
|
if (wiringPiDebug)
|
||||||
|
printf("Func: %s, Line: %d,pin:%d\n", __func__, __LINE__, pin);
|
||||||
|
|
||||||
if (pinToGpio == 0 || physToGpio == 0) {
|
if (pinToGpio == 0 || physToGpio == 0) {
|
||||||
printf("please call wiringPiSetup first.\n");
|
printf("please call wiringPiSetup first.\n");
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pin > 0 && pin < MAX_PIN_COUNT) {
|
if (pin > 0 && pin < MAX_PIN_COUNT) {
|
||||||
|
@ -1753,13 +1886,13 @@ int digitalRead(int pin) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: fix me
|
//TODO: fix me
|
||||||
/*
|
/*
|
||||||
if (syspin[pin] == -1) {
|
if (syspin[pin] == -1) {
|
||||||
//printf("%d %s,%d invalid pin,please check it over.\n",pin,__func__, __LINE__);
|
//printf("%d %s,%d invalid pin,please check it over.\n",pin,__func__, __LINE__);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (sysFds [pin] == -1) {
|
if (sysFds [pin] == -1) {
|
||||||
if (wiringPiDebug)
|
if (wiringPiDebug)
|
||||||
|
@ -1783,7 +1916,7 @@ int digitalRead(int pin) {
|
||||||
}
|
}
|
||||||
} else if (wiringPiMode == WPI_MODE_GPIO) {
|
} else if (wiringPiMode == WPI_MODE_GPIO) {
|
||||||
// pin = pinTobcm[pin];
|
// pin = pinTobcm[pin];
|
||||||
pin = pin;
|
pin = pin;
|
||||||
|
|
||||||
if (wiringPiDebug) {
|
if (wiringPiDebug) {
|
||||||
printf(">>> pinTobcm[pin] ret %d\n", pin);
|
printf(">>> pinTobcm[pin] ret %d\n", pin);
|
||||||
|
@ -1802,8 +1935,49 @@ int digitalRead(int pin) {
|
||||||
return LOW;
|
return LOW;
|
||||||
return node->digitalRead(node, pin);
|
return node->digitalRead(node, pin);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int digitalReadSilence(int pin) {
|
||||||
|
char c;
|
||||||
|
struct wiringPiNodeStruct *node = wiringPiNodes;
|
||||||
|
int oldPin = pin;
|
||||||
|
|
||||||
|
if (pinToGpio == 0 || physToGpio == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pin > 0 && pin < MAX_PIN_COUNT) {
|
||||||
|
if (wiringPiMode == WPI_MODE_GPIO_SYS) // Sys mode
|
||||||
|
{
|
||||||
|
if (pin == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sysFds [pin] == -1) {
|
||||||
|
return LOW;
|
||||||
|
}
|
||||||
|
lseek(sysFds [pin], 0L, SEEK_SET);
|
||||||
|
read(sysFds [pin], &c, 1);
|
||||||
|
return (c == '0') ? LOW : HIGH;
|
||||||
|
} else if (wiringPiMode == WPI_MODE_PINS) {
|
||||||
|
pin = pinToGpio [pin];
|
||||||
|
} else if (wiringPiMode == WPI_MODE_PHYS) {
|
||||||
|
pin = physToGpio[pin];
|
||||||
|
} else if (wiringPiMode == WPI_MODE_GPIO) {
|
||||||
|
// pin = pinTobcm[pin];
|
||||||
|
pin = pin;
|
||||||
|
} else {
|
||||||
|
return LOW;
|
||||||
|
}
|
||||||
|
if (-1 == pin) {
|
||||||
|
return LOW;
|
||||||
|
}
|
||||||
|
return sunxi_digitalRead(pin);
|
||||||
|
} else {
|
||||||
|
if ((node = wiringPiFindNode(pin)) == NULL)
|
||||||
|
return LOW;
|
||||||
|
return node->digitalRead(node, pin);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2334,23 +2508,28 @@ int wiringPiSetup(void) {
|
||||||
piBoardId(&model, &rev, &mem, &maker, &overVolted);
|
piBoardId(&model, &rev, &mem, &maker, &overVolted);
|
||||||
wiringPiMode = WPI_MODE_PINS;
|
wiringPiMode = WPI_MODE_PINS;
|
||||||
|
|
||||||
int boardId = model;
|
int faBoardId = model;
|
||||||
if (boardId == NanoPi_M1 || boardId == NanoPi_M1_Plus || boardId == NanoPi_M1_Plus2 || boardId == NanoPi_K1_Plus) {
|
if (faBoardId == NanoPi_M1 || faBoardId == NanoPi_M1_Plus || faBoardId == NanoPi_M1_Plus2 || faBoardId == NanoPi_K1_Plus) {
|
||||||
pinToGpio = pinToGpio_m1;
|
pinToGpio = pinToGpio_m1;
|
||||||
physToGpio = physToGpio_m1;
|
physToGpio = physToGpio_m1;
|
||||||
physToPin = physToPin_m1;
|
physToPin = physToPin_m1;
|
||||||
syspin = syspin_m1;
|
syspin = syspin_m1;
|
||||||
} else if (boardId == NanoPi_NEO || boardId == NanoPi_NEO_Air || boardId == NanoPi_NEO2 || boardId == NanoPi_NEO_Plus2) {
|
} else if (faBoardId == NanoPi_NEO || faBoardId == NanoPi_NEO_Air || faBoardId == NanoPi_NEO2 || faBoardId == NanoPi_NEO_Plus2) {
|
||||||
pinToGpio = pinToGpio_neo;
|
pinToGpio = pinToGpio_neo;
|
||||||
physToGpio = physToGpio_neo;
|
physToGpio = physToGpio_neo;
|
||||||
physToPin = physToPin_neo;
|
physToPin = physToPin_neo;
|
||||||
syspin = syspin_neo;
|
syspin = syspin_neo;
|
||||||
} else if (boardId == NanoPi_Duo) {
|
} else if (faBoardId == NanoPi_Duo) {
|
||||||
pinToGpio = pinToGpio_duo;
|
pinToGpio = pinToGpio_duo;
|
||||||
physToGpio = physToGpio_duo;
|
physToGpio = physToGpio_duo;
|
||||||
physToPin = physToPin_duo;
|
physToPin = physToPin_duo;
|
||||||
syspin = syspin_duo;
|
syspin = syspin_duo;
|
||||||
} else if (boardId == NanoPi_NEO_Core || boardId == NanoPi_NEO_Core2) {
|
} else if (faBoardId == NanoPi_Duo2) {
|
||||||
|
pinToGpio = pinToGpio_duo2;
|
||||||
|
physToGpio = physToGpio_duo2;
|
||||||
|
physToPin = physToPin_duo2;
|
||||||
|
syspin = syspin_duo2;
|
||||||
|
} else if (faBoardId == NanoPi_NEO_Core || faBoardId == NanoPi_NEO_Core2) {
|
||||||
pinToGpio = pinToGpio_neocore;
|
pinToGpio = pinToGpio_neocore;
|
||||||
physToGpio = physToGpio_neocore;
|
physToGpio = physToGpio_neocore;
|
||||||
physToPin = physToPin_neocore;
|
physToPin = physToPin_neocore;
|
||||||
|
@ -2427,23 +2606,27 @@ int wiringPiSetupSys(void) {
|
||||||
printf("wiringPi: wiringPiSetupSys called\n");
|
printf("wiringPi: wiringPiSetupSys called\n");
|
||||||
|
|
||||||
piBoardId(&model, &rev, &mem, &maker, &overVolted);
|
piBoardId(&model, &rev, &mem, &maker, &overVolted);
|
||||||
int boardId = model;
|
int faBoardId = model;
|
||||||
if (boardId == NanoPi_M1 || boardId == NanoPi_M1_Plus || boardId == NanoPi_M1_Plus2 || boardId == NanoPi_K1_Plus) {
|
if (faBoardId == NanoPi_M1 || faBoardId == NanoPi_M1_Plus || faBoardId == NanoPi_M1_Plus2 || faBoardId == NanoPi_K1_Plus) {
|
||||||
pinToGpio = pinToGpio_m1;
|
pinToGpio = pinToGpio_m1;
|
||||||
physToGpio = physToGpio_m1;
|
physToGpio = physToGpio_m1;
|
||||||
physToPin = physToPin_m1;
|
physToPin = physToPin_m1;
|
||||||
} else if (boardId == NanoPi_NEO || boardId == NanoPi_NEO_Air || boardId == NanoPi_NEO2 || boardId == NanoPi_NEO_Plus2) {
|
} else if (faBoardId == NanoPi_NEO || faBoardId == NanoPi_NEO_Air || faBoardId == NanoPi_NEO2 || faBoardId == NanoPi_NEO_Plus2) {
|
||||||
pinToGpio = pinToGpio_neo;
|
pinToGpio = pinToGpio_neo;
|
||||||
physToGpio = physToGpio_neo;
|
physToGpio = physToGpio_neo;
|
||||||
physToPin = physToPin_neo;
|
physToPin = physToPin_neo;
|
||||||
} else if (boardId == NanoPi_Duo) {
|
} else if (faBoardId == NanoPi_Duo) {
|
||||||
pinToGpio = pinToGpio_duo;
|
pinToGpio = pinToGpio_duo;
|
||||||
physToGpio = physToGpio_duo;
|
physToGpio = physToGpio_duo;
|
||||||
physToPin = physToPin_duo;
|
physToPin = physToPin_duo;
|
||||||
} else if (boardId == NanoPi_NEO_Core || boardId == NanoPi_NEO_Core2) {
|
} else if (faBoardId == NanoPi_Duo2) {
|
||||||
pinToGpio = pinToGpio_neocore;
|
pinToGpio = pinToGpio_duo2;
|
||||||
physToGpio = physToGpio_neocore;
|
physToGpio = physToGpio_duo2;
|
||||||
physToPin = physToPin_neocore;
|
physToPin = physToPin_duo2;
|
||||||
|
} else if (faBoardId == NanoPi_NEO_Core || faBoardId == NanoPi_NEO_Core2) {
|
||||||
|
pinToGpio = pinToGpio_neocore;
|
||||||
|
physToGpio = physToGpio_neocore;
|
||||||
|
physToPin = physToPin_neocore;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (pin = 1; pin < MAX_PIN_COUNT; ++pin) {
|
for (pin = 1; pin < MAX_PIN_COUNT; ++pin) {
|
||||||
|
|
Loading…
Reference in New Issue