47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /****************************************************************************
 | ||
|  | 
 | ||
|  | Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED. | ||
|  | 
 | ||
|  | This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT | ||
|  | be copied by any method or incorporated into another program without | ||
|  | the express written consent of Aerospace C.Power. This Information or any portion | ||
|  | thereof remains the property of Aerospace C.Power. The Information contained herein | ||
|  | is believed to be accurate and Aerospace C.Power assumes no responsibility or | ||
|  | liability for its use in any way and conveys no license or title under | ||
|  | any patent or copyright and makes no representation or warranty that this | ||
|  | Information is free from patent or copyright infringement. | ||
|  | 
 | ||
|  | ****************************************************************************/ | ||
|  | #include "iot_checksum.h"
 | ||
|  | 
 | ||
|  | uint16_t iot_getcksum(uint8_t *ptr, uint32_t size) | ||
|  | { | ||
|  |     uint32_t index = 0; | ||
|  |     uint32_t cksum = 0; | ||
|  | 
 | ||
|  |     if ((NULL == ptr) || (0 == size)) | ||
|  |     { | ||
|  |         return 0; | ||
|  |     } | ||
|  | 
 | ||
|  |     while(index < (size - 1)) | ||
|  |     { | ||
|  |         cksum += *(ptr + index + 1); | ||
|  |         cksum += *(ptr + index) << 8; | ||
|  |         index += 2; | ||
|  |     } | ||
|  | 
 | ||
|  |     if (size % 2) | ||
|  |     { | ||
|  |         cksum += ((uint16_t)*(ptr + index) << 8) & 0xFF00; | ||
|  |     } | ||
|  | 
 | ||
|  |     while(cksum > 0xffff) | ||
|  |     { | ||
|  |         cksum = (cksum >> 16) + (cksum & 0xffff); | ||
|  |     } | ||
|  |     return (uint16_t)(~cksum); | ||
|  | 
 | ||
|  | } | ||
|  | 
 |