WiringPi: Add cmpKernelVersion and update the kernelVerion structure
Signed-off-by: Deokgyu Yang <secugyu@gmail.com> Change-Id: Ia8431e26578f007fd98d152c4915ce3caba07fb9
This commit is contained in:
18
gpio/gpio.c
18
gpio/gpio.c
@@ -202,15 +202,25 @@ static void doI2Cdetect (UNU int argc, char *argv [])
|
|||||||
piBoardId(&model, &rev, &mem, &maker, &overVolted);
|
piBoardId(&model, &rev, &mem, &maker, &overVolted);
|
||||||
|
|
||||||
switch (model) {
|
switch (model) {
|
||||||
case MODEL_ODROID_C1: case MODEL_ODROID_C2:
|
case MODEL_ODROID_C1:
|
||||||
case MODEL_ODROID_XU3:
|
case MODEL_ODROID_C2:
|
||||||
port = 1;
|
port = 1;
|
||||||
break;
|
break;
|
||||||
|
case MODEL_ODROID_XU3:
|
||||||
|
if (cmpKernelVersion(KERN_NUM_TO_REVISION, 5, 4, 0))
|
||||||
|
port = 0;
|
||||||
|
else
|
||||||
|
port = 1;
|
||||||
|
break;
|
||||||
case MODEL_ODROID_N1:
|
case MODEL_ODROID_N1:
|
||||||
port = 4;
|
port = 4;
|
||||||
break;
|
break;
|
||||||
case MODEL_ODROID_N2:
|
case MODEL_ODROID_N2:
|
||||||
port = 3;
|
case MODEL_ODROID_C4:
|
||||||
|
if (cmpKernelVersion(KERN_NUM_TO_REVISION, 4, 9, 230))
|
||||||
|
port = 0;
|
||||||
|
else
|
||||||
|
port = 2;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -833,7 +843,7 @@ static void doVersion (char *argv [])
|
|||||||
piMakerNames [maker]);
|
piMakerNames [maker]);
|
||||||
|
|
||||||
// Show current kernel version
|
// Show current kernel version
|
||||||
printf(" * Current devices' kernel version: %d.%d.%d-%d\n",
|
printf(" * Current devices' kernel version: %d.%d.%d-%s\n",
|
||||||
kernelVersion->major,
|
kernelVersion->major,
|
||||||
kernelVersion->minor,
|
kernelVersion->minor,
|
||||||
kernelVersion->revision,
|
kernelVersion->revision,
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ struct kernelVersionStruct *kernelVersion = &(struct kernelVersionStruct) {
|
|||||||
.major = 0,
|
.major = 0,
|
||||||
.minor = 0,
|
.minor = 0,
|
||||||
.revision = 0,
|
.revision = 0,
|
||||||
.patch = 0
|
.patch = ""
|
||||||
};
|
};
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
@@ -272,7 +272,10 @@ void setKernelVersion() {
|
|||||||
|
|
||||||
char* buf;
|
char* buf;
|
||||||
char* delimiter[] = { ".", "-" };
|
char* delimiter[] = { ".", "-" };
|
||||||
int i, kernelNumbers[4] = { 0, };
|
int i;
|
||||||
|
|
||||||
|
int kernelNumbers[3] = { 0, };
|
||||||
|
char patchStringBuf[64];
|
||||||
|
|
||||||
uname(&uname_buf);
|
uname(&uname_buf);
|
||||||
|
|
||||||
@@ -281,6 +284,8 @@ void setKernelVersion() {
|
|||||||
if (i < 1) {
|
if (i < 1) {
|
||||||
kernelNumbers[i] = atoi(buf);
|
kernelNumbers[i] = atoi(buf);
|
||||||
buf = strtok(NULL, delimiter[0]);
|
buf = strtok(NULL, delimiter[0]);
|
||||||
|
} else if (i == 3) {
|
||||||
|
memcpy(patchStringBuf, buf, strlen(buf));
|
||||||
} else {
|
} else {
|
||||||
kernelNumbers[i] = atoi(buf);
|
kernelNumbers[i] = atoi(buf);
|
||||||
buf = strtok(NULL, delimiter[1]);
|
buf = strtok(NULL, delimiter[1]);
|
||||||
@@ -290,7 +295,52 @@ void setKernelVersion() {
|
|||||||
kernelVersion->major = kernelNumbers[0];
|
kernelVersion->major = kernelNumbers[0];
|
||||||
kernelVersion->minor = kernelNumbers[1];
|
kernelVersion->minor = kernelNumbers[1];
|
||||||
kernelVersion->revision = kernelNumbers[2];
|
kernelVersion->revision = kernelNumbers[2];
|
||||||
kernelVersion->patch = kernelNumbers[3];
|
memcpy(kernelVersion->patch, patchStringBuf, 64);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
/*
|
||||||
|
* cmpKernelVersion:
|
||||||
|
* It compares kernel version between the current one and the passed in
|
||||||
|
* numbers. If the current one is bigger than the arguments, it returns
|
||||||
|
* true, or it returns false.
|
||||||
|
*/
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
char cmpKernelVersion(int num, ...) {
|
||||||
|
va_list valist;
|
||||||
|
int versionCompareTo[3] = { 0, };
|
||||||
|
int i;
|
||||||
|
char ret = FALSE;
|
||||||
|
|
||||||
|
va_start(valist, num);
|
||||||
|
|
||||||
|
for (i = 0; i < num; i++) {
|
||||||
|
versionCompareTo[i] = va_arg(valist, int);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (num) {
|
||||||
|
case KERN_NUM_TO_MAJOR:
|
||||||
|
if (kernelVersion->major >= versionCompareTo[0])
|
||||||
|
ret = TRUE;
|
||||||
|
break;
|
||||||
|
case KERN_NUM_TO_MINOR:
|
||||||
|
if (kernelVersion->major > versionCompareTo[0] ||
|
||||||
|
kernelVersion->minor >= versionCompareTo[1])
|
||||||
|
ret = TRUE;
|
||||||
|
break;
|
||||||
|
case KERN_NUM_TO_REVISION:
|
||||||
|
if (kernelVersion->major > versionCompareTo[0] ||
|
||||||
|
kernelVersion->minor > versionCompareTo[1] ||
|
||||||
|
kernelVersion->revision >= versionCompareTo[2])
|
||||||
|
ret = TRUE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
msg(MSG_ERR, "%s: Unknown fixed argument %d. \n", __func__, num);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
va_end(valist);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|||||||
@@ -48,6 +48,10 @@
|
|||||||
#define ENV_CODES "WIRINGPI_CODES"
|
#define ENV_CODES "WIRINGPI_CODES"
|
||||||
#define ENV_GPIOMEM "WIRINGPI_GPIOMEM"
|
#define ENV_GPIOMEM "WIRINGPI_GPIOMEM"
|
||||||
|
|
||||||
|
#define KERN_NUM_TO_MAJOR 1
|
||||||
|
#define KERN_NUM_TO_MINOR 2
|
||||||
|
#define KERN_NUM_TO_REVISION 3
|
||||||
|
|
||||||
#define MODEL_UNKNOWN 0
|
#define MODEL_UNKNOWN 0
|
||||||
#define MODEL_ODROID_C1 1
|
#define MODEL_ODROID_C1 1
|
||||||
#define MODEL_ODROID_C2 2
|
#define MODEL_ODROID_C2 2
|
||||||
@@ -250,7 +254,7 @@ struct kernelVersionStruct
|
|||||||
int major;
|
int major;
|
||||||
int minor;
|
int minor;
|
||||||
int revision;
|
int revision;
|
||||||
int patch;
|
char patch[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct kernelVersionStruct *kernelVersion;
|
extern struct kernelVersionStruct *kernelVersion;
|
||||||
@@ -276,6 +280,7 @@ extern void setupCheck (const char *fName);
|
|||||||
extern void usingGpiomemCheck (const char *what);
|
extern void usingGpiomemCheck (const char *what);
|
||||||
extern void setUsingGpiomem (const unsigned int value);
|
extern void setUsingGpiomem (const unsigned int value);
|
||||||
extern void setKernelVersion (void);
|
extern void setKernelVersion (void);
|
||||||
|
extern char cmpKernelVersion (int num, ...);
|
||||||
|
|
||||||
// Core WiringPi functions
|
// Core WiringPi functions
|
||||||
extern void wiringPiVersion (int *major, char **minor);
|
extern void wiringPiVersion (int *major, char **minor);
|
||||||
|
|||||||
Reference in New Issue
Block a user