#include "TYW_stdint.h"
#include "NVM.h"
#include "Internal_EEPROM.h"
#include <string.h>


#define EEPROM_BASE_ADDR 0
#define EEPROM_PAGE_SIZE 16


void NVM_Usr_Init(void)
{
    uint8_t        readbuff [ 512 ];
    uint8_t        writebuff [ 512 ];
    r_eel_status_t loc_condition;

    //CAFD
    memset(readbuff, 0, sizeof(readbuff));
    memset(writebuff, 0, sizeof(writebuff));



    loc_condition = Internal_EEL_Read(INTERNAL_EE_BLOCK_05, readbuff, INTERNAL_EE_BLOCK_05_size);
    if ( (readbuff [ 0 ] != 0x35) || (readbuff [ 1 ] != 0x53) || (readbuff [ 2 ] != 0x7A) || (readbuff [ 3 ] != 0xA7) || (loc_condition == R_EEL_ERR_NO_INSTANCE) )
    {

        writebuff [ 0 ] = 0x35u;
        writebuff [ 1 ] = 0x53u;
        writebuff [ 2 ] = 0x7Au;
        writebuff [ 3 ] = 0xA7u;
        Internal_EEL_Write(INTERNAL_EE_BLOCK_05, writebuff, INTERNAL_EE_BLOCK_05_size);
        Internal_EEL_Read(INTERNAL_EE_BLOCK_05, readbuff, INTERNAL_EE_BLOCK_05_size);

    }


    //CAFD CTRL
    memset(readbuff, 0, sizeof(readbuff));
    memset(writebuff, 0, sizeof(writebuff));
    loc_condition = Internal_EEL_Read(INTERNAL_EE_BLOCK_06, readbuff, INTERNAL_EE_BLOCK_06_size);
    if ( (readbuff [ 0 ] != 0x35) || (readbuff [ 1 ] != 0x53) || (readbuff [ 2 ] != 0x7A) || (readbuff [ 3 ] != 0xA7) || (loc_condition == R_EEL_ERR_NO_INSTANCE) )
    {
        writebuff [ 0 ] = 0x35u;
        writebuff [ 1 ] = 0x53u;
        writebuff [ 2 ] = 0x7Au;
        writebuff [ 3 ] = 0xA7u;
        writebuff [ 4 ] = 0x00u;
        Internal_EEL_Write(INTERNAL_EE_BLOCK_06, writebuff, INTERNAL_EE_BLOCK_06_size);
        Internal_EEL_Read(INTERNAL_EE_BLOCK_06, readbuff, INTERNAL_EE_BLOCK_06_size);

    }


    //USR
    memset(readbuff, 0, sizeof(readbuff));
    memset(writebuff, 0, sizeof(writebuff));
    loc_condition = Internal_EEL_Read(INTERNAL_EE_BLOCK_07, readbuff, INTERNAL_EE_BLOCK_07_size);
    if ( (readbuff [ 0 ] != 0x35) || (readbuff [ 1 ] != 0x53) || (readbuff [ 2 ] != 0x7A) || (readbuff [ 3 ] != 0xA7) || (loc_condition == R_EEL_ERR_NO_INSTANCE) )
    {
        writebuff [ 0 ] = 0x35u;
        writebuff [ 1 ] = 0x53u;
        writebuff [ 2 ] = 0x7Au;
        writebuff [ 3 ] = 0xA7u;


        Internal_EEL_Write(INTERNAL_EE_BLOCK_07, writebuff, INTERNAL_EE_BLOCK_07_size);
        Internal_EEL_Read(INTERNAL_EE_BLOCK_07, readbuff, INTERNAL_EE_BLOCK_07_size);
    }
    //     Internal_EEL_Write(i, write, 64);
}

void CAFD_NVM_Update(void)
{
    uint8_t        readbuff [ 512 ];
    uint8_t        writebuff [ 512 ];
    r_eel_status_t loc_condition;
    //CAFD
    memset(readbuff, 0, sizeof(readbuff));
    memset(writebuff, 0, sizeof(writebuff));
    writebuff [ 0 ] = 0x35u;
    writebuff [ 1 ] = 0x53u;
    writebuff [ 2 ] = 0x7Au;
    writebuff [ 3 ] = 0xA7u;

    Internal_EEL_Write(INTERNAL_EE_BLOCK_05, writebuff, INTERNAL_EE_BLOCK_05_size);
    Internal_EEL_Read(INTERNAL_EE_BLOCK_05, readbuff, INTERNAL_EE_BLOCK_05_size);

}

void CAFD_CTRL_Update(uint8_t status)
{
    uint8_t        readbuff [ 512 ];
    uint8_t        writebuff [ 512 ];
    r_eel_status_t loc_condition;
    //CAFD CTRL
    memset(readbuff, 0, sizeof(readbuff));
    memset(writebuff, 0, sizeof(writebuff));
    writebuff [ 0 ] = 0x35u;
    writebuff [ 1 ] = 0x53u;
    writebuff [ 2 ] = 0x7Au;
    writebuff [ 3 ] = 0xA7u;
    writebuff [ 4 ] = status;
    Internal_EEL_Write(INTERNAL_EE_BLOCK_06, writebuff, INTERNAL_EE_BLOCK_06_size);
    Internal_EEL_Read(INTERNAL_EE_BLOCK_06, readbuff, INTERNAL_EE_BLOCK_06_size);

}