// initialization
void ICACHE_FLASH_ATTR enableIRIn() {

  // initialize state machine variables
  irparams.rcvstate = STATE_IDLE;
  irparams.rawlen = 0;

  set_gpio_mode(irparams.recvpin, GPIO_PULLUP, GPIO_INPUT);   //GPIO13 IR RECV

  //Start periodic loop
  os_timer_disarm(&ir_timer);
  os_timer_setfn(&ir_timer, (os_timer_func_t *)ir_cb, (void *)11);
  os_timer_arm_us(&ir_timer,50,true);
}
Beispiel #2
0
void ir_tx_handler()//u8 ir_tx_addr, u8 ir_tx_data,u16 ir_tx_rep)
{
	u32 t_expire=0;
	static u32 rep_expire_us=110000;//for nec 32bit mode
	static u16 data_tmp=0;
	static u8 ir_tx_bit_num=0;
	static  u8 ir_bit_state=TX_BIT_CARRIER;
	#if IR_TX_STATUS_MACHINE_HW_TIMER
		hw_timer_stop();
	#else
		os_timer_disarm(&ir_tx_timer);
	#endif
    switch(ir_tx_state)
    {
        case IR_TX_IDLE: 
        {
            gen_carrier_clk();
            ir_tx_state = IR_TX_HEADER;
            #if IR_TX_STATUS_MACHINE_HW_TIMER
              hw_timer_arm(IR_NEC_HEADER_HIGH_US);
              hw_timer_start();
            #else
            os_timer_arm_us(&ir_tx_timer, IR_NEC_HEADER_HIGH_US, 0);//143  9ms
            #endif
            break;
        }
        case IR_TX_HEADER:
        {
            ir_tx_carrier_clr();
            #if IR_TX_STATUS_MACHINE_HW_TIMER
                hw_timer_arm(IR_NEC_HEADER_LOW_US);
                hw_timer_start();
            #else
                os_timer_arm_us(&ir_tx_timer, IR_NEC_HEADER_LOW_US, 0);//71 ,4.5ms
            #endif
            ir_tx_state=IR_TX_DATA;
            ir_bit_state=TX_BIT_CARRIER;
            data_tmp=ir_tx_addr;
            rep_expire_us-=13500;
            break;
        }
        case IR_TX_DATA:
        {
            if(ir_bit_state==TX_BIT_CARRIER){
                t_expire=IR_NEC_DATA_HIGH_US;
                ir_bit_state=TX_BIT_LOW;
                gen_carrier_clk();
            }else if(ir_bit_state==TX_BIT_LOW){
                    ir_tx_carrier_clr();
                    if( (data_tmp>>(ir_tx_bit_num% IR_NEC_BIT_NUM ))&0x1){
                        t_expire=IR_NEC_DATA_LOW_1_US;
                    } else{
                        t_expire=IR_NEC_DATA_LOW_0_US; 
                    }
                    ir_tx_bit_num++;
                    if(ir_tx_bit_num==IR_NEC_BIT_NUM ){
                        if(ir_tx_standard) data_tmp=(~ir_tx_addr);
                        else data_tmp = ir_tx_addr2;
                    }else if(ir_tx_bit_num==IR_NEC_BIT_NUM*2 ){
                        if(ir_tx_standard) data_tmp=ir_tx_cmd;
                        else data_tmp=ir_tx_cmd;
                    }else if(ir_tx_bit_num==IR_NEC_BIT_NUM*3){
                        if(ir_tx_standard) data_tmp=(~ir_tx_cmd);
                        else data_tmp=ir_tx_cmd2;
                    }else if((ir_tx_bit_num==(IR_NEC_BIT_NUM*4+1))){
                        //clean up state for next or for repeat
                        ir_tx_state=IR_TX_IDLE;
                        ir_tx_bit_num=0;
                        ir_bit_state=TX_BIT_CARRIER;
                            #if IR_TX_STATUS_MACHINE_HW_TIMER
                                hw_timer_stop();
                            #else
                                os_timer_disarm(&ir_tx_timer);
                            #endif
                        if(ir_tx_rep>0){   
                           t_expire= (rep_expire_us -5); 
                           #if IR_TX_STATUS_MACHINE_HW_TIMER
                               hw_timer_arm(t_expire);
                               hw_timer_start();
                           #else
                                os_timer_arm_us(&ir_tx_timer, t_expire, 0);//71
                            #endif
                            rep_expire_us=IR_NEC_REP_CYCLE;
                             ir_tx_state=IR_TX_REP;
                        }else{
                            rep_expire_us=IR_NEC_REP_CYCLE;
                            ir_tx_state=IR_TX_IDLE;
                        }
                        break;
                        
                    }
                    ir_bit_state=TX_BIT_CARRIER;
                }else{
            }