//
// WebAuth Sample
// Conf.h
//
// V1.00 - June 2010 (C) KitHouse http://www.kithouse.it
//
// By Claudio Baldazzi: claudio@kithouse.it
//
#include <Arduino.h>
#include <string.h>
#include <../EEPROM/EEPROM.h>
#include "Conf.h"
// ---------------------------------------------------------------------
// Macros
//
#define WBYTEH(X) ((byte)((X) >> 8))
#define WBYTEL(X) ((byte)((X) & 0x00FF))
#define MAKEWORD(H,L) (((unsigned)(H) << 8) | (unsigned)((L) & 0x00FF))
// ---------------------------------------------------------------------
Conf::Conf() {
// Read stored data
eread_mac(_mac);
eread_ip(_ip);
eread_mask(_mask);
eread_gw(_gw);
eread_pwd(_passwd,PWD_MAX_SIZE);
}
// ---------------------------------------------------------------------
// Storage eeprom implementation
//
void Conf::ewrite(unsigned addr, byte* array, unsigned size) {
for(unsigned i=0; i<size; i++)
EEPROM.write(addr+i, array[i]);
}
void Conf::eread(unsigned addr, byte* array, unsigned size) {
for(unsigned i=0; i<size; i++)
array[i] = EEPROM.read(addr+i);
}
void Conf::ewrite_mac(byte* mac) {
ewrite(EADDR_MAC,mac,6);
}
void Conf::ewrite_ip(byte* ip) {
ewrite(EADDR_IP,ip,4);
}
void Conf::ewrite_mask(byte* mask) {
ewrite(EADDR_MASK,mask,4);
}
void Conf::ewrite_gw(byte* gw) {
ewrite(EADDR_GW,gw,4);
}
void Conf::eread_mac(byte* mac) {
eread(EADDR_MAC,mac,6);
}
void Conf::eread_ip(byte* ip) {
eread(EADDR_IP,ip,4);
}
void Conf::eread_mask(byte* mask) {
eread(EADDR_MASK,mask,4);
}
void Conf::eread_gw(byte* gw) {
eread(EADDR_GW,gw,4);
}
byte Conf::ewrite_pwd(char* pwd) {
unsigned addr = EADDR_PWD;
byte size = (WBYTEL(strlen(pwd)) > PWD_MAX_SIZE) ? PWD_MAX_SIZE : WBYTEL(strlen(pwd));
EEPROM.write(addr++, size);
for(int i=0; i<size; i++)
EEPROM.write(addr++, pwd[i]);
return size;
}
byte Conf::eread_pwd(char* pwd, unsigned size) {
unsigned addr = EADDR_PWD;
unsigned esize = EEPROM.read(addr++);
if(size > PWD_MAX_SIZE) size = PWD_MAX_SIZE;
for(int i=0; i<size; i++) {
if(i < esize) pwd[i] = EEPROM.read(addr++);
else pwd[i] = 0x00;
}
}