···108108 set_u8 b (i + 2) (v lsr 8);
109109 set_u8 b (i + 3) v
110110111111-(* CRC-16-CCITT computation *)
112112-let crc16_ccitt_table =
113113- let table = Array.make 256 0 in
114114- for i = 0 to 255 do
115115- let crc = ref (i lsl 8) in
116116- for _ = 0 to 7 do
117117- if !crc land 0x8000 <> 0 then crc := (!crc lsl 1) lxor 0x1021
118118- else crc := !crc lsl 1
119119- done;
120120- table.(i) <- !crc land 0xFFFF
121121- done;
122122- table
123123-124124-let compute_fecf data =
125125- let crc = ref 0xFFFF in
126126- for i = 0 to String.length data - 1 do
127127- let byte = Char.code data.[i] in
128128- let idx = (!crc lsr 8) lxor byte land 0xFF in
129129- crc := (!crc lsl 8) lxor crc16_ccitt_table.(idx) land 0xFFFF
130130- done;
131131- !crc
111111+let compute_fecf = Crc.crc16_ccitt
132112133113(* Header decoding *)
134114let decode_header buf =