From 6eefb4d0ef2f248ed7e3013aa2fd40834c05e2a7 Mon Sep 17 00:00:00 2001 From: cheng Date: Fri, 19 Sep 2025 17:57:57 +0800 Subject: [PATCH] =?utf8?q?=E9=9B=B7=E9=B8=9F=EF=BC=9A=E5=BC=80=E6=9C=BA?= =?utf8?q?=E8=AE=BE=E7=BD=AE=E4=BA=AE=E5=BA=A6=E4=B8=BA5?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../nativelauncher/src/NativeLauncher.cpp | 3 + code/sdk/zhihui/config/src/ConfigModel.cpp | 4 + code/sdk/zhihui/leiniao/imsl_ln/ln_api.c | 141 ++++++++++++++- code/sdk/zhihui/leiniao/imsl_ln/ln_api.h | 171 ++++++++++-------- 4 files changed, 241 insertions(+), 78 deletions(-) diff --git a/code/sdk/application/wearable/ln/nativeapp/nativelauncher/src/NativeLauncher.cpp b/code/sdk/application/wearable/ln/nativeapp/nativelauncher/src/NativeLauncher.cpp index 7f79a73cd..a5913ae24 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativelauncher/src/NativeLauncher.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativelauncher/src/NativeLauncher.cpp @@ -35,6 +35,7 @@ #endif #include "RecentManager.h" #include "PageTransitionMgr.h" +#include 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); diff --git a/code/sdk/zhihui/config/src/ConfigModel.cpp b/code/sdk/zhihui/config/src/ConfigModel.cpp index 7370ceb92..fc1b73b2a 100644 --- a/code/sdk/zhihui/config/src/ConfigModel.cpp +++ b/code/sdk/zhihui/config/src/ConfigModel.cpp @@ -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) diff --git a/code/sdk/zhihui/leiniao/imsl_ln/ln_api.c b/code/sdk/zhihui/leiniao/imsl_ln/ln_api.c index de107f8fd..3fd06470e 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api.c @@ -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: { diff --git a/code/sdk/zhihui/leiniao/imsl_ln/ln_api.h b/code/sdk/zhihui/leiniao/imsl_ln/ln_api.h index 74e3e9957..fe5207e19 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api.h +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api.h @@ -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 -- 2.17.1