# 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_a00701_1af36b2123d6c0b49853a724be7f61abcb.html#Documentationa00701_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_a00698_1a8f2a09658a713483f11d2f591e640791.html#Documentationa00698_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_a00701_1afe7f50e7837c69c7e537ee9165142b51.html#Documentationa00701_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_a00701_1a0c9b153506ffcd75bfe4c56cade40f45.html#Documentationa00701_1a0c9b153506ffcd75bfe4c56cade40f45) b. [taf\_therm\_GetTripPointThermalZoneID()](https://docs.qualcomm.com/doc/80-41102-2/topic/function_a00701_1acdb30d04a8b5cc6a585acd929010dbf6.html#Documentationa00701_1acdb30d04a8b5cc6a585acd929010dbf6) c. [taf\_therm\_GetBoundTripPointTripID()](https://docs.qualcomm.com/doc/80-41102-2/topic/function_a00701_1abaf828bf4b2759ea09b08c97c3637b6f.html#Documentationa00701_1abaf828bf4b2759ea09b08c97c3637b6f) d. [taf\_therm\_GetBoundTripPointThermalZoneID()](https://docs.qualcomm.com/doc/80-41102-2/topic/function_a00701_1a2cddba9e06dd5d2893c933355fd48f45.html#Documentationa00701_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_a00701_1a0560350985fd78a2d89449f7512bee13.html#Documentationa00701_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_a00698_1acad8c069d34f87be678935797c4198b3.html#Documentationa00698_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_a00701_1af8fddad5f1f324c00a2fd96491375eba.html#Documentationa00701_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_a00701_1aff572c5dc475812f48cb092400543a1f.html#Documentationa00701_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_a00698_1aa756b2ade4eca37e1991f6950a237da9.html#Documentationa00698_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_a00701_1a5b7e9bf15924bad9d9633120cdd005ae.html#Documentationa00701_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_a00701_1a2e48daaecc2eea76b5c5d9d4977f16a4.html#Documentationa00701_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_a00698_1a6ee4f9137d6e88ccde97709efe55ea89.html#Documentationa00698_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_a00701_1ac9487d27c105094551bf458942310bab.html#Documentationa00701_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_a00701_1adaf6b92e0fd79d275bc78bc5c5e7b37e.html#Documentationa00701_1adaf6b92e0fd79d275bc78bc5c5e7b37e) and [taf\_therm\_RemoveTripEventHandler()](https://docs.qualcomm.com/doc/80-41102-2/topic/function_a00701_1a617ccfd32378727fa425433cd72c7840.html#Documentationa00701_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_a00701_1a07bece3372a4084aaf22b2a0158ff520.html#Documentationa00701_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_a00701_1a1c8b1244b2c425844df6bef22de70c00.html#Documentationa00701_1a1c8b1244b2c425844df6bef22de70c00) and [taf\_therm\_RemoveCoolingLevelChangeEventHandler()](https://docs.qualcomm.com/doc/80-41102-2/topic/function_a00701_1a65eb7c60c0a0f6c9cd27558fc2b10188.html#Documentationa00701_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_a00701_1ac9487d27c105094551bf458942310bab.html#Documentationa00701_1ac9487d27c105094551bf458942310bab). taf_therm_ReleaseCoolingDeviceRef(coolingDeviceSampleRef); Copy to clipboard Last Published: Jul 29, 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)