tool/CommandRegRead.cpp
changeset 1389 5b392b22a2da
parent 1388 3c886ec376f5
child 1390 7e600a39a91b
equal deleted inserted replaced
1388:3c886ec376f5 1389:5b392b22a2da
    34 #include "CommandRegRead.h"
    34 #include "CommandRegRead.h"
    35 
    35 
    36 /*****************************************************************************/
    36 /*****************************************************************************/
    37 
    37 
    38 CommandRegRead::CommandRegRead():
    38 CommandRegRead::CommandRegRead():
    39     Command("reg_read", "Output a slave's register contents.")
    39     CommandReg("reg_read", "Output a slave's register contents.")
    40 {
    40 {
    41 }
    41 }
    42 
    42 
    43 /*****************************************************************************/
    43 /*****************************************************************************/
    44 
    44 
    61         << "         can be omitted), if a selected data type" << endl
    61         << "         can be omitted), if a selected data type" << endl
    62         << "         implies a length." << endl
    62         << "         implies a length." << endl
    63         << endl
    63         << endl
    64         << "These are the valid data types:" << endl
    64         << "These are the valid data types:" << endl
    65         << "  int8, int16, int32, int64, uint8, uint16, uint32," << endl
    65         << "  int8, int16, int32, int64, uint8, uint16, uint32," << endl
    66         << "  uint64, string, octet_string, raw." << endl
    66         << "  uint64, string, raw." << endl
    67         << endl
    67         << endl
    68     	<< "Command-specific options:" << endl
    68     	<< "Command-specific options:" << endl
    69         << "  --alias    -a <alias>" << endl
    69         << "  --alias    -a <alias>" << endl
    70         << "  --position -p <pos>    Slave selection. See the help of" << endl
    70         << "  --position -p <pos>    Slave selection. See the help of" << endl
    71         << "                         the 'slaves' command." << endl
    71         << "                         the 'slaves' command." << endl
   157         delete [] data.data;
   157         delete [] data.data;
   158 		throw e;
   158 		throw e;
   159 	}
   159 	}
   160 
   160 
   161     cout << setfill('0');
   161     cout << setfill('0');
   162     if (!dataType ||
   162     if (!dataType || dataType->name == "string") {
   163             dataType->name == "string" ||
       
   164             dataType->name == "octet_string") {
       
   165         uint16_t i;
   163         uint16_t i;
   166         for (i = 0; i < data.length; i++) {
   164         for (i = 0; i < data.length; i++) {
   167             cout << data.data[i];
   165             cout << data.data[i];
   168         }
   166         }
       
   167         if (dataType)
       
   168             cout << endl;
   169     } else if (dataType->name == "int8") {
   169     } else if (dataType->name == "int8") {
   170         int sval = *(int8_t *) data.data;
   170         int sval = *(int8_t *) data.data;
   171         cout << sval << " 0x" << hex << setw(2) << sval << endl;
   171         cout << sval << " 0x" << hex << setw(2) << sval << endl;
   172     } else if (dataType->name == "int16") {
   172     } else if (dataType->name == "int16") {
   173         int sval = le16_to_cpup(data.data);
   173         int sval = le16_to_cpup(data.data);
   188         unsigned int uval = le32_to_cpup(data.data);
   188         unsigned int uval = le32_to_cpup(data.data);
   189         cout << uval << " 0x" << hex << setw(8) << uval << endl;
   189         cout << uval << " 0x" << hex << setw(8) << uval << endl;
   190     } else if (dataType->name == "uint64") {
   190     } else if (dataType->name == "uint64") {
   191         long long unsigned int uval = le32_to_cpup(data.data);
   191         long long unsigned int uval = le32_to_cpup(data.data);
   192         cout << uval << " 0x" << hex << setw(8) << uval << endl;
   192         cout << uval << " 0x" << hex << setw(8) << uval << endl;
   193     } else {
   193     } else { // raw
   194         uint8_t *d = data.data;
   194         uint8_t *d = data.data;
   195         unsigned int size = data.length;
   195         unsigned int size = data.length;
   196 
   196 
   197         cout << hex << setfill('0');
   197         cout << hex << setfill('0');
   198         while (size--) {
   198         while (size--) {
   204     }
   204     }
   205 
   205 
   206     delete [] data.data;
   206     delete [] data.data;
   207 }
   207 }
   208 
   208 
   209 /****************************************************************************/
       
   210 
       
   211 const CommandRegRead::DataType *CommandRegRead::findDataType(
       
   212         const string &str
       
   213         )
       
   214 {
       
   215     const DataType *d;
       
   216     
       
   217     for (d = dataTypes; d->name; d++)
       
   218         if (str == d->name)
       
   219             return d;
       
   220 
       
   221     return NULL;
       
   222 }
       
   223 
       
   224 /****************************************************************************/
       
   225 
       
   226 const CommandRegRead::DataType CommandRegRead::dataTypes[] = {
       
   227     {"int8",         1},
       
   228     {"int16",        2},
       
   229     {"int32",        4},
       
   230     {"int64",        8},
       
   231     {"uint8",        1},
       
   232     {"uint16",       2},
       
   233     {"uint32",       4},
       
   234     {"uint64",       8},
       
   235     {"string",       0},
       
   236     {"octet_string", 0},
       
   237     {"raw",          0},
       
   238     {}
       
   239 };
       
   240 
       
   241 /*****************************************************************************/
   209 /*****************************************************************************/