tempdrv.c File Reference
TEMPDRV API implementation.
- Version
- 5.4.0
License
(C) Copyright 2014 Silicon Labs, www.silabs.com
Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
- The origin of this software must not be misrepresented; you must not claim that you wrote the original software.
- Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- This notice may not be removed or altered from any source distribution.
DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no obligation to support this Software. Silicon Labs is providing the Software "AS IS", with no express or implied warranties of any kind, including, but not limited to, any implied warranties of merchantability or fitness for any particular purpose or warranties against infringement of any proprietary rights of a third party.
Silicon Labs will not be liable for any consequential, incidental, or special damages, or any other relief, or for any claim by any third party, arising from your use of this Software.
       Definition in file
       
        tempdrv.c
       
       .
      
       #include "
       
        em_device.h
       
       "
      
      
       #include "
       
        em_system.h
       
       "
      
      
       #include "
       
        em_emu.h
       
       "
      
      
       #include "string.h"
      
      
       #include "
       
        tempdrv.h
       
       "
      
      
| Data Structures | |
| struct | TEMPDRV_CallbackSet_t | 
| Typedefs | |
| typedef enum ErrataState | ErrataState_t | 
| Enumerations | |
| enum | ErrataState
         
         { ERRATA_LOW = 0, ERRATA_MID = 1, ERRATA_HIGH = 2 } | 
| Functions | |
| static Ecode_t | addCallback ( TEMPDRV_CallbackSet_t *set, int8_t temp, TEMPDRV_Callback_t callback) | 
| Attempt to add a callback to a set. | |
| static bool | checkForDuplicates ( TEMPDRV_CallbackSet_t *set, int8_t temp) | 
| Check if another callback has registered the same temperature. | |
| static uint8_t | convertToEmu (int8_t temp) | 
| Convert a temperature in °C to an EMU sensor value. | |
| static int8_t | convertToTemp (uint8_t emu) | 
| Convert EMU value to degrees Celsius. | |
| static void | disableInterrupts (void) | 
| Turn off and clear EMU temperature related interrupts. | |
| void | EMU_IRQHandler (void) | 
| EMU Interrupt Handler. | |
| static void | errataCallback (int8_t temp, TEMPDRV_LimitType_t limit) | 
| Errata Callback. | |
| static void | errataInit (void) | 
| Errata Initialization. | |
| static void | errataStateUpdate (int8_t temp) | 
| Errata State Update. | |
| static int8_t | findCallbackSpace ( TEMPDRV_CallbackSet_t *set) | 
| Find an empty spot for callback in set. | |
| static bool | removeCallback ( TEMPDRV_CallbackSet_t *set, TEMPDRV_Callback_t callback) | 
| Remove a callback from the set. | |
| Ecode_t | TEMPDRV_DeInit (void) | 
| De-initialize the TEMP driver. | |
| Ecode_t | TEMPDRV_Enable (bool enable) | 
| Enable or disable the TEMP driver. | |
| uint8_t | TEMPDRV_GetActiveCallbacks ( TEMPDRV_LimitType_t limit) | 
| Get the number of active callbacks for a limit. | |
| int8_t | TEMPDRV_GetTemp (void) | 
| Get the current temperature. | |
| Ecode_t | TEMPDRV_Init (void) | 
| Initialize the TEMP driver. | |
| void | TEMPDRV_IRQHandler (void) | 
| TEMPDRV Interrupt Handler. | |
| Ecode_t | TEMPDRV_RegisterCallback (int8_t temp, TEMPDRV_LimitType_t limit, TEMPDRV_Callback_t callback) | 
| Register a callback in the TEMP driver. | |
| Ecode_t | TEMPDRV_UnregisterCallback ( TEMPDRV_Callback_t callback) | 
| Unregister a callback in the TEMP driver. | |
| static void | updateInterrupts (void) | 
| Update interrupts based on active callbacks. | |
| Variables | |
| static int32_t | calibrationEMU | 
| static int32_t | calibrationTEMP | 
| static TEMPDRV_CallbackSet_t | errataHighTemp [3] | 
| static TEMPDRV_CallbackSet_t | errataLowTemp [3] | 
| static uint8_t | fallbackEMU = 0x90 | 
| static uint8_t | fallbackTEMP = 25 | 
| static TEMPDRV_CallbackSet_t * | highCallback | 
| static TEMPDRV_CallbackSet_t * | lowCallback | 
| static TEMPDRV_CallbackSet_t | nullCallback = { NULL, 0 } | 
| static bool | TEMPDRV_EnableState = false | 
| static bool | TEMPDRV_InitState = false | 
| static TEMPDRV_CallbackSet_t | tempdrvHighCallbacks [TEMPDRV_CALLBACK_DEPTH] | 
| static TEMPDRV_CallbackSet_t | tempdrvLowCallbacks [TEMPDRV_CALLBACK_DEPTH] | 
Enumeration Type Documentation
| enum ErrataState | 
Function Documentation
| 
 | static | 
Attempt to add a callback to a set.
- Parameters
- 
         [in] setCallback set to add callback to [in] tempTemperature to register callback at [in] callbackCallback function 
- Returns
- 
         - ECODE_EMDRV_TEMPDRV_OK on success.
- ECODE_EMDRV_TEMPDRV_NO_SPACE if there is no space left for callbacks.
 
        Definition at line
        
         297
        
        of file
        
         tempdrv.c
        
        .
       
References TEMPDRV_CallbackSet_t::callback , convertToEmu() , ECODE_EMDRV_TEMPDRV_NO_SPACE , ECODE_EMDRV_TEMPDRV_OK , findCallbackSpace() , TEMPDRV_CallbackSet_t::temp , and updateInterrupts() .
Referenced by TEMPDRV_RegisterCallback() .
| 
 | static | 
Check if another callback has registered the same temperature.
- Parameters
- 
         [in] setCallback set to search [in] tempTemperature to match 
- Returns
- 
         trueif a duplicate is found,falseif no duplicates is found.
        Definition at line
        
         353
        
        of file
        
         tempdrv.c
        
        .
       
References convertToEmu() .
Referenced by TEMPDRV_RegisterCallback() .
| 
 | static | 
Convert a temperature in °C to an EMU sensor value.
- Parameters
- 
         [in] tempTemperature to convert in degrees Celsius 
- Returns
- EMU temperature sensor value that represents the given temperature
        Definition at line
        
         403
        
        of file
        
         tempdrv.c
        
        .
       
Referenced by addCallback() , checkForDuplicates() , and errataInit() .
| 
 | static | 
Convert EMU value to degrees Celsius.
- Parameters
- 
         [in] emuEMU value to convert 
- Returns
- temperature in degrees Celsius
        Definition at line
        
         380
        
        of file
        
         tempdrv.c
        
        .
       
Referenced by TEMPDRV_GetTemp() .
| 
 | static | 
Errata Callback.
This function is called by the TEMPDRV_IRQHandler and will change the state depending on the current temperature.
        Definition at line
        
         159
        
        of file
        
         tempdrv.c
        
        .
       
References errataStateUpdate() .
Referenced by errataInit() .
| 
 | static | 
Errata Initialization.
Initialize the temperature thresholds based on calibration values and initializes the errata fix based on the current temperature.
        Definition at line
        
         219
        
        of file
        
         tempdrv.c
        
        .
       
References TEMPDRV_CallbackSet_t::callback , convertToEmu() , ERRATA_HIGH , ERRATA_LOW , ERRATA_MID , errataCallback() , errataStateUpdate() , SYSTEM_ChipRevision_TypeDef::major , SYSTEM_ChipRevisionGet() , TEMPDRV_CallbackSet_t::temp , and TEMPDRV_GetTemp() .
Referenced by TEMPDRV_Init() .
| 
 | static | 
Errata State Update.
Updates registers based on the current temperature
        Definition at line
        
         172
        
        of file
        
         tempdrv.c
        
        .
       
References EMU , EMU_LOCK_LOCKKEY_LOCK , EMU_LOCK_LOCKKEY_LOCKED , EMU_LOCK_LOCKKEY_UNLOCK , EMU_SetBiasMode() , ERRATA_HIGH , ERRATA_LOW , and ERRATA_MID .
Referenced by errataCallback() , and errataInit() .
| 
 | static | 
Find an empty spot for callback in set.
- Parameters
- 
         [in] setCallback set to search 
- Returns
- index of empty space if found, -1 if none
        Definition at line
        
         267
        
        of file
        
         tempdrv.c
        
        .
       
Referenced by addCallback() .
| 
 | static | 
Remove a callback from the set.
- Parameters
- 
         [in] setCallback set to remove callback from [in] callbackCallback function 
- Returns
- 
         trueon success andfalseif the callback was not found.
        Definition at line
        
         324
        
        of file
        
         tempdrv.c
        
        .
       
References TEMPDRV_CallbackSet_t::callback , TEMPDRV_CallbackSet_t::temp , and updateInterrupts() .
Referenced by TEMPDRV_UnregisterCallback() .
| 
 | static | 
Update interrupts based on active callbacks.
There can only be two temperature thresholds active in the EMU sensor at a single point in time. One threshold for increasing temperature and one threshold for decreasing temperature. The responsibility of this function is to always select which temperature thresholds that should be activated in the EMU sensor at any given time.
        Definition at line
        
         436
        
        of file
        
         tempdrv.c
        
        .
       
References _EMU_TEMPLIMITS_TEMPHIGH_MASK , _EMU_TEMPLIMITS_TEMPHIGH_SHIFT , _EMU_TEMPLIMITS_TEMPLOW_MASK , _EMU_TEMPLIMITS_TEMPLOW_SHIFT , TEMPDRV_CallbackSet_t::callback , EMU , EMU_IEN_TEMPHIGH , EMU_IEN_TEMPLOW , EMU_IntDisable() , EMU_IntEnable() , and TEMPDRV_CallbackSet_t::temp .
Referenced by addCallback() , removeCallback() , TEMPDRV_Enable() , TEMPDRV_Init() , and TEMPDRV_IRQHandler() .