Files
player/Project/Src/MyApp/system_file.c

697 lines
15 KiB
C
Raw Permalink Normal View History

2025-06-27 00:32:57 +08:00
#include "main.h"
#include "mywin_inc.h"
#include "system_file.h"
#include "system_updata.h"
#include "date.h"
#include "cjson.h"
2025-07-05 19:47:28 +08:00
/*--------------------ϵͳ<CFB5><CDB3><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>---------------------------------*/
2025-06-27 00:32:57 +08:00
#ifndef BOOTLOADER
#define OS_RTT
#ifdef OS_RTT
#include "rthw.h"
#define IRQ_DISABLE() rt_base_t irq_stat=rt_hw_interrupt_disable( )
#define IRQ_ENABLE() rt_hw_interrupt_enable (irq_stat)
#else
#include "os.h"
#define IRQ_DISABLE() {CPU_SR_ALLOC(); CPU_CRITICAL_ENTER();}
#define IRQ_ENABLE() CPU_CRITICAL_EXIT()
#endif
#else
#define IRQ_DISABLE() {}
#define IRQ_ENABLE() {}
#endif
2025-07-05 19:47:28 +08:00
//ϵͳ<CFB5><CDB3><EFBFBD>ýṹ<C3BD><E1B9B9>
2025-06-27 00:32:57 +08:00
static SysFile_SetStruct *g_sysSet=0;
2025-07-05 19:47:28 +08:00
//<2F><>ȡϵͳ<CFB5><CDB3><EFBFBD>ýṹ<C3BD><E1B9B9>
2025-06-27 00:32:57 +08:00
SysFile_SetStruct *SysFile_GetSysFile(void)
{
return g_sysSet;
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊjson
2025-06-27 00:32:57 +08:00
cJSON *SysFile_AlarmToJson(AlarmStruct *alarm)
{
cJSON *root = cJSON_CreateObject();
cJSON_AddNumberToObject(root, "year", alarm->year);
cJSON_AddNumberToObject(root, "month", alarm->month);
cJSON_AddNumberToObject(root, "day", alarm->day);
cJSON_AddNumberToObject(root, "hour", alarm->hour);
cJSON_AddNumberToObject(root, "min", alarm->min);
cJSON_AddNumberToObject(root, "week", alarm->week);
cJSON_AddNumberToObject(root, "power", alarm->power);
cJSON_AddNumberToObject(root, "tip", alarm->tip);
return root;
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊjson
2025-06-27 00:32:57 +08:00
cJSON *SysFile_SetToJson(SysFile_SetStruct *set)
{
cJSON *root = cJSON_CreateObject();
// cJSON_AddNumberToObject(root, "nfcPower", set->nfcPower);
// cJSON_AddNumberToObject(root, "bluetoothPower", set->bluetoothPower);
// cJSON_AddStringToObject(root, "bluetoothName", set->bluetoothName);
// cJSON_AddStringToObject(root, "bluetoothMac", set->bluetoothMac);
// cJSON_AddNumberToObject(root, "heartRatePower", set->heartRatePower);
cJSON_AddNumberToObject(root, "screenLightPower", set->screenLightPower);
cJSON_AddNumberToObject(root, "screenLight", set->screenLight);
cJSON_AddNumberToObject(root, "screenOffTime", set->screenOffTime);
cJSON_AddNumberToObject(root, "screenAutoLight", set->screenAutoLight);
cJSON_AddStringToObject(root, "bootPic", set->bootPic);
cJSON_AddNumberToObject(root, "alarmNum", set->alarmNum);
cJSON *js_array = cJSON_CreateArray();
cJSON_AddItemToObject(root, "alarm", js_array);
for (int i = 0; i<set->alarmNum; i++)
{
cJSON_AddItemToArray(js_array, SysFile_AlarmToJson(&set->alarm[i]));
}
cJSON_AddStringToObject(root, "alarmRing", set->alarmRing);
cJSON_AddNumberToObject(root, "time12Hours", set->time12Hours);
cJSON_AddStringToObject(root, "backPicPath", set->backPicPath);
// cJSON_AddNumberToObject(root, "highStand", set->highStand);
// cJSON_AddNumberToObject(root, "highOff", set->highOff);
//
// cJSON_AddItemToObject(root, "heartMax",cJSON_CreateIntArray(set->heartMax,7));
// cJSON_AddItemToObject(root, "heartMin",cJSON_CreateIntArray(set->heartMin,7));
// cJSON_AddItemToObject(root, "tempMax",cJSON_CreateIntArray(set->tempMax,7));
// cJSON_AddItemToObject(root, "tempMin",cJSON_CreateIntArray(set->tempMin,7));
// cJSON_AddItemToObject(root, "humiMax",cJSON_CreateIntArray(set->humiMax,7));
// cJSON_AddItemToObject(root, "humiMin",cJSON_CreateIntArray(set->humiMin,7));
// cJSON_AddItemToObject(root, "preMax",cJSON_CreateIntArray(set->preMax,7));
// cJSON_AddItemToObject(root, "preMin",cJSON_CreateIntArray(set->preMin,7));
// cJSON_AddItemToObject(root, "highMax",cJSON_CreateIntArray(set->highMax,7));
// cJSON_AddItemToObject(root, "highMin",cJSON_CreateIntArray(set->highMin,7));
return root;
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
2025-06-27 00:32:57 +08:00
void SysFile_SaveSetFile(void)
{
u32 file_size = SYSFILE_SETFILE_SIZE;
SysFile_SetStruct *set = SysFile_GetSysFile();
cJSON *root = SysFile_SetToJson(set);
char *out = cJSON_PrintUnformatted(root);
int json_size = strlen(out) + 1;
if (json_size>file_size)
{
2025-07-05 19:47:28 +08:00
//һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B2BB><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>4K
2025-06-27 00:32:57 +08:00
while (1);
}
u8 *databuff = mymalloc(file_size);
mymemset(databuff, 0, file_size);
mymemcpy(databuff, out, json_size);
if (FLASH_FindFile(SYSFILE_SETFILE_NAME, 0) == 0)
{
u32 flash_write_addr = FLASH_GetUsed();
FLASH_CheckErase(flash_write_addr, file_size);
FLASH_AddFile(SYSFILE_SETFILE_NAME, flash_write_addr, file_size);
FLASH_WriteData((u8*)databuff, flash_write_addr, file_size);
}
else
{
u32 file_addr = FLASH_FindFile(SYSFILE_SETFILE_NAME, 0);
FLASH_CheckErase(file_addr, file_size);
FLASH_WriteData((u8*)databuff, file_addr, file_size);
}
myfree(databuff);
cJSON_Delete(root);
myfree(out);
}
2025-07-05 19:47:28 +08:00
//<2F><>jsonת<6E><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD>ӽṹ<D3BD><E1B9B9>
2025-06-27 00:32:57 +08:00
int SysFile_JsonToAlarm(AlarmStruct *alarm, cJSON *json)
{
cJSON *temp=0;
temp=cJSON_GetObjectItem(json, "year");
if (temp) alarm->year = temp->valueint;
temp = cJSON_GetObjectItem(json, "month");
if (temp) alarm->month= temp->valueint;
temp= cJSON_GetObjectItem(json, "day");
if (temp) alarm->day = temp->valueint;
temp = cJSON_GetObjectItem(json, "hour");
if (temp) alarm->hour= temp->valueint;
temp = cJSON_GetObjectItem(json, "min");
if (temp) alarm->min= temp->valueint;
temp = cJSON_GetObjectItem(json, "week");
if (temp) alarm->week= temp->valueint;
temp = cJSON_GetObjectItem(json, "power");
if (temp) alarm->power= temp->valueint;
temp = cJSON_GetObjectItem(json, "tip");
if (temp) alarm->tip= temp->valueint;
return 0;
}
2025-07-05 19:47:28 +08:00
//<2F><>jsonת<6E><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD>ýṹ<C3BD><EFBFBD><E5A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>
2025-06-27 00:32:57 +08:00
SysFile_SetStruct *SysFile_JsonToSet(char *jsonstr)
{
cJSON *temp=0;
cJSON *root = cJSON_Parse(jsonstr);
SysFile_SetStruct *set= mymalloc(sizeof(SysFile_SetStruct));
mymemset(set, 0, sizeof(SysFile_SetStruct));
char *str = 0;
// set->nfcPower=cJSON_GetObjectItem(root, "nfcPower")->valueint;
//
// set->bluetoothPower = cJSON_GetObjectItem(root, "bluetoothPower")->valueint;
// str = cJSON_GetObjectItem(root, "bluetoothName")->valuestring;
// mymemcpy(set->bluetoothName, str, strlen(str) + 1);
// str = cJSON_GetObjectItem(root, "bluetoothMac")->valuestring;
// mymemcpy(set->bluetoothMac, str, strlen(str) + 1);
// set->heartRatePower = cJSON_GetObjectItem(root, "heartRatePower")->valueint;
temp=cJSON_GetObjectItem(root, "screenLightPower");
if (temp) set->screenLightPower = temp->valueint;
temp=cJSON_GetObjectItem(root, "screenLightPower");
if (temp) set->screenLight = temp->valueint;
temp=cJSON_GetObjectItem(root, "screenOffTime");
if (temp) set->screenOffTime = temp->valueint;
temp=cJSON_GetObjectItem(root, "screenAutoLight");
if (temp) set->screenAutoLight = temp->valueint;
temp=cJSON_GetObjectItem(root, "bootPic");
if (temp) { str = temp->valuestring;
mymemcpy(set->bootPic, str, strlen(str) + 1);}
temp=cJSON_GetObjectItem(root, "alarmNum");
if (temp)
{
set->alarmNum = temp->valueint;
cJSON *alarm = cJSON_GetObjectItem(root, "alarm");
for (int i = 0; i < set->alarmNum; i++)
{
cJSON *json = cJSON_GetArrayItem(alarm, i);
SysFile_JsonToAlarm(&set->alarm[i], json);
}
}
temp=cJSON_GetObjectItem(root, "alarmRing");
if (temp) { str = temp->valuestring;
mymemcpy(set->alarmRing, str, strlen(str) + 1);}
temp=cJSON_GetObjectItem(root, "time12Hours");
if (temp) set->time12Hours = temp->valueint;
temp=cJSON_GetObjectItem(root, "backPicPath");
if (temp) { str = temp->valuestring;
mymemcpy(set->backPicPath, str, strlen(str) + 1);}
// set->highStand = cJSON_GetObjectItem(root, "highStand")->valueint;
// set->highOff = cJSON_GetObjectItem(root, "highOff")->valueint;
// cJSON *js_temp = cJSON_GetObjectItem(root, "heartMax");
// for (int i = 0; i < 7; i++) { set->heartMax[i] = cJSON_GetArrayItem(js_temp, i)->valueint; }
// js_temp = cJSON_GetObjectItem(root, "heartMin");
// for (int i = 0; i < 7; i++) { set->heartMin[i] = cJSON_GetArrayItem(js_temp, i)->valueint; }
// js_temp = cJSON_GetObjectItem(root, "tempMax");
// for (int i = 0; i < 7; i++) { set->tempMax[i] = cJSON_GetArrayItem(js_temp, i)->valueint; }
// js_temp = cJSON_GetObjectItem(root, "tempMin");
// for (int i = 0; i < 7; i++) { set->tempMin[i] = cJSON_GetArrayItem(js_temp, i)->valueint; }
// js_temp = cJSON_GetObjectItem(root, "humiMax");
// for (int i = 0; i < 7; i++) { set->humiMax[i] = cJSON_GetArrayItem(js_temp, i)->valueint; }
// js_temp = cJSON_GetObjectItem(root, "humiMin");
// for (int i = 0; i < 7; i++) { set->humiMin[i] = cJSON_GetArrayItem(js_temp, i)->valueint; }
// js_temp = cJSON_GetObjectItem(root, "preMax");
// for (int i = 0; i < 7; i++) { set->preMax[i] = cJSON_GetArrayItem(js_temp, i)->valueint; }
// js_temp = cJSON_GetObjectItem(root, "preMin");
// for (int i = 0; i < 7; i++) { set->preMin[i] = cJSON_GetArrayItem(js_temp, i)->valueint; }
// js_temp = cJSON_GetObjectItem(root, "highMax");
// for (int i = 0; i < 7; i++) { set->highMax[i] = cJSON_GetArrayItem(js_temp, i)->valueint; }
// js_temp = cJSON_GetObjectItem(root, "highMin");
// for (int i = 0; i < 7; i++) { set->highMin[i] = cJSON_GetArrayItem(js_temp, i)->valueint; }
cJSON_Delete(root);
return set;
}
2025-07-05 19:47:28 +08:00
//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
2025-06-27 00:32:57 +08:00
void SysFile_GetSetFile (void )
{
if (g_sysSet == 0)
{
u32 file_size = SYSFILE_SETFILE_SIZE;
char *jsonstr = mymalloc(file_size);
if (FLASH_FindFile(SYSFILE_SETFILE_NAME, 0))
{
FLASH_ReadFile(SYSFILE_SETFILE_NAME, 0, (u8*)jsonstr, file_size);
g_sysSet = SysFile_JsonToSet(jsonstr);
}
else
{
g_sysSet = mymalloc(sizeof(SysFile_SetStruct));
mymemset(g_sysSet, 0, sizeof(SysFile_SetStruct));
}
myfree(jsonstr);
}
}
static void SysFile_InitTest(void);
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ʼ<EFBFBD><CABC>
2025-06-27 00:32:57 +08:00
void SysFile_SetFileInit (void)
{
SysFile_GetSetFile ();
2025-07-05 19:47:28 +08:00
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
SysFile_InitTest();
2025-07-05 19:47:28 +08:00
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
for (int i=0;i<g_sysSet->alarmNum;i++)
{
SysFile_InitAlarm (&g_sysSet->alarm[i]);
}
}
static void SysFile_InitTest(void)
{
2025-07-05 19:47:28 +08:00
//Ĭ<>ϵı<CFB5><C4B1><EFBFBD>ͼƬ
2025-06-27 00:32:57 +08:00
if (g_sysSet->backPicPath[0] == 0)
{
2025-07-05 19:47:28 +08:00
SysFile_SetBackPicPath("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>.pic");
2025-06-27 00:32:57 +08:00
}
2025-07-05 19:47:28 +08:00
//Ĭ<>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>ͼƬ
2025-06-27 00:32:57 +08:00
if (g_sysSet->bootPic[0] == 0)
{
2025-07-05 19:47:28 +08:00
SysFile_SetBootPicPath("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>.pic");
2025-06-27 00:32:57 +08:00
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
if (g_sysSet->alarmNum == 0)
{
AlarmStruct alarm = { 0 };
alarm.hour = 10;
alarm.min = 20;
alarm.power = 1;
alarm.week = 0x3;
SysFile_AddAlarm(&alarm);
alarm.power = 0;
alarm.week = 0;
SysFile_AddAlarm(&alarm);
alarm.hour = 7;
alarm.min = 0;
alarm.week = 0x7f;
SysFile_AddAlarm(&alarm);
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
// for (int i=0;i<7;i++)
// {
// g_sysSet->highMax[i]=i*100+200*i;
// g_sysSet->highMin[i]=i*100;
// g_sysSet->preMax[i]=i*i*100;
// g_sysSet->preMin[i]=400;
// g_sysSet->humiMax[i]=i*i*i;
// g_sysSet->humiMin[i]=i*i;
// g_sysSet->heartMax[i]=150-i*10;
// g_sysSet->heartMin[i]=i*10;
// }
}
2025-07-05 19:47:28 +08:00
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
int SysFile_GetHeartData (int *max,int *min)
{
SysFile_SetStruct *set=SysFile_GetSysFile( );
for (int i=0;i<7;i++)
{
// max[i]=set->heartMax[i];
// min[i]=set->heartMin[i];
}
return 0;
}
2025-07-05 19:47:28 +08:00
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
int SysFile_GetTempData (int *max,int *min)
{
SysFile_SetStruct *set=SysFile_GetSysFile( );
for (int i=0;i<7;i++)
{
// max[i]=set->tempMax[i];
// min[i]=set->tempMin[i];
}
return 0;
}
2025-07-05 19:47:28 +08:00
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʪ<EFBFBD><CAAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
int SysFile_GetHumiData (int *max,int *min)
{
SysFile_SetStruct *set=SysFile_GetSysFile( );
for (int i=0;i<7;i++)
{
// max[i]=set->humiMax[i];
// min[i]=set->humiMin[i];
}
return 0;
}
2025-07-05 19:47:28 +08:00
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
int SysFile_GetPreData (int *max,int *min)
{
SysFile_SetStruct *set=SysFile_GetSysFile( );
for (int i=0;i<7;i++)
{
// max[i]=set->preMax[i];
// min[i]=set->preMin[i];
}
return 0;
}
2025-07-05 19:47:28 +08:00
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ĸ߶<C4B8><DFB6><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
int SysFile_GetHighData (int *max,int *min)
{
SysFile_SetStruct *set=SysFile_GetSysFile( );
for (int i=0;i<7;i++)
{
// max[i]=set->highMax[i];
// min[i]=set->highMin[i];
}
return 0;
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>ͼƬ·<C6AC><C2B7>
2025-06-27 00:32:57 +08:00
int SysFile_SetBackPicPath (char *path)
{
if (g_sysSet==0) return -1;
mymemcpy (g_sysSet->backPicPath,path,strlen(path)+1);
return 0;
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
2025-06-27 00:32:57 +08:00
int SysFile_SetAlarmRingPath (char *path)
{
if (g_sysSet==0) return -1;
mymemcpy (g_sysSet->alarmRing,path,strlen(path)+1);
return 0;
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ·<C6AC><C2B7>
2025-06-27 00:32:57 +08:00
int SysFile_SetBootPicPath(char *path)
{
if (g_sysSet == 0) return -1;
mymemcpy(g_sysSet->bootPic, path, strlen(path) + 1);
return 0;
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
int SysFile_AddAlarm (AlarmStruct *a)
{
int ret=-1;
IRQ_DISABLE();
if (g_sysSet)
{
if (g_sysSet->alarmNum<SYSFILE_SETFILE_ALARMNUM)
{
mymemcpy (&g_sysSet->alarm[g_sysSet->alarmNum],a,sizeof (AlarmStruct));
SysFile_InitAlarm (&g_sysSet->alarm[g_sysSet->alarmNum]);
g_sysSet->alarmNum++;
ret=0;
}
}
IRQ_ENABLE();
return ret;
}
2025-07-05 19:47:28 +08:00
//<2F>޸<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
int SysFile_AlterAlarm (int index,AlarmStruct *a)
{
int ret=-1;
IRQ_DISABLE();
if (g_sysSet)
{
if (index<g_sysSet->alarmNum)
{
mymemcpy (&g_sysSet->alarm[index],a,sizeof (AlarmStruct));
SysFile_InitAlarm (&g_sysSet->alarm[index]);
ret=0;
}
}
IRQ_ENABLE();
return ret;
}
2025-07-05 19:47:28 +08:00
//ɾ<><C9BE>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
int SysFile_DelAlarm (int index)
{
int ret=-1;
IRQ_DISABLE();
if (g_sysSet)
{
if (index<g_sysSet->alarmNum)
{
mymemset (&g_sysSet->alarm[index],0,sizeof (AlarmStruct));
g_sysSet->alarmNum--;
for (int i=index;i<g_sysSet->alarmNum;i++)
{
mymemcpy (&g_sysSet->alarm[i],&g_sysSet->alarm[i+1],sizeof (AlarmStruct));
}
ret=0;
}
}
IRQ_ENABLE();
return ret;
}
2025-07-05 19:47:28 +08:00
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
int SysFile_DelAllAlarm (void)
{
int ret=-1;
IRQ_DISABLE();
if (g_sysSet)
{
for (int i=0;i<g_sysSet->alarmNum;i++)
{
mymemset (&g_sysSet->alarm[i],0,sizeof (AlarmStruct));
}
g_sysSet->alarmNum=0;
ret=0;
}
IRQ_ENABLE();
return ret;
}
2025-07-05 19:47:28 +08:00
//ȡ<><C8A1>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
int SysFile_GetAlarm (int index,AlarmStruct *a)
{
int ret=-1;
IRQ_DISABLE();
if (g_sysSet)
{
if (index<g_sysSet->alarmNum)
{
mymemcpy (a,&g_sysSet->alarm[index],sizeof (AlarmStruct));
ret=0;
}
}
IRQ_ENABLE();
return ret;
}
2025-07-05 19:47:28 +08:00
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>Ӹ<EFBFBD><D3B8><EFBFBD>
2025-06-27 00:32:57 +08:00
int SysFile_GetAlarmNum (void)
{
int ret=0;
IRQ_DISABLE();
if (g_sysSet)
{
ret=g_sysSet->alarmNum;
}
IRQ_ENABLE();
return ret;
}
2025-07-05 19:47:28 +08:00
//ȡ<><C8A1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
2025-06-27 00:32:57 +08:00
static void get_nextDay (int *year,int *month,int *day)
{
if (*day<date_get_month_day_max(*year,*month))
{
(*day)++;
}
else
{
(*day)=1;
if (*month<12)
{
(*month)++;
}
else
{
(*month)=1;
(*year)++;
}
}
}
2025-07-05 19:47:28 +08:00
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ںţ<DABA><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0~6
2025-06-27 00:32:57 +08:00
static int get_week (int year,int month,int day)
{
int ret=date_get_week_by_day(year,month,day);
if (ret==7) ret=0;
return ret;
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
void SysFile_UpDataAlarm (AlarmStruct *a)
{
int year=a->year;
int month=a->month;
int day=a->day;
if (a->week==0) return;
do
{
get_nextDay(&year,&month,&day);
}
while (((1<<get_week(year,month,day))&a->week)==0);
a->year=year;
a->month=month;
a->day=day;
}
2025-07-05 19:47:28 +08:00
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
void SysFile_InitAlarm (AlarmStruct *a)
{
int year=0;int month=0;int day=0;
int hour=0;int min=0;int sec=0;
if (a->week==0) return;
date_rtc_get_date (&year,&month,&day);
date_rtc_get_time (&hour,&min,&sec);
2025-07-05 19:47:28 +08:00
int fresh=0;//<2F><><EFBFBD><EFBFBD>Ϊ1ʱ<31><CAB1>Ҫ<EFBFBD><D2AA>һ<EFBFBD><D2BB>
2025-06-27 00:32:57 +08:00
if (a->hour<hour)
{
fresh=1;
}
else if (a->hour==hour)
{
if (a->min<min)
fresh=1;
}
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
if (fresh) get_nextDay(&year,&month,&day);
while (((1<<get_week(year,month,day))&a->week)==0)
{
get_nextDay(&year,&month,&day);
}
a->year=year;
a->month=month;
a->day=day;
}
2025-07-05 19:47:28 +08:00
//У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E4B5BD><EFBFBD><EFBFBD>,1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E4B5BD>0<EFBFBD><30>û<EFBFBD><C3BB>
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>һ<EFBFBD><D2BB>
2025-06-27 00:32:57 +08:00
int SysFile_CheckAlarm (void)
{
int ret=0;
int year=0;int month=0;int day=0;int hour=0;int min=0;int sec=0;
date_rtc_get_date (&year,&month,&day);
date_rtc_get_time (&hour,&min,&sec);
IRQ_DISABLE();
if (g_sysSet)
{
for (int i=0;i<g_sysSet->alarmNum;i++)
{
if (g_sysSet->alarm[i].power)
{
if ((g_sysSet->alarm[i].year==year)&&(g_sysSet->alarm[i].month==month)&&
(g_sysSet->alarm[i].day==day)&&(g_sysSet->alarm[i].hour==hour)&&
(g_sysSet->alarm[i].min==min))
{
2025-07-05 19:47:28 +08:00
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD>
2025-06-27 00:32:57 +08:00
ret=1;
2025-07-05 19:47:28 +08:00
//<2F>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>һ<EFBFBD><D2BB>
2025-06-27 00:32:57 +08:00
SysFile_UpDataAlarm(&g_sysSet->alarm[i]);
}
}
}
}
IRQ_ENABLE();
return ret;
}