FreeCalypso > hg > freecalypso-citrine
comparison g23m-glue/gdi/power.c @ 0:75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Thu, 09 Jun 2016 00:02:41 +0000 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:75a11d740a02 |
|---|---|
| 1 /* | |
| 2 +----------------------------------------------------------------------------- | |
| 3 | Project : GSM-PS | |
| 4 | Modul : DRV_PWR | |
| 5 +----------------------------------------------------------------------------- | |
| 6 | Copyright 2002 Texas Instruments Berlin, AG | |
| 7 | All rights reserved. | |
| 8 | | |
| 9 | This file is confidential and a trade secret of Texas | |
| 10 | Instruments Berlin, AG | |
| 11 | The receipt of or possession of this file does not convey | |
| 12 | any rights to reproduce or disclose its contents or to | |
| 13 | manufacture, use, or sell anything it may describe, in | |
| 14 | whole, or in part, without the specific written consent of | |
| 15 | Texas Instruments Berlin, AG. | |
| 16 +----------------------------------------------------------------------------- | |
| 17 | Purpose : This Module defines the power management device driver | |
| 18 | for the G23 protocol stack. | |
| 19 | | |
| 20 | This driver is used to control all power related functions | |
| 21 | such as charger and battery control. The driver does support | |
| 22 | multiple devices and therefore no open and close functionality | |
| 23 | is supported. The driver can be configured to signal different | |
| 24 | state transitions, for example battery level has reached the | |
| 25 | "battery low" level. This is done by setting an OS signal or | |
| 26 | calling a specified call-back function. | |
| 27 +----------------------------------------------------------------------------- | |
| 28 */ | |
| 29 | |
| 30 #ifndef DRV_PWR_C | |
| 31 #define DRV_PWR_C | |
| 32 #endif | |
| 33 | |
| 34 #include "config.h" | |
| 35 #include "fixedconf.h" | |
| 36 #include "condat-features.h" | |
| 37 | |
| 38 /*==== INCLUDES ===================================================*/ | |
| 39 #if defined (NEW_FRAME) | |
| 40 | |
| 41 #include <string.h> | |
| 42 #include "typedefs.h" | |
| 43 #include "gdi.h" | |
| 44 #include "pwr.h" | |
| 45 | |
| 46 #else | |
| 47 | |
| 48 #include <string.h> | |
| 49 #include "stddefs.h" | |
| 50 #include "gdi.h" | |
| 51 #include "pwr.h" | |
| 52 | |
| 53 #endif | |
| 54 /*==== EXPORT =====================================================*/ | |
| 55 #if defined (_TMS470_NOT_YET) | |
| 56 EXTERN void BAT_Init (void (*pwr_batlevel)(UBYTE level), | |
| 57 void (*pwr_batstatus)(UBYTE status)); | |
| 58 #else | |
| 59 LOCAL void BAT_Init (void (*pwr_batlevel)(UBYTE level), | |
| 60 void (*pwr_batstatus)(UBYTE status)); | |
| 61 #endif | |
| 62 | |
| 63 LOCAL void pwr_batlevel (UBYTE level); | |
| 64 LOCAL void pwr_batstatus (UBYTE status); | |
| 65 | |
| 66 /*==== VARIABLES ==================================================*/ | |
| 67 drv_SignalCB_Type pwr_signal_callback = NULL; | |
| 68 UBYTE pwr_act_level; | |
| 69 UBYTE pwr_act_status; | |
| 70 pwr_DCB_Type pwr_DCB; | |
| 71 pwr_Status_Type pwr_Status; | |
| 72 /*==== VARIABLES ==================================================*/ | |
| 73 | |
| 74 /*==== FUNCTIONS ==================================================*/ | |
| 75 | |
| 76 /*==== CONSTANTS ==================================================*/ | |
| 77 /* | |
| 78 +--------------------------------------------------------------------+ | |
| 79 | PROJECT : GSM-PS (6103) MODULE : DRV_PWR | | |
| 80 | STATE : code ROUTINE : pwr_Init | | |
| 81 +--------------------------------------------------------------------+ | |
| 82 | |
| 83 PURPOSE : The function initializes the driverīs internal data. | |
| 84 The function returns DRV_OK in case of a successful | |
| 85 completition. The function returns DRV_INITIALIZED if | |
| 86 the driver has already been initialized and is ready to | |
| 87 be used or is already in use. In case of an initialization | |
| 88 failure, which means the that the driver cannot be used, | |
| 89 the function returns DRV_INITFAILURE. | |
| 90 | |
| 91 */ | |
| 92 | |
| 93 GLOBAL UBYTE pwr_Init (drv_SignalCB_Type in_SignalCBPtr) | |
| 94 { | |
| 95 pwr_signal_callback = in_SignalCBPtr; /* store call-back function */ | |
| 96 pwr_DCB.RangeMin = 10; /* 10 Percent */ | |
| 97 pwr_DCB.RangeMax = 100; /* 100 Percent */ | |
| 98 pwr_DCB.Steps = 4; /* 4 Steps */ | |
| 99 | |
| 100 pwr_Status.Status = 0; | |
| 101 pwr_Status.BatteryLevel = 0; | |
| 102 pwr_Status.ChargeLevel = 0; | |
| 103 | |
| 104 /* | |
| 105 * Initialise TI driver with internal callback functions | |
| 106 * | |
| 107 * pwr_batlevel is called after change of battery level | |
| 108 * pwr_batstatus is called after change of external or charger | |
| 109 * unit | |
| 110 * | |
| 111 */ | |
| 112 BAT_Init (pwr_batlevel, pwr_batstatus); | |
| 113 | |
| 114 return DRV_OK; | |
| 115 } | |
| 116 | |
| 117 /* | |
| 118 +--------------------------------------------------------------------+ | |
| 119 | PROJECT : GSM-PS (6103) MODULE : DRV_PWR | | |
| 120 | STATE : code ROUTINE : pwr_Exit | | |
| 121 +--------------------------------------------------------------------+ | |
| 122 | |
| 123 PURPOSE : The function is used to indicate PWR that the driver | |
| 124 and its functionality isnīt needed anymore. | |
| 125 | |
| 126 */ | |
| 127 | |
| 128 GLOBAL void pwr_Exit (void) | |
| 129 { | |
| 130 pwr_signal_callback = NULL; | |
| 131 } | |
| 132 | |
| 133 /* | |
| 134 +--------------------------------------------------------------------+ | |
| 135 | PROJECT : GSM-PS (6103) MODULE : DRV_PWR | | |
| 136 | STATE : code ROUTINE : pwr_SetSignal | | |
| 137 +--------------------------------------------------------------------+ | |
| 138 | |
| 139 PURPOSE : This function is used to define a single signal or multiple | |
| 140 signals that is/are indicated to the process when the event | |
| 141 identified in the signal information data type as SignalType | |
| 142 occurs. | |
| 143 To remove a signal, call the function pwr_ResetSignal(). | |
| 144 If one of the parameters of the signal information data is | |
| 145 invalid, the function returns DRV_INVALID_PARAMS. | |
| 146 If no signal call-back function has been defined at the | |
| 147 time of initilization the driver returns DRV_SIGFCT_NOTAVAILABLE. | |
| 148 | |
| 149 */ | |
| 150 | |
| 151 GLOBAL UBYTE pwr_SetSignal (drv_SignalID_Type * in_SignalIDPtr) | |
| 152 { | |
| 153 return DRV_OK; | |
| 154 } | |
| 155 | |
| 156 /* | |
| 157 +--------------------------------------------------------------------+ | |
| 158 | PROJECT : GSM-PS (6103) MODULE : DRV_PWR | | |
| 159 | STATE : code ROUTINE : pwr_ResetSignal | | |
| 160 +--------------------------------------------------------------------+ | |
| 161 | |
| 162 PURPOSE : The function is used to remove a single or multiple signals | |
| 163 that has previously been set. The signals that are removed | |
| 164 are identified by the Signal Information Data element called | |
| 165 SignalType. All other elements of the Signal Information Data | |
| 166 must be identical to the signal(s) that is/are to be | |
| 167 removed. If the SignalID provided can not be found, the | |
| 168 function returns DRV_INVALID_PARAMS. | |
| 169 If no signal call-back function has beed defined at the | |
| 170 time of initialization, the driver returns DRV_SIGFCT_NOTAVAILABLE. | |
| 171 | |
| 172 */ | |
| 173 | |
| 174 GLOBAL UBYTE pwr_ResetSignal (drv_SignalID_Type * in_SignalIDPtr) | |
| 175 { | |
| 176 return DRV_OK; | |
| 177 } | |
| 178 | |
| 179 /* | |
| 180 +--------------------------------------------------------------------+ | |
| 181 | PROJECT : GSM-PS (6103) MODULE : DRV_PWR | | |
| 182 | STATE : code ROUTINE : pwr_SetConfig | | |
| 183 +--------------------------------------------------------------------+ | |
| 184 | |
| 185 PURPOSE : This function is used to configure the driver. | |
| 186 If any value of this configuration is out of range or | |
| 187 invalid in combination with any other value of the | |
| 188 configuration, the function returns DRV_INVALID_PARAMS. | |
| 189 Call the pwr_GetConfig() function to retrieve the drivers | |
| 190 configuration. | |
| 191 | |
| 192 */ | |
| 193 | |
| 194 GLOBAL UBYTE pwr_SetConfig (pwr_DCB_Type * in_DCBPtr) | |
| 195 { | |
| 196 memcpy (&pwr_DCB, in_DCBPtr, sizeof (pwr_DCB_Type)); | |
| 197 pwr_Status.BatteryLevel = 0; | |
| 198 pwr_Status.ChargeLevel = 0; | |
| 199 | |
| 200 return DRV_OK; | |
| 201 } | |
| 202 | |
| 203 /* | |
| 204 +--------------------------------------------------------------------+ | |
| 205 | PROJECT : GSM-PS (6103) MODULE : DRV_PWR | | |
| 206 | STATE : code ROUTINE : pwr_GetConfig | | |
| 207 +--------------------------------------------------------------------+ | |
| 208 | |
| 209 PURPOSE : The function is used to retrieve the configuration of | |
| 210 the driver. The configuration is returned in the driver | |
| 211 control block to which the pointer out_DCBPtr points. | |
| 212 If the driver is not configured, the function returns | |
| 213 DRV_NOTCONFIGURED. | |
| 214 Call the pwr_SetConfig() function to configure the driver. | |
| 215 | |
| 216 */ | |
| 217 | |
| 218 GLOBAL UBYTE pwr_GetConfig (pwr_DCB_Type * out_DCBPtr) | |
| 219 { | |
| 220 return DRV_OK; | |
| 221 } | |
| 222 | |
| 223 /* | |
| 224 +--------------------------------------------------------------------+ | |
| 225 | PROJECT : GSM-PS (6103) MODULE : DRV_PWR | | |
| 226 | STATE : code ROUTINE : pwr_GetStatus | | |
| 227 +--------------------------------------------------------------------+ | |
| 228 | |
| 229 PURPOSE : This function is used to retrieve the status of the driver | |
| 230 respectively the power unit. | |
| 231 In case of a successful completion the driver returns | |
| 232 DRV_OK and the current status of the driver in the buffer | |
| 233 out_StatusPtr points to. | |
| 234 In case the driver is not configured yet, it returns | |
| 235 DRV_NOTCONFIGURED. In this case the contents of the | |
| 236 buffer out_StatusPtr is invalid. | |
| 237 In case out_StatusPtr equals NULL the driver returns | |
| 238 DRV_INVALID_PARAMS. | |
| 239 | |
| 240 */ | |
| 241 | |
| 242 GLOBAL UBYTE pwr_GetStatus (pwr_Status_Type * out_StatusPtr) | |
| 243 { | |
| 244 if ( out_StatusPtr EQ NULL ) | |
| 245 { | |
| 246 return DRV_INVALID_PARAMS; | |
| 247 } | |
| 248 else | |
| 249 { | |
| 250 out_StatusPtr->Status = pwr_Status.Status; | |
| 251 out_StatusPtr->BatteryLevel = pwr_Status.BatteryLevel; | |
| 252 out_StatusPtr->ChargeLevel = pwr_Status.ChargeLevel; | |
| 253 } | |
| 254 | |
| 255 return DRV_OK; | |
| 256 } | |
| 257 | |
| 258 | |
| 259 | |
| 260 /* | |
| 261 +--------------------------------------------------------------------+ | |
| 262 | PROJECT : GSM-PS (6103) MODULE : DRV_PWR | | |
| 263 | STATE : code ROUTINE : pwr_BatLevel | | |
| 264 +--------------------------------------------------------------------+ | |
| 265 | |
| 266 PURPOSE : This function is called by the low level driver after | |
| 267 change of battery level. | |
| 268 */ | |
| 269 | |
| 270 LOCAL void pwr_batlevel (UBYTE level) | |
| 271 { | |
| 272 UBYTE calculated_level; | |
| 273 drv_SignalID_Type signal_params; | |
| 274 | |
| 275 pwr_Status.ChargeLevel = level; | |
| 276 | |
| 277 if (level <= pwr_DCB.RangeMin) | |
| 278 calculated_level = 0; | |
| 279 if (level >= pwr_DCB.RangeMax) | |
| 280 calculated_level = pwr_DCB.Steps +1; | |
| 281 if (level > pwr_DCB.RangeMin AND | |
| 282 level < pwr_DCB.RangeMax) | |
| 283 { | |
| 284 level -= pwr_DCB.RangeMin; | |
| 285 calculated_level = ((level * pwr_DCB.Steps) / | |
| 286 (pwr_DCB.RangeMax - pwr_DCB.RangeMin))+1; | |
| 287 } | |
| 288 | |
| 289 if (calculated_level EQ pwr_Status.BatteryLevel) | |
| 290 return; | |
| 291 | |
| 292 signal_params.SignalType = PWR_SIGTYPE_BATLEVEL; | |
| 293 #if defined (NEW_FRAME) | |
| 294 signal_params.UserData = (void*)&pwr_Status; | |
| 295 #else | |
| 296 signal_params.SignalValue = 0; | |
| 297 signal_params.UserData = (ULONG)&pwr_Status; | |
| 298 #endif | |
| 299 pwr_Status.BatteryLevel = calculated_level; | |
| 300 | |
| 301 if (pwr_signal_callback NEQ NULL) | |
| 302 (*pwr_signal_callback)(&signal_params); | |
| 303 } | |
| 304 | |
| 305 /* | |
| 306 +--------------------------------------------------------------------+ | |
| 307 | PROJECT : GSM-PS (6103) MODULE : DRV_PWR | | |
| 308 | STATE : code ROUTINE : pwr_batstatus | | |
| 309 +--------------------------------------------------------------------+ | |
| 310 | |
| 311 PURPOSE : This function is called by the low level driver after | |
| 312 detecting a status change. | |
| 313 */ | |
| 314 | |
| 315 LOCAL void pwr_batstatus (UBYTE status) | |
| 316 { | |
| 317 } | |
| 318 | |
| 319 /******************************************************************* | |
| 320 * * | |
| 321 * PART II: Simulation for Windows * | |
| 322 * * | |
| 323 *******************************************************************/ | |
| 324 | |
| 325 /*#if defined (WIN32)*/ | |
| 326 /* | |
| 327 * Dummies for driver calls | |
| 328 */ | |
| 329 LOCAL void BAT_Init (void (*pwr_batlevel)(UBYTE), | |
| 330 void (*pwr_batstatus)(UBYTE)) | |
| 331 { | |
| 332 } | |
| 333 | |
| 334 /*#endif*/ | |
| 335 | |
| 336 /* | |
| 337 +--------------------------------------------------------------------+ | |
| 338 | PROJECT : GSM-PS (6103) MODULE : DRV_PWR | | |
| 339 | STATE : code ROUTINE : pwr_PowerOffMobile | | |
| 340 +--------------------------------------------------------------------+ | |
| 341 | |
| 342 PURPOSE : This function is switching off the mobile | |
| 343 */ | |
| 344 | |
| 345 GLOBAL UBYTE pwr_PowerOffMobile (void) | |
| 346 { | |
| 347 | |
| 348 /* power off HW is not applicable in simulation */ | |
| 349 | |
| 350 | |
| 351 #if !defined (WIN32) | |
| 352 | |
| 353 /* power-off the board / HW */ | |
| 354 ABB_Power_Off(); | |
| 355 | |
| 356 //#endif /* _TARGET_ */ | |
| 357 #endif /* _TMS470 */ | |
| 358 | |
| 359 return 1; | |
| 360 } |
