32 #define PRINTF(FORMAT,args...) printf_P(PSTR(FORMAT),##args)
36 #define PRINTD(FORMAT,args...) printf_P(PSTR(FORMAT),##args)
42 #include <avr/pgmspace.h>
43 #include <avr/eeprom.h>
52 #include "contiki-net.h"
55 #if CONTIKI_CONF_RANDOM_MAC
56 extern uint8_t rng_get_uint8(
void);
58 generate_new_eui64(uint8_t eui64[8]) {
60 eui64[1] = rng_get_uint8();
61 eui64[2] = rng_get_uint8();
64 eui64[5] = rng_get_uint8();
65 eui64[6] = rng_get_uint8();
66 eui64[7] = rng_get_uint8();
72 extern uint8_t default_mac_address[8];
73 extern uint8_t default_server_name[16];
74 extern uint8_t default_domain_name[30];
76 const uint8_t default_mac_address[8]
PROGMEM = PARAMS_EUI64ADDR;
77 const uint8_t default_server_name[]
PROGMEM = PARAMS_SERVERNAME;
78 const uint8_t default_domain_name[]
PROGMEM = PARAMS_DOMAINNAME;
81 #if PARAMETER_STORAGE==0
84 params_get_eui64(uint8_t *eui64) {
85 #if CONTIKI_CONF_RANDOM_MAC
86 PRINTD(
"Generating random EUI64 MAC\n");
87 generate_new_eui64(eui64);
91 for (i=0;i<
sizeof(default_mac_address);i++) eui64[i] = pgm_read_byte_near(default_mac_address+i);
95 #elif PARAMETER_STORAGE==1
103 uint8_t eemem_mac_address[] EEMEM = PARAMS_EUI64ADDR;
104 uint8_t eemem_server_name[] EEMEM = PARAMS_SERVERNAME;
105 uint8_t eemem_domain_name[] EEMEM = PARAMS_DOMAINNAME;
108 uint16_t eemem_nodeid EEMEM = PARAMS_NODEID;
109 uint8_t eemem_channel[2] EEMEM = {PARAMS_CHANNEL, ~PARAMS_CHANNEL};
110 uint16_t eemem_panid EEMEM = PARAMS_PANID;
111 uint16_t eemem_panaddr EEMEM = PARAMS_PANADDR;
112 uint8_t eemem_txpower EEMEM = PARAMS_TXPOWER;
114 #if CONTIKI_CONF_RANDOM_MAC
115 static uint8_t randomeui64;
117 uint8_t i,buffer[32];
119 params_get_channel(
void) {
121 *(uint16_t *)x = eeprom_read_word ((uint16_t *)&eemem_channel);
123 if( (x[0]<11) || (x[0] > 26)) x[1]=x[0];
125 if((uint8_t)x[0]!=(uint8_t)~x[1]) {
128 PRINTD(
"EEPROM is corrupt, rewriting with defaults.\n");
129 #if CONTIKI_CONF_RANDOM_MAC
130 PRINTD(
"Generating random EUI64 MAC\n");
131 generate_new_eui64(&buffer);
134 for (i=0;i<
sizeof(default_mac_address);i++) buffer[i] = pgm_read_byte_near(default_mac_address+i);
138 eeprom_write_block(&buffer, &eemem_mac_address,
sizeof(eemem_mac_address));
139 eeprom_read_block (&buffer, &eemem_mac_address,
sizeof(rimeaddr_t));
140 for (i=0;i<
sizeof(default_server_name);i++) buffer[i] = pgm_read_byte_near(default_server_name+i);
141 eeprom_write_block(&buffer, &eemem_server_name,
sizeof(eemem_server_name));
142 for (i=0;i<
sizeof(default_domain_name);i++) buffer[i] = pgm_read_byte_near(default_domain_name+i);
143 eeprom_write_block(&buffer, &eemem_domain_name,
sizeof(eemem_domain_name));
144 eeprom_write_word(&eemem_panid , PARAMS_PANID);
145 eeprom_write_word(&eemem_panaddr, PARAMS_PANADDR);
146 eeprom_write_byte(&eemem_txpower, PARAMS_TXPOWER);
147 eeprom_write_word(&eemem_nodeid, PARAMS_NODEID);
148 x[0] = PARAMS_CHANNEL;
150 eeprom_write_word((uint16_t *)&eemem_channel, *(uint16_t *)x);
157 params_get_eui64(uint8_t *eui64) {
159 eeprom_read_block ((
void *)eui64, &eemem_mac_address,
sizeof(linkaddr_t));
161 #if CONTIKI_CONF_RANDOM_MAC
168 params_get_panid(
void) {
169 return eeprom_read_word(&eemem_panid);
172 params_get_panaddr(
void) {
173 return eeprom_read_word (&eemem_panaddr);
176 params_get_txpower(
void)
178 return eeprom_read_byte(&eemem_txpower);
184 params_get_channel() {
188 PRINTD(
"<-Get RF channel %u\n",x);
192 PRINTD(
"->Set EEPROM RF channel to %d\n",x);
198 params_get_eui64(uint8_t *eui64) {
199 size_t size =
sizeof(linkaddr_t);
201 PRINTD(
"<-Get EUI64 MAC\n");
204 #if CONTIKI_CONF_RANDOM_MAC
205 PRINTD(
"Generating random EUI64 MAC\n");
206 generate_new_eui64(eui64);
208 {uint8_t i;
for (i=0;i<8;i++) eui64[i] = pgm_read_byte_near(default_mac_address+i);}
211 PRINTD(
"->Set EEPROM MAC address\n");
213 #if CONTIKI_CONF_RANDOM_MAC
220 params_get_panid(
void) {
224 PRINTD(
"<-Get PAN ID of %04x\n",x);
228 PRINTD(
"->Set EEPROM PAN ID to %04x\n",x);
234 params_get_panaddr(
void) {
238 PRINTD(
"<-Get PAN address of %04x\n",x);
242 PRINTD(
"->Set EEPROM PAN address to %04x\n",x);
248 params_get_txpower(
void) {
252 PRINTD(
"<-Get tx power of %d (0=max)\n",x);
256 PRINTD(
"->Set EEPROM tx power of %d (0=max)\n",x);