equal
deleted
inserted
replaced
71 |
71 |
72 void CommandSoeRead::execute(const StringVector &args) |
72 void CommandSoeRead::execute(const StringVector &args) |
73 { |
73 { |
74 SlaveList slaves; |
74 SlaveList slaves; |
75 stringstream err, strIdn; |
75 stringstream err, strIdn; |
|
76 const DataType *dataType = NULL; |
76 ec_ioctl_slave_soe_t data; |
77 ec_ioctl_slave_soe_t data; |
77 |
78 |
78 if (args.size() != 1) { |
79 if (args.size() != 1) { |
79 err << "'" << getName() << "' takes one argument!"; |
80 err << "'" << getName() << "' takes one argument!"; |
80 throwInvalidUsageException(err); |
81 throwInvalidUsageException(err); |
99 if (slaves.size() != 1) { |
100 if (slaves.size() != 1) { |
100 throwSingleSlaveRequired(slaves.size()); |
101 throwSingleSlaveRequired(slaves.size()); |
101 } |
102 } |
102 data.slave_position = slaves.front().position; |
103 data.slave_position = slaves.front().position; |
103 |
104 |
104 data.mem_size = 1024; |
105 if (getDataType().empty()) { |
|
106 dataType = findDataType("raw"); // FIXME |
|
107 } else { // no data type specified |
|
108 if (!(dataType = findDataType(getDataType()))) { |
|
109 err << "Invalid data type '" << getDataType() << "'!"; |
|
110 throwInvalidUsageException(err); |
|
111 } |
|
112 } |
|
113 |
|
114 if (dataType->byteSize) { |
|
115 data.mem_size = dataType->byteSize; |
|
116 } else { |
|
117 data.mem_size = 1024; |
|
118 } |
|
119 |
105 data.data = new uint8_t[data.mem_size + 1]; |
120 data.data = new uint8_t[data.mem_size + 1]; |
106 |
121 |
107 try { |
122 try { |
108 m.readSoe(&data); |
123 m.readSoe(&data); |
109 } catch (MasterDeviceSoeException &e) { |
124 } catch (MasterDeviceSoeException &e) { |
116 throw e; |
131 throw e; |
117 } |
132 } |
118 |
133 |
119 m.close(); |
134 m.close(); |
120 |
135 |
121 printRawData(data.data, data.data_size); |
136 try { |
|
137 outputData(cout, dataType, data.data, data.data_size); |
|
138 } catch (SizeException &e) { |
|
139 delete [] data.data; |
|
140 throwCommandException(e.what()); |
|
141 } |
122 |
142 |
123 delete [] data.data; |
143 delete [] data.data; |
124 } |
144 } |
125 |
145 |
126 /****************************************************************************/ |
|
127 |
|
128 void CommandSoeRead::printRawData( |
|
129 const uint8_t *data, |
|
130 unsigned int size |
|
131 ) |
|
132 { |
|
133 cout << hex << setfill('0'); |
|
134 while (size--) { |
|
135 cout << "0x" << setw(2) << (unsigned int) *data++; |
|
136 if (size) |
|
137 cout << " "; |
|
138 } |
|
139 cout << endl; |
|
140 } |
|
141 |
|
142 /*****************************************************************************/ |
146 /*****************************************************************************/ |