tool/CommandSoeRead.cpp
changeset 1835 20748e9d2238
parent 1832 fb6a307daf31
child 1837 32136215c1fa
--- a/tool/CommandSoeRead.cpp	Fri Mar 05 13:20:42 2010 +0100
+++ b/tool/CommandSoeRead.cpp	Fri Mar 05 13:39:57 2010 +0100
@@ -73,6 +73,7 @@
 {
     SlaveList slaves;
     stringstream err, strIdn;
+    const DataType *dataType = NULL;
     ec_ioctl_slave_soe_t data;
 
     if (args.size() != 1) {
@@ -101,7 +102,21 @@
     }
     data.slave_position = slaves.front().position;
 
-	data.mem_size = 1024;
+    if (getDataType().empty()) {
+        dataType = findDataType("raw"); // FIXME
+    } else { // no data type specified
+        if (!(dataType = findDataType(getDataType()))) {
+            err << "Invalid data type '" << getDataType() << "'!";
+            throwInvalidUsageException(err);
+        }
+    }
+
+    if (dataType->byteSize) {
+        data.mem_size = dataType->byteSize;
+    } else {
+        data.mem_size = 1024;
+    }
+
     data.data = new uint8_t[data.mem_size + 1];
 
     try {
@@ -118,25 +133,14 @@
 
     m.close();
 
-	printRawData(data.data, data.data_size);
+    try {
+        outputData(cout, dataType, data.data, data.data_size);
+    } catch (SizeException &e) {
+        delete [] data.data;
+        throwCommandException(e.what());
+    }
 
     delete [] data.data;
 }
 
-/****************************************************************************/
-
-void CommandSoeRead::printRawData(
-        const uint8_t *data,
-        unsigned int size
-        )
-{
-    cout << hex << setfill('0');
-    while (size--) {
-        cout << "0x" << setw(2) << (unsigned int) *data++;
-        if (size)
-            cout << " ";
-    }
-    cout << endl;
-}
-
 /*****************************************************************************/