Exemplo n.º 1
0
int main()
{
	struct sigaction sa;
	pthread_t thread;
   sigemptyset(&sa.sa_mask);
   sa.sa_flags = 0;
   sa.sa_handler = sigintHandler;

	if (sigaction(SIGINT, &sa, NULL) == -1)
	{
		printf("MAIN: reserving sigaction failed!\n");
		return -1;
	}

	
	GPIO_export(SWITCH);
	GPIO_export(LED);
	GPIO_direction(SWITCH_DIRECTION_PATH,"in");
	GPIO_direction(LED_DIRECTION_PATH,"out");
	GPIO_write(LED_PATH, LED_OFF);

	if(pthread_create(&thread, NULL , blink5Hz , NULL))
	{
		printf("MAIN: error: Thread-creation failed!\n");
		return -1;
	}

	struct timespec request;
	request.tv_nsec = 50000000;
	request.tv_sec = request.tv_nsec / 1000000000;

	printf("Push the Button ..");fflush(stdout);
	while(!SHUTDOWN)
	{
		while(strcmp(GPIO_read(SWITCH_PATH),LOW) != 0)
			clock_nanosleep(CLOCK_REALTIME, SLEEP_FLAG, &request, NULL);

		while(strcmp(GPIO_read(SWITCH_PATH),HIGH) != 0)
			clock_nanosleep(CLOCK_REALTIME, SLEEP_FLAG, &request, NULL);
		
		count++;	
	}
}
Exemplo n.º 2
0
int GPIO_open()
{
    if (g_init == 1) {
        fprintf(stderr,
                "GPIO_open: I/O expander is already initialised.\n");
        return 0;
    }
    g_init = 1;
    fd = open(I2C_BUS, O_RDWR);
    if (fd == -1) {
        fprintf(stderr, "GPIO_open error: %s\n", strerror(errno));
        return -1;
    }
    if (ioctl(fd, I2C_SLAVE, I2C_ADDR) == -1) {
        fprintf(stderr, "GPIO_open: ioctl error: %s\n", strerror(errno));
        return -1;
    }
    /* Configure IO expander */
    int r = 0;
    r += GPIO_direction(PortA, PORTA_IODIR);
    r += GPIO_direction(PortB, PORTB_IODIR);
    r += exp_write(PortA, IOPOL, PORTA_IOPOL);
    r += exp_write(PortB, IOPOL, PORTB_IOPOL);
    r += exp_write(PortA, GPPU, PORTA_GPPU);
    r += exp_write(PortB, GPPU, PORTB_GPPU);

    /* Configure the GPIO pins */
    GPIOA_buf.reg = GPIOA_INIT;
    GPIOB_buf.reg = GPIOB_INIT;
    r += GPIO_write(PortA);
    r += GPIO_write(PortB);
    if (r == 0) {
        return r;
    }
    g_init = 0;
    fprintf(stderr, "GPIO_open: initialisation Error: %d\n", r);
    return r;
}