/* * Copyright (C) 2016 The Android Open Source Project * * SPDX-License-Identifier: Apache-2.0 */ #define LOG_TAG "ConsumerIrService.xiaomi_sdm660" #include #include #include #include "ConsumerIr.h" namespace android { namespace hardware { namespace ir { namespace V1_0 { namespace implementation { ConsumerIr::ConsumerIr() : mDevice(nullptr) { const hw_module_t *hw_module = NULL; int ret = hw_get_module(CONSUMERIR_HARDWARE_MODULE_ID, &hw_module); if (ret != 0) { LOG(FATAL) << "hw_get_module " CONSUMERIR_HARDWARE_MODULE_ID " failed: " << ret; } ret = hw_module->methods->open(hw_module, CONSUMERIR_TRANSMITTER, (hw_device_t **) &mDevice); if (ret < 0) { LOG(FATAL) << "Can't open consumer IR transmitter, error: " << ret; } } ConsumerIr::~ConsumerIr() { if (mDevice == nullptr) return; mDevice->common.close((hw_device_t *) mDevice); mDevice = nullptr; } // Methods from ::android::hardware::consumerir::V1_0::IConsumerIr follow. Return ConsumerIr::transmit(int32_t carrierFreq, const hidl_vec& pattern) { return mDevice->transmit(mDevice, carrierFreq, pattern.data(), pattern.size()) == 0; } Return ConsumerIr::getCarrierFreqs(getCarrierFreqs_cb _hidl_cb) { int32_t len = mDevice->get_num_carrier_freqs(mDevice); if (len < 0) { _hidl_cb(false, {}); return Void(); } consumerir_freq_range_t *rangeAr = new consumerir_freq_range_t[len]; bool success = (mDevice->get_carrier_freqs(mDevice, len, rangeAr) >= 0); if (!success) { _hidl_cb(false, {}); return Void(); } hidl_vec rangeVec; rangeVec.resize(len); for (int32_t i = 0; i < len; i++) { rangeVec[i].min = static_cast(rangeAr[i].min); rangeVec[i].max = static_cast(rangeAr[i].max); } _hidl_cb(true, rangeVec); return Void(); } } // namespace implementation } // namespace V1_0 } // namespace ir } // namespace hardware } // namespace android