1 /*
2  * $Id: sbe_promformat.h,v 2.2 2005/09/28 00:10:09 rickd PMCC4_3_1B $
3  */
4 
5 #ifndef _INC_SBE_PROMFORMAT_H_
6 #define _INC_SBE_PROMFORMAT_H_
7 
8 /*-----------------------------------------------------------------------------
9  * sbe_promformat.h - Contents of seeprom used by dvt and manufacturing tests
10  *
11  * Copyright (C) 2002-2005  SBE, Inc.
12  *
13  *   This program is free software; you can redistribute it and/or modify
14  *   it under the terms of the GNU General Public License as published by
15  *   the Free Software Foundation; either version 2 of the License, or
16  *   (at your option) any later version.
17  *
18  *   This program is distributed in the hope that it will be useful,
19  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
20  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  *   GNU General Public License for more details.
22  *
23  * For further information, contact via email: support@sbei.com
24  * SBE, Inc.  San Ramon, California  U.S.A.
25  *
26  *-----------------------------------------------------------------------------
27  * RCS info:
28  * RCS revision: $Revision: 2.2 $
29  * Last changed on $Date: 2005/09/28 00:10:09 $
30  * Changed by $Author: rickd $
31  *-----------------------------------------------------------------------------
32  * $Log: sbe_promformat.h,v $
33  * Revision 2.2  2005/09/28 00:10:09  rickd
34  * Add EEPROM sample from C4T1E1 board.
35  *
36  * Revision 2.1  2005/05/04 17:18:24  rickd
37  * Initial CI.
38  *
39  *-----------------------------------------------------------------------------
40  */
41 
42 
43 /***
44  *  PMCC4 SAMPLE EEPROM IMAGE
45  *
46  *  eeprom[00]:  01 11 76 07  01 00 a0 d6
47  *  eeprom[08]:  22 34 56 3e  5b c1 1c 3e
48  *  eeprom[16]:  5b e1 b6 00  00 00 01 00
49  *  eeprom[24]:  00 08 46 d3  7b 5e a8 fb
50  *  eeprom[32]:  f7 ef df bf  7f 55 00 01
51  *  eeprom[40]:  02 04 08 10  20 40 80 ff
52  *  eeprom[48]:  fe fd fb f7  ef df bf 7f
53  *
54  ***/
55 
56 
57 /*------------------------------------------------------------------------
58  *          Type 1 Format
59  * byte:
60  * 0    1  2    3  4      5   6   7    8  9  10    11 12 13 14    15 16 17 18
61  * -------------------------------------------------------------------------
62  * 01   11 76   SS SS     00 0A D6 <SERIAL NUM>    <Create TIME>  <Heatrun TIME>
63  *       SBE    SUB       SERIAL #    (BCD)         (time_t)       (time_t)
64  *       ID     VENDOR                              (format)       (format)
65  *
66  *  19 20 21 22    23 24 25 26
67  *  Heat Run        Heat Run
68  *  Iterations      Errors
69  *------------------------------------------------------------------------
70  *
71  *
72  *
73  *           Type 2 Format  - Added length, CRC in fixed position
74  * byte:
75  * 0    1  2       3  4  5  6      7  8        9  10     11 12 13 14 15 16
76  * -------------------------------------------------------------------------
77  * 02   00 1A      CC CC CC CC    11  76       07 03    00 0A D6 <SERIAL NUM>
78  *      Payload    SBE Crc32      SUB System   System    SERIAL/MAC
79  *      Length                    VENDOR ID    ID
80  *
81  *  17 18 19 20     21 22 23 24     25 26 27 28    29 39 31 32
82  * --------------------------------------------------------------------------
83  *  <Create TIME>   <Heatrun TIME>   Heat Run      Heat Run
84  *  (time_t)         (time_t)        Iterations    Errors
85  *
86  */
87 
88 #ifdef __cplusplus
89 extern      "C"
90 {
91 #endif
92 
93 
94 #define STRUCT_OFFSET(type, symbol)  ((long)&(((type *)0)->symbol))
95 
96 /*------------------------------------------------------------------------
97  *  Historically different Prom format types.
98  *
99  *  For diagnostic and failure purposes, do not create a type 0x00 or a
100  *  type 0xff
101  *------------------------------------------------------------------------
102  */
103 #define PROM_FORMAT_Unk   (-1)
104 #define PROM_FORMAT_TYPE1   1
105 #define PROM_FORMAT_TYPE2   2
106 
107 
108 /****** bit fields  for a type 1 formatted seeprom **************************/
109     typedef struct
110     {
111         char        type;       /* 0x00 */
112         char        Id[2];      /* 0x01-0x02 */
113         char        SubId[2];   /* 0x03-0x04 */
114         char        Serial[6];  /* 0x05-0x0a */
115         char        CreateTime[4];      /* 0x0b-0x0e */
116         char        HeatRunTime[4];     /* 0x0f-0x12 */
117         char        HeatRunIterations[4];       /* 0x13-0x16 */
118         char        HeatRunErrors[4];   /* 0x17-0x1a */
119         char        Crc32[4];   /* 0x1b-0x1e */
120     }           FLD_TYPE1;
121 
122 
123 /****** bit fields  for a type 2 formatted seeprom **************************/
124     typedef struct
125     {
126         char        type;       /* 0x00 */
127         char        length[2];  /* 0x01-0x02 */
128         char        Crc32[4];   /* 0x03-0x06 */
129         char        Id[2];      /* 0x07-0x08 */
130         char        SubId[2];   /* 0x09-0x0a */
131         char        Serial[6];  /* 0x0b-0x10 */
132         char        CreateTime[4];      /* 0x11-0x14 */
133         char        HeatRunTime[4];     /* 0x15-0x18 */
134         char        HeatRunIterations[4];       /* 0x19-0x1c */
135         char        HeatRunErrors[4];   /* 0x1d-0x20 */
136     }           FLD_TYPE2;
137 
138 
139 
140 /***** this union allows us to access the seeprom as an array of bytes ***/
141 /***** or as individual fields                                         ***/
142 
143 #define SBE_EEPROM_SIZE    128
144 #define SBE_MFG_INFO_SIZE  sizeof(FLD_TYPE2)
145 
146     typedef union
147     {
148         char        bytes[128];
149         FLD_TYPE1   fldType1;
150         FLD_TYPE2   fldType2;
151     }           PROMFORMAT;
152 
153 #ifdef __cplusplus
154 }
155 #endif
156 
157 #endif                          /*** _INC_SBE_PROMFORMAT_H_ ***/
158