master/slave.c
changeset 758 8fa6f825eb7d
parent 754 0b47b49c5976
child 762 15214036c72a
equal deleted inserted replaced
757:6210c4260899 758:8fa6f825eb7d
   280 }
   280 }
   281 
   281 
   282 /*****************************************************************************/
   282 /*****************************************************************************/
   283 
   283 
   284 /**
   284 /**
   285 */
   285  * SDO kobject clear method.
       
   286  */
   286 
   287 
   287 void ec_slave_sdos_clear(struct kobject *kobj /**< kobject for SDOs */)
   288 void ec_slave_sdos_clear(struct kobject *kobj /**< kobject for SDOs */)
   288 {
   289 {
   289 }
   290 }
   290 
   291 
   372 }
   373 }
   373 
   374 
   374 /*****************************************************************************/
   375 /*****************************************************************************/
   375 
   376 
   376 /**
   377 /**
       
   378  * Request a slave state and resets the error flag.
   377  */
   379  */
   378 
   380 
   379 void ec_slave_request_state(ec_slave_t *slave, /**< EtherCAT slave */
   381 void ec_slave_request_state(ec_slave_t *slave, /**< EtherCAT slave */
   380                             ec_slave_state_t state /**< new state */
   382                             ec_slave_state_t state /**< new state */
   381                             )
   383                             )
   873 /**
   875 /**
   874  * Schedules an EEPROM write request.
   876  * Schedules an EEPROM write request.
   875  * \return 0 case of success, otherwise error code.
   877  * \return 0 case of success, otherwise error code.
   876  */
   878  */
   877 
   879 
   878 int ec_slave_schedule_eeprom_writing(ec_eeprom_write_request_t *request)
   880 int ec_slave_schedule_eeprom_writing(
       
   881         ec_eeprom_write_request_t *request /**< EEPROM write request */
       
   882         )
   879 {
   883 {
   880     ec_master_t *master = request->slave->master;
   884     ec_master_t *master = request->slave->master;
   881 
   885 
   882     request->state = EC_REQUEST_QUEUED;
   886     request->state = EC_REQUEST_QUEUED;
   883 
   887 
   922  *   --reflect-out=0 --xor-out=0 --generate c --algorithm=bit-by-bit
   926  *   --reflect-out=0 --xor-out=0 --generate c --algorithm=bit-by-bit
   923  *
   927  *
   924  * \return CRC8
   928  * \return CRC8
   925  */
   929  */
   926 
   930 
   927 uint8_t ec_slave_eeprom_crc(const uint8_t *data, size_t length)
   931 uint8_t ec_slave_eeprom_crc(
       
   932         const uint8_t *data, /**< pointer to data */
       
   933         size_t length /**< number of bytes in \a data */
       
   934         )
   928 {
   935 {
   929     unsigned int i;
   936     unsigned int i;
   930     uint8_t bit, byte, crc = 0x48;
   937     uint8_t bit, byte, crc = 0x48;
   931 
   938 
   932     while (length--) {
   939     while (length--) {
  1177 }
  1184 }
  1178 
  1185 
  1179 /*****************************************************************************/
  1186 /*****************************************************************************/
  1180 
  1187 
  1181 /**
  1188 /**
       
  1189  * Get the sync manager for either Rx- or Tx-PDOs.
       
  1190  * \return pointer to sync manager, or NULL.
  1182  */
  1191  */
  1183 
  1192 
  1184 ec_sync_t *ec_slave_get_pdo_sync(
  1193 ec_sync_t *ec_slave_get_pdo_sync(
  1185         ec_slave_t *slave, /**< EtherCAT slave */
  1194         ec_slave_t *slave, /**< EtherCAT slave */
  1186         ec_direction_t dir /**< input or output */
  1195         ec_direction_t dir /**< input or output */
  1370     return ec_slave_conf_sdo(slave, sdo_index, sdo_subindex, data, 4);
  1379     return ec_slave_conf_sdo(slave, sdo_index, sdo_subindex, data, 4);
  1371 }
  1380 }
  1372 
  1381 
  1373 /*****************************************************************************/
  1382 /*****************************************************************************/
  1374 
  1383 
       
  1384 /**
       
  1385  * Clear slave's PDO mapping.
       
  1386  */
       
  1387 
  1375 void ecrt_slave_pdo_mapping_clear(
  1388 void ecrt_slave_pdo_mapping_clear(
  1376         ec_slave_t *slave, /**< EtherCAT slave */
  1389         ec_slave_t *slave, /**< EtherCAT slave */
  1377         ec_direction_t dir /**< output/input */
  1390         ec_direction_t dir /**< output/input */
  1378         )
  1391         )
  1379 {
  1392 {
  1391     sync->alt_mapping = 1;
  1404     sync->alt_mapping = 1;
  1392 }
  1405 }
  1393 
  1406 
  1394 /*****************************************************************************/
  1407 /*****************************************************************************/
  1395 
  1408 
       
  1409 /**
       
  1410  * Add a PDO to the list of known mapped PDOs.
       
  1411  */
       
  1412 
  1396 int ecrt_slave_pdo_mapping_add(
  1413 int ecrt_slave_pdo_mapping_add(
  1397         ec_slave_t *slave, /**< EtherCAT slave */
  1414         ec_slave_t *slave, /**< EtherCAT slave */
  1398         ec_direction_t dir, /**< input/output */
  1415         ec_direction_t dir, /**< input/output */
  1399         uint16_t pdo_index /**< Index of PDO mapping list */)
  1416         uint16_t pdo_index /**< Index of mapped PDO */)
  1400 {
  1417 {
  1401     ec_pdo_t *pdo;
  1418     ec_pdo_t *pdo;
  1402     ec_sync_t *sync;
  1419     ec_sync_t *sync;
  1403     unsigned int not_found = 1;
  1420     unsigned int not_found = 1;
  1404 
  1421 
  1441     sync->alt_mapping = 1;
  1458     sync->alt_mapping = 1;
  1442     return 0;
  1459     return 0;
  1443 }
  1460 }
  1444 
  1461 
  1445 /*****************************************************************************/
  1462 /*****************************************************************************/
       
  1463 
       
  1464 /**
       
  1465  * Convenience function for ecrt_slave_pdo_mapping_clear() and
       
  1466  * ecrt_slave_pdo_mapping_add().
       
  1467  */
  1446 
  1468 
  1447 int ecrt_slave_pdo_mapping(ec_slave_t *slave, /**< EtherCAT slave */
  1469 int ecrt_slave_pdo_mapping(ec_slave_t *slave, /**< EtherCAT slave */
  1448         ec_direction_t dir, /**< input/output */
  1470         ec_direction_t dir, /**< input/output */
  1449         unsigned int num_args, /**< Number of following arguments */
  1471         unsigned int num_args, /**< Number of following arguments */
  1450         ... /**< PDO indices to map */
  1472         ... /**< PDO indices to map */