lib/common.c
changeset 1495 88f242b722ce
parent 1494 6c632c8f45cc
child 1497 c9308eb34c0e
equal deleted inserted replaced
1494:6c632c8f45cc 1495:88f242b722ce
    48     return ECRT_VERSION_MAGIC;
    48     return ECRT_VERSION_MAGIC;
    49 }
    49 }
    50 
    50 
    51 /*****************************************************************************/
    51 /*****************************************************************************/
    52 
    52 
       
    53 #define MAX_PATH_LEN 64
       
    54 
    53 ec_master_t *ecrt_request_master(unsigned int master_index)
    55 ec_master_t *ecrt_request_master(unsigned int master_index)
    54 {
    56 {
    55     ec_master_t *master = ecrt_open_master(master_index);
    57     char path[MAX_PATH_LEN];
    56     if (master) {
    58     ec_master_t *master;
    57         if (ecrt_master_reserve(master) < 0) {
    59 
    58             close(master->fd);
    60     master = malloc(sizeof(ec_master_t));
    59             free(master);
    61     if (!master) {
    60             master = 0;
    62         fprintf(stderr, "Failed to allocate memory.\n");
    61         }
    63         return 0;
       
    64     }
       
    65 
       
    66     master->process_data = NULL;
       
    67     master->process_data_size = 0;
       
    68 
       
    69     snprintf(path, MAX_PATH_LEN - 1, "/dev/EtherCAT%u", master_index);
       
    70 
       
    71     master->fd = open(path, O_RDWR);
       
    72     if (master->fd == -1) {
       
    73         fprintf(stderr, "Failed to open %s: %s\n", path, strerror(errno));
       
    74         free(master);
       
    75         return 0;
       
    76     }
       
    77 
       
    78     if (ioctl(master->fd, EC_IOCTL_REQUEST, NULL) == -1) {
       
    79         fprintf(stderr, "Failed to request master %u: %s\n",
       
    80                 master_index, strerror(errno));
       
    81         close(master->fd);
       
    82         free(master);
       
    83         return 0; 
    62     }
    84     }
    63 
    85 
    64     return master;
    86     return master;
    65 }
       
    66 
       
    67 /*****************************************************************************/
       
    68 
       
    69 #define MAX_PATH_LEN 64
       
    70 
       
    71 ec_master_t *ecrt_open_master(unsigned int master_index)
       
    72 {
       
    73 	char path[MAX_PATH_LEN];
       
    74 	ec_master_t *master;
       
    75 
       
    76 	master = malloc(sizeof(ec_master_t));
       
    77 	if (!master) {
       
    78 		fprintf(stderr, "Failed to allocate memory.\n");
       
    79 		return 0;
       
    80 	}
       
    81 
       
    82 	master->process_data = NULL;
       
    83 	master->process_data_size = 0;
       
    84 
       
    85 	snprintf(path, MAX_PATH_LEN - 1, "/dev/EtherCAT%u", master_index);
       
    86 
       
    87 	master->fd = open(path, O_RDWR);
       
    88 	if (master->fd == -1) {
       
    89 		fprintf(stderr, "Failed to open %s: %s\n", path, strerror(errno));
       
    90 		free(master);
       
    91 		return 0;
       
    92 	}
       
    93 
       
    94 	return master;
       
    95 }
    87 }
    96 
    88 
    97 /*****************************************************************************/
    89 /*****************************************************************************/
    98 
    90 
    99 void ecrt_release_master(ec_master_t *master)
    91 void ecrt_release_master(ec_master_t *master)