#ifndef NETWORK_H #define NETWORK_H #include "main.h" #include /*===== 网络后端(通道)=====*/ /* 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); void NET_publish_status(int sw1, int feeding, int sw2, int sw3, int sw4, float weight_kg, float once_wt_kg, float zero_kg); void NET_publish_response(const char *cmd_id, int ok, const char *msg); void NET_publish_power(int on); void NET_publish_energy(float kwh); /* 上报累计电量,标识符 energy,单位 kWh */ void NET_mqtt_report(const char *header, const char *ota_id, int val); void NET_ota_confirm(void); /* 下行消息统一分发(与模组无关):id去重 → iot.prop.set继电器控制 → iot.ota升级。 * 4G 后端切出 +MSUB 片段后调用;WiFi 后端解出 MQTT PUBLISH payload 后调用。 * msg 可以是整条 +MSUB URC 或纯 JSON,内部按子串匹配。 */ void net_dispatch_message(const char *msg); #endif /* NETWORK_H */