Skip to content

Commit cb24028

Browse files
committed
update(slave): move preop check at last
Signed-off-by: sakumisu <1203593632@qq.com>
1 parent 47c3b66 commit cb24028

File tree

1 file changed

+31
-29
lines changed

1 file changed

+31
-29
lines changed

src/ec_slave.c

Lines changed: 31 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -663,36 +663,32 @@ static int ec_slave_config(ec_slave_t *slave)
663663
}
664664
}
665665

666-
// preop state done
667-
if (slave->current_state == slave->requested_state) {
668-
ret = 0;
669-
goto errorout;
670-
}
671-
672-
// Config process data sm
673-
ec_datagram_fpwr(datagram, slave->station_address,
674-
ESCREG_OF(ESCREG->SYNCM[pdo_sm_offset]), EC_SYNC_PAGE_SIZE * pdo_sm_count);
675-
ec_datagram_zero(datagram);
676-
for (uint8_t i = 0; i < pdo_sm_count; i++) {
677-
ec_slave_sm_config(&slave->sm_info[pdo_sm_offset + i], datagram->data + EC_SYNC_PAGE_SIZE * i);
678-
}
679-
datagram->netdev_idx = slave->netdev_idx;
680-
ret = ec_master_queue_ext_datagram(slave->master, datagram, true, true);
681-
if (ret < 0) {
682-
step = 21;
683-
goto errorout;
684-
}
666+
if (slave->config) {
667+
// Config process data sm
668+
ec_datagram_fpwr(datagram, slave->station_address,
669+
ESCREG_OF(ESCREG->SYNCM[pdo_sm_offset]), EC_SYNC_PAGE_SIZE * pdo_sm_count);
670+
ec_datagram_zero(datagram);
671+
for (uint8_t i = 0; i < pdo_sm_count; i++) {
672+
ec_slave_sm_config(&slave->sm_info[pdo_sm_offset + i], datagram->data + EC_SYNC_PAGE_SIZE * i);
673+
}
674+
datagram->netdev_idx = slave->netdev_idx;
675+
ret = ec_master_queue_ext_datagram(slave->master, datagram, true, true);
676+
if (ret < 0) {
677+
step = 21;
678+
goto errorout;
679+
}
685680

686-
ec_datagram_fpwr(datagram, slave->station_address, ESCREG_OF(ESCREG->FMMU[0]), EC_FMMU_PAGE_SIZE * pdo_sm_count);
687-
ec_datagram_zero(datagram);
688-
for (uint8_t i = 0; i < pdo_sm_count; i++) {
689-
ec_slave_fmmu_config(&slave->sm_info[pdo_sm_offset + i], datagram->data + EC_FMMU_PAGE_SIZE * i);
690-
}
691-
datagram->netdev_idx = slave->netdev_idx;
692-
ret = ec_master_queue_ext_datagram(slave->master, datagram, true, true);
693-
if (ret < 0) {
694-
step = 22;
695-
goto errorout;
681+
ec_datagram_fpwr(datagram, slave->station_address, ESCREG_OF(ESCREG->FMMU[0]), EC_FMMU_PAGE_SIZE * pdo_sm_count);
682+
ec_datagram_zero(datagram);
683+
for (uint8_t i = 0; i < pdo_sm_count; i++) {
684+
ec_slave_fmmu_config(&slave->sm_info[pdo_sm_offset + i], datagram->data + EC_FMMU_PAGE_SIZE * i);
685+
}
686+
datagram->netdev_idx = slave->netdev_idx;
687+
ret = ec_master_queue_ext_datagram(slave->master, datagram, true, true);
688+
if (ret < 0) {
689+
step = 22;
690+
goto errorout;
691+
}
696692
}
697693

698694
if (slave->config && slave->config->dc_assign_activate) {
@@ -769,6 +765,12 @@ static int ec_slave_config(ec_slave_t *slave)
769765
}
770766
}
771767

768+
// preop state done
769+
if (slave->current_state == slave->requested_state) {
770+
ret = 0;
771+
goto errorout;
772+
}
773+
772774
ret = ec_slave_state_change(slave, EC_SLAVE_STATE_SAFEOP);
773775
if (ret < 0) {
774776
step = 28;

0 commit comments

Comments
 (0)