//恢复出厂设置相关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)
{
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"},
{(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]"},
};
#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"
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
};