text: /*
   * Copyright (c) 2021 bestechnic (Shanghai) Technologies CO., LIMITED.
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  #ifndef __APP_BATTERY_H__
  #define __APP_BATTERY_H__
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  #include <stdint.h>
  
  
  #define APP_BATTERY_LEVEL_MIN (0)
  
  #ifdef __INTERCONNECTION__
  #define APP_BATTERY_LEVEL_MAX (100)
  #define APP_BATTERY_DEFAULT_INFO 0xE4
  
  typedef struct
  {
      uint8_t chargingStatus : 1;
      uint8_t batteryLevel : 7;
  }APP_BATTERY_INFO_T;
  
  uint8_t* app_battery_get_mobile_support_self_defined_command_p(void);
  #else // #ifdef __INTERCONNECTION__
  #define APP_BATTERY_LEVEL_MAX (9)
  #endif // #ifdef __INTERCONNECTION__
  
  #define APP_BATTERY_LEVEL_NUM (APP_BATTERY_LEVEL_MAX-APP_BATTERY_LEVEL_MIN+1)
  
  enum APP_BATTERY_STATUS_T {
      APP_BATTERY_STATUS_NORMAL,
      APP_BATTERY_STATUS_CHARGING,
      APP_BATTERY_STATUS_OVERVOLT,
      APP_BATTERY_STATUS_UNDERVOLT,
      APP_BATTERY_STATUS_PDVOLT,
      APP_BATTERY_STATUS_PLUGINOUT,
      APP_BATTERY_STATUS_INVALID,
  
      APP_BATTERY_STATUS_QTY
  };
  
  #define APP_BATTERY_OPEN_MODE_INVALID        (-1)
  #define APP_BATTERY_OPEN_MODE_NORMAL         (0)
  #define APP_BATTERY_OPEN_MODE_CHARGING       (1)
  #define APP_BATTERY_OPEN_MODE_CHARGING_PWRON (2)
  
  typedef uint16_t APP_BATTERY_MV_T;
  
  enum APP_BATTERY_CHARGER_T
  {
      APP_BATTERY_CHARGER_PLUGOUT = 0,
      APP_BATTERY_CHARGER_PLUGIN,
      APP_BATTERY_CHARGER_QTY,
  };
  
  union APP_BATTERY_MSG_PRAMS{
      APP_BATTERY_MV_T volt;
      enum APP_BATTERY_CHARGER_T charger;
      uint32_t prams;
  };
  
  typedef void (*APP_BATTERY_CB_T)(APP_BATTERY_MV_T currvolt, uint8_t currlevel,enum APP_BATTERY_STATUS_T curstatus,uint32_t status,  union APP_BATTERY_MSG_PRAMS prams);
  
  
  int app_battery_get_info(APP_BATTERY_MV_T *currvolt, uint8_t *currlevel, enum APP_BATTERY_STATUS_T *status);
  
  /**
   * Battery App owns its own context where it will periodically update the
   * battery level and state. Makes sense for it to act as a Model and publish
   * battery change events to any interested users.
   *
   * Note: Callback will execute out of BES "App Thread" context.
   *
   * TODO: ideally implemented as proper observer pattern with support for multiple
   *       listeners
   *
   * Returns
   *  - 0: On success
   *  - 1: If registration failed
   */
  int app_battery_register(APP_BATTERY_CB_T user_cb);
  
  int app_battery_open(void);
  
  int app_battery_start(void);
  
  int app_battery_stop(void);
  
  int app_battery_close(void);
  
  int app_battery_charger_indication_open(void);
  
  int8_t app_battery_current_level(void);
  
  int8_t app_battery_is_charging(void);
  
  int ntc_capture_open(void);
  
  int ntc_capture_start(void);
  
  #ifdef __cplusplus
  }
  #endif
  
  
  #endif
  