- m_data[ROTOR_CMD] = cmd;
- m_data[ROTOR_POS] = pos;
- if ( m_data[SATPOS_DEPENDS_PTR] != -1 )
- {
- eDVBRegisteredFrontend *satpos_depends_to_fe = (eDVBRegisteredFrontend*) m_data[SATPOS_DEPENDS_PTR];
- satpos_depends_to_fe->m_frontend->m_data[ROTOR_CMD] = cmd;
- satpos_depends_to_fe->m_frontend->m_data[ROTOR_POS] = pos;
- }
- else
- {
- eDVBRegisteredFrontend *next = (eDVBRegisteredFrontend *)m_data[LINKED_NEXT_PTR];
- while ( (long)next != -1 )
- {
- next->m_frontend->m_data[ROTOR_CMD] = cmd;
- next->m_frontend->m_data[ROTOR_POS] = pos;
- next = (eDVBRegisteredFrontend *)next->m_frontend->m_data[LINKED_NEXT_PTR];
- }
- eDVBRegisteredFrontend *prev = (eDVBRegisteredFrontend *)m_data[LINKED_PREV_PTR];
- while ( (long)prev != -1 )
- {
- prev->m_frontend->m_data[ROTOR_CMD] = cmd;
- prev->m_frontend->m_data[ROTOR_POS] = pos;
- prev = (eDVBRegisteredFrontend *)prev->m_frontend->m_data[LINKED_PREV_PTR];
+ int delay=0;
+ eDVBFrontend *sec_fe = this;
+ eDVBRegisteredFrontend *regFE = 0;
+ long tmp = m_data[LINKED_PREV_PTR];
+ while ( tmp != -1 )
+ {
+ eDVBRegisteredFrontend *prev = (eDVBRegisteredFrontend *)tmp;
+ sec_fe = prev->m_frontend;
+ tmp = prev->m_frontend->m_data[LINKED_PREV_PTR];
+ if (tmp == -1 && sec_fe != this && !prev->m_inuse) {
+ int state = sec_fe->m_state;
+ if (state != eDVBFrontend::stateIdle && state != stateClosed)
+ {
+ sec_fe->closeFrontend(true);
+ state = sec_fe->m_state;
+ }
+ if (state == eDVBFrontend::stateClosed)
+ {
+ regFE = prev;
+ prev->inc_use();
+ }