File: | hw/bt/sdp.c |
Location: | line 215, column 18 |
Description: | The left operand of '<' is a garbage value |
1 | /* | |||
2 | * Service Discover Protocol server for QEMU L2CAP devices | |||
3 | * | |||
4 | * Copyright (C) 2008 Andrzej Zaborowski <balrog@zabor.org> | |||
5 | * | |||
6 | * This program is free software; you can redistribute it and/or | |||
7 | * modify it under the terms of the GNU General Public License as | |||
8 | * published by the Free Software Foundation; either version 2 of | |||
9 | * the License, or (at your option) any later version. | |||
10 | * | |||
11 | * This program is distributed in the hope that it will be useful, | |||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
14 | * GNU General Public License for more details. | |||
15 | * | |||
16 | * You should have received a copy of the GNU General Public License along | |||
17 | * with this program; if not, see <http://www.gnu.org/licenses/>. | |||
18 | */ | |||
19 | ||||
20 | #include "qemu-common.h" | |||
21 | #include "hw/bt.h" | |||
22 | ||||
23 | struct bt_l2cap_sdp_state_s { | |||
24 | struct bt_l2cap_conn_params_s *channel; | |||
25 | ||||
26 | struct sdp_service_record_s { | |||
27 | int match; | |||
28 | ||||
29 | int *uuid; | |||
30 | int uuids; | |||
31 | struct sdp_service_attribute_s { | |||
32 | int match; | |||
33 | ||||
34 | int attribute_id; | |||
35 | int len; | |||
36 | void *pair; | |||
37 | } *attribute_list; | |||
38 | int attributes; | |||
39 | } *service_list; | |||
40 | int services; | |||
41 | }; | |||
42 | ||||
43 | static ssize_t sdp_datalen(const uint8_t **element, ssize_t *left) | |||
44 | { | |||
45 | size_t len = *(*element) ++ & SDP_DSIZE_MASK; | |||
46 | ||||
47 | if (!*left) | |||
48 | return -1; | |||
49 | (*left) --; | |||
50 | ||||
51 | if (len < SDP_DSIZE_NEXT1) | |||
52 | return 1 << len; | |||
53 | else if (len == SDP_DSIZE_NEXT1) { | |||
54 | if (*left < 1) | |||
55 | return -1; | |||
56 | (*left) --; | |||
57 | ||||
58 | return *(*element) ++; | |||
59 | } else if (len == SDP_DSIZE_NEXT2) { | |||
60 | if (*left < 2) | |||
61 | return -1; | |||
62 | (*left) -= 2; | |||
63 | ||||
64 | len = (*(*element) ++) << 8; | |||
65 | return len | (*(*element) ++); | |||
66 | } else { | |||
67 | if (*left < 4) | |||
68 | return -1; | |||
69 | (*left) -= 4; | |||
70 | ||||
71 | len = (*(*element) ++) << 24; | |||
72 | len |= (*(*element) ++) << 16; | |||
73 | len |= (*(*element) ++) << 8; | |||
74 | return len | (*(*element) ++); | |||
75 | } | |||
76 | } | |||
77 | ||||
78 | static const uint8_t bt_base_uuid[12] = { | |||
79 | 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, 0x5f, 0x9b, 0x34, 0xfb, | |||
80 | }; | |||
81 | ||||
82 | static int sdp_uuid_match(struct sdp_service_record_s *record, | |||
83 | const uint8_t *uuid, ssize_t datalen) | |||
84 | { | |||
85 | int *lo, hi, val; | |||
86 | ||||
87 | if (datalen == 16 || datalen == 4) { | |||
88 | if (datalen == 16 && memcmp(uuid + 4, bt_base_uuid, 12)) | |||
89 | return 0; | |||
90 | ||||
91 | if (uuid[0] | uuid[1]) | |||
92 | return 0; | |||
93 | uuid += 2; | |||
94 | } | |||
95 | ||||
96 | val = (uuid[0] << 8) | uuid[1]; | |||
97 | lo = record->uuid; | |||
98 | hi = record->uuids; | |||
99 | while (hi >>= 1) | |||
100 | if (lo[hi] <= val) | |||
101 | lo += hi; | |||
102 | ||||
103 | return *lo == val; | |||
104 | } | |||
105 | ||||
106 | #define CONTINUATION_PARAM_SIZE(1 + sizeof(int)) (1 + sizeof(int)) | |||
107 | #define MAX_PDU_OUT_SIZE96 96 /* Arbitrary */ | |||
108 | #define PDU_HEADER_SIZE5 5 | |||
109 | #define MAX_RSP_PARAM_SIZE(96 - 5 - (1 + sizeof(int))) (MAX_PDU_OUT_SIZE96 - PDU_HEADER_SIZE5 - \ | |||
110 | CONTINUATION_PARAM_SIZE(1 + sizeof(int))) | |||
111 | ||||
112 | static int sdp_svc_match(struct bt_l2cap_sdp_state_s *sdp, | |||
113 | const uint8_t **req, ssize_t *len) | |||
114 | { | |||
115 | size_t datalen; | |||
116 | int i; | |||
117 | ||||
118 | if ((**req & ~SDP_DSIZE_MASK) != SDP_DTYPE_UUID) | |||
119 | return 1; | |||
120 | ||||
121 | datalen = sdp_datalen(req, len); | |||
122 | if (datalen != 2 && datalen != 4 && datalen != 16) | |||
123 | return 1; | |||
124 | ||||
125 | for (i = 0; i < sdp->services; i ++) | |||
126 | if (sdp_uuid_match(&sdp->service_list[i], *req, datalen)) | |||
127 | sdp->service_list[i].match = 1; | |||
128 | ||||
129 | (*req) += datalen; | |||
130 | (*len) -= datalen; | |||
131 | ||||
132 | return 0; | |||
133 | } | |||
134 | ||||
135 | static ssize_t sdp_svc_search(struct bt_l2cap_sdp_state_s *sdp, | |||
136 | uint8_t *rsp, const uint8_t *req, ssize_t len) | |||
137 | { | |||
138 | ssize_t seqlen; | |||
139 | int i, count, start, end, max; | |||
140 | int32_t handle; | |||
141 | ||||
142 | /* Perform the search */ | |||
143 | for (i = 0; i < sdp->services; i ++) | |||
144 | sdp->service_list[i].match = 0; | |||
145 | ||||
146 | if (len < 1) | |||
147 | return -SDP_INVALID_SYNTAX; | |||
148 | if ((*req & ~SDP_DSIZE_MASK) == SDP_DTYPE_SEQ) { | |||
149 | seqlen = sdp_datalen(&req, &len); | |||
150 | if (seqlen < 3 || len < seqlen) | |||
151 | return -SDP_INVALID_SYNTAX; | |||
152 | len -= seqlen; | |||
153 | ||||
154 | while (seqlen) | |||
155 | if (sdp_svc_match(sdp, &req, &seqlen)) | |||
156 | return -SDP_INVALID_SYNTAX; | |||
157 | } else if (sdp_svc_match(sdp, &req, &seqlen)) | |||
158 | return -SDP_INVALID_SYNTAX; | |||
159 | ||||
160 | if (len < 3) | |||
161 | return -SDP_INVALID_SYNTAX; | |||
162 | max = (req[0] << 8) | req[1]; | |||
163 | req += 2; | |||
164 | len -= 2; | |||
165 | ||||
166 | if (*req) { | |||
167 | if (len <= sizeof(int)) | |||
168 | return -SDP_INVALID_SYNTAX; | |||
169 | len -= sizeof(int); | |||
170 | memcpy(&start, req + 1, sizeof(int)); | |||
171 | } else | |||
172 | start = 0; | |||
173 | ||||
174 | if (len > 1) | |||
175 | return -SDP_INVALID_SYNTAX; | |||
176 | ||||
177 | /* Output the results */ | |||
178 | len = 4; | |||
179 | count = 0; | |||
180 | end = start; | |||
181 | for (i = 0; i < sdp->services; i ++) | |||
182 | if (sdp->service_list[i].match) { | |||
183 | if (count >= start && count < max && len + 4 < MAX_RSP_PARAM_SIZE(96 - 5 - (1 + sizeof(int)))) { | |||
184 | handle = i; | |||
185 | memcpy(rsp + len, &handle, 4); | |||
186 | len += 4; | |||
187 | end = count + 1; | |||
188 | } | |||
189 | ||||
190 | count ++; | |||
191 | } | |||
192 | ||||
193 | rsp[0] = count >> 8; | |||
194 | rsp[1] = count & 0xff; | |||
195 | rsp[2] = (end - start) >> 8; | |||
196 | rsp[3] = (end - start) & 0xff; | |||
197 | ||||
198 | if (end < count) { | |||
199 | rsp[len ++] = sizeof(int); | |||
200 | memcpy(rsp + len, &end, sizeof(int)); | |||
201 | len += 4; | |||
202 | } else | |||
203 | rsp[len ++] = 0; | |||
204 | ||||
205 | return len; | |||
206 | } | |||
207 | ||||
208 | static int sdp_attr_match(struct sdp_service_record_s *record, | |||
209 | const uint8_t **req, ssize_t *len) | |||
210 | { | |||
211 | int i, start, end; | |||
212 | ||||
213 | if (**req == (SDP_DTYPE_UINT | SDP_DSIZE_2)) { | |||
214 | (*req) ++; | |||
215 | if (*len < 3) | |||
| ||||
216 | return 1; | |||
217 | ||||
218 | start = (*(*req) ++) << 8; | |||
219 | start |= *(*req) ++; | |||
220 | end = start; | |||
221 | *len -= 3; | |||
222 | } else if (**req == (SDP_DTYPE_UINT | SDP_DSIZE_4)) { | |||
223 | (*req) ++; | |||
224 | if (*len < 5) | |||
225 | return 1; | |||
226 | ||||
227 | start = (*(*req) ++) << 8; | |||
228 | start |= *(*req) ++; | |||
229 | end = (*(*req) ++) << 8; | |||
230 | end |= *(*req) ++; | |||
231 | *len -= 5; | |||
232 | } else | |||
233 | return 1; | |||
234 | ||||
235 | for (i = 0; i < record->attributes; i ++) | |||
236 | if (record->attribute_list[i].attribute_id >= start && | |||
237 | record->attribute_list[i].attribute_id <= end) | |||
238 | record->attribute_list[i].match = 1; | |||
239 | ||||
240 | return 0; | |||
241 | } | |||
242 | ||||
243 | static ssize_t sdp_attr_get(struct bt_l2cap_sdp_state_s *sdp, | |||
244 | uint8_t *rsp, const uint8_t *req, ssize_t len) | |||
245 | { | |||
246 | ssize_t seqlen; | |||
247 | int i, start, end, max; | |||
248 | int32_t handle; | |||
249 | struct sdp_service_record_s *record; | |||
250 | uint8_t *lst; | |||
251 | ||||
252 | /* Perform the search */ | |||
253 | if (len < 7) | |||
254 | return -SDP_INVALID_SYNTAX; | |||
255 | memcpy(&handle, req, 4); | |||
256 | req += 4; | |||
257 | len -= 4; | |||
258 | ||||
259 | if (handle < 0 || handle > sdp->services) | |||
260 | return -SDP_INVALID_RECORD_HANDLE; | |||
261 | record = &sdp->service_list[handle]; | |||
262 | ||||
263 | for (i = 0; i < record->attributes; i ++) | |||
264 | record->attribute_list[i].match = 0; | |||
265 | ||||
266 | max = (req[0] << 8) | req[1]; | |||
267 | req += 2; | |||
268 | len -= 2; | |||
269 | if (max < 0x0007) | |||
270 | return -SDP_INVALID_SYNTAX; | |||
271 | ||||
272 | if ((*req & ~SDP_DSIZE_MASK) == SDP_DTYPE_SEQ) { | |||
273 | seqlen = sdp_datalen(&req, &len); | |||
274 | if (seqlen < 3 || len < seqlen) | |||
275 | return -SDP_INVALID_SYNTAX; | |||
276 | len -= seqlen; | |||
277 | ||||
278 | while (seqlen) | |||
279 | if (sdp_attr_match(record, &req, &seqlen)) | |||
280 | return -SDP_INVALID_SYNTAX; | |||
281 | } else if (sdp_attr_match(record, &req, &seqlen)) | |||
282 | return -SDP_INVALID_SYNTAX; | |||
283 | ||||
284 | if (len < 1) | |||
285 | return -SDP_INVALID_SYNTAX; | |||
286 | ||||
287 | if (*req) { | |||
288 | if (len <= sizeof(int)) | |||
289 | return -SDP_INVALID_SYNTAX; | |||
290 | len -= sizeof(int); | |||
291 | memcpy(&start, req + 1, sizeof(int)); | |||
292 | } else | |||
293 | start = 0; | |||
294 | ||||
295 | if (len > 1) | |||
296 | return -SDP_INVALID_SYNTAX; | |||
297 | ||||
298 | /* Output the results */ | |||
299 | lst = rsp + 2; | |||
300 | max = MIN(max, MAX_RSP_PARAM_SIZE)(((max) < ((96 - 5 - (1 + sizeof(int))))) ? (max) : ((96 - 5 - (1 + sizeof(int))))); | |||
301 | len = 3 - start; | |||
302 | end = 0; | |||
303 | for (i = 0; i < record->attributes; i ++) | |||
304 | if (record->attribute_list[i].match) { | |||
305 | if (len >= 0 && len + record->attribute_list[i].len < max) { | |||
306 | memcpy(lst + len, record->attribute_list[i].pair, | |||
307 | record->attribute_list[i].len); | |||
308 | end = len + record->attribute_list[i].len; | |||
309 | } | |||
310 | len += record->attribute_list[i].len; | |||
311 | } | |||
312 | if (0 >= start) { | |||
313 | lst[0] = SDP_DTYPE_SEQ | SDP_DSIZE_NEXT2; | |||
314 | lst[1] = (len + start - 3) >> 8; | |||
315 | lst[2] = (len + start - 3) & 0xff; | |||
316 | } | |||
317 | ||||
318 | rsp[0] = end >> 8; | |||
319 | rsp[1] = end & 0xff; | |||
320 | ||||
321 | if (end < len) { | |||
322 | len = end + start; | |||
323 | lst[end ++] = sizeof(int); | |||
324 | memcpy(lst + end, &len, sizeof(int)); | |||
325 | end += sizeof(int); | |||
326 | } else | |||
327 | lst[end ++] = 0; | |||
328 | ||||
329 | return end + 2; | |||
330 | } | |||
331 | ||||
332 | static int sdp_svc_attr_match(struct bt_l2cap_sdp_state_s *sdp, | |||
333 | const uint8_t **req, ssize_t *len) | |||
334 | { | |||
335 | int i, j, start, end; | |||
336 | struct sdp_service_record_s *record; | |||
337 | ||||
338 | if (**req == (SDP_DTYPE_UINT | SDP_DSIZE_2)) { | |||
339 | (*req) ++; | |||
340 | if (*len < 3) | |||
341 | return 1; | |||
342 | ||||
343 | start = (*(*req) ++) << 8; | |||
344 | start |= *(*req) ++; | |||
345 | end = start; | |||
346 | *len -= 3; | |||
347 | } else if (**req == (SDP_DTYPE_UINT | SDP_DSIZE_4)) { | |||
348 | (*req) ++; | |||
349 | if (*len < 5) | |||
350 | return 1; | |||
351 | ||||
352 | start = (*(*req) ++) << 8; | |||
353 | start |= *(*req) ++; | |||
354 | end = (*(*req) ++) << 8; | |||
355 | end |= *(*req) ++; | |||
356 | *len -= 5; | |||
357 | } else | |||
358 | return 1; | |||
359 | ||||
360 | for (i = 0; i < sdp->services; i ++) | |||
361 | if ((record = &sdp->service_list[i])->match) | |||
362 | for (j = 0; j < record->attributes; j ++) | |||
363 | if (record->attribute_list[j].attribute_id >= start && | |||
364 | record->attribute_list[j].attribute_id <= end) | |||
365 | record->attribute_list[j].match = 1; | |||
366 | ||||
367 | return 0; | |||
368 | } | |||
369 | ||||
370 | static ssize_t sdp_svc_search_attr_get(struct bt_l2cap_sdp_state_s *sdp, | |||
371 | uint8_t *rsp, const uint8_t *req, ssize_t len) | |||
372 | { | |||
373 | ssize_t seqlen; | |||
374 | int i, j, start, end, max; | |||
375 | struct sdp_service_record_s *record; | |||
376 | uint8_t *lst; | |||
377 | ||||
378 | /* Perform the search */ | |||
379 | for (i = 0; i < sdp->services; i ++) { | |||
380 | sdp->service_list[i].match = 0; | |||
381 | for (j = 0; j < sdp->service_list[i].attributes; j ++) | |||
382 | sdp->service_list[i].attribute_list[j].match = 0; | |||
383 | } | |||
384 | ||||
385 | if (len < 1) | |||
386 | return -SDP_INVALID_SYNTAX; | |||
387 | if ((*req & ~SDP_DSIZE_MASK) == SDP_DTYPE_SEQ) { | |||
388 | seqlen = sdp_datalen(&req, &len); | |||
389 | if (seqlen < 3 || len < seqlen) | |||
390 | return -SDP_INVALID_SYNTAX; | |||
391 | len -= seqlen; | |||
392 | ||||
393 | while (seqlen) | |||
394 | if (sdp_svc_match(sdp, &req, &seqlen)) | |||
395 | return -SDP_INVALID_SYNTAX; | |||
396 | } else if (sdp_svc_match(sdp, &req, &seqlen)) | |||
397 | return -SDP_INVALID_SYNTAX; | |||
398 | ||||
399 | if (len < 3) | |||
400 | return -SDP_INVALID_SYNTAX; | |||
401 | max = (req[0] << 8) | req[1]; | |||
402 | req += 2; | |||
403 | len -= 2; | |||
404 | if (max < 0x0007) | |||
405 | return -SDP_INVALID_SYNTAX; | |||
406 | ||||
407 | if ((*req & ~SDP_DSIZE_MASK) == SDP_DTYPE_SEQ) { | |||
408 | seqlen = sdp_datalen(&req, &len); | |||
409 | if (seqlen < 3 || len < seqlen) | |||
410 | return -SDP_INVALID_SYNTAX; | |||
411 | len -= seqlen; | |||
412 | ||||
413 | while (seqlen) | |||
414 | if (sdp_svc_attr_match(sdp, &req, &seqlen)) | |||
415 | return -SDP_INVALID_SYNTAX; | |||
416 | } else if (sdp_svc_attr_match(sdp, &req, &seqlen)) | |||
417 | return -SDP_INVALID_SYNTAX; | |||
418 | ||||
419 | if (len < 1) | |||
420 | return -SDP_INVALID_SYNTAX; | |||
421 | ||||
422 | if (*req) { | |||
423 | if (len <= sizeof(int)) | |||
424 | return -SDP_INVALID_SYNTAX; | |||
425 | len -= sizeof(int); | |||
426 | memcpy(&start, req + 1, sizeof(int)); | |||
427 | } else | |||
428 | start = 0; | |||
429 | ||||
430 | if (len > 1) | |||
431 | return -SDP_INVALID_SYNTAX; | |||
432 | ||||
433 | /* Output the results */ | |||
434 | /* This assumes empty attribute lists are never to be returned even | |||
435 | * for matching Service Records. In practice this shouldn't happen | |||
436 | * as the requestor will usually include the always present | |||
437 | * ServiceRecordHandle AttributeID in AttributeIDList. */ | |||
438 | lst = rsp + 2; | |||
439 | max = MIN(max, MAX_RSP_PARAM_SIZE)(((max) < ((96 - 5 - (1 + sizeof(int))))) ? (max) : ((96 - 5 - (1 + sizeof(int))))); | |||
440 | len = 3 - start; | |||
441 | end = 0; | |||
442 | for (i = 0; i < sdp->services; i ++) | |||
443 | if ((record = &sdp->service_list[i])->match) { | |||
444 | len += 3; | |||
445 | seqlen = len; | |||
446 | for (j = 0; j < record->attributes; j ++) | |||
447 | if (record->attribute_list[j].match) { | |||
448 | if (len >= 0) | |||
449 | if (len + record->attribute_list[j].len < max) { | |||
450 | memcpy(lst + len, record->attribute_list[j].pair, | |||
451 | record->attribute_list[j].len); | |||
452 | end = len + record->attribute_list[j].len; | |||
453 | } | |||
454 | len += record->attribute_list[j].len; | |||
455 | } | |||
456 | if (seqlen == len) | |||
457 | len -= 3; | |||
458 | else if (seqlen >= 3 && seqlen < max) { | |||
459 | lst[seqlen - 3] = SDP_DTYPE_SEQ | SDP_DSIZE_NEXT2; | |||
460 | lst[seqlen - 2] = (len - seqlen) >> 8; | |||
461 | lst[seqlen - 1] = (len - seqlen) & 0xff; | |||
462 | } | |||
463 | } | |||
464 | if (len == 3 - start) | |||
465 | len -= 3; | |||
466 | else if (0 >= start) { | |||
467 | lst[0] = SDP_DTYPE_SEQ | SDP_DSIZE_NEXT2; | |||
468 | lst[1] = (len + start - 3) >> 8; | |||
469 | lst[2] = (len + start - 3) & 0xff; | |||
470 | } | |||
471 | ||||
472 | rsp[0] = end >> 8; | |||
473 | rsp[1] = end & 0xff; | |||
474 | ||||
475 | if (end < len) { | |||
476 | len = end + start; | |||
477 | lst[end ++] = sizeof(int); | |||
478 | memcpy(lst + end, &len, sizeof(int)); | |||
479 | end += sizeof(int); | |||
480 | } else | |||
481 | lst[end ++] = 0; | |||
482 | ||||
483 | return end + 2; | |||
484 | } | |||
485 | ||||
486 | static void bt_l2cap_sdp_sdu_in(void *opaque, const uint8_t *data, int len) | |||
487 | { | |||
488 | struct bt_l2cap_sdp_state_s *sdp = opaque; | |||
489 | enum bt_sdp_cmd pdu_id; | |||
490 | uint8_t rsp[MAX_PDU_OUT_SIZE96 - PDU_HEADER_SIZE5], *sdu_out; | |||
491 | int transaction_id, plen; | |||
492 | int err = 0; | |||
493 | int rsp_len = 0; | |||
494 | ||||
495 | if (len < 5) { | |||
| ||||
496 | fprintf(stderrstderr, "%s: short SDP PDU (%iB).\n", __FUNCTION__, len); | |||
497 | return; | |||
498 | } | |||
499 | ||||
500 | pdu_id = *data ++; | |||
501 | transaction_id = (data[0] << 8) | data[1]; | |||
502 | plen = (data[2] << 8) | data[3]; | |||
503 | data += 4; | |||
504 | len -= 5; | |||
505 | ||||
506 | if (len != plen) { | |||
507 | fprintf(stderrstderr, "%s: wrong SDP PDU length (%iB != %iB).\n", | |||
508 | __FUNCTION__, plen, len); | |||
509 | err = SDP_INVALID_PDU_SIZE; | |||
510 | goto respond; | |||
511 | } | |||
512 | ||||
513 | switch (pdu_id) { | |||
514 | case SDP_SVC_SEARCH_REQ: | |||
515 | rsp_len = sdp_svc_search(sdp, rsp, data, len); | |||
516 | pdu_id = SDP_SVC_SEARCH_RSP; | |||
517 | break; | |||
518 | ||||
519 | case SDP_SVC_ATTR_REQ: | |||
520 | rsp_len = sdp_attr_get(sdp, rsp, data, len); | |||
521 | pdu_id = SDP_SVC_ATTR_RSP; | |||
522 | break; | |||
523 | ||||
524 | case SDP_SVC_SEARCH_ATTR_REQ: | |||
525 | rsp_len = sdp_svc_search_attr_get(sdp, rsp, data, len); | |||
526 | pdu_id = SDP_SVC_SEARCH_ATTR_RSP; | |||
527 | break; | |||
528 | ||||
529 | case SDP_ERROR_RSP: | |||
530 | case SDP_SVC_ATTR_RSP: | |||
531 | case SDP_SVC_SEARCH_RSP: | |||
532 | case SDP_SVC_SEARCH_ATTR_RSP: | |||
533 | default: | |||
534 | fprintf(stderrstderr, "%s: unexpected SDP PDU ID %02x.\n", | |||
535 | __FUNCTION__, pdu_id); | |||
536 | err = SDP_INVALID_SYNTAX; | |||
537 | break; | |||
538 | } | |||
539 | ||||
540 | if (rsp_len < 0) { | |||
541 | err = -rsp_len; | |||
542 | rsp_len = 0; | |||
543 | } | |||
544 | ||||
545 | respond: | |||
546 | if (err) { | |||
547 | pdu_id = SDP_ERROR_RSP; | |||
548 | rsp[rsp_len ++] = err >> 8; | |||
549 | rsp[rsp_len ++] = err & 0xff; | |||
550 | } | |||
551 | ||||
552 | sdu_out = sdp->channel->sdu_out(sdp->channel, rsp_len + PDU_HEADER_SIZE5); | |||
553 | ||||
554 | sdu_out[0] = pdu_id; | |||
555 | sdu_out[1] = transaction_id >> 8; | |||
556 | sdu_out[2] = transaction_id & 0xff; | |||
557 | sdu_out[3] = rsp_len >> 8; | |||
558 | sdu_out[4] = rsp_len & 0xff; | |||
559 | memcpy(sdu_out + PDU_HEADER_SIZE5, rsp, rsp_len); | |||
560 | ||||
561 | sdp->channel->sdu_submit(sdp->channel); | |||
562 | } | |||
563 | ||||
564 | static void bt_l2cap_sdp_close_ch(void *opaque) | |||
565 | { | |||
566 | struct bt_l2cap_sdp_state_s *sdp = opaque; | |||
567 | int i; | |||
568 | ||||
569 | for (i = 0; i < sdp->services; i ++) { | |||
570 | g_free(sdp->service_list[i].attribute_list->pair); | |||
571 | g_free(sdp->service_list[i].attribute_list); | |||
572 | g_free(sdp->service_list[i].uuid); | |||
573 | } | |||
574 | g_free(sdp->service_list); | |||
575 | g_free(sdp); | |||
576 | } | |||
577 | ||||
578 | struct sdp_def_service_s { | |||
579 | uint16_t class_uuid; | |||
580 | struct sdp_def_attribute_s { | |||
581 | uint16_t id; | |||
582 | struct sdp_def_data_element_s { | |||
583 | uint8_t type; | |||
584 | union { | |||
585 | uint32_t uint; | |||
586 | const char *str; | |||
587 | struct sdp_def_data_element_s *list; | |||
588 | } value; | |||
589 | } data; | |||
590 | } attributes[]; | |||
591 | }; | |||
592 | ||||
593 | /* Calculate a safe byte count to allocate that will store the given | |||
594 | * element, at the same time count elements of a UUID type. */ | |||
595 | static int sdp_attr_max_size(struct sdp_def_data_element_s *element, | |||
596 | int *uuids) | |||
597 | { | |||
598 | int type = element->type & ~SDP_DSIZE_MASK; | |||
599 | int len; | |||
600 | ||||
601 | if (type == SDP_DTYPE_UINT || type == SDP_DTYPE_UUID || | |||
602 | type == SDP_DTYPE_BOOL) { | |||
603 | if (type == SDP_DTYPE_UUID) | |||
604 | (*uuids) ++; | |||
605 | return 1 + (1 << (element->type & SDP_DSIZE_MASK)); | |||
606 | } | |||
607 | ||||
608 | if (type == SDP_DTYPE_STRING || type == SDP_DTYPE_URL) { | |||
609 | if (element->type & SDP_DSIZE_MASK) { | |||
610 | for (len = 0; element->value.str[len] | | |||
611 | element->value.str[len + 1]; len ++); | |||
612 | return len; | |||
613 | } else | |||
614 | return 2 + strlen(element->value.str); | |||
615 | } | |||
616 | ||||
617 | if (type != SDP_DTYPE_SEQ) | |||
618 | exit(-1); | |||
619 | len = 2; | |||
620 | element = element->value.list; | |||
621 | while (element->type) | |||
622 | len += sdp_attr_max_size(element ++, uuids); | |||
623 | if (len > 255) | |||
624 | exit (-1); | |||
625 | ||||
626 | return len; | |||
627 | } | |||
628 | ||||
629 | static int sdp_attr_write(uint8_t *data, | |||
630 | struct sdp_def_data_element_s *element, int **uuid) | |||
631 | { | |||
632 | int type = element->type & ~SDP_DSIZE_MASK; | |||
633 | int len = 0; | |||
634 | ||||
635 | if (type == SDP_DTYPE_UINT || type == SDP_DTYPE_BOOL) { | |||
636 | data[len ++] = element->type; | |||
637 | if ((element->type & SDP_DSIZE_MASK) == SDP_DSIZE_1) | |||
638 | data[len ++] = (element->value.uint >> 0) & 0xff; | |||
639 | else if ((element->type & SDP_DSIZE_MASK) == SDP_DSIZE_2) { | |||
640 | data[len ++] = (element->value.uint >> 8) & 0xff; | |||
641 | data[len ++] = (element->value.uint >> 0) & 0xff; | |||
642 | } else if ((element->type & SDP_DSIZE_MASK) == SDP_DSIZE_4) { | |||
643 | data[len ++] = (element->value.uint >> 24) & 0xff; | |||
644 | data[len ++] = (element->value.uint >> 16) & 0xff; | |||
645 | data[len ++] = (element->value.uint >> 8) & 0xff; | |||
646 | data[len ++] = (element->value.uint >> 0) & 0xff; | |||
647 | } | |||
648 | ||||
649 | return len; | |||
650 | } | |||
651 | ||||
652 | if (type == SDP_DTYPE_UUID) { | |||
653 | *(*uuid) ++ = element->value.uint; | |||
654 | ||||
655 | data[len ++] = element->type; | |||
656 | data[len ++] = (element->value.uint >> 24) & 0xff; | |||
657 | data[len ++] = (element->value.uint >> 16) & 0xff; | |||
658 | data[len ++] = (element->value.uint >> 8) & 0xff; | |||
659 | data[len ++] = (element->value.uint >> 0) & 0xff; | |||
660 | memcpy(data + len, bt_base_uuid, 12); | |||
661 | ||||
662 | return len + 12; | |||
663 | } | |||
664 | ||||
665 | data[0] = type | SDP_DSIZE_NEXT1; | |||
666 | if (type == SDP_DTYPE_STRING || type == SDP_DTYPE_URL) { | |||
667 | if (element->type & SDP_DSIZE_MASK) | |||
668 | for (len = 0; element->value.str[len] | | |||
669 | element->value.str[len + 1]; len ++); | |||
670 | else | |||
671 | len = strlen(element->value.str); | |||
672 | memcpy(data + 2, element->value.str, data[1] = len); | |||
673 | ||||
674 | return len + 2; | |||
675 | } | |||
676 | ||||
677 | len = 2; | |||
678 | element = element->value.list; | |||
679 | while (element->type) | |||
680 | len += sdp_attr_write(data + len, element ++, uuid); | |||
681 | data[1] = len - 2; | |||
682 | ||||
683 | return len; | |||
684 | } | |||
685 | ||||
686 | static int sdp_attributeid_compare(const struct sdp_service_attribute_s *a, | |||
687 | const struct sdp_service_attribute_s *b) | |||
688 | { | |||
689 | return (int) b->attribute_id - a->attribute_id; | |||
690 | } | |||
691 | ||||
692 | static int sdp_uuid_compare(const int *a, const int *b) | |||
693 | { | |||
694 | return *a - *b; | |||
695 | } | |||
696 | ||||
697 | static void sdp_service_record_build(struct sdp_service_record_s *record, | |||
698 | struct sdp_def_service_s *def, int handle) | |||
699 | { | |||
700 | int len = 0; | |||
701 | uint8_t *data; | |||
702 | int *uuid; | |||
703 | ||||
704 | record->uuids = 0; | |||
705 | while (def->attributes[record->attributes].data.type) { | |||
706 | len += 3; | |||
707 | len += sdp_attr_max_size(&def->attributes[record->attributes ++].data, | |||
708 | &record->uuids); | |||
709 | } | |||
710 | record->uuids = 1 << ffs(record->uuids - 1); | |||
711 | record->attribute_list = | |||
712 | g_malloc0(record->attributes * sizeof(*record->attribute_list)); | |||
713 | record->uuid = | |||
714 | g_malloc0(record->uuids * sizeof(*record->uuid)); | |||
715 | data = g_malloc(len); | |||
716 | ||||
717 | record->attributes = 0; | |||
718 | uuid = record->uuid; | |||
719 | while (def->attributes[record->attributes].data.type) { | |||
720 | record->attribute_list[record->attributes].pair = data; | |||
721 | ||||
722 | len = 0; | |||
723 | data[len ++] = SDP_DTYPE_UINT | SDP_DSIZE_2; | |||
724 | data[len ++] = def->attributes[record->attributes].id >> 8; | |||
725 | data[len ++] = def->attributes[record->attributes].id & 0xff; | |||
726 | len += sdp_attr_write(data + len, | |||
727 | &def->attributes[record->attributes].data, &uuid); | |||
728 | ||||
729 | /* Special case: assign a ServiceRecordHandle in sequence */ | |||
730 | if (def->attributes[record->attributes].id == SDP_ATTR_RECORD_HANDLE) | |||
731 | def->attributes[record->attributes].data.value.uint = handle; | |||
732 | /* Note: we could also assign a ServiceDescription based on | |||
733 | * sdp->device.device->lmp_name. */ | |||
734 | ||||
735 | record->attribute_list[record->attributes ++].len = len; | |||
736 | data += len; | |||
737 | } | |||
738 | ||||
739 | /* Sort the attribute list by the AttributeID */ | |||
740 | qsort(record->attribute_list, record->attributes, | |||
741 | sizeof(*record->attribute_list), | |||
742 | (void *) sdp_attributeid_compare); | |||
743 | /* Sort the searchable UUIDs list for bisection */ | |||
744 | qsort(record->uuid, record->uuids, | |||
745 | sizeof(*record->uuid), | |||
746 | (void *) sdp_uuid_compare); | |||
747 | } | |||
748 | ||||
749 | static void sdp_service_db_build(struct bt_l2cap_sdp_state_s *sdp, | |||
750 | struct sdp_def_service_s **service) | |||
751 | { | |||
752 | sdp->services = 0; | |||
753 | while (service[sdp->services]) | |||
754 | sdp->services ++; | |||
755 | sdp->service_list = | |||
756 | g_malloc0(sdp->services * sizeof(*sdp->service_list)); | |||
757 | ||||
758 | sdp->services = 0; | |||
759 | while (*service) { | |||
760 | sdp_service_record_build(&sdp->service_list[sdp->services], | |||
761 | *service, sdp->services); | |||
762 | service ++; | |||
763 | sdp->services ++; | |||
764 | } | |||
765 | } | |||
766 | ||||
767 | #define LAST{ .type = 0 } { .type = 0 } | |||
768 | #define SERVICE(name, attrs)static struct sdp_def_service_s sdp_service_name_s = { .attributes = { attrs { .data = { .type = 0 } } }, }; \ | |||
769 | static struct sdp_def_service_s glue(glue(sdp_service_, name), _s)sdp_service_name_s = { \ | |||
770 | .attributes = { attrs { .data = LAST{ .type = 0 } } }, \ | |||
771 | }; | |||
772 | #define ATTRIBUTE(attrid, val){ .id = SDP_ATTR_attrid, .data = val }, { .id = glue(SDP_ATTR_, attrid)SDP_ATTR_attrid, .data = val }, | |||
773 | #define UINT8(val){ .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = val, }, { \ | |||
774 | .type = SDP_DTYPE_UINT | SDP_DSIZE_1, \ | |||
775 | .value.uint = val, \ | |||
776 | }, | |||
777 | #define UINT16(val){ .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = val, }, { \ | |||
778 | .type = SDP_DTYPE_UINT | SDP_DSIZE_2, \ | |||
779 | .value.uint = val, \ | |||
780 | }, | |||
781 | #define UINT32(val){ .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = val, }, { \ | |||
782 | .type = SDP_DTYPE_UINT | SDP_DSIZE_4, \ | |||
783 | .value.uint = val, \ | |||
784 | }, | |||
785 | #define UUID128(val){ .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = val, } , { \ | |||
786 | .type = SDP_DTYPE_UUID | SDP_DSIZE_16, \ | |||
787 | .value.uint = val, \ | |||
788 | }, | |||
789 | #define SDP_TRUE{ .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, { \ | |||
790 | .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, \ | |||
791 | .value.uint = 1, \ | |||
792 | }, | |||
793 | #define SDP_FALSE{ .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, { \ | |||
794 | .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, \ | |||
795 | .value.uint = 0, \ | |||
796 | }, | |||
797 | #define STRING(val){ .type = SDP_DTYPE_STRING, .value.str = val, }, { \ | |||
798 | .type = SDP_DTYPE_STRING, \ | |||
799 | .value.str = val, \ | |||
800 | }, | |||
801 | #define ARRAY(...){ .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = (char [ ]) { ..., 0, 0 }, }, { \ | |||
802 | .type = SDP_DTYPE_STRING | SDP_DSIZE_2, \ | |||
803 | .value.str = (char []) { __VA_ARGS__, 0, 0 }, \ | |||
804 | }, | |||
805 | #define URL(val){ .type = SDP_DTYPE_URL, .value.str = val, }, { \ | |||
806 | .type = SDP_DTYPE_URL, \ | |||
807 | .value.str = val, \ | |||
808 | }, | |||
809 | #if 1 | |||
810 | #define LIST(val){ .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { val { .type = 0 } }, }, { \ | |||
811 | .type = SDP_DTYPE_SEQ, \ | |||
812 | .value.list = (struct sdp_def_data_element_s []) { val LAST{ .type = 0 } }, \ | |||
813 | }, | |||
814 | #endif | |||
815 | ||||
816 | /* Try to keep each single attribute below MAX_PDU_OUT_SIZE bytes | |||
817 | * in resulting SDP data representation size. */ | |||
818 | ||||
819 | SERVICE(hid,static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
820 | ATTRIBUTE(RECORD_HANDLE, UINT32(0)) /* Filled in later */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
821 | ATTRIBUTE(SVCLASS_ID_LIST, LIST(UUID128(HID_SVCLASS_ID)))static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
822 | ATTRIBUTE(RECORD_STATE, UINT32(1))static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
823 | ATTRIBUTE(PROTO_DESC_LIST, LIST(static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
824 | LIST(UUID128(L2CAP_UUID) UINT16(BT_PSM_HID_CTRL))static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
825 | LIST(UUID128(HIDP_UUID))static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
826 | ))static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
827 | ATTRIBUTE(BROWSE_GRP_LIST, LIST(UUID128(0x1002)))static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
828 | ATTRIBUTE(LANG_BASE_ATTR_ID_LIST, LIST(static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
829 | UINT16(0x656e) UINT16(0x006a) UINT16(0x0100)static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
830 | ))static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
831 | ATTRIBUTE(PFILE_DESC_LIST, LIST(static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
832 | LIST(UUID128(HID_PROFILE_ID) UINT16(0x0100))static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
833 | ))static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
834 | ATTRIBUTE(DOC_URL, URL("http://bellard.org/qemu/user-doc.html"))static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
835 | ATTRIBUTE(SVCNAME_PRIMARY, STRING("QEMU Bluetooth HID"))static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
836 | ATTRIBUTE(SVCDESC_PRIMARY, STRING("QEMU Keyboard/Mouse"))static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
837 | ATTRIBUTE(SVCPROV_PRIMARY, STRING("QEMU"))static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
838 | ||||
839 | /* Profile specific */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
840 | ATTRIBUTE(DEVICE_RELEASE_NUMBER, UINT16(0x0091)) /* Deprecated, remove */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
841 | ATTRIBUTE(PARSER_VERSION, UINT16(0x0111))static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
842 | /* TODO: extract from l2cap_device->device.class[0] */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
843 | ATTRIBUTE(DEVICE_SUBCLASS, UINT8(0x40))static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
844 | ATTRIBUTE(COUNTRY_CODE, UINT8(0x15))static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
845 | ATTRIBUTE(VIRTUAL_CABLE, SDP_TRUE)static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
846 | ATTRIBUTE(RECONNECT_INITIATE, SDP_FALSE)static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
847 | /* TODO: extract from hid->usbdev->report_desc */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
848 | ATTRIBUTE(DESCRIPTOR_LIST, LIST(static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
849 | LIST(UINT8(0x22) ARRAY(static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
850 | 0x05, 0x01, /* Usage Page (Generic Desktop) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
851 | 0x09, 0x06, /* Usage (Keyboard) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
852 | 0xa1, 0x01, /* Collection (Application) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
853 | 0x75, 0x01, /* Report Size (1) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
854 | 0x95, 0x08, /* Report Count (8) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
855 | 0x05, 0x07, /* Usage Page (Key Codes) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
856 | 0x19, 0xe0, /* Usage Minimum (224) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
857 | 0x29, 0xe7, /* Usage Maximum (231) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
858 | 0x15, 0x00, /* Logical Minimum (0) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
859 | 0x25, 0x01, /* Logical Maximum (1) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
860 | 0x81, 0x02, /* Input (Data, Variable, Absolute) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
861 | 0x95, 0x01, /* Report Count (1) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
862 | 0x75, 0x08, /* Report Size (8) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
863 | 0x81, 0x01, /* Input (Constant) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
864 | 0x95, 0x05, /* Report Count (5) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
865 | 0x75, 0x01, /* Report Size (1) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
866 | 0x05, 0x08, /* Usage Page (LEDs) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
867 | 0x19, 0x01, /* Usage Minimum (1) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
868 | 0x29, 0x05, /* Usage Maximum (5) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
869 | 0x91, 0x02, /* Output (Data, Variable, Absolute) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
870 | 0x95, 0x01, /* Report Count (1) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
871 | 0x75, 0x03, /* Report Size (3) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
872 | 0x91, 0x01, /* Output (Constant) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
873 | 0x95, 0x06, /* Report Count (6) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
874 | 0x75, 0x08, /* Report Size (8) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
875 | 0x15, 0x00, /* Logical Minimum (0) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
876 | 0x25, 0xff, /* Logical Maximum (255) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
877 | 0x05, 0x07, /* Usage Page (Key Codes) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
878 | 0x19, 0x00, /* Usage Minimum (0) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
879 | 0x29, 0xff, /* Usage Maximum (255) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
880 | 0x81, 0x00, /* Input (Data, Array) */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
881 | 0xc0 /* End Collection */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
882 | ))))static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
883 | ATTRIBUTE(LANG_ID_BASE_LIST, LIST(static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
884 | LIST(UINT16(0x0409) UINT16(0x0100))static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
885 | ))static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
886 | ATTRIBUTE(SDP_DISABLE, SDP_FALSE)static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
887 | ATTRIBUTE(BATTERY_POWER, SDP_TRUE)static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
888 | ATTRIBUTE(REMOTE_WAKEUP, SDP_TRUE)static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
889 | ATTRIBUTE(BOOT_DEVICE, SDP_TRUE) /* XXX: untested */static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
890 | ATTRIBUTE(SUPERVISION_TIMEOUT, UINT16(0x0c80))static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
891 | ATTRIBUTE(NORMALLY_CONNECTABLE, SDP_TRUE)static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
892 | ATTRIBUTE(PROFILE_VERSION, UINT16(0x0100))static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
893 | )static struct sdp_def_service_s sdp_service_hid_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_HID_CTRL, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HIDP_UUID, }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = HID_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, . value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCNAME_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU Bluetooth HID", }, }, { .id = SDP_ATTR_SVCDESC_PRIMARY , .data = { .type = SDP_DTYPE_STRING, .value.str = "QEMU Keyboard/Mouse" , }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_DEVICE_RELEASE_NUMBER , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0091, }, }, { .id = SDP_ATTR_PARSER_VERSION, .data = { . type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0111, }, }, { .id = SDP_ATTR_DEVICE_SUBCLASS, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x40, }, }, { .id = SDP_ATTR_COUNTRY_CODE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x15, }, }, { .id = SDP_ATTR_VIRTUAL_CABLE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_RECONNECT_INITIATE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_DESCRIPTOR_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_1, .value.uint = 0x22 , }, { .type = SDP_DTYPE_STRING | SDP_DSIZE_2, .value.str = ( char []) { 0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x75, 0x01, 0x95 , 0x08, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15, 0x00, 0x25, 0x01, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08, 0x81, 0x01, 0x95, 0x05 , 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x05, 0x91, 0x02, 0x95, 0x01, 0x75, 0x03, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15 , 0x00, 0x25, 0xff, 0x05, 0x07, 0x19, 0x00, 0x29, 0xff, 0x81, 0x00, 0xc0, 0, 0 }, }, { .type = 0 } }, }, { .type = 0 } }, } , }, { .id = SDP_ATTR_LANG_ID_BASE_LIST, .data = { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s [ ]) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0409 , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SDP_DISABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 0, }, }, { .id = SDP_ATTR_BATTERY_POWER, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_REMOTE_WAKEUP, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1 , .value.uint = 1, }, }, { .id = SDP_ATTR_BOOT_DEVICE, .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, } , { .id = SDP_ATTR_SUPERVISION_TIMEOUT, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0c80, }, }, { .id = SDP_ATTR_NORMALLY_CONNECTABLE , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .id = SDP_ATTR_PROFILE_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .data = { .type = 0 } } }, }; | |||
894 | ||||
895 | SERVICE(sdp,static struct sdp_def_service_s sdp_service_sdp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_VERSION_NUM_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SVCDB_STATE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, } , }, { .data = { .type = 0 } } }, }; | |||
896 | ATTRIBUTE(RECORD_HANDLE, UINT32(0)) /* Filled in later */static struct sdp_def_service_s sdp_service_sdp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_VERSION_NUM_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SVCDB_STATE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, } , }, { .data = { .type = 0 } } }, }; | |||
897 | ATTRIBUTE(SVCLASS_ID_LIST, LIST(UUID128(SDP_SERVER_SVCLASS_ID)))static struct sdp_def_service_s sdp_service_sdp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_VERSION_NUM_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SVCDB_STATE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, } , }, { .data = { .type = 0 } } }, }; | |||
898 | ATTRIBUTE(RECORD_STATE, UINT32(1))static struct sdp_def_service_s sdp_service_sdp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_VERSION_NUM_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SVCDB_STATE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, } , }, { .data = { .type = 0 } } }, }; | |||
899 | ATTRIBUTE(PROTO_DESC_LIST, LIST(static struct sdp_def_service_s sdp_service_sdp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_VERSION_NUM_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SVCDB_STATE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, } , }, { .data = { .type = 0 } } }, }; | |||
900 | LIST(UUID128(L2CAP_UUID) UINT16(BT_PSM_SDP))static struct sdp_def_service_s sdp_service_sdp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_VERSION_NUM_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SVCDB_STATE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, } , }, { .data = { .type = 0 } } }, }; | |||
901 | LIST(UUID128(SDP_UUID))static struct sdp_def_service_s sdp_service_sdp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_VERSION_NUM_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SVCDB_STATE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, } , }, { .data = { .type = 0 } } }, }; | |||
902 | ))static struct sdp_def_service_s sdp_service_sdp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_VERSION_NUM_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SVCDB_STATE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, } , }, { .data = { .type = 0 } } }, }; | |||
903 | ATTRIBUTE(BROWSE_GRP_LIST, LIST(UUID128(0x1002)))static struct sdp_def_service_s sdp_service_sdp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_VERSION_NUM_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SVCDB_STATE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, } , }, { .data = { .type = 0 } } }, }; | |||
904 | ATTRIBUTE(LANG_BASE_ATTR_ID_LIST, LIST(static struct sdp_def_service_s sdp_service_sdp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_VERSION_NUM_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SVCDB_STATE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, } , }, { .data = { .type = 0 } } }, }; | |||
905 | UINT16(0x656e) UINT16(0x006a) UINT16(0x0100)static struct sdp_def_service_s sdp_service_sdp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_VERSION_NUM_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SVCDB_STATE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, } , }, { .data = { .type = 0 } } }, }; | |||
906 | ))static struct sdp_def_service_s sdp_service_sdp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_VERSION_NUM_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SVCDB_STATE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, } , }, { .data = { .type = 0 } } }, }; | |||
907 | ATTRIBUTE(PFILE_DESC_LIST, LIST(static struct sdp_def_service_s sdp_service_sdp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_VERSION_NUM_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SVCDB_STATE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, } , }, { .data = { .type = 0 } } }, }; | |||
908 | LIST(UUID128(SDP_SERVER_PROFILE_ID) UINT16(0x0100))static struct sdp_def_service_s sdp_service_sdp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_VERSION_NUM_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SVCDB_STATE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, } , }, { .data = { .type = 0 } } }, }; | |||
909 | ))static struct sdp_def_service_s sdp_service_sdp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_VERSION_NUM_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SVCDB_STATE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, } , }, { .data = { .type = 0 } } }, }; | |||
910 | ATTRIBUTE(DOC_URL, URL("http://bellard.org/qemu/user-doc.html"))static struct sdp_def_service_s sdp_service_sdp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_VERSION_NUM_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SVCDB_STATE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, } , }, { .data = { .type = 0 } } }, }; | |||
911 | ATTRIBUTE(SVCPROV_PRIMARY, STRING("QEMU"))static struct sdp_def_service_s sdp_service_sdp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_VERSION_NUM_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SVCDB_STATE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, } , }, { .data = { .type = 0 } } }, }; | |||
912 | ||||
913 | /* Profile specific */static struct sdp_def_service_s sdp_service_sdp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_VERSION_NUM_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SVCDB_STATE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, } , }, { .data = { .type = 0 } } }, }; | |||
914 | ATTRIBUTE(VERSION_NUM_LIST, LIST(UINT16(0x0100)))static struct sdp_def_service_s sdp_service_sdp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_VERSION_NUM_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SVCDB_STATE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, } , }, { .data = { .type = 0 } } }, }; | |||
915 | ATTRIBUTE(SVCDB_STATE , UINT32(1))static struct sdp_def_service_s sdp_service_sdp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_VERSION_NUM_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SVCDB_STATE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, } , }, { .data = { .type = 0 } } }, }; | |||
916 | )static struct sdp_def_service_s sdp_service_sdp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_SERVER_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_VERSION_NUM_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_SVCDB_STATE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, } , }, { .data = { .type = 0 } } }, }; | |||
917 | ||||
918 | SERVICE(pnp,static struct sdp_def_service_s sdp_service_pnp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_SPECIFICATION_ID , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_PRIMARY_RECORD , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .data = { .type = 0 } } }, }; | |||
919 | ATTRIBUTE(RECORD_HANDLE, UINT32(0)) /* Filled in later */static struct sdp_def_service_s sdp_service_pnp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_SPECIFICATION_ID , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_PRIMARY_RECORD , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .data = { .type = 0 } } }, }; | |||
920 | ATTRIBUTE(SVCLASS_ID_LIST, LIST(UUID128(PNP_INFO_SVCLASS_ID)))static struct sdp_def_service_s sdp_service_pnp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_SPECIFICATION_ID , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_PRIMARY_RECORD , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .data = { .type = 0 } } }, }; | |||
921 | ATTRIBUTE(RECORD_STATE, UINT32(1))static struct sdp_def_service_s sdp_service_pnp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_SPECIFICATION_ID , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_PRIMARY_RECORD , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .data = { .type = 0 } } }, }; | |||
922 | ATTRIBUTE(PROTO_DESC_LIST, LIST(static struct sdp_def_service_s sdp_service_pnp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_SPECIFICATION_ID , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_PRIMARY_RECORD , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .data = { .type = 0 } } }, }; | |||
923 | LIST(UUID128(L2CAP_UUID) UINT16(BT_PSM_SDP))static struct sdp_def_service_s sdp_service_pnp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_SPECIFICATION_ID , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_PRIMARY_RECORD , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .data = { .type = 0 } } }, }; | |||
924 | LIST(UUID128(SDP_UUID))static struct sdp_def_service_s sdp_service_pnp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_SPECIFICATION_ID , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_PRIMARY_RECORD , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .data = { .type = 0 } } }, }; | |||
925 | ))static struct sdp_def_service_s sdp_service_pnp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_SPECIFICATION_ID , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_PRIMARY_RECORD , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .data = { .type = 0 } } }, }; | |||
926 | ATTRIBUTE(BROWSE_GRP_LIST, LIST(UUID128(0x1002)))static struct sdp_def_service_s sdp_service_pnp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_SPECIFICATION_ID , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_PRIMARY_RECORD , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .data = { .type = 0 } } }, }; | |||
927 | ATTRIBUTE(LANG_BASE_ATTR_ID_LIST, LIST(static struct sdp_def_service_s sdp_service_pnp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_SPECIFICATION_ID , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_PRIMARY_RECORD , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .data = { .type = 0 } } }, }; | |||
928 | UINT16(0x656e) UINT16(0x006a) UINT16(0x0100)static struct sdp_def_service_s sdp_service_pnp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_SPECIFICATION_ID , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_PRIMARY_RECORD , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .data = { .type = 0 } } }, }; | |||
929 | ))static struct sdp_def_service_s sdp_service_pnp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_SPECIFICATION_ID , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_PRIMARY_RECORD , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .data = { .type = 0 } } }, }; | |||
930 | ATTRIBUTE(PFILE_DESC_LIST, LIST(static struct sdp_def_service_s sdp_service_pnp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_SPECIFICATION_ID , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_PRIMARY_RECORD , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .data = { .type = 0 } } }, }; | |||
931 | LIST(UUID128(PNP_INFO_PROFILE_ID) UINT16(0x0100))static struct sdp_def_service_s sdp_service_pnp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_SPECIFICATION_ID , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_PRIMARY_RECORD , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .data = { .type = 0 } } }, }; | |||
932 | ))static struct sdp_def_service_s sdp_service_pnp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_SPECIFICATION_ID , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_PRIMARY_RECORD , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .data = { .type = 0 } } }, }; | |||
933 | ATTRIBUTE(DOC_URL, URL("http://bellard.org/qemu/user-doc.html"))static struct sdp_def_service_s sdp_service_pnp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_SPECIFICATION_ID , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_PRIMARY_RECORD , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .data = { .type = 0 } } }, }; | |||
934 | ATTRIBUTE(SVCPROV_PRIMARY, STRING("QEMU"))static struct sdp_def_service_s sdp_service_pnp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_SPECIFICATION_ID , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_PRIMARY_RECORD , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .data = { .type = 0 } } }, }; | |||
935 | ||||
936 | /* Profile specific */static struct sdp_def_service_s sdp_service_pnp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_SPECIFICATION_ID , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_PRIMARY_RECORD , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .data = { .type = 0 } } }, }; | |||
937 | ATTRIBUTE(SPECIFICATION_ID, UINT16(0x0100))static struct sdp_def_service_s sdp_service_pnp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_SPECIFICATION_ID , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_PRIMARY_RECORD , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .data = { .type = 0 } } }, }; | |||
938 | ATTRIBUTE(VERSION, UINT16(0x0100))static struct sdp_def_service_s sdp_service_pnp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_SPECIFICATION_ID , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_PRIMARY_RECORD , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .data = { .type = 0 } } }, }; | |||
939 | ATTRIBUTE(PRIMARY_RECORD, SDP_TRUE)static struct sdp_def_service_s sdp_service_pnp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_SPECIFICATION_ID , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_PRIMARY_RECORD , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .data = { .type = 0 } } }, }; | |||
940 | )static struct sdp_def_service_s sdp_service_pnp_s = { .attributes = { { .id = SDP_ATTR_RECORD_HANDLE, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 0, }, }, { .id = SDP_ATTR_SVCLASS_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_RECORD_STATE , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_4, .value.uint = 1, }, }, { .id = SDP_ATTR_PROTO_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = L2CAP_UUID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value .uint = BT_PSM_SDP, }, { .type = 0 } }, }, { .type = SDP_DTYPE_SEQ , .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = SDP_UUID, }, { . type = 0 } }, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_BROWSE_GRP_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = 0x1002, }, { .type = 0 } }, }, }, { .id = SDP_ATTR_LANG_BASE_ATTR_ID_LIST , .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x656e , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x006a , }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100 , }, { .type = 0 } }, }, }, { .id = SDP_ATTR_PFILE_DESC_LIST, .data = { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_SEQ, .value.list = (struct sdp_def_data_element_s []) { { .type = SDP_DTYPE_UUID | SDP_DSIZE_16, .value.uint = PNP_INFO_SVCLASS_ID, }, { .type = SDP_DTYPE_UINT | SDP_DSIZE_2 , .value.uint = 0x0100, }, { .type = 0 } }, }, { .type = 0 } } , }, }, { .id = SDP_ATTR_DOC_URL, .data = { .type = SDP_DTYPE_URL , .value.str = "http://bellard.org/qemu/user-doc.html", }, }, { .id = SDP_ATTR_SVCPROV_PRIMARY, .data = { .type = SDP_DTYPE_STRING , .value.str = "QEMU", }, }, { .id = SDP_ATTR_SPECIFICATION_ID , .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_VERSION, .data = { .type = SDP_DTYPE_UINT | SDP_DSIZE_2, .value.uint = 0x0100, }, }, { .id = SDP_ATTR_PRIMARY_RECORD , .data = { .type = SDP_DTYPE_BOOL | SDP_DSIZE_1, .value.uint = 1, }, }, { .data = { .type = 0 } } }, }; | |||
941 | ||||
942 | static int bt_l2cap_sdp_new_ch(struct bt_l2cap_device_s *dev, | |||
943 | struct bt_l2cap_conn_params_s *params) | |||
944 | { | |||
945 | struct bt_l2cap_sdp_state_s *sdp = g_malloc0(sizeof(*sdp)); | |||
946 | struct sdp_def_service_s *services[] = { | |||
947 | &sdp_service_sdp_s, | |||
948 | &sdp_service_hid_s, | |||
949 | &sdp_service_pnp_s, | |||
950 | NULL((void*)0), | |||
951 | }; | |||
952 | ||||
953 | sdp->channel = params; | |||
954 | sdp->channel->opaque = sdp; | |||
955 | sdp->channel->close = bt_l2cap_sdp_close_ch; | |||
956 | sdp->channel->sdu_in = bt_l2cap_sdp_sdu_in; | |||
957 | ||||
958 | sdp_service_db_build(sdp, services); | |||
959 | ||||
960 | return 0; | |||
961 | } | |||
962 | ||||
963 | void bt_l2cap_sdp_init(struct bt_l2cap_device_s *dev) | |||
964 | { | |||
965 | bt_l2cap_psm_register(dev, BT_PSM_SDP, | |||
966 | MAX_PDU_OUT_SIZE96, bt_l2cap_sdp_new_ch); | |||
967 | } |