/**********************************************************************************************************
* @file    loc_graphics_data.h
* @author  HZS
* @version V1.0.0
* @date    2021.04.09
* @brief   c header file
********************************************************************************************************/
#ifndef LOC_GRAPHICS_DATA_H_
#define LOC_GRAPHICS_DATA_H_

#include "loc_graphics_def.h"
#include "images.h"
#include "GUI.h"

#define MAX_Left_SUP_LAYER       7
uint8_t             LeftUpdate = 0;
uint8_t             LeftEn     = 0;
LogicLayerAttr_t    LeftLogicLayerAttr[MAX_Left_SUP_LAYER];
uint8_t             LeftIndex  = 0;
MultiBufferSprite_t LeftSpriteBuf;

#define MAX_Middle_SUP_LAYER       100
uint8_t             MiddleUpdate = 0;
uint8_t             MiddleEn     = 0;
LogicLayerAttr_t    MiddleLogicLayerAttr[MAX_Middle_SUP_LAYER];
uint8_t             MiddleIndex  = 0;
MultiBufferSprite_t MiddleSpriteBuf;

#define MAX_Right_SUP_LAYER       7
uint8_t             RightUpdate = 0;
uint8_t             RightEn     = 0;
LogicLayerAttr_t    RightLogicLayerAttr[MAX_Right_SUP_LAYER];
uint8_t             RightIndex  = 0;
MultiBufferSprite_t RightSpriteBuf;

#define MAX_Top1_SUP_LAYER       4
uint8_t             Top1Update = 0;
uint8_t             Top1En     = 0;
LogicLayerAttr_t    Top1LogicLayerAttr[MAX_Top1_SUP_LAYER];
uint8_t             Top1Index  = 0;
MultiBufferSprite_t Top1SpriteBuf;

#define MAX_Top2_SUP_LAYER       4
uint8_t             Top2Update = 0;
uint8_t             Top2En     = 0;
LogicLayerAttr_t    Top2LogicLayerAttr[MAX_Top2_SUP_LAYER];
uint8_t             Top2Index  = 0;
MultiBufferSprite_t Top2SpriteBuf;

#define MAX_AirP1_SUP_LAYER       7
uint8_t             AirP1Update = 0;
uint8_t             AirP1En     = 0;
LogicLayerAttr_t    AirP1LogicLayerAttr[MAX_AirP1_SUP_LAYER];
uint8_t             AirP1Index  = 0;
MultiBufferSprite_t AirP1SpriteBuf;

#define MAX_Clock_SUP_LAYER       6
uint8_t             ClockUpdate = 0;
uint8_t             ClockEn     = 0;
LogicLayerAttr_t    ClockLogicLayerAttr[MAX_Clock_SUP_LAYER];
uint8_t             ClockIndex  = 0;
MultiBufferSprite_t ClockSpriteBuf;

#define MAX_Top4_SUP_LAYER       6
uint8_t             Top4Update = 0;
uint8_t             Top4En     = 0;
LogicLayerAttr_t    Top4LogicLayerAttr[MAX_Top4_SUP_LAYER];
uint8_t             Top4Index  = 0;
MultiBufferSprite_t Top4SpriteBuf;

#define MAX_Top5_SUP_LAYER       7
uint8_t             Top5Update = 0;
uint8_t             Top5En     = 0;
LogicLayerAttr_t    Top5LogicLayerAttr[MAX_Top5_SUP_LAYER];
uint8_t             Top5Index  = 0;
MultiBufferSprite_t Top5SpriteBuf;

#define MAX_AirP2_SUP_LAYER       7
uint8_t             AirP2Update = 0;
uint8_t             AirP2En     = 0;
LogicLayerAttr_t    AirP2LogicLayerAttr[MAX_AirP2_SUP_LAYER];
uint8_t             AirP2Index  = 0;
MultiBufferSprite_t AirP2SpriteBuf;

#define MAX_Top6_SUP_LAYER       4
uint8_t             Top6Update = 0;
uint8_t             Top6En     = 0;
LogicLayerAttr_t    Top6LogicLayerAttr[MAX_Top6_SUP_LAYER];
uint8_t             Top6Index  = 0;
MultiBufferSprite_t Top6SpriteBuf;

#define MAX_Top7_SUP_LAYER       11
uint8_t             Top7Update = 0;
uint8_t             Top7En     = 0;
LogicLayerAttr_t    Top7LogicLayerAttr[MAX_Top7_SUP_LAYER];
uint8_t             Top7Index  = 0;
MultiBufferSprite_t Top7SpriteBuf;

#define MAX_Bottm1_SUP_LAYER       15
uint8_t             Bottm1Update = 0;
uint8_t             Bottm1En     = 0;
LogicLayerAttr_t    Bottm1LogicLayerAttr[MAX_Bottm1_SUP_LAYER];
uint8_t             Bottm1Index  = 0;
MultiBufferSprite_t Bottm1SpriteBuf;

#define MAX_Bottm2_SUP_LAYER       11
uint8_t             Bottm2Update = 0;
uint8_t             Bottm2En     = 0;
LogicLayerAttr_t    Bottm2LogicLayerAttr[MAX_Bottm2_SUP_LAYER];
uint8_t             Bottm2Index  = 0;
MultiBufferSprite_t Bottm2SpriteBuf;

#define MAX_Bottm2P_SUP_LAYER       8
uint8_t             Bottm2PUpdate = 0;
uint8_t             Bottm2PEn     = 0;
LogicLayerAttr_t    Bottm2PLogicLayerAttr[MAX_Bottm2P_SUP_LAYER];
uint8_t             Bottm2PIndex  = 0;
MultiBufferSprite_t Bottm2PSpriteBuf;

#define MAX_Bottm3_SUP_LAYER       3
uint8_t             Bottm3Update = 0;
uint8_t             Bottm3En     = 0;
LogicLayerAttr_t    Bottm3LogicLayerAttr[MAX_Bottm3_SUP_LAYER];
uint8_t             Bottm3Index  = 0;
MultiBufferSprite_t Bottm3SpriteBuf;

#define MAX_Bottm4_SUP_LAYER       6
uint8_t             Bottm4Update = 0;
uint8_t             Bottm4En     = 0;
LogicLayerAttr_t    Bottm4LogicLayerAttr[MAX_Bottm4_SUP_LAYER];
uint8_t             Bottm4Index  = 0;
MultiBufferSprite_t Bottm4SpriteBuf;

#define MAX_Bottm5_SUP_LAYER       9
uint8_t             Bottm5Update = 0;
uint8_t             Bottm5En     = 0;
LogicLayerAttr_t    Bottm5LogicLayerAttr[MAX_Bottm5_SUP_LAYER];
uint8_t             Bottm5Index  = 0;
MultiBufferSprite_t Bottm5SpriteBuf;

#define MAX_Bottm6_SUP_LAYER       6
uint8_t             Bottm6Update = 0;
uint8_t             Bottm6En     = 0;
LogicLayerAttr_t    Bottm6LogicLayerAttr[MAX_Bottm6_SUP_LAYER];
uint8_t             Bottm6Index  = 0;
MultiBufferSprite_t Bottm6SpriteBuf;

#define MAX_Bottm7_SUP_LAYER       9
uint8_t             Bottm7Update = 0;
uint8_t             Bottm7En     = 0;
LogicLayerAttr_t    Bottm7LogicLayerAttr[MAX_Bottm7_SUP_LAYER];
uint8_t             Bottm7Index  = 0;
MultiBufferSprite_t Bottm7SpriteBuf;

#define MAX_Bottm8_SUP_LAYER       6
uint8_t             Bottm8Update = 0;
uint8_t             Bottm8En     = 0;
LogicLayerAttr_t    Bottm8LogicLayerAttr[MAX_Bottm8_SUP_LAYER];
uint8_t             Bottm8Index  = 0;
MultiBufferSprite_t Bottm8SpriteBuf;

#define MAX_Bottm9_SUP_LAYER       3
uint8_t             Bottm9Update = 0;
uint8_t             Bottm9En     = 0;
LogicLayerAttr_t    Bottm9LogicLayerAttr[MAX_Bottm9_SUP_LAYER];
uint8_t             Bottm9Index  = 0;
MultiBufferSprite_t Bottm9SpriteBuf;

#define MAX_Bottm10_SUP_LAYER       6
uint8_t             Bottm10Update = 0;
uint8_t             Bottm10En     = 0;
LogicLayerAttr_t    Bottm10LogicLayerAttr[MAX_Bottm10_SUP_LAYER];
uint8_t             Bottm10Index  = 0;
MultiBufferSprite_t Bottm10SpriteBuf;

#define MAX_Bottm11_SUP_LAYER       9
uint8_t             Bottm11Update = 0;
uint8_t             Bottm11En     = 0;
LogicLayerAttr_t    Bottm11LogicLayerAttr[MAX_Bottm11_SUP_LAYER];
uint8_t             Bottm11Index  = 0;
MultiBufferSprite_t Bottm11SpriteBuf;

#define MAX_Stop_SUP_LAYER       3
uint8_t             StopUpdate = 0;
uint8_t             StopEn     = 0;
LogicLayerAttr_t    StopLogicLayerAttr[MAX_Stop_SUP_LAYER];
uint8_t             StopIndex  = 0;
MultiBufferSprite_t StopSpriteBuf;

#define MAX_Park_SUP_LAYER       3
uint8_t             ParkUpdate = 0;
uint8_t             ParkEn     = 0;
LogicLayerAttr_t    ParkLogicLayerAttr[MAX_Park_SUP_LAYER];
uint8_t             ParkIndex  = 0;
MultiBufferSprite_t ParkSpriteBuf;
#if 0
#define MAX_Battery_SUP_LAYER       2
uint8_t             BatteryUpdate = 0;
uint8_t             BatteryEn     = 0;
LogicLayerAttr_t    BatteryLogicLayerAttr[MAX_Battery_SUP_LAYER];
uint8_t             BatteryIndex  = 0;
MultiBufferSprite_t BatterySpriteBuf;
#endif

#define MAX_Charge_SUP_LAYER       2
uint8_t             ChargeUpdate = 0;
uint8_t             ChargeEn     = 0;
LogicLayerAttr_t    ChargeLogicLayerAttr[MAX_Charge_SUP_LAYER];
uint8_t             ChargeIndex  = 0;
MultiBufferSprite_t ChargeSpriteBuf;

static const SpritesHandler_t SpriteHandler[Max_Sprite] =
{
    {Left_Sprite,      {60,   82,  300, 290, 3},  TARGET_VRAM,  &LeftSpriteBuf,    &LeftIndex,    LeftLogicLayerAttr,    MAX_Left_SUP_LAYER,    &LeftUpdate,    &LeftEn,    /*NULL*/GUI_Left   },
    {Middle_Sprite,    {306/*390*/,  88,  636/*478*/, 392/*304*/, 1},  TARGET_SDRAM, &MiddleSpriteBuf,  &MiddleIndex,  MiddleLogicLayerAttr,  MAX_Middle_SUP_LAYER,  &MiddleUpdate,  &MiddleEn,  /*NULL*/GUI_Middle },
    {Right_Sprite,     {886,  82,  300, 290, 3},  TARGET_VRAM,  &RightSpriteBuf,   &RightIndex,   RightLogicLayerAttr,   MAX_Right_SUP_LAYER,   &RightUpdate,   &RightEn,           GUI_Right  },
    {Top1_Sprite,      {12,   25,  90,  78,  2},  TARGET_VRAM, &Top1SpriteBuf,    &Top1Index,    Top1LogicLayerAttr,    MAX_Top1_SUP_LAYER,    &Top1Update,    &Top1En,    /*NULL*/GUI_Top1   },
    {Top2_Sprite,      {616,  55,  92,  14,  1},  TARGET_VRAM, &Top2SpriteBuf,    &Top2Index,    Top2LogicLayerAttr,    MAX_Top2_SUP_LAYER,    &Top2Update,    &Top2En,    /*NULL*/GUI_Top2   },
    //{AirP1_Sprite,     {330,  43,  164, 30,  1},  TARGET_VRAM, &AirP1SpriteBuf,   &AirP1Index,   AirP1LogicLayerAttr,   MAX_AirP1_SUP_LAYER,   &AirP1Update,   &AirP1En,   /*NULL*/GUI_AirP1  },
    //{Clock_Sprite,     {400,  21,  90,  20,  1},  TARGET_VRAM, &ClockSpriteBuf,   &ClockIndex,   ClockLogicLayerAttr,   MAX_Clock_SUP_LAYER,   &ClockUpdate,   &ClockEn,   NULL/*GUI_Clock*/  },
    {Top4_Sprite,      {500,  15,  266, 30,  1},  TARGET_VRAM, &Top4SpriteBuf,    &Top4Index,    Top4LogicLayerAttr,    MAX_Top4_SUP_LAYER,    &Top4Update,    &Top4En,    /*NULL*/GUI_Top4   },
    {Top5_Sprite,      {770,  19,  200, 30,  1},  TARGET_VRAM, &Top5SpriteBuf,    &Top5Index,    Top5LogicLayerAttr,    MAX_Top5_SUP_LAYER,    &Top5Update,    &Top5En,    /*NULL*/GUI_Top5   },
    //{AirP2_Sprite,     {764,  43,  164, 30,  1},  TARGET_VRAM, &AirP2SpriteBuf,   &AirP2Index,   AirP2LogicLayerAttr,   MAX_AirP2_SUP_LAYER,   &AirP2Update,   &AirP2En,   /*NULL*/GUI_AirP2  },
    {Top6_Sprite,      {1173, 25,  90,  78,  2},  TARGET_VRAM, &Top6SpriteBuf,    &Top6Index,    Top6LogicLayerAttr,    MAX_Top6_SUP_LAYER,    &Top6Update,    &Top6En,    /*NULL*/GUI_Top6   },
    {Top7_Sprite,      {398,  73,  480, 30,  2},  TARGET_VRAM, &Top7SpriteBuf,    &Top7Index,    Top7LogicLayerAttr,    MAX_Top7_SUP_LAYER,    &Top7Update,    &Top7En,    /*NULL*/GUI_Top7   },
    {Bottm1_Sprite,    {307,  372, 662, 30,  1},  TARGET_VRAM, &Bottm1SpriteBuf,  &Bottm1Index,  Bottm1LogicLayerAttr,  MAX_Bottm1_SUP_LAYER,  &Bottm1Update,  &Bottm1En,  /*NULL*/GUI_Bottm1 },
    {Bottm2_Sprite,    {30,   412, 272, 30,  1},  TARGET_VRAM, &Bottm2SpriteBuf,  &Bottm2Index,  Bottm2LogicLayerAttr,  MAX_Bottm2_SUP_LAYER,  &Bottm2Update,  &Bottm2En,  /*NULL*/GUI_Bottm2 },
    {Bottm2P_Sprite,   {30,   444, 224, 30,  1},  TARGET_VRAM, &Bottm2PSpriteBuf, &Bottm2PIndex, Bottm2PLogicLayerAttr, MAX_Bottm2P_SUP_LAYER, &Bottm2PUpdate, &Bottm2PEn, /*NULL*/GUI_Bottm2P},
    {Bottm3_Sprite,    {292,  434, 96,  30,  1},  TARGET_VRAM, &Bottm3SpriteBuf,  &Bottm3Index,  Bottm3LogicLayerAttr,  MAX_Bottm3_SUP_LAYER,  &Bottm3Update,  &Bottm3En,  /*NULL*/GUI_Bottm3 },
    {Bottm4_Sprite,    {408,  412, 174, 30,  1},  TARGET_VRAM, &Bottm4SpriteBuf,  &Bottm4Index,  Bottm4LogicLayerAttr,  MAX_Bottm4_SUP_LAYER,  &Bottm4Update,  &Bottm4En,  /*NULL*/GUI_Bottm4 },
    {Bottm5_Sprite,    {408,  444, 212, 30,  1},  TARGET_VRAM, &Bottm5SpriteBuf,  &Bottm5Index,  Bottm5LogicLayerAttr,  MAX_Bottm5_SUP_LAYER,  &Bottm5Update,  &Bottm5En,  /*NULL*/GUI_Bottm5 },
    {Bottm6_Sprite,    {686,  412, 176, 30,  1},  TARGET_VRAM, &Bottm6SpriteBuf,  &Bottm6Index,  Bottm6LogicLayerAttr,  MAX_Bottm6_SUP_LAYER,  &Bottm6Update,  &Bottm6En,  /*NULL*/GUI_Bottm6 },
    {Bottm7_Sprite,    {686,  444, 212, 30,  1},  TARGET_VRAM, &Bottm7SpriteBuf,  &Bottm7Index,  Bottm7LogicLayerAttr,  MAX_Bottm7_SUP_LAYER,  &Bottm7Update,  &Bottm7En,  /*NULL*/GUI_Bottm7 },
    //{Bottm8_Sprite,    {579,  408, 122, 64,  1},  TARGET_SDRAM, &Bottm8SpriteBuf,  &Bottm8Index,  Bottm8LogicLayerAttr,  MAX_Bottm8_SUP_LAYER,  &Bottm8Update,  &Bottm8En,  /*NULL*/GUI_Bottm8 },
    {Bottm9_Sprite,    {891,  434, 90,  30,  1},  TARGET_VRAM, &Bottm9SpriteBuf,  &Bottm9Index,  Bottm9LogicLayerAttr,  MAX_Bottm9_SUP_LAYER,  &Bottm9Update,  &Bottm9En,  /*NULL*/GUI_Bottm9 },
    {Bottm10_Sprite,   {1118, 412, 130, 30,  1},  TARGET_VRAM, &Bottm10SpriteBuf, &Bottm10Index, Bottm10LogicLayerAttr, MAX_Bottm10_SUP_LAYER, &Bottm10Update, &Bottm10En, /*NULL*/GUI_Bottm10},
    {Bottm11_Sprite,   {1012, 445, 234, 20,  1},  TARGET_VRAM, &Bottm11SpriteBuf, &Bottm11Index, Bottm11LogicLayerAttr, MAX_Bottm11_SUP_LAYER, &Bottm11Update, &Bottm11En, /*NULL*/GUI_Bottm11},
    {Stop_Sprite,      {12,   375, 96,  30,  1},  TARGET_VRAM, &StopSpriteBuf,    &StopIndex,    StopLogicLayerAttr,    MAX_Stop_SUP_LAYER,    &StopUpdate,    &StopEn,    /*NULL*/GUI_Stop   },
    {Park_Sprite,      {1131, 374, 132, 32,  1},  TARGET_VRAM, &ParkSpriteBuf,    &ParkIndex,    ParkLogicLayerAttr,    MAX_Park_SUP_LAYER,    &ParkUpdate,    &ParkEn,    /*NULL*/GUI_Park   },

    //{Battery_Sprite,   {21,   72,  30,  22,  1},  TARGET_VRAM, &BatterySpriteBuf, &BatteryIndex, BatteryLogicLayerAttr, MAX_Battery_SUP_LAYER, &BatteryUpdate, &BatteryEn, /*NULL*/GUI_Battery},
    {Charge_Sprite,    {1216, 109,  56,  72,  1}, TARGET_VRAM, &ChargeSpriteBuf,  &ChargeIndex,  ChargeLogicLayerAttr,  MAX_Charge_SUP_LAYER,  &ChargeUpdate,  &ChargeEn,  /*NULL*/GUI_Charge },
};

static const r_screen_attr_t ScreenAttr =
{
    1280, 480, 1280,      /* JEPG Window*/
    1280, 480, 1280,      /* Loc Window*/
    1,                    /* 刷新时间，50ms*/
    Max_Sprite,           /* 主屏幕Sprite数量*/
    Max_Sprite,           /* 全部Sprite数量*/
    SpriteSize            /* 最大的图片数量*/
};

#endif
