/*
 * buttons.h
 *
 *  Created on: 4 апр. 2016 г.
 *      Author: mvinogradov
 */
#include <avr/io.h>
#include <avr_helper.h>

#ifndef BUTTONS_H_
#define BUTTONS_H_

// Key ports map
#define KEY_FORWARD_PORT	D
#define KEY_FORWARD		_BV(4)

#define KEY_PORT		C
#define KEY_BACKRWARD	_BV(0)
#define KEY_LEFT		_BV(1)
#define KEY_RIGHT		_BV(2)
#define KEY_BOOZ		_BV(3)
#define KEY_BLINK		_BV(4)
#define KEY_LAMP		_BV(5)

// структура описывающая состояние кнопок
typedef union{
	struct{
		uint8_t k_back	:1;
		uint8_t k_left	:1;
		uint8_t k_right	:1;
		uint8_t k_booz	:1;
		uint8_t k_blink	:1;
		uint8_t k_lamp	:1;
		uint8_t k_fwd	:1;
	};
	uint8_t byte;
} buttons_t;

#define KEY_ANY		(KEY_RIGHT | KEY_LEFT | KEY_BACKRWARD | KEY_LAMP | KEY_BLINK | KEY_BOOZ)



// порт внешнего прерыания
/// Порт линии для кнопки (только буква обозначения порта)
#define INT_PORT		D
/// Номер пина порта линии кнопки
#define INT_PIN		2

// Порт управления фарой
/// Порт линии для кнопки (только буква обозначения порта)
#define LAMP_PORT		C
/// Номер пина порта линии кнопки
#define LAMP_PIN		5

//считываем значение с пина кнопки
#define lamp() (PIN(LAMP_PORT) & _BV(LAM_PIN))

// порт управления проблесковым маячков
/// Порт линии для кнопки (только буква обозначения порта)
#define BLINK_PORT		C
/// Номер пина порта линии кнопки
#define BLINK_PIN		4

//считываем значение с пина кнопки
#define blink() (PIN(BLINK_PORT) & _BV(BLINK_PIN))

// порт управления гудком
/// Порт линии для кнопки (только буква обозначения порта)
#define BOOZER_PORT		C
/// Номер пина порта линии кнопки
#define BOOZER_PIN		3

//считываем значение с пина кнопки
#define boozer() (PIN(BOOZER_PORT) & _BV(BOOZER_PIN))
extern void key_init(void);
uint8_t get_key(void);

#endif /* KEY_H_ */
