181 lines
5.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef WIFI_BOARD_H
#define WIFI_BOARD_H
/**
* @file wifi_board.h
* @brief WiFi板级管理模块头文件
*
* 本文件定义了WiFi板级管理的相关接口包括WiFi连接管理、
* BluFi蓝牙配网流程控制、网络状态监控等功能。
* 集成了蓝牙配网功能,提供完整的网络连接解决方案。
*/
#include "board.h"
#include "bluetooth_provisioning.h"
#include <string>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
// 前向声明
class Application;
/**
* @class WifiBoard
* @brief WiFi板级管理类
*
* 继承自Board基类负责管理ESP32的WiFi连接、BluFi蓝牙配网流程和网络状态监控。
* 提供完整的网络连接解决方案,包括自动连接、配网模式切换、网络状态监控等功能。
*/
class WifiBoard : public Board {
protected:
bool wifi_config_mode_ = false; ///< WiFi配置模式标志true表示进入配网模式
bool blufi_provisioning_active_ = false; ///< BluFi配网激活状态标志
bool blufi_provisioning_success_ = false; ///< BluFi配网成功状态标志
TickType_t blufi_start_time_ = 0; ///< BluFi配网开始时间戳
static const TickType_t BLUFI_TIMEOUT_MS = 300000; ///< BluFi配网超时时间5分钟避免过快重新进入配网
BluetoothProvisioning bluetooth_provisioning_; ///< BluFi蓝牙配网实例对象
/**
* @brief 构造函数
* 初始化WiFi板级管理对象读取配置参数
*/
WifiBoard();
/**
* @brief 进入WiFi配置模式
* 启动BluFi蓝牙配网流程等待用户通过手机APP配置WiFi信息
*/
void EnterWifiConfigMode();
/**
* @brief 广播验证码
* @param code 验证码字符串
* @param application 应用程序实例引用
* 用于在配网过程中向用户显示验证码信息
*/
void BroadcastVerificationCode(const std::string& code, Application& application);
/**
* @brief 启动BluFi蓝牙配网
* @return true 启动成功
* @return false 启动失败
* 初始化并启动BluFi蓝牙配网服务等待手机连接
*/
bool StartBluFiProvisioning();
/**
* @brief 监控BluFi配网进程
* 监控配网状态变化,处理超时和异常情况
*/
void MonitorBluFiProvisioning();
/**
* @brief BluFi配网事件处理函数
* @param event 配网事件类型
* @param data 事件数据指针
* 处理BluFi配网过程中的各种事件
*/
void OnBluFiProvisioningEvent(BluetoothProvisioningEvent event, void* data);
/**
* @brief BluFi配网静态回调函数
* @param event 配网事件类型
* @param data 事件数据指针
* @param user_data 用户数据指针
* 静态回调函数用于处理BluFi配网事件
*/
static void BluFiProvisioningCallback(BluetoothProvisioningEvent event, void* data, void* user_data);
/**
* @brief 清理现有蓝牙服务
* 在进入配网模式前清理application.cc中启动的蓝牙服务避免重复初始化
*/
void CleanupExistingBluetoothService();
/**
* @brief 清理现有WiFi服务
* 在进入配网模式前清理现有的WiFi服务为BluFi重新初始化做准备
*/
void CleanupExistingWiFiService();
/**
* @brief 获取板级配置JSON字符串
* @return std::string 板级配置的JSON格式字符串
* 重写基类方法返回WiFi板级的配置信息
*/
virtual std::string GetBoardJson() override;
public:
/**
* @brief 获取板级类型
* @return std::string 返回"wifi"字符串
* 重写基类方法标识当前板级为WiFi类型
*/
virtual std::string GetBoardType() override;
/**
* @brief 启动网络连接
* 根据配置启动WiFi连接或BluFi配网流程
* 重写基类方法实现WiFi网络的启动逻辑
*/
virtual void StartNetwork() override;
/**
* @brief 创建HTTP客户端对象
* @return Http* HTTP客户端对象指针
* 重写基类方法创建适用于WiFi网络的HTTP客户端
*/
virtual Http* CreateHttp() override;
/**
* @brief 创建WebSocket客户端对象
* @return WebSocket* WebSocket客户端对象指针
* 重写基类方法创建适用于WiFi网络的WebSocket客户端
*/
virtual WebSocket* CreateWebSocket() override;
/**
* @brief 创建MQTT客户端对象
* @return Mqtt* MQTT客户端对象指针
* 重写基类方法创建适用于WiFi网络的MQTT客户端
*/
virtual Mqtt* CreateMqtt() override;
/**
* @brief 创建UDP客户端对象
* @return Udp* UDP客户端对象指针
* 重写基类方法创建适用于WiFi网络的UDP客户端
*/
virtual Udp* CreateUdp() override;
/**
* @brief 获取网络状态图标
* @return const char* 网络状态图标字符串
* 重写基类方法返回当前WiFi网络状态对应的图标
*/
virtual const char* GetNetworkStateIcon() override;
/**
* @brief 设置省电模式
* @param enabled true启用省电模式false禁用省电模式
* 重写基类方法控制WiFi模块的省电模式
*/
virtual void SetPowerSaveMode(bool enabled) override;
/**
* @brief 重置WiFi配置
* 清除已保存的WiFi凭据重新进入配网模式
*/
virtual void ResetWifiConfiguration();
/**
* @brief 检查BluFi配网是否激活
* @return true BluFi配网正在进行中
* @return false BluFi配网未激活
* BluFi配网状态检查方法用于外部查询配网状态
*/
bool IsBluFiProvisioningActive() const { return blufi_provisioning_active_; }
};
#endif // WIFI_BOARD_H