0f76364499ad6702694f86c3addaba976cc90aa5
[fw/sdcc] / device / examples / ds390 / ow390 / thermo21.h
1 //---------------------------------------------------------------------------
2 // Copyright (C) 2000 Dallas Semiconductor Corporation, All Rights Reserved.
3 // 
4 // Permission is hereby granted, free of charge, to any person obtaining a 
5 // copy of this software and associated documentation files (the "Software"), 
6 // to deal in the Software without restriction, including without limitation 
7 // the rights to use, copy, modify, merge, publish, distribute, sublicense, 
8 // and/or sell copies of the Software, and to permit persons to whom the 
9 // Software is furnished to do so, subject to the following conditions:
10 // 
11 // The above copyright notice and this permission notice shall be included 
12 // in all copies or substantial portions of the Software.
13 // 
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 
15 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 
16 // MERCHANTABILITY,  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
17 // IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES 
18 // OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 
19 // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
20 // OTHER DEALINGS IN THE SOFTWARE.
21 // 
22 // Except as contained in this notice, the name of Dallas Semiconductor 
23 // shall not be used except as stated in the Dallas Semiconductor 
24 // Branding Policy. 
25 //---------------------------------------------------------------------------
26 //
27 //  thermo.h - Include file for Thermochron demo.
28 //
29 //  Version: 2.00
30 //    
31 //    History:
32 //           1.03 -> 2.00  Reorganization of Public Domain Kit 
33
34 #ifndef THERMO_TYPES
35
36 #define THERMO_TYPES
37
38 // hacks for sdcc->TINI
39 #define NULL ((void*)0)
40 #define FILE void
41 #define stdin ((void *)0)
42 #define stdout ((void *)0)
43 #define stderr ((void *)0)
44 int fprintf (FILE *fp, xdata char *format, ...) reentrant;
45 int fopen (char *, char *);
46 int fclose (FILE *);
47
48 // defines
49 #define STATUS_PAGE    16
50 #define THERMO_FAM     0x21
51
52 #include <stdlib.h>
53
54 // Typedefs
55 #ifndef OW_UCHAR
56    #define OW_UCHAR
57    typedef unsigned char  uchar;
58    #ifdef WIN32
59       typedef unsigned short ushort;
60       typedef unsigned long  ulong;
61    #endif
62 #endif
63
64 // structure to hold the mission status 
65 typedef struct 
66 {
67    uchar serial_num[8];          // serial number of thermochron
68
69    uchar mission_in_progress;    // 1 mission in progres, 0 mission over
70
71    uchar sample_rate;            // minutes between samples
72
73    uchar rollover_enable;        // 1 if roll-over enabled
74    uchar rollover_occurred;      // 1 if roll-over occurred
75
76    ushort start_delay;           // minutes before mission starts
77
78    ulong mission_start_time;     // date/time when mission started
79    ulong current_time;           // current real-time clock value
80    ulong download_time;          // download stations time of reading
81
82    ulong mission_samples;        // number of samples in this mission
83    ulong samples_total;          // total number of samples taken by device
84     
85    uchar high_threshold;         // raw temp of high threshold
86    uchar low_threshold;          // raw temp of low threshold
87
88    // skip alarm modes and status for now
89
90    uchar status_raw[32];
91
92 } MissionStatus;
93
94 // structure to hold the histogram data 
95 typedef struct 
96 {
97    ushort bin_count[56];    // counter per bin 0 to 55 
98    float  start_range[56];  // start temp range (C) in bin 0 to 55
99    float  end_range[56];    // end temp range (C) in bin 0 to 55
100
101    uchar  hist_raw[128];    // raw data for histogram
102
103 } Histogram;
104
105 // structure to hold the histogram data 
106 typedef struct 
107 {
108    int num_low;               // number of low events
109    ulong low_start_time[12];  // start time of event 0 to 12
110    ulong low_end_time[12];    // end time of event 0 to 12 
111    int num_high;              // number of high events
112    ulong high_start_time[12]; // start time of event 0 to 12
113    ulong high_end_time[12];   // end time of event 0 to 12
114
115    uchar  alarm_raw[96];     // raw data for alarm events
116
117 } TempAlarmEvents;
118
119 // structure to hold the log data 
120 typedef struct 
121 {
122    int   num_log;             // number of logs
123    float temp[2048];          // temperature log in (C) 
124    ulong start_time;          // start time of log
125    int   interval;            // interval in seconds between logs
126
127    uchar log_raw[2048];       // raw data for log
128
129 } Log;
130
131 // structure to hold all of the thermochron data state
132 typedef struct
133 {
134    MissionStatus MissStat;    // mission state
135    Histogram HistData;        // histogram data
136    TempAlarmEvents AlarmData; // temperature alarm event data
137    Log LogData;               // log data
138
139 } ThermoStateType;
140
141 // type structure to holde time/date 
142 typedef struct          
143 {
144      ushort  second;
145      ushort  minute;
146      ushort  hour;
147      ushort  day;
148      ushort  month;
149      ushort  year;
150 } timedate;
151
152 // structure to hold each state in the StateMachine
153 typedef struct
154 {
155    int  Step;
156    char StepDescription[50];
157
158 } ThermoScript;
159
160 // Global Function Prototypes 
161  int DownloadThermo(int,uchar *,ThermoStateType *, FILE *);
162 int ReadThermoStatus(int,uchar *,ThermoStateType *, FILE *);
163 int MissionThermo(int,uchar *,ThermoStateType *, FILE *);
164 void  SecondsToDate(timedate *, ulong);
165 ulong DateToSeconds(timedate *);
166 uchar BCDToBin(uchar);
167  void  InterpretStatus(MissionStatus *);
168  void  MissionStatusToString(MissionStatus *, int, char *);
169 void  FormatMission(MissionStatus *);
170  void  InterpretHistogram(Histogram *);
171  void  HistogramToString(Histogram *, int, char *);
172  void  InterpretAlarms(TempAlarmEvents *, MissionStatus *);
173  void  AlarmsToString(TempAlarmEvents *, char *);
174  void  InterpretLog(Log *, MissionStatus *);
175  void  LogToString(Log *, int, char *);
176  void  DebugToString(MissionStatus *, TempAlarmEvents *, Histogram *, Log *, char *); 
177 float TempToFloat(uchar, int);
178 float CToF(float);
179 uchar ToBCD(short);
180
181 #endif