LanguageInfo.c 3.9 KB
#include "JZsdkLib.h"

#include "LanguageInfo.h"

#define LANGUAGE_INFO_FILE_NAME "/root/LanguageInfo.txt"

static E_LanguageInfo g_LanguageInfo = LANGUAGE_INFO_CHINESE;
static T_JZsdkFileHandle g_LanguageInfoFileHandle = NULL;

static T_JZsdkReturnCode LanguageInfo_Read_LanguageInfo();


T_JZsdkReturnCode LanguageInfo_Init()
{
    //读取本地的语言信息
    LanguageInfo_Read_LanguageInfo();

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}


/**************
 * 
 *  写入本地的语言信息
 * 
 * 
 * ************/
T_JZsdkReturnCode LanguageInfo_Write_LanguageInfo(E_LanguageInfo language) 
{
    T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    T_JZsdkFSHandler *fileSystemHandler = NULL;
    T_JZsdkFileHandle fileHandle = NULL;

    // 1. 检查语言值合法性
    if (language != LANGUAGE_INFO_CHINESE && 
        language != LANGUAGE_INFO_ENGLISH) 
    {
        JZSDK_LOG_ERROR("Invalid language value: %d", language);
        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }

    g_LanguageInfo = language;
    JZSDK_LOG_INFO("Language set to %d", language);

    // 2. 获取文件系统操作句柄
    fileSystemHandler = JZsdk_GetFsHandler();
    if (!fileSystemHandler) {
        JZSDK_LOG_ERROR("No FS handler");
        return ret;
    }

    // 3. 打开文件(如果不存在则创建,存在则清空内容)
    ret = fileSystemHandler->FileOpen(LANGUAGE_INFO_FILE_NAME, FS_READ_AND_WRITE_CLEAR, &fileHandle);
    if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
        JZSDK_LOG_ERROR("Open failed: %d", ret);
        goto cleanup;
    }

    // 4. 将语言值转换为字符写入(例如 0 -> '0',1 -> '1')
    U8_t writeData = (U8_t)('0' + g_LanguageInfo); // 确保转换为 ASCII 字符
    U32_t writeLen = 1; // 只写入 1 字节
    U32_t realLen = 1;

    ret = fileSystemHandler->FileWrite_U8(
        fileHandle, 
        &writeData, 
        writeLen,
        &realLen
    );
    if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
        JZSDK_LOG_ERROR("Write failed: %d", ret);
        goto cleanup;
    }

    // 5. 强制刷盘
    ret = fileSystemHandler->FileSync(fileHandle);
    if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
        JZSDK_LOG_ERROR("Flush failed: %d", ret);
        goto cleanup;
    }

    ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; // 标记成功

cleanup:
    // 6. 关闭文件句柄
    if (fileHandle) {
        fileSystemHandler->FileClose(fileHandle);
    }
    return ret;
}

/**************
 * 
 *  读取本地的语言信息
 * 
 * 
 * ************/
static T_JZsdkReturnCode LanguageInfo_Read_LanguageInfo() 
{
    T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    if (g_LanguageInfoFileHandle != NULL) {
        JZSDK_LOG_ERROR("Handle already open");
        return ret;
    }

    T_JZsdkFSHandler *fileSystemHandler = JZsdk_GetFsHandler();
    if (!fileSystemHandler) {
        JZSDK_LOG_ERROR("No FS handler");
        return ret;
    }

    U8_t buf[32];
    U32_t readLen = 0;

    ret = fileSystemHandler->FileOpen(LANGUAGE_INFO_FILE_NAME, FS_ONLY_READ, &g_LanguageInfoFileHandle);
    if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
        JZSDK_LOG_ERROR("Open failed: %d", ret);
        goto cleanup;
    }

    ret = fileSystemHandler->FileRead_U8(g_LanguageInfoFileHandle, buf, sizeof(buf), &readLen);
    if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
        JZSDK_LOG_ERROR("Read failed: %d", ret);
        goto cleanup;
    }

    // 解析内容到 g_LanguageInfo
    int num = buf[0];
    g_LanguageInfo = (E_LanguageInfo)(num - '0');
    JZSDK_LOG_INFO("LanguageInfo: %d", g_LanguageInfo);

cleanup:
    if (g_LanguageInfoFileHandle) {
        fileSystemHandler->FileClose(g_LanguageInfoFileHandle);
        g_LanguageInfoFileHandle = NULL;
    }
    return ret;
}

/*******************
 * 
 *  获取语言信息
 * 
 * ***********************/
E_LanguageInfo LanguageInfo_Get_LanguageInfo()
{
    //获取程序的语言版本
    return g_LanguageInfo;
}