include/ecrt.h
changeset 842 40e27e5a8dce
parent 832 a5b4f1d17908
child 844 8839ba8bfeb4
--- a/include/ecrt.h	Thu Feb 28 14:18:37 2008 +0000
+++ b/include/ecrt.h	Thu Feb 28 14:29:50 2008 +0000
@@ -54,7 +54,7 @@
  * - Added ec_slave_config_state_t for the new method
  *   ecrt_slave_config_state().
  * - Process data memory for a domain can now be allocated externally. This
- *   offers the possibility to use a shared-memory-region. Therefore,
+ *   offers the possibility to use a shared-memory region. Therefore,
  *   added the domain methods ecrt_domain_size() and
  *   ecrt_domain_external_memory().
  * - Replaced the process data pointers in the Pdo entry registration
@@ -64,10 +64,11 @@
  *   is directly usable. If the domain's process data is allocated internally,
  *   the start address can be retrieved with ecrt_domain_data().
  * - Replaced ecrt_slave_pdo_mapping/add/clear() with
- *   ecrt_slave_config_mapping() that is now able to specify Pdo mapping and
- *   Pdo configuration. Pdo entries mapped in this way can now immediately be
- *   registered. The Pdo mapping and the configuration are described with the
- *   new data types ec_pdo_info_t and ec_pdo_entry_info_t.
+ *   ecrt_slave_config_pdo() to add a Pdo to the mapping and
+ *   ecrt_slave_config_pdo_entry() to add a Pdo entry to a Pdo configuration.
+ *   ecrt_slave_config_mapping() is a convenience function for
+ *   both, that uses the new data types ec_pdo_info_t and ec_pdo_entry_info_t.
+ *   Mapped Pdo entries can now immediately be registered.
  * - Renamed ec_bus_status_t, ec_master_status_t to ec_bus_state_t and
  *   ec_master_state_t, respectively. Renamed ecrt_master_get_status() to
  *   ecrt_master_state(), for consistency reasons.
@@ -370,34 +371,73 @@
  * Slave configuration methods
  *****************************************************************************/
 
+/** Add a Pdo to the slave's Pdo mapping for the given direction.
+ *
+ * The first call of this function for a given \a dir will clear the default
+ * mapping.
+ *
+ * \see ecrt_slave_config_mapping()
+ * \return zero on success, else non-zero
+ */
+int ecrt_slave_config_pdo(
+        ec_slave_config_t *sc, /**< Slave configuration. */
+        ec_direction_t dir, /**< Pdo direction (input/output). */
+        uint16_t index /**< Index of the Pdo to map. */
+        );
+
+/** Add a Pdo entry to the given Pdo's configuration.
+ *
+ * The first call of this function for a given \a pdo_index will clear the
+ * default Pdo configuration.
+ *
+ * \see ecrt_slave_config_mapping()
+ * \return zero on success, else non-zero
+ */
+int ecrt_slave_config_pdo_entry(
+        ec_slave_config_t *sc, /**< Slave configuration. */
+        uint16_t pdo_index, /**< Index of the Pdo to configure. */
+        uint16_t entry_index, /**< Index of the Pdo entry to add to the Pdo's
+                                configuration. */
+        uint8_t entry_subindex, /**< Subindex of the Pdo entry to add to the
+                                  Pdo's configuration. */
+        uint8_t entry_bit_length /**< Size of the Pdo entry in bit. */
+        );
+
 /** Specify the Pdo mapping and (optionally) the Pdo configuration.
  *
+ * This function is a convenience function for the ecrt_slave_config_pdo()
+ * and ecrt_slave_config_pdo_entry() functions, that are better suitable
+ * for automatic code generation.
+ *
  * The following example shows, how to specify a complete Pdo mapping
  * including the Pdo configuration. With this information, the master is able
  * to reserve the complete process data, even if the slave is not present
  * at configuration time:
  *
  * \code
- * const ec_pdo_info_t complete_mapping[] = {
- *     {EC_DIR_INPUT, 0x1600, 2, { // channel 1
- *         {0x7000, 0, 16}, // value
- *         {0x7000, 1, 8},  // status
- *     }},
- *     {EC_DIR_INPUT, 0x1601, 2, { // channel 2 
- *         {0x7001, 0, 16}, // value
- *         {0x7001, 1, 8},  // status
- *     }}
+ * const ec_pdo_entry_info_t el3162_channel1[] = {
+ *     {0x3101, 1,  8}, // status
+ *     {0x3101, 2, 16}  // value
  * };
  * 
- * if (ecrt_slave_config_mapping(slave_config_ana_in, 2, complete_mapping)) {
- *     // error
- * }
+ * const ec_pdo_entry_info_t el3162_channel2[] = {
+ *     {0x3102, 1,  8}, // status
+ *     {0x3102, 2, 16}  // value
+ * };
+ * 
+ * const ec_pdo_info_t el3162_mapping[] = {
+ *     {EC_DIR_INPUT, 0x1A00, 2, el3162_channel1},
+ *     {EC_DIR_INPUT, 0x1A01, 2, el3162_channel2},
+ * };
+ * 
+ * if (ecrt_slave_config_mapping(sc, 2, el3162_mapping))
+ *     return -1; // error
  * \endcode
  *
  * The next example shows, how to configure only the Pdo mapping. The entries
  * for each mapped Pdo are taken from the default Pdo configuration. Please
- * note, that Pdo entry registration will fail, if no Pdo configuration is
- * specified and the slave is offline.
+ * note, that Pdo entry registration will fail, if the Pdo configuration is
+ * left empty and the slave is offline.
  *
  * \code
  * const ec_pdo_info_t pdo_mapping[] = {
@@ -405,9 +445,8 @@
  *     {EC_DIR_INPUT, 0x1601}  // Channel 2
  * };
  * 
- * if (ecrt_slave_config_mapping(slave_config_ana_in, 2, pdo_mapping)) {
- *     // error
- * }
+ * if (ecrt_slave_config_mapping(slave_config_ana_in, 2, pdo_mapping))
+ *     return -1; // error
  * \endcode
  *
  * \return zero on success, else non-zero
@@ -418,15 +457,18 @@
         const ec_pdo_info_t pdos[] /**< List with Pdo mapping. */
         );
 
-/** Registers a Pdo entry of the given slave configuration at a domain.
- *
- * Searches the mapping and the Pdo configurations for the given Pdo entry. If
- * found, the curresponding sync manager/FMMU is added to the domain and the
- * offset of the Pdo entry's data in the domain process data is returned.
- *
- * \retval >=0 Offset of the Pdo entry's process data.
- * \retval -1  Pdo entry not found.
- * \retval -2  Failed to register Pdo entry.
+/** Registers a Pdo entry for process data exchange in a domain.
+ *
+ * Searches the current mapping and Pdo configurations for the given Pdo
+ * entry. An error is raised, if the given entry is not mapped. Otherwise, the
+ * corresponding sync manager and FMMU configurations are provided for slave
+ * configuration and the respective sync manager's Pdos are appended to the
+ * given domain, if not already done. The offset of the requested Pdo entry's
+ * data inside the domain's process data is returned.
+ *
+ * \retval >=0 Success: Offset of the Pdo entry's process data.
+ * \retval -1  Error: Pdo entry not found.
+ * \retval -2  Error: Failed to register Pdo entry.
  */
 int ecrt_slave_config_reg_pdo_entry(
         ec_slave_config_t *sc, /**< Slave configuration. */