1413470f0Sopenharmony_ci/* 2413470f0Sopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 3413470f0Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4413470f0Sopenharmony_ci * you may not use this file except in compliance with the License. 5413470f0Sopenharmony_ci * You may obtain a copy of the License at 6413470f0Sopenharmony_ci * 7413470f0Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8413470f0Sopenharmony_ci * 9413470f0Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10413470f0Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11413470f0Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12413470f0Sopenharmony_ci * See the License for the specific language governing permissions and 13413470f0Sopenharmony_ci * limitations under the License. 14413470f0Sopenharmony_ci */ 15413470f0Sopenharmony_ci 16413470f0Sopenharmony_ci#include <securec.h> 17413470f0Sopenharmony_ci#include "battery_device.h" 18413470f0Sopenharmony_ci 19413470f0Sopenharmony_cistatic BatInfo battInfo = { 20413470f0Sopenharmony_ci 80, 21413470f0Sopenharmony_ci 10, 22413470f0Sopenharmony_ci 20, 23413470f0Sopenharmony_ci 60, 24413470f0Sopenharmony_ci CHARGE_STATE_ENABLE, 25413470f0Sopenharmony_ci PLUGGED_TYPE_WIRELESS, 26413470f0Sopenharmony_ci "Ternary_Lithium", 27413470f0Sopenharmony_ci HEALTH_STATE_GOOD, 28413470f0Sopenharmony_ci}; 29413470f0Sopenharmony_ci 30413470f0Sopenharmony_cistatic BatteeryDeviceFeatureApi *g_batteryFeatureHandle = NULL; 31413470f0Sopenharmony_cistatic IBattery g_device; 32413470f0Sopenharmony_cistatic IBattery *g_ibattery = NULL; 33413470f0Sopenharmony_ci 34413470f0Sopenharmony_cistatic const char *BATTERY_GetName(Service *service) 35413470f0Sopenharmony_ci{ 36413470f0Sopenharmony_ci (void)service; 37413470f0Sopenharmony_ci return BATTERY_DEVICE; 38413470f0Sopenharmony_ci} 39413470f0Sopenharmony_ci 40413470f0Sopenharmony_cistatic BOOL Initialize(Service *service, Identity identity) 41413470f0Sopenharmony_ci{ 42413470f0Sopenharmony_ci (void)service; 43413470f0Sopenharmony_ci (void)identity; 44413470f0Sopenharmony_ci return TRUE; 45413470f0Sopenharmony_ci} 46413470f0Sopenharmony_ci 47413470f0Sopenharmony_cistatic BOOL MessageHandle(Service *service, Request *msg) 48413470f0Sopenharmony_ci{ 49413470f0Sopenharmony_ci (void)service; 50413470f0Sopenharmony_ci (void)msg; 51413470f0Sopenharmony_ci return TRUE; 52413470f0Sopenharmony_ci} 53413470f0Sopenharmony_ci 54413470f0Sopenharmony_cistatic TaskConfig GetTaskConfig(Service *service) 55413470f0Sopenharmony_ci{ 56413470f0Sopenharmony_ci (void)service; 57413470f0Sopenharmony_ci TaskConfig config = {LEVEL_HIGH, PRI_BELOW_NORMAL, TASK_CONFIG_STACK_SIZE, TASK_CONFIG_QUEUE_SIZE, SHARED_TASK}; 58413470f0Sopenharmony_ci return config; 59413470f0Sopenharmony_ci} 60413470f0Sopenharmony_ci 61413470f0Sopenharmony_cistatic int32_t Invoke(IServerProxy *iProxy, int funcId, void *origin, IpcIo *req, IpcIo *reply) 62413470f0Sopenharmony_ci{ 63413470f0Sopenharmony_ci (void)iProxy; 64413470f0Sopenharmony_ci (void)funcId; 65413470f0Sopenharmony_ci (void)origin; 66413470f0Sopenharmony_ci (void)req; 67413470f0Sopenharmony_ci (void)reply; 68413470f0Sopenharmony_ci return BATTERY_OK; 69413470f0Sopenharmony_ci} 70413470f0Sopenharmony_ci 71413470f0Sopenharmony_ciint32_t GetSocImpl(void) 72413470f0Sopenharmony_ci{ 73413470f0Sopenharmony_ci return battInfo.batSoc; 74413470f0Sopenharmony_ci} 75413470f0Sopenharmony_ciBatteryChargeState GetChargingStatusImpl(void) 76413470f0Sopenharmony_ci{ 77413470f0Sopenharmony_ci return battInfo.chargingStatus; 78413470f0Sopenharmony_ci} 79413470f0Sopenharmony_ciBatteryHealthState GetHealthStatusImpl(void) 80413470f0Sopenharmony_ci{ 81413470f0Sopenharmony_ci return battInfo.healthStatus; 82413470f0Sopenharmony_ci} 83413470f0Sopenharmony_ciBatteryPluggedType GetPluggedTypeImpl(void) 84413470f0Sopenharmony_ci{ 85413470f0Sopenharmony_ci return battInfo.pluggedType; 86413470f0Sopenharmony_ci} 87413470f0Sopenharmony_ciint32_t GetVoltageImpl(void) 88413470f0Sopenharmony_ci{ 89413470f0Sopenharmony_ci return battInfo.batVoltage; 90413470f0Sopenharmony_ci} 91413470f0Sopenharmony_cichar *GetTechnologyImpl(void) 92413470f0Sopenharmony_ci{ 93413470f0Sopenharmony_ci return battInfo.BatTechnology; 94413470f0Sopenharmony_ci} 95413470f0Sopenharmony_ciint32_t GetTemperatureImpl(void) 96413470f0Sopenharmony_ci{ 97413470f0Sopenharmony_ci return battInfo.BatTemp; 98413470f0Sopenharmony_ci} 99413470f0Sopenharmony_ciint TurnOnLedImpl(int red, int green, int blue) 100413470f0Sopenharmony_ci{ 101413470f0Sopenharmony_ci (void)red; 102413470f0Sopenharmony_ci (void)green; 103413470f0Sopenharmony_ci (void)blue; 104413470f0Sopenharmony_ci return BATTERY_OK; 105413470f0Sopenharmony_ci} 106413470f0Sopenharmony_ciint TurnOffLedImpl(void) 107413470f0Sopenharmony_ci{ 108413470f0Sopenharmony_ci return BATTERY_OK; 109413470f0Sopenharmony_ci} 110413470f0Sopenharmony_ciint SetLedColorImpl(int red, int green, int blue) 111413470f0Sopenharmony_ci{ 112413470f0Sopenharmony_ci (void)red; 113413470f0Sopenharmony_ci (void)green; 114413470f0Sopenharmony_ci (void)blue; 115413470f0Sopenharmony_ci return BATTERY_OK; 116413470f0Sopenharmony_ci} 117413470f0Sopenharmony_ciint GetLedColorImpl(int *red, int *green, int *blue) 118413470f0Sopenharmony_ci{ 119413470f0Sopenharmony_ci (void)red; 120413470f0Sopenharmony_ci (void)green; 121413470f0Sopenharmony_ci (void)blue; 122413470f0Sopenharmony_ci return BATTERY_OK; 123413470f0Sopenharmony_ci} 124413470f0Sopenharmony_civoid ShutDownImpl(void) 125413470f0Sopenharmony_ci{ 126413470f0Sopenharmony_ci} 127413470f0Sopenharmony_civoid UpdateBatInfoImpl(BatInfo *battery) 128413470f0Sopenharmony_ci{ 129413470f0Sopenharmony_ci if (battery == NULL) { 130413470f0Sopenharmony_ci return; 131413470f0Sopenharmony_ci } 132413470f0Sopenharmony_ci if (strcpy_s(battery->BatTechnology, BATTECHNOLOGY_LEN, battInfo.BatTechnology) != EOK) { 133413470f0Sopenharmony_ci return; 134413470f0Sopenharmony_ci } 135413470f0Sopenharmony_ci battery->batSoc = battInfo.batSoc; 136413470f0Sopenharmony_ci battery->batVoltage = battInfo.batVoltage; 137413470f0Sopenharmony_ci battery->BatTemp = battInfo.BatTemp; 138413470f0Sopenharmony_ci battery->batCapacity = battInfo.batCapacity; 139413470f0Sopenharmony_ci battery->chargingStatus = battInfo.chargingStatus; 140413470f0Sopenharmony_ci battery->pluggedType = battInfo.pluggedType; 141413470f0Sopenharmony_ci battery->healthStatus = battInfo.healthStatus; 142413470f0Sopenharmony_ci} 143413470f0Sopenharmony_ci 144413470f0Sopenharmony_cistatic BatteryDevice g_batteryDevice = { 145413470f0Sopenharmony_ci .GetName = BATTERY_GetName, 146413470f0Sopenharmony_ci .Initialize = Initialize, 147413470f0Sopenharmony_ci .MessageHandle = MessageHandle, 148413470f0Sopenharmony_ci .GetTaskConfig = GetTaskConfig, 149413470f0Sopenharmony_ci SERVER_IPROXY_IMPL_BEGIN, 150413470f0Sopenharmony_ci .Invoke = Invoke, 151413470f0Sopenharmony_ci .GetSoc = GetSocImpl, 152413470f0Sopenharmony_ci .GetChargingStatus = GetChargingStatusImpl, 153413470f0Sopenharmony_ci .GetHealthStatus = GetHealthStatusImpl, 154413470f0Sopenharmony_ci .GetPluggedType = GetPluggedTypeImpl, 155413470f0Sopenharmony_ci .GetVoltage = GetVoltageImpl, 156413470f0Sopenharmony_ci .GetTechnology = GetTechnologyImpl, 157413470f0Sopenharmony_ci .GetTemperature = GetTemperatureImpl, 158413470f0Sopenharmony_ci .TurnOnLed = TurnOnLedImpl, 159413470f0Sopenharmony_ci .TurnOffLed = TurnOffLedImpl, 160413470f0Sopenharmony_ci .SetLedColor = SetLedColorImpl, 161413470f0Sopenharmony_ci .GetLedColor = GetLedColorImpl, 162413470f0Sopenharmony_ci .ShutDown = ShutDownImpl, 163413470f0Sopenharmony_ci .UpdateBatInfo = UpdateBatInfoImpl, 164413470f0Sopenharmony_ci IPROXY_END, 165413470f0Sopenharmony_ci}; 166413470f0Sopenharmony_ci 167413470f0Sopenharmony_cistatic void ChargingApiGet(void) 168413470f0Sopenharmony_ci{ 169413470f0Sopenharmony_ci if (g_batteryFeatureHandle != NULL) { 170413470f0Sopenharmony_ci return; 171413470f0Sopenharmony_ci } 172413470f0Sopenharmony_ci IUnknown *iUnknown = SAMGR_GetInstance()->GetDefaultFeatureApi(BATTERY_DEVICE); 173413470f0Sopenharmony_ci if (iUnknown == NULL) { 174413470f0Sopenharmony_ci return; 175413470f0Sopenharmony_ci } 176413470f0Sopenharmony_ci int ret = iUnknown->QueryInterface(iUnknown, DEFAULT_VERSION, (void **)(&g_batteryFeatureHandle)); 177413470f0Sopenharmony_ci if (ret != BATTERY_OK) { 178413470f0Sopenharmony_ci return; 179413470f0Sopenharmony_ci } 180413470f0Sopenharmony_ci} 181413470f0Sopenharmony_ci 182413470f0Sopenharmony_cistatic void Init(void) 183413470f0Sopenharmony_ci{ 184413470f0Sopenharmony_ci BOOL result = SAMGR_GetInstance()->RegisterService((Service *)&g_batteryDevice); 185413470f0Sopenharmony_ci if (result == FALSE) { 186413470f0Sopenharmony_ci return; 187413470f0Sopenharmony_ci } 188413470f0Sopenharmony_ci BOOL apiResult = SAMGR_GetInstance()->RegisterDefaultFeatureApi(BATTERY_DEVICE, GET_IUNKNOWN(g_batteryDevice)); 189413470f0Sopenharmony_ci if (apiResult == FALSE) { 190413470f0Sopenharmony_ci return; 191413470f0Sopenharmony_ci } 192413470f0Sopenharmony_ci} 193413470f0Sopenharmony_ciSYSEX_SERVICE_INIT(Init); 194413470f0Sopenharmony_ci 195413470f0Sopenharmony_ci 196413470f0Sopenharmony_cistatic IBattery *GetBatteryDeviceMethods(void) 197413470f0Sopenharmony_ci{ 198413470f0Sopenharmony_ci if (g_batteryFeatureHandle == NULL) { 199413470f0Sopenharmony_ci return NULL; 200413470f0Sopenharmony_ci } 201413470f0Sopenharmony_ci g_device.GetSoc = g_batteryFeatureHandle->GetSoc; 202413470f0Sopenharmony_ci g_device.GetChargingStatus = g_batteryFeatureHandle->GetChargingStatus; 203413470f0Sopenharmony_ci g_device.GetHealthStatus = g_batteryFeatureHandle->GetHealthStatus; 204413470f0Sopenharmony_ci g_device.GetPluggedType = g_batteryFeatureHandle->GetPluggedType; 205413470f0Sopenharmony_ci g_device.GetVoltage = g_batteryFeatureHandle->GetVoltage; 206413470f0Sopenharmony_ci g_device.GetTechnology = g_batteryFeatureHandle->GetTechnology; 207413470f0Sopenharmony_ci g_device.GetTemperature = g_batteryFeatureHandle->GetTemperature; 208413470f0Sopenharmony_ci g_device.TurnOnLed = g_batteryFeatureHandle->TurnOnLed; 209413470f0Sopenharmony_ci g_device.TurnOffLed = g_batteryFeatureHandle->TurnOffLed; 210413470f0Sopenharmony_ci g_device.SetLedColor = g_batteryFeatureHandle->SetLedColor; 211413470f0Sopenharmony_ci g_device.GetLedColor = g_batteryFeatureHandle->GetLedColor; 212413470f0Sopenharmony_ci g_device.ShutDown = g_batteryFeatureHandle->ShutDown; 213413470f0Sopenharmony_ci g_device.UpdateBatInfo = g_batteryFeatureHandle->UpdateBatInfo; 214413470f0Sopenharmony_ci return &g_device; 215413470f0Sopenharmony_ci} 216413470f0Sopenharmony_ci 217413470f0Sopenharmony_ciIBattery *NewBatterInterfaceInstance(void) 218413470f0Sopenharmony_ci{ 219413470f0Sopenharmony_ci if (g_batteryFeatureHandle == NULL) { 220413470f0Sopenharmony_ci ChargingApiGet(); 221413470f0Sopenharmony_ci } 222413470f0Sopenharmony_ci 223413470f0Sopenharmony_ci g_ibattery = GetBatteryDeviceMethods(); 224413470f0Sopenharmony_ci if (g_ibattery == NULL) { 225413470f0Sopenharmony_ci return NULL; 226413470f0Sopenharmony_ci } 227413470f0Sopenharmony_ci return g_ibattery; 228413470f0Sopenharmony_ci} 229413470f0Sopenharmony_ci 230413470f0Sopenharmony_ciint32_t FreeBatterInterfaceInstance(void) 231413470f0Sopenharmony_ci{ 232413470f0Sopenharmony_ci return 0; 233413470f0Sopenharmony_ci} 234