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 
21 namespace OHOS {
22 namespace Telephony {
23 class HRilSms : public HRilBase {
24 public:
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 
87 private:
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 
108 private:
109     const HRilSmsReq *smsFuncs_ = nullptr;
110 };
111 } // namespace Telephony
112 } // namespace OHOS
113 #endif // OHOS_HRIL_SMS_H