Beruflich Dokumente
Kultur Dokumente
Bernd Felsche
Innovative Reckoning
at The Perth Artifactory
28th of March, 2012
Factory defaults
Data Dictionary
Data Types
/*
*
*
*
*
*
#define
#define
#define
#define
#define
#define
#define
#define
et_BIT
et_IP
et_MAC
et_UINT
et_INT
et_CHR
et_BYT
et_STR
0
1
2
3
4
5
6
7
//
//
//
//
//
//
//
//
a bit-pattern in a byte
an IPAddress (IPv4) 4 bytes + chksum
MAC number 6 bytes + checksum
unsigned integer 16-bits + checksum
signed integer 16-bits + checksum
single character in a byte
a number in a byte
a character array (string) n-bytes + chksum
Data Objects
// Base
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
Page
EEbase
0
NetMAGIC 170
// magic value (binary 10101010)
SerialScale
1200
// baud scaling factor
l_EEbase
"SysBase"
// Base page
m_EEbase
'S'
// index page/menu ID
Version
EEbase+1
// 1 byte version number
l_Version
"VR"
// index label within page
ll_Version
"Version"
// long label
t_Version
et_BYT
// data type
p_Version
true
// block run-time config change
s_Version
1
// length in EEPROM
Revision
Version+1
// 1 byte revision number
l_Revision
"RV"
ll_Revision
"Revision"
t_Revision
et_BYT
p_Revision
true
s_Revision
1
Release
Revision+1
// 1 byte release number
l_Release
"RL"
ll_Release
"Release"
t_Release
et_BYT
p_Release
true
s_Release
1
SerialSpd
Release+1
// 1 byte serial speed / 1200 (0=>300)
l_SerialSpd
"BD"
ll_SerialSpd
"Ser.Baud"
t_SerialSpd et_BYT
p_SerialSpd false
s_SerialSpd 1
#define EEtop
1024
Store Parameters
// Write unsigned 16-bit integer to EEPROM and a byte checksum
byte setEEuint(uint16_t *v_int, uint16_t base){
byte b[] = {255,255};
// memcpy does a "byte-swap"
memcpy((void *)b,(void *)v_int,2);
byte sum = b[1] + b[0]+b[0];
EEPROM.write(base+1,b[0]);
EEPROM.write(base, b[1]);
EEPROM.write(base+2, sum);
return sum;
}
Handling Types
// Display value corresponding to dictionary value
void showEntry(uint8_t idx, bool factory) {
byte sz = entries[idx].sz - 1;
uint16_t ptr = entries[idx].data;
if (factory) // For factory settings shift base
ptr += FDefault;
// format according to type
switch (entries[idx].type) {
case et_BIT: // 0
// it's a bit-pattern
Serial.write("bits\t");
ee_byte = EEPROM.read(ptr);
printbits(ee_byte);
break;
case et_IP: // 1
Serial.write("IPAddr\t");
ee_ip = EEIPAddr(ptr);
Serial.print(ee_ip);
break;
case et_MAC: // 2
Serial.write("MAC\t");
EEMAC(ee_mac,ptr);
displayMAC(ee_mac);
break;
Back End
No-Sweat Exercises