Update copyright.
[bertos.git] / bertos / hw / hw_thermo.h
1 /**
2  * \file
3  * <!--
4  * This file is part of BeRTOS.
5  *
6  * Bertos is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19  *
20  * As a special exception, you may use this file as part of a free software
21  * library without restriction.  Specifically, if other files instantiate
22  * templates or use macros or inline functions from this file, or you compile
23  * this file and link it with other files to produce an executable, this
24  * file does not by itself cause the resulting executable to be covered by
25  * the GNU General Public License.  This exception does not however
26  * invalidate any other reasons why the executable file might be covered by
27  * the GNU General Public License.
28  *
29  * Copyright 2008 Develer S.r.l. (http://www.develer.com/)
30  * All Rights Reserved.
31  * -->
32  *
33  * \brief thermo hardware-specific control functions.
34  *
35  * \version $Id$
36  * \author Francesco Sacchi <batt@develer.com>
37  *
38  */
39
40 #ifndef HW_THERMO_H
41 #define HW_THERMO_H
42
43 #include "thermo_map.h"
44 #include "ntc_map.h"
45
46 #include <drv/phase.h>
47 #include <drv/ntc.h>
48
49 #include <cfg/debug.h>
50 #include <cfg/compiler.h>
51
52 #warning TODO:This is an example implentation, you must implement it!
53
54 /*!
55  * This function should return the temperature set tolerance.
56  */
57 INLINE deg_t thermo_hw_tolerance(ThermoDev dev)
58 {
59         ASSERT(dev < THERMO_CNT);
60
61         switch (dev)
62         {
63         case THERMO_TEST: 
64                 /* Put here convertion function to temperature size */
65                 break;
66
67         /* Put here your thermo device */
68
69         default:
70                 ASSERT(0);
71         }
72
73         return 0;
74 }
75
76
77 /*!
78  * This function should return the timeout for reaching the
79  * target temperature.
80  */
81 INLINE ticks_t thermo_hw_timeout(ThermoDev dev)
82 {
83         ASSERT(dev < THERMO_CNT);
84
85         switch (dev)
86         {
87         case THERMO_TEST:
88                 /* return ms_to_ticks(60000); */
89                 break;
90
91         /* Put here a time out for select thermo device */
92
93         default:
94                 ASSERT(0);
95         }
96
97         return 0;
98 }
99
100
101
102 /*!
103  * Read the temperature of the hw device \a dev.
104  */
105 INLINE deg_t thermo_hw_read(ThermoDev dev)
106 {
107         return ntc_read(dev);
108 }
109
110
111 /*!
112  * Turns off a specific device.
113  * This function is usefull to handle errors.
114  */
115 INLINE void thermo_hw_off(ThermoDev dev)
116 {
117         ASSERT(dev < THERMO_CNT);
118
119         switch (dev)
120         {
121         case THERMO_TEST:
122                 phase_setPower(TRIAC_TEST, 0); 
123                 break;
124
125         /* Put here a thermo device to turn off */
126
127         default:
128                 ASSERT(0);
129         }
130
131 }
132
133
134 /*!
135  * Based on the current temperature \a cur_temp and the target temperature \a target, this function turns on and off specific
136  * triac channel and handles the freezer alarm.
137  * It may use also PID control for thermo-regolations.
138  */
139 INLINE void thermo_hw_set(ThermoDev dev, deg_t target, deg_t cur_temp)
140 {
141         ASSERT(dev < THERMO_CNT);
142
143         deg_t dist = target - cur_temp;
144         //kprintf("dev[%d], dist[%d]\n", dev, dist);
145
146         switch(dev)
147         {
148         case THERMO_TEST:
149                 if (dist > 0)
150                 {
151                         /*      phase_setPower(TRIAC_TEST, dist * PID_TEST_K); */
152                 }
153                 else
154                 {
155                         /* phase_setPower(TRIAC_TEST, 0); */
156                 }
157                 break;
158
159         /* Put here an other thermo device */
160
161         default:
162                 ASSERT(0);
163         }
164 }
165
166
167 #define THERMO_HW_INIT  _thermo_hw_init()
168
169 /*!
170  * Init hw associated with thermo-control.
171  */
172 INLINE void _thermo_hw_init(void)
173 {
174         ASSERT(phase_initialized);
175         ASSERT(ntc_initialized);
176
177         phase_setPower(TRIAC_TEST, 0);
178
179         /* Add here the other thermo device */
180 }
181
182 #endif /* HW_THERMO_H */