From a54edcc4aa21974f81c58ac2cf54c81ea8f128e5 Mon Sep 17 00:00:00 2001 From: joan Date: Wed, 3 Sep 2014 20:13:49 +0100 Subject: [PATCH] V21 --- checklib.c | 709 ----------------------------------------------------- 1 file changed, 709 deletions(-) delete mode 100644 checklib.c diff --git a/checklib.c b/checklib.c deleted file mode 100644 index bc2316d..0000000 --- a/checklib.c +++ /dev/null @@ -1,709 +0,0 @@ -/* -This is free and unencumbered software released into the public domain. - -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. - -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -For more information, please refer to -*/ - -/* -This version is for pigpio version 3+ -*/ - -#include -#include -#include -#include -#include - -#include "pigpio.h" - -#define GREENLED 16 -#define SDDET 47 -#define SDCLK 48 - -int test =1; -int passes=0; -int expect=0; - -struct timeval libInitTime; - -int GPIO=4; - -unsigned inited, count, onMicros, offMicros; - -void tick(void) -{ - /* count ticks - */ - - static struct timeval lastTime; - struct tm tmp; - struct timeval nowTime; - char buf[32]; - - gettimeofday(&nowTime, NULL); - - localtime_r(&nowTime.tv_sec, &tmp); - strftime(buf, sizeof(buf), "%F@%T", &tmp); - - printf("%s.%03d\n", buf, (int)nowTime.tv_usec/1000); - - /*timersub(&nowTime, &lastTime, &diffTime);*/ - - lastTime = nowTime; - - if (inited) - { - count++; - } - else - { - count = 1; - - gettimeofday(&lastTime, NULL); - - inited = 1; - } -} - -void tickEx(void * userdata) -{ -} - -void alert(int gpio, int level, uint32_t tick) -{ - /* accumulate number of level changes and average time gpio - was on and off. Hopefully the ratio should reflect the - selected pulsewidth. - */ - - static uint32_t lastTick; - - uint32_t diffTick; - - if (inited) - { - count++; - - diffTick = tick - lastTick; - - if (level == 0) - { - /* elapsed time was on */ - onMicros = onMicros + diffTick; - } - else - { - /* elapsed time was off */ - offMicros = offMicros + diffTick; - } - lastTick = tick; - } - else - { - count = 1; - lastTick = tick; - onMicros = 0; - offMicros = 0; - inited = 1; - } -} - -void alertEx(int gpio, int level, uint32_t tick, void * userdata) -{ -} - -static void timerTest(unsigned waitfor, unsigned ms) -{ - unsigned ep, ep1, ep2; - - ep= (waitfor*1000)/ms; ep1=ep-1; ep2=ep+1; - - printf("Timer ticktest (%d ms), wait %d seconds\n", ms, waitfor); - printf("Expect %d to %d ticks\n", ep1, ep2); - - inited = 0; - gpioSetTimerFunc(0, ms, tick); - sleep(waitfor); - gpioSetTimerFunc(0, ms, NULL); - - /* and the stats were? */ - - printf("ticks=%d\n", count); - - if ((count>=ep1) && (count<=ep2)) - { - printf("TEST %d: PASS\n\n", test); - ++passes; - } - else - { - printf("TEST %d: FAILED\n\n", test); - } - - ++test; -} - -static void servoTest(unsigned waitfor, unsigned pulsewidth) -{ - int ticks, on, off; - unsigned expectedPulses, ep1, ep2; - float expectedRatio, er1, er2; - float ratio; - - expectedPulses=(500*waitfor)/10; ep1=(490*waitfor)/10; ep2=(510*waitfor)/10; - expectedRatio = (float)(20000-pulsewidth)/(float)pulsewidth; - er1=expectedRatio*0.9; er2=expectedRatio*1.1; - - printf("Servo pulse test (%d micros), wait %d seconds\n", - pulsewidth, waitfor); - printf("Expect %d pulses and an off/on ratio of %.1f\n", - expectedPulses, expectedRatio); - - gpioServo(GPIO, pulsewidth); - - inited = 0; - gpioSetAlertFunc(GPIO, alert); - sleep(waitfor); - gpioSetAlertFunc(GPIO, NULL); - - gpioServo(GPIO, 0); - - /* and the stats were? */ - - ticks = count/2; on = onMicros/1000; off = offMicros/1000; - ratio = (float)off/(float)on; - - printf("servo pulses=%d on ms=%d off ms=%d ratio=%.1f\n", ticks, on, off, ratio); - - if ( ((ticks>ep1) && (tickser1) && (ratioer1) && (ratio0; i--) - { - expMicros = i * 100000; - - if (timetype == PI_TIME_ABSOLUTE) - { - gpioTime(PI_TIME_ABSOLUTE, &secs, µs); - - secs += (i / 10); - micros += (i % 10) * 100000; - - if (micros > 999999) { secs++; micros -= 1000000; } - } - else - { - secs = (i / 10); - micros = (i % 10) * 100000; - } - - gettimeofday(&t1, NULL); - - gpioSleep(timetype, secs, micros); - - gettimeofday(&t2, NULL); - - timersub(&t2, &t1, &tD); - - diffMicros = (tD.tv_sec*1000000)+tD.tv_usec; - - errMicros = diffMicros - expMicros; - - if (errMicros < 500) ok++; - - printf("secs=%d micros=%d err=%d\n", secs, micros, errMicros); - } - - if (ok == 15) - { - printf("TEST %d: PASS\n\n", test); - ++passes; - } - else printf("TEST %d: FAILED\n\n", test); - - ++test; -} - -int countBank2PinChanges(int pin, int loops) -{ - static uint32_t old=0; - - uint32_t new, changes; - int i, count; - - count = 0; - - for (i=0;i200000 for pin 48.\n"); - printf("Expect the green LED to flash.\n\n"); - - ok = 0; - - for (i=0; i<20; i++) - { - gpioWrite_Bits_0_31_Set(1< 200000)) ok++; - } - - if (ok == 20) - { - printf("TEST %d: PASS\n\n", test); - ++passes; - } - else printf("TEST %d: FAILED\n\n", test); - - ++test; -} - -void checkGpioTick(void) -{ - uint32_t startTick, endTick; - int diffTick; - - printf("Library gpioTick Test\n"); - printf("Expect approximately 2 million ticks to have elapsed.\n\n"); - - startTick = gpioTick(); - sleep(2); /* 2 seconds being 2 million ticks */ - endTick = gpioTick(); - - diffTick = endTick - startTick; - - printf("%d ticks have elapsed\n", diffTick); - - if ((diffTick >= 1990000) && (diffTick <= 2010000)) - { - printf("TEST %d: PASS\n\n", test); - ++passes; - } - else printf("TEST %d: FAILED\n\n", test); - - ++test; -} - -int main(int argc, char *argv[]) -{ - - int waitfor; - - int version, micros=5, millis=100; - - if (argc > 1) GPIO = atoi(argv[1]); - - fprintf(stderr, -"*****************************************************************\n"\ -"* WARNING: This program sends pulses to gpio #%02d *\n"\ -"* Make sure that nothing which could be damaged is *\n"\ -"* connected to this gpio. A LED or similar should be OK *\n"\ -"* although nothing needs to be connected. *\n"\ -"* *\n"\ -"* NOTE: many of the tests are statistical in nature, assuming *\n"\ -"* that events of a short nature will on average be detected *\n"\ -"* by sampling. Don't fret if a particular test fails, try *\n"\ -"* running the tests again. *\n"\ -"* *\n"\ -"* You may choose another gpio by specifying its number on *\n"\ -"* the command line, e.g. sudo ./checklib 17 will use gpio 17. *\n"\ -"* *\n"\ -"* Press y (RETURN) to continue, any other character to cancel. *\n"\ -"*****************************************************************\n", GPIO); - - if (getchar() != 'y') return 0; - - printf("Initialisation test\n"); - - if (argc > 2) micros = atoi(argv[2]); - - if (argc > 3) millis = atoi(argv[3]); - - gpioCfgBufferSize(millis); - - gpioCfgClock(micros, PI_CLOCK_PCM, PI_CLOCK_PLLD); - - gettimeofday(&libInitTime, NULL); - - version = gpioInitialise(); - - if (version<0) - { - printf("TEST %d: FAILED\nFATAL ERROR\n", test); - return 1; - } - else - { - printf("TEST %d: PASS, pigpio version is %d\n\n", test, version); - ++passes; - } - - ++test; - - waitfor = 2; - - printf("Alert function test, wait %d seconds\n", waitfor); - printf("No detected events on gpio 4 expected\n"); - - inited = 0; - gpioSetAlertFunc(GPIO, alert); - sleep(waitfor); - gpioSetAlertFunc(GPIO, NULL); - - printf("Events=%d\n", count); - - if (count) printf("TEST %d: FAILED\n\n", test); - else - { - printf("TEST %d: PASS\n\n", test); - ++passes; - } - - ++test; - - servoTest(10, 500); - servoTest(10, 1500); - servoTest(10, 2500); - - pwmTest(5, 50); - pwmTest(5, 100); - pwmTest(5, 150); - pwmTest(5, 200); - - timerTest(5, 100); - timerTest(5, 250); - timerTest(5, 333); - timerTest(5, 1000); - - checkValidation(); - - checkGpioTime(); - - checkGpioSleep(PI_TIME_RELATIVE); - - checkGpioSleep(PI_TIME_ABSOLUTE); - - checkReadWriteBits(); - - checkGpioTick(); - - printf("Hardware revision is %d\n\n", gpioHardwareRevision()); - - printf("Summary: %d tests, %d passes\n", test-1, passes); - - gpioTerminate(); /* stop DMA and free memory */ - - return (passes - (test-1)); -} -