/********************************************************************************* * Copyright: (C) 2018 LingYun IoT System Studio * All rights reserved. * * Filename: led.c * Description: This file is used to control RGB 3-colours LED * * pi@raspberrypi:~ $ gpio readall show BCM and wPi pinmap * * LED BCM wPi * G ---- GPIO.13 ---- GPIO.23 * R ---- GPIO.19 ---- GPIO.24 * B ---- GPIO.26 ---- GPIO.25 * I ---- GND ---- * * Version: 1.0.0(2018/10/14) * Author: Guo Wenxue * ChangeLog: 1, Release initial version on "2018/10/14 12:13:26" * ********************************************************************************/ #include #include #include #include #include #include #include #include #include "led.h" #define msleep(x) usleep( 1000*(x) ) #define DELAY 500 int main(int argc, char *argv[]) { init_led(); while(1) { turn_led(LED_R, ON); msleep(DELAY); turn_led(LED_R, OFF); msleep(DELAY); turn_led(LED_G, ON); msleep(DELAY); turn_led(LED_G, OFF); msleep(DELAY); turn_led(LED_B, ON); msleep(DELAY); turn_led(LED_B, OFF); msleep(DELAY); } return 0; } #ifdef CONFIG_USE_WIRINGPI #include void init_led(void) { int i; wiringPiSetup(); for(i=0; i=LED_MAX ) return -1; if( OFF == cmd ) digitalWrite (led_gpio[which], LOW); else digitalWrite (led_gpio[which], HIGH); return 0; } #else /* use libgpiod library */ #include #if 1 /* Use libgpiod lowlevel API */ struct gpiod_chip* chip; void init_led(void) { chip = gpiod_chip_open_by_name("gpiochip0"); if( !chip ) { printf("gpiod open chip failure, maybe you need running as root\n"); exit(1); } } int turn_led(int which, int cmd) { int rv = 0; struct gpiod_line* line; line = gpiod_chip_get_line(chip, led_gpio[which]); if( !line ) { rv = -2; } gpiod_line_request_output(line, "led", 0); if( OFF == cmd ) { gpiod_line_set_value(line, 0); } else { gpiod_line_set_value(line, 1); } } #else /* use libgpiod ctxless high level API */ void init_led(void) { } void gpiod_ctxless_cb(void *data) { sleep(1); } int turn_led(int which, int cmd) { if( OFF == cmd ) gpiod_ctxless_set_value("gpiochip0", led_gpio[which], 0, false, "led", gpiod_ctxless_cb, NULL); else gpiod_ctxless_set_value("gpiochip0", led_gpio[which], 1, false, "led", gpiod_ctxless_cb, NULL); } #endif #endif