// 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); }
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{ }