annotate crcmodel.c @ 5:115cfa4a3239 default tip

Added icon upload function for OSTC 4/5 For the upload the same process as the one for the firmware update is used => CRC functionality has been copied from the ostc_pack SW
author Ideenmodellierer
date Tue, 30 Dec 2025 21:41:02 +0100
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
1 /******************************************************************************/
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
2 /* Start of crcmodel.c */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
3 /******************************************************************************/
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
4 /* */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
5 /* Author : Ross Williams (ross@guest.adelaide.edu.au.). */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
6 /* Date : 3 June 1993. */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
7 /* Status : Public domain. */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
8 /* */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
9 /* Description : This is the implementation (.c) file for the reference */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
10 /* implementation of the Rocksoft^tm Model CRC Algorithm. For more */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
11 /* information on the Rocksoft^tm Model CRC Algorithm, see the document */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
12 /* titled "A Painless Guide to CRC Error Detection Algorithms" by Ross */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
13 /* Williams (ross@guest.adelaide.edu.au.). This document is likely to be in */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
14 /* "ftp.adelaide.edu.au/pub/rocksoft". */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
15 /* */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
16 /* Note: Rocksoft is a trademark of Rocksoft Pty Ltd, Adelaide, Australia. */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
17 /* */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
18 /******************************************************************************/
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
19 /* */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
20 /* Implementation Notes */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
21 /* -------------------- */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
22 /* To avoid inconsistencies, the specification of each function is not echoed */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
23 /* here. See the header file for a description of these functions. */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
24 /* This package is light on checking because I want to keep it short and */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
25 /* simple and portable (i.e. it would be too messy to distribute my entire */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
26 /* C culture (e.g. assertions package) with this package. */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
27 /* */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
28 /******************************************************************************/
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
29
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
30 #include "crcmodel.h"
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
31
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
32 /******************************************************************************/
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
33
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
34 /* The following definitions make the code more readable. */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
35
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
36 #define BITMASK(X) (1L << (X))
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
37 #define MASK32 0xFFFFFFFFL
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
38 #define LOCAL static
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
39
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
40 /******************************************************************************/
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
41
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
42 LOCAL ulong reflect P_((ulong v,int b));
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
43 LOCAL ulong reflect (ulong v,int b)
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
44 /* Returns the value v with the bottom b [0,32] bits reflected. */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
45 /* Example: reflect(0x3e23L,3) == 0x3e26 */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
46 {
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
47 int i;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
48 ulong t = v;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
49 for (i=0; i<b; i++)
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
50 {
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
51 if (t & 1L)
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
52 v|= BITMASK((b-1)-i);
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
53 else
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
54 v&= ~BITMASK((b-1)-i);
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
55 t>>=1;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
56 }
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
57 return v;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
58 }
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
59
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
60 /******************************************************************************/
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
61
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
62 LOCAL ulong widmask P_((p_cm_t));
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
63 LOCAL ulong widmask (p_cm_t p_cm)
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
64 /* Returns a longword whose value is (2^p_cm->cm_width)-1. */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
65 /* The trick is to do this portably (e.g. without doing <<32). */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
66 {
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
67 return (((1L<<(p_cm->cm_width-1))-1L)<<1)|1L;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
68 }
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
69
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
70 /******************************************************************************/
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
71
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
72 void cm_ini (p_cm_t p_cm)
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
73 {
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
74 p_cm->cm_reg = p_cm->cm_init;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
75 }
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
76
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
77 /******************************************************************************/
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
78
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
79 void cm_nxt (p_cm_t p_cm, int ch)
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
80 {
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
81 int i;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
82 ulong uch = (ulong) ch;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
83 ulong topbit = BITMASK(p_cm->cm_width-1);
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
84
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
85 if (p_cm->cm_refin) uch = reflect(uch,8);
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
86 p_cm->cm_reg ^= (uch << (p_cm->cm_width-8));
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
87 for (i=0; i<8; i++)
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
88 {
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
89 if (p_cm->cm_reg & topbit)
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
90 p_cm->cm_reg = (p_cm->cm_reg << 1) ^ p_cm->cm_poly;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
91 else
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
92 p_cm->cm_reg <<= 1;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
93 p_cm->cm_reg &= widmask(p_cm);
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
94 }
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
95 }
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
96
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
97 /******************************************************************************/
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
98
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
99 void cm_blk (p_cm_t p_cm,p_ubyte_ blk_adr,ulong blk_len)
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
100 {
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
101 while (blk_len--) cm_nxt(p_cm,*blk_adr++);
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
102 }
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
103
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
104 /******************************************************************************/
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
105
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
106 ulong cm_crc (p_cm_t p_cm)
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
107 {
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
108 if (p_cm->cm_refot)
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
109 return p_cm->cm_xorot ^ reflect(p_cm->cm_reg,p_cm->cm_width);
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
110 else
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
111 return p_cm->cm_xorot ^ p_cm->cm_reg;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
112 }
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
113
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
114 /******************************************************************************/
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
115
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
116 ulong cm_tab (p_cm_t p_cm, int index)
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
117 {
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
118 int i;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
119 ulong r;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
120 ulong topbit = BITMASK(p_cm->cm_width-1);
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
121 ulong inbyte = (ulong) index;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
122
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
123 if (p_cm->cm_refin) inbyte = reflect(inbyte,8);
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
124 r = inbyte << (p_cm->cm_width-8);
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
125 for (i=0; i<8; i++)
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
126 if (r & topbit)
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
127 r = (r << 1) ^ p_cm->cm_poly;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
128 else
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
129 r<<=1;
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
130 if (p_cm->cm_refin) r = reflect(r,p_cm->cm_width);
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
131 return r & widmask(p_cm);
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
132 }
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
133
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
134 /******************************************************************************/
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
135 /* End of crcmodel.c */
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
136 /******************************************************************************/
115cfa4a3239 Added icon upload function for OSTC 4/5
Ideenmodellierer
parents:
diff changeset
137