diff --git a/master/fsm_coe.c b/master/fsm_coe.c index b0d7d2da..1d3f4719 100644 --- a/master/fsm_coe.c +++ b/master/fsm_coe.c @@ -1384,7 +1384,8 @@ int ec_fsm_coe_prepare_down_start( ec_sdo_request_t *request = fsm->request; uint8_t data_set_size; - if (request->data_size <= 4) { // use expedited transfer type + if (request->data_size > 0 && request->data_size <= 4) { + // use expedited transfer mode for lengths between 1 and 4 bytes data = ec_slave_mbox_prepare_send(slave, datagram, EC_MBOX_TYPE_COE, EC_COE_DOWN_REQ_HEADER_SIZE); if (IS_ERR(data)) { @@ -1412,7 +1413,7 @@ int ec_fsm_coe_prepare_down_start( ec_print_data(data, EC_COE_DOWN_REQ_HEADER_SIZE); } } - else { // request->data_size > 4, use normal transfer type + else { // data_size < 1 or data_size > 4, use normal transfer type size_t data_size, max_data_size = slave->configured_rx_mailbox_size - EC_MBOX_HEADER_SIZE, @@ -2572,14 +2573,6 @@ void ec_fsm_coe_up_response_data( data_size = rec_size - 10; fsm->complete_size = EC_READ_U32(data + 6); - if (!fsm->complete_size) { - request->errno = EIO; - fsm->state = ec_fsm_coe_error; - EC_SLAVE_ERR(slave, "No complete size supplied!\n"); - ec_print_data(data, rec_size); - return; - } - ret = ec_sdo_request_alloc(request, fsm->complete_size); if (ret) { request->errno = -ret; diff --git a/master/master.c b/master/master.c index 81d56383..5ba49378 100644 --- a/master/master.c +++ b/master/master.c @@ -3152,11 +3152,6 @@ int ecrt_master_sdo_download(ec_master_t *master, uint16_t slave_position, __func__, master, slave_position, index, subindex, data, data_size, abort_code); - if (!data_size) { - EC_MASTER_ERR(master, "Zero data size!\n"); - return -EINVAL; - } - ec_sdo_request_init(&request); ecrt_sdo_request_index(&request, index, subindex); ret = ec_sdo_request_alloc(&request, data_size); @@ -3236,11 +3231,6 @@ int ecrt_master_sdo_download_complete(ec_master_t *master, __func__, master, slave_position, index, data, data_size, abort_code); - if (!data_size) { - EC_MASTER_ERR(master, "Zero data size!\n"); - return -EINVAL; - } - ec_sdo_request_init(&request); ecrt_sdo_request_index(&request, index, 0); ret = ec_sdo_request_alloc(&request, data_size);