Mercurial > ~darius > hgwebdir.cgi > giant
diff docs/CRC.c @ 0:1f3c12ba927d default tip
Rework code for USB interface
author | Daniel O'Connor <darius@dons.net.au> |
---|---|
date | Sun, 19 Nov 2017 18:10:23 +1030 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/CRC.c Sun Nov 19 18:10:23 2017 +1030 @@ -0,0 +1,53 @@ +INT16U cal_crc_half(INT8U far *pin, INT8U len) +{ + + INT16U crc; + + INT8U da; + INT8U far *ptr; + INT8U bCRCHign; + INT8U bCRCLow; + + INT16U crc_ta[16]= + { + 0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7, + + 0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef + }; + ptr=pin; + crc=0; + + while(len--!=0) + { + da=((INT8U)(crc>>8))>>4; + + crc<<=4; + + crc^=crc_ta[da^(*ptr>>4)]; + + da=((INT8U)(crc>>8))>>4; + + crc<<=4; + + crc^=crc_ta[da^(*ptr&0x0f)]; + + ptr++; + } + bCRCLow = crc; + + bCRCHign= (INT8U)(crc>>8); + + if(bCRCLow==0x28||bCRCLow==0x0d||bCRCLow==0x0a) + + { + bCRCLow++; + } + if(bCRCHign==0x28||bCRCHign==0x0d||bCRCHign==0x0a) + + { + bCRCHign++; + } + crc = ((INT16U)bCRCHign)<<8; + crc += bCRCLow; + return(crc); +}