Landis+Gyr GridStream Protocol: Difference between revisions

Line 126: Line 126:
----<br />
----<br />
====Checksum====
====Checksum====
----<code>uint16_t Landis_crc16 (uint16_t crc, const std::vector<uint8_t> &data, size_t size) {</code>
----
<code>uint16_t Landis_crc16 (uint16_t crc, const std::vector<uint8_t> &data, size_t size) {


<code>// CoServ CRC = 0x45F8</code>
// CoServ CRC = 0x45F8


<code>// Oncor CRC = 0x5FD6</code>
// Oncor CRC = 0x5FD6


<code>// Hard coded Poly 0x1021</code>
// Hard coded Poly 0x1021


<code>    uint16_t i = 0;</code>
    uint16_t i = 0;


<code>    while (size--) {       </code>
    while (size--) {       


<code>crc ^= data[i] << 8;</code>
crc ^= data[i] << 8;


<code>i++;</code>
i++;


<code>for (unsigned k = 0; k < 8; k++)</code>
for (unsigned k = 0; k < 8; k++)


<code>crc = crc & 0x8000 ? (crc << 1) ^ 0x1021 : crc << 1;     </code>
crc = crc & 0x8000 ? (crc << 1) ^ 0x1021 : crc << 1;     


<code>    }     </code>
    }     


<code>return crc;</code>
return crc;  


<code>}</code>  
} </code>
----<br />
----<br />
===Captured Meter Data===
===Captured Meter Data===