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#include <feature.h>
17#include <samgr_lite.h>
18#include "ibattery.h"
19#include "battery_manage_feature.h"
20#include "battery_device.h"
21
22static const int BATT_INT_VALUE = 0;
23
24const char *GetFeatureName(Feature *feature)
25{
26    (void)feature;
27    return BATTERY_INNER;
28}
29
30void OnFeatureInitialize(Feature *feature, Service *parent, Identity identity)
31{
32    (void)feature;
33    (void)identity;
34}
35
36void OnFeatureStop(Feature *feature, Identity identity)
37{
38    (void)feature;
39    (void)identity;
40}
41
42BOOL OnFeatureMessage(Feature *feature, Request *request)
43{
44    return ((feature != NULL) && (request != NULL)) ? TRUE : FALSE;
45}
46
47int32_t BatterySocImpl(IUnknown *iUnknown)
48{
49    int32_t soc = BATT_INT_VALUE;
50    g_batteryDevice = NewBatterInterfaceInstance();
51    if (g_batteryDevice == NULL) {
52        return soc;
53    }
54    soc = g_batteryDevice->GetSoc();
55    return soc;
56}
57BatteryChargeState ChargingStatusImpl(IUnknown *iUnknown)
58{
59    BatteryChargeState chargingstate = CHARGE_STATE_BUTT;
60    g_batteryDevice = NewBatterInterfaceInstance();
61    if (g_batteryDevice == NULL) {
62        return chargingstate;
63    }
64    chargingstate = g_batteryDevice->GetChargingStatus();
65    return chargingstate;
66}
67BatteryHealthState HealthStatusImpl(IUnknown *iUnknown)
68{
69    BatteryHealthState healthState = HEALTH_STATE_BUTT;
70    g_batteryDevice = NewBatterInterfaceInstance();
71    if (g_batteryDevice == NULL) {
72        return healthState;
73    }
74    healthState = g_batteryDevice->GetHealthStatus();
75    return healthState;
76}
77BatteryPluggedType PluggedTypeImpl(IUnknown *iUnknown)
78{
79    BatteryPluggedType pluggedType = PLUGGED_TYPE_BUTT;
80    g_batteryDevice = NewBatterInterfaceInstance();
81    if (g_batteryDevice == NULL) {
82        return pluggedType;
83    }
84    pluggedType = g_batteryDevice->GetPluggedType();
85    return pluggedType;
86}
87int32_t VoltageImpl(IUnknown *iUnknown)
88{
89    int32_t voltage = BATT_INT_VALUE;
90    g_batteryDevice = NewBatterInterfaceInstance();
91    if (g_batteryDevice == NULL) {
92        return voltage;
93    }
94    voltage = g_batteryDevice->GetVoltage();
95    return voltage;
96}
97char* TechnologyImpl(IUnknown *iUnknown)
98{
99    char* technology = NULL;
100    g_batteryDevice = NewBatterInterfaceInstance();
101    if (g_batteryDevice == NULL) {
102        return technology;
103    }
104    technology = g_batteryDevice->GetTechnology();
105    return technology;
106}
107int32_t BatteryTemperatureImpl(IUnknown *iUnknown)
108{
109    int32_t temperature = BATT_INT_VALUE;
110    g_batteryDevice = NewBatterInterfaceInstance();
111    if (g_batteryDevice == NULL) {
112        return temperature;
113    }
114    temperature = g_batteryDevice->GetTemperature();
115    return temperature;
116}
117
118static void GInit()
119{
120    BatteryFeatureApi *feature = GetBatteryFeatureImpl();
121    if (feature == NULL) {
122        return;
123    }
124
125    BOOL result = SAMGR_GetInstance()->RegisterFeature(BATTERY_SERVICE, (Feature *)feature);
126    if (result == FALSE) {
127        return;
128    }
129    BOOL apiResult = SAMGR_GetInstance()->RegisterFeatureApi(BATTERY_SERVICE, BATTERY_INNER, GET_IUNKNOWN(*feature));
130    if (apiResult == FALSE) {
131        return;
132    }
133}
134SYSEX_FEATURE_INIT(GInit);