--- a/master/slave.c Mon Jul 17 12:58:47 2006 +0000
+++ b/master/slave.c Mon Jul 17 13:01:38 2006 +0000
@@ -1494,6 +1494,37 @@
return size;
}
+/*****************************************************************************/
+
+/**
+ Calculates the size of a sync manager by evaluating PDO sizes.
+ \return sync manager size
+*/
+
+uint16_t ec_slave_calc_eeprom_sync_size(const ec_slave_t *slave,
+ /**< EtherCAT slave */
+ const ec_eeprom_sync_t *sync
+ /**< sync manager */
+ )
+{
+ ec_eeprom_pdo_t *pdo;
+ ec_eeprom_pdo_entry_t *pdo_entry;
+ uint16_t size;
+
+ if (sync->length) return sync->length;
+
+ 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;
+ }
+ }
+
+ return size;
+}
+
/******************************************************************************
* Realtime interface
*****************************************************************************/