雷鸟:开机设置亮度为5
authorcheng <chengyf@zhihuishixun.com>
Fri, 19 Sep 2025 09:57:57 +0000 (17:57 +0800)
committercheng <chengyf@zhihuishixun.com>
Fri, 19 Sep 2025 09:57:57 +0000 (17:57 +0800)
code/sdk/application/wearable/ln/nativeapp/nativelauncher/src/NativeLauncher.cpp
code/sdk/zhihui/config/src/ConfigModel.cpp
code/sdk/zhihui/leiniao/imsl_ln/ln_api.c
code/sdk/zhihui/leiniao/imsl_ln/ln_api.h

index 7f79a73..a5913ae 100644 (file)
@@ -35,6 +35,7 @@
 #endif
 #include "RecentManager.h"
 #include "PageTransitionMgr.h"
+#include <ConfigModelC.h>
 
 namespace OHOS {
 
@@ -72,6 +73,8 @@ void NativeLauncher::InitNativeLauncher()
     ScreenModels::GetInstance()->PreLoadAppimages();
     NativeAbility::GetInstance().SetDefaultSliceId(VIEW_MAIN_SAMPLE);
 
+    cm_initScreenBrightness();
+
     RecentManager::GetInstance()->SetDirPath("system/recent/");
     RecentManager::GetInstance()->AddToBlackList(VIEW_AOD);
     RecentManager::GetInstance()->AddToBlackList(VIEW_RECENT_APP);
index 7370ceb..fc1b73b 100644 (file)
@@ -1354,7 +1354,11 @@ void cm_initScreenBrightness(void)
 {
    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "cm_initScreenBrightness");
    int brightness = OHOS::ConfigModel::GetInstance()->GetBrightness();
+   #ifdef BOARD_LEINIAO
+   uapi_setScreenBrightness(5);
+   #else
    uapi_setScreenBrightness(brightness);
+   #endif
 }
 
 int cm_getScreenBrightness(void)
index de107f8..3fd0647 100644 (file)
@@ -506,39 +506,178 @@ void ln_ws_process_message(int cmd, const char *json_str)
             break;
         }
         case LN_WS_RECV_CHARACTER_CONFIG_CHANGE: {
-            printf("[WS] CharacterConfigChange:角色配置更改\n");
+            printf("[WS] CharacterConfigChange:角色配置更改(CharacterConfigChange)\n");
+            // 通知设备切换到指定角色
+            if(json_str)
+            {
+                ln_parse_character_config(json_str, strlen(json_str));
+            }
             break;
         }
         case LN_WS_RECV_SLEEP_MODE_START: {
             printf("[WS] SleepModeStart:哄睡模式开始\n");
+            // 通知设备开始哄睡
+            if(json_str)
+            {
+                // {
+                //     "deviceId": "DEVICE_001",
+                //     "timestamp": 1640995200,
+                //     "messageId": "msg_003",
+                //     "command": "SleepModeStart",
+                //     "data": {
+                //       "storyTheme": "爱情故事" //故事主题
+                //     }
+                // }
+                // ln_parse_sleep_mode_start(json_str, strlen(json_str));
+            }
             break;
         }
         case LN_WS_RECV_SLEEP_MODE_END: {
             printf("[WS] SleepModeEnd:哄睡模式结束\n");
+            // 通知设备结束哄睡
+            if(json_str)
+            {
+                // {
+                //     "deviceId": "DEVICE_001",
+                //     "timestamp": 1640995200,
+                //     "messageId": "msg_004",
+                //     "command": "SleepModeEnd",
+                //     "data": {}
+                // }
+                // ln_parse_sleep_mode_end(json_str, strlen(json_str));
+            }
             break;
         }
         case LN_WS_RECV_DEVICE_BIND: {
             printf("[WS] DeviceBind:设备绑定\n");
+            // 通知设备已被用户绑定
+            if(json_str)
+            {
+                // {
+                //     "deviceId": "DEVICE_001",
+                //     "timestamp": 1640995200,
+                //     "messageId": "msg_007",
+                //     "command": "DeviceBind",
+                //     "data": {
+                //       "userId": "user_001",
+                //       "userName": "张三",
+                //       "bindTime": 1640995200
+                //     }
+                // }
+                // ln_parse_device_bind(json_str, strlen(json_str));
+            }
             break;
         }
         case LN_WS_RECV_DEVICE_UNBIND: {
             printf("[WS] DeviceUnbind:设备解绑\n");
+            // 通知设备已被用户解绑
+            if(json_str)
+            {
+                // {
+                //     "deviceId": "DEVICE_001",
+                //     "timestamp": 1640995200,
+                //     "messageId": "msg_008",
+                //     "command": "DeviceUnbind",
+                //     "data": {
+                //       "userId": "user_001",
+                //       "reason": "用户主动解绑",
+                //       "unbindTime": 1640995200
+                //     }
+                // }
+                // ln_parse_device_unbind(json_str, strlen(json_str));
+            }
             break;
         }
         case LN_WS_RECV_SCHEDULE_REMINDER: {
             printf("[WS] ScheduleReminder:日程提醒\n");
+            // 推送日程提醒信息
+            if(json_str)
+            {
+                // {
+                //     "deviceId": "DEVICE_001",
+                //     "timestamp": 1640995200,
+                //     "messageId": "msg_009",
+                //     "command": "ScheduleReminder",
+                //     "data": {
+                //       "scheduleId": 123,
+                //       "deviceId": "DEVICE_001",
+                //       "scheduleName": "开会提醒",
+                //       "reminderContent": "您有一个会议即将开始,请准备参加",
+                //       "reminderAudioUrl": "https://example.com/reminder/reminder_001.mp3",
+                //       "enableVoice": 1,
+                //       "enableVibration": 1
+                //     }
+                // }
+                ln_parse_schedule_reminder(json_str, strlen(json_str));
+            }
             break;
         }
         case LN_WS_RECV_SCHEDULE_REMINDER_CFG: {
             printf("[WS] ScheduleReminderConfig:日程提醒配置\n");
+            // 推送日程提醒配置
+            if(json_str)
+            {
+                // {
+                //     "deviceId": "DEVICE_001",
+                //     "timestamp": 1640995200,
+                //     "messageId": "msg_009",
+                //     "command": "ScheduleReminderConfig",
+                //     "data": {
+                //       "scheduleName": "七点起床"
+                //     }
+                // }
+                ln_parse_schedule_reminder_config(json_str, strlen(json_str));
+            }
             break;
         }
         case LN_WS_RECV_DOWNLOAD_EMOJI: {
             printf("[WS] DownloadEmoji:下载表情\n");
+            // 下载表情
+            if(json_str)
+            {
+                // {
+                //     "deviceId": "DEVICE_001",
+                //     "timestamp": 1640995200,
+                //     "messageId": "msg_011",
+                //     "command": "DownloadEmoji",
+                //     "data": {
+                //       "characterId": "char_001",
+                //       "eyesColor": "blue",
+                //       "eyesShape": "calm-eyes",
+                //       "emotionEmojis": [
+                //         {
+                //           "emotion": "happy",
+                //           "emojiUrl": "https://example.com/emoji/happy.mp4"
+                //         },
+                //         {
+                //           "emotion": "sad",
+                //           "emojiUrl": "https://example.com/emoji/sad.mp4"
+                //         }
+                //       ]
+                //     }
+                // }
+                // ln_parse_download_emoji(json_str, strlen(json_str));
+            }
             break;
         }
         case LN_WS_RECV_DELETE_EMOJI: {
             printf("[WS] DeleteEmoji:删除表情\n");
+            // 删除表情
+            if(json_str)
+            {
+                // {
+                //     "deviceId": "DEVICE_001",
+                //     "timestamp": 1640995200,
+                //     "messageId": "msg_012",
+                //     "command": "DeleteEmoji",
+                //     "data": {
+                //       "characterId": "char_001",
+                //       "eyesColor": "blue",
+                //       "eyesShape": "calm-eyes"
+                //     }
+                // }
+                // ln_parse_delete_emoji(json_str, strlen(json_str));
+            }
             break;
         }
         default: {
index 74e3e99..fe5207e 100644 (file)
@@ -54,63 +54,62 @@ typedef struct
 /* OTA 包保存目录*/
 #define LN_OTA_SAVE_DIR "/user/update"
 /* 用户数据保存目录 */
-#define LN_DATA_PATH    "/user/leiniao"
+#define LN_DATA_PATH "/user/leiniao"
 
-#define LN_CLIENT_PREPARE_SIZE 2*1024
-#define TEST_MP3_DOWNLOAD 0 //测试下载mp3
+#define LN_CLIENT_PREPARE_SIZE 2 * 1024
+#define TEST_MP3_DOWNLOAD 0 // 测试下载mp3
 
-#define LN_HTTP_SERVICE_CMD_GET_DEVICE_TOKEN 0x1 /* 获取设备 token */
+#define LN_HTTP_SERVICE_CMD_GET_DEVICE_TOKEN 0x1   /* 获取设备 token */
 #define LN_HTTP_SERVICE_CMD_SPEECH_CHAT_STREAM 0x2 /* 语音对话流 */
-#define LN_HTTP_SERVICE_CMD_SSE_RECV 0x3 /* 语音对话流分片接收 */
+#define LN_HTTP_SERVICE_CMD_SSE_RECV 0x3           /* 语音对话流分片接收 */
 /* 故事相关命令 */
-#define LN_HTTP_SERVICE_CMD_STORY_CHOOSE 0x10 /* 智能选择故事(SSE,multipart)*/
-#define LN_HTTP_SERVICE_CMD_STORY_RANDOM 0x11 /* 随机故事(SSE,JSON)*/
+#define LN_HTTP_SERVICE_CMD_STORY_CHOOSE 0x10       /* 智能选择故事(SSE,multipart)*/
+#define LN_HTTP_SERVICE_CMD_STORY_RANDOM 0x11       /* 随机故事(SSE,JSON)*/
 #define LN_HTTP_SERVICE_CMD_STORY_EXIT_INQUIRY 0x12 /* 获取退出哄睡询问(JSON)*/
-#define LN_HTTP_SERVICE_CMD_STORY_FINISH 0x13 /* 确认结束哄睡模式(JSON)*/
+#define LN_HTTP_SERVICE_CMD_STORY_FINISH 0x13       /* 确认结束哄睡模式(JSON)*/
 /* 故事相关接收命令(用于区分来源,便于分类打印/处理)*/
 #define LN_HTTP_RECV_STORY_CHOOSE 0x20 /* 故事-选择故事 接收 */
 #define LN_HTTP_RECV_STORY_RANDOM 0x21 /* 故事-随机故事 接收 */
-#define LN_HTTP_RECV_STORY_EXIT   0x22 /* 故事-退出哄睡询问 接收 */
+#define LN_HTTP_RECV_STORY_EXIT 0x22   /* 故事-退出哄睡询问 接收 */
 #define LN_HTTP_RECV_STORY_FINISH 0x23 /* 故事-确认结束哄睡模式 接收 */
 /* 设备信息相关命令 */
 #define LN_HTTP_SERVICE_CMD_GET_CHARACTER 0x30 /* 获取设备角色信息(JSON, GET)*/
-#define LN_HTTP_SERVICE_CMD_GET_USER_ID  0x31 /* 获取设备绑定用户ID(JSON, GET)*/
+#define LN_HTTP_SERVICE_CMD_GET_USER_ID 0x31   /* 获取设备绑定用户ID(JSON, GET)*/
 /* 设备信息相关接收命令 */
 #define LN_HTTP_RECV_DEVICE_CHARACTER 0x40 /* 设备角色信息 接收 */
-#define LN_HTTP_RECV_DEVICE_USER_ID  0x41 /* 设备绑定用户ID 接收 */
+#define LN_HTTP_RECV_DEVICE_USER_ID 0x41   /* 设备绑定用户ID 接收 */
 /* OTA 升级相关命令 */
 #define LN_HTTP_SERVICE_CMD_OTA_GET_TASK 0x50 /* 获取OTA升级任务(JSON, GET,带查询参数)*/
 /* OTA 升级相关接收命令 */
 #define LN_HTTP_RECV_OTA_TASK 0x60 /* OTA 升级任务 接收 */
 /* OTA 下载命令与回执 */
 #define LN_HTTP_SERVICE_CMD_OTA_DOWNLOAD 0x51 /* 触发 OTA 包下载(根据 getTask 的返回 packageUrl)*/
-#define LN_HTTP_RECV_OTA_DOWNLOAD_MSG 0x61   /* 可选:OTA 下载控制消息(JSON)接收)*/
-
+#define LN_HTTP_RECV_OTA_DOWNLOAD_MSG 0x61    /* 可选:OTA 下载控制消息(JSON)接收)*/
 
 /* WebSocket 业务消息接收命令(供 WS 回调上报分类使用)*/
-#define LN_WS_RECV_UNKNOWN                 0x70 /* 未知命令 */
-#define LN_WS_RECV_CHARACTER_CHANGE        0x71 /* 角色切换 (CharacterChange) */
+#define LN_WS_RECV_UNKNOWN 0x70                 /* 未知命令 */
+#define LN_WS_RECV_CHARACTER_CHANGE 0x71        /* 角色切换 (CharacterChange) */
 #define LN_WS_RECV_CHARACTER_CONFIG_CHANGE 0x72 /* 角色配置更改 (CharacterConfigChange) */
-#define LN_WS_RECV_SLEEP_MODE_START        0x73 /* 哄睡模式开始 (SleepModeStart) */
-#define LN_WS_RECV_SLEEP_MODE_END          0x74 /* 哄睡模式结束 (SleepModeEnd) */
-#define LN_WS_RECV_DEVICE_BIND             0x75 /* 设备绑定 (DeviceBind) */
-#define LN_WS_RECV_DEVICE_UNBIND           0x76 /* 设备解绑 (DeviceUnbind) */
-#define LN_WS_RECV_SCHEDULE_REMINDER       0x77 /* 日程提醒 (ScheduleReminder) */
-#define LN_WS_RECV_SCHEDULE_REMINDER_CFG   0x78 /* 日程提醒配置 (ScheduleReminderConfig) */
-#define LN_WS_RECV_DOWNLOAD_EMOJI          0x79 /* 下载表情 (DownloadEmoji) */
-#define LN_WS_RECV_DELETE_EMOJI            0x7A /* 删除表情 (DeleteEmoji) */
+#define LN_WS_RECV_SLEEP_MODE_START 0x73        /* 哄睡模式开始 (SleepModeStart) */
+#define LN_WS_RECV_SLEEP_MODE_END 0x74          /* 哄睡模式结束 (SleepModeEnd) */
+#define LN_WS_RECV_DEVICE_BIND 0x75             /* 设备绑定 (DeviceBind) */
+#define LN_WS_RECV_DEVICE_UNBIND 0x76           /* 设备解绑 (DeviceUnbind) */
+#define LN_WS_RECV_SCHEDULE_REMINDER 0x77       /* 日程提醒 (ScheduleReminder) */
+#define LN_WS_RECV_SCHEDULE_REMINDER_CFG 0x78   /* 日程提醒配置 (ScheduleReminderConfig) */
+#define LN_WS_RECV_DOWNLOAD_EMOJI 0x79          /* 下载表情 (DownloadEmoji) */
+#define LN_WS_RECV_DELETE_EMOJI 0x7A            /* 删除表情 (DeleteEmoji) */
 
 /* 音频播放相关命令 */
-#define LN_HTTP_SERVICE_CMD_AUDIO_PLAY 0x1001 /* 播放音频 */
-#define LN_HTTP_SERVICE_CMD_AUDIO_STOP 0x1002 /* 停止播放音频 */
+#define LN_HTTP_SERVICE_CMD_AUDIO_PLAY 0x1001      /* 播放音频 */
+#define LN_HTTP_SERVICE_CMD_AUDIO_STOP 0x1002      /* 停止播放音频 */
 #define LN_HTTP_SERVICE_CMD_AUDIO_PLAY_NEXT 0x1003 /* 播放下一首 */
 #define LN_HTTP_SERVICE_CMD_AUDIO_PLAY_FILE 0x1004 /* 播放指定文件 */
-#define LN_HTTP_SERVICE_CMD_AUDIO_PAUSE 0x1005 /* 暂停播放 */
-#define LN_HTTP_SERVICE_CMD_AUDIO_RESUME 0x1006 /* 恢复播放 */
+#define LN_HTTP_SERVICE_CMD_AUDIO_PAUSE 0x1005     /* 暂停播放 */
+#define LN_HTTP_SERVICE_CMD_AUDIO_RESUME 0x1006    /* 恢复播放 */
 
 /* Emoji 上报结果接收命令 */
-#define LN_HTTP_RECV_EMOJI_REPORT          0x1007 
-#define LN_HTTP_RECV_EMOJI_REPORT_ALL      0x1008
+#define LN_HTTP_RECV_EMOJI_REPORT 0x1007
+#define LN_HTTP_RECV_EMOJI_REPORT_ALL 0x1008
 
 /* 故事-随机故事 请求体(可选主题)*/
 typedef struct
@@ -119,20 +118,22 @@ typedef struct
 } ln_story_random_req_t;
 
 /* OTA下载状态枚举(对应时序图中的下载阶段)*/
-typedef enum {
-    OTA_DOWNLOAD_STATUS_DOWNLOADING = 0,  /* 下载中 */
-    OTA_DOWNLOAD_STATUS_COMPLETED = 1,    /* 下载完成 */
-    OTA_DOWNLOAD_STATUS_FAILED = 2,       /* 下载失败 */
-    OTA_DOWNLOAD_STATUS_PROGRESS = 3      /* 进度更新 */
+typedef enum
+{
+    OTA_DOWNLOAD_STATUS_DOWNLOADING = 0, /* 下载中 */
+    OTA_DOWNLOAD_STATUS_COMPLETED = 1,   /* 下载完成 */
+    OTA_DOWNLOAD_STATUS_FAILED = 2,      /* 下载失败 */
+    OTA_DOWNLOAD_STATUS_PROGRESS = 3     /* 进度更新 */
 } OtaDownloadStatus;
 
 /* OTA下载消息结构体(简化版)*/
-typedef struct {
-    OtaDownloadStatus status;  /* 下载状态*/
-    int progress;              /* 进度(0-100),仅状态为PROGRESS时有效 */
-    char file_path[256];       /* 文件路径,仅状态为COMPLETED时有效 */
-    char error_msg[128];       /* 错误信息,仅状态为FAILED时有效 */
-    char md5[65];              /* MD5(来自任务),仅状态为COMPLETED时有效 */
+typedef struct
+{
+    OtaDownloadStatus status; /* 下载状态*/
+    int progress;             /* 进度(0-100),仅状态为PROGRESS时有效 */
+    char file_path[256];      /* 文件路径,仅状态为COMPLETED时有效 */
+    char error_msg[128];      /* 错误信息,仅状态为FAILED时有效 */
+    char md5[65];             /* MD5(来自任务),仅状态为COMPLETED时有效 */
 } OtaDownloadMsg;
 
 /* =================== Emoji 表情上报相关结构体 =================== */
@@ -154,15 +155,16 @@ typedef enum
 } LnDeviceBindStatus;
 
 /* =================== 设备角色信息结构体定义 =================== */
-typedef struct {
-    char character_id[64];
-    char character_name[64];
-    char avatar_hair_color[64];
-    char avatar_eyes_color[64];
-    char avatar_hair_style[64];
-    char avatar_eyes_shape[64];
-    char avatar_screen_image[256];
-    int  avatar_screen_image_as_emoji;
+typedef struct
+{
+    char character_id[64];            // 角色ID
+    char character_name[64];          // 角色名称
+    char avatar_hair_color[64];       // 发色
+    char avatar_eyes_color[64];       // 瞳色
+    char avatar_hair_style[64];       // 发型
+    char avatar_eyes_shape[64];       // 眼型
+    char avatar_screen_image[256];    // 屏保图片
+    int avatar_screen_image_as_emoji; // 屏保图片是否作为对话表情
 } LnCharacterConfig;
 
 // 定义存储日程提醒信息的全局变量
@@ -178,12 +180,13 @@ typedef struct
 } ScheduleReminder;
 
 /* 日程 日程提醒醒配置配置信息结构体 */
-typedef struct {
-    char scheduleName[128];  // 日程名称
+typedef struct
+{
+    char scheduleName[128]; // 日程名称
 } ScheduleReminderConfig;
 
 /* 初始化 LN HTTP 服务 */
-errcode_t uapi_ln_http_server_init(void); 
+errcode_t uapi_ln_http_server_init(void);
 /* 通用发送接口:向 LN HTTP 发送队列投递消息 */
 void do_ln_http_server_send_data(int cmd, char *data, uint32_t len);
 /* 通用接收接口:向 LN HTTP 接收队列投递消息(供发送线程/HTTP回调使用) */
@@ -216,13 +219,12 @@ uint32_t uapi_ln_is_device_bound(void);
 /* 设置是否绑定用户 */
 void uapi_ln_set_device_bound(void);
 /* 获取设备绑定用户ID */
-const char* uapi_ln_get_user_id(void);
+const char *uapi_ln_get_user_id(void);
 /* 获取设备角色配置 */
 LnCharacterConfig uapi_ln_get_character_config(void);
 /* 获取日程提醒信息 */
 ScheduleReminder uapi_ln_get_schedule_reminder(void);
 
-
 /* ============================== 共享全局状态(跨文件) ============================== */
 extern char *g_device_token;
 extern int g_ln_last_update_type;
@@ -251,65 +253,80 @@ uint32_t ln_token_is_expired(int *expired_out);
 uint32_t uapi_ln_refresh_device_token(void);
 uint32_t uapi_ln_device_get_user_id(LnDeviceBindStatus *out_status, char *out_user_id, uint32_t out_user_id_len);
 
-//解析设备角色配置
+// 解析设备角色配置
 void ln_parse_character_config(const char *json_buf, int json_len);
+/* 解析哄睡模式开始 */
+void ln_parse_sleep_mode_start(const char *json_str, int json_len);
+/* 解析哄睡模式结束 */
+void ln_parse_sleep_mode_end(const char *json_str, int json_len);
+/* 解析设备绑定 */
+void ln_parse_device_bind(const char *json_str, int json_len);
+/* 解析设备解绑 */
+void ln_parse_device_unbind(const char *json_str, int json_len);
+/* 解析日程提醒 */
+void ln_parse_schedule_reminder(const char *json_str, int json_len);
+/* 解析日程提醒配置 */
+void ln_parse_schedule_reminder_config(const char *json_str, int json_len);
+/* 解析下载表情 */
+void ln_parse_download_emoji(const char *json_str, int json_len);
+/* 解析删除表情 */
+void ln_parse_delete_emoji(const char *json_str, int json_len);
 /* ============================== 各接口函数声明 ============================== */
 uint32_t ln_get_device_token_http(const char *device_id,
-                                  const char *device_iccid,
-                                  const char *device_model,
-                                  const char *device_version);
+                                    const char *device_iccid,
+                                    const char *device_model,
+                                    const char *device_version);
 
 uint32_t ln_speech_chat_stream_http(const char *device_id,
                                     const char *device_token,
                                     const char *audio_path);
 
 uint32_t ln_story_choose_http(const char *device_id,
-                              const char *device_token,
-                              const char *audio_path);
+                                const char *device_token,
+                                const char *audio_path);
 
 uint32_t ln_story_random_http(const char *device_id,
-                              const char *device_token,
-                              const char *story_theme);
+                                const char *device_token,
+                                const char *story_theme);
 
 uint32_t ln_story_exit_inquiry_http(const char *device_id,
                                     const char *device_token);
 
 uint32_t ln_story_finish_http(const char *device_id,
-                              const char *device_token);
+                                const char *device_token);
 
 uint32_t ln_device_get_character_http(const char *device_id,
-                                      const char *device_token);
+                                        const char *device_token);
 
 uint32_t ln_device_get_user_id_http(const char *device_id,
                                     const char *device_token);
 
 uint32_t ln_ota_get_task_http(const char *device_id,
-                               const char *device_token,
-                               const char *source_version);
+                                const char *device_token,
+                                const char *source_version);
 
 uint32_t ln_ota_download_flow_http(const char *device_id,
-                                   const char *device_token,
-                                   const char *source_version);
+                                    const char *device_token,
+                                    const char *source_version);
 
 /* Emoji 表情接口 */
 uint32_t ln_emoji_report_status_http(const char *device_id,
-                                     const char *device_token,
-                                     const char *character_id,
-                                     const char *eyes_color,
-                                     const char *eyes_shape,
-                                     const char *status);
+                                        const char *device_token,
+                                        const char *character_id,
+                                        const char *eyes_color,
+                                        const char *eyes_shape,
+                                        const char *status);
 
 uint32_t ln_emoji_report_all_http(const char *device_id,
-                                  const char *device_token,
-                                  const LnEmojiGroup *groups,
-                                  int group_count);
+                                    const char *device_token,
+                                    const LnEmojiGroup *groups,
+                                    int group_count);
 
 /* ============================== WebSocket 客户端接口 ============================== */
 int ln_ws_start(void);
 int ln_ws_send_text(const char *text);
 int ln_ws_stop(void);
 
-
 #ifdef __cplusplus
 }
 #endif