Use master's synchronous ecrt_master_sdo_upload to read SDOs on initialization.

This commit is contained in:
Sascha Ittner
2018-01-20 13:35:40 +01:00
parent d79ccbd9b9
commit 63bc88cd11
5 changed files with 34 additions and 59 deletions

View File

@@ -50,12 +50,6 @@ typedef struct {
unsigned int ctrl_pdo_os;
unsigned int freq_pdo_os;
ec_sdo_request_t *sdo_req_base_freq;
ec_sdo_request_t *sdo_req_max_freq;
ec_sdo_request_t *sdo_req_ramp_rise;
ec_sdo_request_t *sdo_req_ramp_fall;
ec_sdo_request_t *sdo_req_ramp_factor;
uint32_t sdo_base_freq;
uint16_t sdo_max_freq;
uint16_t sdo_ramp_rise;
@@ -107,6 +101,7 @@ int lcec_el2521_init(int comp_id, struct lcec_slave *slave, ec_pdo_entry_reg_t *
lcec_el2521_data_t *hal_data;
int err;
double ramp_factor;
uint8_t sdo_buf[4];
// initialize callbacks
slave->proc_read = lcec_el2521_read;
@@ -121,26 +116,26 @@ int lcec_el2521_init(int comp_id, struct lcec_slave *slave, ec_pdo_entry_reg_t *
slave->hal_data = hal_data;
// read sdos
if ((hal_data->sdo_req_base_freq = lcec_read_sdo(slave, 0x8001, 0x02, 4)) == NULL) {
if (lcec_read_sdo(slave, 0x8001, 0x02, sdo_buf, 4)) {
return -EIO;
}
hal_data->sdo_base_freq = EC_READ_U32(ecrt_sdo_request_data(hal_data->sdo_req_base_freq));
if ((hal_data->sdo_req_ramp_rise = lcec_read_sdo(slave, 0x8001, 0x04, 2)) == NULL) {
hal_data->sdo_base_freq = EC_READ_U32(sdo_buf);
if (lcec_read_sdo(slave, 0x8001, 0x04, sdo_buf, 2)) {
return -EIO;
}
hal_data->sdo_ramp_rise = EC_READ_U16(ecrt_sdo_request_data(hal_data->sdo_req_ramp_rise));
if ((hal_data->sdo_req_ramp_fall = lcec_read_sdo(slave, 0x8001, 0x05, 2)) == NULL) {
hal_data->sdo_ramp_rise = EC_READ_U16(sdo_buf);
if (lcec_read_sdo(slave, 0x8001, 0x05, sdo_buf, 2)) {
return -EIO;
}
hal_data->sdo_ramp_fall = EC_READ_U16(ecrt_sdo_request_data(hal_data->sdo_req_ramp_fall));
if ((hal_data->sdo_req_ramp_factor = lcec_read_sdo(slave, 0x8000, 0x07, 2)) == NULL) {
hal_data->sdo_ramp_fall = EC_READ_U16(sdo_buf);
if (lcec_read_sdo(slave, 0x8000, 0x07, sdo_buf, 2)) {
return -EIO;
}
hal_data->sdo_ramp_factor = EC_READ_U16(ecrt_sdo_request_data(hal_data->sdo_req_ramp_factor));
if ((hal_data->sdo_req_max_freq = lcec_read_sdo(slave, 0x8800, 0x02, 2)) == NULL) {
hal_data->sdo_ramp_factor = EC_READ_U16(sdo_buf);
if (lcec_read_sdo(slave, 0x8800, 0x02, sdo_buf, 2)) {
return -EIO;
}
hal_data->sdo_max_freq = EC_READ_U16(ecrt_sdo_request_data(hal_data->sdo_req_max_freq));
hal_data->sdo_max_freq = EC_READ_U16(sdo_buf);
// initializer sync info
slave->sync_info = lcec_el2521_syncs;