master/master.c
branchredundancy
changeset 2360 622a7faa07df
parent 2349 2f5993d86ea5
child 2370 18e1e8b30ff7
equal deleted inserted replaced
2359:dce13f854817 2360:622a7faa07df
  1911         ec_slave_t *port0_slave, /**< Slave at port 0. */
  1911         ec_slave_t *port0_slave, /**< Slave at port 0. */
  1912         unsigned int *slave_position /**< Slave position. */
  1912         unsigned int *slave_position /**< Slave position. */
  1913         )
  1913         )
  1914 {
  1914 {
  1915     ec_slave_t *slave = master->slaves + *slave_position;
  1915     ec_slave_t *slave = master->slaves + *slave_position;
  1916     unsigned int i;
  1916     unsigned int port_index;
  1917     int ret;
  1917     int ret;
  1918 
  1918 
       
  1919     static const unsigned int next_table[EC_MAX_PORTS] = {
       
  1920         3, 2, 0, 1
       
  1921     };
       
  1922 
  1919     slave->ports[0].next_slave = port0_slave;
  1923     slave->ports[0].next_slave = port0_slave;
  1920 
  1924 
  1921     for (i = 1; i < EC_MAX_PORTS; i++) {
  1925     port_index = 3;
  1922         if (!slave->ports[i].link.loop_closed) {
  1926     while (port_index != 0) {
       
  1927         if (!slave->ports[port_index].link.loop_closed) {
  1923             *slave_position = *slave_position + 1;
  1928             *slave_position = *slave_position + 1;
  1924             if (*slave_position < master->slave_count) {
  1929             if (*slave_position < master->slave_count) {
  1925                 slave->ports[i].next_slave = master->slaves + *slave_position;
  1930                 slave->ports[port_index].next_slave =
       
  1931                     master->slaves + *slave_position;
  1926                 ret = ec_master_calc_topology_rec(master,
  1932                 ret = ec_master_calc_topology_rec(master,
  1927                         slave, slave_position);
  1933                         slave, slave_position);
  1928                 if (ret)
  1934                 if (ret) {
  1929                     return ret;
  1935                     return ret;
       
  1936                 }
  1930             } else {
  1937             } else {
  1931                 return -1;
  1938                 return -1;
  1932             }
  1939             }
  1933         }
  1940         }
       
  1941 
       
  1942         port_index = next_table[port_index];
  1934     }
  1943     }
  1935 
  1944 
  1936     return 0;
  1945     return 0;
  1937 }
  1946 }
  1938 
  1947