123 lines
2.9 KiB
C
123 lines
2.9 KiB
C
|
||
#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
|
||
|