1e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji/******************************************************************************
2e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji *
3e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji *  Copyright (C) 2014  Broadcom Corporation
4e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji *
5e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji *  Licensed under the Apache License, Version 2.0 (the "License");
6e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji *  you may not use this file except in compliance with the License.
7e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji *  You may obtain a copy of the License at:
8e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji *
9e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji *  http://www.apache.org/licenses/LICENSE-2.0
10e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji *
11e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji *  Unless required by applicable law or agreed to in writing, software
12e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji *  distributed under the License is distributed on an "AS IS" BASIS,
13e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji *  See the License for the specific language governing permissions and
15e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji *  limitations under the License.
16e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji *
17e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji ******************************************************************************/
18e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji
19e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji#include <string.h>
20e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji#include "bt_target.h"
21e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji
22e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji#if (BLE_INCLUDED == TRUE)
23e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji#include "bt_types.h"
24e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji#include "hcimsgs.h"
25e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji#include "btu.h"
26e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji#include "btm_int.h"
27e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji#include "bt_utils.h"
28e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji#include "hcidefs.h"
29e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji#include "btm_ble_api.h"
30e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji
31e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya CallojitBTM_BLE_ENERGY_INFO_CB ble_energy_info_cb;
32e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji
33e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji/*******************************************************************************
34e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji**
35e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji** Function         btm_ble_cont_energy_cmpl_cback
36e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji**
37e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji** Description      Controller VSC complete callback
38e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji**
39e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji** Parameters
40e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji**
41e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji** Returns          void
42e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji**
43e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji*******************************************************************************/
44e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Callojivoid btm_ble_cont_energy_cmpl_cback (tBTM_VSC_CMPL *p_params)
45e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji{
46e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    UINT8  *p = p_params->p_param_buf;
47e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    UINT16  len = p_params->param_len;
48e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    UINT8  status = 0;
49e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    UINT32 total_tx_time = 0, total_rx_time = 0, total_idle_time = 0, total_energy_used = 0;
50e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji
51e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    if (len < 17)
52e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    {
53e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji        BTM_TRACE_ERROR("wrong length for btm_ble_cont_energy_cmpl_cback");
54e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji        return;
55e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    }
56e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji
57e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    STREAM_TO_UINT8(status, p);
58e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    STREAM_TO_UINT32(total_tx_time, p);
59e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    STREAM_TO_UINT32(total_rx_time, p);
60e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    STREAM_TO_UINT32(total_idle_time, p);
61e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    STREAM_TO_UINT32(total_energy_used, p);
62e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji
63e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    BTM_TRACE_DEBUG("energy_info status=%d,tx_t=%ld, rx_t=%ld, ener_used=%ld, idle_t=%ld",
64e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji        status, total_tx_time, total_rx_time, total_energy_used, total_idle_time);
65e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji
66e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    if (NULL != ble_energy_info_cb.p_ener_cback)
67e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji        ble_energy_info_cb.p_ener_cback(total_tx_time, total_rx_time, total_idle_time,
68e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji                          total_energy_used, status);
69e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji
70e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    return;
71e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji}
72e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji
73e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji/*******************************************************************************
74e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji**
75e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji** Function         BTM_BleGetEnergyInfo
76e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji**
77e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji** Description      This function obtains the energy info
78e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji**
79e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji** Parameters      p_ener_cback - Callback pointer
80e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji**
81e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji** Returns          status
82e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji**
83e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji*******************************************************************************/
84e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya CallojitBTM_STATUS BTM_BleGetEnergyInfo(tBTM_BLE_ENERGY_INFO_CBACK *p_ener_cback)
85e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji{
86e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    tBTM_STATUS status = BTM_ILLEGAL_VALUE;
87e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    tBTM_BLE_VSC_CB cmn_ble_vsc_cb;
88e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji
89e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    BTM_BleGetVendorCapabilities(&cmn_ble_vsc_cb);
90e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji
91e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    BTM_TRACE_EVENT("BTM_BleGetEnergyInfo");
92e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji
93e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    if (0 == cmn_ble_vsc_cb.energy_support)
94e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    {
95e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji        BTM_TRACE_ERROR("Controller does not support get energy info");
96e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji        return BTM_ERR_PROCESSING;
97e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    }
98e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji
99e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    ble_energy_info_cb.p_ener_cback = p_ener_cback;
100e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    if ((status = BTM_VendorSpecificCommand (HCI_BLE_ENERGY_INFO_OCF, 0, NULL,
101e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji                   btm_ble_cont_energy_cmpl_cback)) != BTM_CMD_STARTED)
102e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    {
103e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji        BTM_TRACE_ERROR("BTM_BleGetEnergyInfo status: %d", status);
104e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji        return BTM_ILLEGAL_VALUE;
105e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    }
106e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji
107e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji    return status;
108e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji}
109e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji
110e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji#endif
111e5ba8841cd39e17c05aeb4ab65b5b761d41577daSatya Calloji
112