1e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang/*
2e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang * Author: Brendan Le Foll <brendan.le.foll@intel.com>
3e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang * Copyright (c) 2014 Intel Corporation.
4e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang *
5e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang * Permission is hereby granted, free of charge, to any person obtaining
6e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang * a copy of this software and associated documentation files (the
7e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang * "Software"), to deal in the Software without restriction, including
8e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang * without limitation the rights to use, copy, modify, merge, publish,
9e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang * distribute, sublicense, and/or sell copies of the Software, and to
10e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang * permit persons to whom the Software is furnished to do so, subject to
11e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang * the following conditions:
12e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang *
13e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang * The above copyright notice and this permission notice shall be
14e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang * included in all copies or substantial portions of the Software.
15e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang *
16e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang */
24e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang
25e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang#include <stdio.h>
26e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang#include <unistd.h>
27e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang#include <errno.h>
28e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang#include <signal.h>
29e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang#include <stdlib.h>
30e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang
31e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang#include "mraa.h"
32e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang
33e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang#define DEFAULT_IOPIN 8
34e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang
35e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhangint running = 0;
36e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhangstatic int iopin;
37e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang
38e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhangvoid
39e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhangsig_handler(int signo)
40e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang{
41e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    if (signo == SIGINT) {
42e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang        printf("closing IO%d nicely\n", iopin);
43e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang        running = -1;
44e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    }
45e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang}
46e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang
47e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhangint
48e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhangmain(int argc, char** argv)
49e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang{
50e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    mraa_result_t r = MRAA_SUCCESS;
51e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    iopin = DEFAULT_IOPIN;
52e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang
53e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    if (argc < 2) {
54e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang        printf("Provide an int arg if you want to flash on something other than %d\n", DEFAULT_IOPIN);
55e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    } else {
56e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang        iopin = strtol(argv[1], NULL, 10);
57e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    }
58e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang
59e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    mraa_init();
60e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    fprintf(stdout, "MRAA Version: %s\nStarting Blinking on IO%d\n", mraa_get_version(), iopin);
61e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang
62e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    mraa_gpio_context gpio;
63e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    gpio = mraa_gpio_init(iopin);
64e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    if (gpio == NULL) {
65e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang        fprintf(stderr, "Are you sure that pin%d you requested is valid on your platform?", iopin);
66e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang        exit(1);
67e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    }
68e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    printf("Initialised pin%d\n", iopin);
69e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang
70e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    // set direction to OUT
71e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    r = mraa_gpio_dir(gpio, MRAA_GPIO_OUT);
72e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    if (r != MRAA_SUCCESS) {
73e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang        mraa_result_print(r);
74e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    }
75e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang
76e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    signal(SIGINT, sig_handler);
77e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang
78e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    while (running == 0) {
79e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang        r = mraa_gpio_write(gpio, 0);
80e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang        if (r != MRAA_SUCCESS) {
81e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang            mraa_result_print(r);
82e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang        } else {
83e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang            printf("off\n");
84e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang        }
85e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang
86e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang        sleep(1);
87e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang
88e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang        r = mraa_gpio_write(gpio, 1);
89e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang        if (r != MRAA_SUCCESS) {
90e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang            mraa_result_print(r);
91e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang        } else {
92e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang            printf("on\n");
93e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang        }
94e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang
95e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang        sleep(1);
96e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    }
97e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang
98e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    r = mraa_gpio_close(gpio);
99e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    if (r != MRAA_SUCCESS) {
100e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang        mraa_result_print(r);
101e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    }
102e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang
103e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang    return r;
104e595125fe2f8ed6af763b9da7cfd817f576958dcJianxun Zhang}
105