Changeset f58793
- Timestamp:
- 01/05/12 14:35:18 (17 months ago)
- Branches:
- ('master', 'a231b56d57a69513303d0061f5fa3e3cd51c85c1')('controller-upgrade', '72b31cc86eeeef18f1371a3067b6e8a5ca21abfc')('windows_service_fixes', 'df6bd2788365991d36d5af2a75833b8de2a5860f')
- Children:
- 6fa59e9ca978efd34c2798cd97609d9f956f9bd5
- Parents:
- 265daf4714ea69f99888ef035f64ea240f1115e9
- git-author:
- Micke Prag <micke.prag@telldus.se>2012-01-05 14:35:18+01:00
- git-committer:
- Micke Prag <micke.prag@telldus.se>2012-01-05 14:35:18+01:00
- File:
-
- 1 edited
-
telldus-core/service/ProtocolOregon.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
telldus-core/service/ProtocolOregon.cpp
rc03018 rf58793 17 17 if (model.compare(L"0xEA4C") == 0) { 18 18 return decodeEA4C(data); 19 } else if (model.compare(L"0x1A2D") ) {19 } else if (model.compare(L"0x1A2D") == 0) { 20 20 return decode1A2D(data); 21 21 } … … 70 70 71 71 std::string ProtocolOregon::decode1A2D(const std::string &data) { 72 //TODO 73 return ""; 72 uint64_t value = strtol(data.c_str(), NULL, 16); 73 uint8_t checksum2 = value & 0xFF; 74 value >>= 8; 75 uint8_t checksum1 = value & 0xFF; 76 value >>= 8; 77 78 uint8_t checksum = ((value >> 4) & 0xF) + (value & 0xF); 79 uint8_t hum1 = value & 0xF; 80 value >>= 8; 81 82 checksum += ((value >> 4) & 0xF) + (value & 0xF); 83 uint8_t neg = value & (1 << 3); 84 uint8_t hum2 = (value >> 4) & 0xF; 85 value >>= 8; 86 87 checksum += ((value >> 4) & 0xF) + (value & 0xF); 88 uint8_t temp2 = value & 0xF; 89 uint8_t temp1 = (value >> 4) & 0xF; 90 value >>= 8; 91 92 checksum += ((value >> 4) & 0xF) + (value & 0xF); 93 uint8_t temp3 = (value >> 4) & 0xF; 94 value >>= 8; 95 96 checksum += ((value >> 4) & 0xF) + (value & 0xF); 97 uint8_t address = value & 0xFF; 98 value >>= 8; 99 100 checksum += ((value >> 4) & 0xF) + (value & 0xF); 101 uint8_t channel = (value >> 4) & 0x7; 102 103 checksum += 0x1 + 0xA + 0x2 + 0xD - 0xA; 104 105 //TODO: Find out how checksum2 works 106 if (checksum != checksum1) { 107 return ""; 108 } 109 110 double temperature = ((temp1 * 100) + (temp2 * 10) + temp3)/10.0; 111 if (neg) { 112 temperature = -temperature; 113 } 114 115 std::stringstream retString; 116 retString << "class:sensor;protocol:oregon;model:1A2D;id:" << (int)address 117 << ";temp:" << std::fixed << std::setprecision(1) << temperature << ";"; 118 119 return retString.str(); 74 120 }
Note: See TracChangeset
for help on using the changeset viewer.
