drivertest.c
来自「arm 平台下 linux gpio 的驱动」· C语言 代码 · 共 739 行 · 第 1/2 页
C
739 行
read_from_fd(fProcDirection,buffer, BUF_SIZE); passed = (strcmp(buffer,toTest)==0); all_passed = all_passed && passed; fprintf(stderr, "Writing 01010101 to /proc/driver/soekris_gpio %s\n", passed?"ok":"not ok"); // Set everything to output toTest = "11111111\n"; write_to_fd(fProcDirection, toTest,strlen(toTest)); // write 00000000 to GPIO toTest = "00000000\n"; write_to_fd(fProcGPIO, toTest,strlen(toTest)); read_from_fd(fProcGPIO,buffer, BUF_SIZE); passed = (strcmp(buffer,toTest)==0); all_passed = all_passed && passed; fprintf(stderr, "Writing 00000000 to /proc/driver/soekris_gpio %s\n", passed?"ok":"not ok"); // write 11111111 to GPIO toTest = "11111111\n"; write_to_fd(fProcGPIO, toTest,strlen(toTest)); read_from_fd(fProcGPIO,buffer, BUF_SIZE); passed = (strcmp(buffer,toTest)==0); all_passed = all_passed && passed; fprintf(stderr, "Writing 11111111 to /proc/driver/soekris_gpio %s\n", passed?"ok":"not ok"); // write 10101010 to GPIO toTest = "10101010\n"; write_to_fd(fProcGPIO, toTest,strlen(toTest)); read_from_fd(fProcGPIO,buffer, BUF_SIZE); passed = (strcmp(buffer,toTest)==0); all_passed = all_passed && passed; fprintf(stderr, "Writing 10101010 to /proc/driver/soekris_gpio %s\n", passed?"ok":"not ok"); // write 01010101 to GPIO toTest = "01010101\n"; write_to_fd(fProcGPIO, toTest,strlen(toTest)); read_from_fd(fProcGPIO,buffer, BUF_SIZE); passed = (strcmp(buffer,toTest)==0); all_passed = all_passed && passed; fprintf(stderr, "Writing 01010101 to /proc/driver/soekris_gpio %s\n", passed?"ok":"not ok"); // Set everything to input // the way the GPIOs are connected on the 4501, we expect 11110000 // no matter what we write to the port toTest = "00000000\n"; write_to_fd(fProcDirection, toTest,strlen(toTest)); // write 00000000 to GPIO toTest = "00000000\n"; write_to_fd(fProcGPIO, toTest,strlen(toTest)); read_from_fd(fProcGPIO,buffer, BUF_SIZE); passed = (strcmp(buffer,"11110000\n")==0); all_passed = all_passed && passed; fprintf(stderr, "Writing 00000000 to /proc/driver/soekris_gpio %s\n", passed?"ok":"not ok\n -->remember not to have anything connected to the GPIOs"); // write 11111111 to GPIO toTest = "11111111\n"; write_to_fd(fProcGPIO, toTest,strlen(toTest)); read_from_fd(fProcGPIO,buffer, BUF_SIZE); passed = (strcmp(buffer,"11110000\n")==0); all_passed = all_passed && passed; fprintf(stderr, "Writing 11111111 to /proc/driver/soekris_gpio %s\n", passed?"ok":"not ok\n -->remember not to have anything connected to the GPIOs"); // write 10101010 to GPIO toTest = "10101010\n"; write_to_fd(fProcGPIO, toTest,strlen(toTest)); read_from_fd(fProcGPIO,buffer, BUF_SIZE); passed = (strcmp(buffer,"11110000\n")==0); all_passed = all_passed && passed; fprintf(stderr, "Writing 10101010 to /proc/driver/soekris_gpio %s\n", passed?"ok":"not ok\n -->remember not to have anything connected to the GPIOs"); // write 01010101 to GPIO toTest = "01010101\n"; write_to_fd(fProcGPIO, toTest,strlen(toTest)); read_from_fd(fProcGPIO,buffer, BUF_SIZE); passed = (strcmp(buffer,"11110000\n")==0); all_passed = all_passed && passed; fprintf(stderr, "Writing 01010101 to /proc/driver/soekris_gpio %s\n", passed?"ok":"not ok\n -->remember not to have anything connected to the GPIOs"); } else { /* Tests for 48xx only */ /* IOCTL tests */ // Test bits 0-11 fDevGpio1 = open(DEV_GPIO1, O_RDWR); if (fDevGpio1 == -1) { fprintf(stderr, "Unable to open %s.", DEV_GPIO1); return 1; } ioctl_int_in= 0x0; ioctl(fDevGpio1, GPIOWRDIRECTION,&ioctl_int_in); ioctl(fDevGpio1, GPIORDDIRECTION,&ioctl_int); passed = (ioctl_int == ioctl_int_in); all_passed = all_passed && passed; fprintf(stderr, "Writing 0 to /dev/gpio1 with IOCTL GPIOWRDIRECTION %s\n", passed?"ok":"not ok"); ioctl_int_in= 0xfff; ioctl(fDevGpio1, GPIOWRDIRECTION,&ioctl_int_in); ioctl(fDevGpio1, GPIORDDIRECTION,&ioctl_int); passed = (ioctl_int == ioctl_int_in); all_passed = all_passed && passed; fprintf(stderr, "Writing 0xFFF to /dev/gpio1 with IOCTL GPIOWRDIRECTION %s\n", passed?"ok":"not ok"); ioctl_int_in= 0xfff; ioctl(fDevGpio1, GPIOWRDATA,&ioctl_int_in); ioctl(fDevGpio1, GPIORDDATA,&ioctl_int); passed = (ioctl_int == ioctl_int_in); all_passed = all_passed && passed; fprintf(stderr, "Writing 0xfff to /dev/gpio1 with IOCTL GPIOWRDATA %s\n", passed?"ok":"not ok"); ioctl_int_in= 0x00; ioctl(fDevGpio1, GPIOWRDATA,&ioctl_int_in); ioctl(fDevGpio1, GPIORDDATA,&ioctl_int); passed = (ioctl_int == ioctl_int_in); all_passed = all_passed && passed; fprintf(stderr, "Writing 0x00 to /dev/gpio1 with IOCTL GPIOWRDATA %s\n", passed?"ok":"not ok"); ioctl_int_in= 0x555; ioctl(fDevGpio1, GPIOWRDATA,&ioctl_int_in); ioctl(fDevGpio1, GPIORDDATA,&ioctl_int); passed = (ioctl_int == ioctl_int_in); all_passed = all_passed && passed; fprintf(stderr, "Writing 0x555 to /dev/gpio1 with IOCTL GPIOWRDATA %s\n", passed?"ok":"not ok"); ioctl_int_in= 0xAAA; ioctl(fDevGpio1, GPIOWRDATA,&ioctl_int_in); ioctl(fDevGpio1, GPIORDDATA,&ioctl_int); passed = (ioctl_int == ioctl_int_in); all_passed = all_passed && passed; fprintf(stderr, "Writing 0xAAA to /dev/gpio1 with IOCTL GPIOWRDATA %s\n", passed?"ok":"not ok"); // Set everything to input // and test /dev/gpio0 write_to_fd(fProcDirection, "000000000000\n", strlen("000000000000\n")); dev_buffer[0]= 0x00; write_to_fd(fDevGpio0, dev_buffer,1); read_from_fd(fDevGpio0,buffer, BUF_SIZE); passed = (buffer[0]==0xFF); all_passed = all_passed && passed; fprintf(stderr, "Writing 00000000 to /dev/gpio0 %s\n", passed?"ok":"not ok"); dev_buffer[0]= 0xFF; write_to_fd(fDevGpio0, dev_buffer,1); read_from_fd(fDevGpio0,buffer, BUF_SIZE); passed = (buffer[0]==0xFF); all_passed = all_passed && passed; fprintf(stderr, "Writing 11111111 to /dev/gpio0 %s\n", passed?"ok":"not ok"); dev_buffer[0]= 0xAA; write_to_fd(fDevGpio0, dev_buffer,1); read_from_fd(fDevGpio0,buffer, BUF_SIZE); passed = (buffer[0]==0xFF); all_passed = all_passed && passed; fprintf(stderr, "Writing 10101010 to /dev/gpio0 %s\n", passed?"ok":"not ok"); dev_buffer[0] = 0x55; write_to_fd(fDevGpio0, dev_buffer,1); read_from_fd(fDevGpio0,buffer, BUF_SIZE); passed = (buffer[0]==0xFF); all_passed = all_passed && passed; fprintf(stderr, "Writing 01010101 to /dev/gpio0 %s\n", passed?"ok":"not ok"); // Set everything to output toTest = "111111111111\n"; write_to_fd(fProcDirection, toTest,strlen(toTest)); dev_buffer[0] = 0; dev_buffer[1] = 0; write_to_fd(fDevGpio1, dev_buffer,2); read_from_fd(fDevGpio1,buffer, BUF_SIZE); passed = (dev_buffer[0]==buffer[0] && dev_buffer[1]==buffer[1]); all_passed = all_passed && passed; fprintf(stderr, "Writing 0x00 to /dev/gpio1 %s\n", passed?"ok":"not ok"); dev_buffer[0] = 0xFF; dev_buffer[1] = 0xF; buffer[0]= 0x0; buffer[1]= 0x0; write_to_fd(fDevGpio1, dev_buffer,2); read_from_fd(fDevGpio1,buffer, BUF_SIZE); passed = (dev_buffer[0]==buffer[0] && dev_buffer[1]==buffer[1]); all_passed = all_passed && passed; fprintf(stderr, "Writing 0xFFF to /dev/gpio1 %s\n", passed?"ok":"not ok"); dev_buffer[0]= 0x55; dev_buffer[1]= 0x5; buffer[0]= 0x0; buffer[1]= 0x0; write_to_fd(fDevGpio1, dev_buffer,2); read_from_fd(fDevGpio1,buffer, BUF_SIZE); passed = (dev_buffer[0]==buffer[0] && dev_buffer[1]==buffer[1]); all_passed = all_passed && passed; fprintf(stderr, "Writing 0x555 to /dev/gpio1 %s\n", passed?"ok":"not ok"); dev_buffer[0]= 0xAA; dev_buffer[1]= 0xA; buffer[0]= 0x0; buffer[1]= 0x0; write_to_fd(fDevGpio1, dev_buffer,2); read_from_fd(fDevGpio1,buffer, BUF_SIZE); passed = (dev_buffer[0]==buffer[0] && dev_buffer[1]==buffer[1]); all_passed = all_passed && passed; fprintf(stderr, "Writing 0xAAA to /dev/gpio1 %s\n", passed?"ok":"not ok"); dev_buffer[0]= 0xBC; dev_buffer[1]= 0xA; buffer[0]= 0x0; buffer[1]= 0x0; write_to_fd(fDevGpio1, dev_buffer,2); read_from_fd(fDevGpio1,buffer, BUF_SIZE); passed = (dev_buffer[0]==buffer[0] && dev_buffer[1]==buffer[1]); all_passed = all_passed && passed; fprintf(stderr, "Writing 0xABC to /dev/gpio1 %s\n", passed?"ok":"not ok"); dev_buffer[0]= 0xED; dev_buffer[1]= 0xF; buffer[0]= 0x0; buffer[1]= 0x0; write_to_fd(fDevGpio1, dev_buffer,2); read_from_fd(fDevGpio1,buffer, BUF_SIZE); passed = (dev_buffer[0]==buffer[0] && dev_buffer[1]==buffer[1]); all_passed = all_passed && passed; fprintf(stderr, "Writing 0xFED to /dev/gpio1 %s\n", passed?"ok":"not ok"); close(fDevGpio1); // set direction to 000000000000 toTest = "000000000000\n"; write_to_fd(fProcDirection, toTest,strlen(toTest)); read_from_fd(fProcDirection,buffer, BUF_SIZE); passed = (strcmp(buffer,toTest)==0); all_passed = all_passed && passed; fprintf(stderr, "Writing 000000000000 to /proc/driver/soekris_io_settings %s\n", passed?"ok":"not ok"); // set direction to 111111111111 toTest = "111111111111\n"; write_to_fd(fProcDirection, toTest,strlen(toTest)); read_from_fd(fProcDirection,buffer, BUF_SIZE); passed = (strcmp(buffer,toTest)==0); all_passed = all_passed && passed; fprintf(stderr, "Writing 111111111111 to /proc/driver/soekris_io_settings %s\n", passed?"ok":"not ok"); // set direction to 101010101010 toTest = "101010101010\n"; write_to_fd(fProcDirection, toTest,strlen(toTest)); read_from_fd(fProcDirection,buffer, BUF_SIZE); passed = (strcmp(buffer,toTest)==0); all_passed = all_passed && passed; fprintf(stderr, "Writing 101010101010 to /proc/driver/soekris_io_settings %s\n", passed?"ok":"not ok"); // set direction to 010101010101 toTest = "010101010101\n"; write_to_fd(fProcDirection, toTest,strlen(toTest)); read_from_fd(fProcDirection,buffer, BUF_SIZE); passed = (strcmp(buffer,toTest)==0); all_passed = all_passed && passed; fprintf(stderr, "Writing 010101010101 to /proc/driver/soekris_io_settings %s\n", passed?"ok":"not ok"); // Set everything to output toTest = "111111111111\n"; write_to_fd(fProcDirection, toTest,strlen(toTest)); // write 000000000000 to GPIO toTest = "000000000000\n"; write_to_fd(fProcGPIO, toTest,strlen(toTest)); read_from_fd(fProcGPIO,buffer, BUF_SIZE); passed = (strcmp(buffer,toTest)==0); all_passed = all_passed && passed; fprintf(stderr, "Writing 000000000000 to /proc/driver/soekris_gpio %s\n", passed?"ok":"not ok"); // write 111111111111 to GPIO toTest = "111111111111\n"; write_to_fd(fProcGPIO, toTest,strlen(toTest)); read_from_fd(fProcGPIO,buffer, BUF_SIZE); passed = (strcmp(buffer,toTest)==0); all_passed = all_passed && passed; fprintf(stderr, "Writing 111111111111 to /proc/driver/soekris_gpio %s\n", passed?"ok":"not ok"); // write 101010101010 to GPIO toTest = "101010101010\n"; write_to_fd(fProcGPIO, toTest,strlen(toTest)); read_from_fd(fProcGPIO,buffer, BUF_SIZE); passed = (strcmp(buffer,toTest)==0); all_passed = all_passed && passed; fprintf(stderr, "Writing 101010101010 to /proc/driver/soekris_gpio %s\n", passed?"ok":"not ok"); // write 010101010101 to GPIO toTest = "010101010101\n"; write_to_fd(fProcGPIO, toTest,strlen(toTest)); read_from_fd(fProcGPIO,buffer, BUF_SIZE); passed = (strcmp(buffer,toTest)==0); all_passed = all_passed && passed; fprintf(stderr, "Writing 010101010101 to /proc/driver/soekris_gpio %s\n", passed?"ok":"not ok"); // Set everything to input // since all GPIOS are configures as low-active, we expect 111111111111 // no matter what we write to the port toTest = "000000000000\n"; write_to_fd(fProcDirection, toTest,strlen(toTest)); // write 000000000000 to GPIO toTest = "000000000000\n"; write_to_fd(fProcGPIO, toTest,strlen(toTest)); read_from_fd(fProcGPIO,buffer, BUF_SIZE); passed = (strcmp(buffer,"111111111111\n")==0); all_passed = all_passed && passed; fprintf(stderr, "Writing 000000000000 to /proc/driver/soekris_gpio %s\n", passed?"ok":"not ok\n -->remember not to have anything connected to the GPIOs"); // write 111111111111 to GPIO toTest = "111111111111\n"; write_to_fd(fProcGPIO, toTest,strlen(toTest)); read_from_fd(fProcGPIO,buffer, BUF_SIZE); passed = (strcmp(buffer,"111111111111\n")==0); all_passed = all_passed && passed; fprintf(stderr, "Writing 111111111111 to /proc/driver/soekris_gpio %s\n", passed?"ok":"not ok\n -->remember not to have anything connected to the GPIOs"); // write 101010101010 to GPIO toTest = "101010101010\n"; write_to_fd(fProcGPIO, toTest,strlen(toTest)); read_from_fd(fProcGPIO,buffer, BUF_SIZE); passed = (strcmp(buffer,"111111111111\n")==0); all_passed = all_passed && passed; fprintf(stderr, "Writing 101010101010 to /proc/driver/soekris_gpio %s\n", passed?"ok":"not ok\n -->remember not to have anything connected to the GPIOs"); // write 010101010101 to GPIO toTest = "010101010101\n"; write_to_fd(fProcGPIO, toTest,strlen(toTest)); read_from_fd(fProcGPIO,buffer, BUF_SIZE); passed = (strcmp(buffer,"111111111111\n")==0); all_passed = all_passed && passed; fprintf(stderr, "Writing 010101010101 to /proc/driver/soekris_gpio %s\n", passed?"ok":"not ok\n -->remember not to have anything connected to the GPIOs"); } close(fDevGpio0); close(fDevGpio254); if (all_passed) { fprintf(stderr, "\nAll tests passed\n"); } else { fprintf(stderr, "\nAt least one test failed!\n"); } return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?