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 ############
17 This file is used to support compatibility between platforms, differences between old and new projects and
18 compilation platforms
19 
20 defined HARMONY_PROJECT
21 With openharmony toolchains support. If not defined, it should be [device]buildroot or [PC]msys64(...)/ubuntu-apt(...)
22 envirments
23 ############
24 */
25 #include "system_depend.h"
26 #include "base.h"
27 #if defined(HARMONY_PROJECT)
28 extern "C" {
29 #include "init_reboot.h"
30 #include "parameter.h"
31 }
32 #endif
33 
34 namespace Hdc {
35 namespace SystemDepend {
SetDevItem(const char *key, const char *value)36     bool SetDevItem(const char *key, const char *value)
37     {
38         bool ret = true;
39 #ifdef HARMONY_PROJECT
40         ret = SetParameter(key, value) == 0;
41 #else
42         char outBuf[256] = "";
43         string stringBuf = Base::StringFormat("param set %s %s", key, value);
44         Base::RunPipeComand(stringBuf.c_str(), outBuf, sizeof(outBuf), true);
45 #endif  // HARMONY_PROJECT
46         return ret;
47     }
48 
GetDevItem(const char *key, string &out, const char *preDefine)49     bool GetDevItem(const char *key, string &out, const char *preDefine)
50     {
51         bool ret = true;
52         char tmpStringBuf[BUF_SIZE_MEDIUM] = "";
53 #ifdef HARMONY_PROJECT
54         auto res = GetParameter(key, preDefine, tmpStringBuf, BUF_SIZE_MEDIUM);
55         if (res <= 0) {
56             return false;
57         }
58 #else
59         string sFailString = Base::StringFormat("Get parameter \"%s\" fail", key);
60         string stringBuf = "param get " + string(key);
61         Base::RunPipeComand(stringBuf.c_str(), tmpStringBuf, BUF_SIZE_MEDIUM - 1, true);
62         if (!strcmp(sFailString.c_str(), tmpStringBuf)) {
63             // failed
64             ret = false;
65             Base::ZeroBuf(tmpStringBuf, BUF_SIZE_MEDIUM);
66         }
67 #endif
68         out = tmpStringBuf;
69         return ret;
70     }
71 
GetDevUint(const char *key, uint32_t defaultValue)72     uint32_t GetDevUint(const char *key, uint32_t defaultValue)
73     {
74         return GetUintParameter(key, defaultValue);
75     }
76 
CallDoReboot(const char *reason)77     bool CallDoReboot(const char *reason)
78     {
79         string rebootCtrl = "ohos.startup.powerctrl";
80 #ifdef HARMONY_PROJECT
81         return SetDevItem(rebootCtrl.c_str(), reason);
82 #else
83         return false;
84 #endif
85     }
86 
RebootDevice(const string &cmd)87     bool RebootDevice(const string &cmd)
88     {
89         string reason = "reboot";
90         if (cmd != "") {
91             reason += ",";
92             reason += cmd;
93         }
94         WRITE_LOG(LOG_DEBUG, "DoReboot with args:[%s] for cmd:[%s]", reason.c_str(), cmd.c_str());
95         return CallDoReboot(reason.c_str());
96     }
97 }
98 }  // namespace Hdc
99