Dear All,
Could someone correct the below code. i suppose to get BF52 as CRC for the input. But im not. TIA
'The polynomial for this algorithm is: X**16 + X**12 + X**5 + 1.
the instruction for the CRC as follows :
//------------------------------------------------------------------------------------------------------------------
at beginning,
CRCLSB = 0FFH (octal 377) (decimal 255)
CRCMSB = 0FFH (octal 377) (decimal 255)
then for each data byte in a block,
X = D XOR CRCMSB
X = X XOR ( X >> 4 )
CRCMSB = CRCLSB XOR ( X >> 3 ) XOR ( X << 4 )
CRCLSB = X XOR ( X << 5 )
and at end,
CRCLSB = CRCLSB XOR 0FFH
CRCMSB = CRCMSB XOR 0FFH
//------------------------------------------------------------------------------------------------------------------
code :
Public Class Form1
Private CRCLSB As UShort = &HFF
Private CRCMSB As UShort = &HFF
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim messages As String
Dim encoding As New System.Text.UTF8Encoding()
'Return (Str())
' messages = "<LF>TDIFF<CR><LF>02<CR><LF>G03<CR><LF>06<CR><LF>LY# 0.5 L<CR><LF>MO# 0.0 L<CR><LF>NE# 3.7 <CR><LF>EO# 0.0 <CR><LF>BA# 0.0 <CR><LF>NRBC# 0.0 <CR><LF>G04<CR><LF>06<CR><LF>LY% 11.1 L<CR><LF>MO% 0.9 L<CR><LF>NE% 87.2 H<CR>" '"<LF>EO% 0.7 L<CR><LF>BA% 0.1 L<CR><LF>NRBC% 0.0 <CR><LF><CR><LF><CR><LF>--------------<CR><LF> "
messages = "<CR><LF><CR><LF><CR><LF><CR><LF><CR><LF><CR><LF>--------------<CR><LF>S02<CR><LF>CBC<CR><LF>DIFF<CR><LF>TCBC<CR><LF>04<CR><LF>G01<CR><LF>0A<CR><LF>DATE <CR><LF>TIME 19:05:39<CR><LF>ID1 11177860<CR><LF>CASSPOS A003703<CR><LF>ID1S"
messages = Replace(messages, "<CR>", vbCr)
messages = Replace(messages, "<LF>", vbLf)
messages = Replace(messages, "<STX>", Chr(2))
messages = Replace(messages, "<ETX>", Chr(3))
CRC16(encoding.GetBytes(messages))
End Sub
Public Function CRC16(ByVal input() As Byte) As UShort
Dim crc_16 As UShort = 0
For i As Integer = 0 To input.Length - 1
crc_16 = update_crc_16(crc_16, input(i))
Next
CRCLSB = CRCLSB Xor &HFF
CRCMSB = CRCMSB Xor &HFF
MsgBox(CRCLSB.ToString("X") & "||" & CRCMSB.ToString("X"))
'BF52
Return crc_16
End Function
Private Function update_crc_16(ByVal crc As UShort, ByVal c As UShort)
Dim tmp As UShort, short_c As UShort
short_c = c Xor CRCMSB
short_c = short_c Xor (short_c >> 4)
CRCMSB = CRCLSB Xor (short_c >> 3) Xor (short_c << 4)
CRCLSB = short_c Xor (short_c << 5)
End Function
End Class
Could someone correct the below code. i suppose to get BF52 as CRC for the input. But im not. TIA
'The polynomial for this algorithm is: X**16 + X**12 + X**5 + 1.
the instruction for the CRC as follows :
//------------------------------------------------------------------------------------------------------------------
at beginning,
CRCLSB = 0FFH (octal 377) (decimal 255)
CRCMSB = 0FFH (octal 377) (decimal 255)
then for each data byte in a block,
X = D XOR CRCMSB
X = X XOR ( X >> 4 )
CRCMSB = CRCLSB XOR ( X >> 3 ) XOR ( X << 4 )
CRCLSB = X XOR ( X << 5 )
and at end,
CRCLSB = CRCLSB XOR 0FFH
CRCMSB = CRCMSB XOR 0FFH
//------------------------------------------------------------------------------------------------------------------
code :
Public Class Form1
Private CRCLSB As UShort = &HFF
Private CRCMSB As UShort = &HFF
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim messages As String
Dim encoding As New System.Text.UTF8Encoding()
'Return (Str())
' messages = "<LF>TDIFF<CR><LF>02<CR><LF>G03<CR><LF>06<CR><LF>LY# 0.5 L<CR><LF>MO# 0.0 L<CR><LF>NE# 3.7 <CR><LF>EO# 0.0 <CR><LF>BA# 0.0 <CR><LF>NRBC# 0.0 <CR><LF>G04<CR><LF>06<CR><LF>LY% 11.1 L<CR><LF>MO% 0.9 L<CR><LF>NE% 87.2 H<CR>" '"<LF>EO% 0.7 L<CR><LF>BA% 0.1 L<CR><LF>NRBC% 0.0 <CR><LF><CR><LF><CR><LF>--------------<CR><LF> "
messages = "<CR><LF><CR><LF><CR><LF><CR><LF><CR><LF><CR><LF>--------------<CR><LF>S02<CR><LF>CBC<CR><LF>DIFF<CR><LF>TCBC<CR><LF>04<CR><LF>G01<CR><LF>0A<CR><LF>DATE <CR><LF>TIME 19:05:39<CR><LF>ID1 11177860<CR><LF>CASSPOS A003703<CR><LF>ID1S"
messages = Replace(messages, "<CR>", vbCr)
messages = Replace(messages, "<LF>", vbLf)
messages = Replace(messages, "<STX>", Chr(2))
messages = Replace(messages, "<ETX>", Chr(3))
CRC16(encoding.GetBytes(messages))
End Sub
Public Function CRC16(ByVal input() As Byte) As UShort
Dim crc_16 As UShort = 0
For i As Integer = 0 To input.Length - 1
crc_16 = update_crc_16(crc_16, input(i))
Next
CRCLSB = CRCLSB Xor &HFF
CRCMSB = CRCMSB Xor &HFF
MsgBox(CRCLSB.ToString("X") & "||" & CRCMSB.ToString("X"))
'BF52
Return crc_16
End Function
Private Function update_crc_16(ByVal crc As UShort, ByVal c As UShort)
Dim tmp As UShort, short_c As UShort
short_c = c Xor CRCMSB
short_c = short_c Xor (short_c >> 4)
CRCMSB = CRCLSB Xor (short_c >> 3) Xor (short_c << 4)
CRCLSB = short_c Xor (short_c << 5)
End Function
End Class