hid.c (163185) | hid.c (207812) |
---|---|
1/* 2 * hid.c 3 */ 4 5/*- 6 * Copyright (c) 2006 Maksim Yevmenkin <m_evmenkin@yahoo.com> 7 * All rights reserved. 8 * --- 14 unchanged lines hidden (view full) --- 23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28 * SUCH DAMAGE. 29 * 30 * $Id: hid.c,v 1.5 2006/09/07 21:06:53 max Exp $ | 1/* 2 * hid.c 3 */ 4 5/*- 6 * Copyright (c) 2006 Maksim Yevmenkin <m_evmenkin@yahoo.com> 7 * All rights reserved. 8 * --- 14 unchanged lines hidden (view full) --- 23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28 * SUCH DAMAGE. 29 * 30 * $Id: hid.c,v 1.5 2006/09/07 21:06:53 max Exp $ |
31 * $FreeBSD: head/usr.sbin/bluetooth/bthidd/hid.c 163185 2006-10-09 22:27:23Z markus $ | 31 * $FreeBSD: head/usr.sbin/bluetooth/bthidd/hid.c 207812 2010-05-09 09:20:25Z kaiw $ |
32 */ 33 34#include <sys/consio.h> 35#include <sys/mouse.h> 36#include <sys/queue.h> 37#include <assert.h> 38#include <bluetooth.h> 39#include <dev/usb/usb.h> --- 85 unchanged lines hidden (view full) --- 125int32_t 126hid_interrupt(bthid_session_p s, uint8_t *data, int32_t len) 127{ 128 hid_device_p hid_device; 129 hid_data_t d; 130 hid_item_t h; 131 int32_t report_id, usage, page, val, 132 mouse_x, mouse_y, mouse_z, mouse_butt, | 32 */ 33 34#include <sys/consio.h> 35#include <sys/mouse.h> 36#include <sys/queue.h> 37#include <assert.h> 38#include <bluetooth.h> 39#include <dev/usb/usb.h> --- 85 unchanged lines hidden (view full) --- 125int32_t 126hid_interrupt(bthid_session_p s, uint8_t *data, int32_t len) 127{ 128 hid_device_p hid_device; 129 hid_data_t d; 130 hid_item_t h; 131 int32_t report_id, usage, page, val, 132 mouse_x, mouse_y, mouse_z, mouse_butt, |
133 mevents, kevents; | 133 mevents, kevents, i; |
134 135 assert(s != NULL); 136 assert(s->srv != NULL); 137 assert(data != NULL); 138 139 if (len < 3) { 140 syslog(LOG_ERR, "Got short message (%d bytes) on Interrupt " \ 141 "channel from %s", len, bt_ntoa(&s->bdaddr, NULL)); 142 return (-1); 143 } 144 145 if (data[0] != 0xa1) { 146 syslog(LOG_ERR, "Got unexpected message 0x%x on " \ 147 "Interrupt channel from %s", 148 data[0], bt_ntoa(&s->bdaddr, NULL)); 149 return (-1); 150 } 151 152 report_id = data[1]; | 134 135 assert(s != NULL); 136 assert(s->srv != NULL); 137 assert(data != NULL); 138 139 if (len < 3) { 140 syslog(LOG_ERR, "Got short message (%d bytes) on Interrupt " \ 141 "channel from %s", len, bt_ntoa(&s->bdaddr, NULL)); 142 return (-1); 143 } 144 145 if (data[0] != 0xa1) { 146 syslog(LOG_ERR, "Got unexpected message 0x%x on " \ 147 "Interrupt channel from %s", 148 data[0], bt_ntoa(&s->bdaddr, NULL)); 149 return (-1); 150 } 151 152 report_id = data[1]; |
153 data += 2; 154 len -= 2; | 153 data ++; 154 len --; |
155 156 hid_device = get_hid_device(&s->bdaddr); 157 assert(hid_device != NULL); 158 159 mouse_x = mouse_y = mouse_z = mouse_butt = mevents = kevents = 0; 160 161 for (d = hid_start_parse(hid_device->desc, 1 << hid_input, -1); 162 hid_get_item(d, &h) > 0; ) { --- 34 unchanged lines hidden (view full) --- 197 198 if (h.flags & HIO_VARIABLE) { 199 if (val && usage < kbd_maxkey()) 200 bit_set(s->keys1, usage); 201 } else { 202 if (val && val < kbd_maxkey()) 203 bit_set(s->keys1, val); 204 | 155 156 hid_device = get_hid_device(&s->bdaddr); 157 assert(hid_device != NULL); 158 159 mouse_x = mouse_y = mouse_z = mouse_butt = mevents = kevents = 0; 160 161 for (d = hid_start_parse(hid_device->desc, 1 << hid_input, -1); 162 hid_get_item(d, &h) > 0; ) { --- 34 unchanged lines hidden (view full) --- 197 198 if (h.flags & HIO_VARIABLE) { 199 if (val && usage < kbd_maxkey()) 200 bit_set(s->keys1, usage); 201 } else { 202 if (val && val < kbd_maxkey()) 203 bit_set(s->keys1, val); 204 |
205 data ++; 206 len --; 207 208 len = min(len, h.report_size); 209 while (len > 0) { | 205 for (i = 1; i < h.report_count; i++) { 206 h.pos += h.report_size; |
210 val = hid_get_data(data, &h); 211 if (val && val < kbd_maxkey()) 212 bit_set(s->keys1, val); | 207 val = hid_get_data(data, &h); 208 if (val && val < kbd_maxkey()) 209 bit_set(s->keys1, val); |
213 214 data ++; 215 len --; | |
216 } 217 } 218 break; 219 220 case HUP_BUTTON: 221 if (usage != 0) { 222 if (usage == 2) 223 usage = 3; --- 179 unchanged lines hidden --- | 210 } 211 } 212 break; 213 214 case HUP_BUTTON: 215 if (usage != 0) { 216 if (usage == 2) 217 usage = 3; --- 179 unchanged lines hidden --- |