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 + -
显示快捷键?