static void oneshot_event(void) { shot_time = 0; if(pwmSwitch == 0) { //strcat(logbuf, "open\n"); pwmSwitch = 1; SET_CBUS_REG_MASK(PWM_MISC_REG_AB, ((1<<15)|(0<<8)|(1<<0)));//on } else { //strcat(logbuf, "close\n"); pwmSwitch = 0; CLEAR_CBUS_REG_MASK(PWM_MISC_REG_AB, ((1<<15)|(0<<8)|(1<<0)));//off } //set next window timer send_idx++; if(send_idx < send_win.winNum) { //dbg("delay time[%d] and trgger next event\n", send_win.winArray[send_idx]); set_timer_b_event(send_win.winArray[send_idx]); } else //pwm should be off { //dbg("off pwm\n"); CLEAR_CBUS_REG_MASK(PWM_MISC_REG_AB, ((1<<15)|(0<<8)|(1<<0))); pwmSwitch = 0; } }
static void oneshot_event(void) { shot_time = 0; if(pwmSwitch == 0) { pwmSwitch = 1; open_pwm(irreceiver_data->pwm_no);//on } else { pwmSwitch = 0; close_pwm(irreceiver_data->pwm_no);//off } //set next window timer send_idx++; if(send_idx < send_win.winNum) { set_timer_b_event(send_win.winArray[send_idx]); } else //pwm should be off { close_pwm(irreceiver_data->pwm_no);; pwmSwitch = 0; send_flag = 0; } }
static int aml_ir_receiver_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long args) { int i; s32 r = 0; unsigned long flags; void __user *argp = (void __user *)args; dbg("aml_ir_receiver_ioctl()\n"); switch(cmd) { case IRRECEIVER_IOC_SEND: if (copy_from_user(&send_win, argp, sizeof(struct ir_window))) return -EFAULT; #ifdef DEBUG for(i=0; i<send_win.winNum; i++) dbg("idx[%d]:[%d]\n", i, send_win.winArray[i]); #endif logbuf[0] = 0; send_idx = 0; pwmSwitch = 1; send_flag = 1; open_pwm(irreceiver_data->pwm_no);; if(send_idx < send_win.winNum) { local_irq_save(flags); set_timer_b_event(send_win.winArray[send_idx]); local_irq_restore(flags); } break; case IRRECEIVER_IOC_RECV: dbg("recv win [%d]\n", reced_win.winNum); if(copy_to_user(argp, &reced_win, sizeof(struct ir_window))) return -EFAULT; break; case IRRECEIVER_IOC_STUDY_S: dbg("IRRECEIVER_IOC_STUDY_S\n"); rec_win.winNum = 0; reced_win.winNum = 0; invalid_win = 0; end_key = false; break; case IRRECEIVER_IOC_STUDY_E: dbg("IRRECEIVER_IOC_STUDY_E\n"); break; default: r = -ENOIOCTLCMD; break; } return r; }
static long aml_ir_receiver_ioctl(struct file *filp, unsigned int cmd, unsigned long args) { int i; s32 r = 0; unsigned long flags; void __user *argp = (void __user *)args; dbg("aml_ir_receiver_ioctl()\n"); switch(cmd) { case IRRECEIVER_IOC_SEND: if (copy_from_user(&send_win, argp, sizeof(struct ir_window))) return -EFAULT; //for(i=0; i<send_win.winNum; i++) // dbg("idx[%d]:[%d]\n", i, send_win.winArray[i]); dbg("send win [%d]\n", send_win.winNum); logbuf[0] = 0; send_idx = 0; pwmSwitch = 1; SET_CBUS_REG_MASK(PWM_MISC_REG_AB, ((1<<15)|(0<<8)|(1<<0))); if(send_idx < send_win.winNum) { local_irq_save(flags); set_timer_b_event(send_win.winArray[send_idx]); local_irq_restore(flags); } break; case IRRECEIVER_IOC_RECV: dbg("recv win [%d]\n", rec_win.winNum); if(copy_to_user(argp, &rec_win, sizeof(struct ir_window))) return -EFAULT; break; case IRRECEIVER_IOC_STUDY_S: dbg("IRRECEIVER_IOC_STUDY_S\n"); rec_win.winNum = 0; break; case IRRECEIVER_IOC_STUDY_E: dbg("IRRECEIVER_IOC_STUDY_E\n"); break; default: r = -ENOIOCTLCMD; break; } return r; }