master/slave.c
changeset 763 5e238783b71a
parent 762 15214036c72a
child 764 41a5bdff9d9b
equal deleted inserted replaced
762:15214036c72a 763:5e238783b71a
   698     ec_pdo_entry_t *pdo_entry;
   698     ec_pdo_entry_t *pdo_entry;
   699     int first, i;
   699     int first, i;
   700     ec_sdo_data_t *sdodata;
   700     ec_sdo_data_t *sdodata;
   701     char str[20];
   701     char str[20];
   702 
   702 
   703     off += sprintf(buffer + off, "\nName: ");
   703     off += sprintf(buffer + off, "Ring position: %i\n",
   704 
   704                    slave->ring_position);
   705     if (slave->sii_name)
       
   706         off += sprintf(buffer + off, "%s", slave->sii_name);
       
   707 
       
   708     off += sprintf(buffer + off, "\nVendor ID: 0x%08X\n",
       
   709                    slave->sii_vendor_id);
       
   710     off += sprintf(buffer + off, "Product code: 0x%08X\n\n",
       
   711                    slave->sii_product_code);
       
   712 
       
   713     off += sprintf(buffer + off, "State: ");
   705     off += sprintf(buffer + off, "State: ");
   714     off += ec_state_string(slave->current_state, buffer + off);
   706     off += ec_state_string(slave->current_state, buffer + off);
   715     off += sprintf(buffer + off, " (");
   707     off += sprintf(buffer + off, " (");
   716     off += ec_state_string(slave->requested_state, buffer + off);
   708     off += ec_state_string(slave->requested_state, buffer + off);
   717     off += sprintf(buffer + off, ")\nFlags: %s, %s\n",
   709     off += sprintf(buffer + off, ")\n");
       
   710     off += sprintf(buffer + off, "Flags: %s, %s\n\n",
   718             slave->online_state == EC_SLAVE_ONLINE ? "online" : "OFFLINE",
   711             slave->online_state == EC_SLAVE_ONLINE ? "online" : "OFFLINE",
   719             slave->error_flag ? "ERROR" : "ok");
   712             slave->error_flag ? "ERROR" : "ok");
   720     off += sprintf(buffer + off, "Ring position: %i\n",
       
   721                    slave->ring_position);
       
   722     off += sprintf(buffer + off, "Current consumption: %i mA\n\n",
       
   723                    slave->sii_current_on_ebus);
       
   724 
   713 
   725     off += sprintf(buffer + off, "Data link status:\n");
   714     off += sprintf(buffer + off, "Data link status:\n");
   726     for (i = 0; i < 4; i++) {
   715     for (i = 0; i < 4; i++) {
   727         off += sprintf(buffer + off, "  Port %i (", i);
   716         off += sprintf(buffer + off, "  Port %i (", i);
   728         switch (slave->sii_physical_layer[i]) {
   717         switch (slave->sii_physical_layer[i]) {
   742         off += sprintf(buffer + off, ") Link %s, Loop %s, %s\n",
   731         off += sprintf(buffer + off, ") Link %s, Loop %s, %s\n",
   743                        slave->dl_link[i] ? "up" : "down",
   732                        slave->dl_link[i] ? "up" : "down",
   744                        slave->dl_loop[i] ? "closed" : "open",
   733                        slave->dl_loop[i] ? "closed" : "open",
   745                        slave->dl_signal[i] ? "Signal detected" : "No signal");
   734                        slave->dl_signal[i] ? "Signal detected" : "No signal");
   746     }
   735     }
       
   736     off += sprintf(buffer + off, "\n");
       
   737 
       
   738     if (slave->sii_alias)
       
   739         off += sprintf(buffer + off, "Configured station alias:"
       
   740                        " 0x%04X (%i)\n\n", slave->sii_alias, slave->sii_alias);
       
   741 
       
   742     off += sprintf(buffer + off, "Vendor ID: 0x%08X (%u)\n",
       
   743                    slave->sii_vendor_id, slave->sii_vendor_id);
       
   744     off += sprintf(buffer + off, "Product code: 0x%08X (%u)\n",
       
   745                    slave->sii_product_code, slave->sii_product_code);
       
   746     off += sprintf(buffer + off, "Revision number: 0x%08X (%u)\n",
       
   747                    slave->sii_revision_number, slave->sii_revision_number);
       
   748     off += sprintf(buffer + off, "Serial number: 0x%08X (%u)\n\n",
       
   749                    slave->sii_serial_number, slave->sii_serial_number);
   747 
   750 
   748     if (slave->sii_mailbox_protocols) {
   751     if (slave->sii_mailbox_protocols) {
   749         off += sprintf(buffer + off, "\nMailboxes:\n");
   752         off += sprintf(buffer + off, "Mailboxes:\n");
   750         off += sprintf(buffer + off, "  RX mailbox: 0x%04X/%i,"
   753         off += sprintf(buffer + off, "  RX: 0x%04X/%u, TX: 0x%04X/%u\n",
   751                        " TX mailbox: 0x%04X/%i\n",
   754                 slave->sii_rx_mailbox_offset, slave->sii_rx_mailbox_size,
   752                        slave->sii_rx_mailbox_offset,
   755                 slave->sii_tx_mailbox_offset, slave->sii_tx_mailbox_size);
   753                        slave->sii_rx_mailbox_size,
       
   754                        slave->sii_tx_mailbox_offset,
       
   755                        slave->sii_tx_mailbox_size);
       
   756         off += sprintf(buffer + off, "  Supported protocols: ");
   756         off += sprintf(buffer + off, "  Supported protocols: ");
   757 
   757 
   758         first = 1;
   758         first = 1;
   759         if (slave->sii_mailbox_protocols & EC_MBOX_AOE) {
   759         if (slave->sii_mailbox_protocols & EC_MBOX_AOE) {
   760             off += sprintf(buffer + off, "AoE");
   760             off += sprintf(buffer + off, "AoE");
   782         }
   782         }
   783         if (slave->sii_mailbox_protocols & EC_MBOX_VOE) {
   783         if (slave->sii_mailbox_protocols & EC_MBOX_VOE) {
   784             if (!first) off += sprintf(buffer + off, ", ");
   784             if (!first) off += sprintf(buffer + off, ", ");
   785             off += sprintf(buffer + off, "VoE");
   785             off += sprintf(buffer + off, "VoE");
   786         }
   786         }
       
   787         off += sprintf(buffer + off, "\n\n");
       
   788     }
       
   789 
       
   790     off += sprintf(buffer + off, "Current consumption: %i mA\n\n",
       
   791             slave->sii_current_on_ebus);
       
   792 
       
   793     if (slave->sii_group || slave->sii_image || slave->sii_order
       
   794             || slave->sii_name) {
       
   795         off += sprintf(buffer + off, "General:\n");
       
   796 
       
   797         if (slave->sii_group)
       
   798             off += sprintf(buffer + off, "  Group: %s\n", slave->sii_group);
       
   799         if (slave->sii_image)
       
   800             off += sprintf(buffer + off, "  Image: %s\n", slave->sii_image);
       
   801         if (slave->sii_order)
       
   802             off += sprintf(buffer + off, "  Order number: %s\n",
       
   803                     slave->sii_order);
       
   804         if (slave->sii_name)
       
   805             off += sprintf(buffer + off, "  Name: %s\n", slave->sii_name);
   787         off += sprintf(buffer + off, "\n");
   806         off += sprintf(buffer + off, "\n");
   788     }
   807     }
   789 
   808 
   790     if (slave->sii_alias || slave->sii_group
   809     if (slave->sii_sync_count) {
   791         || slave->sii_image || slave->sii_order)
   810         off += sprintf(buffer + off, "Sync managers / PDO mapping:\n");
   792         off += sprintf(buffer + off, "\nSII data:\n");
   811 
   793 
   812         for (i = 0; i < slave->sii_sync_count; i++) {
   794     if (slave->sii_alias)
   813             sync = &slave->sii_syncs[i];
   795         off += sprintf(buffer + off, "  Configured station alias:"
   814             off += sprintf(buffer + off,
   796                        " 0x%04X (%i)\n", slave->sii_alias, slave->sii_alias);
   815                     "  SM%u: addr 0x%04X, size %i, control 0x%02X, %s\n",
   797     if (slave->sii_group)
   816                     sync->index, sync->physical_start_address,
   798         off += sprintf(buffer + off, "  Group: %s\n", slave->sii_group);
   817                     ec_sync_size(sync), sync->control_register,
   799     if (slave->sii_image)
   818                     sync->enable ? "enable" : "disable");
   800         off += sprintf(buffer + off, "  Image: %s\n", slave->sii_image);
   819 
   801     if (slave->sii_order)
   820             if (list_empty(&sync->pdos)) {
   802         off += sprintf(buffer + off, "  Order number: %s\n", slave->sii_order);
   821                 off += sprintf(buffer + off, "    No PDOs mapped.\n");
   803 
   822             } else if (sync->mapping_source != EC_SYNC_MAPPING_NONE) {
   804     if (slave->sii_sync_count)
   823                 off += sprintf(buffer + off,
   805         off += sprintf(buffer + off, "\nSync managers / PDO mapping:\n");
   824                         "    PDO mapping information from %s.\n",
   806 
   825                         sync->mapping_source == EC_SYNC_MAPPING_SII
   807     for (i = 0; i < slave->sii_sync_count; i++) {
   826                         ? "SII" : "CoE");
   808         sync = &slave->sii_syncs[i];
   827             }
   809         off += sprintf(buffer + off,
   828 
   810                 "  SM%u: addr 0x%04X, size %i, control 0x%02X, %s\n",
   829             list_for_each_entry(pdo, &sync->pdos, list) {
   811                 sync->index, sync->physical_start_address,
   830                 off += sprintf(buffer + off, "    %s 0x%04X \"%s\"\n",
   812                 ec_sync_size(sync), sync->control_register,
   831                         pdo->type == EC_RX_PDO ? "RxPdo" : "TxPdo",
   813                 sync->enable ? "enable" : "disable");
   832                         pdo->index, pdo->name ? pdo->name : "???");
   814 
   833 
   815         if (list_empty(&sync->pdos)) {
   834                 list_for_each_entry(pdo_entry, &pdo->entries, list) {
   816             off += sprintf(buffer + off, "    No PDOs mapped.\n");
   835                     off += sprintf(buffer + off,
   817         } else if (sync->mapping_source != EC_SYNC_MAPPING_NONE) {
   836                             "      0x%04X:%X \"%s\", %i bit\n",
   818             off += sprintf(buffer + off, "    PDO mapping information from %s.\n",
   837                             pdo_entry->index, pdo_entry->subindex,
   819                     sync->mapping_source == EC_SYNC_MAPPING_SII ? "SII" : "CoE");
   838                             pdo_entry->name ? pdo_entry->name : "???",
   820         }
   839                             pdo_entry->bit_length);
   821 
   840                 }
   822         list_for_each_entry(pdo, &sync->pdos, list) {
   841             }
   823             off += sprintf(buffer + off, "    %s 0x%04X \"%s\"\n",
   842         }
       
   843         off += sprintf(buffer + off, "\n");
       
   844     }
       
   845 
       
   846     // type-cast to avoid warnings on some compilers
       
   847     if (!list_empty((struct list_head *) &slave->sii_pdos)) {
       
   848         off += sprintf(buffer + off, "Available PDOs from SII:\n");
       
   849 
       
   850         list_for_each_entry(pdo, &slave->sii_pdos, list) {
       
   851             off += sprintf(buffer + off, "  %s 0x%04X \"%s\"",
   824                     pdo->type == EC_RX_PDO ? "RxPdo" : "TxPdo",
   852                     pdo->type == EC_RX_PDO ? "RxPdo" : "TxPdo",
   825                     pdo->index, pdo->name ? pdo->name : "???");
   853                     pdo->index, pdo->name ? pdo->name : "???");
       
   854             if (pdo->sync_index >= 0)
       
   855                 off += sprintf(buffer + off, ", default mapping: SM%u.\n",
       
   856                         pdo->sync_index);
       
   857             else
       
   858                 off += sprintf(buffer + off, ", no default mapping.\n");
   826 
   859 
   827             list_for_each_entry(pdo_entry, &pdo->entries, list) {
   860             list_for_each_entry(pdo_entry, &pdo->entries, list) {
   828                 off += sprintf(buffer + off,
   861                 off += sprintf(buffer + off, "    0x%04X:%X \"%s\", %i bit\n",
   829                         "      0x%04X:%X \"%s\", %i bit\n",
       
   830                         pdo_entry->index, pdo_entry->subindex,
   862                         pdo_entry->index, pdo_entry->subindex,
   831                         pdo_entry->name ? pdo_entry->name : "???",
   863                         pdo_entry->name ? pdo_entry->name : "???",
   832                         pdo_entry->bit_length);
   864                         pdo_entry->bit_length);
   833             }
   865             }
   834         }
   866         }
       
   867         off += sprintf(buffer + off, "\n");
   835     }
   868     }
   836 
   869 
   837     // type-cast to avoid warnings on some compilers
   870     // type-cast to avoid warnings on some compilers
   838     if (!list_empty((struct list_head *) &slave->sii_pdos))
   871     if (!list_empty((struct list_head *) &slave->sdo_confs)) {
   839         off += sprintf(buffer + off, "\nAvailable PDOs from SII:\n");
   872         off += sprintf(buffer + off, "SDO configurations:\n");
   840 
   873 
   841     list_for_each_entry(pdo, &slave->sii_pdos, list) {
   874         list_for_each_entry(sdodata, &slave->sdo_confs, list) {
   842         off += sprintf(buffer + off, "  %s 0x%04X \"%s\"",
   875             switch (sdodata->size) {
   843                        pdo->type == EC_RX_PDO ? "RxPdo" : "TxPdo",
   876                 case 1: sprintf(str, "%i", EC_READ_U8(sdodata->data)); break;
   844                        pdo->index, pdo->name ? pdo->name : "???");
   877                 case 2: sprintf(str, "%i", EC_READ_U16(sdodata->data)); break;
   845         if (pdo->sync_index >= 0)
   878                 case 4: sprintf(str, "%i", EC_READ_U32(sdodata->data)); break;
   846             off += sprintf(buffer + off, ", default mapping: SM%u.\n",
   879                 default: sprintf(str, "(invalid size)"); break;
   847                     pdo->sync_index);
   880             }
   848         else
   881             off += sprintf(buffer + off, "  0x%04X:%-3i -> %s\n",
   849             off += sprintf(buffer + off, ", no default mapping.\n");
   882                     sdodata->index, sdodata->subindex, str);
   850 
   883         }
   851         list_for_each_entry(pdo_entry, &pdo->entries, list) {
   884         off += sprintf(buffer + off, "\n");
   852             off += sprintf(buffer + off, "    0x%04X:%X \"%s\", %i bit\n",
   885     }
   853                            pdo_entry->index, pdo_entry->subindex,
       
   854                            pdo_entry->name ? pdo_entry->name : "???",
       
   855                            pdo_entry->bit_length);
       
   856         }
       
   857     }
       
   858 
       
   859     // type-cast to avoid warnings on some compilers
       
   860     if (!list_empty((struct list_head *) &slave->sdo_confs))
       
   861         off += sprintf(buffer + off, "\nSDO configurations:\n");
       
   862 
       
   863     list_for_each_entry(sdodata, &slave->sdo_confs, list) {
       
   864         switch (sdodata->size) {
       
   865             case 1: sprintf(str, "%i", EC_READ_U8(sdodata->data)); break;
       
   866             case 2: sprintf(str, "%i", EC_READ_U16(sdodata->data)); break;
       
   867             case 4: sprintf(str, "%i", EC_READ_U32(sdodata->data)); break;
       
   868             default: sprintf(str, "(invalid size)"); break;
       
   869         }
       
   870         off += sprintf(buffer + off, "  0x%04X:%-3i -> %s\n",
       
   871                        sdodata->index, sdodata->subindex, str);
       
   872     }
       
   873 
       
   874     off += sprintf(buffer + off, "\n");
       
   875 
   886 
   876     return off;
   887     return off;
   877 }
   888 }
   878 
   889 
   879 /*****************************************************************************/
   890 /*****************************************************************************/