master/slave.c
changeset 157 37c6dd0ff0b1
parent 155 ff65679b65fe
child 160 7ddf8367196a
equal deleted inserted replaced
156:43d7d714679f 157:37c6dd0ff0b1
    86 {
    86 {
    87     ec_eeprom_string_t *string, *next_str;
    87     ec_eeprom_string_t *string, *next_str;
    88     ec_eeprom_sync_t *sync, *next_sync;
    88     ec_eeprom_sync_t *sync, *next_sync;
    89     ec_eeprom_pdo_t *pdo, *next_pdo;
    89     ec_eeprom_pdo_t *pdo, *next_pdo;
    90     ec_eeprom_pdo_entry_t *entry, *next_ent;
    90     ec_eeprom_pdo_entry_t *entry, *next_ent;
    91     //ec_sdo_t *sdo, *next_sdo;
    91     ec_sdo_t *sdo, *next_sdo;
    92     //ec_sdo_entry_t *en, *next_en;
    92     ec_sdo_entry_t *en, *next_en;
    93 
    93 
    94     // Alle Strings freigeben
    94     // Alle Strings freigeben
    95     list_for_each_entry_safe(string, next_str, &slave->eeprom_strings, list) {
    95     list_for_each_entry_safe(string, next_str, &slave->eeprom_strings, list) {
    96         list_del(&string->list);
    96         list_del(&string->list);
    97         kfree(string);
    97         kfree(string);
   120 
   120 
   121     if (slave->eeprom_name) kfree(slave->eeprom_name);
   121     if (slave->eeprom_name) kfree(slave->eeprom_name);
   122     if (slave->eeprom_group) kfree(slave->eeprom_group);
   122     if (slave->eeprom_group) kfree(slave->eeprom_group);
   123     if (slave->eeprom_desc) kfree(slave->eeprom_desc);
   123     if (slave->eeprom_desc) kfree(slave->eeprom_desc);
   124 
   124 
   125 #if 0
       
   126     // Alle SDOs freigeben
   125     // Alle SDOs freigeben
   127     list_for_each_entry_safe(sdo, next_sdo, &slave->sdo_dictionary, list) {
   126     list_for_each_entry_safe(sdo, next_sdo, &slave->sdo_dictionary, list) {
   128         list_del(&sdo->list);
   127         list_del(&sdo->list);
   129         if (sdo->name) kfree(sdo->name);
   128         if (sdo->name) kfree(sdo->name);
   130         // Alle Entries freigeben
   129         // Alle Entries freigeben
   134         }
   133         }
   135         kfree(sdo);
   134         kfree(sdo);
   136     }
   135     }
   137 
   136 
   138     ec_command_clear(&slave->mbox_command);
   137     ec_command_clear(&slave->mbox_command);
   139 #endif
       
   140 }
   138 }
   141 
   139 
   142 /*****************************************************************************/
   140 /*****************************************************************************/
   143 
   141 
   144 /**
   142 /**
   906     ec_eeprom_pdo_entry_t *pdo_entry;
   904     ec_eeprom_pdo_entry_t *pdo_entry;
   907     ec_sdo_t *sdo;
   905     ec_sdo_t *sdo;
   908     ec_sdo_entry_t *sdo_entry;
   906     ec_sdo_entry_t *sdo_entry;
   909     int first, i;
   907     int first, i;
   910 
   908 
   911     if (!verbosity) {
       
   912         if (slave->type) {
       
   913             EC_INFO("%2i) %s %s: %s\n", slave->ring_position,
       
   914                     slave->type->vendor_name, slave->type->product_name,
       
   915                     slave->type->description);
       
   916         }
       
   917         else {
       
   918             EC_INFO("%2i) UNKNOWN SLAVE: 0x%08X 0x%08X\n",
       
   919                     slave->ring_position, slave->sii_vendor_id,
       
   920                     slave->sii_product_code);
       
   921         }
       
   922         return;
       
   923     }
       
   924 
       
   925     EC_INFO("x-- EtherCAT slave information ---------------\n");
       
   926 
       
   927     if (slave->type) {
   909     if (slave->type) {
   928         EC_INFO("| Vendor \"%s\", Product \"%s\": %s\n",
   910         EC_INFO("%i) %s %s: %s\n", slave->ring_position,
   929                 slave->type->vendor_name, slave->type->product_name,
   911                 slave->type->vendor_name, slave->type->product_name,
   930                 slave->type->description);
   912                 slave->type->description);
   931     }
   913     }
   932     else {
   914     else {
   933         EC_INFO("| *** This slave has no type information! ***\n");
   915         EC_INFO("%i) UNKNOWN SLAVE: vendor 0x%08X, product 0x%08X\n",
   934     }
   916                 slave->ring_position, slave->sii_vendor_id,
   935 
   917                 slave->sii_product_code);
   936     EC_INFO("| Ring position: %i, Station address: 0x%04X\n",
   918     }
   937             slave->ring_position, slave->station_address);
   919 
   938 
   920     if (!verbosity) return;
   939     EC_INFO("| Data link status:\n");
   921 
       
   922     EC_INFO("  Station address: 0x%04X\n", slave->station_address);
       
   923 
       
   924     EC_INFO("  Data link status:\n");
   940     for (i = 0; i < 2; i++) {
   925     for (i = 0; i < 2; i++) {
   941         EC_INFO("|   Port %i: link %s, loop %s, %s\n", i,
   926         EC_INFO("    Port %i: link %s, loop %s, comm %s\n", i,
   942                 slave->dl_status_link[i] ? "up" : "down",
   927                 slave->dl_status_link[i] ? "up" : "down",
   943                 slave->dl_status_loop[i] ? "closed" : "open",
   928                 slave->dl_status_loop[i] ? "closed" : "open",
   944                 slave->dl_status_comm[i] ? "comm. establ." : "no comm.");
   929                 slave->dl_status_comm[i] ? "up" : "down");
   945     }
   930     }
   946 
   931 
   947     EC_INFO("| Base information:\n");
   932     EC_INFO("  Base information:\n");
   948     EC_INFO("|   Type %u, Revision %i, Build %i\n",
   933     EC_INFO("    Type %u, revision %i, build %i\n",
   949             slave->base_type, slave->base_revision, slave->base_build);
   934             slave->base_type, slave->base_revision, slave->base_build);
   950     EC_INFO("|   Supported FMMUs: %i, Sync managers: %i\n",
   935     EC_INFO("    Supported FMMUs: %i, sync managers: %i\n",
   951             slave->base_fmmu_count, slave->base_sync_count);
   936             slave->base_fmmu_count, slave->base_sync_count);
   952 
   937 
   953     if (slave->sii_mailbox_protocols) {
   938     if (slave->sii_mailbox_protocols) {
   954         EC_INFO("| Mailbox communication:\n");
   939         EC_INFO("  Mailbox communication:\n");
   955         EC_INFO("|   RX mailbox: 0x%04X/%i, TX mailbox: 0x%04X/%i\n",
   940         EC_INFO("    RX mailbox: 0x%04X/%i, TX mailbox: 0x%04X/%i\n",
   956                 slave->sii_rx_mailbox_offset, slave->sii_rx_mailbox_size,
   941                 slave->sii_rx_mailbox_offset, slave->sii_rx_mailbox_size,
   957                 slave->sii_tx_mailbox_offset, slave->sii_tx_mailbox_size);
   942                 slave->sii_tx_mailbox_offset, slave->sii_tx_mailbox_size);
   958         EC_INFO("|   Supported protocols: ");
   943         EC_INFO("    Supported protocols: ");
   959 
   944 
   960         first = 1;
   945         first = 1;
   961         if (slave->sii_mailbox_protocols & EC_MBOX_AOE) {
   946         if (slave->sii_mailbox_protocols & EC_MBOX_AOE) {
   962             printk("AoE");
   947             printk("AoE");
   963             first = 0;
   948             first = 0;
   987             printk("VoE");
   972             printk("VoE");
   988         }
   973         }
   989         printk("\n");
   974         printk("\n");
   990     }
   975     }
   991 
   976 
   992     EC_INFO("| EEPROM data:\n");
   977     EC_INFO("  EEPROM data:\n");
   993 
   978 
   994     if (slave->sii_alias)
   979     if (slave->sii_alias)
   995         EC_INFO("|   Configured station alias: 0x%04X (%i)\n",
   980         EC_INFO("    Configured station alias: 0x%04X (%i)\n",
   996                 slave->sii_alias, slave->sii_alias);
   981                 slave->sii_alias, slave->sii_alias);
   997 
   982 
   998     EC_INFO("|   Vendor-ID: 0x%08X, Product code: 0x%08X\n",
   983     EC_INFO("    Vendor-ID: 0x%08X, Product code: 0x%08X\n",
   999             slave->sii_vendor_id, slave->sii_product_code);
   984             slave->sii_vendor_id, slave->sii_product_code);
  1000     EC_INFO("|   Revision number: 0x%08X, Serial number: 0x%08X\n",
   985     EC_INFO("    Revision number: 0x%08X, Serial number: 0x%08X\n",
  1001             slave->sii_revision_number, slave->sii_serial_number);
   986             slave->sii_revision_number, slave->sii_serial_number);
  1002 
   987 
  1003     if (slave->eeprom_name)
   988     if (slave->eeprom_name)
  1004         EC_INFO("|   Name: %s\n", slave->eeprom_name);
   989         EC_INFO("    Name: %s\n", slave->eeprom_name);
  1005     if (slave->eeprom_group)
   990     if (slave->eeprom_group)
  1006         EC_INFO("|   Group: %s\n", slave->eeprom_group);
   991         EC_INFO("    Group: %s\n", slave->eeprom_group);
  1007     if (slave->eeprom_desc)
   992     if (slave->eeprom_desc)
  1008         EC_INFO("|   Description: %s\n", slave->eeprom_desc);
   993         EC_INFO("    Description: %s\n", slave->eeprom_desc);
  1009 
   994 
  1010     if (!list_empty(&slave->eeprom_syncs)) {
   995     if (!list_empty(&slave->eeprom_syncs)) {
  1011         EC_INFO("|   Sync-Managers:\n");
   996         EC_INFO("    Sync-Managers:\n");
  1012         list_for_each_entry(sync, &slave->eeprom_syncs, list) {
   997         list_for_each_entry(sync, &slave->eeprom_syncs, list) {
  1013             EC_INFO("|     %i: 0x%04X, length %i, control 0x%02X, %s\n",
   998             EC_INFO("      %i: 0x%04X, length %i, control 0x%02X, %s\n",
  1014                     sync->index, sync->physical_start_address,
   999                     sync->index, sync->physical_start_address,
  1015                     sync->length, sync->control_register,
  1000                     sync->length, sync->control_register,
  1016                     sync->enable ? "enable" : "disable");
  1001                     sync->enable ? "enable" : "disable");
  1017         }
  1002         }
  1018     }
  1003     }
  1019 
  1004 
  1020     list_for_each_entry(pdo, &slave->eeprom_pdos, list) {
  1005     list_for_each_entry(pdo, &slave->eeprom_pdos, list) {
  1021         EC_INFO("|   %s \"%s\" (0x%04X), -> Sync-Manager %i\n",
  1006         EC_INFO("    %s \"%s\" (0x%04X), -> Sync-Manager %i\n",
  1022                 pdo->type == EC_RX_PDO ? "RXPDO" : "TXPDO",
  1007                 pdo->type == EC_RX_PDO ? "RXPDO" : "TXPDO",
  1023                 pdo->name ? pdo->name : "???",
  1008                 pdo->name ? pdo->name : "???",
  1024                 pdo->index, pdo->sync_manager);
  1009                 pdo->index, pdo->sync_manager);
  1025 
  1010 
  1026         list_for_each_entry(pdo_entry, &pdo->entries, list) {
  1011         list_for_each_entry(pdo_entry, &pdo->entries, list) {
  1027             EC_INFO("|     \"%s\" 0x%04X:%X, %i Bit\n",
  1012             EC_INFO("      \"%s\" 0x%04X:%X, %i Bit\n",
  1028                     pdo_entry->name ? pdo_entry->name : "???",
  1013                     pdo_entry->name ? pdo_entry->name : "???",
  1029                     pdo_entry->index, pdo_entry->subindex,
  1014                     pdo_entry->index, pdo_entry->subindex,
  1030                     pdo_entry->bit_length);
  1015                     pdo_entry->bit_length);
  1031         }
  1016         }
  1032     }
  1017     }
  1033 
  1018 
  1034     if (verbosity > 1) // sehr geschwätzig
  1019     if (verbosity < 2) return;
  1035     {
  1020 
  1036         if (!list_empty(&slave->sdo_dictionary)) {
  1021     if (!list_empty(&slave->sdo_dictionary)) {
  1037             EC_INFO("|   SDO-Dictionary:\n");
  1022         EC_INFO("    SDO-Dictionary:\n");
  1038             list_for_each_entry(sdo, &slave->sdo_dictionary, list) {
  1023         list_for_each_entry(sdo, &slave->sdo_dictionary, list) {
  1039                 EC_INFO("|     0x%04X \"%s\"\n", sdo->index,
  1024             EC_INFO("      0x%04X \"%s\"\n", sdo->index,
  1040                         sdo->name ? sdo->name : "");
  1025                     sdo->name ? sdo->name : "");
  1041                 EC_INFO("|       Type 0x%04X, features: 0x%02X\n",
  1026             EC_INFO("        Type 0x%04X, features: 0x%02X\n",
  1042                         sdo->type, sdo->features);
  1027                     sdo->type, sdo->features);
  1043                 list_for_each_entry(sdo_entry, &sdo->entries, list) {
  1028             list_for_each_entry(sdo_entry, &sdo->entries, list) {
  1044                     EC_INFO("|       0x%04X:%i \"%s\", type 0x%04X, %i bits\n",
  1029                 EC_INFO("        0x%04X:%i \"%s\", type 0x%04X, %i bits\n",
  1045                             sdo->index, sdo_entry->subindex,
  1030                         sdo->index, sdo_entry->subindex,
  1046                             sdo_entry->name ? sdo_entry->name : "",
  1031                         sdo_entry->name ? sdo_entry->name : "",
  1047                             sdo_entry->data_type, sdo_entry->bit_length);
  1032                         sdo_entry->data_type, sdo_entry->bit_length);
  1048                 }
       
  1049             }
  1033             }
  1050         }
  1034         }
  1051     }
  1035     }
  1052 
       
  1053     EC_INFO("x---------------------------------------------\n");
       
  1054 }
  1036 }
  1055 
  1037 
  1056 /*****************************************************************************/
  1038 /*****************************************************************************/
  1057 
  1039 
  1058 /**
  1040 /**