62 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			62 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /* 
 | ||
|  |  * | ||
|  |  *  PRU Debug Program - UIO routines | ||
|  |  *  (c) Copyright 2011,2013 by Arctica Technologies | ||
|  |  *  Written by Steven Anderson | ||
|  |  * | ||
|  |  */ | ||
|  | 
 | ||
|  | #include <stdio.h>
 | ||
|  | #include <stdlib.h>
 | ||
|  | #include <unistd.h>
 | ||
|  | #include <sys/types.h>
 | ||
|  | #include <dirent.h>
 | ||
|  | #include <string.h>
 | ||
|  | 
 | ||
|  | #include "uio.h"
 | ||
|  | 
 | ||
|  | 
 | ||
|  | // get UIO devices and put into structure
 | ||
|  | int uio_getprussfile(char *devname) | ||
|  | { | ||
|  | 	DIR			*d; | ||
|  | 	struct dirent		*dent; | ||
|  | 	char			fn[UIO_MAX_UIO_FILEPATH]; | ||
|  | 	FILE			*fd; | ||
|  | 	char			s_name[UIO_MAX_DEV_NAME]; | ||
|  | 	 | ||
|  | 	// clear user buffer
 | ||
|  | 	devname[0] = 0; | ||
|  | 	 | ||
|  | 	// open directory /dev and scan for uio* files
 | ||
|  | 	d = opendir("/dev"); | ||
|  | 	 | ||
|  | 	// read in first entry
 | ||
|  | 	dent = readdir(d); | ||
|  | 	 | ||
|  | 	// scan the entries
 | ||
|  | 	while (dent != NULL) { | ||
|  | 		// determine if this is a uio* file
 | ||
|  | 		if (dent->d_name[0] == 'u' && dent->d_name[1] == 'i' && dent->d_name[2] == 'o' && devname[0] == 0) { | ||
|  | 			// get uio device name and version
 | ||
|  | 			sprintf(fn, "/sys/class/uio/%s/name", dent->d_name); | ||
|  | 			fd = fopen (fn, "r"); | ||
|  | 			fgets(s_name, UIO_MAX_DEV_NAME, fd); | ||
|  | 			s_name[strlen(s_name)-1] = 0; | ||
|  | 			if (!strncmp(s_name, "pruss", 5)) { | ||
|  | 				sprintf(devname, "/dev/%s", dent->d_name); | ||
|  | 			} | ||
|  | 			fclose(fd); | ||
|  | 		} | ||
|  | 		 | ||
|  | 		// read next directory entry
 | ||
|  | 		dent = readdir(d); | ||
|  | 	} | ||
|  | 	 | ||
|  | 	// close directory handle
 | ||
|  | 	closedir(d); | ||
|  | 	 | ||
|  | 	return 0; | ||
|  | } | ||
|  | 
 |