drivers/ec_master.c
branchkernel2.6
changeset 27 d75ef6b46e33
parent 26 60435f959e5c
child 29 8c16582f2394
equal deleted inserted replaced
26:60435f959e5c 27:d75ef6b46e33
    22 
    22 
    23 /**
    23 /**
    24    Konstruktor des EtherCAT-Masters.
    24    Konstruktor des EtherCAT-Masters.
    25 
    25 
    26    @param master Zeiger auf den zu initialisierenden
    26    @param master Zeiger auf den zu initialisierenden
    27    EtherCAT-Master
    27                  EtherCAT-Master
    28    @param dev Zeiger auf das EtherCAT-Gerät, mit dem der
       
    29    Master arbeiten soll
       
    30 
    28 
    31    @return 0 bei Erfolg, sonst < 0 (= dev ist NULL)
    29    @return 0 bei Erfolg, sonst < 0 (= dev ist NULL)
    32 */
    30 */
    33 
    31 
    34 int EtherCAT_master_init(EtherCAT_master_t *master,
    32 void EtherCAT_master_init(EtherCAT_master_t *master)
    35                          EtherCAT_device_t *dev)
    33 {
    36 {
       
    37   if (!dev)
       
    38   {
       
    39     printk(KERN_ERR "EtherCAT: Master init without device!\n");
       
    40     return -1;
       
    41   }
       
    42 
       
    43   master->slaves = NULL;
    34   master->slaves = NULL;
    44   master->slave_count = 0;
    35   master->slave_count = 0;
    45   master->dev = dev;
    36   master->dev = NULL;
    46   master->command_index = 0x00;
    37   master->command_index = 0x00;
    47   master->tx_data_length = 0;
    38   master->tx_data_length = 0;
    48   master->process_data = NULL;
    39   master->process_data = NULL;
    49   master->process_data_length = 0;
    40   master->process_data_length = 0;
    50   master->debug_level = 0;
    41   master->debug_level = 0;
    51 
       
    52   return 0;
       
    53 }
    42 }
    54 
    43 
    55 /***************************************************************/
    44 /***************************************************************/
    56 
    45 
    57 /**
    46 /**
    73     kfree(master->process_data);
    62     kfree(master->process_data);
    74     master->process_data = NULL;
    63     master->process_data = NULL;
    75   }
    64   }
    76 
    65 
    77   master->process_data_length = 0;
    66   master->process_data_length = 0;
       
    67 }
       
    68 
       
    69 /***************************************************************/
       
    70 
       
    71 /**
       
    72    Setzt das EtherCAT-Geraet, auf dem der Master arbeitet.
       
    73 
       
    74    Registriert das Geraet beim master, der es daraufhin oeffnet.
       
    75 
       
    76    @param master Der EtherCAT-Master
       
    77    @param device Das EtherCAT-Geraet
       
    78    @return 0, wenn alles o.k.,
       
    79            < 0, wenn bereits ein Geraet registriert
       
    80            oder das Geraet nicht geoeffnet werden konnte.
       
    81 */
       
    82 
       
    83 int EtherCAT_register_device(EtherCAT_master_t *master,
       
    84                              EtherCAT_device_t *device)
       
    85 {
       
    86   if (!master || !device)
       
    87   {
       
    88     printk(KERN_ERR "EtherCAT: Illegal parameters for register_device()!\n");
       
    89     return -1;
       
    90   }
       
    91 
       
    92   if (master->dev)
       
    93   {
       
    94     printk(KERN_ERR "EtherCAT: Master already has a device.\n");
       
    95     return -1;
       
    96   }
       
    97 
       
    98   if (EtherCAT_device_open(device) < 0)
       
    99   {
       
   100     printk(KERN_ERR "EtherCAT: Could not open device %X!\n",
       
   101            (unsigned int) master->dev);
       
   102     return -1;
       
   103   }
       
   104 
       
   105   master->dev = device;
       
   106 
       
   107   return 0;
       
   108 }
       
   109 
       
   110 /***************************************************************/
       
   111 
       
   112 /**
       
   113    Loescht das EtherCAT-Geraet, auf dem der Master arbeitet.
       
   114 
       
   115    @param master Der EtherCAT-Master
       
   116    @param device Das EtherCAT-Geraet
       
   117 */
       
   118 
       
   119 void EtherCAT_unregister_device(EtherCAT_master_t *master,
       
   120                                 EtherCAT_device_t *device)
       
   121 {
       
   122   if (master->dev != device)
       
   123   {
       
   124     printk(KERN_WARNING "EtherCAT: Trying to unregister unknown device.\n");
       
   125     return;
       
   126   }
       
   127 
       
   128   if (EtherCAT_device_close(master->dev) < 0)
       
   129   {
       
   130     printk(KERN_WARNING "EtherCAT: Could not close device!\n");
       
   131   }
       
   132 
       
   133   master->dev = NULL;
    78 }
   134 }
    79 
   135 
    80 /***************************************************************/
   136 /***************************************************************/
    81 
   137 
    82 /**
   138 /**
   323   EtherCAT_command_t cmd;
   379   EtherCAT_command_t cmd;
   324   EtherCAT_slave_t *cur;
   380   EtherCAT_slave_t *cur;
   325   unsigned int i, j, found, length, pos;
   381   unsigned int i, j, found, length, pos;
   326   unsigned char data[2];
   382   unsigned char data[2];
   327 
   383 
   328   // EtherCAT_clear_slaves() must be called before!
       
   329   if (master->slaves || master->slave_count)
       
   330   {
       
   331     printk(KERN_ERR "EtherCAT duplicate slave check!");
       
   332     return -1;
       
   333   }
       
   334 
       
   335   // No slaves.
       
   336   if (slave_count == 0)
   384   if (slave_count == 0)
   337   {
   385   {
   338     printk(KERN_ERR "EtherCAT: No slaves in list!");
   386     printk(KERN_ERR "EtherCAT: No slaves in list!\n");
   339     return -1;
   387     return -1;
   340   }
   388   }
   341 
   389 
   342   // Determine number of slaves on bus
   390   // Determine number of slaves on bus
   343 
   391 
  1088 
  1136 
  1089 /***************************************************************/
  1137 /***************************************************************/
  1090 
  1138 
  1091 EXPORT_SYMBOL(EtherCAT_master_init);
  1139 EXPORT_SYMBOL(EtherCAT_master_init);
  1092 EXPORT_SYMBOL(EtherCAT_master_clear);
  1140 EXPORT_SYMBOL(EtherCAT_master_clear);
       
  1141 EXPORT_SYMBOL(EtherCAT_register_device);
       
  1142 EXPORT_SYMBOL(EtherCAT_unregister_device);
  1093 EXPORT_SYMBOL(EtherCAT_read_process_data);
  1143 EXPORT_SYMBOL(EtherCAT_read_process_data);
  1094 EXPORT_SYMBOL(EtherCAT_write_process_data);
  1144 EXPORT_SYMBOL(EtherCAT_write_process_data);
  1095 EXPORT_SYMBOL(EtherCAT_check_slaves);
  1145 EXPORT_SYMBOL(EtherCAT_check_slaves);
  1096 EXPORT_SYMBOL(EtherCAT_activate_all_slaves);
  1146 EXPORT_SYMBOL(EtherCAT_activate_all_slaves);
  1097 EXPORT_SYMBOL(EtherCAT_clear_process_data);
  1147 EXPORT_SYMBOL(EtherCAT_clear_process_data);
  1098 EXPORT_SYMBOL(EtherCAT_deactivate_all_slaves);
  1148 EXPORT_SYMBOL(EtherCAT_deactivate_all_slaves);
       
  1149 
       
  1150 /***************************************************************/