# 1 "SensorConf.cpp"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "SensorConf.cpp"
# 10 "SensorConf.cpp"
# 1 "SensorConf.h" 1
# 13 "SensorConf.h"
# 1 "/usr/lib/gcc/avr/5.4.0/include/stdint.h" 1 3 4
# 9 "/usr/lib/gcc/avr/5.4.0/include/stdint.h" 3 4
# 1 "/usr/lib/avr/include/stdint.h" 1 3 4
# 125 "/usr/lib/avr/include/stdint.h" 3 4

# 125 "/usr/lib/avr/include/stdint.h" 3 4
typedef signed int int8_t __attribute__((__mode__(__QI__)));
typedef unsigned int uint8_t __attribute__((__mode__(__QI__)));
typedef signed int int16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int uint16_t __attribute__ ((__mode__ (__HI__)));
typedef signed int int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int uint32_t __attribute__ ((__mode__ (__SI__)));

typedef signed int int64_t __attribute__((__mode__(__DI__)));
typedef unsigned int uint64_t __attribute__((__mode__(__DI__)));
# 146 "/usr/lib/avr/include/stdint.h" 3 4
typedef int16_t intptr_t;




typedef uint16_t uintptr_t;
# 163 "/usr/lib/avr/include/stdint.h" 3 4
typedef int8_t int_least8_t;




typedef uint8_t uint_least8_t;




typedef int16_t int_least16_t;




typedef uint16_t uint_least16_t;




typedef int32_t int_least32_t;




typedef uint32_t uint_least32_t;







typedef int64_t int_least64_t;






typedef uint64_t uint_least64_t;
# 217 "/usr/lib/avr/include/stdint.h" 3 4
typedef int8_t int_fast8_t;




typedef uint8_t uint_fast8_t;




typedef int16_t int_fast16_t;




typedef uint16_t uint_fast16_t;




typedef int32_t int_fast32_t;




typedef uint32_t uint_fast32_t;







typedef int64_t int_fast64_t;






typedef uint64_t uint_fast64_t;
# 277 "/usr/lib/avr/include/stdint.h" 3 4
typedef int64_t intmax_t;




typedef uint64_t uintmax_t;
# 10 "/usr/lib/gcc/avr/5.4.0/include/stdint.h" 2 3 4
# 14 "SensorConf.h" 2


# 1 "global_vars.h" 1
       

# 1 "main.h" 1
       




# 1 "/usr/lib/avr/include/avr/io.h" 1 3
# 99 "/usr/lib/avr/include/avr/io.h" 3
# 1 "/usr/lib/avr/include/avr/sfr_defs.h" 1 3
# 126 "/usr/lib/avr/include/avr/sfr_defs.h" 3
# 1 "/usr/lib/avr/include/inttypes.h" 1 3
# 77 "/usr/lib/avr/include/inttypes.h" 3
typedef int32_t int_farptr_t;



typedef uint32_t uint_farptr_t;
# 127 "/usr/lib/avr/include/avr/sfr_defs.h" 2 3
# 100 "/usr/lib/avr/include/avr/io.h" 2 3
# 627 "/usr/lib/avr/include/avr/io.h" 3
# 1 "/usr/lib/avr/include/avr/portpins.h" 1 3
# 628 "/usr/lib/avr/include/avr/io.h" 2 3

# 1 "/usr/lib/avr/include/avr/common.h" 1 3
# 630 "/usr/lib/avr/include/avr/io.h" 2 3

# 1 "/usr/lib/avr/include/avr/version.h" 1 3
# 632 "/usr/lib/avr/include/avr/io.h" 2 3






# 1 "/usr/lib/avr/include/avr/fuse.h" 1 3
# 639 "/usr/lib/avr/include/avr/io.h" 2 3


# 1 "/usr/lib/avr/include/avr/lock.h" 1 3
# 642 "/usr/lib/avr/include/avr/io.h" 2 3
# 7 "main.h" 2
# 1 "/usr/lib/avr/include/avr/interrupt.h" 1 3
# 8 "main.h" 2
# 1 "/usr/lib/avr/include/util/delay.h" 1 3
# 45 "/usr/lib/avr/include/util/delay.h" 3
# 1 "/usr/lib/avr/include/util/delay_basic.h" 1 3
# 40 "/usr/lib/avr/include/util/delay_basic.h" 3
static __inline__ void _delay_loop_1(uint8_t __count) __attribute__((__always_inline__));
static __inline__ void _delay_loop_2(uint16_t __count) __attribute__((__always_inline__));
# 80 "/usr/lib/avr/include/util/delay_basic.h" 3
void
_delay_loop_1(uint8_t __count)
{
 __asm__ volatile (
  "1: dec %0" "\n\t"
  "brne 1b"
  : "=r" (__count)
  : "0" (__count)
 );
}
# 102 "/usr/lib/avr/include/util/delay_basic.h" 3
void
_delay_loop_2(uint16_t __count)
{
 __asm__ volatile (
  "1: sbiw %0,1" "\n\t"
  "brne 1b"
  : "=w" (__count)
  : "0" (__count)
 );
}
# 46 "/usr/lib/avr/include/util/delay.h" 2 3
# 1 "/usr/lib/avr/include/math.h" 1 3
# 121 "/usr/lib/avr/include/math.h" 3
extern "C" {





extern double cos(double __x) __attribute__((__const__));





extern double sin(double __x) __attribute__((__const__));





extern double tan(double __x) __attribute__((__const__));






extern double fabs(double __x) __attribute__((__const__));






extern double fmod(double __x, double __y) __attribute__((__const__));
# 168 "/usr/lib/avr/include/math.h" 3
extern double modf(double __x, double *__iptr);


extern float modff (float __x, float *__iptr);




extern double sqrt(double __x) __attribute__((__const__));


extern float sqrtf (float) __attribute__((__const__));




extern double cbrt(double __x) __attribute__((__const__));
# 195 "/usr/lib/avr/include/math.h" 3
extern double hypot (double __x, double __y) __attribute__((__const__));







extern double square(double __x) __attribute__((__const__));






extern double floor(double __x) __attribute__((__const__));






extern double ceil(double __x) __attribute__((__const__));
# 235 "/usr/lib/avr/include/math.h" 3
extern double frexp(double __x, int *__pexp);







extern double ldexp(double __x, int __exp) __attribute__((__const__));





extern double exp(double __x) __attribute__((__const__));





extern double cosh(double __x) __attribute__((__const__));





extern double sinh(double __x) __attribute__((__const__));





extern double tanh(double __x) __attribute__((__const__));







extern double acos(double __x) __attribute__((__const__));







extern double asin(double __x) __attribute__((__const__));






extern double atan(double __x) __attribute__((__const__));
# 299 "/usr/lib/avr/include/math.h" 3
extern double atan2(double __y, double __x) __attribute__((__const__));





extern double log(double __x) __attribute__((__const__));





extern double log10(double __x) __attribute__((__const__));





extern double pow(double __x, double __y) __attribute__((__const__));






extern int isnan(double __x) __attribute__((__const__));
# 334 "/usr/lib/avr/include/math.h" 3
extern int isinf(double __x) __attribute__((__const__));






__attribute__((__const__)) static inline int isfinite (double __x)
{
    unsigned char __exp;
    __asm__ (
 "mov	%0, %C1		\n\t"
 "lsl	%0		\n\t"
 "mov	%0, %D1		\n\t"
 "rol	%0		"
 : "=r" (__exp)
 : "r" (__x) );
    return __exp != 0xff;
}






__attribute__((__const__)) static inline double copysign (double __x, double __y)
{
    __asm__ (
 "bst	%D2, 7	\n\t"
 "bld	%D0, 7	"
 : "=r" (__x)
 : "0" (__x), "r" (__y) );
    return __x;
}
# 377 "/usr/lib/avr/include/math.h" 3
extern int signbit (double __x) __attribute__((__const__));






extern double fdim (double __x, double __y) __attribute__((__const__));
# 393 "/usr/lib/avr/include/math.h" 3
extern double fma (double __x, double __y, double __z) __attribute__((__const__));







extern double fmax (double __x, double __y) __attribute__((__const__));







extern double fmin (double __x, double __y) __attribute__((__const__));






extern double trunc (double __x) __attribute__((__const__));
# 427 "/usr/lib/avr/include/math.h" 3
extern double round (double __x) __attribute__((__const__));
# 440 "/usr/lib/avr/include/math.h" 3
extern long lround (double __x) __attribute__((__const__));
# 454 "/usr/lib/avr/include/math.h" 3
extern long lrint (double __x) __attribute__((__const__));



}
# 47 "/usr/lib/avr/include/util/delay.h" 2 3
# 86 "/usr/lib/avr/include/util/delay.h" 3
static __inline__ void _delay_us(double __us) __attribute__((__always_inline__));
static __inline__ void _delay_ms(double __ms) __attribute__((__always_inline__));
# 165 "/usr/lib/avr/include/util/delay.h" 3
void
_delay_ms(double __ms)
{
 double __tmp ;
# 190 "/usr/lib/avr/include/util/delay.h" 3
 uint16_t __ticks;
 __tmp = ((
# 191 "/usr/lib/avr/include/util/delay.h"
          14745600UL
# 191 "/usr/lib/avr/include/util/delay.h" 3
               ) / 4e3) * __ms;
 if (__tmp < 1.0)
  __ticks = 1;
 else if (__tmp > 65535)
 {

  __ticks = (uint16_t) (__ms * 10.0);
  while(__ticks)
  {

   _delay_loop_2(((
# 201 "/usr/lib/avr/include/util/delay.h"
                  14745600UL
# 201 "/usr/lib/avr/include/util/delay.h" 3
                       ) / 4e3) / 10);
   __ticks --;
  }
  return;
 }
 else
  __ticks = (uint16_t)__tmp;
 _delay_loop_2(__ticks);

}
# 254 "/usr/lib/avr/include/util/delay.h" 3
void
_delay_us(double __us)
{
 double __tmp ;
# 279 "/usr/lib/avr/include/util/delay.h" 3
 uint8_t __ticks;
 double __tmp2 ;
 __tmp = ((
# 281 "/usr/lib/avr/include/util/delay.h"
          14745600UL
# 281 "/usr/lib/avr/include/util/delay.h" 3
               ) / 3e6) * __us;
 __tmp2 = ((
# 282 "/usr/lib/avr/include/util/delay.h"
           14745600UL
# 282 "/usr/lib/avr/include/util/delay.h" 3
                ) / 4e6) * __us;
 if (__tmp < 1.0)
  __ticks = 1;
 else if (__tmp2 > 65535)
 {
  _delay_ms(__us / 1000.0);
 }
 else if (__tmp > 255)
 {
  uint16_t __ticks=(uint16_t)__tmp2;
  _delay_loop_2(__ticks);
  return;
 }
 else
  __ticks = (uint8_t)__tmp;
 _delay_loop_1(__ticks);

}
# 9 "main.h" 2
# 1 "/usr/lib/avr/include/stdio.h" 1 3
# 45 "/usr/lib/avr/include/stdio.h" 3
# 1 "/usr/lib/gcc/avr/5.4.0/include/stdarg.h" 1 3 4
# 40 "/usr/lib/gcc/avr/5.4.0/include/stdarg.h" 3 4
typedef __builtin_va_list __gnuc_va_list;
# 98 "/usr/lib/gcc/avr/5.4.0/include/stdarg.h" 3 4
typedef __gnuc_va_list va_list;
# 46 "/usr/lib/avr/include/stdio.h" 2 3




# 1 "/usr/lib/gcc/avr/5.4.0/include/stddef.h" 1 3 4
# 216 "/usr/lib/gcc/avr/5.4.0/include/stddef.h" 3 4
typedef unsigned int size_t;
# 51 "/usr/lib/avr/include/stdio.h" 2 3
# 244 "/usr/lib/avr/include/stdio.h" 3
struct __file {
 char *buf;
 unsigned char unget;
 uint8_t flags;
# 263 "/usr/lib/avr/include/stdio.h" 3
 int size;
 int len;
 int (*put)(char, struct __file *);
 int (*get)(struct __file *);
 void *udata;
};
# 277 "/usr/lib/avr/include/stdio.h" 3
typedef struct __file FILE;
# 399 "/usr/lib/avr/include/stdio.h" 3
extern "C" {







extern struct __file *__iob[];
# 419 "/usr/lib/avr/include/stdio.h" 3
extern FILE *fdevopen(int (*__put)(char, FILE*), int (*__get)(FILE*));
# 436 "/usr/lib/avr/include/stdio.h" 3
extern int fclose(FILE *__stream);
# 610 "/usr/lib/avr/include/stdio.h" 3
extern int vfprintf(FILE *__stream, const char *__fmt, va_list __ap);





extern int vfprintf_P(FILE *__stream, const char *__fmt, va_list __ap);






extern int fputc(int __c, FILE *__stream);




extern int putc(int __c, FILE *__stream);


extern int putchar(int __c);
# 651 "/usr/lib/avr/include/stdio.h" 3
extern int printf(const char *__fmt, ...);





extern int printf_P(const char *__fmt, ...);







extern int vprintf(const char *__fmt, va_list __ap);





extern int sprintf(char *__s, const char *__fmt, ...);





extern int sprintf_P(char *__s, const char *__fmt, ...);
# 687 "/usr/lib/avr/include/stdio.h" 3
extern int snprintf(char *__s, size_t __n, const char *__fmt, ...);





extern int snprintf_P(char *__s, size_t __n, const char *__fmt, ...);





extern int vsprintf(char *__s, const char *__fmt, va_list ap);





extern int vsprintf_P(char *__s, const char *__fmt, va_list ap);
# 715 "/usr/lib/avr/include/stdio.h" 3
extern int vsnprintf(char *__s, size_t __n, const char *__fmt, va_list ap);





extern int vsnprintf_P(char *__s, size_t __n, const char *__fmt, va_list ap);




extern int fprintf(FILE *__stream, const char *__fmt, ...);





extern int fprintf_P(FILE *__stream, const char *__fmt, ...);






extern int fputs(const char *__str, FILE *__stream);




extern int fputs_P(const char *__str, FILE *__stream);





extern int puts(const char *__str);




extern int puts_P(const char *__str);
# 764 "/usr/lib/avr/include/stdio.h" 3
extern size_t fwrite(const void *__ptr, size_t __size, size_t __nmemb,
         FILE *__stream);







extern int fgetc(FILE *__stream);




extern int getc(FILE *__stream);


extern int getchar(void);
# 812 "/usr/lib/avr/include/stdio.h" 3
extern int ungetc(int __c, FILE *__stream);
# 824 "/usr/lib/avr/include/stdio.h" 3
extern char *fgets(char *__str, int __size, FILE *__stream);






extern char *gets(char *__str);
# 842 "/usr/lib/avr/include/stdio.h" 3
extern size_t fread(void *__ptr, size_t __size, size_t __nmemb,
        FILE *__stream);




extern void clearerr(FILE *__stream);
# 859 "/usr/lib/avr/include/stdio.h" 3
extern int feof(FILE *__stream);
# 870 "/usr/lib/avr/include/stdio.h" 3
extern int ferror(FILE *__stream);






extern int vfscanf(FILE *__stream, const char *__fmt, va_list __ap);




extern int vfscanf_P(FILE *__stream, const char *__fmt, va_list __ap);







extern int fscanf(FILE *__stream, const char *__fmt, ...);




extern int fscanf_P(FILE *__stream, const char *__fmt, ...);






extern int scanf(const char *__fmt, ...);




extern int scanf_P(const char *__fmt, ...);







extern int vscanf(const char *__fmt, va_list __ap);







extern int sscanf(const char *__buf, const char *__fmt, ...);




extern int sscanf_P(const char *__buf, const char *__fmt, ...);
# 940 "/usr/lib/avr/include/stdio.h" 3
static __inline__ int fflush(FILE *stream __attribute__((unused)))
{
 return 0;
}






__extension__ typedef long long fpos_t;
extern int fgetpos(FILE *stream, fpos_t *pos);
extern FILE *fopen(const char *path, const char *mode);
extern FILE *freopen(const char *path, const char *mode, FILE *stream);
extern FILE *fdopen(int, const char *);
extern int fseek(FILE *stream, long offset, int whence);
extern int fsetpos(FILE *stream, fpos_t *pos);
extern long ftell(FILE *stream);
extern int fileno(FILE *);
extern void perror(const char *s);
extern int remove(const char *pathname);
extern int rename(const char *oldpath, const char *newpath);
extern void rewind(FILE *stream);
extern void setbuf(FILE *stream, char *buf);
extern int setvbuf(FILE *stream, char *buf, int mode, size_t size);
extern FILE *tmpfile(void);
extern char *tmpnam (char *s);



}
# 10 "main.h" 2
# 1 "/usr/lib/avr/include/stdlib.h" 1 3
# 48 "/usr/lib/avr/include/stdlib.h" 3
# 1 "/usr/lib/gcc/avr/5.4.0/include/stddef.h" 1 3 4
# 49 "/usr/lib/avr/include/stdlib.h" 2 3







extern "C" {
# 70 "/usr/lib/avr/include/stdlib.h" 3
typedef struct {
 int quot;
 int rem;
} div_t;


typedef struct {
 long quot;
 long rem;
} ldiv_t;


typedef int (*__compar_fn_t)(const void *, const void *);
# 116 "/usr/lib/avr/include/stdlib.h" 3
extern void abort(void) __attribute__((__noreturn__));




extern int abs(int __i) __attribute__((__const__));
# 130 "/usr/lib/avr/include/stdlib.h" 3
extern long labs(long __i) __attribute__((__const__));
# 153 "/usr/lib/avr/include/stdlib.h" 3
extern void *bsearch(const void *__key, const void *__base, size_t __nmemb,
       size_t __size, int (*__compar)(const void *, const void *));







extern div_t div(int __num, int __denom) __asm__("__divmodhi4") __attribute__((__const__));





extern ldiv_t ldiv(long __num, long __denom) __asm__("__divmodsi4") __attribute__((__const__));
# 185 "/usr/lib/avr/include/stdlib.h" 3
extern void qsort(void *__base, size_t __nmemb, size_t __size,
    __compar_fn_t __compar);
# 218 "/usr/lib/avr/include/stdlib.h" 3
extern long strtol(const char *__nptr, char **__endptr, int __base);
# 252 "/usr/lib/avr/include/stdlib.h" 3
extern unsigned long strtoul(const char *__nptr, char **__endptr, int __base);
# 264 "/usr/lib/avr/include/stdlib.h" 3
extern long atol(const char *__s) __attribute__((__pure__));
# 276 "/usr/lib/avr/include/stdlib.h" 3
extern int atoi(const char *__s) __attribute__((__pure__));
# 288 "/usr/lib/avr/include/stdlib.h" 3
extern void exit(int __status) __attribute__((__noreturn__));
# 300 "/usr/lib/avr/include/stdlib.h" 3
extern void *malloc(size_t __size) __attribute__((__malloc__));






extern void free(void *__ptr);




extern size_t __malloc_margin;




extern char *__malloc_heap_start;




extern char *__malloc_heap_end;






extern void *calloc(size_t __nele, size_t __size) __attribute__((__malloc__));
# 348 "/usr/lib/avr/include/stdlib.h" 3
extern void *realloc(void *__ptr, size_t __size) __attribute__((__malloc__));

extern double strtod(const char *__nptr, char **__endptr);
# 361 "/usr/lib/avr/include/stdlib.h" 3
extern double atof(const char *__nptr);
# 383 "/usr/lib/avr/include/stdlib.h" 3
extern int rand(void);



extern void srand(unsigned int __seed);






extern int rand_r(unsigned long *__ctx);
# 428 "/usr/lib/avr/include/stdlib.h" 3
extern __inline__
char *itoa (int __val, char *__s, int __radix)
{
    if (!__builtin_constant_p (__radix)) {
 extern char *__itoa (int, char *, int);
 return __itoa (__val, __s, __radix);
    } else if (__radix < 2 || __radix > 36) {
 *__s = 0;
 return __s;
    } else {
 extern char *__itoa_ncheck (int, char *, unsigned char);
 return __itoa_ncheck (__val, __s, __radix);
    }
}
# 473 "/usr/lib/avr/include/stdlib.h" 3
extern __inline__
char *ltoa (long __val, char *__s, int __radix)
{
    if (!__builtin_constant_p (__radix)) {
 extern char *__ltoa (long, char *, int);
 return __ltoa (__val, __s, __radix);
    } else if (__radix < 2 || __radix > 36) {
 *__s = 0;
 return __s;
    } else {
 extern char *__ltoa_ncheck (long, char *, unsigned char);
 return __ltoa_ncheck (__val, __s, __radix);
    }
}
# 516 "/usr/lib/avr/include/stdlib.h" 3
extern __inline__
char *utoa (unsigned int __val, char *__s, int __radix)
{
    if (!__builtin_constant_p (__radix)) {
 extern char *__utoa (unsigned int, char *, int);
 return __utoa (__val, __s, __radix);
    } else if (__radix < 2 || __radix > 36) {
 *__s = 0;
 return __s;
    } else {
 extern char *__utoa_ncheck (unsigned int, char *, unsigned char);
 return __utoa_ncheck (__val, __s, __radix);
    }
}
# 558 "/usr/lib/avr/include/stdlib.h" 3
extern __inline__
char *ultoa (unsigned long __val, char *__s, int __radix)
{
    if (!__builtin_constant_p (__radix)) {
 extern char *__ultoa (unsigned long, char *, int);
 return __ultoa (__val, __s, __radix);
    } else if (__radix < 2 || __radix > 36) {
 *__s = 0;
 return __s;
    } else {
 extern char *__ultoa_ncheck (unsigned long, char *, unsigned char);
 return __ultoa_ncheck (__val, __s, __radix);
    }
}
# 590 "/usr/lib/avr/include/stdlib.h" 3
extern long random(void);




extern void srandom(unsigned long __seed);







extern long random_r(unsigned long *__ctx);
# 649 "/usr/lib/avr/include/stdlib.h" 3
extern char *dtostre(double __val, char *__s, unsigned char __prec,
       unsigned char __flags);
# 666 "/usr/lib/avr/include/stdlib.h" 3
extern char *dtostrf(double __val, signed char __width,
                     unsigned char __prec, char *__s);
# 685 "/usr/lib/avr/include/stdlib.h" 3
extern int atexit(void (*)(void));
extern int system (const char *);
extern char *getenv (const char *);



}
# 11 "main.h" 2

# 1 "/usr/lib/avr/include/avr/pgmspace.h" 1 3
# 89 "/usr/lib/avr/include/avr/pgmspace.h" 3
# 1 "/usr/lib/gcc/avr/5.4.0/include/stddef.h" 1 3 4
# 90 "/usr/lib/avr/include/avr/pgmspace.h" 2 3
# 116 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern "C" {
# 1158 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern const void * memchr_P(const void *, int __val, size_t __len) __attribute__((__const__));
# 1172 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern int memcmp_P(const void *, const void *, size_t) __attribute__((__pure__));






extern void *memccpy_P(void *, const void *, int __val, size_t);
# 1188 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern void *memcpy_P(void *, const void *, size_t);






extern void *memmem_P(const void *, size_t, const void *, size_t) __attribute__((__pure__));
# 1207 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern const void * memrchr_P(const void *, int __val, size_t __len) __attribute__((__const__));
# 1217 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern char *strcat_P(char *, const char *);
# 1233 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern const char * strchr_P(const char *, int __val) __attribute__((__const__));
# 1245 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern const char * strchrnul_P(const char *, int __val) __attribute__((__const__));
# 1258 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern int strcmp_P(const char *, const char *) __attribute__((__pure__));
# 1268 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern char *strcpy_P(char *, const char *);
# 1285 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern int strcasecmp_P(const char *, const char *) __attribute__((__pure__));






extern char *strcasestr_P(const char *, const char *) __attribute__((__pure__));
# 1305 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern size_t strcspn_P(const char *__s, const char * __reject) __attribute__((__pure__));
# 1321 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern size_t strlcat_P (char *, const char *, size_t );
# 1334 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern size_t strlcpy_P (char *, const char *, size_t );
# 1346 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern size_t strnlen_P(const char *, size_t) __attribute__((__const__));
# 1357 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern int strncmp_P(const char *, const char *, size_t) __attribute__((__pure__));
# 1376 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern int strncasecmp_P(const char *, const char *, size_t) __attribute__((__pure__));
# 1387 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern char *strncat_P(char *, const char *, size_t);
# 1401 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern char *strncpy_P(char *, const char *, size_t);
# 1416 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern char *strpbrk_P(const char *__s, const char * __accept) __attribute__((__pure__));
# 1427 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern const char * strrchr_P(const char *, int __val) __attribute__((__const__));
# 1447 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern char *strsep_P(char **__sp, const char * __delim);
# 1460 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern size_t strspn_P(const char *__s, const char * __accept) __attribute__((__pure__));
# 1474 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern char *strstr_P(const char *, const char *) __attribute__((__pure__));
# 1496 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern char *strtok_P(char *__s, const char * __delim);
# 1516 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern char *strtok_rP(char *__s, const char * __delim, char **__last);
# 1529 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern size_t strlen_PF(uint_farptr_t src) __attribute__((__const__));
# 1545 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern size_t strnlen_PF(uint_farptr_t src, size_t len) __attribute__((__const__));
# 1560 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern void *memcpy_PF(void *dest, uint_farptr_t src, size_t len);
# 1575 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern char *strcpy_PF(char *dest, uint_farptr_t src);
# 1595 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern char *strncpy_PF(char *dest, uint_farptr_t src, size_t len);
# 1611 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern char *strcat_PF(char *dest, uint_farptr_t src);
# 1632 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern size_t strlcat_PF(char *dst, uint_farptr_t src, size_t siz);
# 1649 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern char *strncat_PF(char *dest, uint_farptr_t src, size_t len);
# 1665 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern int strcmp_PF(const char *s1, uint_farptr_t s2) __attribute__((__pure__));
# 1682 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern int strncmp_PF(const char *s1, uint_farptr_t s2, size_t n) __attribute__((__pure__));
# 1698 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern int strcasecmp_PF(const char *s1, uint_farptr_t s2) __attribute__((__pure__));
# 1716 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern int strncasecmp_PF(const char *s1, uint_farptr_t s2, size_t n) __attribute__((__pure__));
# 1732 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern char *strstr_PF(const char *s1, uint_farptr_t s2);
# 1744 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern size_t strlcpy_PF(char *dst, uint_farptr_t src, size_t siz);
# 1760 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern int memcmp_PF(const void *, uint_farptr_t, size_t) __attribute__((__pure__));
# 1779 "/usr/lib/avr/include/avr/pgmspace.h" 3
extern size_t __strlen_P(const char *) __attribute__((__const__));
__attribute__((__always_inline__)) static __inline__ size_t strlen_P(const char * s);
static __inline__ size_t strlen_P(const char *s) {
  return __builtin_constant_p(__builtin_strlen(s))
     ? __builtin_strlen(s) : __strlen_P(s);
}



}
# 13 "main.h" 2

# 1 "/usr/lib/avr/include/avr/wdt.h" 1 3
# 450 "/usr/lib/avr/include/avr/wdt.h" 3
static __inline__
__attribute__ ((__always_inline__))
void wdt_enable (const uint8_t value)
{
 if ((((uint16_t) &(WDT)) < 0x40 + 0x20))
 {
  __asm__ __volatile__ (
    "in __tmp_reg__,__SREG__" "\n\t"
    "cli" "\n\t"
    "wdr" "\n\t"
    "out %0, %1" "\n\t"
    "out __SREG__,__tmp_reg__" "\n\t"
    "out %0, %2" "\n \t"
    :
    : "I" ((((uint16_t) &(WDT)) - 0x20)),
    "r" ((uint8_t)((1 << (WDCE)) | (1 << (WDE)))),
    "r" ((uint8_t) ((value & 0x08 ? 0x00 : 0x00) |
      (1 << (WDE)) | (value & 0x07)) )
    : "r0"
  );
 }
 else
 {
  __asm__ __volatile__ (
    "in __tmp_reg__,__SREG__" "\n\t"
    "cli" "\n\t"
    "wdr" "\n\t"
    "sts %0, %1" "\n\t"
    "out __SREG__,__tmp_reg__" "\n\t"
    "sts %0, %2" "\n \t"
    :
    : "n" (((uint16_t) &(WDT))),
    "r" ((uint8_t)((1 << (WDCE)) | (1 << (WDE)))),
    "r" ((uint8_t) ((value & 0x08 ? 0x00 : 0x00) |
      (1 << (WDE)) | (value & 0x07)) )
    : "r0"
  );
 }
}

static __inline__
__attribute__ ((__always_inline__))
void wdt_disable (void)
{
 if ((((uint16_t) &(WDT)) < 0x40 + 0x20))
 {
        uint8_t register temp_reg;
  __asm__ __volatile__ (
    "in __tmp_reg__,__SREG__" "\n\t"
    "cli" "\n\t"
    "wdr" "\n\t"
    "in  %[TEMPREG],%[WDTREG]" "\n\t"
    "ori %[TEMPREG],%[WDCE_WDE]" "\n\t"
    "out %[WDTREG],%[TEMPREG]" "\n\t"
    "out %[WDTREG],__zero_reg__" "\n\t"
    "out __SREG__,__tmp_reg__" "\n\t"
    : [TEMPREG] "=d" (temp_reg)
    : [WDTREG] "I" ((((uint16_t) &(WDT)) - 0x20)),
    [WDCE_WDE] "n" ((uint8_t)((1 << (WDCE)) | (1 << (WDE))))
    : "r0"
  );
 }
 else
 {
        uint8_t register temp_reg;
  __asm__ __volatile__ (
    "in __tmp_reg__,__SREG__" "\n\t"
    "cli" "\n\t"
    "wdr" "\n\t"
    "lds %[TEMPREG],%[WDTREG]" "\n\t"
    "ori %[TEMPREG],%[WDCE_WDE]" "\n\t"
    "sts %[WDTREG],%[TEMPREG]" "\n\t"
    "sts %[WDTREG],__zero_reg__" "\n\t"
    "out __SREG__,__tmp_reg__" "\n\t"
    : [TEMPREG] "=d" (temp_reg)
    : [WDTREG] "n" (((uint16_t) &(WDT))),
    [WDCE_WDE] "n" ((uint8_t)((1 << (WDCE)) | (1 << (WDE))))
    : "r0"
  );
 }
}
# 15 "main.h" 2
# 1 "/usr/lib/avr/include/avr/sleep.h" 1 3
# 16 "main.h" 2
# 1 "/usr/lib/avr/include/avr/eeprom.h" 1 3
# 17 "main.h" 2

# 1 "/usr/lib/avr/include/string.h" 1 3
# 46 "/usr/lib/avr/include/string.h" 3
# 1 "/usr/lib/gcc/avr/5.4.0/include/stddef.h" 1 3 4
# 47 "/usr/lib/avr/include/string.h" 2 3
# 58 "/usr/lib/avr/include/string.h" 3
extern "C" {
# 125 "/usr/lib/avr/include/string.h" 3
extern int ffs(int __val) __attribute__((__const__));





extern int ffsl(long __val) __attribute__((__const__));





__extension__ extern int ffsll(long long __val) __attribute__((__const__));
# 150 "/usr/lib/avr/include/string.h" 3
extern void *memccpy(void *, const void *, int, size_t);
# 162 "/usr/lib/avr/include/string.h" 3
extern void *memchr(const void *, int, size_t) __attribute__((__pure__));
# 180 "/usr/lib/avr/include/string.h" 3
extern int memcmp(const void *, const void *, size_t) __attribute__((__pure__));
# 191 "/usr/lib/avr/include/string.h" 3
extern void *memcpy(void *, const void *, size_t);
# 203 "/usr/lib/avr/include/string.h" 3
extern void *memmem(const void *, size_t, const void *, size_t) __attribute__((__pure__));
# 213 "/usr/lib/avr/include/string.h" 3
extern void *memmove(void *, const void *, size_t);
# 225 "/usr/lib/avr/include/string.h" 3
extern void *memrchr(const void *, int, size_t) __attribute__((__pure__));
# 235 "/usr/lib/avr/include/string.h" 3
extern void *memset(void *, int, size_t);
# 248 "/usr/lib/avr/include/string.h" 3
extern char *strcat(char *, const char *);
# 262 "/usr/lib/avr/include/string.h" 3
extern char *strchr(const char *, int) __attribute__((__pure__));
# 274 "/usr/lib/avr/include/string.h" 3
extern char *strchrnul(const char *, int) __attribute__((__pure__));
# 287 "/usr/lib/avr/include/string.h" 3
extern int strcmp(const char *, const char *) __attribute__((__pure__));
# 305 "/usr/lib/avr/include/string.h" 3
extern char *strcpy(char *, const char *);
# 320 "/usr/lib/avr/include/string.h" 3
extern int strcasecmp(const char *, const char *) __attribute__((__pure__));
# 333 "/usr/lib/avr/include/string.h" 3
extern char *strcasestr(const char *, const char *) __attribute__((__pure__));
# 344 "/usr/lib/avr/include/string.h" 3
extern size_t strcspn(const char *__s, const char *__reject) __attribute__((__pure__));
# 364 "/usr/lib/avr/include/string.h" 3
extern char *strdup(const char *s1);
# 377 "/usr/lib/avr/include/string.h" 3
extern size_t strlcat(char *, const char *, size_t);
# 388 "/usr/lib/avr/include/string.h" 3
extern size_t strlcpy(char *, const char *, size_t);
# 399 "/usr/lib/avr/include/string.h" 3
extern size_t strlen(const char *) __attribute__((__pure__));
# 411 "/usr/lib/avr/include/string.h" 3
extern char *strlwr(char *);
# 422 "/usr/lib/avr/include/string.h" 3
extern char *strncat(char *, const char *, size_t);
# 434 "/usr/lib/avr/include/string.h" 3
extern int strncmp(const char *, const char *, size_t) __attribute__((__pure__));
# 449 "/usr/lib/avr/include/string.h" 3
extern char *strncpy(char *, const char *, size_t);
# 464 "/usr/lib/avr/include/string.h" 3
extern int strncasecmp(const char *, const char *, size_t) __attribute__((__pure__));
# 478 "/usr/lib/avr/include/string.h" 3
extern size_t strnlen(const char *, size_t) __attribute__((__pure__));
# 491 "/usr/lib/avr/include/string.h" 3
extern char *strpbrk(const char *__s, const char *__accept) __attribute__((__pure__));
# 505 "/usr/lib/avr/include/string.h" 3
extern char *strrchr(const char *, int) __attribute__((__pure__));
# 515 "/usr/lib/avr/include/string.h" 3
extern char *strrev(char *);
# 533 "/usr/lib/avr/include/string.h" 3
extern char *strsep(char **, const char *);
# 544 "/usr/lib/avr/include/string.h" 3
extern size_t strspn(const char *__s, const char *__accept) __attribute__((__pure__));
# 557 "/usr/lib/avr/include/string.h" 3
extern char *strstr(const char *, const char *) __attribute__((__pure__));
# 576 "/usr/lib/avr/include/string.h" 3
extern char *strtok(char *, const char *);
# 593 "/usr/lib/avr/include/string.h" 3
extern char *strtok_r(char *, const char *, char **);
# 606 "/usr/lib/avr/include/string.h" 3
extern char *strupr(char *);



extern int strcoll(const char *s1, const char *s2);
extern char *strerror(int errnum);
extern size_t strxfrm(char *dest, const char *src, size_t n);



}
# 19 "main.h" 2

# 1 "my_defs.h" 1
# 230 "my_defs.h"

# 230 "my_defs.h"
typedef unsigned char u08;
typedef signed char s08;
typedef unsigned short u16;
typedef signed short s16;
typedef unsigned long u32;
typedef signed long s32;
typedef unsigned long long u64;
typedef signed long long s64;
# 268 "my_defs.h"
 typedef unsigned char BOOL;
 typedef unsigned char BYTE;
 typedef unsigned int WORD;
 typedef unsigned long DWORD;

 typedef unsigned char UCHAR;
 typedef unsigned int UINT;
 typedef unsigned short USHORT;
 typedef unsigned long ULONG;

 typedef char CHAR;
 typedef int INT;
 typedef long LONG;
# 21 "main.h" 2
# 1 "pin_macros.h" 1
# 22 "main.h" 2
# 1 "PinDefs.h" 1
# 23 "main.h" 2

# 1 "ADC.h" 1







       






void ADC_configure(void);

void ADC_4ch(char ch);
# 25 "main.h" 2
# 1 "twimaster.h" 1
# 102 "twimaster.h"
extern void i2c_init(void);






extern void i2c_stop(void);
# 119 "twimaster.h"
extern unsigned char i2c_start(unsigned char addr);
# 129 "twimaster.h"
extern unsigned char i2c_rep_start(unsigned char addr);
# 139 "twimaster.h"
extern void i2c_start_wait(unsigned char addr);
# 148 "twimaster.h"
extern unsigned char i2c_write(unsigned char data);






extern unsigned char i2c_readAck(void);





extern unsigned char i2c_readNak(void);
# 172 "twimaster.h"
extern unsigned char i2c_read(unsigned char ack);



void I2C_SendByteByADDR(unsigned char c, const unsigned char addr);
# 26 "main.h" 2

# 1 "lcdtwi.h" 1
# 16 "lcdtwi.h"
void LCD_ini(void);
void setposXY(unsigned char x, unsigned y);
void str_lcd (const char str1[]);
void clearlcd(void);
void sendcharlcd(unsigned char c);


const unsigned char add_rpcf8574 = 0x4E;
# 28 "main.h" 2

# 1 "ds18b20.h" 1
# 80 "ds18b20.h"
struct outputs{
 uint8_t pin_mask;
 volatile uint8_t *port;
};
# 98 "ds18b20.h"
class ds18b20
{

public:
 void DS18B20Configute (void);
 int16_t readtemp (void);

    ds18b20 (uint8_t ds18b20_PINx, volatile uint8_t *ds18b20_PORTx) {
         port_config.pin_mask = 1 << ds18b20_PINx;
         port_config.port = ds18b20_PORTx;
         };
 bool GetTempCRCchecked (int16_t &t);
 void StartTConvert (void);
 void readMem (void);
 uint8_t ds18b20mem[9];
 outputs port_config;
 int16_t TValue;
 bool TValueCRC;
 const static uint8_t DS18B20_hund[];
protected:
private:
 void init_ds18b20 (void);
 uint8_t readbyte (void);
 void writecommand (uint8_t data);
 static uint8_t crc8 (uint8_t data, uint8_t crc);


public:

 ~ds18b20(){};
protected:
private:



};
# 30 "main.h" 2

# 1 "SensorConf.h" 1
# 32 "main.h" 2
# 1 "SensorADC.h" 1







       
# 19 "SensorADC.h"
typedef struct{
 bool ADC_Enable;
 uint8_t Alarm_1_Enable;
 uint8_t Alarm_1_ifUpTemperature;
 uint16_t Alarm_1_TemperatureVal;
 uint8_t Action_1_Namber;
 uint8_t Alarm_2_Enable;
 uint8_t Alarm_2_ifUpTemperature;
 uint16_t Alarm_2_TemperatureVal;
 uint8_t Action_2_Namber;
} EEstructADC;

using SensorADC_EEPROM = EEstructADC;

class SensorADC
{

 public:
 public:

 SensorADC_EEPROM Conf;

 bool Check_Alarm(void);
 unsigned int AlarmActionsStatus;
 bool AlarmFlag;
 const unsigned int *TValue;

 static bool SC_eepromERROR;
 unsigned char MenuN;


 private:
 SensorADC_EEPROM *SC_eeprom;
 SensorADC_EEPROM *SC_eepromXOR;
 void menu_1(void);
 void menu_2(void);
 void menu_3(void);
 void menu_4(void);
 void menu_5(void);
 void menu_6(void);
 void menu_7(void);
 void menu_8(void);
 void menu_9(void);
 void menu_10(void);
 void menu_0(void);
 char RW_EEPROM(bool a=0);

 public:

 void ToDefoult(void);
 void menu_start(void);

 using FP = void(SensorADC::*) ();
 FP Menu[11] = { &SensorADC::menu_0,
  &SensorADC::menu_1,
  &SensorADC::menu_2,
  &SensorADC::menu_3,
  &SensorADC::menu_4,
  &SensorADC::menu_5,
  &SensorADC::menu_6,
  &SensorADC::menu_7,
  &SensorADC::menu_8,
  &SensorADC::menu_9,
 &SensorADC::menu_0};


 unsigned char Sensor_number;

 protected:
 private:

 void CheckButtonAndSwitchMenu(void);


 public:

 SensorADC(const unsigned int*, SensorADC_EEPROM *eeprom, SensorADC_EEPROM *SensorADC_EEPROM_XOR, unsigned char SN);
 SensorADC();
 ~SensorADC();
 protected:
 private:
 SensorADC( const SensorADC &c );
 SensorADC& operator=( const SensorADC &c );

};
# 112 "SensorADC.h"
extern SensorADC_EEPROM EEMEM SensorADC_EEPROM_1;
extern SensorADC_EEPROM EEMEM SensorADC_EEPROM_2;
extern SensorADC_EEPROM EEMEM SensorADC_EEPROM_3;
extern SensorADC_EEPROM EEMEM SensorADC_EEPROM_4;


extern SensorADC_EEPROM EEMEM SensorADC_EEPROM_XOR_1;
extern SensorADC_EEPROM EEMEM SensorADC_EEPROM_XOR_2;
extern SensorADC_EEPROM EEMEM SensorADC_EEPROM_XOR_3;
extern SensorADC_EEPROM EEMEM SensorADC_EEPROM_XOR_4;


extern SensorADC_EEPROM SensorADC_Defoult;

extern SensorADC SensorADC_1;
extern SensorADC SensorADC_2;
extern SensorADC SensorADC_3;
extern SensorADC SensorADC_4;





void PrintSensorADC(SensorADC &ptr);
# 33 "main.h" 2
# 1 "SensorF.h" 1
# 14 "SensorF.h"
       
# 26 "SensorF.h"
typedef struct{
 bool F_Enable;
 uint8_t Alarm_1_Enable;
 uint8_t Alarm_1_ifUpFrequency;
 uint16_t Alarm_1_FrequencyVal;
 uint8_t Action_1_Namber;
 uint8_t Alarm_2_Enable;
 uint8_t Alarm_2_ifUpFrequency;
 uint16_t Alarm_2_FrequencyVal;
 uint8_t Action_2_Namber;
 uint8_t Action_Sensor_ERROR;
} EEstruct_F;

using SensorF_EEPROM = EEstruct_F;

class SensorF
{

 public:

  SensorF_EEPROM Conf;

  bool Check_Alarm(void);
  unsigned int AlarmActionsStatus;
  bool AlarmFlag;
  static bool SC_eepromERROR;
  unsigned char MenuN;


  volatile unsigned int *ICR_freq;
  volatile bool *ICR_correct;

 private:
  SensorF_EEPROM *SC_eeprom;
  SensorF_EEPROM *SC_eepromXOR;
  void menu_1(void);
  void menu_2(void);
  void menu_3(void);
  void menu_4(void);
  void menu_5(void);
  void menu_6(void);
  void menu_7(void);
  void menu_8(void);
  void menu_9(void);
  void menu_10(void);
  void menu_0(void);
  char RW_EEPROM(bool a=0);

 public:

 void ToDefoult(void);
 void menu_start(void);

 using FP = void(SensorF::*) ();
 FP Menu[12] = { &SensorF::menu_0,
      &SensorF::menu_1,
      &SensorF::menu_2,
      &SensorF::menu_3,
      &SensorF::menu_4,
      &SensorF::menu_5,
      &SensorF::menu_6,
      &SensorF::menu_7,
      &SensorF::menu_8,
      &SensorF::menu_9,
      &SensorF::menu_10,
      &SensorF::menu_0 };

 unsigned char Sensor_number;

 protected:
 private:

 void CheckButtonAndSwitchMenu(void);


 public:

 SensorF(volatile unsigned int *F_freq, volatile bool *Fcorrect, SensorF_EEPROM *eeprom, SensorF_EEPROM *eepromXOR, unsigned char SN);
 SensorF();
 ~SensorF();
 protected:
 private:
 SensorF( const SensorF &c );
 SensorF& operator=( const SensorF &c );

};







extern SensorF_EEPROM EEMEM SensorF_EEPROM_1;

extern SensorF_EEPROM EEMEM SensorF_EEPROM_XOR_1;

extern SensorF_EEPROM SensorF_Defoult;

extern SensorF SensorF_1;




void PrintSensorF(SensorF &ptr);
# 34 "main.h" 2



# 1 "PrintFunc.h" 1
# 16 "PrintFunc.h"
void print_ads1115_value(uint16_t val);
void print_ADC_value(uint16_t val);
void print_Freg100(uint16_t val);
void print_ds18b20_val(int16_t &t);

void print_SensorConf(SensorConf &ptr);
# 38 "main.h" 2

# 1 "timer8.h" 1
# 15 "timer8.h"
void Timer0Init(uint8_t a);
# 40 "main.h" 2
# 1 "timers16.h" 1
# 13 "timers16.h"
void timer16init(void);
# 41 "main.h" 2

# 1 "spi.h" 1

       
# 42 "spi.h"
void spi_init();
unsigned char spi_send_recv(unsigned char data);

unsigned char spi_74hc595_send_byte(unsigned char data);
unsigned char spi_74hc595_send_two_byte(unsigned int data);
# 43 "main.h" 2
# 1 "nRF24L01.h" 1
# 200 "nRF24L01.h"
inline void radio_assert_ce(void) {
 PORTB |= (1 << 0);
}


inline void radio_deassert_ce(void) {
 PORTB &= ~(1 << 0);
}
# 217 "nRF24L01.h"
void radio_init(void);


uint8_t radio_read_buf(uint8_t cmd, uint8_t * buf, uint8_t count);


uint8_t radio_write_buf(uint8_t cmd, uint8_t * buf, uint8_t count);


uint8_t radio_readreg(uint8_t reg);


uint8_t radio_writereg(uint8_t reg, uint8_t val);



uint8_t radio_readreg_buf(uint8_t reg, uint8_t * buf, uint8_t count);


uint8_t radio_writereg_buf(uint8_t reg, uint8_t * buf, uint8_t count);


uint8_t radio_read_rx_payload_width();


uint8_t radio_cmd(uint8_t cmd);


uint8_t radio_is_interrupt();


uint8_t radio_start(void);


void radio_pwr_down(void);







void on_send_error(void);



void on_packet(uint8_t * buf, uint8_t size);



uint8_t send_data(uint8_t * buf, uint8_t size);

void check_radio(void);
# 44 "main.h" 2

# 1 "menu.h" 1
       
# 10 "menu.h"
void menu_select(void);

void menu_00_T_F(void);
void menu_01_DS18B20(void);
void menu_03(void);
# 31 "menu.h"
void IfButtonPresToWait(void);
# 46 "main.h" 2

void Reed_all_ds18b20(void);
void StartConv_all_ds18b20(void);
void AllSensorsCheckAlarm();
void AllSensorsToDefoult(void);
# 4 "global_vars.h" 2
# 23 "global_vars.h"
extern const char AlarmNames[][21];
extern char const AlarmNamesSum;




extern int DS18B20_defoult_val;

extern volatile unsigned int ds18b20_Reed_counter;
extern const unsigned int ds18b20_Reed_counter_MAX;

extern const unsigned int ds18b20_Conv_BeforeReed;

extern int16_t ADC_result;

extern unsigned int ADC_4_val[4];

extern unsigned char menu_namber;

extern volatile unsigned int menu_refresh_counter;
extern const unsigned int menu_refresh_counter_MAX;

extern volatile unsigned int sens_reed_counter;
extern const unsigned int sens_reed_counter_MAX;

extern int16_t sens_1_temperature;
extern int16_t sens_2_temperature;
extern int16_t sens_3_temperature;
extern int16_t sens_4_temperature;
extern int16_t sens_5_temperature;

extern ds18b20 DS18B20_sens_1;
extern ds18b20 DS18B20_sens_2;
extern ds18b20 DS18B20_sens_3;
extern ds18b20 DS18B20_sens_4;
extern ds18b20 DS18B20_sens_5;


typedef struct {
 unsigned int timer_ICR;
 bool correct;
 unsigned int Freg100;
 } timer_ICR ;

extern volatile timer_ICR timer_ICR3;

extern unsigned char nrf_send_timer_1;
extern unsigned char nrf_send_timer_2;
extern unsigned char nrf_send_timer_3;
extern unsigned char nrf_send_timer_4;
# 17 "SensorConf.h" 2



typedef struct{
 bool DS18B20_Enable;
 uint8_t Alarm_1_Enable;
 uint8_t Alarm_1_ifUpTemperature;
 int16_t Alarm_1_TemperatureVal;
 uint8_t Action_1_Namber;
 uint8_t Alarm_2_Enable;
 uint8_t Alarm_2_ifUpTemperature;
 int16_t Alarm_2_TemperatureVal;
 uint8_t Action_2_Namber;
 uint8_t Action_Sensor_ERROR;
} EEstruct;

using SensorConfEEPROM = EEstruct;

class SensorConf
{

public:
 public:

 SensorConfEEPROM Conf;

 bool Check_Alarm(void);
 unsigned int AlarmActionsStatus;
 bool AlarmFlag;
 const signed int *TValue;
 const bool *TValueCRC;

 static bool SC_eepromERROR;
 unsigned char MenuN;
# 63 "SensorConf.h"
private:
 SensorConfEEPROM *SC_eeprom;
 SensorConfEEPROM *SC_eepromXOR;
 void menu_1(void);
 void menu_2(void);
 void menu_3(void);
 void menu_4(void);
 void menu_5(void);
 void menu_6(void);
 void menu_7(void);
 void menu_8(void);
 void menu_9(void);
 void menu_10(void);
 void menu_0(void);
 char RW_EEPROM(bool a=0);

public:

 void ToDefoult(void);
 void menu_start(void);


 using FP = void(SensorConf::*) ();
 FP Menu[12] = { &SensorConf::menu_0,
      &SensorConf::menu_1,
      &SensorConf::menu_2,
      &SensorConf::menu_3,
      &SensorConf::menu_4,
      &SensorConf::menu_5,
      &SensorConf::menu_6,
      &SensorConf::menu_7,
      &SensorConf::menu_8,
      &SensorConf::menu_9,
      &SensorConf::menu_10,
      &SensorConf::menu_0};


 unsigned char Sensor_number;

protected:
private:

 void CheckButtonAndSwitchMenu(void);


public:
 SensorConf(const int*, const bool*, SensorConfEEPROM *eeprom, SensorConfEEPROM *SC_eepromXOR, unsigned char SN);
 SensorConf();
 ~SensorConf();
protected:
private:
 SensorConf( const SensorConf &c );
 SensorConf& operator=( const SensorConf &c );

};







 extern SensorConfEEPROM EEMEM SensorConfEEPROM_1;
 extern SensorConfEEPROM EEMEM SensorConfEEPROM_2;
 extern SensorConfEEPROM EEMEM SensorConfEEPROM_3;
 extern SensorConfEEPROM EEMEM SensorConfEEPROM_4;
 extern SensorConfEEPROM EEMEM SensorConfEEPROM_5;

 extern SensorConfEEPROM EEMEM SensorConfEEPROM_XOR_1;
 extern SensorConfEEPROM EEMEM SensorConfEEPROM_XOR_2;
 extern SensorConfEEPROM EEMEM SensorConfEEPROM_XOR_3;
 extern SensorConfEEPROM EEMEM SensorConfEEPROM_XOR_4;
 extern SensorConfEEPROM EEMEM SensorConfEEPROM_XOR_5;

 extern SensorConfEEPROM SensorConfDefoult;

 extern SensorConf SensorConf_1;
 extern SensorConf SensorConf_2;
 extern SensorConf SensorConf_3;
 extern SensorConf SensorConf_4;
 extern SensorConf SensorConf_5;
# 11 "SensorConf.cpp" 2


bool SensorConf::Check_Alarm()
{
 AlarmActionsStatus = 0;
 bool ret = false;

 if (Conf.DS18B20_Enable) {
  if (!(*TValueCRC)) {
   AlarmActionsStatus |= (1 << Conf.Action_Sensor_ERROR);
   ret = true;
  } else {
   if (Conf.Alarm_1_Enable) {
    if ((Conf.Alarm_1_ifUpTemperature && ((*TValue) >= Conf.Alarm_1_TemperatureVal)) || (!Conf.Alarm_1_ifUpTemperature && ((*TValue) <= Conf.Alarm_1_TemperatureVal))) {
     AlarmActionsStatus |= (1 << Conf.Action_1_Namber);
     ret = true;
    }
   }
   if (Conf.Alarm_2_Enable) {
    if ((Conf.Alarm_2_ifUpTemperature && ((*TValue) >= Conf.Alarm_2_TemperatureVal)) || (!Conf.Alarm_2_ifUpTemperature && ((*TValue) <= Conf.Alarm_2_TemperatureVal))) {
     AlarmActionsStatus |= (1 << Conf.Action_2_Namber);
     ret = true;
    }
   }
  }
 }
 if (ret) AlarmFlag = true;
 return ret;
}

void SensorConf::CheckButtonAndSwitchMenu()
{
 if (!(PIND & (1<<(3)))) {
  MenuN++;
  menu_refresh_counter = 0;
  } else {
  if (!(PIND & (1<<(4)))){
   MenuN--;
   menu_refresh_counter = 0;
   } else {

  }
 }
}

void SensorConf::ToDefoult()
{
 Conf = SensorConfDefoult;
 RW_EEPROM(true);
}

void SensorConf::menu_0()
{
 MenuN = 0;

 if (menu_refresh_counter == 0) {
  menu_refresh_counter = menu_refresh_counter_MAX;

  setposXY(0,0);

  str_lcd("<  DS18B20 ");
  sendcharlcd(0x30+Sensor_number);
  str_lcd(" set   >");
  setposXY(0,1);

  str_lcd("   Up/Down.  Reset. ");
  IfButtonPresToWait();
 }

 if (!(PIND & (1<<(2)))) {
  ToDefoult();
  wdt_enable(
# 82 "SensorConf.cpp" 3
            0
# 82 "SensorConf.cpp"
                     );
  while (true) {}
 }
 if (!(PIND & (1<<(3)))) {
  menu_namber++;
  menu_refresh_counter = 0;
  RW_EEPROM(true);
  clearlcd();
  } else {
  if (!(PIND & (1<<(4)))){
   menu_namber--;
   menu_refresh_counter = 0;
   RW_EEPROM(true);
   clearlcd();
   } else {

  }
 }

 if (!(PIND & (1<<(5)))) {
  MenuN++;
  menu_refresh_counter = 0;
  } else {
  if (!(PIND & (1<<(6)))) {
   MenuN++;
   menu_refresh_counter = 0;
  }
 }
}

char SensorConf::RW_EEPROM(bool a )
{
 SensorConfEEPROM temp;
 SensorConfEEPROM *temp_ptr = &temp;
 SensorConfEEPROM *Conf_ptr = &Conf;

 char ret = 0;
 if (a) {
  
# 120 "SensorConf.cpp" 3
 __asm__ __volatile__ ("cli" ::: "memory")
# 120 "SensorConf.cpp"
      ;
  eeprom_update_block(&Conf, SC_eeprom, sizeof(SensorConfEEPROM));
  for (unsigned char b=0; b<sizeof(SensorConfEEPROM); b++ )
  {
   ((char*)temp_ptr)[b] = ((((char*)Conf_ptr)[b]) ^ 0xff);
  }

  eeprom_update_block(&temp, SC_eepromXOR, sizeof(SensorConfEEPROM));

  ret = 1;
  
# 130 "SensorConf.cpp" 3
 __asm__ __volatile__ ("sei" ::: "memory")
# 130 "SensorConf.cpp"
      ;
 } else {
  eeprom_read_block(&Conf, SC_eeprom, sizeof(SensorConfEEPROM));
  eeprom_read_block(&temp, SC_eepromXOR, sizeof(SensorConfEEPROM));
  for (unsigned char b=0; b<sizeof(SensorConfEEPROM); b++ )
  {
   if (!((((unsigned char*)Conf_ptr)[b]) == (((unsigned char*)temp_ptr)[b] ^ 0xff))) {
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
    return 0;
   }
  }
  ret = 1;

 }
 return ret;
}

void SensorConf::menu_1()
{
 if (menu_refresh_counter == 0) {
  menu_refresh_counter = menu_refresh_counter_MAX;
  setposXY(0,0);
  str_lcd("<  DS18  ");
  sendcharlcd(0x30+Sensor_number);
  str_lcd(" ON/OFF  >");
  setposXY(0,1);
  if (Conf.DS18B20_Enable){
   str_lcd("        <ON>        ");
   } else {
   str_lcd("        <OFF>       ");
  }
  IfButtonPresToWait();
 }

 CheckButtonAndSwitchMenu();

 if (!(PIND & (1<<(5))) || !(PIND & (1<<(6)))) {
  Conf.DS18B20_Enable = !Conf.DS18B20_Enable;
  menu_refresh_counter = 0;
 }
}

void SensorConf::menu_2()
{
 if (menu_refresh_counter == 0) {
  menu_refresh_counter = menu_refresh_counter_MAX;
  setposXY(0,0);
  str_lcd("<  Alarm 1 ON/OFF  >");
  setposXY(0,1);
  if (Conf.Alarm_1_Enable){
   str_lcd("        <ON>        ");
   } else {
   str_lcd("        <OFF>       ");
  }
  IfButtonPresToWait();
 }

 CheckButtonAndSwitchMenu();

 if (!(PIND & (1<<(5))) || !(PIND & (1<<(6)))) {
  Conf.Alarm_1_Enable = !Conf.Alarm_1_Enable;
  menu_refresh_counter = 0;
 }
}

void SensorConf::menu_3()
{
 if (menu_refresh_counter == 0) {
  menu_refresh_counter = menu_refresh_counter_MAX;
  setposXY(0,0);
  str_lcd("<  Alarm 1 if >/<  >");
  setposXY(0,1);

  if (Conf.Alarm_1_ifUpTemperature){
   str_lcd("        if >=       ");
  } else {
   str_lcd("        if <=       ");
  }

  IfButtonPresToWait();
 }

 CheckButtonAndSwitchMenu();

 if (!(PIND & (1<<(5))) || !(PIND & (1<<(6)))) {
  Conf.Alarm_1_ifUpTemperature = !Conf.Alarm_1_ifUpTemperature;
  menu_refresh_counter = 0;
 }
}

void SensorConf::menu_4()
{
 if (menu_refresh_counter == 0) {
  menu_refresh_counter = menu_refresh_counter_MAX;
  setposXY(0,0);
  str_lcd("<  Alarm 1 set T");
  sendcharlcd(0xDF);
  str_lcd("  >");
  setposXY(0,1);

  str_lcd("  ");
  print_ds18b20_val((int16_t&)(*TValue));

  if (Conf.Alarm_1_ifUpTemperature){
   str_lcd(" >");
   } else {
   str_lcd(" <");
  }
  print_ds18b20_val(Conf.Alarm_1_TemperatureVal);
  str_lcd("  ");
  IfButtonPresToWait();
 }

 CheckButtonAndSwitchMenu();
 if (!(PIND & (1<<(7)))) Conf.Alarm_1_TemperatureVal = *TValue;
 if (!(PIND & (1<<(5)))) {
  --Conf.Alarm_1_TemperatureVal;
  menu_refresh_counter = 0;
  } else {
  if (!(PIND & (1<<(6)))) {
   ++Conf.Alarm_1_TemperatureVal;
   menu_refresh_counter = 0;
  }
 }
}

void SensorConf::menu_5()
{
 if (menu_refresh_counter == 0) {
  menu_refresh_counter = menu_refresh_counter_MAX;
  setposXY(0,0);
  str_lcd("< Choice 1 action  >");
  setposXY(0,1);
  str_lcd(&AlarmNames[Conf.Action_1_Namber][0]);

  IfButtonPresToWait();
 }

 CheckButtonAndSwitchMenu();

 if (!(PIND & (1<<(5)))) {
  if (Conf.Action_1_Namber) {
   Conf.Action_1_Namber--;
  }
  menu_refresh_counter = 0;
  } else {
  if (!(PIND & (1<<(6)))) {
   if (Conf.Action_1_Namber < AlarmNamesSum-1) {
    Conf.Action_1_Namber++;
   }
   menu_refresh_counter = 0;
  }
 }
}

void SensorConf::menu_6()
{
 if (menu_refresh_counter == 0) {
  menu_refresh_counter = menu_refresh_counter_MAX;
  setposXY(0,0);
  str_lcd("<  Alarm 2 ON/OFF  >");
  setposXY(0,1);

  if (Conf.Alarm_2_Enable) {
   str_lcd("        <ON>        ");
  } else {
   str_lcd("        <OFF>       ");
  }

  IfButtonPresToWait();
 }

 CheckButtonAndSwitchMenu();

 if (!(PIND & (1<<(5))) || !(PIND & (1<<(6)))) {
  Conf.Alarm_2_Enable = !Conf.Alarm_2_Enable;
  menu_refresh_counter = 0;
 }
}

void SensorConf::menu_7()
{
 if (menu_refresh_counter == 0) {
  menu_refresh_counter = menu_refresh_counter_MAX;
  setposXY(0,0);
  str_lcd("<  Alarm 2 if >/<  >");
  setposXY(0,1);

  if (Conf.Alarm_2_ifUpTemperature){
   str_lcd("        if >=       ");
   } else {
   str_lcd("        if <=       ");
  }

  IfButtonPresToWait();
 }

 CheckButtonAndSwitchMenu();

 if (!(PIND & (1<<(5))) || !(PIND & (1<<(6)))) {
  Conf.Alarm_2_ifUpTemperature = !Conf.Alarm_2_ifUpTemperature;
  menu_refresh_counter = 0;
 }
}

void SensorConf::menu_8()
{
 if (menu_refresh_counter == 0) {
  menu_refresh_counter = menu_refresh_counter_MAX;
  setposXY(0,0);
  str_lcd("<  Alarm 2 set T");
  sendcharlcd(0xDF);
  str_lcd("  >");
  setposXY(0,1);

  str_lcd("  ");
  print_ds18b20_val((int16_t&)(*TValue));
  if (Conf.Alarm_2_ifUpTemperature){
   str_lcd(" >");
   } else {
   str_lcd(" <");
  }
  print_ds18b20_val(Conf.Alarm_2_TemperatureVal);
  str_lcd("  ");
  IfButtonPresToWait();
 }

 CheckButtonAndSwitchMenu();

 if (!(PIND & (1<<(7)))) Conf.Alarm_2_TemperatureVal = *TValue;
 if (!(PIND & (1<<(5)))) {
  --Conf.Alarm_2_TemperatureVal;
  menu_refresh_counter = 0;
  } else {
  if (!(PIND & (1<<(6)))) {
   ++Conf.Alarm_2_TemperatureVal;
   menu_refresh_counter = 0;
  }
 }
}

void SensorConf::menu_9()
{
 if (menu_refresh_counter == 0) {
  menu_refresh_counter = menu_refresh_counter_MAX;
  setposXY(0,0);
  str_lcd("< Choice 2 action  >");
  setposXY(0,1);
  str_lcd(&AlarmNames[Conf.Action_2_Namber][0]);

  IfButtonPresToWait();
 }

 CheckButtonAndSwitchMenu();

 if (!(PIND & (1<<(5)))) {
  if (Conf.Action_2_Namber) {
   Conf.Action_2_Namber--;
  }
  menu_refresh_counter = 0;
  } else {
  if (!(PIND & (1<<(6)))) {
   if (Conf.Action_2_Namber < AlarmNamesSum-1) {
    Conf.Action_2_Namber++;
   }
   menu_refresh_counter = 0;
  }
 }
}

void SensorConf::menu_10()
{
 if (menu_refresh_counter == 0) {
  menu_refresh_counter = menu_refresh_counter_MAX;
  setposXY(0,0);
  str_lcd("<  DS18 ERROR CRC  >");

  setposXY(0,1);
# 424 "SensorConf.cpp"
  str_lcd(&AlarmNames[Conf.Action_Sensor_ERROR][0]);

  IfButtonPresToWait();
 }

 CheckButtonAndSwitchMenu();

 if (!(PIND & (1<<(5)))) {
  if (Conf.Action_Sensor_ERROR) {
   Conf.Action_Sensor_ERROR--;
  }
  menu_refresh_counter = 0;
  } else {
  if (!(PIND & (1<<(6)))) {
   if (Conf.Action_Sensor_ERROR < AlarmNamesSum-1) {
    Conf.Action_Sensor_ERROR++;
   }
   menu_refresh_counter = 0;
  }
 }
}

void SensorConf::menu_start(void)
{
 (this->*Menu[MenuN])();
}

bool SensorConf::SC_eepromERROR = 0;


SensorConf::SensorConf(const int *T, const bool *CRC, SensorConfEEPROM *eeprom, SensorConfEEPROM *eepromXOR, unsigned char SN)
{
 TValue = T;
 TValueCRC = CRC;
 SC_eeprom = eeprom;
 SC_eepromXOR = eepromXOR;

 Sensor_number = SN;
 if (RW_EEPROM(false)) {
  asm("nop");
 } else {
  asm("nop");
  SC_eepromERROR = true;
  Conf = SensorConfDefoult;
 }

 AlarmFlag = 0;
 MenuN = 0;
}


SensorConf::~SensorConf()
{

}
