mcu_ab568x/app/projects/AB5682C_128/functions/spirit_island_api.c
2025-05-30 18:03:10 +08:00

123 lines
2.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "spirit_island_api.h"
#include "app_variable.h"
#if defined(TJD_GUI_SPIRIT_ISLAND_SHOW)
spirit_island_controls_t my_spirit_island[MAX_TASK_NUM] ;
//获取顶端任务标号
int get_si_tail_index(void)
{
int index = -1;
for(int index = MAX_TASK_NUM - 1 ; index >= 0;index--)
{
if((my_spirit_island[index].is_valid == true)&&(my_spirit_island[index].type != none))
{
return index;
}
}
return index;
}
//根据id号填入任务
/****************
id = 0 已经初始化为无消息
id = 1 新消息
id = 2 音乐
id = 3 秒表
****************/
uint8_t si_activated_task(u8 type,u8 message_type)
{
uint8_t new_i=0;
printf("si_activated_task[%d,%d]",SysVariable.SpiritIslandSwitch,type);
if(SysVariable.SpiritIslandSwitch == false)
return 0;
//重复激活,置顶被重复的任务
si_delet_task(type);
//新增一个任务在顶端
for(new_i=0;new_i<MAX_TASK_NUM;new_i++) // for(int i=MAX_TASK_NUM-1;i>=0;i--)
{
printf("newa task[%d]\n",new_i);
if((my_spirit_island[new_i].is_valid==false)&&(my_spirit_island[new_i].type==none))
{
printf("newa task11[%d]\n",new_i);
my_spirit_island[new_i].message_type = message_type;
my_spirit_island[new_i].type = type;
my_spirit_island[new_i].is_valid = true;
SysVariable.SpiritIsland_New_Event = true;
printf("newa task11[%d,%d,%d]\n",new_i,my_spirit_island[new_i].type ,my_spirit_island[new_i].is_valid);
// my_spirit_island[new_i].spirit_island_show = get_si_show_task(my_spirit_island[new_i].curtask_id);
break;
}
}
return new_i;
}
//根据ID号删除一个任务
int si_delet_task(int id)
{
int i=0;
for(i=MAX_TASK_NUM-1;i>=0;i--)
{
if((my_spirit_island[i].type == id)&&(my_spirit_island[i].is_valid == true))
{
//查询最新任务位置
int index = get_si_tail_index();
if(i== index)
{
memset(&my_spirit_island[i], 0, sizeof(spirit_island_controls_t));
}
else
{
for(int var=i;i<index;i++) //顺延操作
{
memcpy(&my_spirit_island[var], &my_spirit_island[var+1], sizeof(spirit_island_controls_t));
}
memset(&my_spirit_island[index], 0, sizeof(spirit_island_controls_t));
}
break;
}
}
return i;
}
//删除全部任务
void si_delete_all_task(void)
{
memset(&my_spirit_island,0,MAX_TASK_NUM*sizeof(spirit_island_controls_t));
}
//执行顶端任务
spirit_island_controls_t *si_enforce_task(void)
{
int i=0;
for(i= MAX_TASK_NUM - 1;i >= 0; i--)
{
printf("my_spirit_island[%d].is_valid = %d\n",i,my_spirit_island[i].is_valid);
if((my_spirit_island[i].is_valid == true)&& (my_spirit_island[i].type != none))
{
return &my_spirit_island[i];
}
}
return NULL;
}
void spirit_island_init(void)
{
if(SysVariable.SpiritIslandSwitch == true)
{
printf("spirit_island_init");
si_delete_all_task();
si_activated_task(nomessage,0);
}
}
#endif