195489c19Sopenharmony_ci/*
295489c19Sopenharmony_ci * Copyright (C) Huawei Device Co., Ltd. 2023-2023. All rights reserved.
395489c19Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
495489c19Sopenharmony_ci * you may not use this file except in compliance with the License.
595489c19Sopenharmony_ci * You may obtain a copy of the License at
695489c19Sopenharmony_ci *
795489c19Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
895489c19Sopenharmony_ci *
995489c19Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1095489c19Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1195489c19Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1295489c19Sopenharmony_ci * See the License for the specific language governing permissions and
1395489c19Sopenharmony_ci * limitations under the License.
1495489c19Sopenharmony_ci */
1595489c19Sopenharmony_ci#include "bluetooth_timer.h"
1695489c19Sopenharmony_ci#include "common_timer_errors.h"
1795489c19Sopenharmony_ci#include "bluetooth_log.h"
1895489c19Sopenharmony_ci
1995489c19Sopenharmony_cinamespace OHOS {
2095489c19Sopenharmony_cinamespace Bluetooth {
2195489c19Sopenharmony_ciBluetoothTimer *BluetoothTimer::GetInstance()
2295489c19Sopenharmony_ci{
2395489c19Sopenharmony_ci    static BluetoothTimer instance;
2495489c19Sopenharmony_ci    return &instance;
2595489c19Sopenharmony_ci}
2695489c19Sopenharmony_ci
2795489c19Sopenharmony_ciBluetoothTimer::BluetoothTimer() : timer_(std::make_unique<OHOS::Utils::Timer>("BluetoothTimer"))
2895489c19Sopenharmony_ci{
2995489c19Sopenharmony_ci    timer_->Setup();
3095489c19Sopenharmony_ci}
3195489c19Sopenharmony_ci
3295489c19Sopenharmony_ciBluetoothTimer::~BluetoothTimer()
3395489c19Sopenharmony_ci{
3495489c19Sopenharmony_ci    if (timer_) {
3595489c19Sopenharmony_ci        timer_->Shutdown(true);
3695489c19Sopenharmony_ci        timer_ = nullptr;
3795489c19Sopenharmony_ci    }
3895489c19Sopenharmony_ci}
3995489c19Sopenharmony_ci
4095489c19Sopenharmony_civoid BluetoothTimer::Register(const TimerCallback &callback, uint32_t &outTimerId, uint32_t interval)
4195489c19Sopenharmony_ci{
4295489c19Sopenharmony_ci    if (timer_ == nullptr) {
4395489c19Sopenharmony_ci        HILOGE("timer_ is nullptr");
4495489c19Sopenharmony_ci        return;
4595489c19Sopenharmony_ci    }
4695489c19Sopenharmony_ci
4795489c19Sopenharmony_ci    uint32_t ret = timer_->Register(callback, interval, true); // one shot timer
4895489c19Sopenharmony_ci    if (ret == OHOS::Utils::TIMER_ERR_DEAL_FAILED) {
4995489c19Sopenharmony_ci        HILOGE("Register timer failed");
5095489c19Sopenharmony_ci        return;
5195489c19Sopenharmony_ci    }
5295489c19Sopenharmony_ci
5395489c19Sopenharmony_ci    outTimerId = ret;
5495489c19Sopenharmony_ci}
5595489c19Sopenharmony_ci
5695489c19Sopenharmony_civoid BluetoothTimer::UnRegister(uint32_t timerId)
5795489c19Sopenharmony_ci{
5895489c19Sopenharmony_ci    if (timerId == 0) {
5995489c19Sopenharmony_ci        HILOGE("timerId is 0, no register timer");
6095489c19Sopenharmony_ci        return;
6195489c19Sopenharmony_ci    }
6295489c19Sopenharmony_ci
6395489c19Sopenharmony_ci    if (timer_ == nullptr) {
6495489c19Sopenharmony_ci        HILOGE("timer_ is nullptr");
6595489c19Sopenharmony_ci        return;
6695489c19Sopenharmony_ci    }
6795489c19Sopenharmony_ci
6895489c19Sopenharmony_ci    timer_->Unregister(timerId);
6995489c19Sopenharmony_ci}
7095489c19Sopenharmony_ci}  // namespace NFC
7195489c19Sopenharmony_ci}  // namespace OHOS