171 err << "Invalid data size " << contents.size() << "! " |
171 err << "Invalid data size " << contents.size() << "! " |
172 << "Must be non-zero."; |
172 << "Must be non-zero."; |
173 throwCommandException(err); |
173 throwCommandException(err); |
174 } |
174 } |
175 data.data_size = contents.size(); |
175 data.data_size = contents.size(); |
176 data.data = new uint8_t[data.data_size + 1]; |
176 uint8_t *sdo_data = new uint8_t[data.data_size + 1]; |
|
177 data.data = sdo_data; |
177 |
178 |
178 try { |
179 try { |
179 data.data_size = interpretAsType( |
180 data.data_size = interpretAsType( |
180 dataType, contents, data.data, data.data_size); |
181 dataType, contents, sdo_data, data.data_size); |
181 } catch (SizeException &e) { |
182 } catch (SizeException &e) { |
182 delete [] data.data; |
183 delete [] sdo_data; |
183 throwCommandException(e.what()); |
184 throwCommandException(e.what()); |
184 } catch (ios::failure &e) { |
185 } catch (ios::failure &e) { |
185 delete [] data.data; |
186 delete [] sdo_data; |
186 err << "Invalid value argument '" << args[2] |
187 err << "Invalid value argument '" << args[2] |
187 << "' for type '" << dataType->name << "'!"; |
188 << "' for type '" << dataType->name << "'!"; |
188 throwInvalidUsageException(err); |
189 throwInvalidUsageException(err); |
189 } |
190 } |
190 |
191 |
193 data.data_size = dataType->byteSize; |
194 data.data_size = dataType->byteSize; |
194 } else { |
195 } else { |
195 data.data_size = DefaultBufferSize; |
196 data.data_size = DefaultBufferSize; |
196 } |
197 } |
197 |
198 |
198 data.data = new uint8_t[data.data_size + 1]; |
199 uint8_t *sdo_data = new uint8_t[data.data_size + 1]; |
|
200 data.data = sdo_data; |
199 |
201 |
200 try { |
202 try { |
201 data.data_size = interpretAsType( |
203 data.data_size = interpretAsType( |
202 dataType, args[valueIndex], data.data, data.data_size); |
204 dataType, args[valueIndex], sdo_data, data.data_size); |
203 } catch (SizeException &e) { |
205 } catch (SizeException &e) { |
204 delete [] data.data; |
206 delete [] sdo_data; |
205 throwCommandException(e.what()); |
207 throwCommandException(e.what()); |
206 } catch (ios::failure &e) { |
208 } catch (ios::failure &e) { |
207 delete [] data.data; |
209 delete [] sdo_data; |
208 err << "Invalid value argument '" << args[2] |
210 err << "Invalid value argument '" << args[2] |
209 << "' for type '" << dataType->name << "'!"; |
211 << "' for type '" << dataType->name << "'!"; |
210 throwInvalidUsageException(err); |
212 throwInvalidUsageException(err); |
211 } |
213 } |
212 } |
|
213 |
|
214 try { |
|
215 data.data_size = interpretAsType( |
|
216 dataType, args[valueIndex], data.data, data.data_size); |
|
217 } catch (SizeException &e) { |
|
218 delete [] data.data; |
|
219 throwCommandException(e.what()); |
|
220 } catch (ios::failure &e) { |
|
221 delete [] data.data; |
|
222 err << "Invalid value argument '" << args[2] |
|
223 << "' for type '" << dataType->name << "'!"; |
|
224 throwInvalidUsageException(err); |
|
225 } |
214 } |
226 |
215 |
227 try { |
216 try { |
228 m.sdoDownload(&data); |
217 m.sdoDownload(&data); |
229 } catch (MasterDeviceSdoAbortException &e) { |
218 } catch (MasterDeviceSdoAbortException &e) { |