Completed
This commit is contained in:
		
							parent
							
								
									f9392ab032
								
							
						
					
					
						commit
						76b43f027a
					
				
							
								
								
									
										23
									
								
								RS129.py
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								RS129.py
									
									
									
									
									
								
							@ -93,15 +93,7 @@ def RS129_encode(_msg):
 | 
				
			|||||||
        for j in range(NPAR - 1, 0, -1):
 | 
					        for j in range(NPAR - 1, 0, -1):
 | 
				
			||||||
            parity[j] = parity[j - 1] ^ log_mult(POLY[j], dbyte)
 | 
					            parity[j] = parity[j - 1] ^ log_mult(POLY[j], dbyte)
 | 
				
			||||||
        parity[0] = log_mult(POLY[0], dbyte)
 | 
					        parity[0] = log_mult(POLY[0], dbyte)
 | 
				
			||||||
 | 
					    return [parity[2], parity[1], parity[0]]
 | 
				
			||||||
    return parity
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Reed-Solomon (12,9) check
 | 
					 | 
				
			||||||
def RS129_check(_msg):
 | 
					 | 
				
			||||||
    assert len(_msg) == 12, 'RS129_check error: Message not 12 bytes: %s' % print_hex(_msg)
 | 
					 | 
				
			||||||
    parity = RS129_encode(_msg[:9])
 | 
					 | 
				
			||||||
    return _msg[9] == parity[2] and msg[10] == parity[1] and msg[11] == parity[0];
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Apply DMR XOR MASK
 | 
					# Apply DMR XOR MASK
 | 
				
			||||||
def xor_mask(_parity):
 | 
					def xor_mask(_parity):
 | 
				
			||||||
@ -115,7 +107,7 @@ def DMR_RS129_LC_FEC(_message):
 | 
				
			|||||||
    bin_message = bytearray(_message)
 | 
					    bin_message = bytearray(_message)
 | 
				
			||||||
    parity = RS129_encode(bin_message)
 | 
					    parity = RS129_encode(bin_message)
 | 
				
			||||||
    xor_parity = xor_mask(parity)
 | 
					    xor_parity = xor_mask(parity)
 | 
				
			||||||
    return chr(xor_parity[2]) + chr(xor_parity[1]) + chr(xor_parity[0])
 | 
					    return chr(xor_parity[0]) + chr(xor_parity[1]) + chr(xor_parity[2])
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
# For testing the code
 | 
					# For testing the code
 | 
				
			||||||
@ -123,9 +115,10 @@ def print_hex(_list):
 | 
				
			|||||||
    print('[{}]'.format(', '.join(hex(x) for x in _list)))
 | 
					    print('[{}]'.format(', '.join(hex(x) for x in _list)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == '__main__':
 | 
					if __name__ == '__main__':
 | 
				
			||||||
 | 
					 | 
				
			||||||
    message = '\x00\x10\x20\x00\x0c\x30\x2f\x9b\xe5'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    parity = DMR_RS129_LC_FEC(message)
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    print(h(parity))
 | 
					    # Validation Example
 | 
				
			||||||
 | 
					    message = '\x00\x10\x20\x00\x0c\x30\x2f\x9b\xe5'
 | 
				
			||||||
 | 
					    parity_should_be = '\xda\x4d\x5a'
 | 
				
			||||||
 | 
					    parity = DMR_RS129_LC_FEC(message)
 | 
				
			||||||
 | 
					    print('Masked Parity Should be:     {}'.format(h(parity_should_be)))
 | 
				
			||||||
 | 
					    print('Calculated Masked Parity is: {}'.format(h(parity)))
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user