master/slave.c
changeset 596 f2d874b2caa6
parent 556 dc5829af044d
child 597 3a2c2d6ca5e9
equal deleted inserted replaced
595:6dd7156e96ba 596:f2d874b2caa6
  1213     return ec_slave_conf_sdo(slave, sdo_index, sdo_subindex, data, 4);
  1213     return ec_slave_conf_sdo(slave, sdo_index, sdo_subindex, data, 4);
  1214 }
  1214 }
  1215 
  1215 
  1216 /*****************************************************************************/
  1216 /*****************************************************************************/
  1217 
  1217 
  1218 /**
       
  1219    \return 0 in case of success, else < 0
       
  1220    \ingroup RealtimeInterface
       
  1221 */
       
  1222 
       
  1223 int ecrt_slave_pdo_size(ec_slave_t *slave, /**< EtherCAT slave */
       
  1224                         uint16_t pdo_index, /**< PDO index */
       
  1225                         uint8_t pdo_subindex, /**< PDO subindex */
       
  1226                         size_t size /**< new PDO size */
       
  1227                         )
       
  1228 {
       
  1229     EC_WARN("ecrt_slave_pdo_size() currently not available.\n");
       
  1230     return -1;
       
  1231 
       
  1232 #if 0
       
  1233     unsigned int i, j, field_counter;
       
  1234     const ec_sii_sync_t *sync;
       
  1235     const ec_pdo_t *pdo;
       
  1236     ec_varsize_t *var;
       
  1237 
       
  1238     if (!slave->type) {
       
  1239         EC_ERR("Slave %i has no type information!\n", slave->ring_position);
       
  1240         return -1;
       
  1241     }
       
  1242 
       
  1243     field_counter = 0;
       
  1244     for (i = 0; (sync = slave->type->sync_managers[i]); i++) {
       
  1245         for (j = 0; (field = sync->fields[j]); j++) {
       
  1246             if (!strcmp(field->name, field_name)) {
       
  1247                 if (field_counter++ == field_index) {
       
  1248                     // is the size of this field variable?
       
  1249                     if (field->size) {
       
  1250                         EC_ERR("Field \"%s\"[%i] of slave %i has no variable"
       
  1251                                " size!\n", field->name, field_index,
       
  1252                                slave->ring_position);
       
  1253                         return -1;
       
  1254                     }
       
  1255                     // does a size specification already exist?
       
  1256                     list_for_each_entry(var, &slave->varsize_fields, list) {
       
  1257                         if (var->field == field) {
       
  1258                             EC_WARN("Resizing field \"%s\"[%i] of slave %i.\n",
       
  1259                                     field->name, field_index,
       
  1260                                     slave->ring_position);
       
  1261                             var->size = size;
       
  1262                             return 0;
       
  1263                         }
       
  1264                     }
       
  1265                     // create a new size specification...
       
  1266                     if (!(var = kmalloc(sizeof(ec_varsize_t), GFP_KERNEL))) {
       
  1267                         EC_ERR("Failed to allocate memory for varsize_t!\n");
       
  1268                         return -1;
       
  1269                     }
       
  1270                     var->field = field;
       
  1271                     var->size = size;
       
  1272                     list_add_tail(&var->list, &slave->varsize_fields);
       
  1273                     return 0;
       
  1274                 }
       
  1275             }
       
  1276         }
       
  1277     }
       
  1278 
       
  1279     EC_ERR("Slave %i (\"%s %s\") has no field \"%s\"[%i]!\n",
       
  1280            slave->ring_position, slave->type->vendor_name,
       
  1281            slave->type->product_name, field_name, field_index);
       
  1282     return -1;
       
  1283 #endif
       
  1284 }
       
  1285 
       
  1286 /*****************************************************************************/
       
  1287 
       
  1288 /** \cond */
  1218 /** \cond */
  1289 
  1219 
  1290 EXPORT_SYMBOL(ecrt_slave_conf_sdo8);
  1220 EXPORT_SYMBOL(ecrt_slave_conf_sdo8);
  1291 EXPORT_SYMBOL(ecrt_slave_conf_sdo16);
  1221 EXPORT_SYMBOL(ecrt_slave_conf_sdo16);
  1292 EXPORT_SYMBOL(ecrt_slave_conf_sdo32);
  1222 EXPORT_SYMBOL(ecrt_slave_conf_sdo32);
  1293 EXPORT_SYMBOL(ecrt_slave_pdo_size);
       
  1294 
  1223 
  1295 /** \endcond */
  1224 /** \endcond */
  1296 
  1225 
  1297 /*****************************************************************************/
  1226 /*****************************************************************************/