From c36e4add5a8b3ffaa0f8fb833fc97f7115011397 Mon Sep 17 00:00:00 2001 From: Alex Tereschenko Date: Mon, 5 Jun 2017 18:22:29 +0200 Subject: [PATCH] examples: make main loops finite to ensure proper cleanup Signed-off-by: Alex Tereschenko Signed-off-by: Brendan Le Foll --- examples/analogin_a0.c | 30 +++++++++++++++++++++++++----- examples/blink_onboard.c | 28 +++++++++++++++++++++++++--- examples/c++/AioA0.cpp | 23 ++++++++++++++++++++--- examples/c++/Isr-pin6.cpp | 6 ++++-- examples/gpio_read6.c | 28 ++++++++++++++++++++++++---- examples/isr_pin6.c | 4 +++- examples/java/AioA0.java | 3 ++- examples/java/BlinkIO.java | 2 +- examples/java/BlinkOnboard.java | 2 +- examples/java/CyclePwm3.java | 2 +- examples/java/FTDITest.java | 4 ++-- examples/java/GpioMmapped.java | 2 +- examples/java/GpioRead6.java | 2 +- examples/java/I2cCompass.java | 2 +- examples/java/SpiMCP4261.java | 2 +- 15 files changed, 112 insertions(+), 28 deletions(-) diff --git a/examples/analogin_a0.c b/examples/analogin_a0.c index 2fc12ae..d3554b1 100644 --- a/examples/analogin_a0.c +++ b/examples/analogin_a0.c @@ -1,5 +1,6 @@ /* * Author: Nandkishor Sonar + * Contributors: Alex Tereschenko * Copyright (c) 2014 Intel Corporation. * * Permission is hereby granted, free of charge, to any person obtaining @@ -23,30 +24,49 @@ */ #include -//! [Interesting] +#include + #include "mraa/aio.h" +int running = 0; + +void +sig_handler(int signo) +{ + if (signo == SIGINT) { + printf("closing down nicely\n"); + running = -1; + } +} + +//! [Interesting] int main() { mraa_aio_context adc_a0; uint16_t adc_value = 0; float adc_value_float = 0.0; + mraa_result_t r = MRAA_SUCCESS; adc_a0 = mraa_aio_init(0); if (adc_a0 == NULL) { return 1; } - for (;;) { + signal(SIGINT, sig_handler); + + while (running == 0) { adc_value = mraa_aio_read(adc_a0); adc_value_float = mraa_aio_read_float(adc_a0); fprintf(stdout, "ADC A0 read %X - %d\n", adc_value, adc_value); - fprintf(stdout, "ADC A0 read float - %.5f\n", adc_value_float); + fprintf(stdout, "ADC A0 read float - %.5f (Ctrl+C to exit)\n", adc_value_float); } - mraa_aio_close(adc_a0); + r = mraa_aio_close(adc_a0); + if (r != MRAA_SUCCESS) { + mraa_result_print(r); + } - return MRAA_SUCCESS; + return r; } //! [Interesting] diff --git a/examples/blink_onboard.c b/examples/blink_onboard.c index e544714..e4c7efa 100644 --- a/examples/blink_onboard.c +++ b/examples/blink_onboard.c @@ -1,5 +1,6 @@ /* * Author: Brendan Le Foll + * Contributors: Alex Tereschenko * Copyright (c) 2014 Intel Corporation. * * Permission is hereby granted, free of charge, to any person obtaining @@ -25,9 +26,21 @@ #include #include #include +#include #include "mraa/gpio.h" +int running = 0; + +void +sig_handler(int signo) +{ + if (signo == SIGINT) { + printf("closing down nicely\n"); + running = -1; + } +} + int main(int argc, char** argv) { @@ -35,6 +48,7 @@ main(int argc, char** argv) mraa_gpio_context gpio, gpio_in = NULL; const char* board_name = mraa_get_platform_name(); int ledstate = 0; + mraa_result_t r = MRAA_SUCCESS; switch (platform) { case MRAA_INTEL_GALILEO_GEN1: @@ -53,7 +67,7 @@ main(int argc, char** argv) gpio = mraa_gpio_init(13); } - fprintf(stdout, "Welcome to libmraa\n Version: %s\n Running on %s\n", mraa_get_version(), board_name); + fprintf(stdout, "Welcome to libmraa\n Version: %s\n Running on %s (Ctrl+C to exit)\n", mraa_get_version(), board_name); if (gpio == NULL) { @@ -73,8 +87,11 @@ main(int argc, char** argv) mraa_gpio_dir(gpio, MRAA_GPIO_OUT); - for (;;) { + signal(SIGINT, sig_handler); + + while (running == 0) { if (gpio_in != NULL && mraa_gpio_read(gpio_in) == 0) { + mraa_gpio_close(gpio_in); return 0; } ledstate = !ledstate; @@ -82,5 +99,10 @@ main(int argc, char** argv) sleep(1); } - return 0; + r = mraa_gpio_close(gpio); + if (r != MRAA_SUCCESS) { + mraa_result_print(r); + } + + return r; } diff --git a/examples/c++/AioA0.cpp b/examples/c++/AioA0.cpp index 86883ad..3c3cfe0 100644 --- a/examples/c++/AioA0.cpp +++ b/examples/c++/AioA0.cpp @@ -1,5 +1,6 @@ /* * Author: Brendan Le Foll + * Contributors: Alex Tereschenko * Copyright (c) 2014 Intel Corporation. * * Permission is hereby granted, free of charge, to any person obtaining @@ -22,9 +23,22 @@ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -//! [Interesting] +#include + #include "mraa.hpp" +int running = 0; + +void +sig_handler(int signo) +{ + if (signo == SIGINT) { + printf("closing down nicely\n"); + running = -1; + } +} + +//! [Interesting] int main() { @@ -34,13 +48,16 @@ main() a0 = new mraa::Aio(0); - for (;;) { + signal(SIGINT, sig_handler); + + while (running == 0) { adc_value = a0->read(); adc_value_float = a0->readFloat(); fprintf(stdout, "ADC A0 read %X - %d\n", adc_value, adc_value); - fprintf(stdout, "ADC A0 read float - %.5f\n", adc_value_float); + fprintf(stdout, "ADC A0 read float - %.5f (Ctrl+C to exit)\n", adc_value_float); } + delete a0; return MRAA_SUCCESS; } //! [Interesting] diff --git a/examples/c++/Isr-pin6.cpp b/examples/c++/Isr-pin6.cpp index bb37ca6..b308cac 100644 --- a/examples/c++/Isr-pin6.cpp +++ b/examples/c++/Isr-pin6.cpp @@ -1,5 +1,6 @@ /* * Author: Brendan Le Foll + * Contributors: Alex Tereschenko * Copyright (c) 2015 Intel Corporation. * * Permission is hereby granted, free of charge, to any person obtaining @@ -44,7 +45,8 @@ main() x->isr(mraa::EDGE_BOTH, &interrupt, NULL); - for (;;) { + int i = 100; + for (; i > 0; --i) { if (counter != oldcounter) { fprintf(stdout, "timeout counter == %d\n", counter); oldcounter = counter; @@ -54,5 +56,5 @@ main() } delete x; - return EXIT_SUCCESS; + return MRAA_SUCCESS; } diff --git a/examples/gpio_read6.c b/examples/gpio_read6.c index 550484b..f750ad7 100644 --- a/examples/gpio_read6.c +++ b/examples/gpio_read6.c @@ -1,5 +1,6 @@ /* * Author: Thomas Ingleby + * Contributors: Alex Tereschenko * Copyright (c) 2014 Intel Corporation. * * Permission is hereby granted, free of charge, to any person obtaining @@ -24,14 +25,28 @@ #include "stdio.h" #include "unistd.h" +#include #include "mraa.h" +int running = 0; + +void +sig_handler(int signo) +{ + if (signo == SIGINT) { + printf("closing down nicely\n"); + running = -1; + } +} + int main(int argc, char** argv) { + mraa_result_t r = MRAA_SUCCESS; + mraa_init(); - fprintf(stdout, "MRAA Version: %s\nStarting Read on IO6\n", mraa_get_version()); + fprintf(stdout, "MRAA Version: %s\nStarting Read on IO6 (Ctrl+C to exit)\n", mraa_get_version()); //! [Interesting] mraa_gpio_context gpio; @@ -40,13 +55,18 @@ main(int argc, char** argv) mraa_gpio_dir(gpio, MRAA_GPIO_IN); - for (;;) { + signal(SIGINT, sig_handler); + + while (running == 0) { fprintf(stdout, "Gpio is %d\n", mraa_gpio_read(gpio)); sleep(1); } - mraa_gpio_close(gpio); + r = mraa_gpio_close(gpio); //! [Interesting] + if (r != MRAA_SUCCESS) { + mraa_result_print(r); + } - return 0; + return r; } diff --git a/examples/isr_pin6.c b/examples/isr_pin6.c index eaa54e0..fa182f1 100644 --- a/examples/isr_pin6.c +++ b/examples/isr_pin6.c @@ -1,5 +1,6 @@ /* * Author: Brendan Le Foll + * Contributors: Alex Tereschenko * Copyright (c) 2014 Intel Corporation. * * Permission is hereby granted, free of charge, to any person obtaining @@ -52,7 +53,8 @@ main() mraa_gpio_isr(x, edge, &interrupt, NULL); - for (;;) { + int i = 100; + for (; i > 0; --i) { if (counter != oldcounter) { fprintf(stdout, "timeout counter == %d\n", counter); oldcounter = counter; diff --git a/examples/java/AioA0.java b/examples/java/AioA0.java index 89ef252..249e31d 100644 --- a/examples/java/AioA0.java +++ b/examples/java/AioA0.java @@ -44,11 +44,12 @@ public class AioA0 { public static void main(String[] args) { Aio a0 = new Aio(0); - while (true) { + for (int i = 100; i > 0; --i) { int adc_value = a0.read(); float adc_value_float = a0.readFloat(); System.out.println(String.format("ADC A0 read %X - %d", adc_value, adc_value)); System.out.println(String.format("ADC A0 read %.5f", adc_value_float)); + Thread.sleep(500); } } diff --git a/examples/java/BlinkIO.java b/examples/java/BlinkIO.java index 307a649..475da6e 100644 --- a/examples/java/BlinkIO.java +++ b/examples/java/BlinkIO.java @@ -61,7 +61,7 @@ public class BlinkIO { System.exit(1); } - while (true) { + for (int i = 100; i > 0; --i) { gpio.write(1); Thread.sleep(1000); gpio.write(0); diff --git a/examples/java/BlinkOnboard.java b/examples/java/BlinkOnboard.java index ee2bab4..e2599b8 100644 --- a/examples/java/BlinkOnboard.java +++ b/examples/java/BlinkOnboard.java @@ -64,7 +64,7 @@ public class BlinkOnboard { } boolean state = false; - while (true) { + for (int i = 100; i > 0; --i) { if (gpio_in != null && gpio_in.read() == 0) { return; } diff --git a/examples/java/CyclePwm3.java b/examples/java/CyclePwm3.java index 31bb25c..294c0e1 100644 --- a/examples/java/CyclePwm3.java +++ b/examples/java/CyclePwm3.java @@ -44,7 +44,7 @@ public class CyclePwm3 { pwm.enable(true); float value = 0; - while (true) { + for (int i = 100; i > 0; --i) { value += 0.01; pwm.write(value); Thread.sleep(50); diff --git a/examples/java/FTDITest.java b/examples/java/FTDITest.java index f7a1c00..f11cc34 100644 --- a/examples/java/FTDITest.java +++ b/examples/java/FTDITest.java @@ -50,8 +50,8 @@ public class FTDITest { /* Blink FTDI board LED */ Gpio led = new Gpio(514); led.dir(Dir.DIR_OUT); - for (int i = 0;; i = (i + 1) % 2) { - led.write(i); + for (int i = 100; i > 0; --i) { + led.write(i % 2); Thread.sleep(500); } } else { diff --git a/examples/java/GpioMmapped.java b/examples/java/GpioMmapped.java index ab85419..6f38fdc 100644 --- a/examples/java/GpioMmapped.java +++ b/examples/java/GpioMmapped.java @@ -50,7 +50,7 @@ public class GpioMmapped { gpio.useMmap(true); - while (true) { + for (int i = 1000; i > 0; --i) { gpio.write(1); Thread.sleep(50); gpio.write(0); diff --git a/examples/java/GpioRead6.java b/examples/java/GpioRead6.java index 65854ea..5883644 100644 --- a/examples/java/GpioRead6.java +++ b/examples/java/GpioRead6.java @@ -46,7 +46,7 @@ public class GpioRead6 { gpio.dir(Dir.DIR_IN); - while (true) { + for (int i = 100; i > 0; --i) { System.out.format("Gpio is %d\n", gpio.read()); Thread.sleep(1000); } diff --git a/examples/java/I2cCompass.java b/examples/java/I2cCompass.java index 93b75d9..0b93887 100644 --- a/examples/java/I2cCompass.java +++ b/examples/java/I2cCompass.java @@ -110,7 +110,7 @@ public class I2cCompass { conf_buf[1] = HMC5883L_CONT_MODE; i2c.write(conf_buf); - while (true) { + for (int i = 100; i > 0; --i) { i2c.address(HMC5883L_I2C_ADDR); i2c.writeByte(HMC5883L_DATA_REG); diff --git a/examples/java/SpiMCP4261.java b/examples/java/SpiMCP4261.java index 7ebda57..ef67cfe 100644 --- a/examples/java/SpiMCP4261.java +++ b/examples/java/SpiMCP4261.java @@ -43,7 +43,7 @@ public class SpiMCP4261 { System.out.println("Hello, SPI initialised"); byte data[] = {0x00, 100}; - while (true) { + for (int cnt = 100; cnt > 0; --cnt) { for (int i = 90; i < 130; i++) { data[1] = (byte) i; byte[] recv = spi.write(data);