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; |