12 #include "avr_helper.h" 13 #include <avr/interrupt.h> 14 #include <avr/eeprom.h> 21 static uint32_t _code;
22 static volatile uint8_t _cnt;
23 static volatile uint8_t _code_done;
26 #define IR_DONE (0x3000) 31 static inline void start_ir_capture(
void){
46 TIMSK |= _BV(TICIE1) | _BV(OCIE1B);
47 TCCR1B |= TIMER_CLK_DIV_8;
50 ISR(TIMER1_COMPB_vect){
52 TIMSK &= ~_BV(OCIE1B);
55 static volatile uint16_t bit;
60 ISR(TIMER1_CAPT_vect){
64 if(bit_is_set(TCCR1B, ICES1)){
66 OCR1B = TCNT1 + IR_DONE;
68 TCCR1B &= ~_BV(ICES1);
73 icr = (ICR1-icr) < 0 ? 0x10000 - ICR1 + icr : ICR1 - icr;
94 static uint32_t get_ir_code1(
void){
95 static uint32_t result;
98 if(!_code_done)
return 0;
106 TIMSK &= ~_BV(TICIE1);
108 TIMSK |= _BV(TICIE1);
115 static uint32_t code;
118 uint32_t cd = get_ir_code1();
146 eeprom_read_block(&ecmd, &e_cmd[i],
sizeof(
e_cmd_t));
161 eeprom_read_block(&ecmd, &e_cmd[i],
sizeof(
e_cmd_t));
174 eeprom_read_block(&ecmd, &e_cmd[i],
sizeof(
e_cmd_t));
178 eeprom_update_block(&ecmd, &e_cmd[i],
sizeof(
e_cmd_t));
184 void init_ir_cmd_code(uint8_t
id, control_cmd_t cmd, uint32_t code){
189 eeprom_update_block(&ecmd, &e_cmd[
id],
sizeof(
e_cmd_t));
Структура для хранения кодов команд
void set_ir_cmd_code(control_cmd_t cmd, uint32_t code)
назначение команде IR-кода
#define TOTAL_STORED_IR_CMD
Количество сохраняемых команд в EEPROM.
#define IR_CAP_PIN
Пин захвата IR-команд (ICP)
#define IR_CAP_PORT
Символ порта захвата IR-команд
uint32_t get_ir_code(void)
получение кода ДУ
#define IR_NO_CMD
Заглушка "нет команды".
описания модуля дистанционного управления
uint32_t get_ir_cmd_code(control_cmd_t cmd)
получение IR-кода команды
control_cmd_t cmd
команда управления
control_cmd_t get_ir_command(void)
поиск запрограммированной команды