50 lines
2.3 KiB
C
50 lines
2.3 KiB
C
#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;
|
||
|
||
/*===== 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_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 */
|