From 8085c5bdd9ebb69e634a2abb9bef3c30a6807e61 Mon Sep 17 00:00:00 2001
From: Florian Pose <fp@igh-essen.com>
Date: Mon, 26 Jan 2009 11:59:32 +0000
Subject: [PATCH] merge -c1617 branches/stable-1.4: Added octet_string as an
 SDO data type.

---
 tool/CommandDownload.cpp | 11 ++++++++++-
 tool/CommandUpload.cpp   |  7 ++++++-
 tool/SdoCommand.cpp      | 17 +++++++++--------
 3 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/tool/CommandDownload.cpp b/tool/CommandDownload.cpp
index 02c94f20..0c0fc1d2 100644
--- a/tool/CommandDownload.cpp
+++ b/tool/CommandDownload.cpp
@@ -36,7 +36,8 @@ string CommandDownload::helpString() const
 		<< "the --type option is mandatory." << endl
     	<< endl
     	<< "These are the valid SDO entry data types:" << endl
-    	<< "  int8, int16, int32, uint8, uint16, uint32, string." << endl
+    	<< "  int8, int16, int32, uint8, uint16, uint32, string," << endl
+        << "  octet_string." << endl
     	<< endl
     	<< "Arguments:" << endl
     	<< "  INDEX    is the SDO index and must be an unsigned" << endl
@@ -190,6 +191,14 @@ void CommandDownload::execute(MasterDevice &m, const StringVector &args)
                 data.data_size = strValue.str().size();
                 strValue >> (char *) data.data;
                 break;
+            case 0x000a: // octet_string
+                if (strValue.str().size() >= data.data_size) {
+                    err << "String too large";
+                    throwCommandException(err);
+                }
+                data.data_size = strValue.str().size();
+                strValue >> (char *) data.data;
+                break;
 
             default:
                 delete [] data.data;
diff --git a/tool/CommandUpload.cpp b/tool/CommandUpload.cpp
index 3dea460f..1bea8eb9 100644
--- a/tool/CommandUpload.cpp
+++ b/tool/CommandUpload.cpp
@@ -36,7 +36,8 @@ string CommandUpload::helpString() const
         << "the --type option is mandatory."  << endl
         << endl
         << "These are the valid SDO entry data types:" << endl
-        << "  int8, int16, int32, uint8, uint16, uint32, string." << endl
+        << "  int8, int16, int32, uint8, uint16, uint32, string," << endl
+        << "  octet_string." << endl
         << endl
         << "Arguments:" << endl
         << "  INDEX    is the SDO index and must be an unsigned" << endl
@@ -181,6 +182,10 @@ void CommandUpload::execute(MasterDevice &m, const StringVector &args)
             cout << string((const char *) data.target, data.data_size)
                 << endl;
             break;
+        case 0x000a: // octet_string
+            cout << string((const char *) data.target, data.data_size)
+                << endl;
+            break;
         default:
             printRawData(data.target, data.data_size); // FIXME
             break;
diff --git a/tool/SdoCommand.cpp b/tool/SdoCommand.cpp
index 56d68c04..25028990 100644
--- a/tool/SdoCommand.cpp
+++ b/tool/SdoCommand.cpp
@@ -57,14 +57,15 @@ const char *SdoCommand::abortText(uint32_t abortCode)
 /****************************************************************************/
 
 const SdoCommand::DataType SdoCommand::dataTypes[] = {
-    {"int8",   0x0002, 1},
-    {"int16",  0x0003, 2},
-    {"int32",  0x0004, 4},
-    {"uint8",  0x0005, 1},
-    {"uint16", 0x0006, 2},
-    {"uint32", 0x0007, 4},
-    {"string", 0x0009, 0},
-    {"raw",    0xffff, 0},
+    {"int8",         0x0002, 1},
+    {"int16",        0x0003, 2},
+    {"int32",        0x0004, 4},
+    {"uint8",        0x0005, 1},
+    {"uint16",       0x0006, 2},
+    {"uint32",       0x0007, 4},
+    {"string",       0x0009, 0},
+    {"octet_string", 0x000a, 0},
+    {"raw",          0xffff, 0},
     {}
 };
 
-- 
GitLab