public void programThresholds(ThermalSensor s) {
   if (s == null) return;
   int zoneState = getZoneState();
   if (zoneState == ThermalManager.THERMAL_STATE_OFF) return;
   int lowerTripPoint = ThermalUtils.getLowerThresholdTemp(zoneState, getZoneTempThreshold());
   int upperTripPoint = ThermalUtils.getUpperThresholdTemp(zoneState, getZoneTempThreshold());
   if (lowerTripPoint != ThermalManager.INVALID_TEMP
       && upperTripPoint != ThermalManager.INVALID_TEMP) {
     if (ThermalUtils.writeSysfs(s.getSensorLowTempPath(), lowerTripPoint) == -1) {
       Log.i(
           TAG,
           "error while programming lower trip point:"
               + lowerTripPoint
               + "for sensor:"
               + s.getSensorName());
     }
     if (ThermalUtils.writeSysfs(s.getSensorHighTempPath(), upperTripPoint) == -1) {
       Log.i(
           TAG,
           "error while programming upper trip point:"
               + upperTripPoint
               + "for sensor:"
               + s.getSensorName());
     }
   }
 }
        @Override
        public void onUEvent(UEventObserver.UEvent event) {
          String sensorName;
          int sensorTemp, errorVal, eventType = -1;
          ThermalZone zone;
          if (mThermalSensors == null) return;

          // Name of the sensor and current temperature are mandatory parameters of an UEvent
          sensorName = event.get("NAME");
          sensorTemp = Integer.parseInt(event.get("TEMP"));

          // eventType is an optional parameter. so, check for null case
          if (event.get("EVENT") != null) eventType = Integer.parseInt(event.get("EVENT"));

          if (sensorName != null) {
            Log.i(TAG, "UEvent received for sensor:" + sensorName + " temp:" + sensorTemp);
            // check the name against the first sensor
            ThermalSensor sensor = mThermalSensors.get(0);
            if (sensor != null
                && sensor.getSensorName() != null
                && sensor.getSensorName().equalsIgnoreCase(sensorName)) {
              // Adjust the sensor temperature based on the 'error correction' temperature.
              // For 'LOW' event, debounce interval will take care of this.
              errorVal = sensor.getErrorCorrectionTemp();
              if (eventType == ThermalManager.THERMAL_HIGH_EVENT) sensorTemp += errorVal;

              if (isZoneStateChanged(sensor, sensorTemp)) {
                sendThermalEvent();
                // reprogram threshold
                programThresholds(sensor);
              }
            }
          }
        }
 private void printSensors() {
   if (mThermalSensors == null) return;
   StringBuilder s = new StringBuilder();
   for (ThermalSensor ts : mThermalSensors) {
     if (ts != null) {
       s.append(ts.getSensorName());
       s.append(",");
     }
   }
   Log.i(TAG, "zoneID: " + mZoneID + " sensors mapped:" + s.toString());
 }