1 /*
2 * Copyright (c) 2021-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 #include <securec.h>
17 #include "battery_device.h"
18
19 static BatInfo battInfo = {
20 80,
21 10,
22 20,
23 60,
24 CHARGE_STATE_ENABLE,
25 PLUGGED_TYPE_WIRELESS,
26 "Ternary_Lithium",
27 HEALTH_STATE_GOOD,
28 };
29
30 static BatteeryDeviceFeatureApi *g_batteryFeatureHandle = NULL;
31 static IBattery g_device;
32 static IBattery *g_ibattery = NULL;
33
BATTERY_GetName(Service * service)34 static const char *BATTERY_GetName(Service *service)
35 {
36 (void)service;
37 return BATTERY_DEVICE;
38 }
39
Initialize(Service * service,Identity identity)40 static BOOL Initialize(Service *service, Identity identity)
41 {
42 (void)service;
43 (void)identity;
44 return TRUE;
45 }
46
MessageHandle(Service * service,Request * msg)47 static BOOL MessageHandle(Service *service, Request *msg)
48 {
49 (void)service;
50 (void)msg;
51 return TRUE;
52 }
53
GetTaskConfig(Service * service)54 static TaskConfig GetTaskConfig(Service *service)
55 {
56 (void)service;
57 TaskConfig config = {LEVEL_HIGH, PRI_BELOW_NORMAL, TASK_CONFIG_STACK_SIZE, TASK_CONFIG_QUEUE_SIZE, SHARED_TASK};
58 return config;
59 }
60
Invoke(IServerProxy * iProxy,int funcId,void * origin,IpcIo * req,IpcIo * reply)61 static int32_t Invoke(IServerProxy *iProxy, int funcId, void *origin, IpcIo *req, IpcIo *reply)
62 {
63 (void)iProxy;
64 (void)funcId;
65 (void)origin;
66 (void)req;
67 (void)reply;
68 return BATTERY_OK;
69 }
70
GetSocImpl(void)71 int32_t GetSocImpl(void)
72 {
73 return battInfo.batSoc;
74 }
GetChargingStatusImpl(void)75 BatteryChargeState GetChargingStatusImpl(void)
76 {
77 return battInfo.chargingStatus;
78 }
GetHealthStatusImpl(void)79 BatteryHealthState GetHealthStatusImpl(void)
80 {
81 return battInfo.healthStatus;
82 }
GetPluggedTypeImpl(void)83 BatteryPluggedType GetPluggedTypeImpl(void)
84 {
85 return battInfo.pluggedType;
86 }
GetVoltageImpl(void)87 int32_t GetVoltageImpl(void)
88 {
89 return battInfo.batVoltage;
90 }
GetTechnologyImpl(void)91 char *GetTechnologyImpl(void)
92 {
93 return battInfo.BatTechnology;
94 }
GetTemperatureImpl(void)95 int32_t GetTemperatureImpl(void)
96 {
97 return battInfo.BatTemp;
98 }
TurnOnLedImpl(int red,int green,int blue)99 int TurnOnLedImpl(int red, int green, int blue)
100 {
101 (void)red;
102 (void)green;
103 (void)blue;
104 return BATTERY_OK;
105 }
TurnOffLedImpl(void)106 int TurnOffLedImpl(void)
107 {
108 return BATTERY_OK;
109 }
SetLedColorImpl(int red,int green,int blue)110 int SetLedColorImpl(int red, int green, int blue)
111 {
112 (void)red;
113 (void)green;
114 (void)blue;
115 return BATTERY_OK;
116 }
GetLedColorImpl(int * red,int * green,int * blue)117 int GetLedColorImpl(int *red, int *green, int *blue)
118 {
119 (void)red;
120 (void)green;
121 (void)blue;
122 return BATTERY_OK;
123 }
ShutDownImpl(void)124 void ShutDownImpl(void)
125 {
126 }
UpdateBatInfoImpl(BatInfo * battery)127 void UpdateBatInfoImpl(BatInfo *battery)
128 {
129 if (battery == NULL) {
130 return;
131 }
132 if (strcpy_s(battery->BatTechnology, BATTECHNOLOGY_LEN, battInfo.BatTechnology) != EOK) {
133 return;
134 }
135 battery->batSoc = battInfo.batSoc;
136 battery->batVoltage = battInfo.batVoltage;
137 battery->BatTemp = battInfo.BatTemp;
138 battery->batCapacity = battInfo.batCapacity;
139 battery->chargingStatus = battInfo.chargingStatus;
140 battery->pluggedType = battInfo.pluggedType;
141 battery->healthStatus = battInfo.healthStatus;
142 }
143
144 static BatteryDevice g_batteryDevice = {
145 .GetName = BATTERY_GetName,
146 .Initialize = Initialize,
147 .MessageHandle = MessageHandle,
148 .GetTaskConfig = GetTaskConfig,
149 SERVER_IPROXY_IMPL_BEGIN,
150 .Invoke = Invoke,
151 .GetSoc = GetSocImpl,
152 .GetChargingStatus = GetChargingStatusImpl,
153 .GetHealthStatus = GetHealthStatusImpl,
154 .GetPluggedType = GetPluggedTypeImpl,
155 .GetVoltage = GetVoltageImpl,
156 .GetTechnology = GetTechnologyImpl,
157 .GetTemperature = GetTemperatureImpl,
158 .TurnOnLed = TurnOnLedImpl,
159 .TurnOffLed = TurnOffLedImpl,
160 .SetLedColor = SetLedColorImpl,
161 .GetLedColor = GetLedColorImpl,
162 .ShutDown = ShutDownImpl,
163 .UpdateBatInfo = UpdateBatInfoImpl,
164 IPROXY_END,
165 };
166
ChargingApiGet(void)167 static void ChargingApiGet(void)
168 {
169 if (g_batteryFeatureHandle != NULL) {
170 return;
171 }
172 IUnknown *iUnknown = SAMGR_GetInstance()->GetDefaultFeatureApi(BATTERY_DEVICE);
173 if (iUnknown == NULL) {
174 return;
175 }
176 int ret = iUnknown->QueryInterface(iUnknown, DEFAULT_VERSION, (void **)(&g_batteryFeatureHandle));
177 if (ret != BATTERY_OK) {
178 return;
179 }
180 }
181
Init(void)182 static void Init(void)
183 {
184 BOOL result = SAMGR_GetInstance()->RegisterService((Service *)&g_batteryDevice);
185 if (result == FALSE) {
186 return;
187 }
188 BOOL apiResult = SAMGR_GetInstance()->RegisterDefaultFeatureApi(BATTERY_DEVICE, GET_IUNKNOWN(g_batteryDevice));
189 if (apiResult == FALSE) {
190 return;
191 }
192 }
193 SYSEX_SERVICE_INIT(Init);
194
195
GetBatteryDeviceMethods(void)196 static IBattery *GetBatteryDeviceMethods(void)
197 {
198 if (g_batteryFeatureHandle == NULL) {
199 return NULL;
200 }
201 g_device.GetSoc = g_batteryFeatureHandle->GetSoc;
202 g_device.GetChargingStatus = g_batteryFeatureHandle->GetChargingStatus;
203 g_device.GetHealthStatus = g_batteryFeatureHandle->GetHealthStatus;
204 g_device.GetPluggedType = g_batteryFeatureHandle->GetPluggedType;
205 g_device.GetVoltage = g_batteryFeatureHandle->GetVoltage;
206 g_device.GetTechnology = g_batteryFeatureHandle->GetTechnology;
207 g_device.GetTemperature = g_batteryFeatureHandle->GetTemperature;
208 g_device.TurnOnLed = g_batteryFeatureHandle->TurnOnLed;
209 g_device.TurnOffLed = g_batteryFeatureHandle->TurnOffLed;
210 g_device.SetLedColor = g_batteryFeatureHandle->SetLedColor;
211 g_device.GetLedColor = g_batteryFeatureHandle->GetLedColor;
212 g_device.ShutDown = g_batteryFeatureHandle->ShutDown;
213 g_device.UpdateBatInfo = g_batteryFeatureHandle->UpdateBatInfo;
214 return &g_device;
215 }
216
NewBatterInterfaceInstance(void)217 IBattery *NewBatterInterfaceInstance(void)
218 {
219 if (g_batteryFeatureHandle == NULL) {
220 ChargingApiGet();
221 }
222
223 g_ibattery = GetBatteryDeviceMethods();
224 if (g_ibattery == NULL) {
225 return NULL;
226 }
227 return g_ibattery;
228 }
229
FreeBatterInterfaceInstance(void)230 int32_t FreeBatterInterfaceInstance(void)
231 {
232 return 0;
233 }
234