comparison src/cs/drivers/drv_app/pwr/pwr_api.c @ 0:92470e5d0b9e

src: partial import from FC Selenite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 15 May 2020 01:28:16 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:92470e5d0b9e
1 /*******************************************************************************
2 *
3 * pwr_api.c
4 *
5 * Purpose: This file contains functions that can be accessed by any SWE
6 * to use power management services.
7 *
8 * Author Candice Bazanegue (c-brille@ti.com)
9 *
10 *
11 * (C) Texas Instruments 2001
12 *
13 ******************************************************************************/
14
15 #include "rv/rv_defined_swe.h" // for RVM_PWR_SWE
16
17 #ifdef RVM_PWR_SWE
18
19 #include "rvm/rvm_use_id_list.h"
20 #include "spi/spi_api.h"
21 #include "spi/spi_env.h"
22 #include "pwr/pwr_env.h"
23 #include "pwr/pwr_cust.h"
24 #include "pwr/pwr_messages.h"
25 #include "pwr/pwr_messages_i.h"
26
27 /* Define a pointer to the PWR Environment control block. */
28 extern T_PWR_ENV_CTRL_BLK *pwr_env_ctrl_blk;
29
30
31 /*******************************************************************************
32 **
33 ** Function power_info_register
34 **
35 ** Description Function called by the MMI to enable (or disable) the receipt
36 ** of several events related to the charging process or the
37 ** discharge levels.
38 **
39 **
40 *******************************************************************************/
41 T_POWER_RET power_info_register(BOOLEAN info_enable, T_RV_RETURN return_path)
42 {
43 if (((pwr_env_ctrl_blk->power_info.return_path.callback_func)!= NULL) ||
44 (pwr_env_ctrl_blk->power_info.return_path.addr_id != RVF_INVALID_ADDR_ID))
45 {
46 rvf_send_trace("power_info_register : info already registered, performs another registration",
47 76,
48 NULL_PARAM,
49 RV_TRACE_LEVEL_DEBUG_HIGH,
50 PWR_USE_ID);
51 }
52 pwr_env_ctrl_blk->power_info.info_enable = info_enable;
53 pwr_env_ctrl_blk->power_info.return_path.addr_id = return_path.addr_id;
54 pwr_env_ctrl_blk->power_info.return_path.callback_func = return_path.callback_func;
55
56 return (POWER_OK);
57
58 }
59
60
61
62 /*******************************************************************************
63 **
64 ** Function power_alert_register
65 **
66 ** Description Function called by the MMI to configure the threshold of
67 ** remaining energy in the battery, under which the MMI will
68 ** receive low battery alerts.
69 **
70 **
71 *******************************************************************************/
72 T_POWER_RET power_alert_register(T_PWR_PERCENT remain_capa_threshold,
73 T_RV_RETURN return_path)
74 {
75
76 if (((pwr_env_ctrl_blk->power_alert.return_path.callback_func)!= NULL) ||
77 (pwr_env_ctrl_blk->power_alert.return_path.addr_id != RVF_INVALID_ADDR_ID))
78 {
79 rvf_send_trace("power_alert_register : info already registered, performs another registration",
80 77,
81 NULL_PARAM,
82 RV_TRACE_LEVEL_DEBUG_HIGH,
83 PWR_USE_ID);
84 }
85 pwr_env_ctrl_blk->power_alert.remain_capa_threshold = remain_capa_threshold;
86 pwr_env_ctrl_blk->power_alert.return_path.addr_id = return_path.addr_id;
87 pwr_env_ctrl_blk->power_alert.return_path.callback_func = return_path.callback_func;
88
89 return (POWER_OK);
90
91 }
92
93
94 /*******************************************************************************
95 **
96 ** Function power_emergency_register
97 **
98 ** Description Function called by the MMI to define the call-back function
99 ** which will be called in case of emergency switch OFF.
100 **
101 **
102 *******************************************************************************/
103 T_POWER_RET power_emergency_register(T_RV_RETURN return_path)
104 {
105
106 if (((pwr_env_ctrl_blk->power_emergency.callback_func)!= NULL) ||
107 (pwr_env_ctrl_blk->power_emergency.addr_id != RVF_INVALID_ADDR_ID))
108 {
109 rvf_send_trace("power_emergency_register : info already registered, performs another registration",
110 80,
111 NULL_PARAM,
112 RV_TRACE_LEVEL_DEBUG_HIGH,
113 PWR_USE_ID);
114 }
115 pwr_env_ctrl_blk->power_emergency.addr_id = return_path.addr_id;
116 pwr_env_ctrl_blk->power_emergency.callback_func = return_path.callback_func;
117
118 return (POWER_OK);
119
120 }
121
122
123
124 /*******************************************************************************
125 **
126 ** Function pwr_callback_func
127 **
128 ** Description
129 **
130 **
131 **
132 *******************************************************************************/
133 void pwr_callback_func(void *ptr)
134 {
135 T_PWR_CHARGING_STATE charge_started;
136
137
138 /* Charge started? */
139 charge_started = pwr_env_ctrl_blk->charging_state;
140
141 if (charge_started == CHARGE_STOPPED)
142 {
143 /* Ask for battery temperature measurement */
144 pwr_get_battery_temperature();
145 }
146
147 else if ((charge_started == CI_CHARGE_STARTED) ||
148 (charge_started == CV_CHARGE_STARTED))
149 {
150 /* The battery temperature has been measured during the charge */
151 pwr_get_bat_info();
152 }
153
154 }
155
156
157
158
159 /*******************************************************************************
160 **
161 ** Function pwr_get_bat_info
162 **
163 ** Description
164 **
165 **
166 *******************************************************************************/
167 void pwr_get_bat_info(void)
168 {
169 UINT16 bat_voltage, bat_madc_voltage;
170 UINT16 charger_current, bat_madc_current;
171 UINT16 status;
172 BOOLEAN charger_plugged;
173 T_PWR_CHARGING_STATE charge_started;
174 T_PWR_PERCENT remain_capacity;
175 INT16 bat_temperature;
176
177
178 /* Voltage and current */
179 /* Read the conversion results in the analog device registers */
180 bat_madc_voltage = ABB_Read_Register_on_page(PAGE0, VBATREG);
181 bat_madc_current = ABB_Read_Register_on_page(PAGE0, ICHGREG);
182
183 bat_voltage = pwr_adc_to_mvolt(bat_madc_voltage);
184 charger_current = pwr_adc_to_mA(bat_madc_current);
185
186 /* Remaining capacity in the battery */
187 remain_capacity = pwr_get_capacity_vs_voltage(bat_voltage);
188
189 /* Charger plugged? */
190 status = ABB_Read_Status();
191 if (status & CHGPRES)
192 {
193 charger_plugged = TRUE;
194 }
195 else
196 {
197 charger_plugged = FALSE;
198 }
199
200 /* Charge started? */
201 charge_started = pwr_env_ctrl_blk->charging_state;
202
203 /* The battery temperature is already measured during the charge */
204 /* Use the last result */
205 bat_temperature = pwr_env_ctrl_blk->bat_celsius_temp;
206
207 /* Send the results to the upper layer */
208 pwr_send_battery_info(bat_voltage, bat_temperature, charger_current,
209 charger_plugged, charge_started,
210 remain_capacity);
211 }
212
213
214
215
216 /*******************************************************************************
217 **
218 ** Function power_battery_information
219 **
220 ** Description Function called by the MMI to get information concerning
221 ** the battery.
222 **
223 **
224 *******************************************************************************/
225 T_POWER_RET power_battery_information(void)
226 {
227 T_RV_RET spi_return;
228
229 spi_return = pwr_spi_battery_info(pwr_callback_func);
230 if (spi_return != RV_OK)
231 {
232 return (POWER_ERROR);
233 }
234
235 return (POWER_OK);
236 }
237
238 #endif /* #ifdef RVM_PWR_SWE */
239
240