master/fsm_slave_config.c
changeset 1921 d9cf40facbc4
parent 1904 2fadf016d9be
child 1925 29161abef052
--- a/master/fsm_slave_config.c	Mon May 03 10:13:25 2010 +0200
+++ b/master/fsm_slave_config.c	Mon May 03 18:07:57 2010 +0200
@@ -196,10 +196,7 @@
         ec_fsm_slave_config_t *fsm /**< slave state machine */
         )
 {
-    if (fsm->slave->master->debug_level) {
-        EC_DBG("Configuring slave %u...\n", fsm->slave->ring_position);
-    }
-    
+    EC_SLAVE_DBG(fsm->slave, 1, "Configuring...\n");
     ec_fsm_slave_config_enter_init(fsm);
 }
 
@@ -224,7 +221,6 @@
         ec_fsm_slave_config_t *fsm /**< slave state machine */
         )
 {
-    ec_master_t *master = fsm->slave->master;
     ec_slave_t *slave = fsm->slave;
     ec_datagram_t *datagram = fsm->datagram;
 
@@ -237,18 +233,14 @@
         return;
     }
 
-    if (master->debug_level) {
-        EC_DBG("Slave %u is now in INIT.\n", slave->ring_position);
-    }
+    EC_SLAVE_DBG(slave, 1, "Now in INIT.\n");
 
     if (!slave->base_fmmu_count) { // skip FMMU configuration
         ec_fsm_slave_config_enter_clear_sync(fsm);
         return;
     }
 
-    if (master->debug_level)
-        EC_DBG("Clearing FMMU configurations of slave %u...\n",
-               slave->ring_position);
+    EC_SLAVE_DBG(slave, 1, "Clearing FMMU configurations...\n");
 
     // clear FMMU configurations
     ec_datagram_fpwr(datagram, slave->station_address,
@@ -273,16 +265,14 @@
 
     if (datagram->state != EC_DATAGRAM_RECEIVED) {
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Failed receive FMMU clearing datagram for slave %u.\n",
-               fsm->slave->ring_position);
+        EC_SLAVE_ERR(fsm->slave, "Failed receive FMMU clearing datagram.\n");
         return;
     }
 
     if (datagram->working_counter != 1) {
         fsm->slave->error_flag = 1;
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Failed to clear FMMUs of slave %u: ",
-               fsm->slave->ring_position);
+        EC_SLAVE_ERR(fsm->slave, "Failed to clear FMMUs: ");
         ec_datagram_print_wc_error(datagram);
         return;
     }
@@ -308,9 +298,7 @@
         return;
     }
 
-    if (slave->master->debug_level)
-        EC_DBG("Clearing sync manager configurations of slave %u...\n",
-                slave->ring_position);
+    EC_SLAVE_DBG(slave, 1, "Clearing sync manager configurations...\n");
 
     sync_size = EC_SYNC_PAGE_SIZE * slave->base_sync_count;
 
@@ -336,16 +324,16 @@
 
     if (datagram->state != EC_DATAGRAM_RECEIVED) {
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Failed receive sync manager clearing datagram"
-                " for slave %u.\n", fsm->slave->ring_position);
+        EC_SLAVE_ERR(fsm->slave, "Failed receive sync manager"
+                " clearing datagram.\n");
         return;
     }
 
     if (datagram->working_counter != 1) {
         fsm->slave->error_flag = 1;
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Failed to clear sync manager configurations of slave %u: ",
-               fsm->slave->ring_position);
+        EC_SLAVE_ERR(fsm->slave,
+                "Failed to clear sync manager configurations: ");
         ec_datagram_print_wc_error(datagram);
         return;
     }
@@ -369,9 +357,7 @@
         return;
     }
 
-    if (slave->master->debug_level)
-        EC_DBG("Clearing DC assignment of slave %u...\n",
-                slave->ring_position);
+    EC_SLAVE_DBG(slave, 1, "Clearing DC assignment...\n");
 
     ec_datagram_fpwr(datagram, slave->station_address, 0x0980, 2);
     ec_datagram_zero(datagram);
@@ -394,15 +380,14 @@
 
     if (datagram->state != EC_DATAGRAM_RECEIVED) {
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Failed receive DC assignment clearing datagram"
-                " for slave %u.\n", fsm->slave->ring_position);
-        return;
-    }
-
-    if (fsm->slave->master->debug_level && datagram->working_counter != 1) {
+        EC_SLAVE_ERR(fsm->slave, "Failed receive DC assignment"
+                " clearing datagram.\n");
+        return;
+    }
+
+    if (datagram->working_counter != 1) {
         // clearing the DC assignment does not succeed on simple slaves
-        EC_DBG("Failed to clear DC assignment of slave %u: ",
-               fsm->slave->ring_position);
+        EC_SLAVE_DBG(fsm->slave, 1, "Failed to clear DC assignment: ");
         ec_datagram_print_wc_error(datagram);
     }
 
@@ -437,22 +422,18 @@
     system_time32 += correction;
     time_diff = (u32) slave->master->app_time - system_time32;
 
-    if (slave->master->debug_level)
-        EC_DBG("Slave %u: system_time=%u (corrected with %u),"
-                " app_time=%u, diff=%i\n",
-                slave->ring_position, system_time32, correction,
-                (u32) slave->master->app_time, time_diff);
+    EC_SLAVE_DBG(slave, 1, "Calculating DC time offset (32 bit):"
+            " system_time=%u (corrected with %u), app_time=%u, diff=%i\n",
+            system_time32, correction,
+            (u32) slave->master->app_time, time_diff);
 
     if (EC_ABS(time_diff) > EC_SYSTEM_TIME_TOLERANCE_NS) {
         new_offset = time_diff + old_offset32;
-        if (slave->master->debug_level)
-            EC_DBG("Slave %u: Setting time offset to %u (was %u)\n",
-                    slave->ring_position, new_offset, old_offset32);
+        EC_SLAVE_DBG(slave, 1, "Setting time offset to %u (was %u)\n",
+                new_offset, old_offset32);
         return (u64) new_offset;
     } else {
-        if (slave->master->debug_level)
-            EC_DBG("Slave %u: Not touching time offset.\n",
-                    slave->ring_position);
+        EC_SLAVE_DBG(slave, 1, "Not touching time offset.\n");
         return old_offset;
     }
 }
@@ -477,23 +458,19 @@
     system_time += correction;
     time_diff = fsm->slave->master->app_time - system_time;
 
-    if (slave->master->debug_level)
-        EC_DBG("Slave %u: system_time=%llu (corrected with %llu),"
-                " app_time=%llu, diff=%lli\n",
-                slave->ring_position, system_time, correction,
-                slave->master->app_time, time_diff);
-
+    EC_SLAVE_DBG(slave, 1, "Calculating DC time offset (64 bit):"
+            " system_time=%llu (corrected with %llu),"
+            " app_time=%llu, diff=%lli\n",
+            system_time, correction,
+            slave->master->app_time, time_diff);
 
     if (EC_ABS(time_diff) > EC_SYSTEM_TIME_TOLERANCE_NS) {
         new_offset = time_diff + old_offset;
-        if (slave->master->debug_level)
-            EC_DBG("Slave %u: Setting time offset to %llu (was %llu)\n",
-                    slave->ring_position, new_offset, old_offset);
+        EC_SLAVE_DBG(slave, 1, "Setting time offset to %llu (was %llu)\n",
+                new_offset, old_offset);
     } else {
         new_offset = old_offset;
-        if (slave->master->debug_level)
-            EC_DBG("Slave %u: Not touching time offset.\n",
-                    slave->ring_position);
+        EC_SLAVE_DBG(slave, 1, "Not touching time offset.\n");
     }
 
     return new_offset;
@@ -517,8 +494,7 @@
 
     if (datagram->state != EC_DATAGRAM_RECEIVED) {
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Failed to receive DC times datagram for slave %u: ",
-                slave->ring_position);
+        EC_SLAVE_ERR(slave, "Failed to receive DC times datagram: ");
         ec_datagram_print_state(datagram);
         return;
     }
@@ -526,8 +502,7 @@
     if (datagram->working_counter != 1) {
         slave->error_flag = 1;
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Failed to get DC times of slave %u: ",
-                slave->ring_position);
+        EC_SLAVE_ERR(slave, "Failed to get DC times: ");
         ec_datagram_print_wc_error(datagram);
         return;
     }
@@ -568,8 +543,8 @@
 
     if (datagram->state != EC_DATAGRAM_RECEIVED) {
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Failed to receive DC system time offset datagram for"
-                " slave %u: ", slave->ring_position);
+        EC_SLAVE_ERR(slave, "Failed to receive DC system time offset"
+                " datagram: ");
         ec_datagram_print_state(datagram);
         return;
     }
@@ -577,8 +552,7 @@
     if (datagram->working_counter != 1) {
         slave->error_flag = 1;
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Failed to set DC system time offset of slave %u: ",
-                slave->ring_position);
+        EC_SLAVE_ERR(slave, "Failed to set DC system time offset: ");
         ec_datagram_print_wc_error(datagram);
         return;
     }
@@ -594,7 +568,6 @@
         ec_fsm_slave_config_t *fsm /**< slave state machine */
         )
 {
-    ec_master_t *master = fsm->slave->master;
     ec_slave_t *slave = fsm->slave;
     ec_datagram_t *datagram = fsm->datagram;
     unsigned int i;
@@ -602,26 +575,19 @@
     // slave is now in INIT
     if (slave->current_state == slave->requested_state) {
         fsm->state = ec_fsm_slave_config_state_end; // successful
-        if (master->debug_level) {
-            EC_DBG("Finished configuration of slave %u.\n",
-                   slave->ring_position);
-        }
+        EC_SLAVE_DBG(slave, 1, "Finished configuration.\n");
         return;
     }
 
     if (!slave->sii.mailbox_protocols) {
         // no mailbox protocols supported
-        if (master->debug_level)
-            EC_DBG("Slave %u does not support mailbox communication.\n",
-                    slave->ring_position);
+        EC_SLAVE_DBG(slave, 1, "Slave does not support"
+                " mailbox communication.\n");
         ec_fsm_slave_config_enter_boot_preop(fsm);
         return;
     }
 
-    if (master->debug_level) {
-        EC_DBG("Configuring mailbox sync managers of slave %u.\n",
-               slave->ring_position);
-    }
+    EC_SLAVE_DBG(slave, 1, "Configuring mailbox sync managers...\n");
 
     if (slave->requested_state == EC_SLAVE_STATE_BOOT) {
         ec_sync_t sync;
@@ -677,10 +643,8 @@
     } else { // no mailbox sync manager configurations provided
         ec_sync_t sync;
 
-        if (master->debug_level)
-            EC_DBG("Slave %u does not provide"
-                    " mailbox sync manager configurations.\n",
-                    slave->ring_position);
+        EC_SLAVE_DBG(slave, 1, "Slave does not provide"
+                " mailbox sync manager configurations.\n");
 
         ec_datagram_fpwr(datagram, slave->station_address, 0x0800,
                 EC_SYNC_PAGE_SIZE * 2);
@@ -735,8 +699,8 @@
 
     if (datagram->state != EC_DATAGRAM_RECEIVED) {
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Failed to receive sync manager configuration datagram for"
-               " slave %u: ", slave->ring_position);
+        EC_SLAVE_ERR(slave, "Failed to receive sync manager"
+                " configuration datagram: ");
         ec_datagram_print_state(datagram);
         return;
     }
@@ -757,12 +721,11 @@
         if (diff >= HZ) {
             slave->error_flag = 1;
             fsm->state = ec_fsm_slave_config_state_error;
-            EC_ERR("Timeout while configuring mailbox sync managers of"
-                    " slave %u.\n", slave->ring_position);
+            EC_SLAVE_ERR(slave, "Timeout while configuring"
+                    " mailbox sync managers.\n");
             return;
-        }
-        else if (slave->master->debug_level) {
-            EC_DBG("Resending after %u ms...\n",
+        } else {
+            EC_SLAVE_DBG(slave, 1, "Resending after %u ms...\n",
                     (unsigned int) diff * 1000 / HZ);
         }
 
@@ -773,8 +736,7 @@
     else if (datagram->working_counter != 1) {
         slave->error_flag = 1;
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Failed to set sync managers of slave %u: ",
-               slave->ring_position);
+        EC_SLAVE_ERR(slave, "Failed to set sync managers: ");
         ec_datagram_print_wc_error(datagram);
         return;
     }
@@ -810,7 +772,6 @@
         )
 {
     ec_slave_t *slave = fsm->slave;
-    ec_master_t *master = fsm->slave->master;
 
     if (ec_fsm_change_exec(fsm->fsm_change)) return;
 
@@ -824,18 +785,12 @@
     // slave is now in BOOT or PREOP
     slave->jiffies_preop = fsm->datagram->jiffies_received;
 
-    if (master->debug_level) {
-        EC_DBG("Slave %u is now in %s.\n", slave->ring_position,
-                slave->requested_state != EC_SLAVE_STATE_BOOT
-                ? "PREOP" : "BOOT");
-    }
+    EC_SLAVE_DBG(slave, 1, "Now in %s.\n",
+            slave->requested_state != EC_SLAVE_STATE_BOOT ? "PREOP" : "BOOT");
 
     if (slave->current_state == slave->requested_state) {
         fsm->state = ec_fsm_slave_config_state_end; // successful
-        if (master->debug_level) {
-            EC_DBG("Finished configuration of slave %u.\n",
-                   slave->ring_position);
-        }
+        EC_SLAVE_DBG(slave, 1, "Finished configuration.\n");
         return;
     }
 
@@ -884,8 +839,7 @@
     if (ec_fsm_coe_exec(fsm->fsm_coe)) return;
 
     if (!ec_fsm_coe_success(fsm->fsm_coe)) {
-        EC_ERR("SDO configuration failed for slave %u.\n",
-                fsm->slave->ring_position);
+        EC_SLAVE_ERR(fsm->slave, "SDO configuration failed.\n");
         fsm->slave->error_flag = 1;
         fsm->state = ec_fsm_slave_config_state_error;
         return;
@@ -961,8 +915,7 @@
     }
 
     if (!ec_fsm_soe_success(fsm_soe)) {
-        EC_ERR("SoE configuration failed for slave %u.\n",
-                fsm->slave->ring_position);
+        EC_SLAVE_ERR(slave, "SoE configuration failed.\n");
         fsm->slave->error_flag = 1;
         fsm->state = ec_fsm_slave_config_state_error;
         return;
@@ -1022,8 +975,7 @@
     }
 
     if (!ec_fsm_pdo_success(fsm->fsm_pdo)) {
-        EC_WARN("PDO configuration failed on slave %u.\n",
-                fsm->slave->ring_position);
+        EC_SLAVE_WARN(fsm->slave, "PDO configuration failed.\n");
     }
 
     ec_fsm_slave_config_enter_watchdog_divider(fsm);
@@ -1039,13 +991,11 @@
 {
     ec_slave_t *slave = fsm->slave;
     ec_datagram_t *datagram = fsm->datagram;
-    ec_master_t *master = slave->master;    
     ec_slave_config_t *config = slave->config;
 
     if (config && config->watchdog_divider) {
-        if (master->debug_level)
-            EC_DBG("Setting watchdog divider to %u.\n",
-                    config->watchdog_divider);
+        EC_SLAVE_DBG(slave, 1, "Setting watchdog divider to %u.\n",
+                config->watchdog_divider);
 
         ec_datagram_fpwr(datagram, slave->station_address, 0x0400, 2);
         EC_WRITE_U16(datagram->data, config->watchdog_divider);
@@ -1072,16 +1022,15 @@
 
     if (datagram->state != EC_DATAGRAM_RECEIVED) {
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Failed to receive watchdog divider configuration datagram for"
-               " slave %u: ", slave->ring_position);
+        EC_SLAVE_ERR(slave, "Failed to receive watchdog divider"
+                " configuration datagram: ");
         ec_datagram_print_state(datagram);
         return;
     }
 
     if (datagram->working_counter != 1) {
         slave->error_flag = 1;
-        EC_WARN("Failed to set watchdog divider of slave %u: ",
-               slave->ring_position);
+        EC_SLAVE_WARN(slave, "Failed to set watchdog divider: ");
         ec_datagram_print_wc_error(datagram);
         return;
     }
@@ -1102,9 +1051,8 @@
     ec_slave_config_t *config = slave->config;
 
     if (config && config->watchdog_intervals) {
-        if (slave->master->debug_level)
-            EC_DBG("Setting process data watchdog intervals to %u.\n",
-                    config->watchdog_intervals);
+        EC_SLAVE_DBG(slave, 1, "Setting process data"
+                " watchdog intervals to %u.\n", config->watchdog_intervals);
 
         ec_datagram_fpwr(datagram, slave->station_address, 0x0420, 2);
         EC_WRITE_U16(datagram->data, config->watchdog_intervals);
@@ -1133,15 +1081,15 @@
 
     if (datagram->state != EC_DATAGRAM_RECEIVED) {
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Failed to receive sync manager watchdog configuration "
-                "datagram for slave %u: ", slave->ring_position);
+        EC_SLAVE_ERR(slave, "Failed to receive sync manager"
+                " watchdog configuration datagram: ");
         ec_datagram_print_state(datagram);
         return;
     }
 
     if (datagram->working_counter != 1) {
-        EC_WARN("Failed to set process data watchdog intervals of slave %u: ",
-               slave->ring_position);
+        EC_SLAVE_WARN(slave, "Failed to set process data"
+                " watchdog intervals: ");
         ec_datagram_print_wc_error(datagram);
     }
 
@@ -1220,8 +1168,8 @@
 
     if (datagram->state != EC_DATAGRAM_RECEIVED) {
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Failed to receive process data sync manager configuration"
-               " datagram for slave %u: ", slave->ring_position);
+        EC_SLAVE_ERR(slave, "Failed to receive process data sync"
+                " manager configuration datagram: ");
         ec_datagram_print_state(datagram);
         return;
     }
@@ -1229,8 +1177,7 @@
     if (datagram->working_counter != 1) {
         slave->error_flag = 1;
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Failed to set process data sync managers of slave %u: ",
-                slave->ring_position);
+        EC_SLAVE_ERR(slave, "Failed to set process data sync managers: ");
         ec_datagram_print_wc_error(datagram);
         return;
     }
@@ -1260,8 +1207,8 @@
     if (slave->base_fmmu_count < slave->config->used_fmmus) {
         slave->error_flag = 1;
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Slave %u has less FMMUs (%u) than requested (%u).\n",
-                slave->ring_position, slave->base_fmmu_count,
+        EC_SLAVE_ERR(slave, "Slave has less FMMUs (%u)"
+                " than requested (%u).\n", slave->base_fmmu_count,
                 slave->config->used_fmmus);
         return;
     }
@@ -1280,8 +1227,8 @@
         if (!(sync = ec_slave_get_sync(slave, fmmu->sync_index))) {
             slave->error_flag = 1;
             fsm->state = ec_fsm_slave_config_state_error;
-            EC_ERR("Failed to determine PDO sync manager for FMMU on slave"
-                    " %u!\n", slave->ring_position);
+            EC_SLAVE_ERR(slave, "Failed to determine PDO sync manager"
+                    " for FMMU!\n");
             return;
         }
         ec_fmmu_config_page(fmmu, sync,
@@ -1308,8 +1255,7 @@
 
     if (datagram->state != EC_DATAGRAM_RECEIVED) {
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Failed to receive FMMUs datagram for slave %u: ",
-               slave->ring_position);
+        EC_SLAVE_ERR(slave, "Failed to receive FMMUs datagram: ");
         ec_datagram_print_state(datagram);
         return;
     }
@@ -1317,8 +1263,7 @@
     if (datagram->working_counter != 1) {
         slave->error_flag = 1;
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Failed to set FMMUs of slave %u: ",
-               slave->ring_position);
+        EC_SLAVE_ERR(slave, "Failed to set FMMUs: ");
         ec_datagram_print_wc_error(datagram);
         return;
     }
@@ -1345,15 +1290,12 @@
 
     if (config->dc_assign_activate) {
         if (!slave->base_dc_supported || !slave->has_dc_system_time) {
-            EC_WARN("Slave %u seems not to support distributed clocks!\n",
-                    slave->ring_position);
+            EC_SLAVE_WARN(slave, "Slave seems not to support"
+                    " distributed clocks!\n");
         }
 
-        if (slave->master->debug_level)
-            EC_DBG("Slave %u: Setting DC cycle times to %u / %u.\n",
-                    slave->ring_position,
-                    config->dc_sync[0].cycle_time,
-                    config->dc_sync[1].cycle_time);
+        EC_SLAVE_DBG(slave, 1, "Setting DC cycle times to %u / %u.\n",
+                config->dc_sync[0].cycle_time, config->dc_sync[1].cycle_time);
 
         // set DC cycle times
         ec_datagram_fpwr(datagram, slave->station_address, 0x09A0, 8);
@@ -1392,8 +1334,7 @@
 
     if (datagram->state != EC_DATAGRAM_RECEIVED) {
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Failed to receive DC cycle times datagram for slave %u: ",
-                slave->ring_position);
+        EC_SLAVE_ERR(slave, "Failed to receive DC cycle times datagram: ");
         ec_datagram_print_state(datagram);
         return;
     }
@@ -1401,8 +1342,7 @@
     if (datagram->working_counter != 1) {
         slave->error_flag = 1;
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Failed to set DC cycle times of slave %u: ",
-                slave->ring_position);
+        EC_SLAVE_ERR(slave, "Failed to set DC cycle times: ");
         ec_datagram_print_wc_error(datagram);
         return;
     }
@@ -1424,23 +1364,28 @@
                 sync0->cycle_time - remainder + sync0->shift_time;
 
             if (master->debug_level) {
-                EC_DBG("app_start_time=%llu\n", master->app_start_time);
-                EC_DBG("    start_time=%llu\n", start_time);
-                EC_DBG("    cycle_time=%u\n", sync0->cycle_time);
-                EC_DBG("    shift_time=%u\n", sync0->shift_time);
-                EC_DBG("     remainder=%u\n", remainder);
-                EC_DBG("         start=%llu\n", start);
+                EC_SLAVE_DBG(slave, 1, "app_start_time=%llu\n",
+                        master->app_start_time);
+                EC_SLAVE_DBG(slave, 1, "    start_time=%llu\n",
+                        start_time);
+                EC_SLAVE_DBG(slave, 1, "    cycle_time=%u\n",
+                        sync0->cycle_time);
+                EC_SLAVE_DBG(slave, 1, "    shift_time=%u\n",
+                        sync0->shift_time);
+                EC_SLAVE_DBG(slave, 1, "     remainder=%u\n",
+                        remainder);
+                EC_SLAVE_DBG(slave, 1, "         start=%llu\n",
+                        start);
             }
             start_time = start;
         } else {
-            EC_WARN("No application time supplied. Cyclic start time will "
-                    "not be in phase for slave %u.\n", slave->ring_position);
+            EC_SLAVE_WARN(slave, "No application time supplied."
+                    " Cyclic start time will not be in phase.\n");
         }
     }
 
-    if (master->debug_level)
-        EC_DBG("Slave %u: Setting DC cyclic operation start time to %llu.\n",
-                slave->ring_position, start_time);
+    EC_SLAVE_DBG(slave, 1, "Setting DC cyclic operation"
+            " start time to %llu.\n", start_time);
 
     ec_datagram_fpwr(datagram, slave->station_address, 0x0990, 8);
     EC_WRITE_U64(datagram->data, start_time);
@@ -1470,8 +1415,7 @@
 
     if (datagram->state != EC_DATAGRAM_RECEIVED) {
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Failed to receive DC start time datagram for slave %u: ",
-                slave->ring_position);
+        EC_SLAVE_ERR(slave, "Failed to receive DC start time datagram: ");
         ec_datagram_print_state(datagram);
         return;
     }
@@ -1479,15 +1423,13 @@
     if (datagram->working_counter != 1) {
         slave->error_flag = 1;
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Failed to set DC start time of slave %u: ",
-                slave->ring_position);
+        EC_SLAVE_ERR(slave, "Failed to set DC start time: ");
         ec_datagram_print_wc_error(datagram);
         return;
     }
 
-    if (slave->master->debug_level)
-        EC_DBG("Slave %u: Setting DC AssignActivate to 0x%04x.\n",
-                slave->ring_position, config->dc_assign_activate);
+    EC_SLAVE_DBG(slave, 1, "Setting DC AssignActivate to 0x%04x.\n",
+            config->dc_assign_activate);
 
     // assign sync unit to EtherCAT or PDI
     ec_datagram_fpwr(datagram, slave->station_address, 0x0980, 2);
@@ -1512,8 +1454,7 @@
 
     if (datagram->state != EC_DATAGRAM_RECEIVED) {
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Failed to receive DC activation datagram for slave %u: ",
-                slave->ring_position);
+        EC_SLAVE_ERR(slave, "Failed to receive DC activation datagram: ");
         ec_datagram_print_state(datagram);
         return;
     }
@@ -1521,8 +1462,7 @@
     if (datagram->working_counter != 1) {
         slave->error_flag = 1;
         fsm->state = ec_fsm_slave_config_state_error;
-        EC_ERR("Failed to set DC cyclic operation state of slave %u: ",
-                slave->ring_position);
+        EC_SLAVE_ERR(slave, "Failed to activate DC: ");
         ec_datagram_print_wc_error(datagram);
         return;
     }
@@ -1551,7 +1491,6 @@
         ec_fsm_slave_config_t *fsm /**< slave state machine */
         )
 {
-    ec_master_t *master = fsm->slave->master;
     ec_slave_t *slave = fsm->slave;
 
     if (ec_fsm_change_exec(fsm->fsm_change)) return;
@@ -1565,16 +1504,11 @@
 
     // slave is now in SAFEOP
 
-    if (master->debug_level) {
-        EC_DBG("Slave %u is now in SAFEOP.\n", slave->ring_position);
-    }
+    EC_SLAVE_DBG(slave, 1, "Now in SAFEOP.\n");
 
     if (fsm->slave->current_state == fsm->slave->requested_state) {
         fsm->state = ec_fsm_slave_config_state_end; // successful
-        if (master->debug_level) {
-            EC_DBG("Finished configuration of slave %u.\n",
-                   slave->ring_position);
-        }
+        EC_SLAVE_DBG(slave, 1, "Finished configuration.\n");
         return;
     }
 
@@ -1592,7 +1526,6 @@
         ec_fsm_slave_config_t *fsm /**< slave state machine */
         )
 {
-    ec_master_t *master = fsm->slave->master;
     ec_slave_t *slave = fsm->slave;
 
     if (ec_fsm_change_exec(fsm->fsm_change)) return;
@@ -1606,10 +1539,7 @@
 
     // slave is now in OP
 
-    if (master->debug_level) {
-        EC_DBG("Slave %u is now in OP.\n", slave->ring_position);
-        EC_DBG("Finished configuration of slave %u.\n", slave->ring_position);
-    }
+    EC_SLAVE_DBG(slave, 1, "Now in OP. Finished configuration.\n");
 
     fsm->state = ec_fsm_slave_config_state_end; // successful
 }
@@ -1622,10 +1552,8 @@
         ec_fsm_slave_config_t *fsm /**< slave state machine */
         )
 {
-    if (fsm->slave->master->debug_level) {
-        EC_DBG("Slave configuration for slave %u detached during "
-                "configuration. Reconfiguring.", fsm->slave->ring_position);
-    }
+    EC_SLAVE_DBG(fsm->slave, 1, "Slave configuration detached during "
+            "configuration. Reconfiguring.");
 
     ec_fsm_slave_config_enter_init(fsm); // reconfigure
 }