Skip to content

Commit b36c766

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

File tree

2 files changed

+57
-47
lines changed

2 files changed

+57
-47
lines changed

include/ec_errno.h

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,25 @@
1010
#define EC_ERR_NOMEM 1 /**< Out of memory */
1111
#define EC_ERR_INVAL 2 /**< Invalid argument */
1212
#define EC_ERR_TIMEOUT 3 /**< Timeout */
13-
#define EC_ERR_IO 4 /**< I/O error */
14-
#define EC_ERR_WC 5 /**< working counter error */
15-
#define EC_ERR_ALERR 6 /**< AL status error */
16-
#define EC_ERR_SII 7 /**< SII error */
17-
#define EC_ERR_MBOX 8 /**< mailbox error */
18-
#define EC_ERR_MBOX_EMPTY 9 /**< mailbox is empty */
19-
#define EC_ERR_COE_TYPE 10 /**< COE type error */
20-
#define EC_ERR_COE_SIZE 11 /**< COE size error */
21-
#define EC_ERR_COE_REQUEST 12 /**< COE request & index & subindex error */
22-
#define EC_ERR_COE_TOGGLE 13 /**< COE toggle error */
23-
#define EC_ERR_COE_ABORT 14 /**< COE abort error */
24-
#define EC_ERR_FOE_TYPE 15 /**< FOE type error */
25-
#define EC_ERR_FOE_SIZE 16 /**< FOE size error */
26-
#define EC_ERR_FOE_OPCODE 17 /**< FOE opcode error */
27-
#define EC_ERR_FOE_PACKNO 18 /**< FOE packet number error */
28-
#define EC_ERR_EOE_TYPE 19 /**< EOE type error */
29-
#define EC_ERR_EOE_SIZE 20 /**< EOE size error */
30-
#define EC_ERR_EOE_FRAME 21 /**< EOE frametype error */
13+
#define EC_ERR_NOSUPP 4 /**< Not supported */
14+
#define EC_ERR_IO 5 /**< I/O error */
15+
#define EC_ERR_WC 6 /**< working counter error */
16+
#define EC_ERR_ALERR 7 /**< AL status error */
17+
#define EC_ERR_SII 8 /**< SII error */
18+
#define EC_ERR_MBOX 9 /**< mailbox error */
19+
#define EC_ERR_MBOX_EMPTY 10 /**< mailbox is empty */
20+
#define EC_ERR_COE_TYPE 11 /**< COE type error */
21+
#define EC_ERR_COE_SIZE 12 /**< COE size error */
22+
#define EC_ERR_COE_REQUEST 13 /**< COE request & index & subindex error */
23+
#define EC_ERR_COE_TOGGLE 14 /**< COE toggle error */
24+
#define EC_ERR_COE_ABORT 15 /**< COE abort error */
25+
#define EC_ERR_FOE_TYPE 16 /**< FOE type error */
26+
#define EC_ERR_FOE_SIZE 17 /**< FOE size error */
27+
#define EC_ERR_FOE_OPCODE 18 /**< FOE opcode error */
28+
#define EC_ERR_FOE_PACKNO 19 /**< FOE packet number error */
29+
#define EC_ERR_EOE_TYPE 20 /**< EOE type error */
30+
#define EC_ERR_EOE_SIZE 21 /**< EOE size error */
31+
#define EC_ERR_EOE_FRAME 22 /**< EOE frametype error */
3132

3233
#define EC_ERR_UNKNOWN 255
3334

src/ec_slave.c

Lines changed: 38 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,13 @@ static int ec_slave_config(ec_slave_t *slave)
482482
}
483483

484484
if (slave->requested_state == EC_SLAVE_STATE_BOOT) {
485+
if (!(slave->sii.mailbox_protocols & EC_MBXPROT_FOE)) {
486+
EC_SLAVE_LOG_ERR("Slave %u does not support BOOT mailbox protocol\n", slave->index);
487+
ret = -EC_ERR_NOSUPP;
488+
step = 5;
489+
goto errorout;
490+
}
491+
485492
ec_sm_info_t sm_info[2];
486493

487494
sm_info[0].physical_start_address = slave->sii.boot_rx_mailbox_offset;
@@ -656,36 +663,32 @@ static int ec_slave_config(ec_slave_t *slave)
656663
}
657664
}
658665

659-
// preop state done
660-
if (slave->current_state == slave->requested_state) {
661-
ret = 0;
662-
goto errorout;
663-
}
664-
665-
// Config process data sm
666-
ec_datagram_fpwr(datagram, slave->station_address,
667-
ESCREG_OF(ESCREG->SYNCM[pdo_sm_offset]), EC_SYNC_PAGE_SIZE * pdo_sm_count);
668-
ec_datagram_zero(datagram);
669-
for (uint8_t i = 0; i < pdo_sm_count; i++) {
670-
ec_slave_sm_config(&slave->sm_info[pdo_sm_offset + i], datagram->data + EC_SYNC_PAGE_SIZE * i);
671-
}
672-
datagram->netdev_idx = slave->netdev_idx;
673-
ret = ec_master_queue_ext_datagram(slave->master, datagram, true, true);
674-
if (ret < 0) {
675-
step = 21;
676-
goto errorout;
677-
}
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+
}
678680

679-
ec_datagram_fpwr(datagram, slave->station_address, ESCREG_OF(ESCREG->FMMU[0]), EC_FMMU_PAGE_SIZE * pdo_sm_count);
680-
ec_datagram_zero(datagram);
681-
for (uint8_t i = 0; i < pdo_sm_count; i++) {
682-
ec_slave_fmmu_config(&slave->sm_info[pdo_sm_offset + i], datagram->data + EC_FMMU_PAGE_SIZE * i);
683-
}
684-
datagram->netdev_idx = slave->netdev_idx;
685-
ret = ec_master_queue_ext_datagram(slave->master, datagram, true, true);
686-
if (ret < 0) {
687-
step = 22;
688-
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+
}
689692
}
690693

691694
if (slave->config && slave->config->dc_assign_activate) {
@@ -762,6 +765,12 @@ static int ec_slave_config(ec_slave_t *slave)
762765
}
763766
}
764767

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

0 commit comments

Comments
 (0)