
from esp32 import NVS

EEPROM_SIZE = 512
# 模拟EEPROM读取函数
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright (c) 2024 xukaiming
# All rights reserved

class EEPROM:
    def __init__(self):
        self.data = {}
        self.nvs = NVS('DWIN')
        # 初始化一些默认值 
        self.read_from_NVS()
            
    def write_to_NVS(self):
        nvs_data = bytearray(EEPROM_SIZE) 
        for i in range(EEPROM_SIZE):
            nvs_data[i] = self.read_byte(i)
            #print("write_to_NVSn {:2X}".format(nvs_data[i]))
        self.nvs.set_blob('DWIN_CFG',nvs_data)
        self.nvs.commit()
        print('write_to_NVS \r')
        
        
    def read_from_NVS(self):
        nvs_data = bytearray(EEPROM_SIZE) 
        for i in range(EEPROM_SIZE):
            nvs_data[i] = 0
        try:
            self.nvs.get_blob('DWIN_CFG', nvs_data)
            for i in range(EEPROM_SIZE):
                self.write_byte(i,nvs_data[i])
                
        except Exception as e:
            self.write_to_NVS()
            print("Exception: {}".format(e))
        
        print('read_from_NVS \r')
        return  nvs_data     
    
    def read_byte(self, addr):
        """读取一个字节"""
        data = self.data.get(addr, 0);
        #print(f'read_byte  addr {addr}={data} \r')
        return data
    
    def write_byte(self, addr, value):
        """写入一个字节"""
        data = value & 0xFF
        self.data[addr] = data
        # print(f'write_byte  addr {addr}={data} \r')
    
    def read_word(self, addr):
        """读取一个字（两个字节）"""
        high = self.read_byte(addr)
        low = self.read_byte(addr + 1)
        data = (high << 8) | low
        # print(f'read_word  addr {addr}={data} \r')
        return data
    
    def write_word(self, addr, value):
        """写入一个字（两个字节）"""
        high = (value >> 8) & 0xFF
        low = value & 0xFF
        self.write_byte(addr, high)
        self.write_byte(addr + 1, low)
        #print(f'write_word  addr:{addr}={value}  \r')
    
    

 