tools/Master.cpp
changeset 1103 b6998e916d5a
parent 1102 5461894b05ab
child 1105 3552b4c46f10
equal deleted inserted replaced
1102:5461894b05ab 1103:b6998e916d5a
   687     }
   687     }
   688 }
   688 }
   689 
   689 
   690 /****************************************************************************/
   690 /****************************************************************************/
   691 
   691 
       
   692 struct CategoryName {
       
   693     uint16_t type;
       
   694     const char *name;
       
   695 };
       
   696 
       
   697 static const CategoryName categoryNames[] = {
       
   698     {0x000a, "STRINGS"},
       
   699     {0x0014, "DataTypes"},
       
   700     {0x001e, "General"},
       
   701     {0x0028, "FMMU"},
       
   702     {0x0029, "SyncM"},
       
   703     {0x0032, "TXPDO"},
       
   704     {0x0033, "RXPDO"},
       
   705     {0x003c, "DC"},
       
   706     {}
       
   707 };
       
   708 
       
   709 const char *getCategoryName(uint16_t type)
       
   710 {
       
   711     const CategoryName *cn = categoryNames;
       
   712 
       
   713     while (cn->type) {
       
   714         if (cn->type == type) {
       
   715             return cn->name;
       
   716         }
       
   717         cn++;
       
   718     }
       
   719 
       
   720     return "unknown";
       
   721 }
       
   722 
   692 void Master::siiRead(int slavePosition)
   723 void Master::siiRead(int slavePosition)
   693 {
   724 {
   694     ec_ioctl_slave_sii_t data;
   725     ec_ioctl_slave_sii_t data;
   695     ec_ioctl_slave_t slave;
   726     ec_ioctl_slave_t slave;
   696     unsigned int i;
   727     unsigned int i;
   739             // cycle through categories
   770             // cycle through categories
   740             categoryHeader = data.words + 0x0040U;
   771             categoryHeader = data.words + 0x0040U;
   741             categoryType = le16tocpu(*categoryHeader);
   772             categoryType = le16tocpu(*categoryHeader);
   742             while (categoryType != 0xffff) {
   773             while (categoryType != 0xffff) {
   743                 cout << "SII Category 0x" << hex
   774                 cout << "SII Category 0x" << hex
   744                     << setw(4) << categoryType << flush;
   775                     << setw(4) << categoryType
       
   776                     << " (" << getCategoryName(categoryType) << ")" << flush;
   745 
   777 
   746                 if (categoryHeader + 1 > data.words + data.nwords) {
   778                 if (categoryHeader + 1 > data.words + data.nwords) {
   747                     err << "SII data seem to be corrupted!";
   779                     err << "SII data seem to be corrupted!";
   748                     throw MasterException(err.str());
   780                     throw MasterException(err.str());
   749                 }
   781                 }
   750                 categorySize = le16tocpu(*(categoryHeader + 1));
   782                 categorySize = le16tocpu(*(categoryHeader + 1));
   751                 cout << ", " << dec << categorySize << " words" << flush;
   783                 cout << ", " << dec << categorySize << " words" << flush;
   752 
   784 
   753                 if (categoryHeader + 2 + categorySize > data.words + data.nwords) {
   785                 if (categoryHeader + 2 + categorySize
       
   786                         > data.words + data.nwords) {
   754                     err << "SII data seem to be corrupted!";
   787                     err << "SII data seem to be corrupted!";
   755                     throw MasterException(err.str());
   788                     throw MasterException(err.str());
   756                 }
   789                 }
   757 
   790 
   758                 cout << hex;
   791                 cout << hex;