nongye/STM32F103_App1/HardWare/NETWORK/network.h

66 lines
2.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 NETWORK_H
#define NETWORK_H
#include "main.h"
#include <stdint.h>
/*===== 网络后端(通道)=====*/
/* 4G 与 WiFi 互斥运行:任一时刻只有一个后端激活,
* 两者共享 Rx_Buf/U2_CopyBuff见 stm32f1xx_it.c 的 IDLE 守卫) */
typedef enum {
NET_BACKEND_4G = 0, /* Air780E, USART3, 模组内置MQTT(AT+MPUB) */
NET_BACKEND_WIFI /* ESP-01S, UART4, TCP透传+软件MQTT */
} net_backend_t;
/*===== 网络状态 =====*/
extern volatile uint8_t g_net_mqtt_ready;
extern volatile uint8_t g_net_first_publish_ok;
extern volatile uint8_t g_no_sim_detected;
extern volatile uint8_t g_no_signal_detected; /* 4G 无信号标志air780e.c 在 AT+CSQ 检测失败时设置 */
/*===== 上次成功联网方式EEPROM 持久化,仅方式变化时写一次)=====*/
#define NET_MODE_4G 0 /* 4G */
#define NET_MODE_WIFI_FIXED 1 /* WiFi - 代码里固定的热点 */
#define NET_MODE_WIFI_SMART 2 /* WiFi - SmartConfig 配网的热点 */
uint8_t NET_GetLastMode(void); /* 读当前记忆的方式 */
void NET_SaveMode(uint8_t mode); /* 方式变化时写 EEPROM未变化则空操作 */
/* 网络发送互斥:置位期间 NET_publish_* 直接丢弃OTA 下载等 AT 交互期间使用,
* 防止业务发布与进行中的 AT 指令在 USART3 上交织导致应答误判) */
extern volatile uint8_t g_net_tx_busy;
/*===== OLED 联网进度显示net 任务各阶段更新sys_task 屏幕读取)=====*/
typedef enum {
NET_UI_NONE = 0, /* 无进度/初始化中 */
NET_UI_4G_RESET, /* 4G 模块复位 */
NET_UI_4G_AT, /* AT 指令检测通过 */
NET_UI_4G_SIM, /* SIM 卡就绪 */
NET_UI_4G_ATTACH, /* 附着/激活网络成功 */
NET_UI_4G_MQTT, /* MQTT 连接中 */
NET_UI_4G_NOSIM, /* 无 SIM 卡 */
NET_UI_WIFI_FIXED, /* WiFi 固定热点搜索中countdown 有效) */
NET_UI_WIFI_SMART, /* SmartConfig 配网中countdown 有效) */
} net_ui_phase_t;
extern volatile net_ui_phase_t g_net_ui_phase;
extern volatile int g_net_ui_countdown; /* WiFi 连接/配网剩余秒数 */
/*===== API =====*/
void NET_init(void);
void NET_process(void);
void NET_LockInit(void); /* 网络 AT 会话互斥锁初始化(调度器启动前调用一次) */
net_backend_t NET_GetActiveBackend(void);
int NET_publish_props(const char *body); /* 上报一组传感器属性(body=JSON字段片段),返回 0=已发出 */
void NET_publish_response(const char *cmd_id, int ok, const char *msg);
int NET_publish_power(int on);
void NET_publish_version(const char *ver); /* 上报代码版本字符串(FIRMWARE_VERSION_STR) */ /* 返回 0=已发出,-1=通道忙被丢弃 */
int NET_mqtt_report(const char *header, const char *ota_id, int val); /* 返回 0=送达 */
int NET_ota_confirm(void); /* 0=确认通知已送达 1=无挂起 -1=未送达(需重试) */
/* 下行消息统一分发与模组无关id去重 → iot.ota升级。
* 采集终端平台不下发控制指令,只处理 OTA。
* 4G 后端切出 +MSUB 片段后调用WiFi 后端解出 MQTT PUBLISH payload 后调用。
* msg 可以是整条 +MSUB URC 或纯 JSON内部按子串匹配。 */
void net_dispatch_message(const char *msg);
#endif /* NETWORK_H */