tool/CommandRegWrite.cpp
changeset 1431 70e891465da1
parent 1395 e9fe40c458cc
child 1804 742607c464c4
equal deleted inserted replaced
1430:97ab86a9b1d7 1431:70e891465da1
   130 		strValue << args[1];
   130 		strValue << args[1];
   131 		strValue >> resetiosflags(ios::basefield); // guess base from prefix
   131 		strValue >> resetiosflags(ios::basefield); // guess base from prefix
   132 		strValue.exceptions(ios::failbit);
   132 		strValue.exceptions(ios::failbit);
   133 
   133 
   134 		try {
   134 		try {
   135 			if (dataType->name == "int8") {
   135 			if (string(dataType->name) == "int8") {
   136 				int16_t val; // uint8_t is interpreted as char
   136 				int16_t val; // uint8_t is interpreted as char
   137 				strValue >> val;
   137 				strValue >> val;
   138 				if (val > 127 || val < -128)
   138 				if (val > 127 || val < -128)
   139 					throw ios::failure("Value out of range");
   139 					throw ios::failure("Value out of range");
   140 				*data.data = (int8_t) val;
   140 				*data.data = (int8_t) val;
   141 			} else if (dataType->name == "int16") {
   141 			} else if (string(dataType->name) == "int16") {
   142 				int16_t val;
   142 				int16_t val;
   143 				strValue >> val;
   143 				strValue >> val;
   144 				*(int16_t *) data.data = cpu_to_le16(val);
   144 				*(int16_t *) data.data = cpu_to_le16(val);
   145 			} else if (dataType->name == "int32") {
   145 			} else if (string(dataType->name) == "int32") {
   146 				int32_t val;
   146 				int32_t val;
   147 				strValue >> val;
   147 				strValue >> val;
   148 				*(int32_t *) data.data = cpu_to_le32(val);
   148 				*(int32_t *) data.data = cpu_to_le32(val);
   149 			} else if (dataType->name == "int64") {
   149 			} else if (string(dataType->name) == "int64") {
   150 				int64_t val;
   150 				int64_t val;
   151 				strValue >> val;
   151 				strValue >> val;
   152 				*(int64_t *) data.data = cpu_to_le64(val);
   152 				*(int64_t *) data.data = cpu_to_le64(val);
   153 			} else if (dataType->name == "uint8") {
   153 			} else if (string(dataType->name) == "uint8") {
   154 				uint16_t val; // uint8_t is interpreted as char
   154 				uint16_t val; // uint8_t is interpreted as char
   155 				strValue >> val;
   155 				strValue >> val;
   156 				if (val > 0xff)
   156 				if (val > 0xff)
   157 					throw ios::failure("Value out of range");
   157 					throw ios::failure("Value out of range");
   158 				*data.data = (uint8_t) val;
   158 				*data.data = (uint8_t) val;
   159 			} else if (dataType->name == "uint16") {
   159 			} else if (string(dataType->name) == "uint16") {
   160 				uint16_t val;
   160 				uint16_t val;
   161 				strValue >> val;
   161 				strValue >> val;
   162 				*(uint16_t *) data.data = cpu_to_le16(val);
   162 				*(uint16_t *) data.data = cpu_to_le16(val);
   163 			} else if (dataType->name == "uint32") {
   163 			} else if (string(dataType->name) == "uint32") {
   164 				uint32_t val;
   164 				uint32_t val;
   165 				strValue >> val;
   165 				strValue >> val;
   166 				*(uint32_t *) data.data = cpu_to_le32(val);
   166 				*(uint32_t *) data.data = cpu_to_le32(val);
   167 			} else if (dataType->name == "uint64") {
   167 			} else if (string(dataType->name) == "uint64") {
   168 				uint64_t val;
   168 				uint64_t val;
   169 				strValue >> val;
   169 				strValue >> val;
   170 				*(uint64_t *) data.data = cpu_to_le64(val);
   170 				*(uint64_t *) data.data = cpu_to_le64(val);
   171 			} else if (dataType->name == "string" ||
   171 			} else if (string(dataType->name) == "string" ||
   172 					dataType->name == "octet_string") {
   172 					string(dataType->name) == "octet_string") {
   173 				data.length = strValue.str().size();
   173 				data.length = strValue.str().size();
   174 				if (!data.length) {
   174 				if (!data.length) {
   175 					err << "Zero-size string now allowed!";
   175 					err << "Zero-size string now allowed!";
   176 					throwCommandException(err);
   176 					throwCommandException(err);
   177 				}
   177 				}