64 const uint16_t *categoryHeader; |
64 const uint16_t *categoryHeader; |
65 uint16_t categoryType, categorySize; |
65 uint16_t categoryType, categorySize; |
66 stringstream err; |
66 stringstream err; |
67 |
67 |
68 if (slavePosition < 0) { |
68 if (slavePosition < 0) { |
69 stringstream err; |
69 err << "'" << commandName << "' requires a slave! " |
70 err << "'sii_read' requires a slave! Please specify --slave."; |
70 << "Please specify --slave."; |
71 throw MasterDeviceException(err.str()); |
71 throw InvalidUsageException(err); |
72 } |
72 } |
73 data.slave_position = slavePosition; |
73 data.slave_position = slavePosition; |
74 |
74 |
75 masterDev.open(MasterDevice::Read); |
75 masterDev.open(MasterDevice::Read); |
76 |
76 |
111 << setw(4) << categoryType |
111 << setw(4) << categoryType |
112 << " (" << getCategoryName(categoryType) << ")" << flush; |
112 << " (" << getCategoryName(categoryType) << ")" << flush; |
113 |
113 |
114 if (categoryHeader + 1 > data.words + data.nwords) { |
114 if (categoryHeader + 1 > data.words + data.nwords) { |
115 err << "SII data seem to be corrupted!"; |
115 err << "SII data seem to be corrupted!"; |
116 throw MasterDeviceException(err.str()); |
116 throw CommandException(err); |
117 } |
117 } |
118 categorySize = le16tocpu(*(categoryHeader + 1)); |
118 categorySize = le16tocpu(*(categoryHeader + 1)); |
119 cout << ", " << dec << categorySize << " words" << flush; |
119 cout << ", " << dec << categorySize << " words" << flush; |
120 |
120 |
121 if (categoryHeader + 2 + categorySize |
121 if (categoryHeader + 2 + categorySize |
122 > data.words + data.nwords) { |
122 > data.words + data.nwords) { |
123 err << "SII data seem to be corrupted!"; |
123 err << "SII data seem to be corrupted!"; |
124 throw MasterDeviceException(err.str()); |
124 throw CommandException(err); |
125 } |
125 } |
126 |
126 |
127 cout << hex; |
127 cout << hex; |
128 for (i = 0; i < categorySize * 2U; i++) { |
128 for (i = 0; i < categorySize * 2U; i++) { |
129 if (i % BreakAfterBytes) { |
129 if (i % BreakAfterBytes) { |
137 cout << endl; |
137 cout << endl; |
138 |
138 |
139 if (categoryHeader + 2 + categorySize + 1 |
139 if (categoryHeader + 2 + categorySize + 1 |
140 > data.words + data.nwords) { |
140 > data.words + data.nwords) { |
141 err << "SII data seem to be corrupted!"; |
141 err << "SII data seem to be corrupted!"; |
142 throw MasterDeviceException(err.str()); |
142 throw CommandException(err); |
143 } |
143 } |
144 categoryHeader += 2 + categorySize; |
144 categoryHeader += 2 + categorySize; |
145 categoryType = le16tocpu(*categoryHeader); |
145 categoryType = le16tocpu(*categoryHeader); |
146 } |
146 } |
147 } |
147 } |