lib/master.c
changeset 1960 6c4269dca1c2
parent 1959 656f114153c2
child 1963 6aaf77798445
equal deleted inserted replaced
1959:656f114153c2 1960:6c4269dca1c2
    51     }
    51     }
    52 }
    52 }
    53 
    53 
    54 /*****************************************************************************/
    54 /*****************************************************************************/
    55 
    55 
    56 void ec_master_clear(ec_master_t *master)
    56 void ec_master_clear_config(ec_master_t *master)
    57 {
    57 {
    58     ec_domain_t *d, *next_d;
    58     ec_domain_t *d, *next_d;
    59     ec_slave_config_t *c, *next_c;
    59     ec_slave_config_t *c, *next_c;
    60 
       
    61     if (master->process_data)  {
       
    62         munmap(master->process_data, master->process_data_size);
       
    63     }
       
    64 
    60 
    65     d = master->first_domain;
    61     d = master->first_domain;
    66     while (d) {
    62     while (d) {
    67         next_d = d->next;
    63         next_d = d->next;
    68         ec_domain_clear(d);
    64         ec_domain_clear(d);
    69         d = next_d;
    65         d = next_d;
    70     }
    66     }
       
    67     master->first_domain = NULL;
    71 
    68 
    72     c = master->first_config;
    69     c = master->first_config;
    73     while (c) {
    70     while (c) {
    74         next_c = c->next;
    71         next_c = c->next;
    75         ec_slave_config_clear(c);
    72         ec_slave_config_clear(c);
    76         c = next_c;
    73         c = next_c;
    77     }
    74     }
       
    75     master->first_config = NULL;
       
    76 }
       
    77 
       
    78 /*****************************************************************************/
       
    79 
       
    80 void ec_master_clear(ec_master_t *master)
       
    81 {
       
    82     if (master->process_data)  {
       
    83         munmap(master->process_data, master->process_data_size);
       
    84     }
       
    85 
       
    86     ec_master_clear_config(master);
    78 
    87 
    79     if (master->fd != -1) {
    88     if (master->fd != -1) {
    80         close(master->fd);
    89         close(master->fd);
    81     }
    90     }
    82 }
    91 }
   454 {
   463 {
   455     if (ioctl(master->fd, EC_IOCTL_DEACTIVATE, NULL) == -1) {
   464     if (ioctl(master->fd, EC_IOCTL_DEACTIVATE, NULL) == -1) {
   456         fprintf(stderr, "Failed to deactivate master: %s\n", strerror(errno));
   465         fprintf(stderr, "Failed to deactivate master: %s\n", strerror(errno));
   457         return;
   466         return;
   458     }
   467     }
   459 }
   468 
   460 
   469     ec_master_clear_config(master);
       
   470 }
   461 
   471 
   462 /*****************************************************************************/
   472 /*****************************************************************************/
   463 
   473 
   464 int ecrt_master_set_send_interval(ec_master_t *master,size_t send_interval_us)
   474 int ecrt_master_set_send_interval(ec_master_t *master,size_t send_interval_us)
   465 {
   475 {
   470         return -1; // FIXME
   480         return -1; // FIXME
   471     }
   481     }
   472     return 0;
   482     return 0;
   473 }
   483 }
   474 
   484 
   475 
       
   476 /*****************************************************************************/
   485 /*****************************************************************************/
   477 
   486 
   478 void ecrt_master_send(ec_master_t *master)
   487 void ecrt_master_send(ec_master_t *master)
   479 {
   488 {
   480     if (ioctl(master->fd, EC_IOCTL_SEND, NULL) == -1) {
   489     if (ioctl(master->fd, EC_IOCTL_SEND, NULL) == -1) {