50 lines
1.3 KiB
Go
50 lines
1.3 KiB
Go
package message
|
||
|
||
import "github.com/snksoft/crc"
|
||
|
||
//rssp 协议中crc校验,查表法实现
|
||
|
||
var (
|
||
// crc16多项式为G(x)=X16+X11+X4+1
|
||
RSSP_I_CRC16 = crc.NewHash(&crc.Parameters{Width: 16, Polynomial: 0x0811, Init: 0x0, ReflectIn: true, ReflectOut: true, FinalXor: 0x0})
|
||
// 通道1 crc32多项式为0x100d4e63
|
||
RSSP_I_C1_CRC32 = crc.NewHash(&crc.Parameters{Width: 32, Polynomial: 0x100d4e63, Init: 0x0, ReflectIn: true, ReflectOut: true, FinalXor: 0x0})
|
||
// 通道2 crc32多项式为0x8ce56011
|
||
RSSP_I_C2_CRC32 = crc.NewHash(&crc.Parameters{Width: 32, Polynomial: 0x8ce56011, Init: 0x0, ReflectIn: true, ReflectOut: true, FinalXor: 0x0})
|
||
)
|
||
|
||
// Rssp_I_Crc16计算
|
||
func Rssp_I_Crc16(data []byte) uint16 {
|
||
return uint16(RSSP_I_CRC16.CalculateCRC(data))
|
||
}
|
||
|
||
// 通道1的crc32
|
||
func Rssp_I_Crc32C1(data []byte) uint32 {
|
||
var result byte
|
||
for i, b := range data {
|
||
result = 0
|
||
for i := 0; i < 8; i++ {
|
||
result <<= 1
|
||
result |= b & 1
|
||
b >>= 1
|
||
}
|
||
data[i] = result
|
||
}
|
||
return uint32(RSSP_I_C1_CRC32.CalculateCRC(data))
|
||
}
|
||
|
||
// 通道2的crc32
|
||
func Rssp_I_Crc32C2(data []byte) uint32 {
|
||
var result byte
|
||
for i, b := range data {
|
||
result = 0
|
||
for i := 0; i < 8; i++ {
|
||
result <<= 1
|
||
result |= b & 1
|
||
b >>= 1
|
||
}
|
||
data[i] = result
|
||
}
|
||
return uint32(RSSP_I_C2_CRC32.CalculateCRC(data))
|
||
}
|