Adapt WSS to new boards and use MQTT domain for eSIM connectivity

Preserve main GNSS and volume behavior while porting verified TLS, receive fixes and full-handshake optimizations. Add MQTT connection diagnostics and route MQTT through banban.api.talkingq.com:1883.

Include migration documentation and regression tools. Firmware builds and package checks passed; user confirmed new-board connectivity after switching the MQTT host to the domain.
This commit is contained in:
chenjintao
2026-09-16 17:27:21 +08:00
parent 2746cc3d4e
commit 3deb51d838
45 changed files with 3724 additions and 4815 deletions
@@ -3,6 +3,7 @@
#include <librws.h>
#include "cJSON.h"
#include "app_inc.h"
#include "talkingq_wss.h"
#include "ql_rtos.h"
#include "ql_application.h"
#include "ql_audio.h"
@@ -129,6 +130,7 @@ unsigned char get_xiaoice_connected_status(void)
static void onopen(rws_socket socket)
{
if (socket != app->socket || !app->init) return;
wss_connect_counter=0;
LOG_D("websocket connected. ");
@@ -153,12 +155,14 @@ static void onclose(rws_socket socket)
LOG_D("websocket disconnect! ");
}
xiaoice_wss_connect_status = 0;
rws_socket_disconnect_and_release(app->socket);
if (socket != app->socket) return;
xiaoice_wss_connect_status = 0;
app->socket = NULL;
/* The worker owns and releases this socket after the callback. */
RLOGD("onclose end\r\n");
app->init = 0;
if (ws_connect_sem) ql_rtos_semaphore_release(ws_connect_sem);
hal_led_b_off();
}
@@ -305,8 +309,8 @@ int talkingq_ws_connect()
{
int result;
int ret = -1;
char wss_path[56]={0};
char ws_talkingq_url[56]={0};
char wss_path[TALKINGQ_PATH_CAPACITY]={0};
char ws_talkingq_url[TALKINGQ_URL_CAPACITY]={0};
int port;
// char session_id[56]={0};
// char ip_name[56]={0};
@@ -329,40 +333,33 @@ int talkingq_ws_connect()
ql_rtos_semaphore_create(&ws_connect_sem, 0);
}
sprintf(wss_path,"%s","/ws");
if (ws_connect_sem) while (ql_rtos_semaphore_wait(ws_connect_sem, 0) == 0) {}
hal_os_get_talkingq_url(ws_talkingq_url);
printf("ws_talkingq_url %s",ws_talkingq_url);
if(strncmp(ws_talkingq_url,"ws://",5)){
printf("error ws url %s",ws_talkingq_url);
return -1;
}
char *testp = strstr(ws_talkingq_url+5,":");
if(!testp){
strcpy(talkingq_host,ws_talkingq_url+5);
port = 80;
}else{
port = atoi(testp+1);
*testp = 0;
strcpy(talkingq_host,ws_talkingq_url+5);
}
if (talkingq_parse_wss_url(ws_talkingq_url, talkingq_host, sizeof(talkingq_host),
&port, wss_path, sizeof(wss_path)) != 0) {
LOG_E("Invalid WSS endpoint; cleartext fallback is disabled\n");
app->init = 0;
xiaoice_wss_connect_status = 0;
return -1;
}
app->socket = rws_socket_create();
if(app->socket == NULL)
{
app->init = 0;
app->init = 0;
xiaoice_wss_connect_status = 0;
LOG_E("librws socket create failed. ");
return (-1);
}
printf("talkingq host %s , port %d",talkingq_host,port);
//todo wss
//rws_socket_set_url(app->socket, "ws", "hz.api.talkingq.com", 8080, wss_path);
//118.25.13.180:8080
rws_socket_set_url(app->socket, "ws", talkingq_host, port, wss_path);
/* Server-authenticated TLS; application authentication stays in onopen. */
rws_socket_set_url(app->socket, "wss", talkingq_host, port, wss_path);
rws_socket_set_server_cert(app->socket, talkingq_root_ca, talkingq_root_ca_size);
rws_socket_set_on_connected(app->socket, &onopen);
rws_socket_set_on_disconnected(app->socket, &onclose);
@@ -374,7 +371,9 @@ int talkingq_ws_connect()
ret = rws_socket_connect(app->socket);
if(ret == rws_false)
{
app->init = 0;
rws_socket_disconnect_and_release(app->socket);
app->socket = NULL;
app->init = 0;
LOG_E("rws_socket_connect failed. ");
ret = -1;
}
@@ -383,14 +382,17 @@ int talkingq_ws_connect()
ret = -1;
LOG_D("try rws_socket_connect. ");
if(ws_connect_sem){
result = ql_rtos_semaphore_wait(ws_connect_sem, 10000);
if(result==0){
result = ql_rtos_semaphore_wait(ws_connect_sem, 45000);
if(result == 0 && app->init && app->socket && rws_socket_is_connected(app->socket)){
LOG_I("ws connect okay");
wss_connect_counter = 0;
ret = 0;
}else{
app->init = 0;
LOG_E("ws connect wait timeout");
/* Stop the pending worker before allowing a new attempt. */
if (app->socket) rws_socket_disconnect_and_release(app->socket);
app->socket = NULL;
app->init = 0;
LOG_E("ws connect failed or wait timeout");
wss_connect_counter++;
}
}else{
@@ -399,7 +401,7 @@ int talkingq_ws_connect()
}
}
if(app->init == 1){
if(ret == 0 && app->init == 1){
xiaoice_wss_connect_status = 2;
hal_led_b_on();
}