mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-30 20:40:28 -04: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
 |