Allow zero-sized SDO responses
This commit is contained in:
parent
251062a245
commit
24a361c8f5
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue