From fce0c49ae7162ab637706144d56809caa14b8799 Mon Sep 17 00:00:00 2001 From: mstroh76 Date: Sun, 5 May 2024 14:43:13 +0200 Subject: [PATCH 1/4] #234 --- ..._test1_device.c => wiringpi_test1_sysfs.c} | 40 +++---------- ..._test2_device.c => wiringpi_test2_sysfs.c} | 40 +++---------- ...3_device.c => wiringpi_test3_device_wpi.c} | 38 ++----------- ..._device.c => wiringpi_test4_device_phys.c} | 38 ++----------- wiringPi/test/wiringpi_test5_default.c | 57 +++++++++++++++++++ wiringPi/test/wiringpi_test7_version.c | 11 ++++ wiringPi/test/wpi_test.h | 48 ++++++++++++++++ 7 files changed, 142 insertions(+), 130 deletions(-) rename wiringPi/test/{wiringpi_test1_device.c => wiringpi_test1_sysfs.c} (59%) rename wiringPi/test/{wiringpi_test2_device.c => wiringpi_test2_sysfs.c} (59%) rename wiringPi/test/{wiringpi_test3_device.c => wiringpi_test3_device_wpi.c} (62%) rename wiringPi/test/{wiringpi_test4_device.c => wiringpi_test4_device_phys.c} (62%) create mode 100644 wiringPi/test/wiringpi_test5_default.c create mode 100644 wiringPi/test/wiringpi_test7_version.c create mode 100644 wiringPi/test/wpi_test.h diff --git a/wiringPi/test/wiringpi_test1_device.c b/wiringPi/test/wiringpi_test1_sysfs.c similarity index 59% rename from wiringPi/test/wiringpi_test1_device.c rename to wiringPi/test/wiringpi_test1_sysfs.c index 189dd9f..be90616 100644 --- a/wiringPi/test/wiringpi_test1_device.c +++ b/wiringPi/test/wiringpi_test1_sysfs.c @@ -1,8 +1,7 @@ // WiringPi test program: Kernel char device interface / sysfs successor // Compile: gcc -Wall wiringpi_test1_device.c -o wiringpi_test1_device -lwiringPi -#include -#include +#include "wpi_test.h" #include #include #include @@ -12,33 +11,8 @@ const int GPIO = 19; const int GPIOIN = 26; -const int ToggleValue = 4; +const int ToggleValue = 4; -void CheckGPIO(int out) { - int in = digitalRead(GPIOIN); - int read = digitalRead(GPIO); - - int pass = 0; - if (out==in && in==read) { - pass = 1; - } - printf("GPIO%d = %d (GPIO%d = %d) -> %s\n", GPIOIN, in, GPIO, read, pass ? "passed":"failed" ); -} - -void digitalWriteEx(int pin, int mode) { - digitalWrite(pin, mode); - printf("out = %d ", mode); - delayMicroseconds(5000); - CheckGPIO(mode); -} - -void pullUpDnControlEx (int pin ,int mode) { - pullUpDnControl (pin, mode); - int out = mode==PUD_UP ? 1:0; - printf("in = %4s ", mode==PUD_UP ? "up":"down"); - delayMicroseconds(5000); - CheckGPIO(out); -} int main (void) { @@ -46,7 +20,7 @@ int main (void) { printf(" testing digitalWrite, digitalRead and pullUpDnControl\n"); if (wiringPiSetupSys() == -1) { - printf("wiringPiSetupGpioDevice failed\n\n"); + printf("wiringPiSetupSys failed\n\n"); exit(EXIT_FAILURE); } pinMode(GPIOIN, INPUT); @@ -54,9 +28,9 @@ int main (void) { printf("toggle %d times ...\n", ToggleValue); for (int loop=1; loop -#include +#include "wpi_test.h" #include #include #include @@ -12,33 +11,8 @@ const int GPIO = 19; const int GPIOIN = 26; -const int ToggleValue = 4; +const int ToggleValue = 4; -void CheckGPIO(int out) { - int in = digitalRead(GPIOIN); - int read = digitalRead(GPIO); - - int pass = 0; - if (out==in && in==read) { - pass = 1; - } - printf("GPIO%d = %d (GPIO%d = %d) -> %s\n", GPIOIN, in, GPIO, read, pass ? "passed":"failed" ); -} - -void digitalWriteEx(int pin, int mode) { - digitalWrite(pin, mode); - printf("out = %d ", mode); - delayMicroseconds(5000); - CheckGPIO(mode); -} - -void pullUpDnControlEx (int pin ,int mode) { - pullUpDnControl (pin, mode); - int out = mode==PUD_UP ? 1:0; - printf("in = %4s ", mode==PUD_UP ? "up":"down"); - delayMicroseconds(5000); - CheckGPIO(out); -} int main (void) { @@ -53,19 +27,19 @@ int main (void) { pinMode(GPIO, OUTPUT); printf("\nTest output\n"); - digitalWriteEx(GPIO, HIGH); + digitalWriteEx(GPIO, GPIOIN, HIGH); delayMicroseconds(600000); - digitalWriteEx(GPIO, LOW); + digitalWriteEx(GPIO, GPIOIN, LOW); delayMicroseconds(600000); printf("\nTest output off with pull up\n"); pinMode(GPIO, OUTPUT); - digitalWriteEx(GPIO, LOW); + digitalWriteEx(GPIO, GPIOIN, LOW); pullUpDnControl (GPIO, PUD_UP); pinMode(GPIO, PM_OFF); delayMicroseconds(600000); printf("out = off "); - CheckGPIO(HIGH); + CheckGPIO(GPIO, GPIOIN, HIGH); delayMicroseconds(600000); printf("\nTest output off with pull down\n"); @@ -73,7 +47,7 @@ int main (void) { pinMode(GPIO, PM_OFF); delayMicroseconds(600000); printf("out = off "); - CheckGPIO(LOW); + CheckGPIO(GPIO, GPIOIN, LOW); delayMicroseconds(600000); return(EXIT_SUCCESS); diff --git a/wiringPi/test/wiringpi_test3_device.c b/wiringPi/test/wiringpi_test3_device_wpi.c similarity index 62% rename from wiringPi/test/wiringpi_test3_device.c rename to wiringPi/test/wiringpi_test3_device_wpi.c index 362ae68..179f09c 100644 --- a/wiringPi/test/wiringpi_test3_device.c +++ b/wiringPi/test/wiringpi_test3_device_wpi.c @@ -1,8 +1,7 @@ // WiringPi test program: Kernel char device interface / sysfs successor // Compile: gcc -Wall wiringpi_test3_device.c -o wiringpi_test3_device -lwiringPi -#include -#include +#include "wpi_test.h" #include #include #include @@ -14,31 +13,6 @@ const int GPIO = 24; //BCM 19 const int GPIOIN = 25; //BCM 26; const int ToggleValue = 4; -void CheckGPIO(int out) { - int in = digitalRead(GPIOIN); - int read = digitalRead(GPIO); - - int pass = 0; - if (out==in && in==read) { - pass = 1; - } - printf("GPIO%d = %d (GPIO%d = %d) -> %s\n", GPIOIN, in, GPIO, read, pass ? "passed":"failed" ); -} - -void digitalWriteEx(int pin, int mode) { - digitalWrite(pin, mode); - printf("out = %d ", mode); - delayMicroseconds(5000); - CheckGPIO(mode); -} - -void pullUpDnControlEx (int pin ,int mode) { - pullUpDnControl (pin, mode); - int out = mode==PUD_UP ? 1:0; - printf("in = %4s ", mode==PUD_UP ? "up":"down"); - delayMicroseconds(5000); - CheckGPIO(out); -} int main (void) { @@ -53,19 +27,19 @@ int main (void) { pinMode(GPIO, OUTPUT); printf("\nTest output\n"); - digitalWriteEx(GPIO, HIGH); + digitalWriteEx(GPIO, GPIOIN, HIGH); delayMicroseconds(600000); - digitalWriteEx(GPIO, LOW); + digitalWriteEx(GPIO, GPIOIN, LOW); delayMicroseconds(600000); printf("\nTest output off with pull up\n"); pinMode(GPIO, OUTPUT); - digitalWriteEx(GPIO, LOW); + digitalWriteEx(GPIO, GPIOIN, LOW); pullUpDnControl (GPIO, PUD_UP); pinMode(GPIO, PM_OFF); delayMicroseconds(600000); printf("out = off "); - CheckGPIO(HIGH); + CheckGPIO(GPIO, GPIOIN, HIGH); delayMicroseconds(600000); printf("\nTest output off with pull down\n"); @@ -73,7 +47,7 @@ int main (void) { pinMode(GPIO, PM_OFF); delayMicroseconds(600000); printf("out = off "); - CheckGPIO(LOW); + CheckGPIO(GPIO, GPIOIN, LOW); delayMicroseconds(600000); return(EXIT_SUCCESS); diff --git a/wiringPi/test/wiringpi_test4_device.c b/wiringPi/test/wiringpi_test4_device_phys.c similarity index 62% rename from wiringPi/test/wiringpi_test4_device.c rename to wiringPi/test/wiringpi_test4_device_phys.c index f336212..9970aa5 100644 --- a/wiringPi/test/wiringpi_test4_device.c +++ b/wiringPi/test/wiringpi_test4_device_phys.c @@ -1,8 +1,7 @@ // WiringPi test program: Kernel char device interface / sysfs successor // Compile: gcc -Wall wiringpi_test4_device.c -o wiringpi_test4_device -lwiringPi -#include -#include +#include "wpi_test.h" #include #include #include @@ -14,31 +13,6 @@ const int GPIO = 35; //BCM 19 const int GPIOIN = 37; //BCM 26; const int ToggleValue = 4; -void CheckGPIO(int out) { - int in = digitalRead(GPIOIN); - int read = digitalRead(GPIO); - - int pass = 0; - if (out==in && in==read) { - pass = 1; - } - printf("GPIO%d = %d (GPIO%d = %d) -> %s\n", GPIOIN, in, GPIO, read, pass ? "passed":"failed" ); -} - -void digitalWriteEx(int pin, int mode) { - digitalWrite(pin, mode); - printf("out = %d ", mode); - delayMicroseconds(5000); - CheckGPIO(mode); -} - -void pullUpDnControlEx (int pin ,int mode) { - pullUpDnControl (pin, mode); - int out = mode==PUD_UP ? 1:0; - printf("in = %4s ", mode==PUD_UP ? "up":"down"); - delayMicroseconds(5000); - CheckGPIO(out); -} int main (void) { @@ -53,19 +27,19 @@ int main (void) { pinMode(GPIO, OUTPUT); printf("\nTest output\n"); - digitalWriteEx(GPIO, HIGH); + digitalWriteEx(GPIO, GPIOIN, HIGH); delayMicroseconds(600000); - digitalWriteEx(GPIO, LOW); + digitalWriteEx(GPIO, GPIOIN, LOW); delayMicroseconds(600000); printf("\nTest output off with pull up\n"); pinMode(GPIO, OUTPUT); - digitalWriteEx(GPIO, LOW); + digitalWriteEx(GPIO, GPIOIN, LOW); pullUpDnControl (GPIO, PUD_UP); pinMode(GPIO, PM_OFF); delayMicroseconds(600000); printf("out = off "); - CheckGPIO(HIGH); + CheckGPIO(GPIO, GPIOIN, HIGH); delayMicroseconds(600000); printf("\nTest output off with pull down\n"); @@ -73,7 +47,7 @@ int main (void) { pinMode(GPIO, PM_OFF); delayMicroseconds(600000); printf("out = off "); - CheckGPIO(LOW); + CheckGPIO(GPIO, GPIOIN, LOW); delayMicroseconds(600000); return(EXIT_SUCCESS); diff --git a/wiringPi/test/wiringpi_test5_default.c b/wiringPi/test/wiringpi_test5_default.c new file mode 100644 index 0000000..e025aaf --- /dev/null +++ b/wiringPi/test/wiringpi_test5_default.c @@ -0,0 +1,57 @@ +// WiringPi test program: Kernel char device interface / sysfs successor +// Compile: gcc -Wall wiringpi_test1_device.c -o wiringpi_test1_device -lwiringPi + +#include "wpi_test.h" +#include +#include +#include +#include +#include + + +const int GPIO = 19; +const int GPIOIN = 26; +const int ToggleValue = 4; + + +int main (void) { + + printf("WiringPi GPIO test program 1 (using GPIO%d (output) and GPIO%d (input))\n", GPIO, GPIOIN); + printf(" testing digitalWrite, digitalRead and pullUpDnControl\n"); + + if (wiringPiSetupGpio() == -1) { + printf("wiringPiSetupGpio failed\n\n"); + exit(EXIT_FAILURE); + } + pinMode(GPIOIN, INPUT); + pinMode(GPIO, OUTPUT); + + printf("toggle %d times ...\n", ToggleValue); + for (int loop=1; loop +#include + +#define COLORDEF "\x1B[0m" +#define COLORRED "\x1B[31m" +#define COLORGRN "\x1B[32m" + +void CheckGPIO(int GPIO, int GPIOIN, int out) { + int in = digitalRead(GPIOIN); + int read = digitalRead(GPIO); + + int pass = 0; + if (out==in && in==read) { + pass = 1; + } + if (pass) { + printf("GPIO%d = %d (GPIO%d = %d) -> %spassed%s\n", GPIOIN, in, GPIO, read, COLORGRN, COLORDEF ); + } else { + printf("GPIO%d = %d (GPIO%d = %d) -> %sfailed%s\n", GPIOIN, in, GPIO, read, COLORRED, COLORDEF ); + } +} + + +void digitalWriteEx(int GPIO, int GPIOIN, int mode) { + digitalWrite(GPIO, mode); + printf("out = %d ", mode); + delayMicroseconds(5000); + CheckGPIO(GPIO, GPIOIN, mode); +} + + +void pullUpDnControlEx (int GPIO, int GPIOIN, int mode) { + pullUpDnControl (GPIO, mode); + int out = mode==PUD_UP ? 1:0; + printf("in = %4s ", mode==PUD_UP ? "up":"down"); + delayMicroseconds(5000); + CheckGPIO(GPIO, GPIOIN, out); +} + + +void CheckSame(const char* msg, int value, int expect) { + if (value==expect) { + printf("%s -> %spassed%s\n", msg, COLORGRN, COLORDEF ); + } else { + printf("%s -> %sfailed%s\n", msg, COLORRED, COLORDEF ); + } +} From 7558ac663ae5850747f891c3f3314b6ff2904d26 Mon Sep 17 00:00:00 2001 From: mstroh76 Date: Sun, 5 May 2024 14:46:52 +0200 Subject: [PATCH 2/4] 234 --- wiringPi/test/Makefile | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 wiringPi/test/Makefile diff --git a/wiringPi/test/Makefile b/wiringPi/test/Makefile new file mode 100644 index 0000000..6fb564f --- /dev/null +++ b/wiringPi/test/Makefile @@ -0,0 +1,38 @@ +CC = gcc +CFLAGS = -Wall +LDFLAGS = + +tests = wiringpi_test1_sysfs wiringpi_test2_sysfs wiringpi_test3_device_wpi wiringpi_test4_device_phys wiringpi_test5_default wiringpi_test6_isr wiringpi_test7_version + +all: $(tests) + +wiringpi_test1_sysfs: + ${CC} ${CFLAGS} wiringpi_test1_sysfs.c -o wiringpi_test1_sysfs -lwiringPi + +wiringpi_test2_sysfs: + ${CC} ${CFLAGS} wiringpi_test2_sysfs.c -o wiringpi_test2_sysfs -lwiringPi + +wiringpi_test3_device_wpi: + ${CC} ${CFLAGS} wiringpi_test3_device_wpi.c -o wiringpi_test3_device_wpi -lwiringPi + +wiringpi_test4_device_phys: + ${CC} ${CFLAGS} wiringpi_test4_device_phys.c -o wiringpi_test4_device_phys -lwiringPi + +wiringpi_test5_default: + ${CC} ${CFLAGS} wiringpi_test5_default.c -o wiringpi_test5_default -lwiringPi + +wiringpi_test6_isr: + ${CC} ${CFLAGS} wiringpi_test6_isr.c -o wiringpi_test6_isr -lwiringPi + +wiringpi_test7_version: + ${CC} ${CFLAGS} wiringpi_test7_version.c -o wiringpi_test7_version -lwiringPi + +test: + for t in $(tests) ; do \ + echo === unit test: $${t} === ; \ + time ./$${t} ; \ + echo ; echo ; \ + done + +clean: + for t in $(tests) ; do rm -fv $${t} ; done \ No newline at end of file From 063afd100e92e117aa8df17e95797fa962be9662 Mon Sep 17 00:00:00 2001 From: mstroh76 Date: Sun, 5 May 2024 14:50:21 +0200 Subject: [PATCH 3/4] #234 --- wiringPi/test/wiringpi_test6_isr.c | 170 +++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 wiringPi/test/wiringpi_test6_isr.c diff --git a/wiringPi/test/wiringpi_test6_isr.c b/wiringPi/test/wiringpi_test6_isr.c new file mode 100644 index 0000000..bae44b2 --- /dev/null +++ b/wiringPi/test/wiringpi_test6_isr.c @@ -0,0 +1,170 @@ +// WiringPi test program: Kernel char device interface / sysfs successor +// Compile: gcc -Wall wiringpi_test1_device.c -o wiringpi_test1_device -lwiringPi + +#include "wpi_test.h" +#include +#include +#include +#include +#include + + +const int GPIO = 19; +const int GPIOIN = 26; +const int ToggleValue = 4; + + +static volatile int globalCounter; +volatile long long gStartTime, gEndTime; + + +static void wfi (void) { + struct timeval now; + + gettimeofday(&now, 0); + if (0==gStartTime) { + gStartTime = now.tv_sec*1000000LL + now.tv_usec; + } else { + gEndTime = now.tv_sec*1000000LL + now.tv_usec; + } + globalCounter++; +} + + +double StartSequence (int Enge, int OUTpin) { + int expected; + double timeExpected; + + gStartTime = 0; + gEndTime = 0; + globalCounter = 0; + printf("Start\n"); + digitalWrite(OUTpin, HIGH); + delay(200); + digitalWrite(OUTpin, LOW); + delay(100); + digitalWrite(OUTpin, HIGH); + delay(200); + digitalWrite(OUTpin, LOW); + delay(100); + printf("Stop\n"); + int globalCounterCopy = globalCounter; + + if (INT_EDGE_BOTH == Enge) { + expected = 4; + timeExpected = 500; + } else { + expected = 2; + timeExpected = 300; + } + + if (globalCounter==expected) { + double fTime = (gEndTime - gStartTime) / 1000000.0; + printf("IRQ worked %g sec (~%gs expected)", fTime, timeExpected/1000.0); + double diff = fTime-(timeExpected/1000.0); + if(diff<0.05 && diff>0) { + printf(" -> %spassed%s\n", COLORGRN, COLORDEF); + } else { + printf(" -> %sfailed%s\n", COLORRED, COLORDEF); + } + + return fTime; + } else { + printf("IRQ not worked got %d iterations (%d exprected)\n\n", globalCounterCopy, expected); + return 0; + } +} + + +double DurationTime(int Enge, int OUTpin, int IRQpin) { + struct timeval now; + double fTime = 0.0; + + gStartTime = 0; + gEndTime = 0; + globalCounter = 0; + printf("Start\n"); + + if (INT_EDGE_RISING == Enge) { + digitalWrite(OUTpin, LOW); + wiringPiISR (IRQpin, INT_EDGE_RISING, &wfi) ; + sleep(1); + gettimeofday(&now, 0); + gStartTime = now.tv_sec*1000000LL + now.tv_usec; + digitalWrite(OUTpin, HIGH); + delay(20); + digitalWrite(OUTpin, LOW); + } else if (INT_EDGE_FALLING == Enge) { + digitalWrite(OUTpin, HIGH); + wiringPiISR (IRQpin, INT_EDGE_FALLING, &wfi) ; + sleep(1); + gettimeofday(&now, 0); + gStartTime = now.tv_sec*1000000LL + now.tv_usec; + digitalWrite(OUTpin, LOW); + } + + sleep(1); + fTime = (gEndTime - gStartTime); + printf("IRQ detect time %g usec", fTime); + if (fTime<2000 && fTime>0) { + printf(" -> %spassed%s\n", COLORGRN, COLORDEF); + } else { + printf(" -> %sfailed%s\n", COLORRED, COLORDEF); + } + wiringPiISRStop (IRQpin) ; + + return fTime; +} + +int main (void) { + const int IRQpin = GPIOIN ; + const int OUTpin = GPIO ; + int major, minor; + + wiringPiVersion(&major, &minor); + + printf("WiringPi GPIO test program 1 (using GPIO%d (output) and GPIO%d (input))\n", GPIO, GPIOIN); + printf(" testing irq\n"); + + printf("\nISR test (WiringPi %d.%d)\n", major, minor); + + wiringPiSetupGpio() ; + + pinMode(IRQpin, INPUT); + pinMode(OUTpin, OUTPUT); + digitalWrite (OUTpin, LOW) ; + + + printf("Testing IRQ @ GPIO%d with trigger @ GPIO%d rising\n", IRQpin, OUTpin); + wiringPiISR (IRQpin, INT_EDGE_RISING, &wfi) ; + sleep(1); + StartSequence (INT_EDGE_RISING, OUTpin); + printf("Testing close\n"); + + wiringPiISRStop (IRQpin) ; + + printf("Testing IRQ @ GPIO%d with trigger @ GPIO%d falling\n", IRQpin, OUTpin); + wiringPiISR (IRQpin, INT_EDGE_FALLING, &wfi) ; + sleep(1); + StartSequence (INT_EDGE_FALLING, OUTpin); + printf("Testing close\n"); + wiringPiISRStop (IRQpin) ; + + printf("Testing IRQ @ GPIO%d with trigger @ GPIO%d both\n", IRQpin, OUTpin); + wiringPiISR (IRQpin, INT_EDGE_BOTH, &wfi) ; + sleep(1); + StartSequence (INT_EDGE_BOTH, OUTpin); + printf("Testing close\n"); + wiringPiISRStop (IRQpin) ; + + for (int count=0; count<2; count++) { + printf("Measuring duration IRQ @ GPIO%d with trigger @ GPIO%d rising\n", IRQpin, OUTpin); + DurationTime(INT_EDGE_RISING, OUTpin, IRQpin); + + printf("Measuring duration IRQ @ GPIO%d with trigger @ GPIO%d falling\n", IRQpin, OUTpin); + DurationTime(INT_EDGE_FALLING, OUTpin, IRQpin); + } + pinMode(OUTpin, INPUT); + + return 0 ; +} From c28abd66618bb958e471c8f78c56fcdb86e6dbec Mon Sep 17 00:00:00 2001 From: mstroh76 Date: Sun, 5 May 2024 15:02:34 +0200 Subject: [PATCH 4/4] #234 --- VERSION | 2 +- version.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/VERSION b/VERSION index eb39e53..2f4b607 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.3 +3.4 diff --git a/version.h b/version.h index 6f3b26e..a018dc1 100644 --- a/version.h +++ b/version.h @@ -1,3 +1,3 @@ -#define VERSION "3.3" +#define VERSION "3.4" #define VERSION_MAJOR 3 -#define VERSION_MINOR 3 +#define VERSION_MINOR 4