introduced symbol_t, added SymbolString::dataAt() and ::isMaster(), renamed SymbolString::getDataStr() to getStr(), use size_t/ssize_t where appropriate, simplified by use of new SymbolString methods, corrected broadcast scan conversion, use override declaration
This commit is contained in:
@@ -39,7 +39,7 @@ void contrib_tem_register() {
|
||||
DataTypeList::getInstance()->add(new TemParamDataType("TEM_P"));
|
||||
}
|
||||
|
||||
result_t TemParamDataType::derive(int divisor, unsigned char bitCount, NumberDataType* &derived) {
|
||||
result_t TemParamDataType::derive(int divisor, size_t bitCount, NumberDataType* &derived) {
|
||||
if (divisor == 0) {
|
||||
divisor = 1;
|
||||
}
|
||||
@@ -53,8 +53,8 @@ result_t TemParamDataType::derive(int divisor, unsigned char bitCount, NumberDat
|
||||
return RESULT_ERR_INVALID_ARG;
|
||||
}
|
||||
|
||||
result_t TemParamDataType::readSymbols(SymbolString& input, const bool isMaster,
|
||||
const unsigned char offset, const unsigned char length,
|
||||
result_t TemParamDataType::readSymbols(SymbolString& input,
|
||||
const size_t offset, const size_t length,
|
||||
ostringstream& output, OutputFormat outputFormat) {
|
||||
unsigned int value = 0;
|
||||
|
||||
@@ -72,7 +72,7 @@ result_t TemParamDataType::readSymbols(SymbolString& input, const bool isMaster,
|
||||
return RESULT_OK;
|
||||
}
|
||||
int grp = 0, num = 0;
|
||||
if (isMaster) {
|
||||
if (input.isMaster()) {
|
||||
grp = (value & 0x1f); // grp in bits 0...5
|
||||
num = ((value >> 8) & 0x7f); // num in bits 8...13
|
||||
} else {
|
||||
@@ -91,8 +91,8 @@ result_t TemParamDataType::readSymbols(SymbolString& input, const bool isMaster,
|
||||
}
|
||||
|
||||
result_t TemParamDataType::writeSymbols(istringstream& input,
|
||||
const unsigned char offset, const unsigned char length,
|
||||
SymbolString& output, const bool isMaster, unsigned char* usedLength) {
|
||||
const size_t offset, const size_t length,
|
||||
SymbolString& output, size_t* usedLength) {
|
||||
unsigned int value;
|
||||
int grp, num;
|
||||
string token;
|
||||
@@ -128,7 +128,7 @@ result_t TemParamDataType::writeSymbols(istringstream& input,
|
||||
if (grp < 0 || grp > 0x1f || num < 0 || num > 0x7f) {
|
||||
return RESULT_ERR_OUT_OF_RANGE; // value out of range
|
||||
}
|
||||
if (isMaster) {
|
||||
if (output.isMaster()) {
|
||||
value = grp | (num << 8); // grp in bits 0...5, num in bits 8...13
|
||||
} else {
|
||||
value = (grp << 7) | num; // grp in bits 7...11, num in bits 0...6
|
||||
|
||||
@@ -50,17 +50,17 @@ class TemParamDataType : public NumberDataType {
|
||||
: NumberDataType(id, 16, 0, 0xffff, 0, 0xffff, 0) {}
|
||||
|
||||
// @copydoc
|
||||
virtual result_t derive(int divisor, unsigned char bitCount, NumberDataType* &derived);
|
||||
virtual result_t derive(int divisor, size_t bitCount, NumberDataType* &derived) override;
|
||||
|
||||
// @copydoc
|
||||
virtual result_t readSymbols(SymbolString& input, const bool isMaster,
|
||||
const unsigned char offset, const unsigned char length,
|
||||
ostringstream& output, OutputFormat outputFormat);
|
||||
virtual result_t readSymbols(SymbolString& input,
|
||||
const size_t offset, const size_t length,
|
||||
ostringstream& output, OutputFormat outputFormat) override;
|
||||
|
||||
// @copydoc
|
||||
virtual result_t writeSymbols(istringstream& input,
|
||||
const unsigned char offset, const unsigned char length,
|
||||
SymbolString& output, const bool isMaster, unsigned char* usedLength);
|
||||
const size_t offset, const size_t length,
|
||||
SymbolString& output, size_t* usedLength) override;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -131,22 +131,20 @@ int main() {
|
||||
|
||||
ostringstream output;
|
||||
MasterSymbolString writeMstr;
|
||||
result = writeMstr.parseHex(mstr.getDataStr().substr(0, 10));
|
||||
result = writeMstr.parseHex(mstr.getStr().substr(0, 10));
|
||||
if (result != RESULT_OK) {
|
||||
cout << " parse \"" << mstr.getDataStr().substr(0, 10) << "\" error: " << getResultCode(result)
|
||||
<< endl;
|
||||
cout << " parse \"" << mstr.getStr().substr(0, 10) << "\" error: " << getResultCode(result) << endl;
|
||||
error = true;
|
||||
}
|
||||
SlaveSymbolString writeSstr;
|
||||
result = writeSstr.parseHex(sstr.getDataStr().substr(0, 2));
|
||||
result = writeSstr.parseHex(sstr.getStr().substr(0, 2));
|
||||
if (result != RESULT_OK) {
|
||||
cout << " parse \"" << sstr.getDataStr().substr(0, 2) << "\" error: " << getResultCode(result)
|
||||
<< endl;
|
||||
cout << " parse \"" << sstr.getStr().substr(0, 2) << "\" error: " << getResultCode(result) << endl;
|
||||
error = true;
|
||||
}
|
||||
result = fields->read(pt_masterData, mstr, 0, output, 0, -1, false);
|
||||
result = fields->read(mstr, 0, output, 0, -1, false);
|
||||
if (result >= RESULT_OK) {
|
||||
result = fields->read(pt_slaveData, sstr, 0, output, 0, -1, !output.str().empty());
|
||||
result = fields->read(sstr, 0, output, 0, -1, !output.str().empty());
|
||||
}
|
||||
if (failedRead) {
|
||||
if (result >= RESULT_OK) {
|
||||
@@ -167,9 +165,9 @@ int main() {
|
||||
}
|
||||
|
||||
istringstream input(expectStr);
|
||||
result = fields->write(input, pt_masterData, writeMstr, 0);
|
||||
result = fields->write(input, writeMstr, 0);
|
||||
if (result >= RESULT_OK) {
|
||||
result = fields->write(input, pt_slaveData, writeSstr, 0);
|
||||
result = fields->write(input, writeSstr, 0);
|
||||
}
|
||||
if (failedWrite) {
|
||||
if (result >= RESULT_OK) {
|
||||
@@ -186,8 +184,8 @@ int main() {
|
||||
error = true;
|
||||
} else {
|
||||
bool match = mstr == writeMstr && sstr == writeSstr;
|
||||
verify(failedWriteMatch, "write", expectStr, match, mstr.getDataStr() + " "
|
||||
+ sstr.getDataStr(), writeMstr.getDataStr() + " " + writeSstr.getDataStr());
|
||||
verify(failedWriteMatch, "write", expectStr, match, mstr.getStr() + " " + sstr.getStr(),
|
||||
writeMstr.getStr() + " " + writeSstr.getStr());
|
||||
}
|
||||
delete fields;
|
||||
fields = NULL;
|
||||
|
||||
Reference in New Issue
Block a user