提交低电提醒,每10s获取一次电量,低于3500mv播报语音设备电量低

This commit is contained in:
dianke3yu 2025-06-06 18:02:53 +08:00
parent 410018accb
commit 2d5c89be30
7 changed files with 1785 additions and 66 deletions

File diff suppressed because it is too large Load Diff

View File

@ -33,7 +33,7 @@ extern "C" {
{GPIO_10, GPIO_SECOND_FUNC_ENABLE, GPIO_DEV_UART1_RXD, GPIO_IO_DISABLE, GPIO_PULL_UP_EN, GPIO_INT_DISABLE, GPIO_INT_TYPE_LOW_LEVEL, GPIO_LOW_POWER_DISCARD_IO_STATUS, GPIO_DRIVER_CAPACITY_0},\
{GPIO_11, GPIO_SECOND_FUNC_ENABLE, GPIO_DEV_UART1_TXD, GPIO_IO_DISABLE, GPIO_PULL_UP_EN, GPIO_INT_DISABLE, GPIO_INT_TYPE_LOW_LEVEL, GPIO_LOW_POWER_DISCARD_IO_STATUS, GPIO_DRIVER_CAPACITY_0},\
{GPIO_12, GPIO_SECOND_FUNC_DISABLE, GPIO_DEV_INVALID, GPIO_INPUT_ENABLE, GPIO_PULL_UP_EN, GPIO_INT_DISABLE, GPIO_INT_TYPE_LOW_LEVEL, GPIO_LOW_POWER_DISCARD_IO_STATUS, GPIO_DRIVER_CAPACITY_0},\
{GPIO_13, GPIO_SECOND_FUNC_DISABLE, GPIO_DEV_INVALID, GPIO_INPUT_ENABLE, GPIO_PULL_UP_EN, GPIO_INT_DISABLE, GPIO_INT_TYPE_LOW_LEVEL, GPIO_LOW_POWER_DISCARD_IO_STATUS, GPIO_DRIVER_CAPACITY_0},\
{GPIO_13, GPIO_SECOND_FUNC_ENABLE, GPIO_DEV_ADC15, GPIO_IO_DISABLE, GPIO_PULL_DISABLE, GPIO_INT_DISABLE, GPIO_INT_TYPE_LOW_LEVEL, GPIO_LOW_POWER_DISCARD_IO_STATUS, GPIO_DRIVER_CAPACITY_0},\
{GPIO_14, GPIO_SECOND_FUNC_ENABLE, GPIO_DEV_SDIO_HOST_CLK, GPIO_IO_DISABLE, GPIO_PULL_DISABLE, GPIO_INT_DISABLE, GPIO_INT_TYPE_LOW_LEVEL, GPIO_LOW_POWER_DISCARD_IO_STATUS, GPIO_DRIVER_CAPACITY_3},\
{GPIO_15, GPIO_SECOND_FUNC_ENABLE, GPIO_DEV_SDIO_HOST_CMD, GPIO_IO_DISABLE, GPIO_PULL_DISABLE, GPIO_INT_DISABLE, GPIO_INT_TYPE_LOW_LEVEL, GPIO_LOW_POWER_DISCARD_IO_STATUS, GPIO_DRIVER_CAPACITY_1},\
{GPIO_16, GPIO_SECOND_FUNC_ENABLE, GPIO_DEV_SDIO_HOST_DATA0, GPIO_IO_DISABLE, GPIO_PULL_DISABLE, GPIO_INT_DISABLE, GPIO_INT_TYPE_LOW_LEVEL, GPIO_LOW_POWER_DISCARD_IO_STATUS, GPIO_DRIVER_CAPACITY_1},\

View File

@ -4,7 +4,7 @@ set(srcs)
list(APPEND srcs
app_main.c
spi_led.c
bat_main.c
)
if (CONFIG_SYS_CPU0)

View File

@ -27,7 +27,7 @@
#include "bk_ota_private.h"
#define TAG "app_evt"
#include "spi_led.h" //zhanyu
#include "bat_main.h"//zhanyu
#define LOGI(...) BK_LOGI(TAG, ##__VA_ARGS__)
#define LOGW(...) BK_LOGW(TAG, ##__VA_ARGS__)
#define LOGE(...) BK_LOGE(TAG, ##__VA_ARGS__)
@ -162,6 +162,25 @@ static uint8_t battery_event_callback(evt_battery event_param)
return 0;
}
static uint8_t battery_main_event_callback(evt_main_battery event_param)//zhanyu
{
switch (event_param)
{
case EVT_BATTERY_MAIN_CHARGING:
app_event_send_msg(APP_EVT_CHARGING, 0);
break;
case EVT_BATTERY_MAIN_LOW_VOLTAGE:
app_event_send_msg(APP_EVT_LOW_VOLTAGE, 0);
break;
case EVT_SHUTDOWN_MAIN_LOW_BATTERY:
app_event_send_msg(APP_EVT_SHUTDOWN_LOW_BATTERY, 0);
break;
default:
break;
}
return 0;
}
// red:if high priority conflicts with low-priority, should stay at high priority states
enum
{
@ -337,7 +356,10 @@ static void app_event_thread(beken_thread_arg_t data)
ota_event_callback_register(ota_event_callback);
update_countdown();
battery_event_callback_register(battery_event_callback);
battery_event_callback_register(battery_event_callback);
battery_main_event_callback_register(battery_main_event_callback);//zhanyu
media_app_asr_evt_register_callback(app_event_asr_evt_callback);
while (1)
@ -504,8 +526,9 @@ static void app_event_thread(beken_thread_arg_t data)
case APP_EVT_LOW_VOLTAGE:
LOGI("APP_EVT_LOW_VOLTAGE\n");
skip_countdown_update = true;
warning_state |= 1 << WARNING_LOW_BATTERY;
//zhanyu
// skip_countdown_update = true;
// warning_state |= 1 << WARNING_LOW_BATTERY;
#if CONFIG_AUD_INTF_SUPPORT_PROMPT_TONE
bk_aud_intf_voc_play_prompt_tone(AUD_INTF_VOC_LOW_VOLTAGE);
#endif

View File

@ -41,6 +41,7 @@
#include "components/bluetooth/bk_dm_bluetooth.h"
#include "app_main.h"
#include "spi_led.h"
#include "bat_main.h"
extern void user_app_main(void);
@ -57,6 +58,9 @@ extern void bk_set_jtag_mode(uint32_t cpu_id, uint32_t group_id);
#define CONFIG_WIFI_SSID "BEKEN-CES" //"test123"//"biubiu"//"MEGSCREEN_TEST"//"cs-ruowang-2.4G"//"Carl"//"NXIOT"
#define CONFIG_WIFI_PASSWORD "1233211234567" //"1234567890"//"87654321"//"987654321"//"wohenruo"//"12345678"//"88888888"
//static UINT8 flag = 0;
#ifdef CONFIG_LDO3V3_ENABLE
#ifndef LDO3V3_CTRL_GPIO
#ifdef CONFIG_LDO3V3_CTRL_GPIO
@ -285,69 +289,69 @@ void ai_agent_config()
long to execute, it will cause subsequent key events to be responded to untimely.*/
static void handle_system_event(key_event_t event)
{
uint32_t time;
// uint32_t time;
extern void bk_bt_app_avrcp_ct_vol_change(uint32_t platform_vol);
switch (event)
{
case VOLUME_UP:
{
uint32_t old_volume = volume;
volume_increase();
if (old_volume != volume)
{
#if CONFIG_A2DP_SINK_DEMO
bk_bt_app_avrcp_ct_vol_change(volume);
#endif
}
}
break;
case VOLUME_DOWN:
{
uint32_t old_volume = volume;
volume_decrease();
if (old_volume != volume)
{
#if CONFIG_A2DP_SINK_DEMO
bk_bt_app_avrcp_ct_vol_change(volume);
#endif
}
}
break;
case SHUT_DOWN:
time = rtos_get_time(); // long press more than 6s
if (time < 9000)
{
break;
}
power_off();
break;
case POWER_ON:
power_on();
break;
case AI_AGENT_CONFIG:
ai_agent_config();
break;
case CONFIG_NETWORK:
BK_LOGW(TAG, "Start to config network!\n");
// case VOLUME_UP:
// {
// uint32_t old_volume = volume;
// volume_increase();
// if (old_volume != volume)
// {
// #if CONFIG_A2DP_SINK_DEMO
// bk_bt_app_avrcp_ct_vol_change(volume);
// #endif
// }
// }
// break;
// case VOLUME_DOWN:
// {
// uint32_t old_volume = volume;
// volume_decrease();
// if (old_volume != volume)
// {
// #if CONFIG_A2DP_SINK_DEMO
// bk_bt_app_avrcp_ct_vol_change(volume);
// #endif
// }
// }
// break;
// case SHUT_DOWN:
// time = rtos_get_time(); // long press more than 6s
// if (time < 9000)
// {
// break;
// }
// power_off();
// break;
// case POWER_ON:
// power_on();
// break;
// case AI_AGENT_CONFIG:
// ai_agent_config();
// break;
// case CONFIG_NETWORK:
// BK_LOGW(TAG, "Start to config network!\n");
int ret = rtos_create_thread(&config_network_thread_handle,
CONFIG_NETWORK_TASK_PRIORITY,
"wifi_config_network",
(beken_thread_function_t)prepare_config_network_main,
4096,
(beken_thread_arg_t)0);
if (ret != kNoErr)
{
BK_LOGE(TAG, "wifi config network task fail \r\n");
config_network_thread_handle = NULL;
}
break;
case FACTORY_RESET:
BK_LOGW(TAG, "trigger factory config reset\r\n");
bk_bluetooth_deinit();
bk_factory_reset();
bk_reboot();
break;
// int ret = rtos_create_thread(&config_network_thread_handle,
// CONFIG_NETWORK_TASK_PRIORITY,
// "wifi_config_network",
// (beken_thread_function_t)prepare_config_network_main,
// 4096,
// (beken_thread_arg_t)0);
// if (ret != kNoErr)
// {
// BK_LOGE(TAG, "wifi config network task fail \r\n");
// config_network_thread_handle = NULL;
// }
// break;
// case FACTORY_RESET:
// BK_LOGW(TAG, "trigger factory config reset\r\n");
// bk_bluetooth_deinit();
// bk_factory_reset();
// bk_reboot();
// break;
case TURN_OFF_LOGHT:
bk_printf("ispoweron = %d\n", ispoweron);
// clearallled();
@ -655,6 +659,7 @@ static void handle_system_event(key_event_t event)
//poka
ws2812_init();
thing_init();
init_bat_timer();
// spi_led_init();
bk_printf("VER:1.0.3 2025.05.27\r\n");
#endif

View File

@ -0,0 +1,213 @@
#include <common/sys_config.h>
#include <components/log.h>
#include <modules/wifi.h>
#include <components/netif.h>
#include <components/event.h>
#include <string.h>
#include "bk_private/bk_init.h"
#include <components/system.h>
#include <os/os.h>
#include <components/shell_task.h>
#include "cli.h"
#include "media_service.h"
#include <driver/pwr_clk.h>
#include <driver/pwr_clk.h>
#include <modules/pm.h>
#if CONFIG_BUTTON
#include <key_main.h>
#include <key_adapter.h>
#endif
#include "sys_driver.h"
#include "sys_hal.h"
#include <driver/gpio.h>
#include "gpio_driver.h"
#include "bk_genie_comm.h"
#include "wifi_boarding_utils.h"
#if (CONFIG_SYS_CPU0)
#include "beken_config.h"
#include "aud_intf.h"
#include "bk_factory_config.h"
#if CONFIG_NETWORK_AUTO_RECONNECT
#include "bk_genie_smart_config.h"
#endif
#include "motor.h"
#endif
#include "app_event.h"
#include "countdown.h"
#include <led_blink.h>
#include <common/bk_include.h>
#include "components/bluetooth/bk_dm_bluetooth.h"
#include "app_main.h"
#include "spi_led.h"
#include "bk_saradc.h"
#include <driver/adc.h>
#include "adc_statis.h"
#include <os/os.h>
#include "sys_driver.h"
#include <bat_main.h>
#define BAT_DETEC_ADC_CLK 203125
#define BAT_DETEC_ADC_STEADY_CTRL 7
#define BAT_DETEC_ADC_SAMPLE_RATE 0
static battery_main_event_callback_t s_battery_main_event_callback = NULL;
int battery_main_event_callback_register(battery_main_event_callback_t callback)
{
s_battery_main_event_callback = callback;
return 0;
}
static uint16_t *s_raw_voltage_data = NULL;
static uint16_t prvCalculateVoltage(void)
{
if (s_raw_voltage_data == NULL)
{
bk_printf("s_raw_voltage_data is NULL.\r\n");
return 0;
}
uint32_t sum = 0;
uint32_t count = 0;
for (uint32_t i = 5; i < 10; i++)
{
if ((s_raw_voltage_data[i] != 0) &&
(s_raw_voltage_data[i] != 2048))
{
sum += s_raw_voltage_data[i];
count++;
}
}
if (count == 0)
{
s_raw_voltage_data[0] = 0;
}
else
{
s_raw_voltage_data[0] = (uint16_t)(sum / count);
}
return s_raw_voltage_data[0];
}
static bk_err_t prvStartBatteryAdcOneTime()
{
// uint16_t value = 0;
uint16_t vol;
//int i1 = 0;
// if (vol == NULL) {
// BAT_MONITOR_WPRT("Error: vol pointer is NULL\r\n");
// return BK_FAIL;
// }
gpio_dev_unmap(GPIO_13);
// bk_gpio_disable_input(GPIO_0);
// bk_gpio_enable_input(GPIO_13);
// bk_gpio_enable_pull(GPIO_13);
// bk_gpio_pull_up(GPIO_13);
// gpio_dev_map(GPIO_13, GPIO_DEV_ADC15);
// bk_gpio_disable_output(GPIO_13);
BK_LOG_ON_ERR(bk_adc_acquire());
BK_LOG_ON_ERR(bk_adc_init(ADC_15)); // ADC_0
adc_config_t config;
os_memset(&config, 0, sizeof(config));
config.chan = ADC_15; // ADC_0
config.adc_mode = ADC_CONTINUOUS_MODE;
config.src_clk = ADC_SCLK_XTAL_26M;
config.clk = BAT_DETEC_ADC_CLK;
config.saturate_mode = 4;
config.steady_ctrl = BAT_DETEC_ADC_STEADY_CTRL;
config.adc_filter = 0;
config.sample_rate = BAT_DETEC_ADC_SAMPLE_RATE;
if (config.adc_mode == ADC_CONTINUOUS_MODE)
{
config.sample_rate = 0;
}
BK_LOG_ON_ERR(bk_adc_set_config(&config));
BK_LOG_ON_ERR(bk_adc_enable_bypass_clalibration());
BK_LOG_ON_ERR(bk_adc_start());
// BK_LOG_ON_ERR(bk_adc_read(&value, ADC_READ_SEMAPHORE_WAIT_TIME));
// bk_printf("ADC VALUEbbbbbbbb: %d .\r\n", value);
s_raw_voltage_data = (uint16_t *)os_malloc(10 * sizeof(uint16_t));
bk_err_t ret = bk_adc_read_raw(s_raw_voltage_data,
10,
ADC_READ_SEMAPHORE_WAIT_TIME);
if (ret != BK_OK)
{
bk_printf("Failed to read ADC data, err: %d\r\n", ret);
vol = 0;
goto ADC_EXIT;
}
// for(i1 = 0;i1<10;i1 ++){
// bk_printf("ADC s_raw_voltage_data[%d]: %d .\r\n", i1,s_raw_voltage_data[i1]);
// }
vol = prvCalculateVoltage();
// BAT_MONITOR_PRT("ADC VALUE: %d .\r\n", *vol);
bk_printf("ADC bat_value: %d mv\r\n", vol);
if (vol < 3500)
{
if (s_battery_main_event_callback)
{
bk_printf("ADC bat_value < 3500\r\n");
s_battery_main_event_callback(EVT_BATTERY_MAIN_LOW_VOLTAGE);
}
}
ADC_EXIT:
if (s_raw_voltage_data)
{
os_free(s_raw_voltage_data);
s_raw_voltage_data = NULL;
}
BK_LOG_ON_ERR(bk_adc_stop());
BK_LOG_ON_ERR(bk_adc_deinit(ADC_15));
BK_LOG_ON_ERR(bk_adc_release());
return ret;
}
beken_timer_t g_adc_bat;
static void adc_bat_ticks(void *param)
{
//bk_printf("adc_bat_ticks\n");
prvStartBatteryAdcOneTime();
}
void init_bat_timer()
{
bk_err_t result;
bk_printf("init_bat_timer\n");
result = rtos_init_timer(&g_adc_bat,
10000,
adc_bat_ticks,
(void *)0);
if (result != 0)
{
bk_printf("rtos_init_bat_timer fail\r\n");
}
result = rtos_start_timer(&g_adc_bat);
if (result != 0)
{
bk_printf("rtos_start_bat_timer fail\r\n");
}
}

View File

@ -0,0 +1,9 @@
typedef enum{
EVT_BATTERY_MAIN_CHARGING = 0,
EVT_BATTERY_MAIN_LOW_VOLTAGE,
EVT_SHUTDOWN_MAIN_LOW_BATTERY,
}evt_main_battery;
typedef uint8_t (*battery_main_event_callback_t)(evt_main_battery event_param);
int battery_main_event_callback_register(battery_main_event_callback_t callback);
void init_bat_timer();