1/*
2 * Copyright (C) 2021 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 OHOS_HRIL_SMS_H
17#define OHOS_HRIL_SMS_H
18
19#include "hril_base.h"
20
21namespace OHOS {
22namespace Telephony {
23class HRilSms : public HRilBase {
24public:
25    HRilSms(int32_t slotId);
26    virtual ~HRilSms() = default;
27
28    bool IsSmsRespOrNotify(uint32_t code);
29    void RegisterSmsFuncs(const HRilSmsReq *smsFuncs);
30
31    int32_t SendGsmSms(int32_t serialId, const OHOS::HDI::Ril::V1_1::GsmSmsMessageInfo &gsmSmsMessageInfo);
32    int32_t SendCdmaSms(int32_t serialId, const OHOS::HDI::Ril::V1_1::SendCdmaSmsMessageInfo &cdmaSmsMessageInfo);
33    int32_t AddSimMessage(int32_t serialId, const OHOS::HDI::Ril::V1_1::SmsMessageIOInfo &smsMessageIOInfo);
34    int32_t DelSimMessage(int32_t serialId, int32_t index);
35    int32_t UpdateSimMessage(int32_t serialId, const OHOS::HDI::Ril::V1_1::SmsMessageIOInfo &smsMessageIOInfo);
36    int32_t SetSmscAddr(int32_t serialId, const OHOS::HDI::Ril::V1_1::ServiceCenterAddress &serviceCenterAddress);
37    int32_t GetSmscAddr(int32_t serialId);
38    int32_t SetCBConfig(int32_t serialId, const OHOS::HDI::Ril::V1_1::CBConfigInfo &cellBroadcastInfo);
39    int32_t GetCBConfig(int32_t serialId);
40    int32_t SetCdmaCBConfig(int32_t serialId, const OHOS::HDI::Ril::V1_1::CdmaCBConfigInfoList &cdmaCBConfigInfoList);
41    int32_t GetCdmaCBConfig(int32_t serialId);
42    int32_t SendSmsMoreMode(int32_t serialId, const OHOS::HDI::Ril::V1_1::GsmSmsMessageInfo &gsmSmsMessageInfo);
43    int32_t SendSmsAck(int32_t serialId, const OHOS::HDI::Ril::V1_1::ModeData &modeData);
44    int32_t AddCdmaSimMessage(int32_t serialId, const OHOS::HDI::Ril::V1_1::SmsMessageIOInfo &smsMessageIOInfo);
45    int32_t DelCdmaSimMessage(int32_t serialId, int32_t index);
46    int32_t UpdateCdmaSimMessage(int32_t serialId, const OHOS::HDI::Ril::V1_1::SmsMessageIOInfo &smsMessageIOInfo);
47
48    int32_t SendGsmSmsResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
49        const void *response, size_t responseLen);
50    int32_t SendCdmaSmsResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
51        const void *response, size_t responseLen);
52    int32_t AddSimMessageResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
53        const void *response, size_t responseLen);
54    int32_t DelSimMessageResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
55        const void *response, size_t responseLen);
56    int32_t UpdateSimMessageResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
57        const void *response, size_t responseLen);
58    int32_t SetSmscAddrResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
59        const void *response, size_t responseLen);
60    int32_t GetSmscAddrResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
61        const void *response, size_t responseLen);
62    int32_t SetCBConfigResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
63        const void *response, size_t responseLen);
64    int32_t GetCBConfigResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
65        const void *response, size_t responseLen);
66    int32_t SetCdmaCBConfigResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
67        const void *response, size_t responseLen);
68    int32_t GetCdmaCBConfigResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
69        const void *response, size_t responseLen);
70    int32_t SendSmsMoreModeResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
71        const void *response, size_t responseLen);
72    int32_t SendSmsAckResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
73        const void *response, size_t responseLen);
74    int32_t AddCdmaSimMessageResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
75        const void *response, size_t responseLen);
76    int32_t DelCdmaSimMessageResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
77        const void *response, size_t responseLen);
78    int32_t UpdateCdmaSimMessageResponse(int32_t requestNum, HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
79        const void *response, size_t responseLen);
80
81    int32_t SmsStatusReportNotify(int32_t indType, HRilErrNumber error, const void *response, size_t responseLen);
82    int32_t NewSmsStoredOnSimNotify(int32_t indType, HRilErrNumber error, const void *response, size_t responseLen);
83    int32_t NewSmsNotify(int32_t indType, HRilErrNumber error, const void *response, size_t responseLen);
84    int32_t NewCdmaSmsNotify(int32_t indType, HRilErrNumber error, const void *response, size_t responseLen);
85    int32_t CBConfigNotify(int32_t indType, HRilErrNumber error, const void *response, size_t responseLen);
86
87private:
88    void AddHandlerToMap();
89    void AddNotificationToMap();
90    bool IsSmsResponse(uint32_t code);
91    bool IsSmsNotification(uint32_t code);
92    int32_t RequestWithInts(int32_t **p, ReqDataInfo *requestInfo, int32_t argCount, ...);
93    int32_t RequestWithStrings(int32_t serial, int32_t request, int32_t count, ...);
94    HDI::Ril::V1_1::CBConfigReportInfo MakeCBConfigResult(const void *response, const size_t responseLen);
95    HDI::Ril::V1_1::SendSmsResultInfo MakeSendSmsResult(HDI::Ril::V1_1::RilRadioResponseInfo &responseInfo,
96        int32_t serial, const void *response, const size_t responseLen);
97    void CopyToHRilCdmaCBConfigInfo(
98        HRilCdmaCBConfigInfo *list, OHOS::HDI::Ril::V1_1::CdmaCBConfigInfoList cellBroadcastInfoList);
99    bool CreateCdmaMessageInfo(HRilCdmaSmsMessageInfo &cdmaSmsInfo, const std::string &pdu);
100    bool CheckCdmaPduLength(HRilCdmaSmsMessageInfo &cdmaSmsInfo, const std::string &pdu);
101    bool GetHRilCBConfigInfo(
102        std::vector<HRilCBConfigInfo> &cellBroadcastInfo, const OHOS::HDI::Ril::V1_1::CBConfigInfo &broadcastInfo);
103    bool GetCBConfigInfo(
104        HRilCBConfigInfo *cellBroadcastInfo, size_t len, OHOS::HDI::Ril::V1_1::CBConfigInfo &broadcastInfo);
105    void SplitMids(std::string src, std::vector<std::string> &dest, const std::string delimiter);
106    bool SplitValue(std::string value, std::string &start, std::string &end, const std::string delimiter);
107
108private:
109    const HRilSmsReq *smsFuncs_ = nullptr;
110};
111} // namespace Telephony
112} // namespace OHOS
113#endif // OHOS_HRIL_SMS_H