comparison src/cs/drivers/drv_app/lcc/lcc_env.c @ 0:4e78acac3d88

src/{condat,cs,gpf,nucleus}: import from Selenite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 16 Oct 2020 06:23:26 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:4e78acac3d88
1 /******************************************************************************
2 * Power Task (pwr)
3 * Design and coding by Svend Kristian Lindholm, skl@ti.com
4 *
5 * Environment (Riviera) functions
6 *
7 * $Id: pwr_env.c 1.2 Wed, 20 Aug 2003 12:54:50 +0200 skl $
8 *
9 ******************************************************************************/
10
11 #include "lcc/lcc.h"
12 #include "lcc/lcc_env.h"
13 #include "lcc/lcc_task.h"
14 #include "lcc/lcc_trace.h"
15 #include "lcc/lcc_handle_timers.h"
16
17 #include "rv/rv_defined_swe.h"
18 #include "rvm/rvm_priorities.h"
19 #include "rvm/rvm_api.h"
20 #include "rvm/rvm_use_id_list.h"
21
22 #include <string.h>
23 #include "abb/abb.h"
24
25 /* Define a pointer to the PWR environment control block */
26 T_PWR_CTRL_BLOCK *pwr_ctrl = NULL;
27
28 /* Define a pointer to the PWR configuration block */
29 T_PWR_CFG_BLOCK *pwr_cfg = NULL;
30
31 // Function Prototypes
32 T_RVM_RETURN pwr_init(void);
33 T_RVM_RETURN pwr_start(void);
34 T_RVM_RETURN pwr_stop(T_RV_HDR *msg);
35 T_RVM_RETURN pwr_kill (void);
36
37 void ttr(unsigned trmask, char *format, ...);
38 void str(unsigned mask, char *string);
39
40
41 T_RVM_RETURN pwr_task_init (void);
42
43 /* Define global pointer to the error function */
44 static T_RVM_RETURN (*pwr_error_ft) (T_RVM_NAME swe_name,
45 T_RVM_RETURN error_cause,
46 T_RVM_ERROR_TYPE error_type,
47 T_RVM_STRING error_msg);
48
49 // Handle timers
50 #include "lcc/lcc_handle_timers.c"
51
52 T_RVM_RETURN lcc_get_info (T_RVM_INFO_SWE *infoSWE)
53 {
54 #if 1
55 ttw(ttr(TTrEnv, "lcc_get_info(%d):" NL, 0));
56 #endif
57 /* SWE info */
58
59 /* TYPE3 : Blocking by using FFS */
60 infoSWE->swe_type = RVM_SWE_TYPE_3;
61 infoSWE->type_info.type3.swe_use_id = LCC_USE_ID;
62 infoSWE->type_info.type3.stack_size = LCC_STACK_SIZE;
63 infoSWE->type_info.type3.priority = RVM_LCC_TASK_PRIORITY;
64 infoSWE->type_info.type3.version = LCC_TASK_VERSION;
65
66 memcpy( infoSWE->type_info.type3.swe_name, "LCC", sizeof("LCC") );
67
68 /* Set the return path */
69 infoSWE->type_info.type3.return_path.callback_func = NULL;
70 infoSWE->type_info.type3.return_path.addr_id = 0;
71
72 /* memory bank info */
73 infoSWE->type_info.type3.nb_mem_bank = 1;
74
75 memcpy ((UINT8 *) infoSWE->type_info.type3.mem_bank[0].bank_name, "LCC_PRIM", 9);
76 infoSWE->type_info.type3.mem_bank[0].initial_params.size = LCC_MB_PRIM_SIZE;
77 infoSWE->type_info.type3.mem_bank[0].initial_params.watermark = LCC_MB_PRIM_WATERMARK;
78
79 /* Linked SW entities : FIXME: LCC needs SPI & FFS */
80 infoSWE->type_info.type3.nb_linked_swe = 0;
81
82 /* generic functions */
83 infoSWE->type_info.type3.set_info = pwr_set_info;
84 infoSWE->type_info.type3.init = pwr_init;
85 infoSWE->type_info.type3.start = pwr_start;
86 infoSWE->type_info.type3.stop = pwr_stop;
87 infoSWE->type_info.type3.kill = pwr_kill;
88
89 return RV_OK;
90
91 }
92
93
94 T_RVM_RETURN pwr_set_info(T_RVF_ADDR_ID addr_id,
95 T_RV_RETURN return_path[],
96 T_RVF_MB_ID mbId[],
97 T_RVM_RETURN (*callBackFct) (T_RVM_NAME SWEntName,
98 T_RVM_RETURN errorCause,
99 T_RVM_ERROR_TYPE errorType,
100 T_RVM_STRING errorMsg))
101 {
102
103 T_RVF_MB_STATUS mb_status;
104
105 ttw(ttr(TTrEnv, "pwr_set_info(%d)" NL, addr_id));
106 ttw(ttr(TTrEnvLow, " mbId[0] = %d" NL, mbId[0]));
107
108 mb_status = rvf_get_buf(mbId[0],sizeof(T_PWR_CTRL_BLOCK),(void **) &pwr_ctrl);
109 if (mb_status == RVF_RED)
110 {
111 ttr(TTrFatal, "LCC FATAL: no memory: %d" NL, addr_id);
112 return (RVM_MEMORY_ERR);
113 }
114 memset(&pwr_ctrl->state, 0xBA, sizeof(T_PWR_CTRL_BLOCK));
115
116 mb_status = rvf_get_buf(mbId[0],sizeof(T_PWR_CFG_BLOCK),(void **) &pwr_cfg);
117 if (mb_status == RVF_RED)
118 {
119 ttr(TTrFatal, "LCC FATAL: no memory: %d" NL, addr_id);
120 return (RVM_MEMORY_ERR);
121 }
122 memset(&pwr_cfg->cal.i2v , 0xBA, sizeof(T_PWR_CFG_BLOCK));
123
124 /* store the pointer to the error function */
125 pwr_error_ft = callBackFct ;
126
127 /* Store the addr id */
128 pwr_ctrl->addr_id = addr_id;
129
130
131 /* Store the memory bank id */
132 pwr_ctrl->prim_id = mbId[0];
133
134 /* Battery & charging related initialisation */
135
136 // State initialisation
137 pwr_ctrl->state = CAL;
138
139 // Create timers (Initialize...)
140 pwr_create_timer(&pwr_ctrl->time_begin_T0);
141 pwr_create_timer(&pwr_ctrl->time_begin_T1);
142 pwr_create_timer(&pwr_ctrl->time_begin_T2);
143 pwr_create_timer(&pwr_ctrl->time_begin_T3);
144 pwr_create_timer(&pwr_ctrl->time_begin_T4);
145 pwr_create_timer(&pwr_ctrl->time_begin_mod_cycle);
146 pwr_create_timer(&pwr_ctrl->time_begin_mmi_rep);
147
148 /* Flags initialisation and other state related init */
149
150 // Calibration configuration file not read
151 pwr_ctrl->flag_cal_cfg_read = 0;
152
153 // Charger configuration file not read
154 pwr_ctrl->flag_chg_cfg_read = 0;
155
156 // Default configuration id used
157 pwr_cfg->data.cfg_id = '1';
158
159 // Number of battery identification measurements reported
160 pwr_ctrl->count_bat_type = 0;
161 pwr_ctrl->count_chg_type = 0;
162
163 // Precharge PRE state - Applies only for 3.2V < Vbat < 3.6V
164 pwr_ctrl->flag_prechg_started = 0;
165
166 // Charger Interrupts are disabled from the start
167 pwr_ctrl->flag_chg_int_disabled = 1;
168
169 // First time in INI state
170 pwr_ctrl->flag_ini_virgo = 0;
171
172 // Default charger type is UNREGULATED
173 // Meaning charger interrupts will not be enabled
174 pwr_cfg->chg.type = UNREGULATED;
175
176 // Unplug default is that charger is unplugged (0)
177 memset(&pwr_ctrl->chg_unplug_vec , 0x0, CONSECUTIVE_CHG_UNPLUGS);
178 pwr_ctrl->index = 0;
179
180
181 // MMI hasn't registered
182 pwr_ctrl->flag_mmi_registered = 0;
183
184 // Init of plug/unplug state machine - from default the charger is not plugged
185 pwr_ctrl->flag_chg_prev_plugged = 0;
186
187 return RV_OK;
188 }
189
190
191 T_RVM_RETURN pwr_init(void)
192 {
193 T_RVM_RETURN error;
194 // Mask off the charger interrupts (plug/unplug) - in case it was a linear charger
195 // Don't want to get killed in a vast number of interrupts...
196 ABB_Write_Register_on_page(PAGE0, ITMASK, CHARGER_IT_MSK);
197 pwr_ttr_init(0xff000000);
198 pwr_ctrl->tmask = 0xff000000;
199 ttw(ttr(TTrEnv, "pwr_init(%d)" NL, 0));
200 return RV_OK;
201 }
202
203 T_RVM_RETURN pwr_start(void)
204 {
205 T_RVM_RETURN error;
206 ttw(ttr(TTrEnv, "pwr_start(%d)" NL, 0));
207 pwr_task();
208 ttw(ttr(TTrEnv, "pwr_start(%d)" NL, 0xFF));
209 return RV_OK;
210 }
211
212 T_RVM_RETURN pwr_stop(T_RV_HDR *msg)
213 {
214 ttw(ttr(TTrEnv, "pwr_stop(%d)" NL, 0));
215 return RV_OK;
216 }
217
218 T_RVM_RETURN pwr_kill (void)
219 {
220 T_RVM_RETURN error;
221
222 ttw(ttr(TTrEnv, "pwr_kill(%d)" NL, 0));
223
224 /* free all memory buffer previously allocated */
225 rvf_free_buf ((void *) pwr_ctrl);
226 rvf_free_buf ((void *) pwr_cfg);
227 ttw(ttr(TTrEnv, "pwr_kill(%d)" NL, 0xFF));
228
229 return RV_OK;
230 }
231