lib/master.c
changeset 1959 656f114153c2
parent 1913 cbef34ba142b
child 1960 6c4269dca1c2
equal deleted inserted replaced
1946:55a6e3294dab 1959:656f114153c2
    51     }
    51     }
    52 }
    52 }
    53 
    53 
    54 /*****************************************************************************/
    54 /*****************************************************************************/
    55 
    55 
       
    56 void ec_master_clear(ec_master_t *master)
       
    57 {
       
    58     ec_domain_t *d, *next_d;
       
    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 
       
    65     d = master->first_domain;
       
    66     while (d) {
       
    67         next_d = d->next;
       
    68         ec_domain_clear(d);
       
    69         d = next_d;
       
    70     }
       
    71 
       
    72     c = master->first_config;
       
    73     while (c) {
       
    74         next_c = c->next;
       
    75         ec_slave_config_clear(c);
       
    76         c = next_c;
       
    77     }
       
    78 
       
    79     if (master->fd != -1) {
       
    80         close(master->fd);
       
    81     }
       
    82 }
       
    83 
       
    84 /*****************************************************************************/
       
    85 
       
    86 void ec_master_add_domain(ec_master_t *master, ec_domain_t *domain)
       
    87 {
       
    88     if (master->first_domain) {
       
    89         ec_domain_t *d = master->first_domain;
       
    90         while (d->next) {
       
    91             d = d->next;
       
    92         }
       
    93         d->next = domain;
       
    94     } else {
       
    95         master->first_domain = domain;
       
    96     }
       
    97 }
       
    98 
       
    99 /*****************************************************************************/
       
   100 
    56 ec_domain_t *ecrt_master_create_domain(ec_master_t *master)
   101 ec_domain_t *ecrt_master_create_domain(ec_master_t *master)
    57 {
   102 {
    58     ec_domain_t *domain;
   103     ec_domain_t *domain;
    59     int index;
   104     int index;
    60 
   105 
    69         fprintf(stderr, "Failed to create domain: %s\n", strerror(errno));
   114         fprintf(stderr, "Failed to create domain: %s\n", strerror(errno));
    70         free(domain);
   115         free(domain);
    71         return 0; 
   116         return 0; 
    72     }
   117     }
    73 
   118 
       
   119     domain->next = NULL;
    74     domain->index = (unsigned int) index;
   120     domain->index = (unsigned int) index;
    75     domain->master = master;
   121     domain->master = master;
    76     domain->process_data = NULL;
   122     domain->process_data = NULL;
       
   123 
       
   124     ec_master_add_domain(master, domain);
       
   125 
    77     return domain;
   126     return domain;
       
   127 }
       
   128 
       
   129 /*****************************************************************************/
       
   130 
       
   131 void ec_master_add_slave_config(ec_master_t *master, ec_slave_config_t *sc)
       
   132 {
       
   133     if (master->first_config) {
       
   134         ec_slave_config_t *c = master->first_config;
       
   135         while (c->next) {
       
   136             c = c->next;
       
   137         }
       
   138         c->next = sc;
       
   139     } else {
       
   140         master->first_config = sc;
       
   141     }
    78 }
   142 }
    79 
   143 
    80 /*****************************************************************************/
   144 /*****************************************************************************/
    81 
   145 
    82 ec_slave_config_t *ecrt_master_slave_config(ec_master_t *master,
   146 ec_slave_config_t *ecrt_master_slave_config(ec_master_t *master,
   103                 strerror(errno));
   167                 strerror(errno));
   104         free(sc);
   168         free(sc);
   105         return 0; 
   169         return 0; 
   106     }
   170     }
   107 
   171 
       
   172     sc->next = NULL;
   108     sc->master = master;
   173     sc->master = master;
   109     sc->index = data.config_index;
   174     sc->index = data.config_index;
   110     sc->alias = alias;
   175     sc->alias = alias;
   111     sc->position = position;
   176     sc->position = position;
       
   177     sc->first_sdo_request = NULL;
       
   178     sc->first_voe_handler = NULL;
       
   179 
       
   180     ec_master_add_slave_config(master, sc);
       
   181 
   112     return sc;
   182     return sc;
   113 }
   183 }
   114 
   184 
   115 /*****************************************************************************/
   185 /*****************************************************************************/
   116 
   186