#include "bsp_head.h"

#include "kit_data.h"
#include "kit_debug.h"

const uint32_t head_flag[kHeadStatus_None] = {0xEEEEEEEE, 0xAAAAAAAA};

kit_ret_e bsp_head_set_status(flash_Item_t *item, uint32_t addr, HeadStatus st)
{
    kit_ret_e res = kKit_Ret_ParamErr;
    KIT_ASSERT_PARAM((item != NULL) && (st < kHeadStatus_None));
    
    if((item != NULL) && (st < kHeadStatus_None))
    {
        res = drv_flash_write_u32(item, addr + (st << 2), head_flag[st]);
    }
    return res;
}

HeadStatus bsp_head_get_status(flash_Item_t *item, uint32_t addr)
{   
    kit_ret_e  res;
    uint32_t   head1, head2;
    HeadStatus st = kHeadStatus_Other;
    
    KIT_ASSERT_PARAM(item != NULL);
    if(item != NULL)
    {
        res = drv_flash_read_u32(item, addr, &head1);
        res |= drv_flash_read_u32(item, addr + 4, &head2);
        if(res == kKit_Ret_Ok)
        {
            if((head1 == 0xEEEEEEEE) && (head2 == 0xAAAAAAAA))
            {
                st = kHeadStatus_Finsih;
            }
            else if((head1 == 0xEEEEEEEE) && (head2 == 0xFFFFFFFF))
            {
                st = kHeadStatus_Start;
            }
            else if((head1 == 0xFFFFFFFF) && (head2 == 0xFFFFFFFF))
            {
                st = kHeadStatus_None;
            }
        }
    }
    return st;
}
