#include <Wire.h>
#include <AT24C32N.h>

EEPROM_AT24C32N bhcpEEPROM;
#define I2C_EEPROM_Address  0x50

const uint16_t sequenceLocation = 0;
const uint16_t rainLocation = 512;

const uint16_t sequenceBytes = 2;
const uint16_t rainBytes = 2;

union EEPROMPayload {
  char payloadByte[2];
  uint16_t counter;
};

EEPROMPayload EEPROMWriteData, EEPROMReadData, rainCounter, windCounter;

void setup () {
  pinMode(Vext,OUTPUT);
  digitalWrite(Vext,LOW); // Turn on Vext (assuming EEPROM powered through Vext)
  Serial.begin(115200);
  delay(1000);
  Serial.println("[setup] I2C EEPROM Test");
}

void loop () {

  // Read the Sequence Number from EEPROM
  
  Wire.begin();
  bhcpEEPROM.RetrieveBytes(EEPROMReadData.payloadByte, sequenceBytes, sequenceLocation, false);
  Wire.end();
  Serial.print("[loop] Read Sequence Number ");
  Serial.println(EEPROMReadData.counter);
  messageCounter = EEPROMReadData.counter;

  // Increment the Sequence Number
  
  messageCounter = messageCounter + 1;

  // Write the Sequence Number to EEPROM
  
  EEPROMWriteData.counter = messageCounter;
  Serial.print("[loop] Write Sequence Number ");
  Serial.println(EEPROMWriteData.counter);
  Wire.begin();
  bhcpEEPROM.WriteBytes(sequenceLocation, sequenceBytes, EEPROMWriteData.payloadByte);
  Wire.end();
  
  delay(5000);
}