Allow zero-sized SDO responses

This commit is contained in:
Florian Pose 2023-05-02 08:43:16 +00:00
parent 251062a245
commit 24a361c8f5
2 changed files with 3 additions and 20 deletions

View File

@ -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;

View File

@ -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);