text: /*
   * Copyright (C) 2020 The LineageOS Project
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  #ifndef ANDROID_HARDWARE_POWER_V1_0_POWER_H
  #define ANDROID_HARDWARE_POWER_V1_0_POWER_H
  
  #include <android/hardware/power/1.0/IPower.h>
  #include <hidl/MQDescriptor.h>
  #include <hidl/Status.h>
  #include <vendor/lineage/power/1.0/ILineagePower.h>
  
  namespace android {
  namespace hardware {
  namespace power {
  namespace V1_0 {
  namespace implementation {
  
  using ::android::sp;
  using ::android::hardware::hidl_array;
  using ::android::hardware::hidl_memory;
  using ::android::hardware::hidl_string;
  using ::android::hardware::hidl_vec;
  using ::android::hardware::Return;
  using ::android::hardware::Void;
  
  using ::vendor::lineage::power::V1_0::ILineagePower;
  using ::vendor::lineage::power::V1_0::LineageFeature;
  using ::vendor::lineage::power::V1_0::LineagePowerHint;
  
  // clang-format off
  enum PowerProfile {
      POWER_SAVE = 0,
      BALANCED,
      HIGH_PERFORMANCE,
      MAX
  };
  // clang-format on
  
  struct Power : public IPower, public ILineagePower {
      Return<void> setInteractive(bool interactive) override;
      Return<void> powerHint(PowerHint hint, int32_t data) override;
      Return<void> setFeature(Feature feature, bool activate) override;
      Return<void> getPlatformLowPowerStats(getPlatformLowPowerStats_cb _hidl_cb) override;
  
      Return<int32_t> getFeature(LineageFeature feature) override;
  
    private:
      void initialize();
      void findInputNodes();
      void setProfile(PowerProfile profile);
      void sendBoostpulse();
      void sendBoost(int duration_us);
      void sendInputBoost();
  
      bool initialized;
      bool touchkeys_blocked;
      std::string sec_touchkey;
      std::string sec_touchscreen;
      PowerProfile current_profile;
      std::vector<std::string> hispeed_freqs;
      std::vector<std::string> max_freqs;
  };
  
  }  // namespace implementation
  }  // namespace V1_0
  }  // namespace power
  }  // namespace hardware
  }  // namespace android
  
  #endif  // ANDROID_HARDWARE_POWER_V1_0_POWER_H
  