mbed I/F binding for mruby

Dependents:   mruby_mbed_web mirb_mbed

mbed-mruby

How to use

Class

Committer:
mzta
Date:
Wed Mar 25 17:36:16 2015 +0000
Revision:
0:158c61bb030f
mirb_mbed initial commit;

Who changed what in which revision?

UserRevisionLine numberNew 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