mbed I/F binding for mruby
Dependents: mruby_mbed_web mirb_mbed
mbed-mruby
How to use
Class
src/crc.c@1:8ccd1d494a4b, 2015-04-13 (annotated)
- Committer:
- mzta
- Date:
- Mon Apr 13 05:20:15 2015 +0000
- Revision:
- 1:8ccd1d494a4b
- Parent:
- 0:158c61bb030f
- code refactoring.; - add SPI, SPISlave, I2C class to mruby-mbed (Incomplete).
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mzta | 0:158c61bb030f | 1 | /* |
mzta | 0:158c61bb030f | 2 | ** crc.c - calculate CRC |
mzta | 0:158c61bb030f | 3 | ** |
mzta | 0:158c61bb030f | 4 | ** See Copyright Notice in mruby.h |
mzta | 0:158c61bb030f | 5 | */ |
mzta | 0:158c61bb030f | 6 | |
mzta | 0:158c61bb030f | 7 | #include <limits.h> |
mzta | 0:158c61bb030f | 8 | #include <stdint.h> |
mzta | 0:158c61bb030f | 9 | #include <stddef.h> |
mzta | 0:158c61bb030f | 10 | |
mzta | 0:158c61bb030f | 11 | /* Calculate CRC (CRC-16-CCITT) |
mzta | 0:158c61bb030f | 12 | ** |
mzta | 0:158c61bb030f | 13 | ** 0000_0000_0000_0000_0000_0000_0000_0000 |
mzta | 0:158c61bb030f | 14 | ** ^|------- CRC -------|- work --| |
mzta | 0:158c61bb030f | 15 | ** carry |
mzta | 0:158c61bb030f | 16 | */ |
mzta | 0:158c61bb030f | 17 | #define CRC_16_CCITT 0x11021ul /* x^16+x^12+x^5+1 */ |
mzta | 0:158c61bb030f | 18 | #define CRC_XOR_PATTERN (CRC_16_CCITT << 8) |
mzta | 0:158c61bb030f | 19 | #define CRC_CARRY_BIT (0x01000000) |
mzta | 0:158c61bb030f | 20 | |
mzta | 0:158c61bb030f | 21 | uint16_t |
mzta | 0:158c61bb030f | 22 | calc_crc_16_ccitt(const uint8_t *src, size_t nbytes, uint16_t crc) |
mzta | 0:158c61bb030f | 23 | { |
mzta | 0:158c61bb030f | 24 | size_t ibyte; |
mzta | 0:158c61bb030f | 25 | uint32_t ibit; |
mzta | 0:158c61bb030f | 26 | uint32_t crcwk = crc << 8; |
mzta | 0:158c61bb030f | 27 | |
mzta | 0:158c61bb030f | 28 | for (ibyte = 0; ibyte < nbytes; ibyte++) { |
mzta | 0:158c61bb030f | 29 | crcwk |= *src++; |
mzta | 0:158c61bb030f | 30 | for (ibit = 0; ibit < CHAR_BIT; ibit++) { |
mzta | 0:158c61bb030f | 31 | crcwk <<= 1; |
mzta | 0:158c61bb030f | 32 | if (crcwk & CRC_CARRY_BIT) { |
mzta | 0:158c61bb030f | 33 | crcwk ^= CRC_XOR_PATTERN; |
mzta | 0:158c61bb030f | 34 | } |
mzta | 0:158c61bb030f | 35 | } |
mzta | 0:158c61bb030f | 36 | } |
mzta | 0:158c61bb030f | 37 | return (uint16_t)(crcwk >> 8); |
mzta | 0:158c61bb030f | 38 | } |
mzta | 0:158c61bb030f | 39 | |
mzta | 0:158c61bb030f | 40 |