diff --git a/master/slave.c b/master/slave.c index 9492184ecbca4f2a86f6e39cf9d083ec3af6ed9b..acde1faf346ddfbeb4b31d514d94982dbb420fe4 100644 --- a/master/slave.c +++ b/master/slave.c @@ -1508,20 +1508,23 @@ uint16_t ec_slave_calc_eeprom_sync_size(const ec_slave_t *slave, { ec_eeprom_pdo_t *pdo; ec_eeprom_pdo_entry_t *pdo_entry; - uint16_t size; + unsigned int bit_size; if (sync->length) return sync->length; - size = 0; + bit_size = 0; list_for_each_entry(pdo, &slave->eeprom_pdos, list) { if (pdo->sync_manager != sync->index) continue; list_for_each_entry(pdo_entry, &pdo->entries, list) { - size += pdo_entry->bit_length / 8; + bit_size += pdo_entry->bit_length; } } - return size; + if (bit_size % 8) // round up to full bytes + return bit_size / 8 + 1; + else + return bit_size / 8; } /******************************************************************************