Allow zero-sized SDO responses
This commit is contained in:
parent
0b27207348
commit
1726abf0c3
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue