tool/CommandSoeRead.cpp
changeset 1835 20748e9d2238
parent 1832 fb6a307daf31
child 1837 32136215c1fa
equal deleted inserted replaced
1834:67fc217d7341 1835:20748e9d2238
    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 /*****************************************************************************/