/*
 * Copyright (C) 2020 The Android Open Source 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.
 */

#include "Utils.h"
#include <hwbinder/HidlSupport.h>

#include <string.h>
#include <android-base/logging.h>
#include <android-base/properties.h>

namespace android::hardware {

void zeroMemory(uint8_t* data, size_t size) {
    memset(data, 0, size);
}

static bool isHwServiceManagerInstalled() {
    return access("/system_ext/bin/hwservicemanager", F_OK) == 0 ||
           access("/system/system_ext/bin/hwservicemanager", F_OK) == 0 ||
           access("/system/bin/hwservicemanager", F_OK) == 0;
}

static bool waitForHwServiceManager() {
    if (!isHwServiceManagerInstalled()) {
        return false;
    }
    // TODO(b/31559095): need bionic host so that we can use 'prop_info' returned
    // from WaitForProperty
#ifdef __ANDROID__
    static const char* kHwServicemanagerReadyProperty = "hwservicemanager.ready";

    using std::literals::chrono_literals::operator""s;

    using android::base::WaitForProperty;
    while (true) {
        if (base::GetBoolProperty("hwservicemanager.disabled", false)) {
            return false;
        }
        if (WaitForProperty(kHwServicemanagerReadyProperty, "true", 1s)) {
            return true;
        }
        LOG(WARNING) << "Waited for hwservicemanager.ready for a second, waiting another...";
    }
#endif  // __ANDROID__
    return true;
}

bool isHwbinderSupportedBlocking() {
    return waitForHwServiceManager();
}
}   // namespace android::hardware
