From 221d24ec721e9cca9b3e18ca2f9d35964ada6402 Mon Sep 17 00:00:00 2001
From: Florian Pose <fp@igh-essen.com>
Date: Wed, 18 Oct 2006 08:59:53 +0000
Subject: [PATCH] Added ec_slave_validate()

---
 master/domain.c | 11 ++---------
 master/slave.c  | 21 +++++++++++++++++++++
 master/slave.h  |  2 ++
 3 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/master/domain.c b/master/domain.c
index 87e4c230..13b57eef 100644
--- a/master/domain.c
+++ b/master/domain.c
@@ -439,16 +439,9 @@ ec_slave_t *ecrt_domain_register_pdo(ec_domain_t *domain,
 
     master = domain->master;
 
-    // translate address
+    // translate address and validate slave
     if (!(slave = ecrt_master_get_slave(master, address))) return NULL;
-
-    if (vendor_id != slave->sii_vendor_id ||
-        product_code != slave->sii_product_code) {
-        EC_ERR("Invalid slave type at position %i - Requested: 0x%08X 0x%08X,"
-               " found: 0x%08X 0x%08X\".\n", slave->ring_position, vendor_id,
-               product_code, slave->sii_vendor_id, slave->sii_product_code);
-        return NULL;
-    }
+    if (ec_slave_validate(slave, vendor_id, product_code)) return NULL;
 
     if (!data_ptr) {
         // data_ptr is NULL => mark slave as "registered" (do not warn)
diff --git a/master/slave.c b/master/slave.c
index 7087ea91..b4412d45 100644
--- a/master/slave.c
+++ b/master/slave.c
@@ -903,6 +903,27 @@ int ec_slave_conf_sdo(ec_slave_t *slave, /**< EtherCAT slave */
     return 0;
 }
 
+/*****************************************************************************/
+
+/**
+   \return 0 in case of success, else < 0
+*/
+
+int ec_slave_validate(const ec_slave_t *slave, /**< EtherCAT slave */
+                      uint32_t vendor_id, /**< vendor ID */
+                      uint32_t product_code /**< product code */
+                      )
+{
+    if (vendor_id != slave->sii_vendor_id ||
+        product_code != slave->sii_product_code) {
+        EC_ERR("Invalid slave type at position %i - Requested: 0x%08X 0x%08X,"
+               " found: 0x%08X 0x%08X\".\n", slave->ring_position, vendor_id,
+               product_code, slave->sii_vendor_id, slave->sii_product_code);
+        return -1;
+    }
+    return 0;
+}
+
 /******************************************************************************
  *  Realtime interface
  *****************************************************************************/
diff --git a/master/slave.h b/master/slave.h
index 1ad7cd98..e53a4fea 100644
--- a/master/slave.h
+++ b/master/slave.h
@@ -271,6 +271,8 @@ uint16_t ec_slave_calc_sync_size(const ec_slave_t *,
 int ec_slave_is_coupler(const ec_slave_t *);
 int ec_slave_has_subbus(const ec_slave_t *);
 
+int ec_slave_validate(const ec_slave_t *, uint32_t, uint32_t);
+
 /*****************************************************************************/
 
 #endif
-- 
GitLab