1/*
2 * Copyright (C) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#ifndef CELLULAR_CALL_SUPPLEMENT_REQUEST_CS_H
17#define CELLULAR_CALL_SUPPLEMENT_REQUEST_CS_H
18
19#include "base_request.h"
20#include "cellular_call_handler.h"
21
22namespace OHOS {
23namespace Telephony {
24class SupplementRequestCs : BaseRequest {
25public:
26    /**
27     * @brief GetClipRequest Get Clip Request
28     *
29     * @param slotId Indicates the card slot index number,
30     * ranging from {@code 0} to the maximum card slot index number supported by the device.
31     * @param index Indicates the index of command.
32     * @return Returns {@code TELEPHONY_SUCCESS} on success, others on failure.
33     */
34    int32_t GetClipRequest(int32_t slotId, int32_t index);
35
36    /**
37     * @brief SetClirRequest Set Clir Request
38     *
39     * @param slotId Indicates the card slot index number,
40     * ranging from {@code 0} to the maximum card slot index number supported by the device.
41     * @param action Indicates the action for SetClir,
42     * 1, means turn on clir; 0, means turn off clir.
43     * @param index Indicates the index of command.
44     * @return Returns {@code TELEPHONY_SUCCESS} on success, others on failure.
45     */
46    int32_t SetClirRequest(int32_t slotId, int32_t action, int32_t index);
47
48    /**
49     * @brief GetClirRequest Get Clir Request
50     *
51     * @param slotId Indicates the card slot index number,
52     * ranging from {@code 0} to the maximum card slot index number supported by the device.
53     * @param index Indicates the index of command.
54     * @return Returns {@code TELEPHONY_SUCCESS} on success, others on failure.
55     */
56    int32_t GetClirRequest(int32_t slotId, int32_t index);
57
58    /**
59     * @brief GetCallTransferRequest Get Call Transfer Request
60     *
61     * @param slotId Indicates the card slot index number,
62     * ranging from {@code 0} to the maximum card slot index number supported by the device.
63     * @param reason Indicates the reason of the get call transfer.
64     * @param index Indicates the index of command.
65     * @return Returns {@code TELEPHONY_SUCCESS} on success, others on failure.
66     */
67    int32_t GetCallTransferRequest(int32_t slotId, int32_t reason, int32_t index);
68
69    /**
70     * @brief SetCallTransferRequest Set Call Transfer Request
71     *
72     * @param slotId Indicates the card slot index number,
73     * ranging from {@code 0} to the maximum card slot index number supported by the device.
74     * @param callTransferParam Indicates reason/mode/transferNum/classType of the set call transfer.
75     * @param index Indicates the index of command.
76     * @return Returns {@code TELEPHONY_SUCCESS} on success, others on failure.
77     */
78    int32_t SetCallTransferRequest(int32_t slotId, const CallTransferParam &callTransferParam, int32_t index);
79
80    /**
81     * @brief GetCallRestrictionRequest Get Call Restriction Request
82     *
83     * @param slotId Indicates the card slot index number,
84     * ranging from {@code 0} to the maximum card slot index number supported by the device.
85     * @param fac Indicates the facility of the get call restriction.
86     * @param index Indicates the index of command.
87     * @return Returns {@code TELEPHONY_SUCCESS} on success, others on failure.
88     */
89    int32_t GetCallRestrictionRequest(int32_t slotId, const std::string &fac, int32_t index);
90
91    /**
92     * @brief SetCallRestrictionRequest Set Call Restriction Request
93     *
94     * @param slotId Indicates the card slot index number,
95     * ranging from {@code 0} to the maximum card slot index number supported by the device.
96     * @param fac Indicates the facility of the set call restriction.
97     * @param mode Indicates the mode of the set call restriction.
98     * @param pw Indicates password or "" if not required.
99     * @param index Indicates the index of command.
100     * @return Returns {@code TELEPHONY_SUCCESS} on success, others on failure.
101     */
102    int32_t SetCallRestrictionRequest(
103        int32_t slotId, const std::string &fac, int32_t mode, const std::string &pw, int32_t index);
104
105    /**
106     * @brief GetCallRestrictionRequest Get Call Restriction Request
107     *
108     * @param slotId Indicates the card slot index number,
109     * ranging from {@code 0} to the maximum card slot index number supported by the device.
110     * @param restrictionType Indicates the facility of the get call restriction.
111     * @param index Indicates the index of command.
112     * @return Returns {@code TELEPHONY_SUCCESS} on success, others on failure.
113     */
114    int32_t SetBarringPasswordRequest(int32_t slotId, const std::string &restrictionType,
115        int32_t index, const char *oldPassword, const char *newPassword);
116
117    /**
118     * @brief SetCallWaitingRequest Set CallWaiting Request
119     *
120     * @param slotId Indicates the card slot index number,
121     * ranging from {@code 0} to the maximum card slot index number supported by the device.
122     * @param activate Indicates the action for SetCallWaiting,
123     * true, means turn on CallWaiting; false, means turn off CallWaiting.
124     * @param classType Call waiting and conditions +CCWA,
125     * the value was {@code ServiceClassType}, See 3GPP TS 22.083.
126     * @param index Indicates the index of command.
127     * @return Returns {@code TELEPHONY_SUCCESS} on success, others on failure.
128     */
129    int32_t SetCallWaitingRequest(int32_t slotId, bool activate, int32_t classType, int32_t index);
130
131    /**
132     * @brief GetCallWaitingRequest Get Call Waiting Request
133     *
134     * @param slotId Indicates the card slot index number,
135     * ranging from {@code 0} to the maximum card slot index number supported by the device.
136     * @param index Indicates the index of command.
137     * @return Returns {@code TELEPHONY_SUCCESS} on success, others on failure.
138     */
139    int32_t GetCallWaitingRequest(int32_t slotId, int32_t index);
140
141    /**
142     * Send ussd Request
143     *
144     * @param msg
145     * @return Error Code: Returns TELEPHONY_SUCCESS on success, others on failure.
146     */
147    int32_t SendUssdRequest(int32_t slotId, const std::string &msg);
148
149    /**
150     * SIM PIN unlock
151     *
152     * @param slotId The ID of SIM slot
153     * @param newPin The new pin code for unlock SIM
154     * @param oldPin The old pin code for unlock SIM
155     * @return Returns true on success.
156     */
157    int32_t AlterPinPassword(int32_t slotId, std::string newPin, std::string oldPin);
158
159    /**
160     * SIM PUK unlock
161     *
162     * @param slotId The ID of SIM slot
163     * @param newPin  The new pin code for unlock SIM
164     * @param puk The puk code for unlock SIM
165     * @return Returns true on success.
166     */
167    int32_t UnlockPuk(int32_t slotId, std::string newPin, std::string puk);
168
169    /**
170     * SIM PIN2 unlock
171     *
172     * @param slotId The ID of SIM slot
173     * @param newPin2 The new pin2 code for unlock SIM
174     * @param oldPin2 The old pin2 code for unlock SIM
175     * @return Returns true on success.
176     */
177    int32_t AlterPin2Password(int32_t slotId, std::string newPin2, std::string oldPin2);
178
179    /**
180     * SIM PUK2 unlock
181     *
182     * @param slotId The ID of SIM slot
183     * @param newPin2 The new pin2 code for unlock SIM
184     * @param puk2 The puk2 code for unlock SIM
185     * @return Returns true on success.
186     */
187    int32_t UnlockPuk2(int32_t slotId, std::string newPin2, std::string puk2);
188
189    /**
190     * Close Unfinished ussd
191     *
192     * @param slotId The ID of SIM slot
193     * @return Error Code: Returns TELEPHONY_SUCCESS on success, others on failure.
194     */
195    int32_t CloseUnFinishedUssdRequest(int32_t slotId);
196
197private:
198    /**
199     * GetMMIHandler
200     *
201     * @return std::shared_ptr<MMIHandler>
202     */
203    std::shared_ptr<CellularCallHandler> GetMMIHandler(int32_t slotId) const;
204
205private:
206    ModuleServiceUtils moduleUtils_;
207};
208} // namespace Telephony
209} // namespace OHOS
210#endif // CELLULAR_CALL_SUPPLEMENT_REQUEST_CS_H
211