增加查看内存AT
authorCaisking <Casiking@zhihuishixun.com>
Wed, 24 Sep 2025 08:51:15 +0000 (16:51 +0800)
committerCaisking <Casiking@zhihuishixun.com>
Wed, 24 Sep 2025 08:51:15 +0000 (16:51 +0800)
code/sdk/zhihui/leiniao/imsl_ln/leiniao_api_at.c
code/sdk/zhihui/leiniao/ln_api_cpp/ln_api_interface.cpp
code/sdk/zhihui/leiniao/ln_api_cpp/ln_api_interface.h

index b087106..a5e17b8 100644 (file)
@@ -45,6 +45,12 @@ static uint32_t ln_push_text_at(uint8_t *para, uint32_t paraLen, char *strCommon
 //恢复出厂设置相关AT命令函数声明
 static uint32_t ln_factory_at(uint8_t *para, uint32_t paraLen, char *strCommonCmd);
 
+//内存查看相关AT命令函数声明
+static uint32_t ln_memory_info_at(uint8_t *para, uint32_t paraLen, char *strCommonCmd);
+static uint32_t ln_folder_size_at(uint8_t *para, uint32_t paraLen, char *strCommonCmd);
+
+/* 内存查看辅助函数 - 使用MemoryManager接口 */
+
 /* 将 PCM 文件按 10ms(160点) 分帧喂给 VAD 并打印结果 */
 static int AnalyzePcmFileWithVad(const char *pcm_path)
 {
@@ -1151,6 +1157,84 @@ static uint32_t ln_schedule_reminder_cfg_at(uint8_t *para, uint32_t paraLen, cha
     return ERRCODE_SUCC;
 }
 
+/**
+ * @brief AT^LN_MEMORY_INFO - 查看系统内存信息
+ * @param para 参数字符串(未使用)
+ * @param paraLen 参数长度(未使用)
+ * @param strCommonCmd 命令字符串(未使用)
+ * @return uint32_t 错误码
+ * 
+ * 功能:显示系统内存使用情况
+ * 用法:AT^LN_MEMORY_INFO
+ */
+static uint32_t ln_memory_info_at(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+{
+    VAD_UNUSED(para);
+    VAD_UNUSED(paraLen);
+    VAD_UNUSED(strCommonCmd);
+    
+    printf("\r\n=== System Memory Information ===\r\n");
+    
+    // 直接使用C接口获取系统内存信息
+    const char* memoryInfo = get_system_memory_info();
+    printf("%s", memoryInfo);
+    
+    printf("\r\nMemory check completed.\r\n");
+    return ERRCODE_SUCC;
+}
+
+/**
+ * @brief AT^LN_FOLDER_SIZE=<path> - 查看指定文件夹大小
+ * @param para 参数字符串(文件夹路径)
+ * @param paraLen 参数长度
+ * @param strCommonCmd 命令字符串(未使用)
+ * @return uint32_t 错误码
+ * 
+ * 功能:显示指定文件夹的大小
+ * 用法:AT^LN_FOLDER_SIZE=/user/music/
+ *       AT^LN_FOLDER_SIZE(使用默认路径/user/)
+ */
+static uint32_t ln_folder_size_at(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+{
+    char folder_path[256] = "/user/";  // 默认路径
+    
+    if (para != NULL && paraLen > 0) {
+        // 解析参数获取文件夹路径
+        uint8_t argv[LN_MAX_ARGC][LN_MAX_ARGV_LEN] = {0};
+        uint32_t argc = 0;
+        (void)ConvertCmdToParam(para, paraLen, argv, &argc);
+        
+        if (argc >= 1) {
+            strncpy(folder_path, (char*)argv[0], sizeof(folder_path) - 1);
+            folder_path[sizeof(folder_path) - 1] = '\0';
+        }
+    }
+    
+    printf("\r\n=== Folder Size Information ===\r\n");
+    printf("Target Path: %s\r\n", folder_path);
+    
+    // 检查路径是否存在
+    struct stat path_stat;
+    if (stat(folder_path, &path_stat) != 0) {
+        printf("Error: Path does not exist or cannot be accessed\r\n");
+        return ERRCODE_FAIL;
+    }
+    
+    if (!S_ISDIR(path_stat.st_mode)) {
+        printf("Error: Path is not a directory\r\n");
+        return ERRCODE_FAIL;
+    }
+    
+    // 直接使用C接口获取文件夹大小
+    uint64_t folder_size = get_folder_size(folder_path);
+    
+    printf("Folder Size: %llu bytes (%llu KB, %llu MB)\r\n", 
+           folder_size, folder_size / 1024, folder_size / (1024 * 1024));
+    
+    printf("Folder size check completed.\r\n");
+    return ERRCODE_SUCC;
+}
+
 static const at_cmd_table_t g_ln_api_cmd[] = {
     /* ----------------------------------- VAD ---------------------------------- */
     {(char *)"AT^VAD_INIT", vad_init, (char *)"初始化 VAD"},
@@ -1203,6 +1287,10 @@ static const at_cmd_table_t g_ln_api_cmd[] = {
     {(char *)"AT^LN_UI_OTA_PROGRESS", ln_ui_ota_progress_at, (char *)"推送OTA升级进度: AT^LN_UI_OTA_PROGRESS=100"},
     {(char *)"AT^LN_SCHEDULE_REMINDER", ln_schedule_reminder_at, (char *)"日程提醒: AT^LN_SCHEDULE_REMINDER[=scheduleName,reminderContent]"},
     {(char *)"AT^LN_SCHEDULE_REMINDER_CFG", ln_schedule_reminder_cfg_at, (char *)"日程提醒配置: AT^LN_SCHEDULE_REMINDER_CFG[=scheduleName]"},
+    
+    /* 内存查看相关AT命令 */
+    {(char *)"AT^LN_MEMORY_INFO", ln_memory_info_at, (char *)"查看系统内存信息: AT^LN_MEMORY_INFO"},
+    {(char *)"AT^LN_FOLDER_SIZE", ln_folder_size_at, (char *)"查看文件夹大小: AT^LN_FOLDER_SIZE[=/path/to/folder]"},
 };
 
 
index fca5561..05c64ff 100644 (file)
@@ -3,6 +3,9 @@
 #include "ota/include/OtaModel.h"
 //#include "ota/include/OtaUpdatingView.h"
 #include "uiservice/ui_service.h"
+#include "system/include/MemoryManager.h"
+#include <string>
+#include <cstring>
 
 #ifdef __cplusplus
 extern "C"
@@ -79,6 +82,29 @@ void push_task_reminder_notification(const char *scheduleName)
     SendMsgToUIService(HAND_TASK_REMINDER_NOTIFY, 0,(void *)scheduleName, (int32_t)strlen(scheduleName));
 }
 
+// 内存管理相关C接口实现
+static std::string g_memory_info_cache;
+
+const char* get_system_memory_info(void)
+{
+    OHOS::MemoryManager* memoryManager = OHOS::MemoryManager::GetInstance();
+    if (memoryManager == NULL) {
+        return "Error: Failed to get MemoryManager instance";
+    }
+    
+    g_memory_info_cache = memoryManager->GetSystemMemoryInfo();
+    return g_memory_info_cache.c_str();
+}
+
+uint64_t get_folder_size(const char *folder_path)
+{
+    OHOS::MemoryManager* memoryManager = OHOS::MemoryManager::GetInstance();
+    if (memoryManager == NULL) {
+        return 0;
+    }
+    
+    return memoryManager->GetFolderSize(folder_path);
+}
 
 #ifdef __cplusplus
 };
index 6dd9763..c193d41 100644 (file)
@@ -5,6 +5,8 @@ extern "C"
 #ifndef LN_API_INTERFACE_H
 #define LN_API_INTERFACE_H
 
+#include <stdint.h>
+
 // 推送文本给ui
 void push_text_to_ui(const char *text);
 
@@ -44,6 +46,11 @@ void do_restore_factory_setting(void);
 void push_schedule_reminder_notification(const char *title, const char *content);
 // 推送任务提醒
 void push_task_reminder_notification(const char *scheduleName);
+
+// 内存管理相关C接口
+const char* get_system_memory_info(void);
+uint64_t get_folder_size(const char *folder_path);
+
 #ifdef __cplusplus
 }
 #endif