# Thermal Management Service

- [API reference](https://docs.qualcomm.com/doc/80-41102-2/topic/_doxygen_rst_file__doxygen_sources_taf_therm_interface_h.html#file-taf-therm-interface-h)

Components need access to the TelAF Thermal Manager to get information about present thermal zones and cooling devices.

## IPC interfaces binding

The functions of this API are provided by the **tafThermSvc** application service.

The following example illustrates how to bind to Therm services.

bindings:
    {
        clientExe.clientComponent.taf_therm -> tafThermSvc.taf_therm
    }
    Copy to clipboard

## Get available thermal zone information

TelAF Thermal Manager Service provides APIs to know the available thermal zones on the device. TelAF Thermal Manager’s client calls [taf\_therm\_GetThermalZonesList()](https://docs.qualcomm.com/doc/80-41102-2/topic/function_a00725_1af36b2123d6c0b49853a724be7f61abcb.html#Documentationa00725_1af36b2123d6c0b49853a724be7f61abcb) to get the reference of the available thermal zones. This function returns a [taf\_therm\_ThermalZoneListRef\_t](https://docs.qualcomm.com/doc/80-41102-2/topic/typedef_a00722_1a8f2a09658a713483f11d2f591e640791.html#Documentationa00722_1a8f2a09658a713483f11d2f591e640791) that can be later used to get the information of each thermal zone, and also to delete the list reference using [taf\_therm\_DeleteThermalZoneList()](https://docs.qualcomm.com/doc/80-41102-2/topic/function_a00725_1afe7f50e7837c69c7e537ee9165142b51.html#Documentationa00725_1afe7f50e7837c69c7e537ee9165142b51).

**NOTE:**

The following APIs are supported only on SA525M devices: a. [taf\_therm\_GetTripPointTripID()](https://docs.qualcomm.com/doc/80-41102-2/topic/function_a00725_1a0c9b153506ffcd75bfe4c56cade40f45.html#Documentationa00725_1a0c9b153506ffcd75bfe4c56cade40f45) b. [taf\_therm\_GetTripPointThermalZoneID()](https://docs.qualcomm.com/doc/80-41102-2/topic/function_a00725_1acdb30d04a8b5cc6a585acd929010dbf6.html#Documentationa00725_1acdb30d04a8b5cc6a585acd929010dbf6) c. [taf\_therm\_GetBoundTripPointTripID()](https://docs.qualcomm.com/doc/80-41102-2/topic/function_a00725_1abaf828bf4b2759ea09b08c97c3637b6f.html#Documentationa00725_1abaf828bf4b2759ea09b08c97c3637b6f) d. [taf\_therm\_GetBoundTripPointThermalZoneID()](https://docs.qualcomm.com/doc/80-41102-2/topic/function_a00725_1a2cddba9e06dd5d2893c933355fd48f45.html#Documentationa00725_1a2cddba9e06dd5d2893c933355fd48f45)

le_result_t result;
    taf_therm_ThermalZoneListRef_t tZoneListRef = taf_therm_GetThermalZonesList();
    if (tZoneListRef == NULL)
        return;
    taf_therm_ThermalZoneListRef_t headTZoneListRef = tZoneListRef;
    
    taf_therm_ThermalZoneRef_t tZone = taf_therm_GetFirstThermalZone(tZoneListRef);
    uint32_t thermalZoneListSize;
    result = taf_therm_GetThermalZonesListSize(tZoneListRef, &thermalZoneListSize);
    
    while (tZone != NULL and thermalZoneListSize--)
    {
        uint32_t tripPointListSize;
        result = taf_therm_GetTripPointListSize(tZone, &tripPointListSize);
        uint32_t boundCDevListSize;
        result = taf_therm_GetBoundCoolingDeviceListSize(tZone, &boundCDevListSize);
        uint32_t tZoneid;
        result = taf_therm_GetThermalZoneID(tZone, &tZoneid);
        char thermalZoneType[TYPE_SIZE];
        memset(thermalZoneType, 0, TYPE_SIZE);
        result = taf_therm_GetThermalZoneType(tZone, thermalZoneType, sizeof(thermalZoneType));
        uint32_t currTemp;
        result = taf_therm_GetThermalZoneCurrentTemp(tZone, &currTemp);
        uint32_t passiveTemp;
        result = taf_therm_GetThermalZonePassiveTemp(tZone, &passiveTemp);
        if (tripPointListSize > 0)
        {
            taf_therm_TripPointRef_t tripPoint = taf_therm_GetFirstTripPoint(tZone);
            uint32_t listSize;
            result = taf_therm_GetTripPointListSize(tZone, &listSize);
            while (tripPoint != NULL and listSize--)
            {
                uint32_t tripID;
                result = taf_therm_GetTripPointTripID(tripPoint, &tripID);
                uint32_t tZoneID;
                result = taf_therm_GetTripPointThermalZoneID(tripPoint, &tZoneID);
                char tripType[TYPE_SIZE];
                memset(tripType, 0, TYPE_SIZE);
                taf_therm_GetTripPointType(tripPoint, tripType, sizeof(tripType));
                uint32_t threshold;
                result = taf_therm_GetTripPointThreshold(tripPoint, &threshold);
                uint32_t hysterisis;
                result = taf_therm_GetTripPointHysterisis(tripPoint, &hysterisis);
                if (listSize > 0)
                {
                    tripPoint = taf_therm_GetNextTripPoint(tZone);
                }
            }
        }
        if (boundCDevListSize > 0)
        {
            taf_therm_BoundCoolingDeviceRef_t boundCDev = taf_therm_GetFirstBoundCDev(tZone);
            uint32_t listSize;
            result = taf_therm_GetBoundCoolingDeviceListSize(tZone, &listSize);
    
            while (boundCDev != NULL and listSize--)
            {
                uint32_t coolingID;
                result = taf_therm_GetBoundCoolingId(boundCDev, &coolingID);
                uint32_t tripPointListSize;
                if (taf_therm_GetBoundTripPointListSize(boundCDev, &tripPointListSize) <= 0)
                    return;
                taf_therm_TripPointRef_t boundTripPoint = taf_therm_GetFirstBoundTripPoint(boundCDev);
                result = taf_therm_GetBoundTripPointListSize(boundCDev, &tripPointListSize);
                while (boundTripPoint != NULL and tripPointListSize--)
                {
                    uint32_t boundTripID;
                    result = taf_therm_GetBoundTripPointTripID(boundTripPoint, &boundTripID);
                    uint32_t boundTZoneID;
                    result = taf_therm_GetBoundTripPointThermalZoneID(boundTripPoint, &boundTZoneID);
                    char boundTripType[TYPE_SIZE];
                    memset(boundTripType, 0, TYPE_SIZE);
                    taf_therm_GetBoundTripPointType(boundTripPoint, boundTripType,
                    sizeof(boundTripType));
                    uint32_t boundThreshold;
                    result = taf_therm_GetBoundTripPointThreshold(boundTripPoint, &boundThreshold);
                    uint32_t boundHysterisis;
                    result = taf_therm_GetBoundTripPointHysterisis(boundTripPoint, &boundHysterisis);
                    if (tripPointListSize > 0)
                    {
                        boundTripPoint = taf_therm_GetNextBoundTripPoint(boundCDev);
                    }
                }
                if (listSize > 0)
                {
                    boundCDev = taf_therm_GetNextBoundCDev(tZone);
                }
            }
        }
        if (thermalZoneListSize > 0)
        {
            tZone = taf_therm_GetNextThermalZone(tZoneListRef);
        }
    }
    result = taf_therm_DeleteThermalZoneList(headTZoneListRef);
    Copy to clipboard

## Get available cooling devices information

TelAF Thermal Manager Service provides APIs to know the available cooling devices on the target. TelAF Thermal Manager’s client calls [taf\_therm\_GetCoolingDeviceList()](https://docs.qualcomm.com/doc/80-41102-2/topic/function_a00725_1a0560350985fd78a2d89449f7512bee13.html#Documentationa00725_1a0560350985fd78a2d89449f7512bee13) to get the cooling devices available reference. This function returns a [taf\_therm\_CoolingDeviceListRef\_t](https://docs.qualcomm.com/doc/80-41102-2/topic/typedef_a00722_1acad8c069d34f87be678935797c4198b3.html#Documentationa00722_1acad8c069d34f87be678935797c4198b3) that can be later used to get the information of each cooling device, and also to delete the list reference using [taf\_therm\_DeleteCoolingDeviceList()](https://docs.qualcomm.com/doc/80-41102-2/topic/function_a00725_1af8fddad5f1f324c00a2fd96491375eba.html#Documentationa00725_1af8fddad5f1f324c00a2fd96491375eba).

le_result_t result;
    taf_therm_CoolingDeviceListRef_t cDevListRef = taf_therm_GetCoolingDeviceList();
    
    taf_therm_CoolingDeviceListRef_t headCDevListRef = cDevListRef;
    
    taf_therm_CoolingDeviceRef_t cDev = taf_therm_GetFirstCoolingDevice(cDevListRef);
    uint32_t coolingDeviceListSize;
    result = taf_therm_GetCoolingDeviceListSize(cDevListRef, &coolingDeviceListSize);
    while (cDev != NULL and coolingDeviceListSize--)
    {
        char description[TYPE_SIZE];
        memset(description, 0, TYPE_SIZE);
        result = taf_therm_GetCDevDescription(cDev, description, sizeof(description));
        uint32_t coolingID;
        result = taf_therm_GetCDevID(cDev, &coolingID);
        uint32_t maxCooling;
        result = taf_therm_GetCDevMaxCoolingLevel(cDev, &maxCooling);
        uint32_t currCooling;
        result = taf_therm_GetCDevCurrentCoolingLevel(cDev, &currCooling);
        if (coolingDeviceListSize > 0) {
            cDev = taf_therm_GetNextCoolingDevice(cDevListRef);
        }
    }
    result = taf_therm_DeleteCoolingDeviceList(headCDevListRef);
    Copy to clipboard

## Get specified thermal zone information

TelAF Thermal Manager Service provides APIs to get information of thermal zone by name present on the device. TelAF Thermal Manager’s client calls [taf\_therm\_GetThermalZoneByName()](https://docs.qualcomm.com/doc/80-41102-2/topic/function_a00725_1aff572c5dc475812f48cb092400543a1f.html#Documentationa00725_1aff572c5dc475812f48cb092400543a1f) and provides the name of the specific thermal zone that the client wants the information about. The client gets the reference of the thermal zone, if available. This function returns a [taf\_therm\_ThermalZoneRef\_t](https://docs.qualcomm.com/doc/80-41102-2/topic/typedef_a00722_1aa756b2ade4eca37e1991f6950a237da9.html#Documentationa00722_1aa756b2ade4eca37e1991f6950a237da9) that can be later used to get the information of the thermal zone.

le_result_t result;
    taf_therm_ThermalZoneRef_t tZone = taf_therm_GetThermalZoneByName("ThermalZoneName");
    if (tZone != NULL)
    {
        uint32_t tripPointListSize;
        result = taf_therm_GetTripPointListSize(tZone, &tripPointListSize);
        uint32_t boundCDevListSize;
        result = taf_therm_GetBoundCoolingDeviceListSize(tZone, &boundCDevListSize);
        uint32_t tZoneid;
        result = taf_therm_GetThermalZoneID(tZone, &tZoneid);
        char thermalZoneType[TYPE_SIZE];
        memset(thermalZoneType, 0, TYPE_SIZE);
        result = taf_therm_GetThermalZoneType(tZone, thermalZoneType, sizeof(thermalZoneType));
        uint32_t currTemp;
        result = taf_therm_GetThermalZoneCurrentTemp(tZone, &currTemp);
        uint32_t passiveTemp;
        result = taf_therm_GetThermalZonePassiveTemp(tZone, &passiveTemp);
        if (tripPointListSize > 0)
        {
            taf_therm_TripPointRef_t tripPoint = taf_therm_GetFirstTripPoint(tZone);
            uint32_t listSize;
            result = taf_therm_GetTripPointListSize(tZone, &listSize);
            while (tripPoint != NULL and listSize--)
            {
                uint32_t tripID;
                result = taf_therm_GetTripPointTripID(tripPoint, &tripID);
                uint32_t tZoneID;
                result = taf_therm_GetTripPointThermalZoneID(tripPoint, &tZoneID);
                char tripType[TYPE_SIZE];
                memset(tripType, 0, TYPE_SIZE);
                taf_therm_GetTripPointType(tripPoint, tripType, sizeof(tripType));
                uint32_t threshold;
                result = taf_therm_GetTripPointThreshold(tripPoint, &threshold);
                uint32_t hysterisis;
                result = taf_therm_GetTripPointHysterisis(tripPoint, &hysterisis);
                if (listSize > 0)
                {
                    tripPoint = taf_therm_GetNextTripPoint(tZone);
                }
            }
        }
        if (boundCDevListSize > 0)
        {
            taf_therm_BoundCoolingDeviceRef_t boundCDev = taf_therm_GetFirstBoundCDev(tZone);
            uint32_t listSize;
            result = taf_therm_GetBoundCoolingDeviceListSize(tZone, &listSize);
    
            while (boundCDev != NULL and listSize--)
            {
                uint32_t coolingID;
                result = taf_therm_GetBoundCoolingId(boundCDev, &coolingID);
                uint32_t tripPointListSize;
                if (taf_therm_GetBoundTripPointListSize(boundCDev, &tripPointListSize) <= 0)
                    return;
                taf_therm_TripPointRef_t boundTripPoint = taf_therm_GetFirstBoundTripPoint(boundCDev);
                result = taf_therm_GetBoundTripPointListSize(boundCDev, &tripPointListSize);
                while (boundTripPoint != NULL and tripPointListSize--)
                {
                    uint32_t boundTripID;
                    result = taf_therm_GetBoundTripPointTripID(boundTripPoint, &boundTripID);
                    uint32_t boundTZoneID;
                    result = taf_therm_GetBoundTripPointThermalZoneID(boundTripPoint, &boundTZoneID);
                    char boundTripType[TYPE_SIZE];
                    memset(boundTripType, 0, TYPE_SIZE);
                    taf_therm_GetBoundTripPointType(boundTripPoint, boundTripType, sizeof(boundTripType));
                    uint32_t boundThreshold;
                    result = taf_therm_GetBoundTripPointThreshold(boundTripPoint, &boundThreshold);
                    uint32_t boundHysterisis;
                    result = taf_therm_GetBoundTripPointHysterisis(boundTripPoint, &boundHysterisis);
                    if (tripPointListSize > 0)
                    {
                        boundTripPoint = taf_therm_GetNextBoundTripPoint(boundCDev);
                    }
                }
                if (listSize > 0)
                {
                    boundCDev = taf_therm_GetNextBoundCDev(tZone);
                }
            }
    }
    Copy to clipboard

The application needs to release the thermal zone object after processing it by calling [taf\_therm\_ReleaseThermalZoneRef()](https://docs.qualcomm.com/doc/80-41102-2/topic/function_a00725_1a5b7e9bf15924bad9d9633120cdd005ae.html#Documentationa00725_1a5b7e9bf15924bad9d9633120cdd005ae).

taf_therm_ReleaseThermalZoneRef(tZone);
    Copy to clipboard

## Get specified cooling device information

TelAF Thermal Manager Service provides APIs to get information of cooling device by name present on the device. TelAF Thermal Manager’s client calls [taf\_therm\_GetCoolingDeviceByName()](https://docs.qualcomm.com/doc/80-41102-2/topic/function_a00725_1a2e48daaecc2eea76b5c5d9d4977f16a4.html#Documentationa00725_1a2e48daaecc2eea76b5c5d9d4977f16a4) and provides the name of the specific cooling device that the client wants the information about. The client gets the reference of the cooling device, if available. This function returns a [taf\_therm\_CoolingDeviceRef\_t](https://docs.qualcomm.com/doc/80-41102-2/topic/typedef_a00722_1a6ee4f9137d6e88ccde97709efe55ea89.html#Documentationa00722_1a6ee4f9137d6e88ccde97709efe55ea89) that can be later used to get the information of each cooling device.

le_result_t result;
    taf_therm_CoolingDeviceRef_t cDev = taf_therm_GetCoolingDeviceByName("CoolingDeviceName");
    if (cDev != NULL)
    {
            char description[TYPE_SIZE];
            memset(description, 0, TYPE_SIZE);
            result = taf_therm_GetCDevDescription(cDev, description, sizeof(description));
            uint32_t coolingID;
            result = taf_therm_GetCDevID(cDev, &coolingID);
            uint32_t maxCooling;
            result = taf_therm_GetCDevMaxCoolingLevel(cDev, &maxCooling);
            uint32_t currCooling;
            result = taf_therm_GetCDevCurrentCoolingLevel(cDev, &currCooling);
    }
    Copy to clipboard

The application needs to release the cooling device object after processing it by calling [taf\_therm\_ReleaseCoolingDeviceRef()](https://docs.qualcomm.com/doc/80-41102-2/topic/function_a00725_1ac9487d27c105094551bf458942310bab.html#Documentationa00725_1ac9487d27c105094551bf458942310bab).

taf_therm_ReleaseCoolingDeviceRef(tripEventSampleRef);
    Copy to clipboard

An application may register and deregister a trip event handler to be notified when the trip points trip with [taf\_therm\_AddTripEventHandler()](https://docs.qualcomm.com/doc/80-41102-2/topic/function_a00725_1adaf6b92e0fd79d275bc78bc5c5e7b37e.html#Documentationa00725_1adaf6b92e0fd79d275bc78bc5c5e7b37e) and [taf\_therm\_RemoveTripEventHandler()](https://docs.qualcomm.com/doc/80-41102-2/topic/function_a00725_1a617ccfd32378727fa425433cd72c7840.html#Documentationa00725_1a617ccfd32378727fa425433cd72c7840). When a trip event is triggered, the handler is called.

static void TestTripEventHandler
    (
        taf_therm_TripPointRef_t tripPoint,
        taf_therm_TripEventType_t type,
        void* contextPtr
    )
    {
        le_result_t result;
        uint32_t tripID, tZoneID, threshold, hysterisis;
        result = taf_therm_GetTripPointTripID(tripPoint, &tripID);
        result = taf_therm_GetTripPointThermalZoneID(tripPoint, &tZoneID);
        result = taf_therm_GetTripPointThreshold(tripPoint, &threshold);
        result = taf_therm_GetTripPointHysterisis(tripPoint, &hysterisis);
        char tripType[TYPE_SIZE];
        memset(tripType, 0, TYPE_SIZE);
        taf_therm_GetTripPointType(tripPoint, tripType, sizeof(tripType));
        taf_therm_ReleaseTripEventRef(tripPoint);
    }
    
    handlerRef = taf_therm_AddTripEventHandler
    ((taf_therm_TripEventHandlerFunc_t) TripEventHandler, NULL);
    LE_ASSERT(handlerRef != NULL);
    taf_therm_RemoveTripEventHandler(handlerRef);
    Copy to clipboard

The application needs to release the trip point object after processing it by calling [taf\_therm\_ReleaseTripEventRef()](https://docs.qualcomm.com/doc/80-41102-2/topic/function_a00725_1a07bece3372a4084aaf22b2a0158ff520.html#Documentationa00725_1a07bece3372a4084aaf22b2a0158ff520).

taf_therm_ReleaseTripEventRef(tripEventSampleRef);
    Copy to clipboard

An application may register and deregister a cooling level change handler to be notified when the cooling level changes for a cooling device with: [taf\_therm\_AddCoolingLevelChangeEventHandler()](https://docs.qualcomm.com/doc/80-41102-2/topic/function_a00725_1a1c8b1244b2c425844df6bef22de70c00.html#Documentationa00725_1a1c8b1244b2c425844df6bef22de70c00) and [taf\_therm\_RemoveCoolingLevelChangeEventHandler()](https://docs.qualcomm.com/doc/80-41102-2/topic/function_a00725_1a65eb7c60c0a0f6c9cd27558fc2b10188.html#Documentationa00725_1a65eb7c60c0a0f6c9cd27558fc2b10188). When a cooling level is changed, the handler is called.

void TestCoolingLevelChangeHandler
    (
        taf_therm_CoolingDeviceRef_t cDev,
        void* contextPtr
    )
    {
        le_result_t result;
        uint32_t coolingID, maxCooling, currCooling;
        result = taf_therm_GetCDevID(cDev, &coolingID);
        result = taf_therm_GetCDevMaxCoolingLevel(cDev, &maxCooling);
        result = taf_therm_GetCDevCurrentCoolingLevel(cDev, &currCooling);
        char description[TYPE_SIZE];
        memset(description, 0, TYPE_SIZE);
        result = taf_therm_GetCDevDescription(cDev, description, sizeof(description));
        taf_therm_ReleaseCoolingDeviceRef(cDev);
    }
    
    handlerRef = taf_therm_AddCoolingLevelChangeEventHandler
    ((taf_therm_CoolingLevelChangeEventHandlerFunc_t) TestCoolingLevelChangeHandler, NULL);
    LE_ASSERT(handlerRef != NULL);
    taf_therm_RemoveTripEventHandler(handlerRef);
    Copy to clipboard

The application needs to release the cooling device object after processing it by calling [taf\_therm\_ReleaseCoolingDeviceRef()](https://docs.qualcomm.com/doc/80-41102-2/topic/function_a00725_1ac9487d27c105094551bf458942310bab.html#Documentationa00725_1ac9487d27c105094551bf458942310bab).

taf_therm_ReleaseCoolingDeviceRef(coolingDeviceSampleRef);
    Copy to clipboard

Last Published: Jun 09, 2026

[Previous Topic
SOME/IP Gateway Server Service](https://docs.qualcomm.com/bundle/publicresource/80-41102-2/topics/page_c_tafSomeipSvr.md) [Next Topic
Time Service](https://docs.qualcomm.com/bundle/publicresource/80-41102-2/topics/page_c_tafTime.md)