crc.c 736 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #include <stdlib.h>
  2. #include <stdint.h>
  3. #include "crc.h"
  4. #include "uart.h"
  5. extern FILE uart_stdout;
  6. uint16_t crc_xmodem_update (uint16_t crc, uint8_t data)
  7. {
  8. int i;
  9. crc = crc ^ ((uint16_t)data << 8);
  10. for (i=0; i<8; i++)
  11. {
  12. if (crc & 0x8000)
  13. crc = (crc << 1) ^ 0x1021;
  14. else
  15. crc <<= 1;
  16. }
  17. return crc;
  18. }
  19. uint16_t do_crc(uint8_t * data,uint16_t size)
  20. {
  21. uint16_t crc =0;
  22. uint16_t i;
  23. for (i=0; i<size; i++){
  24. crc = crc_xmodem_update(crc,data[i]);
  25. //printf("%x : %x\n",crc,data[i]);
  26. }
  27. return crc;
  28. }
  29. uint16_t do_crc_update(uint16_t crc,uint8_t * data,uint16_t size)
  30. {
  31. uint16_t i;
  32. for (i=0; i<size; i++)
  33. crc = crc_xmodem_update(crc,data[i]);
  34. return crc;
  35. }