Merge branch 'allow-empty-sdos' into 'stable-1.5'

Allow zero-sized SDO responses

See merge request etherlab.org/ethercat!61
This commit is contained in:
Florian Pose 2023-05-02 08:43:17 +00:00
commit 47cf84f406
2 changed files with 3 additions and 20 deletions

View File

@ -1202,7 +1202,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)) {
@ -1230,7 +1231,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,
@ -2219,14 +2220,6 @@ void ec_fsm_coe_up_response(
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;

View File

@ -2889,11 +2889,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);
@ -2973,11 +2968,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);