drivers/ec_slave.c
changeset 42 a22a202d0f42
parent 39 6965c23a6826
child 52 c0405659a74a
equal deleted inserted replaced
41:42c66194c0c8 42:a22a202d0f42
    17 
    17 
    18 /**
    18 /**
    19    EtherCAT-Slave-Konstruktor.
    19    EtherCAT-Slave-Konstruktor.
    20 
    20 
    21    Initialisiert einen EtherCAT-Slave.
    21    Initialisiert einen EtherCAT-Slave.
       
    22 
       
    23    ACHTUNG! Dieser Konstruktor wird quasi nie aufgerufen. Bitte immer das
       
    24    Makro ECAT_INIT_SLAVE() in ec_slave.h anpassen!
    22 
    25 
    23    @param slave Zeiger auf den zu initialisierenden Slave
    26    @param slave Zeiger auf den zu initialisierenden Slave
    24 */
    27 */
    25 
    28 
    26 void EtherCAT_slave_init(EtherCAT_slave_t *slave)
    29 void EtherCAT_slave_init(EtherCAT_slave_t *slave)
    33   slave->vendor_id = 0;
    36   slave->vendor_id = 0;
    34   slave->product_code = 0;
    37   slave->product_code = 0;
    35   slave->revision_number = 0;
    38   slave->revision_number = 0;
    36   slave->serial_number = 0;
    39   slave->serial_number = 0;
    37   slave->desc = NULL;
    40   slave->desc = NULL;
    38   slave->logical_address0 = 0;
    41   slave->logical_address = 0;
    39   slave->current_state = ECAT_STATE_UNKNOWN;
    42   slave->current_state = ECAT_STATE_UNKNOWN;
    40   slave->requested_state = ECAT_STATE_UNKNOWN;
    43   slave->requested_state = ECAT_STATE_UNKNOWN;
       
    44   slave->process_data = NULL;
       
    45   slave->domain = 0;
    41   slave->error_reported = 0;
    46   slave->error_reported = 0;
    42 }
    47 }
    43 
    48 
    44 /*****************************************************************************/
    49 /*****************************************************************************/
    45 
    50 
    95       slave->error_reported = 1;
   100       slave->error_reported = 1;
    96     }
   101     }
    97     return 0;
   102     return 0;
    98   }
   103   }
    99 
   104 
   100   if (unlikely(channel >= slave->desc->channels)) {
   105   if (unlikely(channel >= slave->desc->channel_count)) {
   101     if (likely(slave->error_reported)) {
   106     if (likely(slave->error_reported)) {
   102       printk(KERN_WARNING "EtherCAT: Reading failed on slave %4X (addr %0X)"
   107       printk(KERN_WARNING "EtherCAT: Reading failed on slave %4X (addr %0X)"
   103              " - Type (%s %s) has no channel %i.\n",
   108              " - Type (%s %s) has no channel %i.\n",
   104              slave->station_address, (unsigned int) slave,
   109              slave->station_address, (unsigned int) slave,
   105              slave->desc->vendor_name, slave->desc->product_name,
   110              slave->desc->vendor_name, slave->desc->product_name,
   106              channel);
   111              channel);
       
   112       slave->error_reported = 1;
       
   113     }
       
   114     return 0;
       
   115   }
       
   116 
       
   117   if (unlikely(!slave->process_data)) {
       
   118     if (likely(slave->error_reported)) {
       
   119       printk(KERN_WARNING "EtherCAT: Reading failed on slave %4X (addr %0X)"
       
   120              " - Slave does not belong to any process data object!\n",
       
   121              slave->station_address, (unsigned int) slave);
   107       slave->error_reported = 1;
   122       slave->error_reported = 1;
   108     }
   123     }
   109     return 0;
   124     return 0;
   110   }
   125   }
   111 
   126 
   154       slave->error_reported = 1;
   169       slave->error_reported = 1;
   155     }
   170     }
   156     return;
   171     return;
   157   }
   172   }
   158 
   173 
   159   if (unlikely(channel >= slave->desc->channels)) {
   174   if (unlikely(channel >= slave->desc->channel_count)) {
   160     if (likely(slave->error_reported)) {
   175     if (likely(slave->error_reported)) {
   161       printk(KERN_WARNING "EtherCAT: Writing failed on slave %4X (addr %0X)"
   176       printk(KERN_WARNING "EtherCAT: Writing failed on slave %4X (addr %0X)"
   162              " - Type (%s %s) has no channel %i.\n",
   177              " - Type (%s %s) has no channel %i.\n",
   163              slave->station_address, (unsigned int) slave,
   178              slave->station_address, (unsigned int) slave,
   164              slave->desc->vendor_name, slave->desc->product_name,
   179              slave->desc->vendor_name, slave->desc->product_name,
   166       slave->error_reported = 1;
   181       slave->error_reported = 1;
   167     }
   182     }
   168     return;
   183     return;
   169   }
   184   }
   170 
   185 
       
   186   if (unlikely(!slave->process_data)) {
       
   187     if (likely(slave->error_reported)) {
       
   188       printk(KERN_WARNING "EtherCAT: Writing failed on slave %4X (addr %0X)"
       
   189              " - Slave does not belong to any process data object!\n",
       
   190              slave->station_address, (unsigned int) slave);
       
   191       slave->error_reported = 1;
       
   192     }
       
   193     return;
       
   194   }
       
   195 
   171   if (unlikely(slave->error_reported))
   196   if (unlikely(slave->error_reported))
   172     slave->error_reported = 0;
   197     slave->error_reported = 0;
   173 
   198 
   174   slave->desc->write(slave->process_data, channel, value);
   199   slave->desc->write(slave->process_data, channel, value);
   175 }
   200 }
   178 
   203 
   179 EXPORT_SYMBOL(EtherCAT_write_value);
   204 EXPORT_SYMBOL(EtherCAT_write_value);
   180 EXPORT_SYMBOL(EtherCAT_read_value);
   205 EXPORT_SYMBOL(EtherCAT_read_value);
   181 
   206 
   182 /*****************************************************************************/
   207 /*****************************************************************************/
       
   208 
       
   209 /* Emacs-Konfiguration
       
   210 ;;; Local Variables: ***
       
   211 ;;; c-basic-offset:2 ***
       
   212 ;;; End: ***
       
   213 */