195489c19Sopenharmony_ci/*
295489c19Sopenharmony_ci * Copyright (C) 2021 Huawei Device Co., Ltd.
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
1695489c19Sopenharmony_ci/**
1795489c19Sopenharmony_ci * @addtogroup Bluetooth
1895489c19Sopenharmony_ci * @{
1995489c19Sopenharmony_ci *
2095489c19Sopenharmony_ci * @brief Defines a bluetooth system that provides basic blurtooth connection and profile functions,
2195489c19Sopenharmony_ci *        including A2DP, AVRCP, BLE, GATT, HFP, MAP, PBAP, and SPP, etc.
2295489c19Sopenharmony_ci *
2395489c19Sopenharmony_ci * @since 6
2495489c19Sopenharmony_ci */
2595489c19Sopenharmony_ci
2695489c19Sopenharmony_ci/**
2795489c19Sopenharmony_ci * @file bluetooth_hf_call.h
2895489c19Sopenharmony_ci *
2995489c19Sopenharmony_ci * @brief Declares HFP HandsFree Unit call data class.
3095489c19Sopenharmony_ci *
3195489c19Sopenharmony_ci * @since 6
3295489c19Sopenharmony_ci */
3395489c19Sopenharmony_ci
3495489c19Sopenharmony_ci#ifndef BLUETOOTH_HF_CALL_H
3595489c19Sopenharmony_ci#define BLUETOOTH_HF_CALL_H
3695489c19Sopenharmony_ci
3795489c19Sopenharmony_ci#include <ctime>
3895489c19Sopenharmony_ci#include "bluetooth_host.h"
3995489c19Sopenharmony_ci#include "bluetooth_types.h"
4095489c19Sopenharmony_ci
4195489c19Sopenharmony_cinamespace OHOS {
4295489c19Sopenharmony_cinamespace Bluetooth {
4395489c19Sopenharmony_ci/**
4495489c19Sopenharmony_ci * @brief Phone call state enum.
4595489c19Sopenharmony_ci *
4695489c19Sopenharmony_ci * @since 6
4795489c19Sopenharmony_ci */
4895489c19Sopenharmony_cienum CallState {
4995489c19Sopenharmony_ci    HF_CALL_STATE_ACTIVE = 0,
5095489c19Sopenharmony_ci    HF_CALL_STATE_HELD,
5195489c19Sopenharmony_ci    HF_CALL_STATE_DIALING,
5295489c19Sopenharmony_ci    HF_CALL_STATE_ALERTING,
5395489c19Sopenharmony_ci    HF_CALL_STATE_INCOMING,
5495489c19Sopenharmony_ci    HF_CALL_STATE_WAITING,
5595489c19Sopenharmony_ci    HF_CALL_STATE_RESPONSE_HELD,
5695489c19Sopenharmony_ci    HF_CALL_STATE_FINISHED
5795489c19Sopenharmony_ci};
5895489c19Sopenharmony_ci
5995489c19Sopenharmony_ci/**
6095489c19Sopenharmony_ci * @brief Class for HandsFree Unit call.
6195489c19Sopenharmony_ci *
6295489c19Sopenharmony_ci * @since 6
6395489c19Sopenharmony_ci */
6495489c19Sopenharmony_ciclass HandsFreeUnitCall {
6595489c19Sopenharmony_cipublic:
6695489c19Sopenharmony_ci    /**
6795489c19Sopenharmony_ci     * @brief Construct a new HandsFreeUnitCall object.
6895489c19Sopenharmony_ci     *
6995489c19Sopenharmony_ci     * @param device Remote device address.
7095489c19Sopenharmony_ci     * @param id Call index.
7195489c19Sopenharmony_ci     * @param state Call state @see HfpCallState.
7295489c19Sopenharmony_ci     * @param number Call number.
7395489c19Sopenharmony_ci     * @param multiParty Is multiparty flag.
7495489c19Sopenharmony_ci     * @param outgoing Incoming/outing flag.
7595489c19Sopenharmony_ci     * @param inBandRing Is inband-ring flag.
7695489c19Sopenharmony_ci     * @since 6
7795489c19Sopenharmony_ci     */
7895489c19Sopenharmony_ci    HandsFreeUnitCall(
7995489c19Sopenharmony_ci        std::string device, int id, int state, std::string number, bool multiParty, bool outgoing, bool inBandRing)
8095489c19Sopenharmony_ci        : device_(device),
8195489c19Sopenharmony_ci          id_(id),
8295489c19Sopenharmony_ci          state_(state),
8395489c19Sopenharmony_ci          number_(number),
8495489c19Sopenharmony_ci          multiParty_(multiParty),
8595489c19Sopenharmony_ci          outgoing_(outgoing),
8695489c19Sopenharmony_ci          inBandRing_(inBandRing)
8795489c19Sopenharmony_ci    {
8895489c19Sopenharmony_ci        uuid_ = UUID::RandomUUID();
8995489c19Sopenharmony_ci        creationTime_ = clock();
9095489c19Sopenharmony_ci    }
9195489c19Sopenharmony_ci
9295489c19Sopenharmony_ci    /**
9395489c19Sopenharmony_ci     * @brief Construct a new HandsFreeUnitCall object.
9495489c19Sopenharmony_ci     *
9595489c19Sopenharmony_ci     * @param device Remote device address.
9695489c19Sopenharmony_ci     * @param id Call index.
9795489c19Sopenharmony_ci     * @param state Call state @see HfpCallState.
9895489c19Sopenharmony_ci     * @param number Call number.
9995489c19Sopenharmony_ci     * @param uuid Call uuid.
10095489c19Sopenharmony_ci     * @param multiParty Is multiparty flag.
10195489c19Sopenharmony_ci     * @param outgoing Incoming/outing flag.
10295489c19Sopenharmony_ci     * @param inBandRing Is inband-ring flag.
10395489c19Sopenharmony_ci     * @param creationTime Call's creation time.
10495489c19Sopenharmony_ci     * @since 6
10595489c19Sopenharmony_ci     */
10695489c19Sopenharmony_ci    HandsFreeUnitCall(std::string device, int id, int state, std::string number, UUID uuid, bool multiParty,
10795489c19Sopenharmony_ci        bool outgoing, bool inBandRing, long creationTime)
10895489c19Sopenharmony_ci        : device_(device),
10995489c19Sopenharmony_ci          id_(id),
11095489c19Sopenharmony_ci          state_(state),
11195489c19Sopenharmony_ci          number_(number),
11295489c19Sopenharmony_ci          uuid_(uuid),
11395489c19Sopenharmony_ci          multiParty_(multiParty),
11495489c19Sopenharmony_ci          outgoing_(outgoing),
11595489c19Sopenharmony_ci          inBandRing_(inBandRing),
11695489c19Sopenharmony_ci          creationTime_(creationTime)
11795489c19Sopenharmony_ci    {}
11895489c19Sopenharmony_ci
11995489c19Sopenharmony_ci    /**
12095489c19Sopenharmony_ci     * @brief Construct a new HandsFreeUnitCall object as default.
12195489c19Sopenharmony_ci     *
12295489c19Sopenharmony_ci     * @since 6
12395489c19Sopenharmony_ci     */
12495489c19Sopenharmony_ci    HandsFreeUnitCall() = default;
12595489c19Sopenharmony_ci
12695489c19Sopenharmony_ci    /**
12795489c19Sopenharmony_ci     * @brief Destroy the HandsFreeUnitCall object.
12895489c19Sopenharmony_ci     *
12995489c19Sopenharmony_ci     * @since 6
13095489c19Sopenharmony_ci     */
13195489c19Sopenharmony_ci    ~HandsFreeUnitCall() = default;
13295489c19Sopenharmony_ci
13395489c19Sopenharmony_ci    /**
13495489c19Sopenharmony_ci     * @brief Get the remote device address.
13595489c19Sopenharmony_ci     *
13695489c19Sopenharmony_ci     * @return Returns remote device address.
13795489c19Sopenharmony_ci     * @since 6
13895489c19Sopenharmony_ci     */
13995489c19Sopenharmony_ci    std::string GetRemoteDevice() const
14095489c19Sopenharmony_ci    {
14195489c19Sopenharmony_ci        return device_;
14295489c19Sopenharmony_ci    }
14395489c19Sopenharmony_ci
14495489c19Sopenharmony_ci    /**
14595489c19Sopenharmony_ci     * @brief Get the call index.
14695489c19Sopenharmony_ci     *
14795489c19Sopenharmony_ci     * @return Returns the call index.
14895489c19Sopenharmony_ci     * @since 6
14995489c19Sopenharmony_ci     */
15095489c19Sopenharmony_ci    int GetId() const
15195489c19Sopenharmony_ci    {
15295489c19Sopenharmony_ci        return id_;
15395489c19Sopenharmony_ci    }
15495489c19Sopenharmony_ci
15595489c19Sopenharmony_ci    /**
15695489c19Sopenharmony_ci     * @brief Get the uuid object.
15795489c19Sopenharmony_ci     *
15895489c19Sopenharmony_ci     * @return Returns the call uuid.
15995489c19Sopenharmony_ci     * @since 6
16095489c19Sopenharmony_ci     */
16195489c19Sopenharmony_ci    UUID GetUuid() const
16295489c19Sopenharmony_ci    {
16395489c19Sopenharmony_ci        return uuid_;
16495489c19Sopenharmony_ci    }
16595489c19Sopenharmony_ci
16695489c19Sopenharmony_ci    /**
16795489c19Sopenharmony_ci     * @brief Get the call state.
16895489c19Sopenharmony_ci     *
16995489c19Sopenharmony_ci     * @return Returns the call state.
17095489c19Sopenharmony_ci     * @since 6
17195489c19Sopenharmony_ci     */
17295489c19Sopenharmony_ci    int GetState() const
17395489c19Sopenharmony_ci    {
17495489c19Sopenharmony_ci        return state_;
17595489c19Sopenharmony_ci    }
17695489c19Sopenharmony_ci
17795489c19Sopenharmony_ci    /**
17895489c19Sopenharmony_ci     * @brief Get the call number.
17995489c19Sopenharmony_ci     *
18095489c19Sopenharmony_ci     * @return Returns the call number.
18195489c19Sopenharmony_ci     * @since 6
18295489c19Sopenharmony_ci     */
18395489c19Sopenharmony_ci    std::string GetNumber() const
18495489c19Sopenharmony_ci    {
18595489c19Sopenharmony_ci        return number_;
18695489c19Sopenharmony_ci    }
18795489c19Sopenharmony_ci
18895489c19Sopenharmony_ci    /**
18995489c19Sopenharmony_ci     * @brief Get the call's creation time.
19095489c19Sopenharmony_ci     *
19195489c19Sopenharmony_ci     * @return Returns the call's creation time.
19295489c19Sopenharmony_ci     * @since 6
19395489c19Sopenharmony_ci     */
19495489c19Sopenharmony_ci    long GetCreationTime() const
19595489c19Sopenharmony_ci    {
19695489c19Sopenharmony_ci        return creationTime_;
19795489c19Sopenharmony_ci    }
19895489c19Sopenharmony_ci
19995489c19Sopenharmony_ci    /**
20095489c19Sopenharmony_ci     * @brief Get the IsMultiParty flag.
20195489c19Sopenharmony_ci     *
20295489c19Sopenharmony_ci     * @return Returns the IsMultiParty flag.
20395489c19Sopenharmony_ci     * @since 6
20495489c19Sopenharmony_ci     */
20595489c19Sopenharmony_ci    bool IsMultiParty() const
20695489c19Sopenharmony_ci    {
20795489c19Sopenharmony_ci        return multiParty_;
20895489c19Sopenharmony_ci    }
20995489c19Sopenharmony_ci
21095489c19Sopenharmony_ci    /**
21195489c19Sopenharmony_ci     * @brief Get the IsOutgoing flag.
21295489c19Sopenharmony_ci     *
21395489c19Sopenharmony_ci     * @return Returns the IsOutgoing flag.
21495489c19Sopenharmony_ci     * @since 6
21595489c19Sopenharmony_ci     */
21695489c19Sopenharmony_ci    bool IsOutgoing() const
21795489c19Sopenharmony_ci    {
21895489c19Sopenharmony_ci        return outgoing_;
21995489c19Sopenharmony_ci    }
22095489c19Sopenharmony_ci
22195489c19Sopenharmony_ci    /**
22295489c19Sopenharmony_ci     * @brief Get the IsInBandRing flag.
22395489c19Sopenharmony_ci     *
22495489c19Sopenharmony_ci     * @return Returns the IsInBandRing flag.
22595489c19Sopenharmony_ci     * @since 6
22695489c19Sopenharmony_ci     */
22795489c19Sopenharmony_ci    bool IsInBandRing() const
22895489c19Sopenharmony_ci    {
22995489c19Sopenharmony_ci        return inBandRing_;
23095489c19Sopenharmony_ci    }
23195489c19Sopenharmony_ci
23295489c19Sopenharmony_ci    /**
23395489c19Sopenharmony_ci     * @brief Set the call state.
23495489c19Sopenharmony_ci     *
23595489c19Sopenharmony_ci     * @param state Call state.
23695489c19Sopenharmony_ci     * @since 6
23795489c19Sopenharmony_ci     */
23895489c19Sopenharmony_ci    void SetState(int state)
23995489c19Sopenharmony_ci    {
24095489c19Sopenharmony_ci        state_ = state;
24195489c19Sopenharmony_ci    }
24295489c19Sopenharmony_ci
24395489c19Sopenharmony_ci    /**
24495489c19Sopenharmony_ci     * @brief Set the call number.
24595489c19Sopenharmony_ci     *
24695489c19Sopenharmony_ci     * @param number Call number.
24795489c19Sopenharmony_ci     * @since 6
24895489c19Sopenharmony_ci     */
24995489c19Sopenharmony_ci    void SetNumber(std::string number)
25095489c19Sopenharmony_ci    {
25195489c19Sopenharmony_ci        number_ = number;
25295489c19Sopenharmony_ci    }
25395489c19Sopenharmony_ci
25495489c19Sopenharmony_ci    /**
25595489c19Sopenharmony_ci     * @brief Set the multiParty flag.
25695489c19Sopenharmony_ci     *
25795489c19Sopenharmony_ci     * @param multiParty The multiParty flag
25895489c19Sopenharmony_ci     * @since 6
25995489c19Sopenharmony_ci     */
26095489c19Sopenharmony_ci    void SetMultiParty(bool multiParty)
26195489c19Sopenharmony_ci    {
26295489c19Sopenharmony_ci        multiParty_ = multiParty;
26395489c19Sopenharmony_ci    }
26495489c19Sopenharmony_ci
26595489c19Sopenharmony_ciprotected:
26695489c19Sopenharmony_ci    std::string device_ {""};
26795489c19Sopenharmony_ci    int id_ {0};
26895489c19Sopenharmony_ci    int state_ {-1};
26995489c19Sopenharmony_ci    std::string number_ {""};
27095489c19Sopenharmony_ci    UUID uuid_;
27195489c19Sopenharmony_ci    bool multiParty_ {false};
27295489c19Sopenharmony_ci    bool outgoing_ {false};
27395489c19Sopenharmony_ci    bool inBandRing_ {false};
27495489c19Sopenharmony_ci    long creationTime_ {0};
27595489c19Sopenharmony_ci};
27695489c19Sopenharmony_ci}  // namespace Bluetooth
27795489c19Sopenharmony_ci}  // namespace OHOS
27895489c19Sopenharmony_ci#endif  // BLUETOOTH_HF_CALL_H