fix: tcp_json_srv_init 加一次性守卫 + callback NULL 诊断
问题: NET_SSC_ENABLE 时 g_net_state.flag 保持 1, net_srv_init 反复调用
tcp_json_srv_init 第二次因 socket 已存在失败 → 过早 return
→ lup_set_sensor_callback 未执行 → 0xC0 回调永远 NULL
修复:
- tcp_json_srv_init: 加 static _init_done 守卫,防止重复执行
- lup_set_sensor_callback: 打印注册/清除日志
- lup_process_frame: 回调为 NULL 时打印诊断信息
This commit is contained in:
@@ -661,6 +661,7 @@ static lup_sensor_cb_t g_lup_sensor_cb = NULL;
|
|||||||
void lup_set_sensor_callback(lup_sensor_cb_t cb)
|
void lup_set_sensor_callback(lup_sensor_cb_t cb)
|
||||||
{
|
{
|
||||||
g_lup_sensor_cb = cb;
|
g_lup_sensor_cb = cb;
|
||||||
|
PRINT("LUP: sensor callback %s\n", cb ? "registered" : "cleared");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -697,6 +698,8 @@ void lup_process_frame(const uint8_t *pkg, uint16_t len)
|
|||||||
if (cmd == LUP_CMD_SENSOR_REPORT) {
|
if (cmd == LUP_CMD_SENSOR_REPORT) {
|
||||||
if (g_lup_sensor_cb) {
|
if (g_lup_sensor_cb) {
|
||||||
g_lup_sensor_cb(pkg, len);
|
g_lup_sensor_cb(pkg, len);
|
||||||
|
} else {
|
||||||
|
PRINT("LUP: 0xC0 received but no callback registered!\n");
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -787,6 +787,10 @@ static void json_sensor_callback(const uint8_t *pkg, uint16_t len)
|
|||||||
void tcp_json_srv_init(void) {
|
void tcp_json_srv_init(void) {
|
||||||
uint8_t ret;
|
uint8_t ret;
|
||||||
SOCK_INF sock_inf;
|
SOCK_INF sock_inf;
|
||||||
|
static uint8_t _init_done = 0;
|
||||||
|
|
||||||
|
if (_init_done) return; // 防止 net_srv_init 反复调用
|
||||||
|
_init_done = 1;
|
||||||
|
|
||||||
memset(&sock_inf, 0, sizeof(SOCK_INF));
|
memset(&sock_inf, 0, sizeof(SOCK_INF));
|
||||||
sock_inf.SourPort = TCP_JSON_PORT;
|
sock_inf.SourPort = TCP_JSON_PORT;
|
||||||
|
|||||||
Reference in New Issue
Block a user