tool/CommandSiiRead.cpp
changeset 1254 c19d273a9e76
parent 1157 04d1c950cf9d
child 1363 11c0b2caa253
equal deleted inserted replaced
1253:8a081444a89a 1254:c19d273a9e76
     7 #include <iostream>
     7 #include <iostream>
     8 #include <iomanip>
     8 #include <iomanip>
     9 using namespace std;
     9 using namespace std;
    10 
    10 
    11 #include "CommandSiiRead.h"
    11 #include "CommandSiiRead.h"
    12 #include "byteorder.h"
       
    13 
    12 
    14 /*****************************************************************************/
    13 /*****************************************************************************/
    15 
    14 
    16 CommandSiiRead::CommandSiiRead():
    15 CommandSiiRead::CommandSiiRead():
    17     Command("sii_read", "Output a slave's SII contents.")
    16     Command("sii_read", "Output a slave's SII contents.")
    97         cout << endl;
    96         cout << endl;
    98 
    97 
    99         if (data.nwords > 0x0040U) {
    98         if (data.nwords > 0x0040U) {
   100             // cycle through categories
    99             // cycle through categories
   101             categoryHeader = data.words + 0x0040U;
   100             categoryHeader = data.words + 0x0040U;
   102             categoryType = le16tocpu(*categoryHeader);
   101             categoryType = le16_to_cpup(categoryHeader);
   103             while (categoryType != 0xffff) {
   102             while (categoryType != 0xffff) {
   104                 cout << "SII Category 0x" << hex
   103                 cout << "SII Category 0x" << hex
   105                     << setw(4) << categoryType
   104                     << setw(4) << categoryType
   106                     << " (" << getCategoryName(categoryType) << ")" << flush;
   105                     << " (" << getCategoryName(categoryType) << ")" << flush;
   107 
   106 
   108                 if (categoryHeader + 1 > data.words + data.nwords) {
   107                 if (categoryHeader + 1 > data.words + data.nwords) {
   109                     err << "SII data seem to be corrupted!";
   108                     err << "SII data seem to be corrupted!";
   110                     throwCommandException(err);
   109                     throwCommandException(err);
   111                 }
   110                 }
   112                 categorySize = le16tocpu(*(categoryHeader + 1));
   111                 categorySize = le16_to_cpup(categoryHeader + 1);
   113                 cout << ", " << dec << categorySize << " words" << flush;
   112                 cout << ", " << dec << categorySize << " words" << flush;
   114 
   113 
   115                 if (categoryHeader + 2 + categorySize
   114                 if (categoryHeader + 2 + categorySize
   116                         > data.words + data.nwords) {
   115                         > data.words + data.nwords) {
   117                     err << "SII data seem to be corrupted!";
   116                     err << "SII data seem to be corrupted!";
   134                         > data.words + data.nwords) {
   133                         > data.words + data.nwords) {
   135                     err << "SII data seem to be corrupted!"; 
   134                     err << "SII data seem to be corrupted!"; 
   136                     throwCommandException(err);
   135                     throwCommandException(err);
   137                 }
   136                 }
   138                 categoryHeader += 2 + categorySize;
   137                 categoryHeader += 2 + categorySize;
   139                 categoryType = le16tocpu(*categoryHeader);
   138                 categoryType = le16_to_cpup(categoryHeader);
   140             }
   139             }
   141         }
   140         }
   142     } else {
   141     } else {
   143         for (i = 0; i < data.nwords; i++) {
   142         for (i = 0; i < data.nwords; i++) {
   144             uint16_t *w = data.words + i;
   143             uint16_t *w = data.words + i;