master/slave_config.c
changeset 1509 a864688e7de5
parent 1507 68e89abadd19
child 1526 66edd310830c
--- a/master/slave_config.c	Mon Jul 27 10:44:16 2009 +0000
+++ b/master/slave_config.c	Mon Jul 27 10:48:52 2009 +0000
@@ -66,6 +66,8 @@
     sc->position = position;
     sc->vendor_id = vendor_id;
     sc->product_code = product_code;
+    sc->watchdog_divider = 0; // use default
+    sc->watchdog_intervals = 0; // use default
 
     sc->slave = NULL;
 
@@ -411,13 +413,14 @@
  *****************************************************************************/
 
 int ecrt_slave_config_sync_manager(ec_slave_config_t *sc, uint8_t sync_index,
-        ec_direction_t dir)
+        ec_direction_t dir, ec_watchdog_mode_t watchdog_mode)
 {
     ec_sync_config_t *sync_config;
     
     if (sc->master->debug_level)
         EC_DBG("ecrt_slave_config_sync_manager(sc = 0x%x, sync_index = %u, "
-                "dir = %u)\n", (u32) sc, sync_index, dir);
+                "dir = %i, watchdog_mode = %i)\n",
+                (u32) sc, sync_index, dir, watchdog_mode);
 
     if (sync_index >= EC_MAX_SYNC_MANAGERS) {
         EC_ERR("Invalid sync manager index %u!\n", sync_index);
@@ -431,11 +434,25 @@
 
     sync_config = &sc->sync_configs[sync_index];
     sync_config->dir = dir;
+    sync_config->watchdog_mode = watchdog_mode;
     return 0;
 }
 
 /*****************************************************************************/
 
+void ecrt_slave_config_watchdog(ec_slave_config_t *sc,
+        uint16_t divider, uint16_t intervals)
+{
+    if (sc->master->debug_level)
+        EC_DBG("%s(sc = 0x%x, divider = %u, intervals = %u)\n",
+                __func__, (u32) sc, divider, intervals);
+
+    sc->watchdog_divider = divider;
+    sc->watchdog_intervals = intervals;
+}
+
+/*****************************************************************************/
+
 int ecrt_slave_config_pdo_assign_add(ec_slave_config_t *sc,
         uint8_t sync_index, uint16_t pdo_index)
 {
@@ -579,8 +596,8 @@
             return -ENOENT;
         }
 
-        ret = ecrt_slave_config_sync_manager(
-                sc, sync_info->index, sync_info->dir);
+        ret = ecrt_slave_config_sync_manager(sc, sync_info->index,
+                sync_info->dir, sync_info->watchdog_mode);
         if (ret)
             return ret;
 
@@ -894,6 +911,7 @@
 /** \cond */
 
 EXPORT_SYMBOL(ecrt_slave_config_sync_manager);
+EXPORT_SYMBOL(ecrt_slave_config_watchdog);
 EXPORT_SYMBOL(ecrt_slave_config_pdo_assign_add);
 EXPORT_SYMBOL(ecrt_slave_config_pdo_assign_clear);
 EXPORT_SYMBOL(ecrt_slave_config_pdo_mapping_add);