tool/CommandDownload.cpp
changeset 2622 1aee02c1e294
parent 2411 01370d59233d
equal deleted inserted replaced
2621:a26dee45c467 2622:1aee02c1e294
   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) {