Deleted Added
full compact
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 ---