LanguageInfo.c
3.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#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;
}