updated to work with new gcc and avrlibc
[openmag.git] / src / include / avrdata.h
blob6cf2bfd3fab02b9f8abd651a5ab031faf9192ab5
1 /* Copyright (C) 2008 Sean D'Epagnier <sean@depagnier.com>
3 * This Program is free software; you can redistribute it and/or
4 * modify it under the terms of the GNU General Public
5 * License as published by the Free Software Foundation; either
6 * version 3 of the License, or (at your option) any later version.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17 * For more information on the GPL, please go to:
18 * http://www.gnu.org/copyleft/gpl.html
21 /* include this file to use EEMEM and PROGMEM attributes
22 as well as the standard functions to access them.
24 Emulation is provided if not running on an avr.
27 #include <stdint.h>
29 float gettime(void);
31 #ifdef __AVR__
32 #define PGM_STR_FMT "%S"
34 #include <avr/pgmspace.h>
35 #include <avr/eeprom.h>
37 uint8_t eeprom_read_byte_safe(const uint8_t *addr);
38 uint8_t eeprom_read_byte_safe(const uint8_t *addr);
39 uint16_t eeprom_read_word_safe(const uint16_t *addr);
40 void eeprom_read_block_safe(void *pointer_ram, const void *pointer_eeprom,
41 size_t n);
42 float eeprom_read_float_safe(float *var);
44 void eeprom_write_byte_safe(uint8_t *addr, uint8_t val);
45 void eeprom_write_word_safe(uint16_t *addr, uint16_t val);
46 void eeprom_write_block_safe(const void *pointer_ram, void *pointer_eeprom,
47 size_t n);
48 void eeprom_write_float_safe(float *var, float val);
50 #ifndef AVRDATA_SKIP_EEPROM_DEFINE
52 // undefine if already macros
53 #ifdef eeprom_read_byte
54 #undef eeprom_read_byte
55 #undef eeprom_read_word
56 #undef eeprom_write_byte
57 #undef eeprom_write_word
58 #endif
60 #define eeprom_read_byte eeprom_safe_error
61 #define eeprom_read_word eeprom_safe_error
62 #define eeprom_write_byte eeprom_safe_error
63 #define eeprom_write_word eeprom_safe_error
65 #endif
67 static void *pgm_read_ptr(const void *x) { return (void*)pgm_read_word(x); }
69 #define DATA_LOCK uint8_t oldtimsk2 = TIMSK2; TIMSK2 &= ~_BV(TOIE2)
70 #define DATA_UNLOCK TIMSK2 = oldtimsk2
72 #else
73 #define PSTR(x) x
74 #define PGM_STR_FMT "%s"
76 #include "nonavrdata.h"
78 #define eeprom_read_byte_safe eeprom_read_byte
79 #define eeprom_read_word_safe eeprom_read_word
80 #define eeprom_read_block_safe eeprom_read_block
81 #define eeprom_read_float_safe(var) (*var)
83 #define eeprom_write_byte_safe eeprom_write_byte
84 #define eeprom_write_word_safe eeprom_write_word
85 #define eeprom_write_block_safe eeprom_write_block
86 #define eeprom_write_float_safe(var, val) (*var = val)
88 #define DATA_LOCK calibration_server_lock();
89 #define DATA_UNLOCK calibration_server_unlock();
91 #endif