mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-15 16:42:12 -05:00
26 lines
665 B
Fortran
26 lines
665 B
Fortran
|
subroutine get_crc24(mc,len,ncrc)
|
||
|
!
|
||
|
! 1. To calculate 24-bit CRC, mc(1:len-24) is the message and mc(len-23:len) are zero.
|
||
|
! 2. To check a received CRC, mc(1:len) is the received message plus CRC.
|
||
|
! ncrc will be zero if the received message/CRC are consistent.
|
||
|
!
|
||
|
character c24*24
|
||
|
integer*1 mc(len)
|
||
|
integer*1 r(25),p(25)
|
||
|
integer ncrc
|
||
|
! polynomial for 24-bit CRC 0x100065b
|
||
|
data p/1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,0,1,1/
|
||
|
|
||
|
! divide by polynomial
|
||
|
r=mc(1:25)
|
||
|
do i=0,len-25
|
||
|
r(25)=mc(i+25)
|
||
|
r=mod(r+r(1)*p,2)
|
||
|
r=cshift(r,1)
|
||
|
enddo
|
||
|
|
||
|
write(c24,'(24b1)') r(1:24)
|
||
|
read(c24,'(b24.24)') ncrc
|
||
|
|
||
|
end subroutine get_crc24
|