From 6371de80f58579733d52060c3d6f231bb60fa465 Mon Sep 17 00:00:00 2001 From: Florian Pose <fp@igh-essen.com> Date: Tue, 1 Aug 2006 14:15:33 +0000 Subject: [PATCH] Fixed bug with bit-sized PDOs leading to wrong Sync-Manager sizes. --- master/slave.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/master/slave.c b/master/slave.c index 9492184e..acde1faf 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; } /****************************************************************************** -- GitLab