diff options
Diffstat (limited to 'include/common.h')
-rw-r--r-- | include/common.h | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/include/common.h b/include/common.h new file mode 100644 index 0000000..e22b7a1 --- /dev/null +++ b/include/common.h @@ -0,0 +1,94 @@ +/* + * (C) Copyright 2014 Leo C. <erbl259-lmu@yahoo.de> + * + * SPDX-License-Identifier: GPL-2.0 + */ + +#ifndef COMMON_H +#define COMMON_H + +#include <stdio.h> +#include <stdint.h> + +#define GCC_VERSION (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__) + +#ifdef __AVR__ +#include <avr/io.h> +#include <avr/pgmspace.h> +#include <util/delay.h> + +#define udelay(n) _delay_us(n) + +struct bits { + uint8_t b0:1; + uint8_t b1:1; + uint8_t b2:1; + uint8_t b3:1; + uint8_t b4:1; + uint8_t b5:1; + uint8_t b6:1; + uint8_t b7:1; +} __attribute__((__packed__)); + +#define SBIT(port,pin) ((*(volatile struct bits*)&port).b##pin) + +//GCC bug PR61443 +// Known to work: 4.8.4, 4.9.1 +// Known to fail: 4.8.3, 4.9.0 + +#if (GCC_VERSION < 40804) || (GCC_VERSION == 40900) +#define GCC_BUG_61443 1 +#endif /* PR61443 */ + +#else +// TODO: stm32 +#endif /* __AVR__ */ + +#ifdef __FLASH +#define FLASH __flash +#define MEMX __memx +#else +#define FLASH +#define MEMX +#endif + +#define stringify(s) tostring(s) +#define tostring(s) #s + +#define FSTR(X) ((const FLASH char[]) { X } ) +#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) + +#define MIN(a,b) ({ typeof (a) _a = (a); \ + typeof (b) _b = (b); \ + _a < _b ? _a : _b; }) +#define MAX(a,b) ({ typeof (a) _a = (a); \ + typeof (b) _b = (b); \ + _a > _b ? _a : _b; }) + +#ifdef __AVR__ +#define Stat GPIOR0 +#else +extern volatile uint_least8_t Stat; +#endif /* __AVR__ */ + +#define S_10MS_TO (1<<0) +#define S_MSG_PENDING (1<<1) +#define S_CON_PENDING (1<<2) + +static inline +void my_puts(const char *s) +{ + fputs(s, stdout); +} + +static inline +void my_puts_P(const char *s) +{ +#ifdef __AVR__ + fputs_P(s, stdout); +#else + fputs(s, stdout); +#endif /* __AVR__ */ +} + +#endif /* COMMON_H */ |