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);
|
|
|
|
}
|
|
|