static void rbwrite(int l) { if (lirc_buffer_full(&rbuf)) { /* no new signals will be accepted */ dprintk("Buffer overrun\n"); return; } lirc_buffer_write(&rbuf, (void *)&l); }
static void inline rbwrite(lirc_t l) { if(lirc_buffer_full(&rbuf)) /* no new signals will be accepted */ { dprintk("Buffer overrun\n"); return; } _lirc_buffer_write_1(&rbuf, (void *)&l); }
static void urb_complete(struct urb *urb) #endif { struct ttusbir_device *ttusbir; unsigned char *buf; int i; lirc_t l; ttusbir = urb->context; if (!ttusbir->opened) return; buf = (unsigned char *)urb->transfer_buffer; for (i = 0; i < 128; i++) { /* Here we do the filtering and some kind of down sampling */ buf[i] = ~map_table[buf[i]]; if (ttusbir->last_pulse == buf[i]) { if (ttusbir->last_num < PULSE_MASK/63) ttusbir->last_num++; /* * else we are in a idle period and do not need to * increment any longer */ } else { l = ttusbir->last_num * 62; /* about 62 = us/byte */ if (ttusbir->last_pulse) /* pulse or space? */ l |= PULSE_BIT; if (!lirc_buffer_full(&ttusbir->rbuf)) { lirc_buffer_write(&ttusbir->rbuf, (void *)&l); wake_up_interruptible(&ttusbir->rbuf.wait_poll); } ttusbir->last_num = 0; ttusbir->last_pulse = buf[i]; } } usb_submit_urb(urb, GFP_ATOMIC); /* keep data rolling :-) */ }
static int cmdir_convert_RX(unsigned char *orig_rxbuffer) { unsigned char tmp_char_buffer[80]; unsigned int tmp_int_buffer[20]; unsigned int final_data_buffer[20]; unsigned int num_data_values = 0; unsigned char num_data_bytes = 0; unsigned int orig_index = 0; int i; for (i = 0; i < 80; i++) tmp_char_buffer[i] = 0; for (i = 0; i < 20; i++) tmp_int_buffer[i] = 0; /* * get number of data bytes that follow the control bytes * (NOT including them) */ num_data_bytes = orig_rxbuffer[1]; /* check if num_bytes is multiple of 3; if not, error */ if (num_data_bytes % 3 > 0) return -1; if (num_data_bytes > 60) return -3; if (num_data_bytes < 3) return -2; /* * get number of ints to be returned; num_data_bytes does * NOT include control bytes */ num_data_values = num_data_bytes/3; for (i = 0; i < num_data_values; i++) { tmp_char_buffer[i*4] = orig_rxbuffer[(i+1)*3]; tmp_char_buffer[i*4+1] = orig_rxbuffer[(i+1)*3+1]; tmp_char_buffer[i*4+2] = 0; tmp_char_buffer[i*4+3] = 0; } /* convert to int array */ memcpy((unsigned char *)tmp_int_buffer, tmp_char_buffer, (num_data_values*4)); if (orig_rxbuffer[5] < 255) { /* space */ final_data_buffer[0] = get_time_value(last_mc_time, tmp_int_buffer[0], orig_rxbuffer[5]); } else { /* is pulse */ final_data_buffer[0] = get_time_value(last_mc_time, tmp_int_buffer[0], 0); final_data_buffer[0] |= PULSE_BIT; } for (i = 1; i < num_data_values; i++) { /* * index of orig_rxbuffer that corresponds to * overflow/pulse/space */ orig_index = (i + 1)*3 + 2; if (orig_rxbuffer[orig_index] < 255) { final_data_buffer[i] = get_time_value(tmp_int_buffer[i - 1], tmp_int_buffer[i], orig_rxbuffer[orig_index]); } else { final_data_buffer[i] = get_time_value(tmp_int_buffer[i - 1], tmp_int_buffer[i], 0); final_data_buffer[i] |= PULSE_BIT; } } last_mc_time = tmp_int_buffer[num_data_values - 1]; if (lirc_buffer_full(&rbuf)) { printk(KERN_ERR LIRC_DRIVER_NAME ": lirc_buffer is full\n"); return -EOVERFLOW; } lirc_buffer_write_n(&rbuf, (char *)final_data_buffer, num_data_values); return 0; }