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++; } }
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; }